diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2019-12-06 08:44:18 -0800 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2019-12-06 08:44:18 -0800 |
| commit | 0dbd8a8e38bcd90de5a530f97445a8630d236574 (patch) | |
| tree | 4c95cb36d26a5b7619ad2d97b0b482a12111b04a | |
| parent | e1d651ee6ae204ab9eb43998d70bdd758a1f93fd (diff) | |
| parent | 0ada8dde65024971fbdc3d38c332945610ccf424 (diff) | |
Merge 0ada8dde65024971fbdc3d38c332945610ccf424 on remote branch
Change-Id: I02e9dc98e69ac7735444c9d04a3fb95d0c166c40
| -rw-r--r-- | fw/htt.h | 273 | ||||
| -rw-r--r-- | fw/htt_stats.h | 30 | ||||
| -rwxr-xr-x | fw/wmi_services.h | 1 | ||||
| -rwxr-xr-x | fw/wmi_tlv_defs.h | 17 | ||||
| -rwxr-xr-x | fw/wmi_unified.h | 114 | ||||
| -rwxr-xr-x | fw/wmi_version.h | 2 |
6 files changed, 419 insertions, 18 deletions
@@ -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 |
