fw-api: Update firmware common interface files

5f266a4 fw-api: Add WMI_SAR_LIMITS_CMDID id in wmi_id_to_name API
c443376 fw-api: CL 4973442 - update fw common interface files
efb5122 fw-api: CL 4962465 - update fw common interface files
dca6da8 fw-api: CL 4943781 - update fw common interface files
4d30959 fw-api: CL 4939194 - update fw common interface files
14314b1 fw-api: CL 4920552 - update fw common interface files
2d1b28c fw-api: CL 4901851 - update fw common interface files
30f8b88 fw-api: CL 4867158 - update fw common interface files
e4b4be9 fw-api: CL 4860783 - update fw common interface files
149944c fw-api: CL 4827718 - update fw common interface files
9371093 fw-api: CL 4822672 - update fw common interface files
7b6b7db fw-api: CL 4811569 - update fw common interface files
ddf59d7 fw-api: CL 4806347 - update fw common interface files
19b1fe6 fw-api: CL 4805563 - update fw common interface files
71cedde fw-api: CL 4798258 - update fw common interface files
b88a1b2 Adding wlan_module_ids.h from p4 to git to enable fw-api automation

Bug: 65174506
Bug: 111415903

Change-Id: I598d2eca5dcc4f731831b4c1f282316ab702cfb7
Signed-off-by: Srinivas Girigowda <sgirigow@codeaurora.org>
diff --git a/fw/htt.h b/fw/htt.h
index 18aa1d9..1523359 100644
--- a/fw/htt.h
+++ b/fw/htt.h
@@ -167,9 +167,10 @@
  * 3.50 Add learning_frame flag to htt_tx_msdu_desc_ext2_t
  * 3.51 Add SW peer ID and TID num to HTT TX WBM COMPLETION
  * 3.52 Add HTT_T2H FLOW_POOL_RESIZE msg def
+ * 3.53 Update HTT_T2H FLOW_POOL_RESIZE msg def
  */
 #define HTT_CURRENT_VERSION_MAJOR 3
-#define HTT_CURRENT_VERSION_MINOR 52
+#define HTT_CURRENT_VERSION_MINOR 53
 
 #define HTT_NUM_TX_FRAG_DESC  1024
 
@@ -10485,18 +10486,18 @@
  *
  *  The message would appear as follows:
  *
- *     |31            24|23            16|15             8|7              0|
- *     |----------------+----------------+----------------+----------------|
- *     |               flow Pool ID      |  reserved0     | Msg type       |
+ *     |31                             16|15             8|7              0|
+ *     |---------------------------------+----------------+----------------|
+ *     |                      reserved0                   | Msg type       |
  *     |-------------------------------------------------------------------|
- *     |               reserved1         |      flow pool new size         |
+ *     |         flow pool new size      |           flow pool ID          |
  *     |-------------------------------------------------------------------|
  *
  *  The message is interpreted as follows:
  *  b'0:7   - msg_type: This will be set to
  *            HTT_T2H_MSG_TYPE_FLOW_POOL_RESIZE
  *
- *  b'8:15  - flow pool ID: Existing flow pool ID
+ *  b'0:15  - flow pool ID: Existing flow pool ID
  *
  *  b'16:31 - flow pool new size: new pool size for exisiting flow pool ID
  *
@@ -10504,19 +10505,18 @@
 
 PREPACK struct htt_flow_pool_resize_t {
     A_UINT32 msg_type:8,
-             reserved0:8,
-             flow_pool_id:16;
-    A_UINT32 flow_pool_new_size:16,
-             reserved1:16;
+             reserved0:24;
+    A_UINT32 flow_pool_id:16,
+             flow_pool_new_size:16;
 } POSTPACK;
 
 #define HTT_FLOW_POOL_RESIZE_SZ  (sizeof(struct htt_flow_pool_resize_t))
 
-#define HTT_FLOW_POOL_RESIZE_FLOW_POOL_ID_M      0xffff0000
-#define HTT_FLOW_POOL_RESIZE_FLOW_POOL_ID_S      16
+#define HTT_FLOW_POOL_RESIZE_FLOW_POOL_ID_M      0x0000ffff
+#define HTT_FLOW_POOL_RESIZE_FLOW_POOL_ID_S      0
 
-#define HTT_FLOW_POOL_RESIZE_FLOW_POOL_NEW_SIZE_M    0x0000ffff
-#define HTT_FLOW_POOL_RESIZE_FLOW_POOL_NEW_SIZE_S    0
+#define HTT_FLOW_POOL_RESIZE_FLOW_POOL_NEW_SIZE_M    0xffff0000
+#define HTT_FLOW_POOL_RESIZE_FLOW_POOL_NEW_SIZE_S    16
 
 
 #define HTT_FLOW_POOL_RESIZE_FLOW_POOL_ID_GET(_var)    \
diff --git a/fw/htt_ppdu_stats.h b/fw/htt_ppdu_stats.h
index a3eaa25..d2f2f49 100644
--- a/fw/htt_ppdu_stats.h
+++ b/fw/htt_ppdu_stats.h
@@ -506,6 +506,18 @@
          ((_var) |= ((_val) << HTT_PPDU_STATS_USER_COMMON_TLV_BW_S)); \
      } while (0)
 
+#define HTT_PPDU_STATS_USER_COMMON_TLV_DELAYED_BA_M     0x00004000
+#define HTT_PPDU_STATS_USER_COMMON_TLV_DELAYED_BA_S             14
+
+#define HTT_PPDU_STATS_USER_COMMON_TLV_DELAYED_BA_GET(_var) \
+    (((_var) & HTT_PPDU_STATS_USER_COMMON_TLV_DELAYED_BA_M) >> \
+    HTT_PPDU_STATS_USER_COMMON_TLV_DELAYED_BA_S)
+
+#define HTT_PPDU_STATS_USER_COMMON_TLV_DELAYED_BA_SET(_var, _val) \
+     do { \
+         HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_COMMON_TLV_DELAYED_BA, _val); \
+         ((_var) |= ((_val) << HTT_PPDU_STATS_USER_COMMON_TLV_DELAYED_BA_S)); \
+     } while (0)
 
 #define HTT_PPDU_STATS_USER_COMMON_TLV_FRAME_CTRL_M     0x0000ffff
 #define HTT_PPDU_STATS_USER_COMMON_TLV_FRAME_CTRL_S              0
@@ -552,7 +564,8 @@
     /* BIT [ 0 :    0]   :- mcast
      * BIT [ 9 :    1]   :- mpdus_tried
      * BIT [ 13:   10]   :- bw - HTT_PPDU_STATS_BW
-     * BIT [ 31:   14]   :- rsvd
+     * BIT [ 14:   14]   : - delayed_ba
+     * BIT [ 31:   15]   :- rsvd
      */
     union {
         A_UINT32 bw__mpdus_tried__mcast;
@@ -560,7 +573,8 @@
             A_UINT32 mcast:              1,
                      mpdus_tried:        9,
                      bw:                 4,
-                     reserved0:         18;
+                     delayed_ba:         1,
+                     reserved0:         17;
         };
     };
 
diff --git a/fw/htt_stats.h b/fw/htt_stats.h
index d343aa0..baba371 100644
--- a/fw/htt_stats.h
+++ b/fw/htt_stats.h
@@ -346,6 +346,11 @@
     HTT_STATS_RX_REFILL_REO_ERR_TAG                     = 78,    /* htt_rx_soc_fw_refill_ring_num_reo_err_tlv_v */
     HTT_STATS_RX_REO_RESOURCE_STATS_TAG                 = 79,    /* htt_rx_reo_debug_stats_tlv_v */
     HTT_STATS_TX_SOUNDING_STATS_TAG                     = 80,    /* htt_tx_sounding_stats_tlv */
+    HTT_STATS_TX_PDEV_TX_PPDU_STATS_TAG                 = 81,    /* htt_tx_pdev_stats_tx_ppdu_stats_tlv_v */
+    HTT_STATS_TX_PDEV_TRIED_MPDU_CNT_HIST_TAG           = 82,    /* htt_tx_pdev_stats_tried_mpdu_cnt_hist_tlv_v */
+    HTT_STATS_TX_HWQ_TRIED_MPDU_CNT_HIST_TAG            = 83,    /* htt_tx_hwq_tried_mpdu_cnt_hist_tlv_v */
+    HTT_STATS_TX_HWQ_TXOP_USED_CNT_HIST_TAG             = 84,    /* htt_tx_hwq_txop_used_cnt_hist_tlv_v */
+    HTT_STATS_TX_DE_FW2WBM_RING_FULL_HIST_TAG           = 85,    /* htt_tx_de_fw2wbm_ring_full_hist_tlv */
 
     HTT_STATS_MAX_TAG,
 } htt_tlv_tag_t;
@@ -463,7 +468,7 @@
     A_UINT32 illgl_rate_phy_err;
     /* wal pdev continous xretry */
     A_UINT32 cont_xretry;
-    /* wal pdev continous xretry */
+    /* wal pdev tx timeout */
     A_UINT32 tx_timeout;
     /* wal pdev resets  */
     A_UINT32 pdev_resets;
@@ -535,6 +540,14 @@
      * (acked, no ack, flush, TTL, etc)
      */
     A_UINT32 local_data_freed;
+
+    /* Num MPDUs tried by SW */
+    A_UINT32 mpdu_tried;
+    /* Num of waiting seq posted in isr completion handler */
+    A_UINT32 isr_wait_seq_posted;
+
+    A_UINT32 tx_active_dur_us_low;
+    A_UINT32 tx_active_dur_us_high;
 } htt_tx_pdev_stats_cmn_tlv;
 
 #define HTT_TX_PDEV_STATS_URRN_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems))
@@ -572,6 +585,34 @@
     A_UINT32 sifs_hist_status[1]; /* HTT_TX_PDEV_SIFS_BURST_HIST_STATS */
 } htt_tx_pdev_stats_sifs_hist_tlv_v;
 
+typedef struct {
+    htt_tlv_hdr_t tlv_hdr;
+    A_UINT32 num_data_ppdus_legacy_su;
+    A_UINT32 num_data_ppdus_ac_su;
+    A_UINT32 num_data_ppdus_ax_su;
+    A_UINT32 num_data_ppdus_ac_su_txbf;
+    A_UINT32 num_data_ppdus_ax_su_txbf;
+} htt_tx_pdev_stats_tx_ppdu_stats_tlv_v;
+
+#define HTT_TX_PDEV_STATS_TRIED_MPDU_CNT_HIST_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems))
+/* NOTE: Variable length TLV, use length spec to infer array size .
+ *
+ *  Tried_mpdu_cnt_hist is the histogram of MPDUs tries per HWQ.
+ *  The tries here is the count of the  MPDUS within a PPDU that the
+ *  HW had attempted to transmit on  air, for the HWSCH Schedule
+ *  command submitted by FW.It is not the retry attempts.
+ *  The histogram bins are  0-29, 30-59, 60-89 and so on. The are
+ *   10 bins in this histogram. They are defined in FW using the
+ *  following macros
+ *  #define WAL_MAX_TRIED_MPDU_CNT_HISTOGRAM 9
+ *  #define WAL_TRIED_MPDU_CNT_HISTOGRAM_INTERVAL 30
+ *
+ */
+typedef struct {
+    htt_tlv_hdr_t tlv_hdr;
+    A_UINT32 tried_mpdu_cnt_hist[1]; /* HTT_TX_PDEV_TRIED_MPDU_CNT_HIST */
+    A_UINT32 hist_bin_size;
+} htt_tx_pdev_stats_tried_mpdu_cnt_hist_tlv_v;
 
 /* STATS_TYPE: HTT_DBG_EXT_STATS_PDEV_TX
  * TLV_TAGS:
@@ -581,6 +622,8 @@
  *      - HTT_STATS_TX_PDEV_FLUSH_TAG
  *      - HTT_STATS_TX_PDEV_PHY_ERR_TAG
  *      - HTT_STATS_TX_PDEV_SIFS_HIST_TAG
+ *      - HTT_STATS_TX_PDEV_TX_PPDU_STATS_TAG
+ *      - HTT_STATS_TX_PDEV_TRIED_MPDU_CNT_HIST_TAG
  */
 /* NOTE:
  * This structure is for documentation, and cannot be safely used directly.
@@ -593,6 +636,8 @@
     htt_tx_pdev_stats_flush_tlv_v flush_tlv;
     htt_tx_pdev_stats_phy_err_tlv_v phy_err_tlv;
     htt_tx_pdev_stats_sifs_hist_tlv_v sifs_hist_tlv;
+    htt_tx_pdev_stats_tx_ppdu_stats_tlv_v tx_su_tlv;
+    htt_tx_pdev_stats_tried_mpdu_cnt_hist_tlv_v tried_mpdu_cnt_hist_tlv;
 } htt_tx_pdev_stats_t;
 
 /* == SOC ERROR STATS == */
@@ -1279,6 +1324,8 @@
     A_UINT32 mpdu_ack_fail_cnt;      /* mpdus tried but ack was not received */
     A_UINT32 mpdu_filt_cnt;          /* This will include sched cmd flush and time based discard */
     A_UINT32 false_mpdu_ack_count;   /* Number of MPDUs for which ACK was sucessful but no Tx happened */
+
+    A_UINT32 txq_timeout;            /* Number of times txq timeout happened */
 } htt_tx_hwq_stats_cmn_tlv;
 
 #define HTT_TX_HWQ_DIFS_LATENCY_STATS_TLV_SZ(_num_elems) ( sizeof(A_UINT32) + /* hist_intvl */ \
@@ -1318,6 +1365,45 @@
     A_UINT32 fes_result[1]; /* HTT_TX_HWQ_MAX_FES_RESULT_STATS */
 } htt_tx_hwq_fes_result_stats_tlv_v;
 
+#define HTT_TX_HWQ_TRIED_MPDU_CNT_HIST_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems))
+/* NOTE: Variable length TLV, use length spec to infer array size
+ *
+ *  The hwq_tried_mpdu_cnt_hist is a  histogram of MPDUs tries per HWQ.
+ *  The tries here is the count of the  MPDUS within a PPDU that the HW
+ *  had attempted to transmit on  air, for the HWSCH Schedule command
+ *  submitted by FW in this HWQ .It is not the retry attempts. The
+ *  histogram bins are  0-29, 30-59, 60-89 and so on. The are 10 bins
+ *  in this histogram.
+ *  they are defined in FW using the following macros
+ *  #define WAL_MAX_TRIED_MPDU_CNT_HISTOGRAM 9
+ *  #define WAL_TRIED_MPDU_CNT_HISTOGRAM_INTERVAL 30
+ *
+ * */
+typedef struct {
+    htt_tlv_hdr_t tlv_hdr;
+    /* Histogram of number of mpdus on tried mpdu */
+    A_UINT32 tried_mpdu_cnt_hist[1]; /* HTT_TX_HWQ_TRIED_MPDU_CNT_HIST */
+    A_UINT32 hist_bin_size;
+} htt_tx_hwq_tried_mpdu_cnt_hist_tlv_v;
+
+#define HTT_TX_HWQ_TXOP_USED_CNT_HIST_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems))
+/* NOTE: Variable length TLV, use length spec to infer array size
+ *
+ * The txop_used_cnt_hist is the histogram of txop per burst. After
+ * completing the burst, we identify the txop used in the burst and
+ * incr the corresponding bin.
+ * Each bin represents 1ms & we have 10 bins in this histogram.
+ * they are deined in FW using the following macros
+ * #define WAL_MAX_TXOP_USED_CNT_HISTOGRAM 10
+ * #define WAL_TXOP_USED_HISTOGRAM_INTERVAL 1000 ( 1 ms )
+ *
+ * */
+typedef struct {
+    htt_tlv_hdr_t tlv_hdr;
+    /* Histogram of txop used cnt */
+    A_UINT32 txop_used_cnt_hist[1]; /* HTT_TX_HWQ_TXOP_USED_CNT_HIST */
+} htt_tx_hwq_txop_used_cnt_hist_tlv_v;
+
 /* STATS_TYPE : HTT_DBG_EXT_STATS_PDEV_TX_HWQ
  * TLV_TAGS:
  *    - HTT_STATS_STRING_TAG
@@ -1326,10 +1412,17 @@
  *    - HTT_STATS_TX_HWQ_CMD_RESULT_TAG
  *    - HTT_STATS_TX_HWQ_CMD_STALL_TAG
  *    - HTT_STATS_TX_HWQ_FES_STATUS_TAG
+ *    - HTT_STATS_TX_HWQ_TRIED_MPDU_CNT_HIST_TAG
+ *    - HTT_STATS_TX_HWQ_TXOP_USED_CNT_HIST_TAG
  */
 /* NOTE:
  * This structure is for documentation, and cannot be safely used directly.
  * Instead, use the constituent TLV structures to fill/parse.
+ * General  HWQ stats Mechanism:
+ * Once the host request for the stats, FW fill all the HWQ TAGS in a buffer
+ * for all the HWQ requested. & the FW send the  buffer to  host. In the
+ * buffer the HWQ ID  is filled in mac_id__hwq_id, thus identifying each
+ * HWQ distinctly.
  */
 typedef struct _htt_tx_hwq_stats {
     htt_stats_string_tlv hwq_str_tlv;
@@ -1338,6 +1431,8 @@
     htt_tx_hwq_cmd_result_stats_tlv_v cmd_result_tlv;
     htt_tx_hwq_cmd_stall_stats_tlv_v cmd_stall_tlv;
     htt_tx_hwq_fes_result_stats_tlv_v fes_stats_tlv;
+    htt_tx_hwq_tried_mpdu_cnt_hist_tlv_v tried_mpdu_tlv;
+    htt_tx_hwq_txop_used_cnt_hist_tlv_v txop_used_tlv;
 } htt_tx_hwq_stats_t;
 
 /* == TX SELFGEN STATS == */
@@ -1752,6 +1847,22 @@
     A_UINT32 enqueue_notify;
     A_UINT32 notify_mpdu_at_head;
     A_UINT32 notify_mpdu_state_valid;
+/*
+ * On receiving TQM_FLOW_NOT_EMPTY_STATUS from TQM, (on MSDUs being enqueued
+ * the flow is non empty), if the number of MSDUs is greater than the threshold,
+ * notify is incremented. UDP_THRESH counters are for UDP MSDUs, and NONUDP are
+ * for non-UDP MSDUs.
+ * MSDUQ_SWNOTIFY_UDP_THRESH1 threshold    - sched_udp_notify1 is incremented
+ * MSDUQ_SWNOTIFY_UDP_THRESH2 threshold    - sched_udp_notify2 is incremented
+ * MSDUQ_SWNOTIFY_NONUDP_THRESH1 threshold - sched_nonudp_notify1 is incremented
+ * MSDUQ_SWNOTIFY_NONUDP_THRESH2 threshold - sched_nonudp_notify2 is incremented
+ *
+ * Notify signifies that we trigger the scheduler.
+ */
+    A_UINT32 sched_udp_notify1;
+    A_UINT32 sched_udp_notify2;
+    A_UINT32 sched_nonudp_notify1;
+    A_UINT32 sched_nonudp_notify2;
 } htt_tx_tqm_pdev_stats_tlv_v;
 
 #define HTT_TX_TQM_CMN_STATS_MAC_ID_M     0x000000ff
@@ -1905,6 +2016,8 @@
     A_UINT32    eapol_lookup_failed;
     A_UINT32    qpeer_not_allow_data;
     A_UINT32    fse_tid_override;
+    A_UINT32    ipv6_jumbogram_zero_length;
+    A_UINT32    qos_to_non_qos_in_prog;
 } htt_tx_de_classify_failed_stats_tlv;
 
 typedef struct {
@@ -1938,6 +2051,15 @@
     A_UINT32    fse_hwqueue_send_to_host;
     A_UINT32    mcast_entry;
     A_UINT32    bcast_entry;
+    A_UINT32    htt_update_peer_cache;
+    A_UINT32    htt_learning_frame;
+    A_UINT32    fse_invalid_peer;
+    /*
+     * mec_notify is HTT TX WBM multicast echo check notification
+     * from firmware to host.  FW sends SA addresses to host for all
+     * multicast/broadcast packets received on STA side.
+     */
+    A_UINT32    mec_notify;
 } htt_tx_de_classify_stats_tlv;
 
 typedef struct {
@@ -1988,6 +2110,22 @@
          ((_var) |= ((_val) << HTT_TX_DE_CMN_STATS_MAC_ID_S)); \
      } while (0)
 
+/*
+ *  The htt_tx_de_fw2wbm_ring_full_hist_tlv is a histogram of time we waited
+ *  for the fw2wbm ring buffer.  we are requesting a buffer in FW2WBM release
+ *  ring,which may fail, due to non availability of buffer. Hence we sleep for
+ *  200us & again request for it. This is a histogram of time we wait, with
+ *  bin of 200ms & there are 10 bin (2 seconds max)
+ *  They are defined by the following macros in FW
+ *  #define ENTRIES_PER_BIN_COUNT 1000  // per bin 1000 * 200us = 200ms
+ *  #define RING_FULL_BIN_ENTRIES (WAL_TX_DE_FW2WBM_ALLOC_TIMEOUT_COUNT /
+ *                               ENTRIES_PER_BIN_COUNT)
+ */
+typedef struct {
+     htt_tlv_hdr_t tlv_hdr;
+     A_UINT32 fw2wbm_ring_full_hist[1];
+} htt_tx_de_fw2wbm_ring_full_hist_tlv;
+
 typedef struct {
     htt_tlv_hdr_t tlv_hdr;
     /* BIT [ 7 :  0]   :- mac_id
@@ -2007,6 +2145,7 @@
 /* STATS_TYPE : HTT_DBG_EXT_STATS_TX_DE_INFO
  * TLV_TAGS:
  *     - HTT_STATS_TX_DE_CMN_TAG
+ *     - HTT_STATS_TX_DE_FW2WBM_RING_FULL_HIST_TAG
  *     - HTT_STATS_TX_DE_EAPOL_PACKETS_TAG
  *     - HTT_STATS_TX_DE_CLASSIFY_STATS_TAG
  *     - HTT_STATS_TX_DE_CLASSIFY_FAILED_TAG
@@ -2021,6 +2160,7 @@
  */
 typedef struct {
     htt_tx_de_cmn_stats_tlv             cmn_tlv;
+    htt_tx_de_fw2wbm_ring_full_hist_tlv fw2wbm_hist_tlv;
     htt_tx_de_eapol_packets_stats_tlv   eapol_stats_tlv;
     htt_tx_de_classify_stats_tlv        classify_stats_tlv;
     htt_tx_de_classify_failed_stats_tlv classify_failed_tlv;
@@ -2641,6 +2781,8 @@
 
 /* == PDEV RX RATE CTRL STATS == */
 
+#define HTT_RX_PDEV_STATS_NUM_LEGACY_CCK_STATS     4
+#define HTT_RX_PDEV_STATS_NUM_LEGACY_OFDM_STATS    8
 #define HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS        12
 #define HTT_RX_PDEV_STATS_NUM_GI_COUNTERS          4
 #define HTT_RX_PDEV_STATS_NUM_DCM_COUNTERS         5
@@ -2689,6 +2831,16 @@
     /* Counters to track number of rx packets in each GI in each mcs (0-11) */
     A_UINT32 rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS][HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
     A_INT32 rssi_in_dbm; /* rx Signal Strength value in dBm unit */
+
+    A_UINT32 rx_11ax_su_ext;
+    A_UINT32 rx_11ac_mumimo;
+    A_UINT32 rx_11ax_mumimo;
+    A_UINT32 rx_11ax_ofdma;
+    A_UINT32 txbf;
+    A_UINT32 rx_legacy_cck_rate[HTT_RX_PDEV_STATS_NUM_LEGACY_CCK_STATS];
+    A_UINT32 rx_legacy_ofdm_rate[HTT_RX_PDEV_STATS_NUM_LEGACY_OFDM_STATS];
+    A_UINT32 rx_active_dur_us_low;
+    A_UINT32 rx_active_dur_us_high;
 } htt_rx_pdev_rate_stats_tlv;
 
 
diff --git a/fw/wlan_module_ids.h b/fw/wlan_module_ids.h
index 39b9d4d..c6d5412 100644
--- a/fw/wlan_module_ids.h
+++ b/fw/wlan_module_ids.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2018 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -30,79 +30,90 @@
 
 /* Wlan module ids , global across all the modules */
 typedef enum {
-	WLAN_MODULE_ID_MIN = 0,
-	WLAN_MODULE_INF = WLAN_MODULE_ID_MIN, /* 0x0 */
-	WLAN_MODULE_WMI,                      /* 0x1 */
-	WLAN_MODULE_STA_PWRSAVE,              /* 0x2 */
-	WLAN_MODULE_WHAL,                     /* 0x3 */
-	WLAN_MODULE_COEX,                     /* 0x4 */
-	WLAN_MODULE_ROAM,                     /* 0x5 */
-	WLAN_MODULE_RESMGR_CHAN_MANAGER,      /* 0x6 */
-	WLAN_MODULE_RESMGR,                   /* 0x7 */
-	WLAN_MODULE_VDEV_MGR,                 /* 0x8 */
-	WLAN_MODULE_SCAN,                     /* 0x9 */
-	WLAN_MODULE_RATECTRL,                 /* 0xa */
-	WLAN_MODULE_AP_PWRSAVE,               /* 0xb */
-	WLAN_MODULE_BLOCKACK,                 /* 0xc */
-	WLAN_MODULE_MGMT_TXRX,                /* 0xd */
-	WLAN_MODULE_DATA_TXRX,                /* 0xe */
-	WLAN_MODULE_HTT,                      /* 0xf */
-	WLAN_MODULE_HOST,                     /* 0x10 */
-	WLAN_MODULE_BEACON,                   /* 0x11 */
-	WLAN_MODULE_OFFLOAD,                  /* 0x12 */
-	WLAN_MODULE_WAL,                      /* 0x13 */
-	WAL_MODULE_DE,                        /* 0x14 */
-	WLAN_MODULE_PCIELP,                   /* 0x15 */
-	WLAN_MODULE_RTT,                      /* 0x16 */
-	WLAN_MODULE_RESOURCE,                 /* 0x17 */
-	WLAN_MODULE_DCS,                      /* 0x18 */
-	WLAN_MODULE_CACHEMGR,                 /* 0x19 */
-	WLAN_MODULE_ANI,                      /* 0x1a */
-	WLAN_MODULE_P2P,                      /* 0x1b */
-	WLAN_MODULE_CSA,                      /* 0x1c */
-	WLAN_MODULE_NLO,                      /* 0x1d */
-	WLAN_MODULE_CHATTER,                  /* 0x1e */
-	WLAN_MODULE_WOW,                      /* 0x1f */
-	WLAN_MODULE_WAL_VDEV,                 /* 0x20 */
-	WLAN_MODULE_WAL_PDEV,                 /* 0x21 */
-	WLAN_MODULE_TEST,                     /* 0x22 */
-	WLAN_MODULE_STA_SMPS,                 /* 0x23 */
-	WLAN_MODULE_SWBMISS,                  /* 0x24 */
-	WLAN_MODULE_WMMAC,                    /* 0x25 */
-	WLAN_MODULE_TDLS,                     /* 0x26 */
-	WLAN_MODULE_HB,                       /* 0x27 */
-	WLAN_MODULE_TXBF,                     /* 0x28 */
-	WLAN_MODULE_BATCH_SCAN,               /* 0x29 */
-	WLAN_MODULE_THERMAL_MGR,              /* 0x2a */
-	WLAN_MODULE_PHYERR_DFS,               /* 0x2b */
-	WLAN_MODULE_RMC,                      /* 0x2c */
-	WLAN_MODULE_STATS,                    /* 0x2d */
-	WLAN_MODULE_NAN,                      /* 0x2e */
-	WLAN_MODULE_IBSS_PWRSAVE,             /* 0x2f */
-	WLAN_MODULE_HIF_UART,                 /* 0x30 */
-	WLAN_MODULE_LPI,                      /* 0x31 */
-	WLAN_MODULE_EXTSCAN,                  /* 0x32 */
-	WLAN_MODULE_UNIT_TEST,                /* 0x33 */
-	WLAN_MODULE_MLME,                     /* 0x34 */
-	WLAN_MODULE_SUPPL,                    /* 0x35 */
-	WLAN_MODULE_ERE,                      /* 0x36 */
-	WLAN_MODULE_OCB,                      /* 0x37 */
-	WLAN_MODULE_RSSI_MONITOR,             /* 0x38 */
-	WLAN_MODULE_WPM,                      /* 0x39 */
-	WLAN_MODULE_CSS,                      /* 0x3a */
-	WLAN_MODULE_PPS,                      /* 0x3b */
-	WLAN_MODULE_SCAN_CH_PREDICT,          /* 0x3c */
-	WLAN_MODULE_MAWC,                     /* 0x3d */
-	WLAN_MODULE_CMC_QMIC,                 /* 0x3e */
-	WLAN_MODULE_EGAP,                     /* 0x3f */
-	WLAN_MODULE_NAN20,                    /* 0x40 */
-	WLAN_MODULE_QBOOST,                   /* 0x41 */
-	WLAN_MODULE_P2P_LISTEN_OFFLOAD,       /* 0x42 */
-	WLAN_MODULE_HALPHY,                   /* 0x43 */
-	WAL_MODULE_ENQ,                       /* 0x44 */
+  WLAN_MODULE_ID_MIN = 0,
+  WLAN_MODULE_INF = WLAN_MODULE_ID_MIN, /* 0x0 */
+  WLAN_MODULE_WMI,                      /* 0x1 */
+  WLAN_MODULE_STA_PWRSAVE,              /* 0x2 */
+  WLAN_MODULE_WHAL,                     /* 0x3 */
+  WLAN_MODULE_COEX,                     /* 0x4 */
+  WLAN_MODULE_ROAM,                     /* 0x5 */
+  WLAN_MODULE_RESMGR_CHAN_MANAGER,      /* 0x6 */
+  WLAN_MODULE_RESMGR,                   /* 0x7 */
+  WLAN_MODULE_VDEV_MGR,                 /* 0x8 */
+  WLAN_MODULE_SCAN,                     /* 0x9 */
+  WLAN_MODULE_RATECTRL,                 /* 0xa */
+  WLAN_MODULE_AP_PWRSAVE,               /* 0xb */
+  WLAN_MODULE_BLOCKACK,                 /* 0xc */
+  WLAN_MODULE_MGMT_TXRX,                /* 0xd */
+  WLAN_MODULE_DATA_TXRX,                /* 0xe */
+  WLAN_MODULE_HTT,                      /* 0xf */
+  WLAN_MODULE_HOST,                     /* 0x10 */
+  WLAN_MODULE_BEACON,                   /* 0x11 */
+  WLAN_MODULE_OFFLOAD,                  /* 0x12 */
+  WLAN_MODULE_WAL,                      /* 0x13 */
+  WAL_MODULE_DE,                        /* 0x14 */
+  WLAN_MODULE_PCIELP,                   /* 0x15 */
+  WLAN_MODULE_RTT,                      /* 0x16 */
+  WLAN_MODULE_RESOURCE,                 /* 0x17 */
+  WLAN_MODULE_DCS,                      /* 0x18 */
+  WLAN_MODULE_CACHEMGR,                 /* 0x19 */
+  WLAN_MODULE_ANI,                      /* 0x1a */
+  WLAN_MODULE_P2P,                      /* 0x1b */
+  WLAN_MODULE_CSA,                      /* 0x1c */
+  WLAN_MODULE_NLO,                      /* 0x1d */
+  WLAN_MODULE_CHATTER,                  /* 0x1e */
+  WLAN_MODULE_WOW,                      /* 0x1f */
+  WLAN_MODULE_WAL_VDEV,                 /* 0x20 */
+  WLAN_MODULE_WAL_PDEV,                 /* 0x21 */
+  WLAN_MODULE_TEST,                     /* 0x22 */
+  WLAN_MODULE_STA_SMPS,                 /* 0x23 */
+  WLAN_MODULE_SWBMISS,                  /* 0x24 */
+  WLAN_MODULE_WMMAC,                    /* 0x25 */
+  WLAN_MODULE_TDLS,                     /* 0x26 */
+  WLAN_MODULE_HB,                       /* 0x27 */
+  WLAN_MODULE_TXBF,                     /* 0x28 */
+  WLAN_MODULE_BATCH_SCAN,               /* 0x29 */
+  WLAN_MODULE_THERMAL_MGR,              /* 0x2a */
+  WLAN_MODULE_PHYERR_DFS,               /* 0x2b */
+  WLAN_MODULE_RMC,                      /* 0x2c */
+  WLAN_MODULE_STATS,                    /* 0x2d */
+  WLAN_MODULE_NAN,                      /* 0x2e */
+  WLAN_MODULE_IBSS_PWRSAVE,             /* 0x2f */
+  WLAN_MODULE_HIF_UART,                 /* 0x30 */
+  WLAN_MODULE_LPI,                      /* 0x31 */
+  WLAN_MODULE_EXTSCAN,                  /* 0x32 */
+  WLAN_MODULE_UNIT_TEST,                /* 0x33 */
+  WLAN_MODULE_MLME,                     /* 0x34 */
+  WLAN_MODULE_SUPPL,                    /* 0x35 */
+  WLAN_MODULE_ERE,                      /* 0x36 */
+  WLAN_MODULE_OCB,                      /* 0x37 */
+  WLAN_MODULE_RSSI_MONITOR,             /* 0x38 */
+  WLAN_MODULE_WPM,                      /* 0x39 */
+  WLAN_MODULE_CSS,                      /* 0x3a */
+  WLAN_MODULE_PPS,                      /* 0x3b */
+  WLAN_MODULE_SCAN_CH_PREDICT,          /* 0x3c */
+  WLAN_MODULE_MAWC,                     /* 0x3d */
+  WLAN_MODULE_CMC_QMIC,                 /* 0x3e */
+  WLAN_MODULE_EGAP,                     /* 0x3f */
+  WLAN_MODULE_NAN20,                    /* 0x40 */
+  WLAN_MODULE_QBOOST,                   /* 0x41 */
+  WLAN_MODULE_P2P_LISTEN_OFFLOAD,       /* 0x42 */
+  WLAN_MODULE_HALPHY,                   /* 0x43 */
+  WAL_MODULE_ENQ,                       /* 0x44 */
+  WLAN_MODULE_GNSS,                     /* 0x45 */
+  WLAN_MODULE_WAL_MEM,                  /* 0x46 */
+  WLAN_MODULE_SCHED_ALGO,               /* 0x47 */
+  WLAN_MODULE_TX,                       /* 0x48 */
+  WLAN_MODULE_RX,                       /* 0x49 */
+  WLAN_MODULE_WLM,                      /* 0x4a */
+  WLAN_MODULE_RU_ALLOCATOR,             /* 0x4b */
+  WLAN_MODULE_11K_OFFLOAD,              /* 0x4c */
+  WLAN_MODULE_STA_TWT,                  /* 0x4d */
+  WLAN_MODULE_AP_TWT,                   /* 0x4e */
+  WLAN_MODULE_UL_OFDMA,                 /* 0x4f */
 
-	WLAN_MODULE_ID_MAX,
-	WLAN_MODULE_ID_INVALID = WLAN_MODULE_ID_MAX,
+  WLAN_MODULE_ID_MAX,
+  WLAN_MODULE_ID_INVALID = WLAN_MODULE_ID_MAX,
 } WLAN_MODULE_ID;
 
 
diff --git a/fw/wmi_services.h b/fw/wmi_services.h
index e9bbeff..3ec2d63 100644
--- a/fw/wmi_services.h
+++ b/fw/wmi_services.h
@@ -255,6 +255,7 @@
     WMI_SERVICE_DUAL_BEACON_ON_SINGLE_MAC_MCC_SUPPORT=159, /* Support dual beacon on different channel on single MAC */
     WMI_SERVICE_MOTION_DET=160, /* support for motion detection config */
     WMI_SERVICE_INFRA_MBSSID=161, /* support infra multi-BSSID feature */
+    WMI_SERVICE_OBSS_SPATIAL_REUSE=162, /* support spatial reuse feature */
 
 
     /******* ADD NEW SERVICES HERE *******/
diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h
index ad92b28..dfe45b4 100644
--- a/fw/wmi_tlv_defs.h
+++ b/fw/wmi_tlv_defs.h
@@ -923,6 +923,7 @@
     WMITLV_TAG_STRUC_wmi_motion_det_event,
     WMITLV_TAG_STRUC_wmi_motion_det_base_line_event,
     WMITLV_TAG_STRUC_wmi_ndp_transport_ip_param,
+    WMITLV_TAG_STRUC_wmi_obss_spatial_reuse_set_cmd_fixed_param,
 } WMITLV_TAG_ID;
 
 /*
@@ -1300,6 +1301,7 @@
     OP(WMI_MOTION_DET_BASE_LINE_CONFIG_PARAM_CMDID) \
     OP(WMI_MOTION_DET_START_STOP_CMDID) \
     OP(WMI_MOTION_DET_BASE_LINE_START_STOP_CMDID) \
+    OP(WMI_PDEV_OBSS_PD_SPATIAL_REUSE_CMDID) \
     /* add new CMD_LIST elements above this line */
 
 
@@ -3746,6 +3748,11 @@
   WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_tid_configurations_cmd_fixed_param, wmi_peer_tid_configurations_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)
 WMITLV_CREATE_PARAM_STRUC(WMI_PEER_TID_CONFIGURATIONS_CMDID);
 
+/* OBSS_PD Spatial_Reuse cnmd */
+#define WMITLV_TABLE_WMI_PDEV_OBSS_PD_SPATIAL_REUSE_CMDID(id,op,buf,len) \
+    WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_obss_spatial_reuse_set_cmd_fixed_param, wmi_obss_spatial_reuse_set_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)
+WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_OBSS_PD_SPATIAL_REUSE_CMDID);
+
 
 /************************** TLV definitions of WMI events *******************************/
 
diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h
index 86cf40d..990636d 100644
--- a/fw/wmi_unified.h
+++ b/fw/wmi_unified.h
@@ -244,6 +244,7 @@
     WMI_GRP_11K_OFFLOAD,    /* 0x3d */
     WMI_GRP_TWT,            /* 0x3e TWT (Target Wake Time) for STA and AP */
     WMI_GRP_MOTION_DET,     /* 0x3f */
+    WMI_GRP_SPATIAL_REUSE,  /* 0x40 */
 } WMI_GRP_ID;
 
 #define WMI_CMD_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1)
@@ -1139,6 +1140,9 @@
     WMI_MOTION_DET_BASE_LINE_CONFIG_PARAM_CMDID,
     WMI_MOTION_DET_START_STOP_CMDID,
     WMI_MOTION_DET_BASE_LINE_START_STOP_CMDID,
+
+    /** WMI commands related to OBSS PD Spatial Reuse **/
+    WMI_PDEV_OBSS_PD_SPATIAL_REUSE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_SPATIAL_REUSE),
 } WMI_CMD_ID;
 
 typedef enum {
@@ -4156,6 +4160,14 @@
     A_UINT32 vdev_id;
     A_UINT32 desc_id;  /* echoed in tx_compl_event */
     A_UINT32 chanfreq; /* MHz units */
+    /* WMI_MGMT_TX_SEND_CMDID is used for both pass by value and
+     * pass by reference WMI management frames.
+     *
+     * a) If the command is for pass by reference,
+     *    paddr_lo and padd_hi will hold the address of remote/host buffer
+     * b) If the command is for pass by value,
+     *    paddr_lo and paddr_hi will be NULL.
+     */
     A_UINT32 paddr_lo;
     A_UINT32 paddr_hi;
     A_UINT32 frame_len;
@@ -5073,6 +5085,25 @@
      * Bit 3-5: "Xretry threshold" to use
      */
     WMI_PDEV_PARAM_SECONDARY_RETRY_ENABLE,            /* 0xA0 */
+    /** Set global uplink triggered PPDU duration limit (usec). */
+    WMI_PDEV_PARAM_SET_UL_PPDU_DURATION,              /* 0xA1 */
+    /** Set target buffer status report trigger interval (ms) */
+    WMI_PDEV_PARAM_SET_UL_BSR_TRIG_INTERVAL,          /* 0xA2 */
+    /** Use simplified equal RU allocation for DL and UL OFDMA */
+    WMI_PDEV_PARAM_EQUAL_RU_ALLOCATION_ENABLE,        /* 0xA3 */
+    /** Enable/disable MWS-COEX 4G (LTE) Quick FTDM.
+     * 0 - Don't allow quick FTDM Policy (Default)
+     * 1 - Allow quick FTDM policy.
+     */
+    WMI_PDEV_PARAM_MWSCOEX_4G_ALLOW_QUICK_FTDM,       /* 0xA4 */
+    /** Set MWS-COEX 5G-NR power limit.
+     * 0:    Don't apply user specific power limit,
+     *       use internal power limit (Default)
+     * 1-2:  invalid value (ignored)
+     * 3-21: apply the specified value as the external power limit, in dBm
+     * >21:  invalid value (ignored)
+     */
+    WMI_PDEV_PARAM_MWSCOEX_SET_5GNR_PWR_LIMIT,        /* 0xA5 */
 } WMI_PDEV_PARAM;
 
 typedef struct {
@@ -6270,6 +6301,8 @@
     A_UINT32 pdev_id; /** pdev_id for identifying the MAC.  See macros starting with WMI_PDEV_ID_ for values. In non-DBDC case host should set it to 0. */
     /** number of beacon stats event structures (wmi_bcn_stats) */
     A_UINT32 num_bcn_stats;
+    /** number of extended peer stats event structures (wmi_peer_extd_stats) */
+    A_UINT32 num_peer_extd_stats;
 
 /* This TLV is followed by another TLV of array of bytes
  *   A_UINT8 data[];
@@ -6949,7 +6982,10 @@
     A_UINT32 last_tx_rate_code;
     /** TX power used by peer - units are 0.5 dBm */
     A_INT32 last_tx_power;
-    A_UINT32 reserved[4]; /** for future use - add new peer stats here */
+
+    /* Total number of received multicast & broadcast data frames corresponding to this peer */
+    A_UINT32 rx_mc_bc_cnt; /* 1 in the MSB of rx_mc_bc_cnt represents a valid data */
+    A_UINT32 reserved[3]; /** for future use - add new peer stats here */
 } wmi_peer_extd_stats;
 
 typedef struct {
@@ -8532,6 +8568,96 @@
      */
     WMI_VDEV_PARAM_GTX_ENABLE,                             /* 0x85 */
 
+    /*
+     * Enable/Disable multicast buffer.
+     * A FLAG to enable & disable buffering of multicast frames at AP
+     * when stations are in Power Save mode.
+     * Once AP disables buffering of multicast frame,
+     * clients which goes into Power save mode will not receive these frames.
+     * by default MCAST buffering will be enabled.
+     * (CABQ = Content After Beacon Queue = multicast queue)
+     * Host will send this VDEV param command,
+     * With Value = 1 means fw will disable the MCAST buffering
+     * With Value = 0 means fw will enable the MCAST buffering.
+     */
+    WMI_VDEV_PARAM_DISABLE_CABQ,                          /* 0x86 */
+
+    /**
+      * For SU and MU sounding
+      * switch between su ac/ax sounding and mu ac/ax sounding
+      * switch between triggered/ non-triggered on ax sounding enabled.
+      * each bit toggles the corresponding modes by enabling/disabling
+      *
+      * Bit 1 doesn't carry any operation for now and may change later,
+      * so reserved.
+      *
+      *-----------------------
+      * bit(0)   |    mode
+      *-----------------------
+      *       0  |  AC
+      *       1  |  AX
+      *-----------------------
+      *
+      * bit(1)   |  Reserved
+      *
+      *-----------------------
+      * bit(2)   |    mode
+      *-----------------------
+      *       0  |  SU
+      *       1  |  MU
+      *-----------------------
+      * bit(3)   |    mode
+      *-----------------------
+      *       0  |  non -triggered
+      *       1  |  triggered
+      */
+    WMI_VDEV_PARAM_SET_HE_SOUNDING_MODE,                  /* 0x87 */
+
+    /** Fixed rate setting used in UL Trigger
+     * The top nibble is used to select which format to use for encoding
+     * the rate specification: 0xVXXXXXXX, V must be 1 for the UL
+     * format.
+     * If V == 0b0001: format is: 0x1000RRRR.
+     *                 This will be output of WMI_ASSEMBLE_RATECODE_V1
+     *
+     * This parameter controls the UL OFDMA and UL MU-MIMO vdev fixed rate.
+     */
+    WMI_VDEV_PARAM_UL_FIXED_RATE,                         /* 0x88 */
+
+    /**
+     * Uplink MU-MIMO & OFDMA GI configuration used in UL Trigger
+     * 11AX: GI =
+     *     WMI_GI_400_NS, WMI_GI_800_NS, WMI_GI_1600_NS, or WMI_GI_3200_NS
+     * 11N: SGI=WMI_GI_400_NS
+     */
+    WMI_VDEV_PARAM_UL_GI,                                 /* 0x89 */
+
+    /** Enable/Disable LDPC in UL Trigger */
+    WMI_VDEV_PARAM_UL_LDPC,                               /* 0x8A */
+
+    /** Max NSS allowed in UL Trigger */
+    WMI_VDEV_PARAM_UL_NSS,                                /* 0x8B */
+
+    /** Enable/Disable STBC in UL Trigger */
+    WMI_VDEV_PARAM_UL_STBC,                               /* 0x8C */
+
+    /** specify the HE LTF setting that should be used for fixed rate
+     * uplink transmissions.
+     *
+     * Expects values of WMI_HE_LTF_DEFAULT, WMI_HE_LTF_1X, WMI_HE_LTF_2X,
+     * or WMI_HE_LTF_4X.
+     */
+    WMI_VDEV_PARAM_UL_HE_LTF,                             /* 0x8D */
+
+    /** Uplink OFDMA PPDU bandwidth (0: 20MHz, 1: 40MHz, 2: 80Mhz, 3: 160MHz)*/
+    WMI_VDEV_PARAM_UL_PPDU_BW,                            /* 0x8E */
+
+    /** Enable/Disable FW handling MU EDCA change from AP (1: En, 0:Dis)  */
+    WMI_VDEV_PARAM_MU_EDCA_FW_UPDATE_EN,                  /* 0x8F */
+
+    /** Update dot11ObssNbruToleranceTime in fw. Param value: seconds */
+    WMI_VDEV_PARAM_UPDATE_OBSS_RU_TOLERANCE_TIME,         /* 0x90 */
+
 
     /*=== ADD NEW VDEV PARAM TYPES ABOVE THIS LINE ===
      * The below vdev param types are used for prototyping, and are
@@ -8592,6 +8718,10 @@
 #define WMI_VDEV_HE_ULMUMIMO_ENABLE(hemu_mode) WMI_SET_BITS(hemu_mode, 6, 1, 1)
 #define WMI_VDEV_HE_ULMUMIMO_DISABLE(hemu_mode) WMI_SET_BITS(hemu_mode, 6, 1, 0)
 
+#define WMI_VDEV_HE_AX_SOUNDING_IS_ENABLED(mode) WMI_GET_BITS(mode, 0, 1)
+#define WMI_VDEV_HE_MU_SOUNDING_IS_ENABLED(mode) WMI_GET_BITS(mode, 2, 1)
+#define WMI_VDEV_HE_AX_TRIG_SOUNDING_IS_ENABLED(mode) WMI_GET_BITS(mode, 3, 1)
+
 /* vdev capabilities bit mask */
 #define WMI_VDEV_BEACON_SUPPORT  0x1
 #define WMI_VDEV_WDS_LRN_ENABLED 0x2
@@ -9887,6 +10017,15 @@
 #define WMI_PEER_PARAM_OFDMA_ENABLE                     0x19
 /* Per peer 11ax/11ac MU enable or disable */
 #define WMI_PEER_PARAM_MU_ENABLE                        0x1a
+/** Set peer fixed rate used in UL Trigger
+ * The top nibble is used to select which format to use for encoding
+ * the rate specification: 0xVXXXXXXX, V must be 1 for this parameter.
+ * If V == 0b0001: format is: 0x1000RRRR.
+ *                 This will be output of WMI_ASSEMBLE_RATECODE_V1
+ *
+ * This parameter controls the UL OFDMA and UL MU-MIMO peer fixed rate.
+ */
+#define WMI_PEER_PARAM_UL_FIXED_RATE                    0x1b
 
 /** mimo ps values for the parameter WMI_PEER_MIMO_PS_STATE  */
 #define WMI_PEER_MIMO_PS_NONE                          0x0
@@ -10051,6 +10190,9 @@
 #define WMI_PEER_DYN_MIMOPS     0x00020000  /* Dynamic MIMO PS Enabled */
 #define WMI_PEER_STATIC_MIMOPS  0x00040000  /* Static MIMO PS enabled */
 #define WMI_PEER_SPATIAL_MUX    0x00200000  /* SM Enabled */
+#define WMI_PEER_TWT_REQ        0x00400000  /* TWT Requester Support bit in Extended Capabilities element */
+#define WMI_PEER_TWT_RESP       0x00800000  /* TWT Responder Support bit in Extended Capabilities element */
+#define WMI_PEER_MULTI_BSSID    0x01000000  /* Multiple BSSID Support bit in Extended Capabilities element */
 #define WMI_PEER_VHT            0x02000000  /* VHT Enabled */
 #define WMI_PEER_80MHZ          0x04000000  /* 80MHz enabld */
 #define WMI_PEER_PMF            0x08000000  /* Robust Management Frame Protection enabled */
@@ -13268,6 +13410,12 @@
     WMI_VENDOR_OUI_ACTION_CCKM_1X1 = 2,       /* TX (only) CCKM rates with 1 chain only */
     WMI_VENDOR_OUI_ACTION_ALT_ITO = 3, /* inactivity time-out */
     WMI_VENDOR_OUI_ACTION_SWITCH_TO_11N_MODE = 4, /* Switch from 11ac to 11n mode to avoid IOT issues with ONM frame */
+    /* WMI_VENDOR_OUI_ACTION_CONNECTION_1X1_NUM_TX_RX_CHAINS_1
+     * Connect in 1x1 only and Use only one chain for both Tx and Rx
+     * to avoid IOT issues due to change in number of Tx and Rx chains
+     */
+    WMI_VENDOR_OUI_ACTION_CONNECTION_1X1_NUM_TX_RX_CHAINS_1 = 5,
+
     /* Add any action before this line */
     WMI_VENDOR_OUI_ACTION_MAX_ACTION_ID
 } wmi_vendor_oui_action_id;
@@ -21776,6 +21924,7 @@
         WMI_RETURN_STRING(WMI_MNT_FILTER_CMDID);
         WMI_RETURN_STRING(WMI_PDEV_GET_CHIP_POWER_STATS_CMDID);
         WMI_RETURN_STRING(WMI_COEX_GET_ANTENNA_ISOLATION_CMDID);
+        WMI_RETURN_STRING(WMI_SAR_LIMITS_CMDID);
         WMI_RETURN_STRING(WMI_PDEV_SET_STATS_THRESHOLD_CMDID);
         WMI_RETURN_STRING(WMI_REQUEST_WLAN_STATS_CMDID);
         WMI_RETURN_STRING(WMI_VDEV_ENCRYPT_DECRYPT_DATA_REQ_CMDID);
@@ -22344,9 +22493,13 @@
 #define WLM_FLAGS_ROAM_SUPPRESS  1
 #define WLM_FLAGS_ALLOW_FINAL_BMISS_ROAM 2
 
-/* bit 8-9: reserved for roaming */
+/* bit 8: reserved for roaming */
 
-/* bit 10-11 of flags is used for powersave operation */
+/* bit 9-11 of flags is used for powersave operation */
+/* bit 9: WLM_FLAGS_PS_DISABLE_BMPS, disable BMPS if bit is set */
+
+#define WLM_FLAGS_PS_DISABLE_BMPS 1 /* disable BMPS */
+
 /* bit 10: WLM_FLAGS_PS_DISABLE_CSS_COLLAPSE, disable css power collapse if bit is set */
 
 #define WLM_FLAGS_PS_DISABLE_CSS_COLLAPSE  1  /* disable css power collapse */
@@ -22366,6 +22519,7 @@
 #define WLM_FLAGS_SCAN_SET_DWELL_TIME_POLICY(flag, val)   WMI_SET_BITS(flag, 2, 2, val)
 #define WLM_FLAGS_ROAM_GET_POLICY(flag)                   WMI_GET_BITS(flag, 6, 2)
 #define WLM_FLAGS_ROAM_SET_POLICY(flag, val)              WMI_SET_BITS(flag, 6, 2, val)
+#define WLM_FLAGS_PS_IS_BMPS_DISABLED(flag)               WMI_GET_BITS(flag, 9, 1)
 #define WLM_FLAGS_PS_IS_CSS_CLPS_DISABLED(flag)           WMI_GET_BITS(flag, 10, 1)
 #define WLM_FLAGS_PS_SET_CSS_CLPS_DISABLE(flag, val)      WMI_SET_BITS(flag, 10, 1, val)
 #define WLM_FLAGS_PS_IS_SYS_SLP_DISABLED(flag)            WMI_GET_BITS(flag, 11, 1)
@@ -23013,6 +23167,27 @@
                                     * phase (in %); reserved for future */
 } wmi_motion_det_base_line_event;
 
+/* Below structures are related to OBSS_PD_SPATIAL Reuse */
+typedef struct {
+    /** TLV tag and len; tag equals
+    * WMITLV_TAG_STRUC_wmi_obss_set_cmd_fixed_param */
+    A_UINT32 tlv_header;
+    /** Enable/Disable Spatial Reuse */
+    A_UINT32 enable;
+    /*
+     * In the below fields, "OBSS level" refers to the power of the
+     * signals received from "Other BSS".
+     * Spatial reuse will only be permitted if the Other BSS's signal power
+     * is witin the min to max range specified by the below fields.
+     */
+    /** Minimum OBSS level to use */
+    A_INT32 obss_min; /* RSSI in dBm */
+    /** Maximum OBSS level to use */
+    A_INT32 obss_max; /* RSSI in dBm */
+    /** Vdev id*/
+    A_UINT32 vdev_id;
+} wmi_obss_spatial_reuse_set_cmd_fixed_param;
+
 
 /* ADD NEW DEFS HERE */
 
diff --git a/fw/wmi_version.h b/fw/wmi_version.h
index dafa2fe..1a6a899 100644
--- a/fw/wmi_version.h
+++ b/fw/wmi_version.h
@@ -36,7 +36,7 @@
 #define __WMI_VER_MINOR_    0
 /** WMI revision number has to be incremented when there is a
  *  change that may or may not break compatibility. */
-#define __WMI_REVISION_ 545
+#define __WMI_REVISION_ 555
 
 /** The Version Namespace should not be normally changed. Only
  *  host and firmware of the same WMI namespace will work