aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-4965.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-4965.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965.c23
1 files changed, 8 insertions, 15 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index 4d47dd7acc15..3f24e979731b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -3204,10 +3204,7 @@ static u16 iwl4965_build_addsta_hcmd(const struct iwl_addsta_cmd *cmd, u8 *data)
3204 3204
3205static inline u32 iwl4965_get_scd_ssn(struct iwl4965_tx_resp *tx_resp) 3205static inline u32 iwl4965_get_scd_ssn(struct iwl4965_tx_resp *tx_resp)
3206{ 3206{
3207 __le32 *scd_ssn = (__le32 *)((u32 *)&tx_resp->status + 3207 return le32_to_cpup(&tx_resp->u.status + tx_resp->frame_count) & MAX_SN;
3208 tx_resp->frame_count);
3209 return le32_to_cpu(*scd_ssn) & MAX_SN;
3210
3211} 3208}
3212 3209
3213/** 3210/**
@@ -3215,15 +3212,14 @@ static inline u32 iwl4965_get_scd_ssn(struct iwl4965_tx_resp *tx_resp)
3215 */ 3212 */
3216static int iwl4965_tx_status_reply_tx(struct iwl_priv *priv, 3213static int iwl4965_tx_status_reply_tx(struct iwl_priv *priv,
3217 struct iwl_ht_agg *agg, 3214 struct iwl_ht_agg *agg,
3218 struct iwl4965_tx_resp_agg *tx_resp, 3215 struct iwl4965_tx_resp *tx_resp,
3219 u16 start_idx) 3216 int txq_id, u16 start_idx)
3220{ 3217{
3221 u16 status; 3218 u16 status;
3222 struct agg_tx_status *frame_status = &tx_resp->status; 3219 struct agg_tx_status *frame_status = tx_resp->u.agg_status;
3223 struct ieee80211_tx_info *info = NULL; 3220 struct ieee80211_tx_info *info = NULL;
3224 struct ieee80211_hdr *hdr = NULL; 3221 struct ieee80211_hdr *hdr = NULL;
3225 int i, sh; 3222 int i, sh, idx;
3226 int txq_id, idx;
3227 u16 seq; 3223 u16 seq;
3228 3224
3229 if (agg->wait_for_ba) 3225 if (agg->wait_for_ba)
@@ -3238,9 +3234,7 @@ static int iwl4965_tx_status_reply_tx(struct iwl_priv *priv,
3238 if (agg->frame_count == 1) { 3234 if (agg->frame_count == 1) {
3239 /* Only one frame was attempted; no block-ack will arrive */ 3235 /* Only one frame was attempted; no block-ack will arrive */
3240 status = le16_to_cpu(frame_status[0].status); 3236 status = le16_to_cpu(frame_status[0].status);
3241 seq = le16_to_cpu(frame_status[0].sequence); 3237 idx = start_idx;
3242 idx = SEQ_TO_INDEX(seq);
3243 txq_id = SEQ_TO_QUEUE(seq);
3244 3238
3245 /* FIXME: code repetition */ 3239 /* FIXME: code repetition */
3246 IWL_DEBUG_TX_REPLY("FrameCnt = %d, StartIdx=%d idx=%d\n", 3240 IWL_DEBUG_TX_REPLY("FrameCnt = %d, StartIdx=%d idx=%d\n",
@@ -3341,7 +3335,7 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv,
3341 struct iwl_tx_queue *txq = &priv->txq[txq_id]; 3335 struct iwl_tx_queue *txq = &priv->txq[txq_id];
3342 struct ieee80211_tx_info *info; 3336 struct ieee80211_tx_info *info;
3343 struct iwl4965_tx_resp *tx_resp = (void *)&pkt->u.raw[0]; 3337 struct iwl4965_tx_resp *tx_resp = (void *)&pkt->u.raw[0];
3344 u32 status = le32_to_cpu(tx_resp->status); 3338 u32 status = le32_to_cpu(tx_resp->u.status);
3345 int tid = MAX_TID_COUNT, sta_id = IWL_INVALID_STATION; 3339 int tid = MAX_TID_COUNT, sta_id = IWL_INVALID_STATION;
3346 u16 fc; 3340 u16 fc;
3347 struct ieee80211_hdr *hdr; 3341 struct ieee80211_hdr *hdr;
@@ -3380,8 +3374,7 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv,
3380 3374
3381 agg = &priv->stations[sta_id].tid[tid].agg; 3375 agg = &priv->stations[sta_id].tid[tid].agg;
3382 3376
3383 iwl4965_tx_status_reply_tx(priv, agg, 3377 iwl4965_tx_status_reply_tx(priv, agg, tx_resp, txq_id, index);
3384 (struct iwl4965_tx_resp_agg *)tx_resp, index);
3385 3378
3386 if ((tx_resp->frame_count == 1) && !iwl_is_tx_success(status)) { 3379 if ((tx_resp->frame_count == 1) && !iwl_is_tx_success(status)) {
3387 /* TODO: send BAR */ 3380 /* TODO: send BAR */