summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/carl9170/fw.c
diff options
context:
space:
mode:
authorChristian Lamparter <chunkeey@googlemail.com>2011-01-23 00:18:28 +0100
committerJohn W. Linville <linville@tuxdriver.com>2011-01-27 16:03:56 -0500
commitaa32452dcff1f95976fb28b5a28ecc93f47d0472 (patch)
treed5f92b88218125acb51e17b21af489b9aee4bd2e /drivers/net/wireless/ath/carl9170/fw.c
parentc42d6cf25d648d95387d8a881aa0cab657470726 (diff)
downloadblackbird-obmc-linux-aa32452dcff1f95976fb28b5a28ecc93f47d0472.tar.gz
blackbird-obmc-linux-aa32452dcff1f95976fb28b5a28ecc93f47d0472.zip
carl9170: utilize fw seq counter for mgmt/non-QoS data frames
"mac80211 will properly assign sequence numbers to QoS-data frames but cannot do so correctly for non-QoS-data and management frames because beacons need them from that counter as well and mac80211 cannot guarantee proper sequencing." Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/carl9170/fw.c')
-rw-r--r--drivers/net/wireless/ath/carl9170/fw.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/carl9170/fw.c b/drivers/net/wireless/ath/carl9170/fw.c
index a4e5b4458c00..9517ede9e2df 100644
--- a/drivers/net/wireless/ath/carl9170/fw.c
+++ b/drivers/net/wireless/ath/carl9170/fw.c
@@ -150,6 +150,7 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len)
const struct carl9170fw_otus_desc *otus_desc;
const struct carl9170fw_chk_desc *chk_desc;
const struct carl9170fw_last_desc *last_desc;
+ const struct carl9170fw_txsq_desc *txsq_desc;
last_desc = carl9170_fw_find_desc(ar, LAST_MAGIC,
sizeof(*last_desc), CARL9170FW_LAST_DESC_CUR_VER);
@@ -299,6 +300,17 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len)
}
}
+ txsq_desc = carl9170_fw_find_desc(ar, TXSQ_MAGIC,
+ sizeof(*txsq_desc), CARL9170FW_TXSQ_DESC_CUR_VER);
+
+ if (txsq_desc) {
+ ar->fw.tx_seq_table = le32_to_cpu(txsq_desc->seq_table_addr);
+ if (!valid_cpu_addr(ar->fw.tx_seq_table))
+ return -EINVAL;
+ } else {
+ ar->fw.tx_seq_table = 0;
+ }
+
#undef SUPPORTED
return 0;
}
OpenPOWER on IntegriCloud