]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
Merge ath-next from git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
authorKalle Valo <kvalo@codeaurora.org>
Wed, 23 May 2018 07:42:08 +0000 (10:42 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Wed, 23 May 2018 07:42:08 +0000 (10:42 +0300)
ath.git patches for 4.18. Major changes:

ath10k

* add quiet mode support for QCA6174/QCA9377

wil6210

* disable WIL6210_TRACING kconfig option by default

23 files changed:
drivers/net/wireless/ath/ath10k/debug.c
drivers/net/wireless/ath/ath10k/debugfs_sta.c
drivers/net/wireless/ath/ath10k/hw.h
drivers/net/wireless/ath/ath10k/mac.c
drivers/net/wireless/ath/ath10k/rx_desc.h
drivers/net/wireless/ath/ath10k/sdio.c
drivers/net/wireless/ath/ath10k/snoc.c
drivers/net/wireless/ath/ath10k/wmi-tlv.c
drivers/net/wireless/ath/ath10k/wmi-tlv.h
drivers/net/wireless/ath/ath10k/wmi.c
drivers/net/wireless/ath/ath10k/wmi.h
drivers/net/wireless/ath/ath6kl/core.h
drivers/net/wireless/ath/ath6kl/txrx.c
drivers/net/wireless/ath/wil6210/Kconfig
drivers/net/wireless/ath/wil6210/cfg80211.c
drivers/net/wireless/ath/wil6210/debugfs.c
drivers/net/wireless/ath/wil6210/main.c
drivers/net/wireless/ath/wil6210/netdev.c
drivers/net/wireless/ath/wil6210/rx_reorder.c
drivers/net/wireless/ath/wil6210/txrx.c
drivers/net/wireless/ath/wil6210/wil6210.h
drivers/net/wireless/ath/wil6210/wmi.c
drivers/net/wireless/ath/wil6210/wmi.h

index bac832ce1873f9958cb2ef36168104a08d7b482a..0d98c93a3abaef15bca612fadb989940338ca50d 100644 (file)
@@ -987,13 +987,13 @@ static ssize_t ath10k_write_htt_max_amsdu_ampdu(struct file *file,
 {
        struct ath10k *ar = file->private_data;
        int res;
-       char buf[64];
+       char buf[64] = {0};
        unsigned int amsdu, ampdu;
 
-       simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count);
-
-       /* make sure that buf is null terminated */
-       buf[sizeof(buf) - 1] = 0;
+       res = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos,
+                                    user_buf, count);
+       if (res <= 0)
+               return res;
 
        res = sscanf(buf, "%u %u", &amsdu, &ampdu);
 
@@ -1043,14 +1043,14 @@ static ssize_t ath10k_write_fw_dbglog(struct file *file,
 {
        struct ath10k *ar = file->private_data;
        int ret;
-       char buf[96];
+       char buf[96] = {0};
        unsigned int log_level;
        u64 mask;
 
-       simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count);
-
-       /* make sure that buf is null terminated */
-       buf[sizeof(buf) - 1] = 0;
+       ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos,
+                                    user_buf, count);
+       if (ret <= 0)
+               return ret;
 
        ret = sscanf(buf, "%llx %u", &mask, &log_level);
 
@@ -1519,7 +1519,13 @@ static void ath10k_tpc_stats_print(struct ath10k_tpc_stats *tpc_stats,
        *len += scnprintf(buf + *len, buf_len - *len,
                          "********************************\n");
        *len += scnprintf(buf + *len, buf_len - *len,
-                         "No.  Preamble Rate_code tpc_value1 tpc_value2 tpc_value3\n");
+                         "No.  Preamble Rate_code ");
+
+       for (i = 0; i < WMI_TPC_TX_N_CHAIN; i++)
+               *len += scnprintf(buf + *len, buf_len - *len,
+                                 "tpc_value%d ", i);
+
+       *len += scnprintf(buf + *len, buf_len - *len, "\n");
 
        for (i = 0; i < tpc_stats->rate_max; i++) {
                *len += scnprintf(buf + *len, buf_len - *len,
index 8f688f136c225259c16f844c91b459c37506a577..a63c97e2c50c5d29915b334d2937eca5b3892601 100644 (file)
@@ -254,12 +254,12 @@ static ssize_t ath10k_dbg_sta_write_addba(struct file *file,
        struct ath10k *ar = arsta->arvif->ar;
        u32 tid, buf_size;
        int ret;
-       char buf[64];
+       char buf[64] = {0};
 
-       simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count);
-
-       /* make sure that buf is null terminated */
-       buf[sizeof(buf) - 1] = '\0';
+       ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos,
+                                    user_buf, count);
+       if (ret <= 0)
+               return ret;
 
        ret = sscanf(buf, "%u %u", &tid, &buf_size);
        if (ret != 2)
@@ -305,12 +305,12 @@ static ssize_t ath10k_dbg_sta_write_addba_resp(struct file *file,
        struct ath10k *ar = arsta->arvif->ar;
        u32 tid, status;
        int ret;
-       char buf[64];
-
-       simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count);
+       char buf[64] = {0};
 
-       /* make sure that buf is null terminated */
-       buf[sizeof(buf) - 1] = '\0';
+       ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos,
+                                    user_buf, count);
+       if (ret <= 0)
+               return ret;
 
        ret = sscanf(buf, "%u %u", &tid, &status);
        if (ret != 2)
@@ -355,12 +355,12 @@ static ssize_t ath10k_dbg_sta_write_delba(struct file *file,
        struct ath10k *ar = arsta->arvif->ar;
        u32 tid, initiator, reason;
        int ret;
-       char buf[64];
-
-       simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count);
+       char buf[64] = {0};
 
-       /* make sure that buf is null terminated */
-       buf[sizeof(buf) - 1] = '\0';
+       ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos,
+                                    user_buf, count);
+       if (ret <= 0)
+               return ret;
 
        ret = sscanf(buf, "%u %u %u", &tid, &initiator, &reason);
        if (ret != 3)
index b8bdabe7307340c8b75af9c9dec3f1dd7c1690d1..23467e9fefeb012214749816d409d56e37c50b8e 100644 (file)
@@ -85,11 +85,11 @@ enum qca9377_chip_id_rev {
        QCA9377_HW_1_1_CHIP_ID_REV = 0x1,
 };
 
-#define QCA6174_HW_2_1_FW_DIR          "ath10k/QCA6174/hw2.1"
+#define QCA6174_HW_2_1_FW_DIR          ATH10K_FW_DIR "/QCA6174/hw2.1"
 #define QCA6174_HW_2_1_BOARD_DATA_FILE "board.bin"
 #define QCA6174_HW_2_1_PATCH_LOAD_ADDR 0x1234
 
-#define QCA6174_HW_3_0_FW_DIR          "ath10k/QCA6174/hw3.0"
+#define QCA6174_HW_3_0_FW_DIR          ATH10K_FW_DIR "/QCA6174/hw3.0"
 #define QCA6174_HW_3_0_BOARD_DATA_FILE "board.bin"
 #define QCA6174_HW_3_0_PATCH_LOAD_ADDR 0x1234
 
index 3d7119ad7c7af23a8e88faf0c344eb580a6f9227..487a7a7380fde0bbe946f3722141a84d022a12b4 100644 (file)
@@ -4290,7 +4290,7 @@ static void ath10k_mac_op_wake_tx_queue(struct ieee80211_hw *hw,
 
        while (ath10k_mac_tx_can_push(hw, f_txq) && max--) {
                ret = ath10k_mac_tx_push_txq(hw, f_txq);
-               if (ret)
+               if (ret < 0)
                        break;
        }
        if (ret != -ENOENT)
index 545deb6d7af13506570a0e83abf1f6407f9a2ef0..ea4075d456fadbdec0e8e1970ff1321eb364f4a6 100644 (file)
 #ifndef _RX_DESC_H_
 #define _RX_DESC_H_
 
+#include <linux/bitops.h>
+
 enum rx_attention_flags {
-       RX_ATTENTION_FLAGS_FIRST_MPDU          = 1 << 0,
-       RX_ATTENTION_FLAGS_LAST_MPDU           = 1 << 1,
-       RX_ATTENTION_FLAGS_MCAST_BCAST         = 1 << 2,
-       RX_ATTENTION_FLAGS_PEER_IDX_INVALID    = 1 << 3,
-       RX_ATTENTION_FLAGS_PEER_IDX_TIMEOUT    = 1 << 4,
-       RX_ATTENTION_FLAGS_POWER_MGMT          = 1 << 5,
-       RX_ATTENTION_FLAGS_NON_QOS             = 1 << 6,
-       RX_ATTENTION_FLAGS_NULL_DATA           = 1 << 7,
-       RX_ATTENTION_FLAGS_MGMT_TYPE           = 1 << 8,
-       RX_ATTENTION_FLAGS_CTRL_TYPE           = 1 << 9,
-       RX_ATTENTION_FLAGS_MORE_DATA           = 1 << 10,
-       RX_ATTENTION_FLAGS_EOSP                = 1 << 11,
-       RX_ATTENTION_FLAGS_U_APSD_TRIGGER      = 1 << 12,
-       RX_ATTENTION_FLAGS_FRAGMENT            = 1 << 13,
-       RX_ATTENTION_FLAGS_ORDER               = 1 << 14,
-       RX_ATTENTION_FLAGS_CLASSIFICATION      = 1 << 15,
-       RX_ATTENTION_FLAGS_OVERFLOW_ERR        = 1 << 16,
-       RX_ATTENTION_FLAGS_MSDU_LENGTH_ERR     = 1 << 17,
-       RX_ATTENTION_FLAGS_TCP_UDP_CHKSUM_FAIL = 1 << 18,
-       RX_ATTENTION_FLAGS_IP_CHKSUM_FAIL      = 1 << 19,
-       RX_ATTENTION_FLAGS_SA_IDX_INVALID      = 1 << 20,
-       RX_ATTENTION_FLAGS_DA_IDX_INVALID      = 1 << 21,
-       RX_ATTENTION_FLAGS_SA_IDX_TIMEOUT      = 1 << 22,
-       RX_ATTENTION_FLAGS_DA_IDX_TIMEOUT      = 1 << 23,
-       RX_ATTENTION_FLAGS_ENCRYPT_REQUIRED    = 1 << 24,
-       RX_ATTENTION_FLAGS_DIRECTED            = 1 << 25,
-       RX_ATTENTION_FLAGS_BUFFER_FRAGMENT     = 1 << 26,
-       RX_ATTENTION_FLAGS_MPDU_LENGTH_ERR     = 1 << 27,
-       RX_ATTENTION_FLAGS_TKIP_MIC_ERR        = 1 << 28,
-       RX_ATTENTION_FLAGS_DECRYPT_ERR         = 1 << 29,
-       RX_ATTENTION_FLAGS_FCS_ERR             = 1 << 30,
-       RX_ATTENTION_FLAGS_MSDU_DONE           = 1 << 31,
+       RX_ATTENTION_FLAGS_FIRST_MPDU          = BIT(0),
+       RX_ATTENTION_FLAGS_LAST_MPDU           = BIT(1),
+       RX_ATTENTION_FLAGS_MCAST_BCAST         = BIT(2),
+       RX_ATTENTION_FLAGS_PEER_IDX_INVALID    = BIT(3),
+       RX_ATTENTION_FLAGS_PEER_IDX_TIMEOUT    = BIT(4),
+       RX_ATTENTION_FLAGS_POWER_MGMT          = BIT(5),
+       RX_ATTENTION_FLAGS_NON_QOS             = BIT(6),
+       RX_ATTENTION_FLAGS_NULL_DATA           = BIT(7),
+       RX_ATTENTION_FLAGS_MGMT_TYPE           = BIT(8),
+       RX_ATTENTION_FLAGS_CTRL_TYPE           = BIT(9),
+       RX_ATTENTION_FLAGS_MORE_DATA           = BIT(10),
+       RX_ATTENTION_FLAGS_EOSP                = BIT(11),
+       RX_ATTENTION_FLAGS_U_APSD_TRIGGER      = BIT(12),
+       RX_ATTENTION_FLAGS_FRAGMENT            = BIT(13),
+       RX_ATTENTION_FLAGS_ORDER               = BIT(14),
+       RX_ATTENTION_FLAGS_CLASSIFICATION      = BIT(15),
+       RX_ATTENTION_FLAGS_OVERFLOW_ERR        = BIT(16),
+       RX_ATTENTION_FLAGS_MSDU_LENGTH_ERR     = BIT(17),
+       RX_ATTENTION_FLAGS_TCP_UDP_CHKSUM_FAIL = BIT(18),
+       RX_ATTENTION_FLAGS_IP_CHKSUM_FAIL      = BIT(19),
+       RX_ATTENTION_FLAGS_SA_IDX_INVALID      = BIT(20),
+       RX_ATTENTION_FLAGS_DA_IDX_INVALID      = BIT(21),
+       RX_ATTENTION_FLAGS_SA_IDX_TIMEOUT      = BIT(22),
+       RX_ATTENTION_FLAGS_DA_IDX_TIMEOUT      = BIT(23),
+       RX_ATTENTION_FLAGS_ENCRYPT_REQUIRED    = BIT(24),
+       RX_ATTENTION_FLAGS_DIRECTED            = BIT(25),
+       RX_ATTENTION_FLAGS_BUFFER_FRAGMENT     = BIT(26),
+       RX_ATTENTION_FLAGS_MPDU_LENGTH_ERR     = BIT(27),
+       RX_ATTENTION_FLAGS_TKIP_MIC_ERR        = BIT(28),
+       RX_ATTENTION_FLAGS_DECRYPT_ERR         = BIT(29),
+       RX_ATTENTION_FLAGS_FCS_ERR             = BIT(30),
+       RX_ATTENTION_FLAGS_MSDU_DONE           = BIT(31),
 };
 
 struct rx_attention {
@@ -254,15 +256,15 @@ enum htt_rx_mpdu_encrypt_type {
 #define RX_MPDU_START_INFO0_SEQ_NUM_LSB       16
 #define RX_MPDU_START_INFO0_ENCRYPT_TYPE_MASK 0xf0000000
 #define RX_MPDU_START_INFO0_ENCRYPT_TYPE_LSB  28
-#define RX_MPDU_START_INFO0_FROM_DS           (1 << 11)
-#define RX_MPDU_START_INFO0_TO_DS             (1 << 12)
-#define RX_MPDU_START_INFO0_ENCRYPTED         (1 << 13)
-#define RX_MPDU_START_INFO0_RETRY             (1 << 14)
-#define RX_MPDU_START_INFO0_TXBF_H_INFO       (1 << 15)
+#define RX_MPDU_START_INFO0_FROM_DS           BIT(11)
+#define RX_MPDU_START_INFO0_TO_DS             BIT(12)
+#define RX_MPDU_START_INFO0_ENCRYPTED         BIT(13)
+#define RX_MPDU_START_INFO0_RETRY             BIT(14)
+#define RX_MPDU_START_INFO0_TXBF_H_INFO       BIT(15)
 
 #define RX_MPDU_START_INFO1_TID_MASK 0xf0000000
 #define RX_MPDU_START_INFO1_TID_LSB  28
-#define RX_MPDU_START_INFO1_DIRECTED (1 << 16)
+#define RX_MPDU_START_INFO1_DIRECTED BIT(16)
 
 struct rx_mpdu_start {
        __le32 info0;
@@ -357,13 +359,13 @@ struct rx_mpdu_start {
 #define RX_MPDU_END_INFO0_RESERVED_0_LSB      0
 #define RX_MPDU_END_INFO0_POST_DELIM_CNT_MASK 0x0fff0000
 #define RX_MPDU_END_INFO0_POST_DELIM_CNT_LSB  16
-#define RX_MPDU_END_INFO0_OVERFLOW_ERR        (1 << 13)
-#define RX_MPDU_END_INFO0_LAST_MPDU           (1 << 14)
-#define RX_MPDU_END_INFO0_POST_DELIM_ERR      (1 << 15)
-#define RX_MPDU_END_INFO0_MPDU_LENGTH_ERR     (1 << 28)
-#define RX_MPDU_END_INFO0_TKIP_MIC_ERR        (1 << 29)
-#define RX_MPDU_END_INFO0_DECRYPT_ERR         (1 << 30)
-#define RX_MPDU_END_INFO0_FCS_ERR             (1 << 31)
+#define RX_MPDU_END_INFO0_OVERFLOW_ERR        BIT(13)
+#define RX_MPDU_END_INFO0_LAST_MPDU           BIT(14)
+#define RX_MPDU_END_INFO0_POST_DELIM_ERR      BIT(15)
+#define RX_MPDU_END_INFO0_MPDU_LENGTH_ERR     BIT(28)
+#define RX_MPDU_END_INFO0_TKIP_MIC_ERR        BIT(29)
+#define RX_MPDU_END_INFO0_DECRYPT_ERR         BIT(30)
+#define RX_MPDU_END_INFO0_FCS_ERR             BIT(31)
 
 struct rx_mpdu_end {
        __le32 info0;
@@ -422,12 +424,12 @@ struct rx_mpdu_end {
 #define RX_MSDU_START_INFO1_DECAP_FORMAT_LSB    8
 #define RX_MSDU_START_INFO1_SA_IDX_MASK         0x07ff0000
 #define RX_MSDU_START_INFO1_SA_IDX_LSB          16
-#define RX_MSDU_START_INFO1_IPV4_PROTO          (1 << 10)
-#define RX_MSDU_START_INFO1_IPV6_PROTO          (1 << 11)
-#define RX_MSDU_START_INFO1_TCP_PROTO           (1 << 12)
-#define RX_MSDU_START_INFO1_UDP_PROTO           (1 << 13)
-#define RX_MSDU_START_INFO1_IP_FRAG             (1 << 14)
-#define RX_MSDU_START_INFO1_TCP_ONLY_ACK        (1 << 15)
+#define RX_MSDU_START_INFO1_IPV4_PROTO          BIT(10)
+#define RX_MSDU_START_INFO1_IPV6_PROTO          BIT(11)
+#define RX_MSDU_START_INFO1_TCP_PROTO           BIT(12)
+#define RX_MSDU_START_INFO1_UDP_PROTO           BIT(13)
+#define RX_MSDU_START_INFO1_IP_FRAG             BIT(14)
+#define RX_MSDU_START_INFO1_TCP_ONLY_ACK        BIT(15)
 
 #define RX_MSDU_START_INFO2_DA_IDX_MASK         0x000007ff
 #define RX_MSDU_START_INFO2_DA_IDX_LSB          0
@@ -568,10 +570,10 @@ struct rx_msdu_start {
 
 #define RX_MSDU_END_INFO0_REPORTED_MPDU_LENGTH_MASK 0x00003fff
 #define RX_MSDU_END_INFO0_REPORTED_MPDU_LENGTH_LSB  0
-#define RX_MSDU_END_INFO0_FIRST_MSDU                (1 << 14)
-#define RX_MSDU_END_INFO0_LAST_MSDU                 (1 << 15)
-#define RX_MSDU_END_INFO0_PRE_DELIM_ERR             (1 << 30)
-#define RX_MSDU_END_INFO0_RESERVED_3B               (1 << 31)
+#define RX_MSDU_END_INFO0_FIRST_MSDU                BIT(14)
+#define RX_MSDU_END_INFO0_LAST_MSDU                 BIT(15)
+#define RX_MSDU_END_INFO0_PRE_DELIM_ERR             BIT(30)
+#define RX_MSDU_END_INFO0_RESERVED_3B               BIT(31)
 
 struct rx_msdu_end_common {
        __le16 ip_hdr_cksum;
@@ -691,7 +693,7 @@ struct rx_msdu_end {
 #define HTT_RX_PPDU_START_PREAMBLE_VHT           0x0C
 #define HTT_RX_PPDU_START_PREAMBLE_VHT_WITH_TXBF 0x0D
 
-#define RX_PPDU_START_INFO0_IS_GREENFIELD (1 << 0)
+#define RX_PPDU_START_INFO0_IS_GREENFIELD BIT(0)
 
 #define RX_PPDU_START_INFO1_L_SIG_RATE_MASK    0x0000000f
 #define RX_PPDU_START_INFO1_L_SIG_RATE_LSB     0
@@ -701,15 +703,15 @@ struct rx_msdu_end {
 #define RX_PPDU_START_INFO1_L_SIG_TAIL_LSB     18
 #define RX_PPDU_START_INFO1_PREAMBLE_TYPE_MASK 0xff000000
 #define RX_PPDU_START_INFO1_PREAMBLE_TYPE_LSB  24
-#define RX_PPDU_START_INFO1_L_SIG_RATE_SELECT  (1 << 4)
-#define RX_PPDU_START_INFO1_L_SIG_PARITY       (1 << 17)
+#define RX_PPDU_START_INFO1_L_SIG_RATE_SELECT  BIT(4)
+#define RX_PPDU_START_INFO1_L_SIG_PARITY       BIT(17)
 
 #define RX_PPDU_START_INFO2_HT_SIG_VHT_SIG_A_1_MASK 0x00ffffff
 #define RX_PPDU_START_INFO2_HT_SIG_VHT_SIG_A_1_LSB  0
 
 #define RX_PPDU_START_INFO3_HT_SIG_VHT_SIG_A_2_MASK 0x00ffffff
 #define RX_PPDU_START_INFO3_HT_SIG_VHT_SIG_A_2_LSB  0
-#define RX_PPDU_START_INFO3_TXBF_H_INFO             (1 << 24)
+#define RX_PPDU_START_INFO3_TXBF_H_INFO             BIT(24)
 
 #define RX_PPDU_START_INFO4_VHT_SIG_B_MASK 0x1fffffff
 #define RX_PPDU_START_INFO4_VHT_SIG_B_LSB  0
@@ -898,14 +900,14 @@ struct rx_ppdu_start {
  *             Reserved: HW should fill with 0, FW should ignore.
  */
 
-#define RX_PPDU_END_FLAGS_PHY_ERR             (1 << 0)
-#define RX_PPDU_END_FLAGS_RX_LOCATION         (1 << 1)
-#define RX_PPDU_END_FLAGS_TXBF_H_INFO         (1 << 2)
+#define RX_PPDU_END_FLAGS_PHY_ERR             BIT(0)
+#define RX_PPDU_END_FLAGS_RX_LOCATION         BIT(1)
+#define RX_PPDU_END_FLAGS_TXBF_H_INFO         BIT(2)
 
 #define RX_PPDU_END_INFO0_RX_ANTENNA_MASK     0x00ffffff
 #define RX_PPDU_END_INFO0_RX_ANTENNA_LSB      0
-#define RX_PPDU_END_INFO0_FLAGS_TX_HT_VHT_ACK (1 << 24)
-#define RX_PPDU_END_INFO0_BB_CAPTURED_CHANNEL (1 << 25)
+#define RX_PPDU_END_INFO0_FLAGS_TX_HT_VHT_ACK BIT(24)
+#define RX_PPDU_END_INFO0_BB_CAPTURED_CHANNEL BIT(25)
 
 #define RX_PPDU_END_INFO1_PEER_IDX_MASK       0x1ffc
 #define RX_PPDU_END_INFO1_PEER_IDX_LSB        2
@@ -1265,9 +1267,9 @@ struct rx_ppdu_end {
  *             to 0.
  */
 
-#define FW_RX_DESC_INFO0_DISCARD  (1 << 0)
-#define FW_RX_DESC_INFO0_FORWARD  (1 << 1)
-#define FW_RX_DESC_INFO0_INSPECT  (1 << 5)
+#define FW_RX_DESC_INFO0_DISCARD  BIT(0)
+#define FW_RX_DESC_INFO0_FORWARD  BIT(1)
+#define FW_RX_DESC_INFO0_INSPECT  BIT(5)
 #define FW_RX_DESC_INFO0_EXT_MASK 0xC0
 #define FW_RX_DESC_INFO0_EXT_LSB  6
 
index 2d04c54a41538f44bdfd3d34593dab22570d21cf..d612ce8c9cffeefb927218977daebdaada99435c 100644 (file)
@@ -2011,7 +2011,7 @@ static int ath10k_sdio_probe(struct sdio_func *func,
                ret = -ENODEV;
                ath10k_err(ar, "unsupported device id %u (0x%x)\n",
                           dev_id_base, id->device);
-               goto err_core_destroy;
+               goto err_free_wq;
        }
 
        ar->id.vendor = id->vendor;
index 47a4d2a5bd4cb330832bb7b5c42d1d36dcddd6ed..a3a7042fe13ab79a701be77cb93ac0476a785175 100644 (file)
@@ -1385,7 +1385,6 @@ static struct platform_driver ath10k_snoc_driver = {
                .remove = ath10k_snoc_remove,
                .driver = {
                        .name   = "ath10k_snoc",
-                       .owner = THIS_MODULE,
                        .of_match_table = ath10k_snoc_dt_match,
                },
 };
index 01f4eb201330f5be14e6fe41278cb71838481b44..2e34a1fc5ba684c5006da61a97657f11791f18d9 100644 (file)
@@ -3135,6 +3135,37 @@ ath10k_wmi_tlv_op_gen_tdls_peer_update(struct ath10k *ar,
        return skb;
 }
 
+static struct sk_buff *
+ath10k_wmi_tlv_op_gen_pdev_set_quiet_mode(struct ath10k *ar, u32 period,
+                                         u32 duration, u32 next_offset,
+                                         u32 enabled)
+{
+       struct wmi_tlv_set_quiet_cmd *cmd;
+       struct wmi_tlv *tlv;
+       struct sk_buff *skb;
+
+       skb = ath10k_wmi_alloc_skb(ar, sizeof(*tlv) + sizeof(*cmd));
+       if (!skb)
+               return ERR_PTR(-ENOMEM);
+
+       tlv = (void *)skb->data;
+       tlv->tag = __cpu_to_le16(WMI_TLV_TAG_STRUCT_PDEV_SET_QUIET_CMD);
+       tlv->len = __cpu_to_le16(sizeof(*cmd));
+       cmd = (void *)tlv->value;
+
+       /* vdev_id is not in use, set to 0 */
+       cmd->vdev_id = __cpu_to_le32(0);
+       cmd->period = __cpu_to_le32(period);
+       cmd->duration = __cpu_to_le32(duration);
+       cmd->next_start = __cpu_to_le32(next_offset);
+       cmd->enabled = __cpu_to_le32(enabled);
+
+       ath10k_dbg(ar, ATH10K_DBG_WMI,
+                  "wmi tlv quiet param: period %u duration %u enabled %d\n",
+                  period, duration, enabled);
+       return skb;
+}
+
 static struct sk_buff *
 ath10k_wmi_tlv_op_gen_wow_enable(struct ath10k *ar)
 {
@@ -3854,7 +3885,7 @@ static const struct wmi_ops wmi_tlv_ops = {
        .gen_dbglog_cfg = ath10k_wmi_tlv_op_gen_dbglog_cfg,
        .gen_pktlog_enable = ath10k_wmi_tlv_op_gen_pktlog_enable,
        .gen_pktlog_disable = ath10k_wmi_tlv_op_gen_pktlog_disable,
-       /* .gen_pdev_set_quiet_mode not implemented */
+       .gen_pdev_set_quiet_mode = ath10k_wmi_tlv_op_gen_pdev_set_quiet_mode,
        .gen_pdev_get_temperature = ath10k_wmi_tlv_op_gen_pdev_get_temperature,
        /* .gen_addba_clear_resp not implemented */
        /* .gen_addba_send not implemented */
index 954c50bb3f6650d9fbaab4e6a40c6b270a71ad5a..3e1e340cd8344732b572d13c7bba50603eb5a87d 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2005-2011 Atheros Communications Inc.
  * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
+ * Copyright (c) 2018, The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -1952,6 +1953,21 @@ struct wmi_tlv_wow_add_del_event_cmd {
        __le32 event_bitmap;
 } __packed;
 
+/* Command to set/unset chip in quiet mode */
+struct wmi_tlv_set_quiet_cmd {
+       __le32 vdev_id;
+
+       /* in TUs */
+       __le32 period;
+
+       /* in TUs */
+       __le32 duration;
+
+       /* offset in TUs */
+       __le32 next_start;
+       __le32 enabled;
+} __packed;
+
 struct wmi_tlv_wow_enable_cmd {
        __le32 enable;
 } __packed;
index df2e92a6c9bd2a2dd2883b72facc7081df7258b1..46fb96ee585209f441f85b880c51817857db6e0e 100644 (file)
@@ -2318,7 +2318,6 @@ int ath10k_wmi_event_mgmt_rx(struct ath10k *ar, struct sk_buff *skb)
        u32 phy_mode;
        u32 snr;
        u32 rate;
-       u32 buf_len;
        u16 fc;
        int ret;
 
@@ -2330,7 +2329,6 @@ int ath10k_wmi_event_mgmt_rx(struct ath10k *ar, struct sk_buff *skb)
        }
 
        channel = __le32_to_cpu(arg.channel);
-       buf_len = __le32_to_cpu(arg.buf_len);
        rx_status = __le32_to_cpu(arg.status);
        snr = __le32_to_cpu(arg.snr);
        phy_mode = __le32_to_cpu(arg.phy_mode);
@@ -2740,14 +2738,13 @@ static int ath10k_wmi_main_op_pull_fw_stats(struct ath10k *ar,
                                            struct ath10k_fw_stats *stats)
 {
        const struct wmi_stats_event *ev = (void *)skb->data;
-       u32 num_pdev_stats, num_vdev_stats, num_peer_stats;
+       u32 num_pdev_stats, num_peer_stats;
        int i;
 
        if (!skb_pull(skb, sizeof(*ev)))
                return -EPROTO;
 
        num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats);
-       num_vdev_stats = __le32_to_cpu(ev->num_vdev_stats);
        num_peer_stats = __le32_to_cpu(ev->num_peer_stats);
 
        for (i = 0; i < num_pdev_stats; i++) {
@@ -2795,14 +2792,13 @@ static int ath10k_wmi_10x_op_pull_fw_stats(struct ath10k *ar,
                                           struct ath10k_fw_stats *stats)
 {
        const struct wmi_stats_event *ev = (void *)skb->data;
-       u32 num_pdev_stats, num_vdev_stats, num_peer_stats;
+       u32 num_pdev_stats, num_peer_stats;
        int i;
 
        if (!skb_pull(skb, sizeof(*ev)))
                return -EPROTO;
 
        num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats);
-       num_vdev_stats = __le32_to_cpu(ev->num_vdev_stats);
        num_peer_stats = __le32_to_cpu(ev->num_peer_stats);
 
        for (i = 0; i < num_pdev_stats; i++) {
@@ -2856,7 +2852,6 @@ static int ath10k_wmi_10_2_op_pull_fw_stats(struct ath10k *ar,
        const struct wmi_10_2_stats_event *ev = (void *)skb->data;
        u32 num_pdev_stats;
        u32 num_pdev_ext_stats;
-       u32 num_vdev_stats;
        u32 num_peer_stats;
        int i;
 
@@ -2865,7 +2860,6 @@ static int ath10k_wmi_10_2_op_pull_fw_stats(struct ath10k *ar,
 
        num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats);
        num_pdev_ext_stats = __le32_to_cpu(ev->num_pdev_ext_stats);
-       num_vdev_stats = __le32_to_cpu(ev->num_vdev_stats);
        num_peer_stats = __le32_to_cpu(ev->num_peer_stats);
 
        for (i = 0; i < num_pdev_stats; i++) {
@@ -2935,7 +2929,6 @@ static int ath10k_wmi_10_2_4_op_pull_fw_stats(struct ath10k *ar,
        const struct wmi_10_2_stats_event *ev = (void *)skb->data;
        u32 num_pdev_stats;
        u32 num_pdev_ext_stats;
-       u32 num_vdev_stats;
        u32 num_peer_stats;
        int i;
 
@@ -2944,7 +2937,6 @@ static int ath10k_wmi_10_2_4_op_pull_fw_stats(struct ath10k *ar,
 
        num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats);
        num_pdev_ext_stats = __le32_to_cpu(ev->num_pdev_ext_stats);
-       num_vdev_stats = __le32_to_cpu(ev->num_vdev_stats);
        num_peer_stats = __le32_to_cpu(ev->num_peer_stats);
 
        for (i = 0; i < num_pdev_stats; i++) {
@@ -4484,6 +4476,12 @@ void ath10k_wmi_event_pdev_tpc_config(struct ath10k *ar, struct sk_buff *skb)
 
        num_tx_chain = __le32_to_cpu(ev->num_tx_chain);
 
+       if (num_tx_chain > WMI_TPC_TX_N_CHAIN) {
+               ath10k_warn(ar, "number of tx chain is %d greater than TPC configured tx chain %d\n",
+                           num_tx_chain, WMI_TPC_TX_N_CHAIN);
+               return;
+       }
+
        ath10k_wmi_tpc_config_get_rate_code(rate_code, pream_table,
                                            num_tx_chain);
 
@@ -5280,7 +5278,7 @@ void ath10k_wmi_event_service_available(struct ath10k *ar, struct sk_buff *skb)
 
        ret = ath10k_wmi_pull_svc_avail(ar, skb, &arg);
        if (ret) {
-               ath10k_warn(ar, "failed to parse servive available event: %d\n",
+               ath10k_warn(ar, "failed to parse service available event: %d\n",
                            ret);
        }
 
index 16a39244a34f0e724610166eb51ccacdd8813636..700b12f46bafeeaffbe9f0c2e85074136bb4a147 100644 (file)
@@ -4026,9 +4026,9 @@ struct wmi_pdev_get_tpc_config_cmd {
 } __packed;
 
 #define WMI_TPC_CONFIG_PARAM           1
-#define WMI_TPC_RATE_MAX               160
 #define WMI_TPC_FINAL_RATE_MAX         240
 #define WMI_TPC_TX_N_CHAIN             4
+#define WMI_TPC_RATE_MAX               (WMI_TPC_TX_N_CHAIN * 65)
 #define WMI_TPC_PREAM_TABLE_MAX                10
 #define WMI_TPC_FLAG                   3
 #define WMI_TPC_BUF_SIZE               10
index e23d450babd24025c8e2d09d5e6d86b57b8ef848..0d30e762c0906858038e178d81c0b237d80ecba5 100644 (file)
@@ -914,7 +914,7 @@ void ath6kl_tx_data_cleanup(struct ath6kl *ar);
 
 struct ath6kl_cookie *ath6kl_alloc_cookie(struct ath6kl *ar);
 void ath6kl_free_cookie(struct ath6kl *ar, struct ath6kl_cookie *cookie);
-int ath6kl_data_tx(struct sk_buff *skb, struct net_device *dev);
+netdev_tx_t ath6kl_data_tx(struct sk_buff *skb, struct net_device *dev);
 
 struct aggr_info *aggr_init(struct ath6kl_vif *vif);
 void aggr_conn_init(struct ath6kl_vif *vif, struct aggr_info *aggr_info,
index 8da9506f8c2b868d00d8b23a2f2e3e14de75f9b6..618d12ed4b4037937cb93265c66865d7ac10b772 100644 (file)
@@ -353,7 +353,7 @@ int ath6kl_control_tx(void *devt, struct sk_buff *skb,
        return status;
 }
 
-int ath6kl_data_tx(struct sk_buff *skb, struct net_device *dev)
+netdev_tx_t ath6kl_data_tx(struct sk_buff *skb, struct net_device *dev)
 {
        struct ath6kl *ar = ath6kl_priv(dev);
        struct ath6kl_cookie *cookie = NULL;
index b448926b0c0ffadcc15e4ef6de55453e66d3a460..3548e8d5e18e094b2563e85ebac64572078d33c6 100644 (file)
@@ -33,7 +33,7 @@ config WIL6210_TRACING
        bool "wil6210 tracing support"
        depends on WIL6210
        depends on EVENT_TRACING
-       default y
+       default n
        ---help---
          Say Y here to enable tracepoints for the wil6210 driver
          using the kernel tracing infrastructure.  Select this
index cdbb393863f3b2203d6b791f5e03403a3034c383..78946f28d0c7f208e50c2585a7937cb0a56cfe63 100644 (file)
@@ -276,6 +276,8 @@ int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid,
        struct wil_net_stats *stats = &wil->sta[cid].stats;
        int rc;
 
+       memset(&reply, 0, sizeof(reply));
+
        rc = wmi_call(wil, WMI_NOTIFY_REQ_CMDID, vif->mid, &cmd, sizeof(cmd),
                      WMI_NOTIFY_REQ_DONE_EVENTID, &reply, sizeof(reply), 20);
        if (rc)
@@ -1081,17 +1083,11 @@ int wil_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
                         u64 *cookie)
 {
        const u8 *buf = params->buf;
-       size_t len = params->len, total;
+       size_t len = params->len;
        struct wil6210_priv *wil = wiphy_to_wil(wiphy);
        struct wil6210_vif *vif = wdev_to_vif(wil, wdev);
        int rc;
-       bool tx_status = false;
-       struct ieee80211_mgmt *mgmt_frame = (void *)buf;
-       struct wmi_sw_tx_req_cmd *cmd;
-       struct {
-               struct wmi_cmd_hdr wmi;
-               struct wmi_sw_tx_complete_event evt;
-       } __packed evt;
+       bool tx_status;
 
        /* Note, currently we do not support the "wait" parameter, user-space
         * must call remain_on_channel before mgmt_tx or listen on a channel
@@ -1100,34 +1096,9 @@ int wil_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
         * different from currently "listened" channel and fail if it is.
         */
 
-       wil_dbg_misc(wil, "mgmt_tx mid %d\n", vif->mid);
-       wil_hex_dump_misc("mgmt tx frame ", DUMP_PREFIX_OFFSET, 16, 1, buf,
-                         len, true);
-
-       if (len < sizeof(struct ieee80211_hdr_3addr))
-               return -EINVAL;
-
-       total = sizeof(*cmd) + len;
-       if (total < len)
-               return -EINVAL;
-
-       cmd = kmalloc(total, GFP_KERNEL);
-       if (!cmd) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       memcpy(cmd->dst_mac, mgmt_frame->da, WMI_MAC_LEN);
-       cmd->len = cpu_to_le16(len);
-       memcpy(cmd->payload, buf, len);
-
-       rc = wmi_call(wil, WMI_SW_TX_REQ_CMDID, vif->mid, cmd, total,
-                     WMI_SW_TX_COMPLETE_EVENTID, &evt, sizeof(evt), 2000);
-       if (rc == 0)
-               tx_status = !evt.evt.status;
+       rc = wmi_mgmt_tx(vif, buf, len);
+       tx_status = (rc == 0);
 
-       kfree(cmd);
- out:
        cfg80211_mgmt_tx_status(wdev, cookie ? *cookie : 0, buf, len,
                                tx_status, GFP_KERNEL);
        return rc;
@@ -2277,7 +2248,9 @@ static int wil_rf_sector_get_cfg(struct wiphy *wiphy,
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_get_rf_sector_params_done_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = WMI_RF_SECTOR_STATUS_NOT_SUPPORTED_ERROR},
+       };
        struct sk_buff *msg;
        struct nlattr *nl_cfgs, *nl_cfg;
        u32 i;
@@ -2323,7 +2296,6 @@ static int wil_rf_sector_get_cfg(struct wiphy *wiphy,
        cmd.sector_idx = cpu_to_le16(sector_index);
        cmd.sector_type = sector_type;
        cmd.rf_modules_vec = rf_modules_vec & 0xFF;
-       memset(&reply, 0, sizeof(reply));
        rc = wmi_call(wil, WMI_GET_RF_SECTOR_PARAMS_CMDID, vif->mid,
                      &cmd, sizeof(cmd), WMI_GET_RF_SECTOR_PARAMS_DONE_EVENTID,
                      &reply, sizeof(reply),
@@ -2398,7 +2370,9 @@ static int wil_rf_sector_set_cfg(struct wiphy *wiphy,
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_set_rf_sector_params_done_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = WMI_RF_SECTOR_STATUS_NOT_SUPPORTED_ERROR},
+       };
        struct nlattr *nl_cfg;
        struct wmi_rf_sector_info *si;
 
@@ -2481,7 +2455,6 @@ static int wil_rf_sector_set_cfg(struct wiphy *wiphy,
        }
 
        cmd.rf_modules_vec = rf_modules_vec & 0xFF;
-       memset(&reply, 0, sizeof(reply));
        rc = wmi_call(wil, WMI_SET_RF_SECTOR_PARAMS_CMDID, vif->mid,
                      &cmd, sizeof(cmd), WMI_SET_RF_SECTOR_PARAMS_DONE_EVENTID,
                      &reply, sizeof(reply),
@@ -2505,7 +2478,9 @@ static int wil_rf_sector_get_selected(struct wiphy *wiphy,
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_get_selected_rf_sector_index_done_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = WMI_RF_SECTOR_STATUS_NOT_SUPPORTED_ERROR},
+       };
        struct sk_buff *msg;
 
        if (!test_bit(WMI_FW_CAPABILITY_RF_SECTORS, wil->fw_capabilities))
@@ -2545,7 +2520,6 @@ static int wil_rf_sector_get_selected(struct wiphy *wiphy,
        memset(&cmd, 0, sizeof(cmd));
        cmd.cid = (u8)cid;
        cmd.sector_type = sector_type;
-       memset(&reply, 0, sizeof(reply));
        rc = wmi_call(wil, WMI_GET_SELECTED_RF_SECTOR_INDEX_CMDID, vif->mid,
                      &cmd, sizeof(cmd),
                      WMI_GET_SELECTED_RF_SECTOR_INDEX_DONE_EVENTID,
@@ -2586,14 +2560,15 @@ static int wil_rf_sector_wmi_set_selected(struct wil6210_priv *wil,
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_set_selected_rf_sector_index_done_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = WMI_RF_SECTOR_STATUS_NOT_SUPPORTED_ERROR},
+       };
        int rc;
 
        memset(&cmd, 0, sizeof(cmd));
        cmd.sector_idx = cpu_to_le16(sector_index);
        cmd.sector_type = sector_type;
        cmd.cid = (u8)cid;
-       memset(&reply, 0, sizeof(reply));
        rc = wmi_call(wil, WMI_SET_SELECTED_RF_SECTOR_INDEX_CMDID, mid,
                      &cmd, sizeof(cmd),
                      WMI_SET_SELECTED_RF_SECTOR_INDEX_DONE_EVENTID,
index 11e46e44381e457c4763daf72b318a13895846e9..ebfdff4d328cbc66217222d1c1df8329e2586b52 100644 (file)
@@ -1078,6 +1078,8 @@ static int wil_bf_debugfs_show(struct seq_file *s, void *data)
                struct wmi_notify_req_done_event evt;
        } __packed reply;
 
+       memset(&reply, 0, sizeof(reply));
+
        for (i = 0; i < ARRAY_SIZE(wil->sta); i++) {
                u32 status;
 
@@ -1383,8 +1385,7 @@ static void wil_print_rxtid(struct seq_file *s, struct wil_tid_ampdu_rx *r)
        u16 index = ((r->head_seq_num - r->ssn) & 0xfff) % r->buf_size;
        unsigned long long drop_dup = r->drop_dup, drop_old = r->drop_old;
 
-       seq_printf(s, "([%2d] %3d TU) 0x%03x [", r->buf_size, r->timeout,
-                  r->head_seq_num);
+       seq_printf(s, "([%2d]) 0x%03x [", r->buf_size, r->head_seq_num);
        for (i = 0; i < r->buf_size; i++) {
                if (i == index)
                        seq_printf(s, "%c", r->reorder_buf[i] ? 'O' : '|');
index 82aec6b06d09b9169403fc16948c1c6f8d48d11c..e7006c2428a0aa54b4cea133d91ffadb23987440 100644 (file)
@@ -342,6 +342,8 @@ void wil_disconnect_worker(struct work_struct *work)
                /* already disconnected */
                return;
 
+       memset(&reply, 0, sizeof(reply));
+
        rc = wmi_call(wil, WMI_DISCONNECT_CMDID, vif->mid, NULL, 0,
                      WMI_DISCONNECT_EVENTID, &reply, sizeof(reply),
                      WIL6210_DISCONNECT_TO_MS);
index 05e9408e7ea39a0ac7fa077e213f3cf9b8e6b9d3..eb6c14ed65a417127a7a72b9347f91cb9f19ebbd 100644 (file)
@@ -457,16 +457,16 @@ void wil_vif_remove(struct wil6210_priv *wil, u8 mid)
                return;
        }
 
+       mutex_lock(&wil->mutex);
+       wil6210_disconnect(vif, NULL, WLAN_REASON_DEAUTH_LEAVING, false);
+       mutex_unlock(&wil->mutex);
+
        ndev = vif_to_ndev(vif);
        /* during unregister_netdevice cfg80211_leave may perform operations
         * such as stop AP, disconnect, so we only clear the VIF afterwards
         */
        unregister_netdevice(ndev);
 
-       mutex_lock(&wil->mutex);
-       wil6210_disconnect(vif, NULL, WLAN_REASON_DEAUTH_LEAVING, false);
-       mutex_unlock(&wil->mutex);
-
        if (any_active && vif->mid != 0)
                wmi_port_delete(wil, vif->mid);
 
index 14dcb0698deee611f514ef008f76539be2a3de5a..76f8084c1fd81acdce116f6a88901c79976e6852 100644 (file)
@@ -206,7 +206,6 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock)
 
        /* put the frame in the reordering buffer */
        r->reorder_buf[index] = skb;
-       r->reorder_time[index] = jiffies;
        r->stored_mpdu_num++;
        wil_reorder_release(ndev, r);
 
@@ -252,11 +251,8 @@ struct wil_tid_ampdu_rx *wil_tid_ampdu_rx_alloc(struct wil6210_priv *wil,
 
        r->reorder_buf =
                kcalloc(size, sizeof(struct sk_buff *), GFP_KERNEL);
-       r->reorder_time =
-               kcalloc(size, sizeof(unsigned long), GFP_KERNEL);
-       if (!r->reorder_buf || !r->reorder_time) {
+       if (!r->reorder_buf) {
                kfree(r->reorder_buf);
-               kfree(r->reorder_time);
                kfree(r);
                return NULL;
        }
@@ -286,7 +282,6 @@ void wil_tid_ampdu_rx_free(struct wil6210_priv *wil,
                kfree_skb(r->reorder_buf[i]);
 
        kfree(r->reorder_buf);
-       kfree(r->reorder_time);
        kfree(r);
 }
 
index b60b9fcaaebded18fb881f37c5b144ad3d4a6da9..b9a9fa8289618f6c4a0f08c2f053268ad1c390e6 100644 (file)
@@ -652,8 +652,8 @@ static int wil_rx_refill(struct wil6210_priv *wil, int count)
                        v->swtail = next_tail) {
                rc = wil_vring_alloc_skb(wil, v, v->swtail, headroom);
                if (unlikely(rc)) {
-                       wil_err(wil, "Error %d in wil_rx_refill[%d]\n",
-                               rc, v->swtail);
+                       wil_err_ratelimited(wil, "Error %d in rx refill[%d]\n",
+                                           rc, v->swtail);
                        break;
                }
        }
@@ -963,7 +963,9 @@ int wil_vring_init_tx(struct wil6210_vif *vif, int id, int size,
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_vring_cfg_done_event cmd;
-       } __packed reply;
+       } __packed reply = {
+               .cmd = {.status = WMI_FW_STATUS_FAILURE},
+       };
        struct vring *vring = &wil->vring_tx[id];
        struct vring_tx_data *txdata = &wil->vring_tx_data[id];
 
@@ -1045,7 +1047,9 @@ int wil_vring_init_bcast(struct wil6210_vif *vif, int id, int size)
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_vring_cfg_done_event cmd;
-       } __packed reply;
+       } __packed reply = {
+               .cmd = {.status = WMI_FW_STATUS_FAILURE},
+       };
        struct vring *vring = &wil->vring_tx[id];
        struct vring_tx_data *txdata = &wil->vring_tx_data[id];
 
index f9c5155025bc4fb6a429db6b7f58345c7c410cfd..b623510c6f6c02d71724ca82b591c0465be4d8f8 100644 (file)
@@ -493,38 +493,28 @@ struct pci_dev;
  * struct tid_ampdu_rx - TID aggregation information (Rx).
  *
  * @reorder_buf: buffer to reorder incoming aggregated MPDUs
- * @reorder_time: jiffies when skb was added
- * @session_timer: check if peer keeps Tx-ing on the TID (by timeout value)
- * @reorder_timer: releases expired frames from the reorder buffer.
  * @last_rx: jiffies of last rx activity
  * @head_seq_num: head sequence number in reordering buffer.
  * @stored_mpdu_num: number of MPDUs in reordering buffer
  * @ssn: Starting Sequence Number expected to be aggregated.
  * @buf_size: buffer size for incoming A-MPDUs
- * @timeout: reset timer value (in TUs).
  * @ssn_last_drop: SSN of the last dropped frame
  * @total: total number of processed incoming frames
  * @drop_dup: duplicate frames dropped for this reorder buffer
  * @drop_old: old frames dropped for this reorder buffer
- * @dialog_token: dialog token for aggregation session
  * @first_time: true when this buffer used 1-st time
  */
 struct wil_tid_ampdu_rx {
        struct sk_buff **reorder_buf;
-       unsigned long *reorder_time;
-       struct timer_list session_timer;
-       struct timer_list reorder_timer;
        unsigned long last_rx;
        u16 head_seq_num;
        u16 stored_mpdu_num;
        u16 ssn;
        u16 buf_size;
-       u16 timeout;
        u16 ssn_last_drop;
        unsigned long long total; /* frames processed */
        unsigned long long drop_dup;
        unsigned long long drop_old;
-       u8 dialog_token;
        bool first_time; /* is it 1-st time this buffer used? */
 };
 
@@ -986,7 +976,7 @@ int wmi_read_hdr(struct wil6210_priv *wil, __le32 ptr,
 int wmi_send(struct wil6210_priv *wil, u16 cmdid, u8 mid, void *buf, u16 len);
 void wmi_recv_cmd(struct wil6210_priv *wil);
 int wmi_call(struct wil6210_priv *wil, u16 cmdid, u8 mid, void *buf, u16 len,
-            u16 reply_id, void *reply, u8 reply_size, int to_msec);
+            u16 reply_id, void *reply, u16 reply_size, int to_msec);
 void wmi_event_worker(struct work_struct *work);
 void wmi_event_flush(struct wil6210_priv *wil);
 int wmi_set_ssid(struct wil6210_vif *vif, u8 ssid_len, const void *ssid);
@@ -1150,5 +1140,6 @@ void wil6210_clear_halp(struct wil6210_priv *wil);
 int wmi_start_sched_scan(struct wil6210_priv *wil,
                         struct cfg80211_sched_scan_request *request);
 int wmi_stop_sched_scan(struct wil6210_priv *wil);
+int wmi_mgmt_tx(struct wil6210_vif *vif, const u8 *buf, size_t len);
 
 #endif /* __WIL6210_H__ */
index 90de9a9162411e5ff76b3ac85ee382738a50d9d0..5d991243cdb59c341d5637dc20a82cbbc9f9f389 100644 (file)
@@ -1423,7 +1423,7 @@ void wmi_recv_cmd(struct wil6210_priv *wil)
 }
 
 int wmi_call(struct wil6210_priv *wil, u16 cmdid, u8 mid, void *buf, u16 len,
-            u16 reply_id, void *reply, u8 reply_size, int to_msec)
+            u16 reply_id, void *reply, u16 reply_size, int to_msec)
 {
        int rc;
        unsigned long remain;
@@ -1516,7 +1516,9 @@ int wmi_led_cfg(struct wil6210_priv *wil, bool enable)
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_led_cfg_done_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = cpu_to_le32(WMI_FW_STATUS_FAILURE)},
+       };
 
        if (led_id == WIL_LED_INVALID_ID)
                goto out;
@@ -1561,13 +1563,17 @@ int wmi_pcp_start(struct wil6210_vif *vif,
                .pcp_max_assoc_sta = max_assoc_sta,
                .hidden_ssid = hidden_ssid,
                .is_go = is_go,
-               .disable_ap_sme = disable_ap_sme,
+               .ap_sme_offload_mode = disable_ap_sme ?
+                                      WMI_AP_SME_OFFLOAD_PARTIAL :
+                                      WMI_AP_SME_OFFLOAD_FULL,
                .abft_len = wil->abft_len,
        };
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_pcp_started_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = WMI_FW_STATUS_FAILURE},
+       };
 
        if (!vif->privacy)
                cmd.disable_sec = 1;
@@ -1581,7 +1587,7 @@ int wmi_pcp_start(struct wil6210_vif *vif,
        }
 
        if (disable_ap_sme &&
-           !test_bit(WMI_FW_CAPABILITY_DISABLE_AP_SME,
+           !test_bit(WMI_FW_CAPABILITY_AP_SME_OFFLOAD_PARTIAL,
                      wil->fw_capabilities)) {
                wil_err(wil, "disable_ap_sme not supported by FW\n");
                return -EOPNOTSUPP;
@@ -1644,6 +1650,8 @@ int wmi_get_ssid(struct wil6210_vif *vif, u8 *ssid_len, void *ssid)
        } __packed reply;
        int len; /* reply.cmd.ssid_len in CPU order */
 
+       memset(&reply, 0, sizeof(reply));
+
        rc = wmi_call(wil, WMI_GET_SSID_CMDID, vif->mid, NULL, 0,
                      WMI_GET_SSID_EVENTID, &reply, sizeof(reply), 20);
        if (rc)
@@ -1679,6 +1687,8 @@ int wmi_get_channel(struct wil6210_priv *wil, int *channel)
                struct wmi_set_pcp_channel_cmd cmd;
        } __packed reply;
 
+       memset(&reply, 0, sizeof(reply));
+
        rc = wmi_call(wil, WMI_GET_PCP_CHANNEL_CMDID, vif->mid, NULL, 0,
                      WMI_GET_PCP_CHANNEL_EVENTID, &reply, sizeof(reply), 20);
        if (rc)
@@ -1704,7 +1714,9 @@ int wmi_p2p_cfg(struct wil6210_vif *vif, int channel, int bi)
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_p2p_cfg_done_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = WMI_FW_STATUS_FAILURE},
+       };
 
        wil_dbg_wmi(wil, "sending WMI_P2P_CFG_CMDID\n");
 
@@ -1725,7 +1737,9 @@ int wmi_start_listen(struct wil6210_vif *vif)
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_listen_started_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = WMI_FW_STATUS_FAILURE},
+       };
 
        wil_dbg_wmi(wil, "sending WMI_START_LISTEN_CMDID\n");
 
@@ -1747,7 +1761,9 @@ int wmi_start_search(struct wil6210_vif *vif)
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_search_started_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = WMI_FW_STATUS_FAILURE},
+       };
 
        wil_dbg_wmi(wil, "sending WMI_START_SEARCH_CMDID\n");
 
@@ -1873,7 +1889,9 @@ int wmi_rxon(struct wil6210_priv *wil, bool on)
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_listen_started_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = WMI_FW_STATUS_FAILURE},
+       };
 
        wil_info(wil, "(%s)\n", on ? "on" : "off");
 
@@ -1915,6 +1933,8 @@ int wmi_rx_chain_add(struct wil6210_priv *wil, struct vring *vring)
        } __packed evt;
        int rc;
 
+       memset(&evt, 0, sizeof(evt));
+
        if (wdev->iftype == NL80211_IFTYPE_MONITOR) {
                struct ieee80211_channel *ch = wil->monitor_chandef.chan;
 
@@ -1944,14 +1964,14 @@ int wmi_rx_chain_add(struct wil6210_priv *wil, struct vring *vring)
        if (rc)
                return rc;
 
+       if (le32_to_cpu(evt.evt.status) != WMI_CFG_RX_CHAIN_SUCCESS)
+               rc = -EINVAL;
+
        vring->hwtail = le32_to_cpu(evt.evt.rx_ring_tail_ptr);
 
        wil_dbg_misc(wil, "Rx init: status %d tail 0x%08x\n",
                     le32_to_cpu(evt.evt.status), vring->hwtail);
 
-       if (le32_to_cpu(evt.evt.status) != WMI_CFG_RX_CHAIN_SUCCESS)
-               rc = -EINVAL;
-
        return rc;
 }
 
@@ -1969,6 +1989,8 @@ int wmi_get_temperature(struct wil6210_priv *wil, u32 *t_bb, u32 *t_rf)
                struct wmi_temp_sense_done_event evt;
        } __packed reply;
 
+       memset(&reply, 0, sizeof(reply));
+
        rc = wmi_call(wil, WMI_TEMP_SENSE_CMDID, vif->mid, &cmd, sizeof(cmd),
                      WMI_TEMP_SENSE_DONE_EVENTID, &reply, sizeof(reply), 100);
        if (rc)
@@ -2001,6 +2023,7 @@ int wmi_disconnect_sta(struct wil6210_vif *vif, const u8 *mac,
 
        wil_dbg_wmi(wil, "disconnect_sta: (%pM, reason %d)\n", mac, reason);
 
+       memset(&reply, 0, sizeof(reply));
        vif->locally_generated_disc = true;
        if (del_sta) {
                ether_addr_copy(del_sta_cmd.dst_mac, mac);
@@ -2099,7 +2122,9 @@ int wmi_addba_rx_resp(struct wil6210_priv *wil,
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_rcp_addba_resp_sent_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = cpu_to_le16(WMI_FW_STATUS_FAILURE)},
+       };
 
        wil_dbg_wmi(wil,
                    "ADDBA response for MID %d CID %d TID %d size %d timeout %d status %d AMSDU%s\n",
@@ -2132,13 +2157,13 @@ int wmi_ps_dev_profile_cfg(struct wil6210_priv *wil,
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_ps_dev_profile_cfg_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = cpu_to_le32(WMI_PS_CFG_CMD_STATUS_ERROR)},
+       };
        u32 status;
 
        wil_dbg_wmi(wil, "Setting ps dev profile %d\n", ps_profile);
 
-       reply.evt.status = cpu_to_le32(WMI_PS_CFG_CMD_STATUS_ERROR);
-
        rc = wmi_call(wil, WMI_PS_DEV_PROFILE_CFG_CMDID, vif->mid,
                      &cmd, sizeof(cmd),
                      WMI_PS_DEV_PROFILE_CFG_EVENTID, &reply, sizeof(reply),
@@ -2167,15 +2192,15 @@ int wmi_set_mgmt_retry(struct wil6210_priv *wil, u8 retry_short)
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_set_mgmt_retry_limit_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = WMI_FW_STATUS_FAILURE},
+       };
 
        wil_dbg_wmi(wil, "Setting mgmt retry short %d\n", retry_short);
 
        if (!test_bit(WMI_FW_CAPABILITY_MGMT_RETRY_LIMIT, wil->fw_capabilities))
                return -ENOTSUPP;
 
-       reply.evt.status = WMI_FW_STATUS_FAILURE;
-
        rc = wmi_call(wil, WMI_SET_MGMT_RETRY_LIMIT_CMDID, vif->mid,
                      &cmd, sizeof(cmd),
                      WMI_SET_MGMT_RETRY_LIMIT_EVENTID, &reply, sizeof(reply),
@@ -2206,7 +2231,7 @@ int wmi_get_mgmt_retry(struct wil6210_priv *wil, u8 *retry_short)
        if (!test_bit(WMI_FW_CAPABILITY_MGMT_RETRY_LIMIT, wil->fw_capabilities))
                return -ENOTSUPP;
 
-       reply.evt.mgmt_retry_limit = 0;
+       memset(&reply, 0, sizeof(reply));
        rc = wmi_call(wil, WMI_GET_MGMT_RETRY_LIMIT_CMDID, vif->mid, NULL, 0,
                      WMI_GET_MGMT_RETRY_LIMIT_EVENTID, &reply, sizeof(reply),
                      100);
@@ -2289,14 +2314,15 @@ int wmi_suspend(struct wil6210_priv *wil)
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_traffic_suspend_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = WMI_TRAFFIC_SUSPEND_REJECTED_LINK_NOT_IDLE},
+       };
+
        u32 suspend_to = WIL_WAIT_FOR_SUSPEND_RESUME_COMP;
 
        wil->suspend_resp_rcvd = false;
        wil->suspend_resp_comp = false;
 
-       reply.evt.status = WMI_TRAFFIC_SUSPEND_REJECTED_LINK_NOT_IDLE;
-
        rc = wmi_call(wil, WMI_TRAFFIC_SUSPEND_CMDID, vif->mid,
                      &cmd, sizeof(cmd),
                      WMI_TRAFFIC_SUSPEND_EVENTID, &reply, sizeof(reply),
@@ -2372,10 +2398,11 @@ int wmi_resume(struct wil6210_priv *wil)
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_traffic_resume_event evt;
-       } __packed reply;
-
-       reply.evt.status = WMI_TRAFFIC_RESUME_FAILED;
-       reply.evt.resume_triggers = WMI_RESUME_TRIGGER_UNKNOWN;
+       } __packed reply = {
+               .evt = {.status = WMI_TRAFFIC_RESUME_FAILED,
+                       .resume_triggers =
+                               cpu_to_le32(WMI_RESUME_TRIGGER_UNKNOWN)},
+       };
 
        rc = wmi_call(wil, WMI_TRAFFIC_RESUME_CMDID, vif->mid, NULL, 0,
                      WMI_TRAFFIC_RESUME_EVENTID, &reply, sizeof(reply),
@@ -2401,7 +2428,9 @@ int wmi_port_allocate(struct wil6210_priv *wil, u8 mid,
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_port_allocated_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = WMI_FW_STATUS_FAILURE},
+       };
 
        wil_dbg_misc(wil, "port allocate, mid %d iftype %d, mac %pM\n",
                     mid, iftype, mac);
@@ -2426,8 +2455,6 @@ int wmi_port_allocate(struct wil6210_priv *wil, u8 mid,
                return -EINVAL;
        }
 
-       reply.evt.status = WMI_FW_STATUS_FAILURE;
-
        rc = wmi_call(wil, WMI_PORT_ALLOCATE_CMDID, mid,
                      &cmd, sizeof(cmd),
                      WMI_PORT_ALLOCATED_EVENTID, &reply,
@@ -2454,12 +2481,12 @@ int wmi_port_delete(struct wil6210_priv *wil, u8 mid)
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_port_deleted_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.status = WMI_FW_STATUS_FAILURE},
+       };
 
        wil_dbg_misc(wil, "port delete, mid %d\n", mid);
 
-       reply.evt.status = WMI_FW_STATUS_FAILURE;
-
        rc = wmi_call(wil, WMI_PORT_DELETE_CMDID, mid,
                      &cmd, sizeof(cmd),
                      WMI_PORT_DELETED_EVENTID, &reply,
@@ -2716,7 +2743,9 @@ int wmi_start_sched_scan(struct wil6210_priv *wil,
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_start_sched_scan_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.result = WMI_PNO_REJECT},
+       };
 
        if (!test_bit(WMI_FW_CAPABILITY_PNO, wil->fw_capabilities))
                return -ENOTSUPP;
@@ -2732,8 +2761,6 @@ int wmi_start_sched_scan(struct wil6210_priv *wil,
        wmi_sched_scan_set_plans(wil, &cmd,
                                 request->scan_plans, request->n_scan_plans);
 
-       reply.evt.result = WMI_PNO_REJECT;
-
        rc = wmi_call(wil, WMI_START_SCHED_SCAN_CMDID, vif->mid,
                      &cmd, sizeof(cmd),
                      WMI_START_SCHED_SCAN_EVENTID, &reply, sizeof(reply),
@@ -2757,13 +2784,13 @@ int wmi_stop_sched_scan(struct wil6210_priv *wil)
        struct {
                struct wmi_cmd_hdr wmi;
                struct wmi_stop_sched_scan_event evt;
-       } __packed reply;
+       } __packed reply = {
+               .evt = {.result = WMI_PNO_REJECT},
+       };
 
        if (!test_bit(WMI_FW_CAPABILITY_PNO, wil->fw_capabilities))
                return -ENOTSUPP;
 
-       reply.evt.result = WMI_PNO_REJECT;
-
        rc = wmi_call(wil, WMI_STOP_SCHED_SCAN_CMDID, vif->mid, NULL, 0,
                      WMI_STOP_SCHED_SCAN_EVENTID, &reply, sizeof(reply),
                      WIL_WMI_CALL_GENERAL_TO_MS);
@@ -2778,3 +2805,50 @@ int wmi_stop_sched_scan(struct wil6210_priv *wil)
 
        return 0;
 }
+
+int wmi_mgmt_tx(struct wil6210_vif *vif, const u8 *buf, size_t len)
+{
+       size_t total;
+       struct wil6210_priv *wil = vif_to_wil(vif);
+       struct ieee80211_mgmt *mgmt_frame = (void *)buf;
+       struct wmi_sw_tx_req_cmd *cmd;
+       struct {
+               struct wmi_cmd_hdr wmi;
+               struct wmi_sw_tx_complete_event evt;
+       } __packed evt = {
+               .evt = {.status = WMI_FW_STATUS_FAILURE},
+       };
+       int rc;
+
+       wil_dbg_misc(wil, "mgmt_tx mid %d\n", vif->mid);
+       wil_hex_dump_misc("mgmt tx frame ", DUMP_PREFIX_OFFSET, 16, 1, buf,
+                         len, true);
+
+       if (len < sizeof(struct ieee80211_hdr_3addr))
+               return -EINVAL;
+
+       total = sizeof(*cmd) + len;
+       if (total < len) {
+               wil_err(wil, "mgmt_tx invalid len %zu\n", len);
+               return -EINVAL;
+       }
+
+       cmd = kmalloc(total, GFP_KERNEL);
+       if (!cmd)
+               return -ENOMEM;
+
+       memcpy(cmd->dst_mac, mgmt_frame->da, WMI_MAC_LEN);
+       cmd->len = cpu_to_le16(len);
+       memcpy(cmd->payload, buf, len);
+
+       rc = wmi_call(wil, WMI_SW_TX_REQ_CMDID, vif->mid, cmd, total,
+                     WMI_SW_TX_COMPLETE_EVENTID, &evt, sizeof(evt), 2000);
+       if (!rc && evt.evt.status != WMI_FW_STATUS_SUCCESS) {
+               wil_err(wil, "mgmt_tx failed with status %d\n", evt.evt.status);
+               rc = -EINVAL;
+       }
+
+       kfree(cmd);
+
+       return rc;
+}
index d3e75f0ff24550a703d9546f4db676cd4fb6602d..dc503d903786bd7d2516f31d5d7b57ba33a3579e 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright (c) 2018, The Linux Foundation. All rights reserved.
  * Copyright (c) 2012-2017 Qualcomm Atheros, Inc.
  * Copyright (c) 2006-2012 Wilocity
  *
@@ -29,8 +30,6 @@
 #ifndef __WILOCITY_WMI_H__
 #define __WILOCITY_WMI_H__
 
-/* General */
-#define WMI_MAX_ASSOC_STA              (8)
 #define WMI_DEFAULT_ASSOC_STA          (1)
 #define WMI_MAC_LEN                    (6)
 #define WMI_PROX_RANGE_NUM             (3)
 #define WMI_RF_ETYPE_LENGTH            (3)
 #define WMI_RF_RX2TX_LENGTH            (3)
 #define WMI_RF_ETYPE_VAL_PER_RANGE     (5)
+/* DTYPE configuration array size
+ * must always be kept equal to (WMI_RF_DTYPE_LENGTH+1)
+ */
+#define WMI_RF_DTYPE_CONF_LENGTH       (4)
+/* ETYPE configuration array size
+ * must always be kept equal to
+ * (WMI_RF_ETYPE_LENGTH+WMI_RF_ETYPE_VAL_PER_RANGE)
+ */
+#define WMI_RF_ETYPE_CONF_LENGTH       (8)
+/* RX2TX configuration array size
+ * must always be kept equal to (WMI_RF_RX2TX_LENGTH+1)
+ */
+#define WMI_RF_RX2TX_CONF_LENGTH       (4)
 
 /* Mailbox interface
  * used for commands and events
@@ -61,7 +73,7 @@ enum wmi_fw_capability {
        WMI_FW_CAPABILITY_PS_CONFIG                     = 1,
        WMI_FW_CAPABILITY_RF_SECTORS                    = 2,
        WMI_FW_CAPABILITY_MGMT_RETRY_LIMIT              = 3,
-       WMI_FW_CAPABILITY_DISABLE_AP_SME                = 4,
+       WMI_FW_CAPABILITY_AP_SME_OFFLOAD_PARTIAL        = 4,
        WMI_FW_CAPABILITY_WMI_ONLY                      = 5,
        WMI_FW_CAPABILITY_THERMAL_THROTTLING            = 7,
        WMI_FW_CAPABILITY_D3_SUSPEND                    = 8,
@@ -73,6 +85,7 @@ enum wmi_fw_capability {
        WMI_FW_CAPABILITY_LO_POWER_CALIB_FROM_OTP       = 14,
        WMI_FW_CAPABILITY_PNO                           = 15,
        WMI_FW_CAPABILITY_REF_CLOCK_CONTROL             = 18,
+       WMI_FW_CAPABILITY_AP_SME_OFFLOAD_NONE           = 19,
        WMI_FW_CAPABILITY_MAX,
 };
 
@@ -164,12 +177,14 @@ enum wmi_command_id {
        WMI_SET_ACTIVE_SILENT_RSSI_TABLE_CMDID          = 0x85C,
        WMI_RF_PWR_ON_DELAY_CMDID                       = 0x85D,
        WMI_SET_HIGH_POWER_TABLE_PARAMS_CMDID           = 0x85E,
+       WMI_FIXED_SCHEDULING_UL_CONFIG_CMDID            = 0x85F,
        /* Performance monitoring commands */
        WMI_BF_CTRL_CMDID                               = 0x862,
        WMI_NOTIFY_REQ_CMDID                            = 0x863,
        WMI_GET_STATUS_CMDID                            = 0x864,
        WMI_GET_RF_STATUS_CMDID                         = 0x866,
        WMI_GET_BASEBAND_TYPE_CMDID                     = 0x867,
+       WMI_VRING_SWITCH_TIMING_CONFIG_CMDID            = 0x868,
        WMI_UNIT_TEST_CMDID                             = 0x900,
        WMI_FLASH_READ_CMDID                            = 0x902,
        WMI_FLASH_WRITE_CMDID                           = 0x903,
@@ -202,6 +217,7 @@ enum wmi_command_id {
        WMI_GET_THERMAL_THROTTLING_CFG_CMDID            = 0x941,
        /* Read Power Save profile type */
        WMI_PS_DEV_PROFILE_CFG_READ_CMDID               = 0x942,
+       WMI_TSF_SYNC_CMDID                              = 0x973,
        WMI_TOF_SESSION_START_CMDID                     = 0x991,
        WMI_TOF_GET_CAPABILITIES_CMDID                  = 0x992,
        WMI_TOF_SET_LCR_CMDID                           = 0x993,
@@ -218,11 +234,16 @@ enum wmi_command_id {
        WMI_PRIO_TX_SECTORS_ORDER_CMDID                 = 0x9A5,
        WMI_PRIO_TX_SECTORS_NUMBER_CMDID                = 0x9A6,
        WMI_PRIO_TX_SECTORS_SET_DEFAULT_CFG_CMDID       = 0x9A7,
+       WMI_BF_CONTROL_CMDID                            = 0x9AA,
        WMI_SCHEDULING_SCHEME_CMDID                     = 0xA01,
        WMI_FIXED_SCHEDULING_CONFIG_CMDID               = 0xA02,
        WMI_ENABLE_FIXED_SCHEDULING_CMDID               = 0xA03,
        WMI_SET_MULTI_DIRECTED_OMNIS_CONFIG_CMDID       = 0xA04,
        WMI_SET_LONG_RANGE_CONFIG_CMDID                 = 0xA05,
+       WMI_GET_ASSOC_LIST_CMDID                        = 0xA06,
+       WMI_GET_CCA_INDICATIONS_CMDID                   = 0xA07,
+       WMI_SET_CCA_INDICATIONS_BI_AVG_NUM_CMDID        = 0xA08,
+       WMI_INTERNAL_FW_IOCTL_CMDID                     = 0xA0B,
        WMI_SET_MAC_ADDRESS_CMDID                       = 0xF003,
        WMI_ABORT_SCAN_CMDID                            = 0xF007,
        WMI_SET_PROMISCUOUS_MODE_CMDID                  = 0xF041,
@@ -484,6 +505,18 @@ enum wmi_rf_mgmt_type {
        WMI_RF_MGMT_GET_STATUS  = 0x02,
 };
 
+/* WMI_BF_CONTROL_CMDID */
+enum wmi_bf_triggers {
+       WMI_BF_TRIGGER_RS_MCS1_TH_FAILURE               = 0x01,
+       WMI_BF_TRIGGER_RS_MCS1_NO_BACK_FAILURE          = 0x02,
+       WMI_BF_TRIGGER_MAX_CTS_FAILURE_IN_TXOP          = 0x04,
+       WMI_BF_TRIGGER_MAX_BACK_FAILURE                 = 0x08,
+       WMI_BF_TRIGGER_FW                               = 0x10,
+       WMI_BF_TRIGGER_MAX_CTS_FAILURE_IN_KEEP_ALIVE    = 0x20,
+       WMI_BF_TRIGGER_AOA                              = 0x40,
+       WMI_BF_TRIGGER_MAX_CTS_FAILURE_IN_UPM           = 0x80,
+};
+
 /* WMI_RF_MGMT_CMDID */
 struct wmi_rf_mgmt_cmd {
        __le32 rf_mgmt_type;
@@ -519,7 +552,9 @@ struct wmi_bcon_ctrl_cmd {
        u8 disable_sec;
        u8 hidden_ssid;
        u8 is_go;
-       u8 reserved[2];
+       /* A-BFT length override if non-0 */
+       u8 abft_len;
+       u8 reserved;
 } __packed;
 
 /* WMI_PORT_ALLOCATE_CMDID */
@@ -584,6 +619,16 @@ struct wmi_power_mgmt_cfg_cmd {
        u8 reserved[3];
 } __packed;
 
+/* WMI_PCP_START_CMDID */
+enum wmi_ap_sme_offload_mode {
+       /* Full AP SME in FW */
+       WMI_AP_SME_OFFLOAD_FULL         = 0x00,
+       /* Probe AP SME in FW */
+       WMI_AP_SME_OFFLOAD_PARTIAL      = 0x01,
+       /* AP SME in host */
+       WMI_AP_SME_OFFLOAD_NONE         = 0x02,
+};
+
 /* WMI_PCP_START_CMDID */
 struct wmi_pcp_start_cmd {
        __le16 bcon_interval;
@@ -593,7 +638,8 @@ struct wmi_pcp_start_cmd {
        u8 reserved0[5];
        /* A-BFT length override if non-0 */
        u8 abft_len;
-       u8 disable_ap_sme;
+       /* enum wmi_ap_sme_offload_mode_e */
+       u8 ap_sme_offload_mode;
        u8 network_type;
        u8 channel;
        u8 disable_sec_offload;
@@ -607,6 +653,17 @@ struct wmi_sw_tx_req_cmd {
        u8 payload[0];
 } __packed;
 
+/* WMI_VRING_SWITCH_TIMING_CONFIG_CMDID */
+struct wmi_vring_switch_timing_config_cmd {
+       /* Set vring timing configuration:
+        *
+        * defined interval for vring switch
+        */
+       __le32 interval_usec;
+       /* vring inactivity threshold */
+       __le32 idle_th_usec;
+} __packed;
+
 struct wmi_sw_ring_cfg {
        __le64 ring_mem_base;
        __le16 ring_size;
@@ -642,6 +699,7 @@ enum wmi_vring_cfg_schd_params_priority {
        WMI_SCH_PRIO_HIGH       = 0x01,
 };
 
+#define CIDXTID_EXTENDED_CID_TID               (0xFF)
 #define CIDXTID_CID_POS                                (0)
 #define CIDXTID_CID_LEN                                (4)
 #define CIDXTID_CID_MSK                                (0xF)
@@ -662,6 +720,9 @@ struct wmi_vring_cfg {
        struct wmi_sw_ring_cfg tx_sw_ring;
        /* 0-23 vrings */
        u8 ringid;
+       /* Used for cid less than 8. For higher cid set
+        * CIDXTID_EXTENDED_CID_TID here and use cid and tid members instead
+        */
        u8 cidxtid;
        u8 encap_trans_type;
        /* 802.3 DS cfg */
@@ -671,6 +732,11 @@ struct wmi_vring_cfg {
        u8 to_resolution;
        u8 agg_max_wsize;
        struct wmi_vring_cfg_schd schd_params;
+       /* Used when cidxtid = CIDXTID_EXTENDED_CID_TID */
+       u8 cid;
+       /* Used when cidxtid = CIDXTID_EXTENDED_CID_TID */
+       u8 tid;
+       u8 reserved[2];
 } __packed;
 
 enum wmi_vring_cfg_cmd_action {
@@ -868,23 +934,42 @@ struct wmi_cfg_rx_chain_cmd {
 
 /* WMI_RCP_ADDBA_RESP_CMDID */
 struct wmi_rcp_addba_resp_cmd {
+       /* Used for cid less than 8. For higher cid set
+        * CIDXTID_EXTENDED_CID_TID here and use cid and tid members instead
+        */
        u8 cidxtid;
        u8 dialog_token;
        __le16 status_code;
        /* ieee80211_ba_parameterset field to send */
        __le16 ba_param_set;
        __le16 ba_timeout;
+       /* Used when cidxtid = CIDXTID_EXTENDED_CID_TID */
+       u8 cid;
+       /* Used when cidxtid = CIDXTID_EXTENDED_CID_TID */
+       u8 tid;
+       u8 reserved[2];
 } __packed;
 
 /* WMI_RCP_DELBA_CMDID */
 struct wmi_rcp_delba_cmd {
+       /* Used for cid less than 8. For higher cid set
+        * CIDXTID_EXTENDED_CID_TID here and use cid and tid members instead
+        */
        u8 cidxtid;
        u8 reserved;
        __le16 reason;
+       /* Used when cidxtid = CIDXTID_EXTENDED_CID_TID */
+       u8 cid;
+       /* Used when cidxtid = CIDXTID_EXTENDED_CID_TID */
+       u8 tid;
+       u8 reserved2[2];
 } __packed;
 
 /* WMI_RCP_ADDBA_REQ_CMDID */
 struct wmi_rcp_addba_req_cmd {
+       /* Used for cid less than 8. For higher cid set
+        * CIDXTID_EXTENDED_CID_TID here and use cid and tid members instead
+        */
        u8 cidxtid;
        u8 dialog_token;
        /* ieee80211_ba_parameterset field as it received */
@@ -892,6 +977,11 @@ struct wmi_rcp_addba_req_cmd {
        __le16 ba_timeout;
        /* ieee80211_ba_seqstrl field as it received */
        __le16 ba_seq_ctrl;
+       /* Used when cidxtid = CIDXTID_EXTENDED_CID_TID */
+       u8 cid;
+       /* Used when cidxtid = CIDXTID_EXTENDED_CID_TID */
+       u8 tid;
+       u8 reserved[2];
 } __packed;
 
 /* WMI_SET_MAC_ADDRESS_CMDID */
@@ -902,15 +992,20 @@ struct wmi_set_mac_address_cmd {
 
 /* WMI_ECHO_CMDID
  * Check FW is alive
- * WMI_DEEP_ECHO_CMDID
- * Check FW and ucode are alive
  * Returned event: WMI_ECHO_RSP_EVENTID
- * same event for both commands
  */
 struct wmi_echo_cmd {
        __le32 value;
 } __packed;
 
+/* WMI_DEEP_ECHO_CMDID
+ * Check FW and ucode are alive
+ * Returned event: WMI_ECHO_RSP_EVENTID
+ */
+struct wmi_deep_echo_cmd {
+       __le32 value;
+} __packed;
+
 /* WMI_RF_PWR_ON_DELAY_CMDID
  * set FW time parameters used through RF resetting
  *  RF reset consists of bringing its power down for a period of time, then
@@ -928,7 +1023,7 @@ struct wmi_rf_pwr_on_delay_cmd {
        __le16 up_delay_usec;
 } __packed;
 
-/* \WMI_SET_HIGH_POWER_TABLE_PARAMS_CMDID
+/* WMI_SET_HIGH_POWER_TABLE_PARAMS_CMDID
  * This API controls the Tx and Rx gain over temperature.
  * It controls the Tx D-type, Rx D-type and Rx E-type amplifiers.
  * It also controls the Tx gain index, by controlling the Rx to Tx gain index
@@ -942,25 +1037,46 @@ struct wmi_set_high_power_table_params_cmd {
        u8 tx_dtype_temp[WMI_RF_DTYPE_LENGTH];
        u8 reserved0;
        /* Tx D-type values to be used for each temperature range */
-       __le32 tx_dtype_conf[WMI_RF_DTYPE_LENGTH + 1];
+       __le32 tx_dtype_conf[WMI_RF_DTYPE_CONF_LENGTH];
+       /* Temperature range for Tx E-type parameters */
+       u8 tx_etype_temp[WMI_RF_ETYPE_LENGTH];
+       u8 reserved1;
+       /* Tx E-type values to be used for each temperature range.
+        * The last 4 values of any range are the first 4 values of the next
+        * range and so on
+        */
+       __le32 tx_etype_conf[WMI_RF_ETYPE_CONF_LENGTH];
        /* Temperature range for Rx D-type parameters */
        u8 rx_dtype_temp[WMI_RF_DTYPE_LENGTH];
-       u8 reserved1;
+       u8 reserved2;
        /* Rx D-type values to be used for each temperature range */
-       __le32 rx_dtype_conf[WMI_RF_DTYPE_LENGTH + 1];
+       __le32 rx_dtype_conf[WMI_RF_DTYPE_CONF_LENGTH];
        /* Temperature range for Rx E-type parameters */
        u8 rx_etype_temp[WMI_RF_ETYPE_LENGTH];
-       u8 reserved2;
+       u8 reserved3;
        /* Rx E-type values to be used for each temperature range.
         * The last 4 values of any range are the first 4 values of the next
         * range and so on
         */
-       __le32 rx_etype_conf[WMI_RF_ETYPE_VAL_PER_RANGE + WMI_RF_ETYPE_LENGTH];
+       __le32 rx_etype_conf[WMI_RF_ETYPE_CONF_LENGTH];
        /* Temperature range for rx_2_tx_offs parameters */
        u8 rx_2_tx_temp[WMI_RF_RX2TX_LENGTH];
-       u8 reserved3;
+       u8 reserved4;
        /* Rx to Tx gain index offset */
-       s8 rx_2_tx_offs[WMI_RF_RX2TX_LENGTH + 1];
+       s8 rx_2_tx_offs[WMI_RF_RX2TX_CONF_LENGTH];
+} __packed;
+
+/* WMI_FIXED_SCHEDULING_UL_CONFIG_CMDID
+ * This API sets rd parameter per mcs.
+ * Relevant only in Fixed Scheduling mode.
+ * Returned event: WMI_FIXED_SCHEDULING_UL_CONFIG_EVENTID
+ */
+struct wmi_fixed_scheduling_ul_config_cmd {
+       /* Use mcs -1 to set for every mcs */
+       s8 mcs;
+       /* Number of frames with rd bit set in a single virtual slot */
+       u8 rd_count_per_slot;
+       u8 reserved[2];
 } __packed;
 
 /* CMD: WMI_RF_XPM_READ_CMDID */
@@ -1267,6 +1383,93 @@ struct wmi_set_long_range_config_complete_event {
        u8 reserved[3];
 } __packed;
 
+/* payload max size is 236 bytes: max event buffer size (256) - WMI headers
+ * (16) - prev struct field size (4)
+ */
+#define WMI_MAX_IOCTL_PAYLOAD_SIZE             (236)
+#define WMI_MAX_IOCTL_REPLY_PAYLOAD_SIZE       (236)
+#define WMI_MAX_INTERNAL_EVENT_PAYLOAD_SIZE    (236)
+
+enum wmi_internal_fw_ioctl_code {
+       WMI_INTERNAL_FW_CODE_NONE       = 0x0,
+       WMI_INTERNAL_FW_CODE_QCOM       = 0x1,
+};
+
+/* WMI_INTERNAL_FW_IOCTL_CMDID */
+struct wmi_internal_fw_ioctl_cmd {
+       /* enum wmi_internal_fw_ioctl_code */
+       __le16 code;
+       __le16 length;
+       /* payload max size is WMI_MAX_IOCTL_PAYLOAD_SIZE
+        * Must be the last member of the struct
+        */
+       __le32 payload[0];
+} __packed;
+
+/* WMI_INTERNAL_FW_IOCTL_EVENTID */
+struct wmi_internal_fw_ioctl_event {
+       /* wmi_fw_status */
+       u8 status;
+       u8 reserved;
+       __le16 length;
+       /* payload max size is WMI_MAX_IOCTL_REPLY_PAYLOAD_SIZE
+        * Must be the last member of the struct
+        */
+       __le32 payload[0];
+} __packed;
+
+/* WMI_INTERNAL_FW_EVENT_EVENTID */
+struct wmi_internal_fw_event_event {
+       __le16 id;
+       __le16 length;
+       /* payload max size is WMI_MAX_INTERNAL_EVENT_PAYLOAD_SIZE
+        * Must be the last member of the struct
+        */
+       __le32 payload[0];
+} __packed;
+
+/* WMI_BF_CONTROL_CMDID */
+struct wmi_bf_control_cmd {
+       /* wmi_bf_triggers */
+       __le32 triggers;
+       u8 cid;
+       /* DISABLED = 0, ENABLED = 1 , DRY_RUN = 2 */
+       u8 txss_mode;
+       /* DISABLED = 0, ENABLED = 1, DRY_RUN = 2 */
+       u8 brp_mode;
+       /* Max cts threshold (correspond to
+        * WMI_BF_TRIGGER_MAX_CTS_FAILURE_IN_TXOP)
+        */
+       u8 bf_trigger_max_cts_failure_thr;
+       /* Max cts threshold in dense (correspond to
+        * WMI_BF_TRIGGER_MAX_CTS_FAILURE_IN_TXOP)
+        */
+       u8 bf_trigger_max_cts_failure_dense_thr;
+       /* Max b-ack threshold (correspond to
+        * WMI_BF_TRIGGER_MAX_BACK_FAILURE)
+        */
+       u8 bf_trigger_max_back_failure_thr;
+       /* Max b-ack threshold in dense (correspond to
+        * WMI_BF_TRIGGER_MAX_BACK_FAILURE)
+        */
+       u8 bf_trigger_max_back_failure_dense_thr;
+       u8 reserved0;
+       /* Wrong sectors threshold */
+       __le32 wrong_sector_bis_thr;
+       /* BOOL to enable/disable long term trigger */
+       u8 long_term_enable;
+       /* 1 = Update long term thresholds from the long_term_mbps_th_tbl and
+        * long_term_trig_timeout_per_mcs arrays, 0 = Ignore
+        */
+       u8 long_term_update_thr;
+       /* Long term throughput threshold [Mbps] */
+       u8 long_term_mbps_th_tbl[WMI_NUM_MCS];
+       u8 reserved1;
+       /* Long term timeout threshold table [msec] */
+       __le16 long_term_trig_timeout_per_mcs[WMI_NUM_MCS];
+       u8 reserved2[2];
+} __packed;
+
 /* WMI Events
  * List of Events (target to host)
  */
@@ -1325,6 +1528,7 @@ enum wmi_event_id {
        WMI_SET_SILENT_RSSI_TABLE_DONE_EVENTID          = 0x185C,
        WMI_RF_PWR_ON_DELAY_RSP_EVENTID                 = 0x185D,
        WMI_SET_HIGH_POWER_TABLE_PARAMS_EVENTID         = 0x185E,
+       WMI_FIXED_SCHEDULING_UL_CONFIG_EVENTID          = 0x185F,
        /* Performance monitoring events */
        WMI_DATA_PORT_OPEN_EVENTID                      = 0x1860,
        WMI_WBE_LINK_DOWN_EVENTID                       = 0x1861,
@@ -1334,6 +1538,7 @@ enum wmi_event_id {
        WMI_VRING_EN_EVENTID                            = 0x1865,
        WMI_GET_RF_STATUS_EVENTID                       = 0x1866,
        WMI_GET_BASEBAND_TYPE_EVENTID                   = 0x1867,
+       WMI_VRING_SWITCH_TIMING_CONFIG_EVENTID          = 0x1868,
        WMI_UNIT_TEST_EVENTID                           = 0x1900,
        WMI_FLASH_READ_DONE_EVENTID                     = 0x1902,
        WMI_FLASH_WRITE_DONE_EVENTID                    = 0x1903,
@@ -1363,6 +1568,7 @@ enum wmi_event_id {
        WMI_GET_THERMAL_THROTTLING_CFG_EVENTID          = 0x1941,
        /* return the Power Save profile */
        WMI_PS_DEV_PROFILE_CFG_READ_EVENTID             = 0x1942,
+       WMI_TSF_SYNC_STATUS_EVENTID                     = 0x1973,
        WMI_TOF_SESSION_END_EVENTID                     = 0x1991,
        WMI_TOF_GET_CAPABILITIES_EVENTID                = 0x1992,
        WMI_TOF_SET_LCR_EVENTID                         = 0x1993,
@@ -1380,17 +1586,24 @@ enum wmi_event_id {
        WMI_PRIO_TX_SECTORS_ORDER_EVENTID               = 0x19A5,
        WMI_PRIO_TX_SECTORS_NUMBER_EVENTID              = 0x19A6,
        WMI_PRIO_TX_SECTORS_SET_DEFAULT_CFG_EVENTID     = 0x19A7,
+       WMI_BF_CONTROL_EVENTID                          = 0x19AA,
        WMI_SCHEDULING_SCHEME_EVENTID                   = 0x1A01,
        WMI_FIXED_SCHEDULING_CONFIG_COMPLETE_EVENTID    = 0x1A02,
        WMI_ENABLE_FIXED_SCHEDULING_COMPLETE_EVENTID    = 0x1A03,
        WMI_SET_MULTI_DIRECTED_OMNIS_CONFIG_EVENTID     = 0x1A04,
        WMI_SET_LONG_RANGE_CONFIG_COMPLETE_EVENTID      = 0x1A05,
+       WMI_GET_ASSOC_LIST_RES_EVENTID                  = 0x1A06,
+       WMI_GET_CCA_INDICATIONS_EVENTID                 = 0x1A07,
+       WMI_SET_CCA_INDICATIONS_BI_AVG_NUM_EVENTID      = 0x1A08,
+       WMI_INTERNAL_FW_EVENT_EVENTID                   = 0x1A0A,
+       WMI_INTERNAL_FW_IOCTL_EVENTID                   = 0x1A0B,
        WMI_SET_CHANNEL_EVENTID                         = 0x9000,
        WMI_ASSOC_REQ_EVENTID                           = 0x9001,
        WMI_EAPOL_RX_EVENTID                            = 0x9002,
        WMI_MAC_ADDR_RESP_EVENTID                       = 0x9003,
        WMI_FW_VER_EVENTID                              = 0x9004,
        WMI_ACS_PASSIVE_SCAN_COMPLETE_EVENTID           = 0x9005,
+       WMI_INTERNAL_FW_SET_CHANNEL                     = 0x9006,
        WMI_COMMAND_NOT_SUPPORTED_EVENTID               = 0xFFFF,
 };
 
@@ -1462,12 +1675,16 @@ enum rf_type {
        RF_UNKNOWN      = 0x00,
        RF_MARLON       = 0x01,
        RF_SPARROW      = 0x02,
+       RF_TALYNA1      = 0x03,
+       RF_TALYNA2      = 0x04,
 };
 
 /* WMI_GET_RF_STATUS_EVENTID */
 enum board_file_rf_type {
        BF_RF_MARLON    = 0x00,
        BF_RF_SPARROW   = 0x01,
+       BF_RF_TALYNA1   = 0x02,
+       BF_RF_TALYNA2   = 0x03,
 };
 
 /* WMI_GET_RF_STATUS_EVENTID */
@@ -1507,6 +1724,7 @@ enum baseband_type {
        BASEBAND_SPARROW_M_C0   = 0x06,
        BASEBAND_SPARROW_M_D0   = 0x07,
        BASEBAND_TALYN_M_A0     = 0x08,
+       BASEBAND_TALYN_M_B0     = 0x09,
 };
 
 /* WMI_GET_BASEBAND_TYPE_EVENTID */
@@ -1551,7 +1769,11 @@ struct wmi_ready_event {
        u8 numof_additional_mids;
        /* rfc read calibration result. 5..15 */
        u8 rfc_read_calib_result;
-       u8 reserved[3];
+       /* Max associated STAs supported by FW in AP mode (default 0 means 8
+        * STA)
+        */
+       u8 max_assoc_sta;
+       u8 reserved[2];
 } __packed;
 
 /* WMI_NOTIFY_REQ_DONE_EVENTID */
@@ -1666,13 +1888,13 @@ enum wmi_pno_result {
 };
 
 struct wmi_start_sched_scan_event {
-       /* pno_result */
+       /* wmi_pno_result */
        u8 result;
        u8 reserved[3];
 } __packed;
 
 struct wmi_stop_sched_scan_event {
-       /* pno_result */
+       /* wmi_pno_result */
        u8 result;
        u8 reserved[3];
 } __packed;
@@ -1739,9 +1961,17 @@ struct wmi_ba_status_event {
 
 /* WMI_DELBA_EVENTID */
 struct wmi_delba_event {
+       /* Used for cid less than 8. For higher cid set
+        * CIDXTID_EXTENDED_CID_TID here and use cid and tid members instead
+        */
        u8 cidxtid;
        u8 from_initiator;
        __le16 reason;
+       /* Used when cidxtid = CIDXTID_EXTENDED_CID_TID */
+       u8 cid;
+       /* Used when cidxtid = CIDXTID_EXTENDED_CID_TID */
+       u8 tid;
+       u8 reserved[2];
 } __packed;
 
 /* WMI_VRING_CFG_DONE_EVENTID */
@@ -1754,13 +1984,24 @@ struct wmi_vring_cfg_done_event {
 
 /* WMI_RCP_ADDBA_RESP_SENT_EVENTID */
 struct wmi_rcp_addba_resp_sent_event {
+       /* Used for cid less than 8. For higher cid set
+        * CIDXTID_EXTENDED_CID_TID here and use cid and tid members instead
+        */
        u8 cidxtid;
        u8 reserved;
        __le16 status;
+       /* Used when cidxtid = CIDXTID_EXTENDED_CID_TID */
+       u8 cid;
+       /* Used when cidxtid = CIDXTID_EXTENDED_CID_TID */
+       u8 tid;
+       u8 reserved2[2];
 } __packed;
 
 /* WMI_RCP_ADDBA_REQ_EVENTID */
 struct wmi_rcp_addba_req_event {
+       /* Used for cid less than 8. For higher cid set
+        * CIDXTID_EXTENDED_CID_TID here and use cid and tid members instead
+        */
        u8 cidxtid;
        u8 dialog_token;
        /* ieee80211_ba_parameterset as it received */
@@ -1768,6 +2009,11 @@ struct wmi_rcp_addba_req_event {
        __le16 ba_timeout;
        /* ieee80211_ba_seqstrl field as it received */
        __le16 ba_seq_ctrl;
+       /* Used when cidxtid = CIDXTID_EXTENDED_CID_TID */
+       u8 cid;
+       /* Used when cidxtid = CIDXTID_EXTENDED_CID_TID */
+       u8 tid;
+       u8 reserved[2];
 } __packed;
 
 /* WMI_CFG_RX_CHAIN_DONE_EVENTID */
@@ -1942,6 +2188,13 @@ struct wmi_set_high_power_table_params_event {
        u8 reserved[3];
 } __packed;
 
+/* WMI_FIXED_SCHEDULING_UL_CONFIG_EVENTID */
+struct wmi_fixed_scheduling_ul_config_event {
+       /* wmi_fw_status */
+       u8 status;
+       u8 reserved[3];
+} __packed;
+
 /* WMI_TEMP_SENSE_DONE_EVENTID
  *
  * Measure MAC and radio temperatures
@@ -2290,6 +2543,8 @@ struct wmi_link_maintain_cfg {
        __le32 bad_beacons_num_threshold;
        /* SNR limit for bad_beacons_detector */
        __le32 bad_beacons_snr_threshold_db;
+       /* timeout for disassoc response frame in uSec */
+       __le32 disconnect_timeout;
 } __packed;
 
 /* WMI_LINK_MAINTAIN_CFG_WRITE_CMDID */
@@ -2519,6 +2774,7 @@ enum wmi_tof_session_end_status {
        WMI_TOF_SESSION_END_FAIL                = 0x01,
        WMI_TOF_SESSION_END_PARAMS_ERROR        = 0x02,
        WMI_TOF_SESSION_END_ABORTED             = 0x03,
+       WMI_TOF_SESSION_END_BUSY                = 0x04,
 };
 
 /* WMI_TOF_SESSION_END_EVENTID */
@@ -2925,7 +3181,40 @@ struct wmi_set_silent_rssi_table_done_event {
        __le32 table;
 } __packed;
 
-/* \WMI_COMMAND_NOT_SUPPORTED_EVENTID */
+/* WMI_VRING_SWITCH_TIMING_CONFIG_EVENTID */
+struct wmi_vring_switch_timing_config_event {
+       /* enum wmi_fw_status */
+       u8 status;
+       u8 reserved[3];
+} __packed;
+
+/* WMI_GET_ASSOC_LIST_RES_EVENTID */
+struct wmi_assoc_sta_info {
+       u8 mac[WMI_MAC_LEN];
+       u8 omni_index_address;
+       u8 reserved;
+} __packed;
+
+#define WMI_GET_ASSOC_LIST_SIZE        (8)
+
+/* WMI_GET_ASSOC_LIST_RES_EVENTID
+ * Returns up to MAX_ASSOC_STA_LIST_SIZE associated STAs
+ */
+struct wmi_get_assoc_list_res_event {
+       struct wmi_assoc_sta_info assoc_sta_list[WMI_GET_ASSOC_LIST_SIZE];
+       /* STA count */
+       u8 count;
+       u8 reserved[3];
+} __packed;
+
+/* WMI_BF_CONTROL_EVENTID */
+struct wmi_bf_control_event {
+       /* wmi_fw_status */
+       u8 status;
+       u8 reserved[3];
+} __packed;
+
+/* WMI_COMMAND_NOT_SUPPORTED_EVENTID */
 struct wmi_command_not_supported_event {
        /* device id */
        u8 mid;
@@ -2936,4 +3225,62 @@ struct wmi_command_not_supported_event {
        __le16 reserved1;
 } __packed;
 
+/* WMI_TSF_SYNC_CMDID */
+struct wmi_tsf_sync_cmd {
+       /* The time interval to send announce frame in one BI */
+       u8 interval_ms;
+       /* The mcs to send announce frame */
+       u8 mcs;
+       u8 reserved[6];
+} __packed;
+
+/* WMI_TSF_SYNC_STATUS_EVENTID */
+enum wmi_tsf_sync_status {
+       WMI_TSF_SYNC_SUCCESS    = 0x00,
+       WMI_TSF_SYNC_FAILED     = 0x01,
+       WMI_TSF_SYNC_REJECTED   = 0x02,
+};
+
+/* WMI_TSF_SYNC_STATUS_EVENTID */
+struct wmi_tsf_sync_status_event {
+       /* enum wmi_tsf_sync_status */
+       u8 status;
+       u8 reserved[3];
+} __packed;
+
+/* WMI_GET_CCA_INDICATIONS_EVENTID */
+struct wmi_get_cca_indications_event {
+       /* wmi_fw_status */
+       u8 status;
+       /* CCA-Energy Detect in percentage over last BI (0..100) */
+       u8 cca_ed_percent;
+       /* Averaged CCA-Energy Detect in percent over number of BIs (0..100) */
+       u8 cca_ed_avg_percent;
+       /* NAV percent over last BI (0..100) */
+       u8 nav_percent;
+       /* Averaged NAV percent over number of BIs (0..100) */
+       u8 nav_avg_percent;
+       u8 reserved[3];
+} __packed;
+
+/* WMI_SET_CCA_INDICATIONS_BI_AVG_NUM_CMDID */
+struct wmi_set_cca_indications_bi_avg_num_cmd {
+       /* set the number of bis to average cca_ed (0..255) */
+       u8 bi_number;
+       u8 reserved[3];
+} __packed;
+
+/* WMI_SET_CCA_INDICATIONS_BI_AVG_NUM_EVENTID */
+struct wmi_set_cca_indications_bi_avg_num_event {
+       /* wmi_fw_status */
+       u8 status;
+       u8 reserved[3];
+} __packed;
+
+/* WMI_INTERNAL_FW_SET_CHANNEL */
+struct wmi_internal_fw_set_channel_event {
+       u8 channel_num;
+       u8 reserved[3];
+} __packed;
+
 #endif /* __WILOCITY_WMI_H__ */