diff options
author | Harvey Harrison <harvey.harrison@gmail.com> | 2008-06-11 17:21:56 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-06-14 12:18:12 -0400 |
commit | fd7c8a40b2a63863f749e4d17f0d94d2e5ab1331 (patch) | |
tree | 098e07d68b4d1e7a6c02750db480204c0dd469d5 /drivers/net/wireless/iwlwifi/iwl-4965-rs.c | |
parent | e36cfdc9b17fa64245ee6206287e5120e59bbfca (diff) |
mac80211: add helpers for frame control testing
A few general categories:
1) ieee80211_has_* tests if particular fctl bits are set, the helpers are de
in the same order as the fctl defines:
A combined _has_a4 was also added to test when both FROMDS and TODS are set.
2) ieee80211_is_* is meant to test whether the frame control is of a certain
ftype - data, mgmt, ctl, and two special helpers _is_data_qos, _is_data_pres
which also test a subset of the stype space.
When testing for a particular stype applicable only to one ftype, functions
like ieee80211_is_ack have been added. Note that the ftype is also being
checked in these helpers. They have been added for all mgmt and ctl stypes
in the same order as the STYPE defines.
3) ieee80211_get_* is meant to take a struct ieee80211_hdr * and returns a
pointer to somewhere in the struct, see get_SA, get_DA, get_qos_ctl.
The intel wireless drivers had helpers that used this namespace, convert the
all to use the new helpers and remove the byteshifting as they were defined
in cpu-order rather than little-endian.
Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-4965-rs.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-4965-rs.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c index d601d31e0de9..202303117285 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c | |||
@@ -281,11 +281,11 @@ static u8 rs_tl_add_packet(struct iwl4965_lq_sta *lq_data, | |||
281 | u32 time_diff; | 281 | u32 time_diff; |
282 | s32 index; | 282 | s32 index; |
283 | struct iwl4965_traffic_load *tl = NULL; | 283 | struct iwl4965_traffic_load *tl = NULL; |
284 | u16 fc = le16_to_cpu(hdr->frame_control); | 284 | __le16 fc = hdr->frame_control; |
285 | u8 tid; | 285 | u8 tid; |
286 | 286 | ||
287 | if (ieee80211_is_qos_data(fc)) { | 287 | if (ieee80211_is_data_qos(fc)) { |
288 | u8 *qc = ieee80211_get_qos_ctrl(hdr, ieee80211_get_hdrlen(fc)); | 288 | u8 *qc = ieee80211_get_qos_ctl(hdr); |
289 | tid = qc[0] & 0xf; | 289 | tid = qc[0] & 0xf; |
290 | } else | 290 | } else |
291 | return MAX_TID_COUNT; | 291 | return MAX_TID_COUNT; |
@@ -794,7 +794,7 @@ static void rs_tx_status(void *priv_rate, struct net_device *dev, | |||
794 | struct iwl4965_scale_tbl_info tbl_type; | 794 | struct iwl4965_scale_tbl_info tbl_type; |
795 | struct iwl4965_scale_tbl_info *curr_tbl, *search_tbl; | 795 | struct iwl4965_scale_tbl_info *curr_tbl, *search_tbl; |
796 | u8 active_index = 0; | 796 | u8 active_index = 0; |
797 | u16 fc = le16_to_cpu(hdr->frame_control); | 797 | __le16 fc = hdr->frame_control; |
798 | s32 tpt = 0; | 798 | s32 tpt = 0; |
799 | 799 | ||
800 | IWL_DEBUG_RATE_LIMIT("get frame ack response, update rate scale window\n"); | 800 | IWL_DEBUG_RATE_LIMIT("get frame ack response, update rate scale window\n"); |
@@ -1651,7 +1651,8 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, | |||
1651 | int high_tpt = IWL_INVALID_VALUE; | 1651 | int high_tpt = IWL_INVALID_VALUE; |
1652 | u32 fail_count; | 1652 | u32 fail_count; |
1653 | s8 scale_action = 0; | 1653 | s8 scale_action = 0; |
1654 | u16 fc, rate_mask; | 1654 | __le16 fc; |
1655 | u16 rate_mask; | ||
1655 | u8 update_lq = 0; | 1656 | u8 update_lq = 0; |
1656 | struct iwl4965_lq_sta *lq_sta; | 1657 | struct iwl4965_lq_sta *lq_sta; |
1657 | struct iwl4965_scale_tbl_info *tbl, *tbl1; | 1658 | struct iwl4965_scale_tbl_info *tbl, *tbl1; |
@@ -1666,7 +1667,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, | |||
1666 | 1667 | ||
1667 | IWL_DEBUG_RATE("rate scale calculate new rate for skb\n"); | 1668 | IWL_DEBUG_RATE("rate scale calculate new rate for skb\n"); |
1668 | 1669 | ||
1669 | fc = le16_to_cpu(hdr->frame_control); | 1670 | fc = hdr->frame_control; |
1670 | if (!ieee80211_is_data(fc) || is_multicast_ether_addr(hdr->addr1)) { | 1671 | if (!ieee80211_is_data(fc) || is_multicast_ether_addr(hdr->addr1)) { |
1671 | /* Send management frames and broadcast/multicast data using | 1672 | /* Send management frames and broadcast/multicast data using |
1672 | * lowest rate. */ | 1673 | * lowest rate. */ |
@@ -2100,7 +2101,7 @@ static void rs_get_rate(void *priv_rate, struct net_device *dev, | |||
2100 | struct ieee80211_conf *conf = &local->hw.conf; | 2101 | struct ieee80211_conf *conf = &local->hw.conf; |
2101 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; | 2102 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; |
2102 | struct sta_info *sta; | 2103 | struct sta_info *sta; |
2103 | u16 fc; | 2104 | __le16 fc; |
2104 | struct iwl_priv *priv = (struct iwl_priv *)priv_rate; | 2105 | struct iwl_priv *priv = (struct iwl_priv *)priv_rate; |
2105 | struct iwl4965_lq_sta *lq_sta; | 2106 | struct iwl4965_lq_sta *lq_sta; |
2106 | 2107 | ||
@@ -2112,7 +2113,7 @@ static void rs_get_rate(void *priv_rate, struct net_device *dev, | |||
2112 | 2113 | ||
2113 | /* Send management frames and broadcast/multicast data using lowest | 2114 | /* Send management frames and broadcast/multicast data using lowest |
2114 | * rate. */ | 2115 | * rate. */ |
2115 | fc = le16_to_cpu(hdr->frame_control); | 2116 | fc = hdr->frame_control; |
2116 | if (!ieee80211_is_data(fc) || is_multicast_ether_addr(hdr->addr1) || | 2117 | if (!ieee80211_is_data(fc) || is_multicast_ether_addr(hdr->addr1) || |
2117 | !sta || !sta->rate_ctrl_priv) { | 2118 | !sta || !sta->rate_ctrl_priv) { |
2118 | sel->rate_idx = rate_lowest_index(local, sband, sta); | 2119 | sel->rate_idx = rate_lowest_index(local, sband, sta); |