summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2019-12-06 08:44:18 -0800
committerLinux Build Service Account <lnxbuild@localhost>2019-12-06 08:44:18 -0800
commit0dbd8a8e38bcd90de5a530f97445a8630d236574 (patch)
tree4c95cb36d26a5b7619ad2d97b0b482a12111b04a
parente1d651ee6ae204ab9eb43998d70bdd758a1f93fd (diff)
parent0ada8dde65024971fbdc3d38c332945610ccf424 (diff)
Merge 0ada8dde65024971fbdc3d38c332945610ccf424 on remote branch
Change-Id: I02e9dc98e69ac7735444c9d04a3fb95d0c166c40
-rw-r--r--fw/htt.h273
-rw-r--r--fw/htt_stats.h30
-rwxr-xr-xfw/wmi_services.h1
-rwxr-xr-xfw/wmi_tlv_defs.h17
-rwxr-xr-xfw/wmi_unified.h114
-rwxr-xr-xfw/wmi_version.h2
6 files changed, 419 insertions, 18 deletions
diff --git a/fw/htt.h b/fw/htt.h
index 2508b93a3db7..74102299d56f 100644
--- a/fw/htt.h
+++ b/fw/htt.h
@@ -191,9 +191,13 @@
* 3.70 Add AST1-AST3 fields to HTT_T2H PEER_MAP_V2 msg
* 3.71 Add rx offload engine / flow search engine htt setup message defs for
* HTT_H2T_MSG_TYPE_RX_FSE_SETUP_CFG, HTT_H2T_MSG_TYPE_RX_FSE_OPERATION_CFG
+ * 3.72 Add tx_retry_cnt fields to htt_tx_offload_deliver_ind_hdr_t and
+ * htt_tx_data_hdr_information
+ * 3.73 Add channel pre-calibration data upload and download messages defs for
+ * HTT_T2H_MSG_TYPE_CHAN_CALDATA and HTT_H2T_MSG_TYPE_CHAN_CALDATA
*/
#define HTT_CURRENT_VERSION_MAJOR 3
-#define HTT_CURRENT_VERSION_MINOR 71
+#define HTT_CURRENT_VERSION_MINOR 73
#define HTT_NUM_TX_FRAG_DESC 1024
@@ -534,6 +538,7 @@ enum htt_h2t_msg_type {
HTT_H2T_MSG_TYPE_PPDU_STATS_CFG = 0x11,
HTT_H2T_MSG_TYPE_RX_FSE_SETUP_CFG = 0x12,
HTT_H2T_MSG_TYPE_RX_FSE_OPERATION_CFG = 0x13,
+ HTT_H2T_MSG_TYPE_CHAN_CALDATA = 0x14,
/* keep this last */
HTT_H2T_NUM_MSGS
@@ -6338,6 +6343,7 @@ enum htt_t2h_msg_type {
* to provide to the monitor mode interface.
*/
HTT_T2H_MSG_TYPE_TX_OFFLOAD_DELIVER_IND = 0x25,
+ HTT_T2H_MSG_TYPE_CHAN_CALDATA = 0x26,
HTT_T2H_MSG_TYPE_TEST,
/* keep this last */
@@ -7855,7 +7861,9 @@ PREPACK struct htt_tx_offload_deliver_ind_hdr_t
status:3, /* [2:0] */
format:1, /* [3] 0: 802.3 format, 1: 802.11 format */
tx_mpdu_bytes:16, /* [19:4] */
- reserved_4:12; /* [31:20] */
+ /* Indicates retry count of offloaded/local generated Data tx frames */
+ tx_retry_cnt:6, /* [25:20] */
+ reserved_4:6; /* [31:26] */
} POSTPACK;
/* FW offload deliver ind message header fields */
@@ -7905,6 +7913,8 @@ PREPACK struct htt_tx_offload_deliver_ind_hdr_t
#define HTT_FW_OFFLOAD_IND_FORMAT_S 3
#define HTT_FW_OFFLOAD_IND_TX_MPDU_BYTES_M 0x000ffff0
#define HTT_FW_OFFLOAD_IND_TX_MPDU_BYTES_S 4
+#define HTT_FW_OFFLOAD_IND_TX_RETRY_CNT_M 0x03f00000
+#define HTT_FW_OFFLOAD_IND_TX_RETRY_CNT_S 20
#define HTT_FW_OFFLOAD_IND_PHY_TIMESTAMP_L32_SET(word, value) \
do { \
@@ -8056,6 +8066,14 @@ PREPACK struct htt_tx_offload_deliver_ind_hdr_t
#define HTT_FW_OFFLOAD_IND_TX_MPDU_BYTES_GET(word) \
(((word) & HTT_FW_OFFLOAD_IND_TX_MPDU_BYTES_M) >> HTT_FW_OFFLOAD_IND_TX_MPDU_BYTES_S)
+#define HTT_FW_OFFLOAD_IND_TX_RETRY_CNT_SET(word, value) \
+ do { \
+ HTT_CHECK_SET_VAL(HTT_FW_OFFLOAD_IND_TX_RETRY_CNT, value); \
+ (word) |= (value) << HTT_FW_OFFLOAD_IND_TX_RETRY_CNT_S; \
+ } while (0)
+#define HTT_FW_OFFLOAD_IND_TX_RETRY_CNT_GET(word) \
+ (((word) & HTT_FW_OFFLOAD_IND_TX_RETRY_CNT_M) >> HTT_FW_OFFLOAD_IND_TX_RETRY_CNT_S)
+
/*
* @brief target -> host rx reorder flush message definition
@@ -9500,7 +9518,10 @@ PREPACK struct htt_tx_data_hdr_information {
sgi : 1, /* [23] */
ldpc : 1, /* [24] */
beamformed: 1, /* [25] */
- reserved_1: 6; /* [31:26] */
+ /* tx_retry_cnt:
+ * Indicates retry count of data tx frames provided by the host.
+ */
+ tx_retry_cnt: 6; /* [31:26] */
A_UINT32 /* word 2 */
framectrl:16, /* [15: 0] */
seqno:16; /* [31:16] */
@@ -9690,6 +9711,8 @@ PREPACK struct htt_tx_compl_ind_append_tx_tsf64 {
#define HTT_FW_TX_DATA_HDR_LDPC_S 24
#define HTT_FW_TX_DATA_HDR_BEAMFORMED_M 0x02000000
#define HTT_FW_TX_DATA_HDR_BEAMFORMED_S 25
+#define HTT_FW_TX_DATA_HDR_TX_RETRY_CNT_M 0xfc000000
+#define HTT_FW_TX_DATA_HDR_TX_RETRY_CNT_S 26
/* DWORD two */
#define HTT_FW_TX_DATA_HDR_FRAMECTRL_M 0x0000ffff
@@ -9789,6 +9812,14 @@ PREPACK struct htt_tx_compl_ind_append_tx_tsf64 {
#define HTT_FW_TX_DATA_HDR_BEAMFORMED_GET(word) \
(((word) & HTT_FW_TX_DATA_HDR_BEAMFORMED_M) >> HTT_FW_TX_DATA_HDR_BEAMFORMED_S)
+#define HTT_FW_TX_DATA_HDR_TX_RETRY_CNT_SET(word, value) \
+ do { \
+ HTT_CHECK_SET_VAL(HTT_FW_TX_DATA_HDR_TX_RETRY_CNT, value); \
+ (word) |= (value) << HTT_FW_TX_DATA_HDR_TX_RETRY_CNT_S; \
+ } while (0)
+#define HTT_FW_TX_DATA_HDR_TX_RETRY_CNT_GET(word) \
+ (((word) & HTT_FW_TX_DATA_HDR_TX_RETRY_CNT_M) >> HTT_FW_TX_DATA_HDR_TX_RETRY_CNT_S)
+
#define HTT_FW_TX_DATA_HDR_FRAMECTRL_SET(word, value) \
do { \
HTT_CHECK_SET_VAL(HTT_FW_TX_DATA_HDR_FRAMECTRL, value); \
@@ -13019,27 +13050,39 @@ struct htt_ul_ofdma_user_info_v0 {
A_UINT32 word1;
};
+#define HTT_UL_OFDMA_USER_INFO_V0_BITMAP_W0 \
+ A_UINT32 w0_fw_rsvd:30; \
+ A_UINT32 w0_valid:1; \
+ A_UINT32 w0_version:1;
+struct htt_ul_ofdma_user_info_v0_bitmap_w0 {
+ HTT_UL_OFDMA_USER_INFO_V0_BITMAP_W0
+};
+
+#define HTT_UL_OFDMA_USER_INFO_V0_BITMAP_W1 \
+ A_UINT32 w1_nss:3; \
+ A_UINT32 w1_mcs:4; \
+ A_UINT32 w1_ldpc:1; \
+ A_UINT32 w1_dcm:1; \
+ A_UINT32 w1_ru_start:7; \
+ A_UINT32 w1_ru_size:3; \
+ A_UINT32 w1_trig_type:4; \
+ A_UINT32 w1_unused:9;
+struct htt_ul_ofdma_user_info_v0_bitmap_w1 {
+ HTT_UL_OFDMA_USER_INFO_V0_BITMAP_W1
+};
+
/* htt_up_ofdma_user_info_v0_bitmap shows what bitfields are within the info */
PREPACK struct htt_ul_ofdma_user_info_v0_bitmap {
union {
A_UINT32 word0;
struct {
- A_UINT32 w0_fw_rsvd:30;
- A_UINT32 w0_valid:1;
- A_UINT32 w0_version:1;
+ HTT_UL_OFDMA_USER_INFO_V0_BITMAP_W0
};
};
union {
A_UINT32 word1;
struct {
- A_UINT32 w1_nss:3;
- A_UINT32 w1_mcs:4;
- A_UINT32 w1_ldpc:1;
- A_UINT32 w1_dcm:1;
- A_UINT32 w1_ru_start:7;
- A_UINT32 w1_ru_size:3;
- A_UINT32 w1_trig_type:4;
- A_UINT32 w1_unused:9;
+ HTT_UL_OFDMA_USER_INFO_V0_BITMAP_W1
};
};
} POSTPACK;
@@ -13191,5 +13234,207 @@ enum HTT_UL_OFDMA_TRIG_TYPE {
((word) |= ((_val) << HTT_UL_OFDMA_USER_INFO_V0_W1_RU_TRIG_TYP_S)); \
} while (0)
+/**
+ * @brief target -> host channel calibration data message
+ * @brief host -> target channel calibration data message
+ *
+ * @details
+ * The following field definitions describe the format of the channel
+ * calibration data message sent from the target to the host when
+ * MSG_TYPE is HTT_T2H_MSG_TYPE_CHAN_CALDATA, and sent from the host
+ * to the target when MSG_TYPE is HTT_H2T_MSG_TYPE_CHAN_CALDATA.
+ * The message is defined as htt_chan_caldata_msg followed by a variable
+ * number of 32-bit character values.
+ *
+ * |31 21|20|19 16|15 13| 12|11 8|7 0|
+ * |------------------------------------------------------------------|
+ * | rsv | A| frag | rsv |ck_v| sub_type| msg type |
+ * |------------------------------------------------------------------|
+ * | payload size | mhz |
+ * |------------------------------------------------------------------|
+ * | center frequency 2 | center frequency 1 |
+ * |------------------------------------------------------------------|
+ * | check sum |
+ * |------------------------------------------------------------------|
+ * | payload |
+ * |------------------------------------------------------------------|
+ * message info field:
+ * - MSG_TYPE
+ * Bits 7:0
+ * Purpose: identifies this as a channel calibration data message
+ * Value: HTT_T2H_MSG_TYPE_CHAN_CALDATA (0x15) or
+ * HTT_H2T_MSG_TYPE_CHAN_CALDATA (0xb)
+ * - SUB_TYPE
+ * Bits 11:8
+ * Purpose: T2H: indicates whether target is providing chan cal data
+ * to the host to store, or requesting that the host
+ * download previously-stored data.
+ * H2T: indicates whether the host is providing the requested
+ * channel cal data, or if it is rejecting the data
+ * request because it does not have the requested data.
+ * Value: see HTT_T2H_MSG_CHAN_CALDATA_xxx defs
+ * - CHKSUM_VALID
+ * Bit 12
+ * Purpose: indicates if the checksum field is valid
+ * value:
+ * - FRAG
+ * Bit 19:16
+ * Purpose: indicates the fragment index for message
+ * value: 0 for first fragment, 1 for second fragment, ...
+ * - APPEND
+ * Bit 20
+ * Purpose: indicates if this is the last fragment
+ * value: 0 = final fragment, 1 = more fragments will be appended
+ *
+ * channel and payload size field
+ * - MHZ
+ * Bits 15:0
+ * Purpose: indicates the channel primary frequency
+ * Value:
+ * - PAYLOAD_SIZE
+ * Bits 31:16
+ * Purpose: indicates the bytes of calibration data in payload
+ * Value:
+ *
+ * center frequency field
+ * - CENTER FREQUENCY 1
+ * Bits 15:0
+ * Purpose: indicates the channel center frequency
+ * Value: channel center frequency, in MHz units
+ * - CENTER FREQUENCY 2
+ * Bits 31:16
+ * Purpose: indicates the secondary channel center frequency,
+ * only for 11acvht 80plus80 mode
+ * Value: secondary channel center frequeny, in MHz units, if applicable
+ *
+ * checksum field
+ * - CHECK_SUM
+ * Bits 31:0
+ * Purpose: check the payload data, it is just for this fragment.
+ * This is intended for the target to check that the channel
+ * calibration data returned by the host is the unmodified data
+ * that was previously provided to the host by the target.
+ * value: checksum of fragment payload
+ */
+PREPACK struct htt_chan_caldata_msg {
+ /* DWORD 0: message info */
+ A_UINT32
+ msg_type: 8,
+ sub_type: 4 ,
+ chksum_valid: 1, /** 1:valid, 0:invalid */
+ reserved1: 3,
+ frag_idx: 4, /** fragment index for calibration data */
+ appending: 1, /** 0: no fragment appending,
+ * 1: extra fragment appending */
+ reserved2: 11;
+
+ /* DWORD 1: channel and payload size */
+ A_UINT32
+ mhz: 16, /** primary 20 MHz channel frequency in mhz */
+ payload_size: 16; /** unit: bytes */
+
+ /* DWORD 2: center frequency */
+ A_UINT32
+ band_center_freq1: 16, /** Center frequency 1 in MHz */
+ band_center_freq2: 16; /** Center frequency 2 in MHz,
+ * valid only for 11acvht 80plus80 mode */
+
+ /* DWORD 3: check sum */
+ A_UINT32 chksum;
+
+ /* variable length for calibration data */
+ A_UINT32 payload[1/* or more */];
+} POSTPACK;
+
+/* T2H SUBTYPE */
+#define HTT_T2H_MSG_CHAN_CALDATA_REQ 0
+#define HTT_T2H_MSG_CHAN_CALDATA_UPLOAD 1
+
+/* H2T SUBTYPE */
+#define HTT_H2T_MSG_CHAN_CALDATA_REJ 0
+#define HTT_H2T_MSG_CHAN_CALDATA_DOWNLOAD 1
+
+#define HTT_CHAN_CALDATA_MSG_SUB_TYPE_S 8
+#define HTT_CHAN_CALDATA_MSG_SUB_TYPE_M 0x00000f00
+#define HTT_CHAN_CALDATA_MSG_SUB_TYPE_GET(_var) \
+ (((_var) & HTT_CHAN_CALDATA_MSG_SUB_TYPE_M) >> HTT_CHAN_CALDATA_MSG_SUB_TYPE_S)
+#define HTT_CHAN_CALDATA_MSG_SUB_TYPE_SET(_var, _val) \
+ do { \
+ HTT_CHECK_SET_VAL(HTT_CHAN_CALDATA_MSG_SUB_TYPE, _val); \
+ ((_var) |= ((_val) << HTT_CHAN_CALDATA_MSG_SUB_TYPE_S)); \
+ } while (0)
+
+#define HTT_CHAN_CALDATA_MSG_CHKSUM_V_S 12
+#define HTT_CHAN_CALDATA_MSG_CHKSUM_V_M 0x00001000
+#define HTT_CHAN_CALDATA_MSG_CHKSUM_V_GET(_var) \
+ (((_var) & HTT_CHAN_CALDATA_MSG_CHKSUM_V_M) >> HTT_CHAN_CALDATA_MSG_CHKSUM_V_S)
+#define HTT_CHAN_CALDATA_MSG_CHKSUM_V_SET(_var, _val) \
+ do { \
+ HTT_CHECK_SET_VAL(HTT_CHAN_CALDATA_MSG_CHKSUM_V, _val); \
+ ((_var) |= ((_val) << HTT_CHAN_CALDATA_MSG_CHKSUM_V_S)); \
+ } while (0)
+
+
+#define HTT_CHAN_CALDATA_MSG_FRAG_IDX_S 16
+#define HTT_CHAN_CALDATA_MSG_FRAG_IDX_M 0x000f0000
+#define HTT_CHAN_CALDATA_MSG_FRAG_IDX_GET(_var) \
+ (((_var) & HTT_CHAN_CALDATA_MSG_FRAG_IDX_M) >> HTT_CHAN_CALDATA_MSG_FRAG_IDX_S)
+#define HTT_CHAN_CALDATA_MSG_FRAG_IDX_SET(_var, _val) \
+ do { \
+ HTT_CHECK_SET_VAL(HTT_CHAN_CALDATA_MSG_FRAG_IDX, _val); \
+ ((_var) |= ((_val) << HTT_CHAN_CALDATA_MSG_FRAG_IDX_S)); \
+ } while (0)
+
+#define HTT_CHAN_CALDATA_MSG_APPENDING_S 20
+#define HTT_CHAN_CALDATA_MSG_APPENDING_M 0x00100000
+#define HTT_CHAN_CALDATA_MSG_APPENDING_GET(_var) \
+ (((_var) & HTT_CHAN_CALDATA_MSG_APPENDING_M) >> HTT_CHAN_CALDATA_MSG_APPENDING_S)
+#define HTT_CHAN_CALDATA_MSG_APPENDING_SET(_var, _val) \
+ do { \
+ HTT_CHECK_SET_VAL(HTT_CHAN_CALDATA_MSG_APPENDING, _val); \
+ ((_var) |= ((_val) << HTT_CHAN_CALDATA_MSG_APPENDING_S)); \
+ } while (0)
+
+#define HTT_CHAN_CALDATA_MSG_MHZ_S 0
+#define HTT_CHAN_CALDATA_MSG_MHZ_M 0x0000ffff
+#define HTT_CHAN_CALDATA_MSG_MHZ_GET(_var) \
+ (((_var) & HTT_CHAN_CALDATA_MSG_MHZ_M) >> HTT_CHAN_CALDATA_MSG_MHZ_S)
+#define HTT_CHAN_CALDATA_MSG_MHZ_SET(_var, _val) \
+ do { \
+ HTT_CHECK_SET_VAL(HTT_CHAN_CALDATA_MSG_MHZ, _val); \
+ ((_var) |= ((_val) << HTT_CHAN_CALDATA_MSG_MHZ_S)); \
+ } while (0)
+
+
+#define HTT_CHAN_CALDATA_MSG_PLD_SIZE_S 16
+#define HTT_CHAN_CALDATA_MSG_PLD_SIZE_M 0xffff0000
+#define HTT_CHAN_CALDATA_MSG_PLD_SIZE_GET(_var) \
+ (((_var) & HTT_CHAN_CALDATA_MSG_PLD_SIZE_M) >> HTT_CHAN_CALDATA_MSG_PLD_SIZE_S)
+#define HTT_CHAN_CALDATA_MSG_PLD_SIZE_SET(_var, _val) \
+ do { \
+ HTT_CHECK_SET_VAL(HTT_CHAN_CALDATA_MSG_PLD_SIZE, _val); \
+ ((_var) |= ((_val) << HTT_CHAN_CALDATA_MSG_PLD_SIZE_S)); \
+ } while (0)
+
+
+#define HTT_CHAN_CALDATA_MSG_FREQ1_S 0
+#define HTT_CHAN_CALDATA_MSG_FREQ1_M 0x0000ffff
+#define HTT_CHAN_CALDATA_MSG_FREQ1_GET(_var) \
+ (((_var) & HTT_CHAN_CALDATA_MSG_FREQ1_M) >> HTT_CHAN_CALDATA_MSG_FREQ1_S)
+#define HTT_CHAN_CALDATA_MSG_FREQ1_SET(_var, _val) \
+ do { \
+ HTT_CHECK_SET_VAL(HTT_CHAN_CALDATA_MSG_FREQ1, _val); \
+ ((_var) |= ((_val) << HTT_CHAN_CALDATA_MSG_FREQ1_S)); \
+ } while (0)
+
+#define HTT_CHAN_CALDATA_MSG_FREQ2_S 16
+#define HTT_CHAN_CALDATA_MSG_FREQ2_M 0xffff0000
+#define HTT_CHAN_CALDATA_MSG_FREQ2_GET(_var) \
+ (((_var) & HTT_CHAN_CALDATA_MSG_FREQ2_M) >> HTT_CHAN_CALDATA_MSG_FREQ2_S)
+#define HTT_CHAN_CALDATA_MSG_FREQ2_SET(_var, _val) \
+ do { \
+ HTT_CHECK_SET_VAL(HTT_CHAN_CALDATA_MSG_FREQ2, _val); \
+ ((_var) |= ((_val) << HTT_CHAN_CALDATA_MSG_FREQ2_S)); \
+ } while (0)
#endif
diff --git a/fw/htt_stats.h b/fw/htt_stats.h
index 388154d9ccfb..c2f4e8d648dc 100644
--- a/fw/htt_stats.h
+++ b/fw/htt_stats.h
@@ -143,6 +143,7 @@ enum htt_dbg_ext_stats_type {
* 4 bit htt_tx_tid_stats_tlv/htt_tx_tid_stats_v1_tlv
* 5 bit htt_rx_tid_stats_tlv
* 6 bit htt_msdu_flow_stats_tlv
+ * 7 bit htt_peer_sched_stats_tlv
* - config_param2: [Bit31 : Bit0] mac_addr31to0
* - config_param3: [Bit15 : Bit0] mac_addr47to32
* [Bit 16] If this bit is set, reset per peer stats
@@ -439,6 +440,7 @@ typedef enum {
HTT_STATS_RX_PDEV_UL_MIMO_USER_STATS_TAG = 96, /* htt_rx_pdev_ul_mimo_user_stats_tlv */
HTT_STATS_RX_PDEV_UL_MUMIMO_TRIG_STATS_TAG = 97, /* htt_rx_pdev_ul_mumimo_trig_stats_tlv */
HTT_STATS_RX_FSE_STATS_TAG = 98, /* htt_rx_fse_stats_tlv */
+ HTT_STATS_PEER_SCHED_STATS_TAG = 99, /* htt_peer_sched_stats_tlv */
HTT_STATS_MAX_TAG,
} htt_tlv_tag_t;
@@ -1333,10 +1335,26 @@ typedef enum {
HTT_TX_TID_STATS_TLV = 4,
HTT_RX_TID_STATS_TLV = 5,
HTT_MSDU_FLOW_STATS_TLV = 6,
+ HTT_PEER_SCHED_STATS_TLV = 7,
HTT_PEER_STATS_MAX_TLV = 31,
} htt_peer_stats_tlv_enum;
+typedef struct {
+ htt_tlv_hdr_t tlv_hdr;
+ A_UINT32 peer_id;
+ /* Num of DL schedules for peer */
+ A_UINT32 num_sched_dl;
+ /* Num od UL schedules for peer */
+ A_UINT32 num_sched_ul;
+ /* Peer TX time */
+ A_UINT32 peer_tx_active_dur_us_low;
+ A_UINT32 peer_tx_active_dur_us_high;
+ /* Peer RX time */
+ A_UINT32 peer_rx_active_dur_us_low;
+ A_UINT32 peer_rx_active_dur_us_high;
+} htt_peer_sched_stats_tlv;
+
/* config_param0 */
#define HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR_M 0x00000001
#define HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR_S 0
@@ -1385,6 +1403,7 @@ typedef enum {
* - HTT_STATS_RX_TID_DETAILS_TAG (multiple)
* - HTT_STATS_PEER_MSDU_FLOWQ_TAG (multiple)
* - HTT_STATS_TX_TID_DETAILS_V1_TAG (multiple)
+ * - HTT_STATS_PEER_SCHED_STATS_TAG
*/
/* NOTE:
* This structure is for documentation, and cannot be safely used directly.
@@ -1401,6 +1420,7 @@ typedef struct _htt_peer_stats {
htt_rx_tid_stats_tlv rx_tid_stats[1];
htt_msdu_flow_stats_tlv msdu_flowq[1];
htt_tx_tid_stats_v1_tlv tx_tid_stats_v1[1];
+ htt_peer_sched_stats_tlv peer_sched_stats;
} htt_peer_stats_t;
/* =========== ACTIVE PEER LIST ========== */
@@ -1898,7 +1918,7 @@ typedef struct {
/* NOTE: Variable length TLV, use length spec to infer array size */
typedef struct {
htt_tlv_hdr_t tlv_hdr;
- /* Scheduler command posted per tx_mode su / mu mimo 11ac / mu mimo 11ax / mu ofdma */
+ /* Scheduler command posted per tx_mode */
A_UINT32 sched_cmd_posted[1]; /* HTT_TX_PDEV_SCHED_TX_MODE_MAX */
} htt_sched_txq_cmd_posted_tlv_v;
@@ -1907,7 +1927,7 @@ typedef struct {
/* NOTE: Variable length TLV, use length spec to infer array size */
typedef struct {
htt_tlv_hdr_t tlv_hdr;
- /* Scheduler command reaped per tx_mode su / mu mimo 11ac / mu mimo 11ax / mu ofdma */
+ /* Scheduler command reaped per tx_mode */
A_UINT32 sched_cmd_reaped[1]; /* HTT_TX_PDEV_SCHED_TX_MODE_MAX */
} htt_sched_txq_cmd_reaped_tlv_v;
@@ -2041,6 +2061,12 @@ typedef struct {
A_UINT32 su_min_txtime_sched_delay;
/* scheduled via no delay */
A_UINT32 su_no_delay;
+ /* Num of supercycles for this TxQ */
+ A_UINT32 num_supercycles;
+ /* Num of subcycles with sort for this TxQ */
+ A_UINT32 num_subcycles_with_sort;
+ /* Num of subcycles without sort for this Txq */
+ A_UINT32 num_subcycles_no_sort;
} htt_tx_pdev_stats_sched_per_txq_tlv;
#define HTT_STATS_TX_SCHED_CMN_MAC_ID_M 0x000000ff
diff --git a/fw/wmi_services.h b/fw/wmi_services.h
index 31f225c93bdd..e695fa87b44a 100755
--- a/fw/wmi_services.h
+++ b/fw/wmi_services.h
@@ -414,6 +414,7 @@ typedef enum {
*/
WMI_SERVICE_QMI_STATS_SUPPORT = 225,
WMI_SERVICE_CFR_CAPTURE_FILTER_SUPPORT = 226, /* Indicate FW Supports Channel Frequency Response (CFR) via WMI_CFR_CAPTURE_FILTER_CMDID */
+ WMI_SERVICE_STA_BSS_MAX_IDLE_TIME = 227, /* Indicate FW supports BSS Max Idle time feature via WMI_VDEV_BSS_MAX_IDLE_TIME_CMDID */
/******* ADD NEW SERVICES HERE *******/
diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h
index bd0054936257..d5929cdc6dc6 100755
--- a/fw/wmi_tlv_defs.h
+++ b/fw/wmi_tlv_defs.h
@@ -1010,6 +1010,8 @@ typedef enum {
WMITLV_TAG_STRUC_wmi_audio_aggr_set_group_retry,
WMITLV_TAG_STRUC_wmi_cfr_capture_filter_cmd_fixed_param,
WMITLV_TAG_STRUC_wmi_cfr_filter_group_config,
+ WMITLV_TAG_STRUC_wmi_fd_tmpl_cmd_fixed_param,
+ WMITLV_TAG_STRUC_wmi_vdev_bss_max_idle_time_cmd_fixed_param,
} WMITLV_TAG_ID;
/*
@@ -1423,6 +1425,8 @@ typedef enum {
OP(WMI_AUDIO_AGGR_SET_GROUP_RATE_CMDID) \
OP(WMI_AUDIO_AGGR_SET_GROUP_RETRY_CMDID) \
OP(WMI_CFR_CAPTURE_FILTER_CMDID) \
+ OP(WMI_FD_TMPL_CMDID) \
+ OP(WMI_VDEV_BSS_MAX_IDLE_TIME_CMDID) \
/* add new CMD_LIST elements above this line */
@@ -2096,6 +2100,13 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PRB_TMPL_CMDID);
WMITLV_CREATE_PARAM_STRUC(WMI_BCN_TMPL_CMDID);
+/* FILS Discovery template Cmd */
+#define WMITLV_TABLE_WMI_FD_TMPL_CMDID(id,op,buf,len) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_fd_tmpl_cmd_fixed_param, wmi_fd_tmpl_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, bufp, WMITLV_SIZE_VAR)
+
+WMITLV_CREATE_PARAM_STRUC(WMI_FD_TMPL_CMDID);
+
/* VDEV install key complete Cmd */
#define WMITLV_TABLE_WMI_VDEV_INSTALL_KEY_CMDID(id,op,buf,len) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_install_key_cmd_fixed_param, wmi_vdev_install_key_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)\
@@ -2144,6 +2155,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_ADD_BCN_FILTER_CMDID);
WMITLV_CREATE_PARAM_STRUC(WMI_STA_KEEPALIVE_CMDID);
+/* Bss Max idle time cmd */
+#define WMITLV_TABLE_WMI_VDEV_BSS_MAX_IDLE_TIME_CMDID(id,op,buf,len) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_bss_max_idle_time_cmd_fixed_param, wmi_vdev_bss_max_idle_time_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)
+
+WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_BSS_MAX_IDLE_TIME_CMDID);
+
/* ARP NS offload Cmd */
#define WMITLV_TABLE_WMI_SET_ARP_NS_OFFLOAD_CMDID(id,op,buf,len) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_WMI_SET_ARP_NS_OFFLOAD_CMD_fixed_param, WMI_SET_ARP_NS_OFFLOAD_CMD_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h
index a7f1a6cf9d9f..58624016b3b2 100755
--- a/fw/wmi_unified.h
+++ b/fw/wmi_unified.h
@@ -484,6 +484,8 @@ typedef enum {
WMI_VDEV_GET_MWS_COEX_INFO_CMDID,
/** delete all peer (excluding bss peer) */
WMI_VDEV_DELETE_ALL_PEER_CMDID,
+ /* To set bss max idle time related parameters */
+ WMI_VDEV_BSS_MAX_IDLE_TIME_CMDID,
/* peer specific commands */
@@ -616,6 +618,8 @@ typedef enum {
WMI_BSS_COLOR_CHANGE_ENABLE_CMDID,
/** To configure Beacon offload quiet-ie params */
WMI_VDEV_BCN_OFFLOAD_QUIET_CONFIG_CMDID,
+ /** set FILS Discovery frame template for FW to generate FD frames */
+ WMI_FD_TMPL_CMDID,
/** commands to directly control ba negotiation directly from host. only used in test mode */
@@ -3215,6 +3219,12 @@ typedef struct {
#define WMI_RSRC_CFG_FLAG_PACKET_CAPTURE_SUPPORT_S 27
#define WMI_RSRC_CFG_FLAG_PACKET_CAPTURE_SUPPORT_M 0x8000000
+ /*
+ * If this BIT is set, then target should support BSS Max Idle period.
+ */
+ #define WMI_RSRC_CFG_FLAG_BSS_MAX_IDLE_TIME_SUPPORT_S 28
+ #define WMI_RSRC_CFG_FLAG_BSS_MAX_IDLE_TIME_SUPPORT_M 0x10000000
+
A_UINT32 flag1;
/** @brief smart_ant_cap - Smart Antenna capabilities information
@@ -3561,6 +3571,11 @@ typedef struct {
#define WMI_RSRC_CFG_FLAG_PACKET_CAPTURE_SUPPORT_GET(word32) \
WMI_RSRC_CFG_FLAG_GET((word32), PACKET_CAPTURE_SUPPORT)
+#define WMI_RSRC_CFG_FLAG_BSS_MAX_IDLE_TIME_SUPPORT_SET(word32, value) \
+ WMI_RSRC_CFG_FLAG_SET((word32), BSS_MAX_IDLE_TIME_SUPPORT, (value))
+#define WMI_RSRC_CFG_FLAG_BSS_MAX_IDLE_TIME_SUPPORT_GET(word32) \
+ WMI_RSRC_CFG_FLAG_GET((word32), BSS_MAX_IDLE_TIME_SUPPORT)
+
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_init_cmd_fixed_param */
@@ -3982,6 +3997,9 @@ typedef enum {
/* Indicate client hint req is high priority than fw rnr or FILS disc */
#define WMI_SCAN_FLAG_EXT_6GHZ_CLIENT_HIGH_PRIORITY 0x00000080
+/* Force all 6ghz scan channels to active channel */
+#define WMI_SCAN_FLAG_EXT_6GHZ_FORCE_CHAN_ACTIVE 0x00000100
+
/**
* new 6 GHz flags per chan (short ssid or bssid) in struct
* wmi_hint_freq_short_ssid or wmi_hint_freq_bssid
@@ -3989,6 +4007,9 @@ typedef enum {
/* Indicate not to send probe req for short_ssid or bssid on that channel */
#define WMI_SCAN_HINT_FLAG_SKIP_TX_PROBE_REQ 0x00000001
+/* Force channel in WMI hint to active channel */
+#define WMI_SCAN_HINT_FLAG_FORCE_CHAN_ACTIVE 0x00000002
+
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_stop_scan_cmd_fixed_param */
/** requestor requesting cancel */
@@ -4486,11 +4507,26 @@ typedef struct {
*/
A_UINT32 tx_status;
+ A_UINT32
+ /* tx_retry_cnt:
+ * Indicates retry count of offloaded/local & host mgmt tx frames.
+ * The WMI_MGMT_HDR_TX_RETRY_[SET,GET] macros can be used to access
+ * this bitfield in a portable manner.
+ */
+ tx_retry_cnt:6, /* [5:0] */
+ reserved_1:26; /* [31:6] */
+
/* This TLV may be followed by array of bytes:
* A_UINT8 bufp[]; <-- management frame buffer
*/
} wmi_mgmt_hdr;
+/* Tx retry cnt set & get bits*/
+#define WMI_MGMT_HDR_TX_RETRY_CNT_SET(tx_retry_cnt, value) \
+ WMI_SET_BITS(tx_retry_cnt, 0, 6, value)
+#define WMI_MGMT_HDR_TX_RETRY_CNT_GET(tx_retry_cnt) \
+ WMI_GET_BITS(tx_retry_cnt, 0, 6)
+
/*
* Instead of universally increasing the RX_HDR_HEADROOM size which may cause problems for older targets,
* this new ext_hdr can be used for extending the header and will be only applicable for new targets.
@@ -6210,6 +6246,15 @@ typedef enum {
*/
WMI_PDEV_PARAM_SET_CMD_OBSS_PD_PER_AC,
+ /*
+ * Parameter used to enable/disable FW control of MU-EDCA and AP back-off
+ * parameters.
+ * If set to zero, FW mode is disabled; if set to 1, FW mode is enabled.
+ * Default setting is to have it enabled, and user can disable it in
+ * favor of manual mode or host control mode.
+ */
+ WMI_PDEV_PARAM_ENABLE_FW_DYNAMIC_HE_EDCA,
+
} WMI_PDEV_PARAM;
#define WMI_PDEV_ONLY_BSR_TRIG_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 0, 1)
@@ -9348,6 +9393,8 @@ typedef struct {
A_UINT32 he_ops; /* refer to WMI_HEOPS_xxx macros */
A_UINT32 cac_duration_ms; /* in milliseconds */
A_UINT32 regdomain;
+ /* min data rate to be used in BSS in Mbps */
+ A_UINT32 min_data_rate;
/* The TLVs follows this structure:
* wmi_channel chan; <-- WMI channel
* wmi_p2p_noa_descriptor noa_descriptors[]; <-- actual p2p NOA descriptor from scan entry
@@ -9490,6 +9537,18 @@ typedef enum {
#define WMI_VDEV_OCE_ESP_FEATURE_BITMAP 0x20
#define WMI_VDEV_OCE_REASSOC_REJECT_FEATURE_BITMAP 0x40
+/** 6GHZ params **/
+/* Control to enable/disable beacon tx in non-HT duplicate */
+#define WMI_VDEV_6GHZ_BITMAP_NON_HT_DUPLICATE_BEACON 0x1
+/* Control to enable/disable broadcast probe response tx in non-HT duplicate */
+#define WMI_VDEV_6GHZ_BITMAP_NON_HT_DUPLICATE_BCAST_PROBE_RSP 0x2
+/* Control to enable/disable FILS discovery frame tx in non-HT duplicate */
+#define WMI_VDEV_6GHZ_BITMAP_NON_HT_DUPLICATE_FD_FRAME 0x4
+/* Control to enable/disable periodic FILS discovery frame transmission */
+#define WMI_VDEV_6GHZ_BITMAP_FD_FRAME 0x8
+/* Control to enable/disable periodic broadcast probe response transmission */
+#define WMI_VDEV_6GHZ_BITMAP_BCAST_PROBE_RSP 0x10
+
/** the definition of different VDEV parameters */
typedef enum {
/** RTS Threshold */
@@ -10219,6 +10278,15 @@ typedef enum {
*/
WMI_VDEV_PARAM_NDP_INACTIVITY_TIMEOUT, /* 0x97 */
+ /* To enable/disable multicast rate adaptation feature at vdev level */
+ WMI_VDEV_PARAM_ENABLE_MCAST_RC, /* 0x98 */
+
+ /*
+ * Params related to 6GHz operation
+ * The parameter value is formed from WMI_VDEV_6GHZ_BITMAP flags.
+ */
+ WMI_VDEV_PARAM_6GHZ_PARAMS, /* 0x99 */
+
/*=== ADD NEW VDEV PARAM TYPES ABOVE THIS LINE ===
* The below vdev param types are used for prototyping, and are
* prone to change.
@@ -10511,6 +10579,23 @@ typedef struct {
A_UINT32 vdev_id;
} wmi_vdev_simple_event_fixed_param;
+/* Commands for getting and setting protected bit : bss max idle time */
+#define WMI_BSS_MAX_IDLE_TIME_PROTECTED_GET(idle_options) \
+ WMI_GET_BITS(idle_options, 0, 1)
+#define WMI_BSS_MAX_IDLE_TIME_PROTECTED_SET(idle_options, val) \
+ WMI_SET_BITS(idle_options, 0, 1, val)
+
+typedef struct {
+ A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_VDEV_BSS_MAX_IDLE_TIME_fixed_param */
+ A_UINT32 vdev_id; /** unique id identifying the VDEV, generated by the caller */
+ A_UINT32 max_idle_period; /* time interval in seconds */
+ /* idle_options:
+ * bit 0 - Protected bit
+ * Refer to WMI_BSS_MAX_IDLE_TIME_PROTECTED_GET,SET macros.
+ * bit 31:1 - Reserved bits
+ */
+ A_UINT32 idle_options;
+} wmi_vdev_bss_max_idle_time_cmd_fixed_param;
/** VDEV start response status codes */
#define WMI_VDEV_START_RESPONSE_STATUS_SUCCESS 0x0 /** VDEV succesfully started */
@@ -10609,6 +10694,13 @@ typedef struct {
* is 0, 1, 4 and 5, set the bitmap to (0X80000033)
*/
A_UINT32 csc_event_bitmap;
+ /** Specify offset for FW to overwrite MU EDCA parameters in the beacon.
+ * This is done during FW tuning of EDCA parameters.
+ * Based on number of HE and Legacy stations.
+ * If mu_edca_ie_offset == 0, it is ignored.
+ * Only non-zero values are considered.
+ */
+ A_UINT32 mu_edca_ie_offset;
/*
* The TLVs follows:
@@ -10641,6 +10733,19 @@ typedef struct {
} wmi_prb_tmpl_cmd_fixed_param;
typedef struct {
+ A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_fd_tmpl_cmd_fixed_param */
+ /** unique id identifying the VDEV, generated by the caller */
+ A_UINT32 vdev_id;
+ /** fd frame buffer length. data is in TLV data[] */
+ A_UINT32 buf_len;
+
+/*
+ * The TLVs follows:
+ * A_UINT8 data[]; <-- Variable length data
+ */
+} wmi_fd_tmpl_cmd_fixed_param;
+
+typedef struct {
/** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_offload_bcn_tx_status_event_fixed_param */
A_UINT32 tlv_header;
/** unique id identifying the VDEV */
@@ -11987,6 +12092,9 @@ typedef struct {
*/
A_UINT32 peer_he_cap_info_internal;
+ /* min data rate to be used in Mbps */
+ A_UINT32 min_data_rate;
+
/* Following this struct are the TLV's:
* A_UINT8 peer_legacy_rates[];
* A_UINT8 peer_ht_rates[];
@@ -18482,7 +18590,7 @@ enum {
do { \
(param) &= ~PDEV_PARAM_SMART_CHAINMASK_SCHEME_DECISION_MASK; \
(param) |= (value) << PDEV_PARAM_SMART_CHAINMASK_SCHEME_DECISION_SHIFT; \
- while (0)
+ } while (0)
#define GET_PDEV_SMART_CHAINMASK_SCHEME_DECISION(param) \
(((param) & PDEV_PARAM_SMART_CHAINMASK_SCHEME_DECISION_MASK) >> PDEV_PARAM_SMART_CHAINMASK_SCHEME_DECISION_SHIFT)
@@ -24011,6 +24119,8 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command)
/* set a key (used for setting per peer unicast
* and per vdev multicast) */
WMI_RETURN_STRING(WMI_VDEV_INSTALL_KEY_CMDID);
+ /* Set bss max idle time */
+ WMI_RETURN_STRING(WMI_VDEV_BSS_MAX_IDLE_TIME_CMDID);
/* wnm sleep mode command */
WMI_RETURN_STRING(WMI_VDEV_WNM_SLEEPMODE_CMDID);
@@ -24074,6 +24184,8 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command)
* to setup the common probe response template with the FW to
* be used by FW to generate probe responses */
WMI_RETURN_STRING(WMI_PRB_TMPL_CMDID);
+ /** set FILS Discovery frame template for FW to generate FD frames */
+ WMI_RETURN_STRING(WMI_FD_TMPL_CMDID);
/* commands to directly control ba negotiation directly from
* host. only used in test mode */
diff --git a/fw/wmi_version.h b/fw/wmi_version.h
index bd151b177110..7f450e8ae63f 100755
--- 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_ 720
+#define __WMI_REVISION_ 725
/** The Version Namespace should not be normally changed. Only
* host and firmware of the same WMI namespace will work