wcn36xx: let device generate qos seq numbers
authorBob Copeland <me@bobcopeland.com>
Fri, 9 Jan 2015 19:15:47 +0000 (14:15 -0500)
committerKalle Valo <kvalo@codeaurora.org>
Fri, 23 Jan 2015 17:11:58 +0000 (19:11 +0200)
wcn36xx currently sends an incorrect sequence number into the BA session
setup firmware command: it should be saving or updating the ssn in the
TX_START ampdu_action callback instead of waiting until TX_OPERATIONAL.
However, we can sidestep the issue by letting the hardware generate the
sequence numbers for QoS frames, as is done in prima, so do that.

Signed-off-by: Bob Copeland <me@bobcopeland.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ath/wcn36xx/txrx.c
drivers/net/wireless/ath/wcn36xx/txrx.h

index f701873..277bc39 100644 (file)
@@ -93,6 +93,7 @@ static void wcn36xx_set_tx_pdu(struct wcn36xx_tx_bd *bd,
                bd->pdu.mpdu_header_off;
        bd->pdu.mpdu_len = len;
        bd->pdu.tid = tid;
+       bd->pdu.bd_ssn = WCN36XX_TXBD_SSN_FILL_DPU_QOS;
 }
 
 static inline struct wcn36xx_vif *get_vif_by_addr(struct wcn36xx *wcn,
index bbfbcf8..032216e 100644 (file)
 #define WCN36XX_BD_RATE_MGMT 2
 #define WCN36XX_BD_RATE_CTRL 3
 
+enum wcn36xx_txbd_ssn_type {
+       WCN36XX_TXBD_SSN_FILL_HOST = 0,
+       WCN36XX_TXBD_SSN_FILL_DPU_NON_QOS = 1,
+       WCN36XX_TXBD_SSN_FILL_DPU_QOS = 2,
+};
+
 struct wcn36xx_pdu {
        u32     dpu_fb:8;
        u32     adu_fb:8;
@@ -50,7 +56,8 @@ struct wcn36xx_pdu {
        /* 0x0c*/
        u32     reserved4:8;
        u32     tid:4;
-       u32     reserved3:4;
+       u32     bd_ssn:2;
+       u32     reserved3:2;
        u32     mpdu_len:16;
 };