iwlwifi: clean up last_phy_res

The last_phy_res[100] variable is used in an odd
way. The first byte of it is used as a flag, and
the rest as the data. Thus, the array need only
be 61 bytes, since it is just the flag and a
struct iwl_rx_phy_res (which is 60 bytes).

Clean this up by splitting the variable into two:
last_phy_res and last_phy_res_valid, using correct
types for both (struct and bool). While doing all
this also move the variables to the _agn part of
the hw-specific union since they only apply to
A-MPDUs.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
This commit is contained in:
Johannes Berg 2010-03-31 08:59:17 -07:00 committed by Reinette Chatre
parent 76c3c698bf
commit 05d5752027
2 changed files with 8 additions and 6 deletions

View File

@ -1001,11 +1001,11 @@ void iwlagn_rx_reply_rx(struct iwl_priv *priv,
phy_res->cfg_phy_cnt + len); phy_res->cfg_phy_cnt + len);
ampdu_status = le32_to_cpu(rx_pkt_status); ampdu_status = le32_to_cpu(rx_pkt_status);
} else { } else {
if (!priv->last_phy_res[0]) { if (!priv->_agn.last_phy_res_valid) {
IWL_ERR(priv, "MPDU frame without cached PHY data\n"); IWL_ERR(priv, "MPDU frame without cached PHY data\n");
return; return;
} }
phy_res = (struct iwl_rx_phy_res *)&priv->last_phy_res[1]; phy_res = &priv->_agn.last_phy_res;
amsdu = (struct iwl4965_rx_mpdu_res_start *)pkt->u.raw; amsdu = (struct iwl4965_rx_mpdu_res_start *)pkt->u.raw;
header = (struct ieee80211_hdr *)(pkt->u.raw + sizeof(*amsdu)); header = (struct ieee80211_hdr *)(pkt->u.raw + sizeof(*amsdu));
len = le16_to_cpu(amsdu->byte_count); len = le16_to_cpu(amsdu->byte_count);
@ -1094,10 +1094,10 @@ void iwlagn_rx_reply_rx(struct iwl_priv *priv,
/* Cache phy data (Rx signal strength, etc) for HT frame (REPLY_RX_PHY_CMD). /* Cache phy data (Rx signal strength, etc) for HT frame (REPLY_RX_PHY_CMD).
* This will be used later in iwl_rx_reply_rx() for REPLY_RX_MPDU_CMD. */ * This will be used later in iwl_rx_reply_rx() for REPLY_RX_MPDU_CMD. */
void iwlagn_rx_reply_rx_phy(struct iwl_priv *priv, void iwlagn_rx_reply_rx_phy(struct iwl_priv *priv,
struct iwl_rx_mem_buffer *rxb) struct iwl_rx_mem_buffer *rxb)
{ {
struct iwl_rx_packet *pkt = rxb_addr(rxb); struct iwl_rx_packet *pkt = rxb_addr(rxb);
priv->last_phy_res[0] = 1; priv->_agn.last_phy_res_valid = true;
memcpy(&priv->last_phy_res[1], &(pkt->u.raw[0]), memcpy(&priv->_agn.last_phy_res, pkt->u.raw,
sizeof(struct iwl_rx_phy_res)); sizeof(struct iwl_rx_phy_res));
} }

View File

@ -1120,7 +1120,6 @@ struct iwl_priv {
__le16 sensitivity_tbl[HD_TABLE_SIZE]; __le16 sensitivity_tbl[HD_TABLE_SIZE];
struct iwl_ht_config current_ht_config; struct iwl_ht_config current_ht_config;
u8 last_phy_res[100];
/* Rate scaling data */ /* Rate scaling data */
u8 retry_rate; u8 retry_rate;
@ -1237,6 +1236,9 @@ struct iwl_priv {
* no AGGREGATION * no AGGREGATION
*/ */
u8 agg_tids_count; u8 agg_tids_count;
struct iwl_rx_phy_res last_phy_res;
bool last_phy_res_valid;
} _agn; } _agn;
#endif #endif
}; };