diff --git a/drivers/staging/fw-api/fw/htt.h b/drivers/staging/fw-api/fw/htt.h index 01777502e28b..665ce2acfc02 100644 --- a/drivers/staging/fw-api/fw/htt.h +++ b/drivers/staging/fw-api/fw/htt.h @@ -698,10 +698,10 @@ typedef enum { HTT_STATS_UNAVAILABLE_ERROR_STATS_TAG = 110, /* htt_stats_error_tlv_v */ HTT_STATS_TX_SELFGEN_AC_SCHED_STATUS_STATS_TAG = 111, /* htt_tx_selfgen_ac_sched_status_stats_tlv */ HTT_STATS_TX_SELFGEN_AX_SCHED_STATUS_STATS_TAG = 112, /* htt_tx_selfgen_ax_sched_status_stats_tlv */ - HTT_STATS_TXBF_OFDMA_NDPA_STATS_TAG = 113, /* htt_txbf_ofdma_ndpa_stats_tlv */ - HTT_STATS_TXBF_OFDMA_NDP_STATS_TAG = 114, /* htt_txbf_ofdma_ndp_stats_tlv */ - HTT_STATS_TXBF_OFDMA_BRP_STATS_TAG = 115, /* htt_txbf_ofdma_brp_stats_tlv */ - HTT_STATS_TXBF_OFDMA_STEER_STATS_TAG = 116, /* htt_txbf_ofdma_steer_stats_tlv */ + HTT_STATS_TXBF_OFDMA_NDPA_STATS_TAG = 113, /* htt_txbf_ofdma_ndpa_stats_tlv - DEPRECATED */ + HTT_STATS_TXBF_OFDMA_NDP_STATS_TAG = 114, /* htt_txbf_ofdma_ndp_stats_tlv - DEPRECATED */ + HTT_STATS_TXBF_OFDMA_BRP_STATS_TAG = 115, /* htt_txbf_ofdma_brp_stats_tlv - DEPRECATED */ + HTT_STATS_TXBF_OFDMA_STEER_STATS_TAG = 116, /* htt_txbf_ofdma_steer_stats_tlv - DEPRECATED */ HTT_STATS_STA_UL_OFDMA_STATS_TAG = 117, /* htt_sta_ul_ofdma_stats_tlv */ HTT_STATS_VDEV_RTT_RESP_STATS_TAG = 118, /* htt_vdev_rtt_resp_stats_tlv */ HTT_STATS_PKTLOG_AND_HTT_RING_STATS_TAG = 119, /* htt_pktlog_and_htt_ring_stats_tlv */ @@ -732,6 +732,15 @@ typedef enum { HTT_STATS_TX_PDEV_SAWF_RATE_STATS_TAG = 144, /* htt_tx_pdev_rate_stats_sawf_tlv */ HTT_STATS_STRM_GEN_MPDUS_TAG = 145, /* htt_stats_strm_gen_mpdus_tlv_t */ HTT_STATS_STRM_GEN_MPDUS_DETAILS_TAG = 146, /* htt_stats_strm_gen_mpdus_details_tlv_t */ + HTT_STATS_TXBF_OFDMA_AX_NDPA_STATS_TAG = 147, /* htt_txbf_ofdma_ax_ndpa_stats_tlv */ + HTT_STATS_TXBF_OFDMA_AX_NDP_STATS_TAG = 148, /* htt_txbf_ofdma_ax_ndp_stats_tlv */ + HTT_STATS_TXBF_OFDMA_AX_BRP_STATS_TAG = 149, /* htt_txbf_ofdma_ax_brp_stats_tlv */ + HTT_STATS_TXBF_OFDMA_AX_STEER_STATS_TAG = 150, /* htt_txbf_ofdma_ax_steer_stats_tlv */ + HTT_STATS_TXBF_OFDMA_BE_NDPA_STATS_TAG = 151, /* htt_txbf_ofdma_be_ndpa_stats_tlv */ + HTT_STATS_TXBF_OFDMA_BE_NDP_STATS_TAG = 152, /* htt_txbf_ofdma_be_ndp_stats_tlv */ + HTT_STATS_TXBF_OFDMA_BE_BRP_STATS_TAG = 153, /* htt_txbf_ofdma_be_brp_stats_tlv */ + HTT_STATS_TXBF_OFDMA_BE_STEER_STATS_TAG = 154, /* htt_txbf_ofdma_be_steer_stats_tlv */ + HTT_STATS_DMAC_RESET_STATS_TAG = 155, /* htt_dmac_reset_stats_tlv */ HTT_STATS_MAX_TAG, @@ -5576,7 +5585,15 @@ enum htt_srng_ring_id { * 010 - 128bytes * 100 - 256bytes * 111 - Full mpdu bytes - * b'25:31 - rsvd2: Reserved for future use + * b'25:26 - rx_hdr_len: + * Specifies the number of bytes of recvd packet to copy + * into the rx_hdr tlv. + * supported values for now by host: + * 01 - 64bytes + * 10 - 128bytes + * 11 - 256bytes + * default - 128 bytes + * b'27:31 - rsvd2: Reserved for future use * dword2 - b'0:31 - packet_type_enable_flags_0: * Enable MGMT packet from 0b0000 to 0b1001 * bits from low to high: FP, MD, MO - 3 bits @@ -5714,7 +5731,8 @@ PREPACK struct htt_rx_ring_selection_cfg_t { config_length_mgmt:3, config_length_ctrl:3, config_length_data:3, - rsvd2: 7; + rx_hdr_len: 2, + rsvd2: 5; A_UINT32 packet_type_enable_flags_0; A_UINT32 packet_type_enable_flags_1; A_UINT32 packet_type_enable_flags_2; @@ -5877,6 +5895,16 @@ PREPACK struct htt_rx_ring_selection_cfg_t { ((_var) |= ((_val) << HTT_RX_RING_SELECTION_CFG_CONFIG_LENGTH_DATA_S)); \ } while (0) +#define HTT_RX_RING_SELECTION_CFG_RX_HDR_LEN_M 0x06000000 +#define HTT_RX_RING_SELECTION_CFG_RX_HDR_LEN_S 25 +#define HTT_RX_RING_SELECTION_CFG_RX_HDR_LEN_GET(_var) \ + (((_var) & HTT_RX_RING_SELECTION_CFG_RX_HDR_LEN_M) >> \ + HTT_RX_RING_SELECTION_CFG_RX_HDR_LEN_S) +#define HTT_RX_RING_SELECTION_CFG_RX_HDR_LEN_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL( HTT_RX_RING_SELECTION_CFG_RX_HDR_LEN, _val); \ + ((_var) |= ((_val) << HTT_RX_RING_SELECTION_CFG_RX_HDR_LEN_S));\ + } while(0) #define HTT_RX_RING_SELECTION_CFG_PKT_TYPE_ENABLE_FLAG_0_M 0xffffffff #define HTT_RX_RING_SELECTION_CFG_PKT_TYPE_ENABLE_FLAG_0_S 0 @@ -6651,6 +6679,9 @@ PREPACK struct htt_rx_ring_selection_cfg_t { #define HTT_RX_RING_SELECTION_CFG_TLV_FILTER_IN_FLAG_RX_PPDU_END_STATUS_DONE_M 0x00001000 #define HTT_RX_RING_SELECTION_CFG_TLV_FILTER_IN_FLAG_RX_PPDU_END_STATUS_DONE_S 12 +#define HTT_RX_RING_SELECTION_CFG_TLV_FILTER_IN_FLAG_RX_PPDU_START_USER_INFO_M 0x00002000 +#define HTT_RX_RING_SELECTION_CFG_TLV_FILTER_IN_FLAG_RX_PPDU_START_USER_INFO_S 13 + #define HTT_RX_RING_TLV_ENABLE_SET(word, httsym, enable) \ do { \ HTT_CHECK_SET_VAL(httsym, enable); \ @@ -18126,6 +18157,14 @@ typedef struct { /* discarded tx msdus byte cnt coz of time to live expiry */ A_UINT32 tx_msdu_ttl_expire_drop_byte_cnt_lo; A_UINT32 tx_msdu_ttl_expire_drop_byte_cnt_hi; + + /* TQM bypass frame cnt */ + A_UINT32 tqm_bypass_frame_cnt_lo; + A_UINT32 tqm_bypass_frame_cnt_hi; + + /* TQM bypass byte cnt */ + A_UINT32 tqm_bypass_byte_cnt_lo; + A_UINT32 tqm_bypass_byte_cnt_hi; } htt_t2h_vdev_txrx_stats_hw_stats_tlv; /* diff --git a/drivers/staging/fw-api/fw/htt_ppdu_stats.h b/drivers/staging/fw-api/fw/htt_ppdu_stats.h index ca52aef4b360..2e5f4d48053c 100644 --- a/drivers/staging/fw-api/fw/htt_ppdu_stats.h +++ b/drivers/staging/fw-api/fw/htt_ppdu_stats.h @@ -1571,6 +1571,144 @@ typedef enum HTT_PPDU_STATS_RESP_PPDU_TYPE HTT_PPDU_STATS_RESP_PPDU_TYPE; ((_var) |= ((_val) << HTT_PPDU_STATS_USER_RATE_TLV_RESP_PPDU_TYPE_S)); \ } while (0) +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_FORMAT_M 0x0000f000 +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_FORMAT_S 12 + +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_FORMAT_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_RATE_TLV_RU_FORMAT_M) >> \ + HTT_PPDU_STATS_USER_RATE_TLV_RU_FORMAT_S) + +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_FORMAT_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_RATE_TLV_RU_FORMAT, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_RATE_TLV_RU_FORMAT_S)); \ + } while (0) + + +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_END_M 0x0000ffff +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_END_S 0 + +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_END_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_RATE_TLV_RU_END_M) >> \ + HTT_PPDU_STATS_USER_RATE_TLV_RU_END_S) + +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_END_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_RATE_TLV_RU_END, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_RATE_TLV_RU_END_S)); \ + } while (0) + + +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_START_M 0xffff0000 +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_START_S 16 + +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_START_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_RATE_TLV_RU_START_M) >> \ + HTT_PPDU_STATS_USER_RATE_TLV_RU_START_S) + +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_START_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_RATE_TLV_RU_START, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_RATE_TLV_RU_START_S)); \ + } while (0) + + +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_INDEX_M 0x0000ffff +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_INDEX_S 0 + +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_INDEX_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_RATE_TLV_RU_INDEX_M) >> \ + HTT_PPDU_STATS_USER_RATE_TLV_RU_INDEX_S) + +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_INDEX_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_RATE_TLV_RU_INDEX, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_RATE_TLV_RU_INDEX_S)); \ + } while (0) + + +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_SIZE_M 0xffff0000 +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_SIZE_S 16 + +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_SIZE_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_RATE_TLV_RU_SIZE_M) >> \ + HTT_PPDU_STATS_USER_RATE_TLV_RU_SIZE_S) + +#define HTT_PPDU_STATS_USER_RATE_TLV_RU_SIZE_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_RATE_TLV_RU_SIZE, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_RATE_TLV_RU_SIZE_S)); \ + } while (0) + + +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_END_M 0x0000ffff +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_END_S 0 + +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_END_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_END_M) >> \ + HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_END_S) + +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_END_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_END, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_END_S)); \ + } while (0) + + +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_START_M 0xffff0000 +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_START_S 16 + +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_START_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_START_M) >> \ + HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_START_S) + +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_START_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_START, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_START_S)); \ + } while (0) + + +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_INDEX_M 0x0000ffff +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_INDEX_S 0 + +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_INDEX_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_INDEX_M) >> \ + HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_INDEX_S) + +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_INDEX_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_INDEX, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_INDEX_S)); \ + } while (0) + + +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_SIZE_M 0xffff0000 +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_SIZE_S 16 + +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_SIZE_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_SIZE_M) >> \ + HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_SIZE_S) + +#define HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_SIZE_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_SIZE, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_RATE_TLV_RESP_RU_SIZE_S)); \ + } while (0) + +#define HTT_PPDU_STATS_USER_RATE_TLV_PUNC_PATTERN_BITMAP_M 0x0000ffff +#define HTT_PPDU_STATS_USER_RATE_TLV_PUNC_PATTERN_BITMAP_S 0 + +#define HTT_PPDU_STATS_USER_RATE_TLV_PUNC_PATTERN_BITMAP_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_RATE_TLV_PUNC_PATTERN_BITMAP_M) >> \ + HTT_PPDU_STATS_USER_RATE_TLV_PUNC_PATTERN_BITMAP_S) + +#define HTT_PPDU_STATS_USER_RATE_TLV_PUNC_PATTERN_BITMAP_SET (_var , _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_RATE_TLV_PUNC_PATTERN_BITMAP, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_RATE_TLV_PUNC_PATTERN_BITMAP_S)); \ + } while (0) + typedef enum HTT_PPDU_STATS_RU_SIZE { HTT_PPDU_STATS_RU_26, HTT_PPDU_STATS_RU_52, @@ -1754,10 +1892,11 @@ typedef struct { }; /* - * This is an unused word that can be safely renamed / used - * by any future feature. + * BIT [15:0] :- Punctured BW bitmap pattern to indicate which BWs are + * punctured. */ - A_UINT32 reserved4; + A_UINT32 punc_pattern_bitmap: 16, + reserved4: 16; } htt_ppdu_stats_user_rate_tlv; #define HTT_PPDU_STATS_USR_RATE_VALID_M 0x80000000 diff --git a/drivers/staging/fw-api/fw/htt_stats.h b/drivers/staging/fw-api/fw/htt_stats.h index b212bd63a5d6..838e332342ca 100644 --- a/drivers/staging/fw-api/fw/htt_stats.h +++ b/drivers/staging/fw-api/fw/htt_stats.h @@ -434,6 +434,15 @@ enum htt_dbg_ext_stats_type { HTT_STRM_GEN_MPDUS_STATS = 43, HTT_STRM_GEN_MPDUS_DETAILS_STATS = 44, + /** HTT_DBG_SOC_ERROR_STATS + * PARAMS: + * - No Params + * RESP MSG: + * - htt_dmac_reset_stats_tlv + */ + HTT_DBG_SOC_ERROR_STATS = 45, + + /* keep this last */ HTT_DBG_NUM_EXT_STATS = 256, }; @@ -565,6 +574,25 @@ typedef enum { HTT_RX_UL_MUMIMO_TRIGGER_STATS_UPLOAD_11BE, } htt_rx_ul_mumimo_trigger_stats_upload_t; +/* htt_tx_pdev_txbf_ofdma_stats_upload_t + * Enumerations for specifying which stats to upload in response to + * HTT_DBG_EXT_STATS_TXBF_OFDMA. + */ +typedef enum { + /* upload 11ax TXBF OFDMA stats + * + * TLV: htt_tx_pdev_ax_txbf_ofdma_stats_t + */ + HTT_UPLOAD_AX_TXBF_OFDMA_STATS, + + /* + * Upload 11be TXBF OFDMA stats + * + * TLV: htt_tx_pdev_be_txbf_ofdma_stats_t + */ + HTT_UPLOAD_BE_TXBF_OFDMA_STATS, +} htt_tx_pdev_txbf_ofdma_stats_upload_t; + #define HTT_STATS_MAX_STRING_SZ32 4 #define HTT_STATS_MACID_INVALID 0xff #define HTT_TX_HWQ_MAX_DIFS_LATENCY_BINS 10 @@ -1010,6 +1038,27 @@ typedef struct { A_UINT32 phy_warm_reset_reason_tx_hwsch_reset_war; A_UINT32 phy_warm_reset_reason_hwsch_wdog_or_cca_wdog_war; A_UINT32 fw_rx_rings_reset; + /** + * Num of iterations rx leak prevention successfully done. + */ + A_UINT32 rx_dest_drain_rx_descs_leak_prevention_done; + /** + * Num of rx descs successfully saved by rx leak prevention. + */ + A_UINT32 rx_dest_drain_rx_descs_saved_cnt; + /* + * Stats to debug reason Rx leak prevention + * was not required to be kicked in. + */ + A_UINT32 rx_dest_drain_rxdma2reo_leak_detected; + A_UINT32 rx_dest_drain_rxdma2fw_leak_detected; + A_UINT32 rx_dest_drain_rxdma2wbm_leak_detected; + A_UINT32 rx_dest_drain_rxdma1_2sw_leak_detected; + A_UINT32 rx_dest_drain_rx_drain_ok_mac_idle; + A_UINT32 rx_dest_drain_ok_mac_not_idle; + A_UINT32 rx_dest_drain_prerequisite_invld; + A_UINT32 rx_dest_drain_skip_for_non_lmac_reset; + A_UINT32 rx_dest_drain_hw_fifo_not_empty_post_drain_wait; } htt_hw_stats_pdev_errs_tlv; typedef struct { @@ -2226,7 +2275,7 @@ typedef struct { A_UINT32 be_ul_mumimo_trigger[HTT_TX_PDEV_STATS_NUM_BE_MUMIMO_USER_STATS]; } htt_tx_selfgen_be_stats_tlv; -typedef struct { +typedef struct { /* DEPRECATED */ htt_tlv_hdr_t tlv_hdr; /** 11AX HE OFDMA NDPA frame queued to the HW */ A_UINT32 ax_ofdma_ndpa_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; @@ -2238,7 +2287,7 @@ typedef struct { A_UINT32 ax_ofdma_ndpa_err[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; } htt_txbf_ofdma_ndpa_stats_tlv; -typedef struct { +typedef struct { /* DEPRECATED */ htt_tlv_hdr_t tlv_hdr; /** 11AX HE OFDMA NDP frame queued to the HW */ A_UINT32 ax_ofdma_ndp_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; @@ -2250,7 +2299,7 @@ typedef struct { A_UINT32 ax_ofdma_ndp_err[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; } htt_txbf_ofdma_ndp_stats_tlv; -typedef struct { +typedef struct { /* DEPRECATED */ htt_tlv_hdr_t tlv_hdr; /** 11AX HE OFDMA MU BRPOLL frame queued to the HW */ A_UINT32 ax_ofdma_brpoll_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; @@ -2267,7 +2316,7 @@ typedef struct { A_UINT32 ax_ofdma_brp_err_num_cbf_rcvd[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS+1]; } htt_txbf_ofdma_brp_stats_tlv; -typedef struct { +typedef struct { /* DEPRECATED */ htt_tlv_hdr_t tlv_hdr; /** * 11AX HE OFDMA PPDUs that were sent over the air with steering @@ -2290,23 +2339,295 @@ typedef struct { A_UINT32 ax_ofdma_num_usrs_force_sound[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; } htt_txbf_ofdma_steer_stats_tlv; +/* Note: + * This struct htt_tx_pdev_txbf_ofdma_stats_t and all its constituent + * struct TLVs are deprecated, due to the need for restructuring these + * stats into a variable length array + */ +typedef struct { /* DEPRECATED */ + htt_txbf_ofdma_ndpa_stats_tlv ofdma_ndpa_tlv; + htt_txbf_ofdma_ndp_stats_tlv ofdma_ndp_tlv; + htt_txbf_ofdma_brp_stats_tlv ofdma_brp_tlv; + htt_txbf_ofdma_steer_stats_tlv ofdma_steer_tlv; +} htt_tx_pdev_txbf_ofdma_stats_t; + +typedef struct { + /** 11AX HE OFDMA NDPA frame queued to the HW */ + A_UINT32 ax_ofdma_ndpa_queued; + /** 11AX HE OFDMA NDPA frame sent over the air */ + A_UINT32 ax_ofdma_ndpa_tried; + /** 11AX HE OFDMA NDPA frame flushed by HW */ + A_UINT32 ax_ofdma_ndpa_flushed; + /** 11AX HE OFDMA NDPA frame completed with error(s) */ + A_UINT32 ax_ofdma_ndpa_err; +} htt_txbf_ofdma_ax_ndpa_stats_elem_t; + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /** + * This field is populated with the num of elems in the ax_ndpa[] + * variable length array. + */ + A_UINT32 num_elems_ax_ndpa_arr; + /** + * This field will be filled by target with value of + * sizeof(htt_txbf_ofdma_ax_ndpa_stats_elem_t). + * This is for allowing host to infer how much data target has provided, + * even if it using different version of the struct def than what target + * had used. + */ + A_UINT32 arr_elem_size_ax_ndpa; + htt_txbf_ofdma_ax_ndpa_stats_elem_t ax_ndpa[1]; /* variable length */ +} htt_txbf_ofdma_ax_ndpa_stats_tlv; + +typedef struct { + /** 11AX HE OFDMA NDP frame queued to the HW */ + A_UINT32 ax_ofdma_ndp_queued; + /** 11AX HE OFDMA NDPA frame sent over the air */ + A_UINT32 ax_ofdma_ndp_tried; + /** 11AX HE OFDMA NDPA frame flushed by HW */ + A_UINT32 ax_ofdma_ndp_flushed; + /** 11AX HE OFDMA NDPA frame completed with error(s) */ + A_UINT32 ax_ofdma_ndp_err; +} htt_txbf_ofdma_ax_ndp_stats_elem_t; + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /** + * This field is populated with the num of elems in the the ax_ndp[] + * variable length array. + */ + A_UINT32 num_elems_ax_ndp_arr; + /** + * This field will be filled by target with value of + * sizeof(htt_txbf_ofdma_ax_ndp_stats_elem_t). + * This is for allowing host to infer how much data target has provided, + * even if it using different version of the struct def than what target + * had used. + */ + A_UINT32 arr_elem_size_ax_ndp; + htt_txbf_ofdma_ax_ndp_stats_elem_t ax_ndp[1]; /* variable length */ +} htt_txbf_ofdma_ax_ndp_stats_tlv; + +typedef struct { + /** 11AX HE OFDMA MU BRPOLL frame queued to the HW */ + A_UINT32 ax_ofdma_brpoll_queued; + /** 11AX HE OFDMA MU BRPOLL frame sent over the air */ + A_UINT32 ax_ofdma_brpoll_tried; + /** 11AX HE OFDMA MU BRPOLL frame flushed by HW */ + A_UINT32 ax_ofdma_brpoll_flushed; + /** 11AX HE OFDMA MU BRPOLL frame completed with error(s) */ + A_UINT32 ax_ofdma_brp_err; + /** + * Number of CBF(s) received when 11AX HE OFDMA MU BRPOLL frame + * completed with error(s) + */ + A_UINT32 ax_ofdma_brp_err_num_cbf_rcvd; +} htt_txbf_ofdma_ax_brp_stats_elem_t; + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /** + * This field is populated with the num of elems in the the ax_brp[] + * variable length array. + */ + A_UINT32 num_elems_ax_brp_arr; + /** + * This field will be filled by target with value of + * sizeof(htt_txbf_ofdma_ax_brp_stats_elem_t). + * This is for allowing host to infer how much data target has provided, + * even if it using different version of the struct than what target + * had used. + */ + A_UINT32 arr_elem_size_ax_brp; + htt_txbf_ofdma_ax_brp_stats_elem_t ax_brp[1]; /* variable length */ +} htt_txbf_ofdma_ax_brp_stats_tlv; + +typedef struct { + /** + * 11AX HE OFDMA PPDUs that were sent over the air with steering + * (TXBF + OFDMA) + */ + A_UINT32 ax_ofdma_num_ppdu_steer; + /** 11AX HE OFDMA PPDUs that were sent over the air in open loop */ + A_UINT32 ax_ofdma_num_ppdu_ol; + /** + * 11AX HE OFDMA number of users for which CBF prefetch was initiated + * to PHY HW during TX + */ + A_UINT32 ax_ofdma_num_usrs_prefetch; + /** + * 11AX HE OFDMA number of users for which sounding was initiated + * during TX + */ + A_UINT32 ax_ofdma_num_usrs_sound; + /** 11AX HE OFDMA number of users for which sounding was forced during TX */ + A_UINT32 ax_ofdma_num_usrs_force_sound; +} htt_txbf_ofdma_ax_steer_stats_elem_t; + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /** + * This field is populated with the num of elems in the ax_steer[] + * variable length array. + */ + A_UINT32 num_elems_ax_steer_arr; + /** + * This field will be filled by target with value of + * sizeof(htt_txbf_ofdma_ax_steer_stats_elem_t). + * This is for allowing host to infer how much data target has provided, + * even if it using different version of the struct than what target + * had used. + */ + A_UINT32 arr_elem_size_ax_steer; + htt_txbf_ofdma_ax_steer_stats_elem_t ax_steer[1]; /* variable length */ +} htt_txbf_ofdma_ax_steer_stats_tlv; + +typedef struct { + /** 11BE EHT OFDMA NDPA frame queued to the HW */ + A_UINT32 be_ofdma_ndpa_queued; + /** 11BE EHT OFDMA NDPA frame sent over the air */ + A_UINT32 be_ofdma_ndpa_tried; + /** 11BE EHT OFDMA NDPA frame flushed by HW */ + A_UINT32 be_ofdma_ndpa_flushed; + /** 11BE EHT OFDMA NDPA frame completed with error(s) */ + A_UINT32 be_ofdma_ndpa_err; +} htt_txbf_ofdma_be_ndpa_stats_elem_t; + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /** + * This field is populated with the num of elems in the be_ndpa[] + * variable length array. + */ + A_UINT32 num_elems_be_ndpa_arr; + /** + * This field will be filled by target with value of + * sizeof(htt_txbf_ofdma_be_ndpa_stats_elem_t). + * This is for allowing host to infer how much data target has provided, + * even if it using different version of the struct than what target + * had used. + */ + A_UINT32 arr_elem_size_be_ndpa; + htt_txbf_ofdma_be_ndpa_stats_elem_t be_ndpa[1]; /* variable length */ +} htt_txbf_ofdma_be_ndpa_stats_tlv; + +typedef struct { + /** 11BE EHT OFDMA NDP frame queued to the HW */ + A_UINT32 be_ofdma_ndp_queued; + /** 11BE EHT OFDMA NDPA frame sent over the air */ + A_UINT32 be_ofdma_ndp_tried; + /** 11BE EHT OFDMA NDPA frame flushed by HW */ + A_UINT32 be_ofdma_ndp_flushed; + /** 11BE EHT OFDMA NDPA frame completed with error(s) */ + A_UINT32 be_ofdma_ndp_err; +} htt_txbf_ofdma_be_ndp_stats_elem_t; + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /** + * This field is populated with the num of elems in the be_ndp[] + * variable length array. + */ + A_UINT32 num_elems_be_ndp_arr; + /** + * This field will be filled by target with value of + * sizeof(htt_txbf_ofdma_be_ndp_stats_elem_t). + * This is for allowing host to infer how much data target has provided, + * even if it using different version of the struct than what target + * had used. + */ + A_UINT32 arr_elem_size_be_ndp; + htt_txbf_ofdma_be_ndp_stats_elem_t be_ndp[1]; /* variable length */ +} htt_txbf_ofdma_be_ndp_stats_tlv; + +typedef struct { + /** 11BE EHT OFDMA MU BRPOLL frame queued to the HW */ + A_UINT32 be_ofdma_brpoll_queued; + /** 11BE EHT OFDMA MU BRPOLL frame sent over the air */ + A_UINT32 be_ofdma_brpoll_tried; + /** 11BE EHT OFDMA MU BRPOLL frame flushed by HW */ + A_UINT32 be_ofdma_brpoll_flushed; + /** 11BE EHT OFDMA MU BRPOLL frame completed with error(s) */ + A_UINT32 be_ofdma_brp_err; + /** + * Number of CBF(s) received when 11BE EHT OFDMA MU BRPOLL frame + * completed with error(s) + */ + A_UINT32 be_ofdma_brp_err_num_cbf_rcvd; +} htt_txbf_ofdma_be_brp_stats_elem_t; + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /** + * This field is populated with the num of elems in the be_brp[] + * variable length array. + */ + A_UINT32 num_elems_be_brp_arr; + /** + * This field will be filled by target with value of + * sizeof(htt_txbf_ofdma_be_brp_stats_elem_t). + * This is for allowing host to infer how much data target has provided, + * even if it using different version of the struct than what target + * had used + */ + A_UINT32 arr_elem_size_be_brp; + htt_txbf_ofdma_be_brp_stats_elem_t be_brp[1]; /* variable length */ +} htt_txbf_ofdma_be_brp_stats_tlv; + +typedef struct { + /** + * 11BE EHT OFDMA PPDUs that were sent over the air with steering + * (TXBF + OFDMA) + */ + A_UINT32 be_ofdma_num_ppdu_steer; + /** 11BE EHT OFDMA PPDUs that were sent over the air in open loop */ + A_UINT32 be_ofdma_num_ppdu_ol; + /** + * 11BE EHT OFDMA number of users for which CBF prefetch was initiated + * to PHY HW during TX + */ + A_UINT32 be_ofdma_num_usrs_prefetch; + /** + * 11BE EHT OFDMA number of users for which sounding was initiated + * during TX + */ + A_UINT32 be_ofdma_num_usrs_sound; + /** + * 11BE EHT OFDMA number of users for which sounding was forced during TX + */ + A_UINT32 be_ofdma_num_usrs_force_sound; +} htt_txbf_ofdma_be_steer_stats_elem_t; + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /** + * This field is populated with the num of elems in the be_steer[] + * variable length array. + */ + A_UINT32 num_elems_be_steer_arr; + /** + * This field will be filled by target with value of + * sizeof(htt_txbf_ofdma_be_steer_stats_elem_t). + * This is for allowing host to infer how much data target has provided, + * even if it using different version of the struct than what target + * had used. + */ + A_UINT32 arr_elem_size_be_steer; + htt_txbf_ofdma_be_steer_stats_elem_t be_steer[1]; /* variable length */ +} htt_txbf_ofdma_be_steer_stats_tlv; + /* STATS_TYPE : HTT_DBG_EXT_STATS_TXBF_OFDMA * TLV_TAGS: * - HTT_STATS_TXBF_OFDMA_NDPA_STATS_TAG * - HTT_STATS_TXBF_OFDMA_NDP_STATS_TAG * - HTT_STATS_TXBF_OFDMA_BRP_STATS_TAG * - HTT_STATS_TXBF_OFDMA_STEER_STATS_TAG + * - HTT_STATS_TXBF_OFDMA_BE_NDPA_STATS_TAG + * - HTT_STATS_TXBF_OFDMA_BE_NDP_STATS_TAG + * - HTT_STATS_TXBF_OFDMA_BE_BRP_STATS_TAG + * - HTT_STATS_TXBF_OFDMA_BE_STEER_STATS_TAG */ -/* NOTE: - * This structure is for documentation, and cannot be safely used directly. - * Instead, use the constituent TLV structures to fill/parse. - */ -typedef struct { - htt_txbf_ofdma_ndpa_stats_tlv ofdma_ndpa_tlv; - htt_txbf_ofdma_ndp_stats_tlv ofdma_ndp_tlv; - htt_txbf_ofdma_brp_stats_tlv ofdma_brp_tlv; - htt_txbf_ofdma_steer_stats_tlv ofdma_steer_tlv; -} htt_tx_pdev_txbf_ofdma_stats_t; typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -3246,6 +3567,14 @@ typedef struct { A_UINT32 tqm_active_tids; A_UINT32 tqm_inactive_tids; A_UINT32 tqm_active_msduq_flows; + + /* SAWF system delay reference timestamp updation related stats */ + A_UINT32 total_msduq_timestamp_updates; + A_UINT32 total_msduq_timestamp_updates_by_get_mpdu_head_info_cmd; + A_UINT32 total_msduq_timestamp_updates_by_empty_to_nonempty_status; + A_UINT32 total_get_mpdu_head_info_cmds_by_sched_algo_la_query; + A_UINT32 total_get_mpdu_head_info_cmds_by_tac; + A_UINT32 total_gen_mpdu_cmds_by_sched_algo_la_query; } htt_tx_tqm_cmn_stats_tlv; typedef struct { @@ -4320,6 +4649,10 @@ typedef struct { A_UINT32 ofdma_tx_ru_size[HTT_TX_PDEV_STATS_NUM_AX_RU_SIZE_COUNTERS]; /** 11AX HE DL MU OFDMA HE-SIG-B MCS stats */ A_UINT32 ofdma_he_sig_b_mcs[HTT_TX_PDEV_STATS_NUM_HE_SIG_B_MCS_COUNTERS]; + /** 11AX HE SU data + embedded trigger PPDU success stats (stats for HETP ack success PPDU cnt) */ + A_UINT32 ax_su_embedded_trigger_data_ppdu; + /** 11AX HE SU data + embedded trigger PPDU failure stats (stats for HETP ack failure PPDU cnt) */ + A_UINT32 ax_su_embedded_trigger_data_ppdu_err; } htt_tx_pdev_rate_stats_tlv; typedef struct { @@ -4653,13 +4986,15 @@ typedef struct { */ A_UINT32 rx_ulofdma_data_nusers[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; - /* - * NOTE - this TLV is already large enough that it causes the HTT message - * carrying it to be nearly at the message size limit that applies to - * many targets/hosts. - * No further fields should be added to this TLV without very careful - * review to ensure the size increase is acceptable. - */ + /* Stats for MCS 12/13 */ + A_UINT32 rx_mcs_ext[HTT_RX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS]; +/* + * NOTE - this TLV is already large enough that it causes the HTT message + * carrying it to be nearly at the message size limit that applies to + * many targets/hosts. + * No further fields should be added to this TLV without very careful + * review to ensure the size increase is acceptable. + */ } htt_rx_pdev_rate_stats_tlv; /* STATS_TYPE : HTT_DBG_EXT_STATS_PDEV_RX_RATE @@ -5681,6 +6016,7 @@ typedef enum { HTT_TX_AC_SOUNDING_MODE = 0, HTT_TX_AX_SOUNDING_MODE = 1, HTT_TX_BE_SOUNDING_MODE = 2, + HTT_TX_CMN_SOUNDING_MODE = 3, } htt_stats_sounding_tx_mode; typedef struct { @@ -5860,6 +6196,36 @@ typedef struct { * Count of number of times PSR based TX transmissions were successful. */ A_UINT32 num_psr_ppdu_success; + /** + * Count of number of times TX PPDU per access category were transmitted + * using non-SRG opportunities created. + */ + A_UINT32 num_non_srg_ppdu_tried_per_ac[HTT_NUM_AC_WMM]; + /** + * Count of number of times non-SRG based TX transmissions per access + * category were successful + */ + A_UINT32 num_non_srg_ppdu_success_per_ac[HTT_NUM_AC_WMM]; + /** + * Count of number of times TX PPDU per access category were transmitted + * using SRG opportunities created. + */ + A_UINT32 num_srg_ppdu_tried_per_ac[HTT_NUM_AC_WMM]; + /** + * Count of number of times SRG based TX transmissions per access + * category were successful + */ + A_UINT32 num_srg_ppdu_success_per_ac[HTT_NUM_AC_WMM]; + /** + * Count of number of times ppdu was flushed due to ongoing OBSS + * frame duration value lesser than minimum required frame duration. + */ + A_UINT32 num_obss_min_duration_check_flush_cnt; + /** + * Count of number of times ppdu was flushed due to ppdu duration + * exceeding aborted OBSS frame duration + */ + A_UINT32 num_sr_ppdu_abort_flush_cnt; } htt_pdev_obss_pd_stats_tlv; /* NOTE: @@ -6172,6 +6538,19 @@ typedef struct { A_UINT32 mpdus_failed; } htt_tx_rate_stats_t; +typedef enum { + HTT_RC_MODE_SU_OL, + HTT_RC_MODE_SU_BF, + HTT_RC_MODE_MU1_INTF, + HTT_RC_MODE_MU2_INTF, + HTT_Rc_MODE_MU3_INTF, + HTT_RC_MODE_MU4_INTF, + HTT_RC_MODE_MU5_INTF, + HTT_RC_MODE_MU6_INTF, + HTT_RC_MODE_MU7_INTF, + HTT_RC_MODE_2D_COUNT, +} HTT_RC_MODE; + typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -6193,6 +6572,7 @@ typedef struct { /** 320MHz extension for PER */ htt_tx_rate_stats_t per_bw320; + A_UINT32 probe_cnt_per_rcmode[HTT_RC_MODE_2D_COUNT]; } htt_tx_rate_stats_per_tlv; /* NOTE: @@ -6386,6 +6766,8 @@ typedef struct { A_UINT32 rx_ftm_cnt; /** Initiator Terminate count */ A_UINT32 initiator_terminate_cnt; + /** Debug count to check the Measurement request from host */ + A_UINT32 tx_meas_req_count; } htt_vdev_rtt_init_stats_tlv; typedef struct { @@ -6869,4 +7251,24 @@ typedef struct { } burst_size; } htt_stats_strm_gen_mpdus_details_tlv_t; +typedef struct { + htt_tlv_hdr_t tlv_hdr; + A_UINT32 reset_count; + /** lower portion (bits 31:0) of reset time, in milliseconds */ + A_UINT32 reset_time_lo_ms; + /** upper portion (bits 63:32) of reset time, in milliseconds */ + A_UINT32 reset_time_hi_ms; + /** lower portion (bits 31:0) of disengage time, in milliseconds */ + A_UINT32 disengage_time_lo_ms; + /** upper portion (bits 63:32) of disengage time, in milliseconds */ + A_UINT32 disengage_time_hi_ms; + /** lower portion (bits 31:0) of engage time, in milliseconds */ + A_UINT32 engage_time_lo_ms; + /** upper portion (bits 63:32) of engage time, in milliseconds */ + A_UINT32 engage_time_hi_ms; + A_UINT32 disengage_count; + A_UINT32 engage_count; + A_UINT32 drain_dest_ring_mask; +} htt_dmac_reset_stats_tlv; + #endif /* __HTT_STATS_H__ */ diff --git a/drivers/staging/fw-api/fw/wlan_defs.h b/drivers/staging/fw-api/fw/wlan_defs.h index f39cc7cc66df..b2f5bcb5dc68 100755 --- a/drivers/staging/fw-api/fw/wlan_defs.h +++ b/drivers/staging/fw-api/fw/wlan_defs.h @@ -1,5 +1,6 @@ /* - * Copyright (c) 2013-2016, 2018-2021 The Linux Foundation. All rights reserved.* + * Copyright (c) 2013-2016, 2018-2021 The Linux Foundation. All rights reserved. + * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -1313,7 +1314,7 @@ typedef enum { /** MGMT RX REO Changes */ /* Macros for having versioning info for compatibility check between host and firmware */ -#define MLO_SHMEM_MAJOR_VERSION 1 +#define MLO_SHMEM_MAJOR_VERSION 2 #define MLO_SHMEM_MINOR_VERSION 1 /** Helper Macros for tlv header of the given tlv buffer */ @@ -1357,6 +1358,36 @@ typedef enum { (_var) |= (((_val) & ((1 << (_num_bits)) - 1)) << (_index)); \ } while (0) +/** + * Enum which defines different versions of management Rx reorder snapshots. + */ +typedef enum { + /** + * DWORD Lower: + * [15:0] : Management packet counter + * [30:16] : Redundant global time stamp = Global time stamp[14:0] + * [31] : Valid + * + * DWORD Upper: + * [31:0] : Global time stamp + * + */ + MGMT_RX_REO_SNAPSHOT_VERSION_TIMESTAMP_REDUNDANCY = 0, + + /** + * DWORD Lower: + * [14:0] : Global time stamp[14:0] + * [30:15] : Management packet counter + * [31] : Valid + * + * DWORD Upper: + * [14:0] : Redundant management packet counter = Management packet + * counter[14:0] + * [31:15] : Global time stamp[31:15] + */ + MGMT_RX_REO_SNAPSHOT_VERSION_PKT_CTR_REDUNDANCY = 1, +} MGMT_RX_REO_SNAPSHOT_VERSION; + /** Definition of the GLB_H_SHMEM arena tlv structures */ typedef enum { @@ -1400,6 +1431,152 @@ typedef enum { #define MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_GET_ADRESS(mgmt_rx_reo_snapshot) \ (&mgmt_rx_reo_snapshot->mgmt_rx_reo_snapshot_low) +/** + * Helper macros/functions for params GET/SET of different hw version + * of the mgmt_rx_reo_snapshot + */ + +static INLINE A_UINT8 +MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_VALID_GET( + A_UINT32 mgmt_rx_reo_snapshot_low, A_UINT8 snapshot_ver) +{ + if ((snapshot_ver != MGMT_RX_REO_SNAPSHOT_VERSION_TIMESTAMP_REDUNDANCY) && + (snapshot_ver != MGMT_RX_REO_SNAPSHOT_VERSION_PKT_CTR_REDUNDANCY)) + { + A_ASSERT(0); + } + + return MLO_SHMEM_GET_BITS(mgmt_rx_reo_snapshot_low, 31, 1); +} + +static INLINE void +MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_VALID_SET( + A_UINT32 *mgmt_rx_reo_snapshot_low, A_UINT8 value, A_UINT8 snapshot_ver) +{ + if ((snapshot_ver != MGMT_RX_REO_SNAPSHOT_VERSION_TIMESTAMP_REDUNDANCY) && + (snapshot_ver != MGMT_RX_REO_SNAPSHOT_VERSION_PKT_CTR_REDUNDANCY)) { + A_ASSERT(0); + } + + MLO_SHMEM_SET_BITS(*mgmt_rx_reo_snapshot_low, 31, 1, value); +} + +static INLINE A_UINT16 +MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_MGMT_PKT_CTR_GET( + A_UINT32 mgmt_rx_reo_snapshot_low, A_UINT8 snapshot_ver) +{ + if (snapshot_ver == MGMT_RX_REO_SNAPSHOT_VERSION_TIMESTAMP_REDUNDANCY) { + return MLO_SHMEM_GET_BITS(mgmt_rx_reo_snapshot_low, 0, 16); + } else if (snapshot_ver == MGMT_RX_REO_SNAPSHOT_VERSION_PKT_CTR_REDUNDANCY){ + return MLO_SHMEM_GET_BITS(mgmt_rx_reo_snapshot_low, 15, 16); + } else { + A_ASSERT(0); + return 0; + } +} + +static INLINE void +MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_MGMT_PKT_CTR_SET( + A_UINT32 *mgmt_rx_reo_snapshot_low, A_UINT16 value, A_UINT8 snapshot_ver) +{ + if (snapshot_ver == MGMT_RX_REO_SNAPSHOT_VERSION_TIMESTAMP_REDUNDANCY) { + MLO_SHMEM_SET_BITS(*mgmt_rx_reo_snapshot_low, 0, 16, value); + } else if (snapshot_ver == MGMT_RX_REO_SNAPSHOT_VERSION_PKT_CTR_REDUNDANCY){ + MLO_SHMEM_SET_BITS(*mgmt_rx_reo_snapshot_low, 15, 16, value); + } else { + A_ASSERT(0); + } +} + +#define MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_MGMT_PKT_CTR_REDUNDANT_GET( \ + mgmt_rx_reo_snapshot_high) \ + MLO_SHMEM_GET_BITS(mgmt_rx_reo_snapshot_high, 0, 15) +#define MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_MGMT_PKT_CTR_REDUNDANT_SET( \ + mgmt_rx_reo_snapshot_high, value) \ + MLO_SHMEM_SET_BITS(mgmt_rx_reo_snapshot_high, 0, 15, value) + +#define MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_GLOBAL_TIMESTAMP_REDUNDANT_GET( \ + mgmt_rx_reo_snapshot_low) \ + MLO_SHMEM_GET_BITS(mgmt_rx_reo_snapshot_low, 16, 15) +#define MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_GLOBAL_TIMESTAMP_REDUNDANT_SET( \ + mgmt_rx_reo_snapshot_low, value) \ + MLO_SHMEM_SET_BITS(mgmt_rx_reo_snapshot_low, 16, 15, value) + +static INLINE A_UINT32 +MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_GLOBAL_TIMESTAMP_GET( + A_UINT32 mgmt_rx_reo_snapshot_low, + A_UINT32 mgmt_rx_reo_snapshot_high, + A_UINT8 snapshot_ver) +{ + if (snapshot_ver == MGMT_RX_REO_SNAPSHOT_VERSION_TIMESTAMP_REDUNDANCY) { + return mgmt_rx_reo_snapshot_high; + } else if (snapshot_ver == MGMT_RX_REO_SNAPSHOT_VERSION_PKT_CTR_REDUNDANCY){ + return + ((MLO_SHMEM_GET_BITS(mgmt_rx_reo_snapshot_high, 15, 17) << 15) | + MLO_SHMEM_GET_BITS(mgmt_rx_reo_snapshot_low, 0, 15)); + } else { + A_ASSERT(0); + return 0; + } +} + +static INLINE void +MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_GLOBAL_TIMESTAMP_SET( + A_UINT32 *mgmt_rx_reo_snapshot_low, + A_UINT32 *mgmt_rx_reo_snapshot_high, + A_UINT32 value, + A_UINT8 snapshot_ver) +{ + if (snapshot_ver == MGMT_RX_REO_SNAPSHOT_VERSION_TIMESTAMP_REDUNDANCY) { + *mgmt_rx_reo_snapshot_high = value; + } else if (snapshot_ver == MGMT_RX_REO_SNAPSHOT_VERSION_PKT_CTR_REDUNDANCY){ + MLO_SHMEM_SET_BITS( + *mgmt_rx_reo_snapshot_high, 15, 17, ((value) >> 15)); + MLO_SHMEM_SET_BITS( + *mgmt_rx_reo_snapshot_low, 0, 15, ((value) & 0x7fff)); + } else { + A_ASSERT(0); + } +} + +static INLINE A_BOOL +MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_CHECK_CONSISTENCY( + A_UINT32 mgmt_rx_reo_snapshot_low, + A_UINT32 mgmt_rx_reo_snapshot_high, + A_UINT8 snapshot_ver) +{ + if (snapshot_ver == MGMT_RX_REO_SNAPSHOT_VERSION_TIMESTAMP_REDUNDANCY) { + A_UINT32 global_timestamp; + A_UINT32 global_timestamp_redundant; + + global_timestamp = MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_GLOBAL_TIMESTAMP_GET( + mgmt_rx_reo_snapshot_low, mgmt_rx_reo_snapshot_high, snapshot_ver); + global_timestamp_redundant = + MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_GLOBAL_TIMESTAMP_REDUNDANT_GET( + mgmt_rx_reo_snapshot_low); + + return + (MLO_SHMEM_GET_BITS(global_timestamp, 0, 15) == + MLO_SHMEM_GET_BITS(global_timestamp_redundant, 0, 15)); + } else if (snapshot_ver == MGMT_RX_REO_SNAPSHOT_VERSION_PKT_CTR_REDUNDANCY){ + A_UINT16 mgmt_pkt_ctr; + A_UINT16 mgmt_pkt_ctr_redundant; + + mgmt_pkt_ctr = MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_MGMT_PKT_CTR_GET( + mgmt_rx_reo_snapshot_low, snapshot_ver); + mgmt_pkt_ctr_redundant = + MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_MGMT_PKT_CTR_REDUNDANT_GET( + mgmt_rx_reo_snapshot_high); + + return + (MLO_SHMEM_GET_BITS(mgmt_pkt_ctr, 0, 15) == + MLO_SHMEM_GET_BITS(mgmt_pkt_ctr_redundant, 0, 15)); + } else { + A_ASSERT(0); + return 0; + } +} + /* REO snapshot structure */ typedef struct { /* TLV tag and len; tag equals MLO_SHMEM_TLV_STRUCT_MGMT_RX_REO_SNAPSHOT */ @@ -1452,6 +1629,15 @@ A_COMPILE_TIME_ASSERT(verify_mlo_glb_rx_reo_per_link_snapshot_fw_consumed_offset #define MLO_SHMEM_GLB_RX_REO_SNAPSHOT_PARAM_VALID_LINK_BMAP_GET(link_info) MLO_SHMEM_GET_BITS(link_info, 4, 16) #define MLO_SHMEM_GLB_RX_REO_SNAPSHOT_PARAM_VALID_LINK_BMAP_SET(link_info, value) MLO_SHMEM_SET_BITS(link_info, 4, 16, value) +#define MLO_SHMEM_GLB_RX_REO_SNAPSHOT_PARAM_HW_FWD_SNAPSHOT_VER_GET(snapshot_ver_info) MLO_SHMEM_GET_BITS(snapshot_ver_info, 0, 3) +#define MLO_SHMEM_GLB_RX_REO_SNAPSHOT_PARAM_HW_FWD_SNAPSHOT_VER_SET(snapshot_ver_info, value) MLO_SHMEM_SET_BITS(snapshot_ver_info, 0, 3, value) + +#define MLO_SHMEM_GLB_RX_REO_SNAPSHOT_PARAM_FW_FWD_SNAPSHOT_VER_GET(snapshot_ver_info) MLO_SHMEM_GET_BITS(snapshot_ver_info, 3, 3) +#define MLO_SHMEM_GLB_RX_REO_SNAPSHOT_PARAM_FW_FWD_SNAPSHOT_VER_SET(snapshot_ver_info, value) MLO_SHMEM_SET_BITS(snapshot_ver_info, 3, 3, value) + +#define MLO_SHMEM_GLB_RX_REO_SNAPSHOT_PARAM_FW_CONSUMED_SNAPSHOT_VER_GET(snapshot_ver_info) MLO_SHMEM_GET_BITS(snapshot_ver_info, 6, 3) +#define MLO_SHMEM_GLB_RX_REO_SNAPSHOT_PARAM_FW_CONSUMED_SNAPSHOT_VER_SET(snapshot_ver_info, value) MLO_SHMEM_SET_BITS(snapshot_ver_info, 6, 3, value) + /* Definition of the complete REO snapshot info */ typedef struct { /* TLV tag and len; tag equals MLO_SHMEM_TLV_STRUCT_MLO_GLB_RX_REO_SNAPSHOT_INFO */ @@ -1465,6 +1651,18 @@ typedef struct { * [31:20]: reserved */ A_UINT32 link_info; + + /** + * snapshot_ver_info + * + * [2:0]: hw_forwarded snapshot version + * [5:3]: fw_forwarded snapshot version + * [8:6]: fw_consumed snapshot version + * [31:9]: reserved + */ + A_UINT32 snapshot_ver_info; + A_UINT32 reserved_alignment_padding; + /* This TLV is followed by array of mlo_glb_rx_reo_per_link_snapshot_info: * mlo_glb_rx_reo_per_link_snapshot_info will have multiple instances * equal to num of hw links received by no_of_link diff --git a/drivers/staging/fw-api/fw/wmi_services.h b/drivers/staging/fw-api/fw/wmi_services.h index 56afaa5d8e3b..89a217faf3f8 100644 --- a/drivers/staging/fw-api/fw/wmi_services.h +++ b/drivers/staging/fw-api/fw/wmi_services.h @@ -581,6 +581,12 @@ typedef enum { WMI_SERVICE_DELETE_ALL_PEER_BITMAP_SUPPORT = 328, /* target supports cmd to delete all specific peer type within a vdev */ WMI_SERVICE_PN_REPLAY_CHECK_SUPPORT = 329, /* FW support to check RX mgmt frames has invalid PN in packets */ WMI_SERVICE_COMBINED_SET_PARAM_SUPPORT = 330, /* FW Supporting set param cmd combined for multiple params */ + WMI_SERVICE_PDEV_RSSI_DBM_CONV_EVENT_SUPPORT = 331, /* FW supports advertising RSSI dB to dBm conversion params to host via WMI_PDEV_RSSI_DBM_CONVERSION_PARAMS_INFO_EVENTID */ + WMI_SERVICE_PDEV_TELEMETRY_STATS_SUPPORT = 332, + WMI_SERVICE_ROAM_STAT_PER_CANDIDATE_FRAME_INFO_SUPPORT = 333, /* FW supports to send frame info for each candidate in roam stat */ + WMI_SERVICE_HW_TX_POWER_CAPS_SIGNED_SUPPORT = 334, /* Indicates FW supports updating of Tx power capabilities as signed value */ + WMI_SERVICE_MULTI_CLIENT_LL_SUPPORT = 335, /* FW supports set param cmd combined for multiple params */ + WMI_SERVICE_AFC_PAYLOAD_CLEAR_SUPPORT = 336, /* FW supports clearing the AFC response payload in proxy mode */ WMI_MAX_EXT2_SERVICE diff --git a/drivers/staging/fw-api/fw/wmi_tlv_defs.h b/drivers/staging/fw-api/fw/wmi_tlv_defs.h index 2417a02a341e..acabf2831a55 100644 --- a/drivers/staging/fw-api/fw/wmi_tlv_defs.h +++ b/drivers/staging/fw-api/fw/wmi_tlv_defs.h @@ -201,6 +201,7 @@ typedef enum { WMITLV_TAG_ARRAY_STRUC, WMITLV_TAG_ARRAY_FIXED_STRUC, WMITLV_TAG_ARRAY_INT16, + WMITLV_TAG_ARRAY_INT32, WMITLV_TAG_LAST_ARRAY_ENUM = 31, /* Last entry of ARRAY type tags */ WMITLV_TAG_STRUC_wmi_service_ready_event_fixed_param, WMITLV_TAG_STRUC_HAL_REG_CAPABILITIES, @@ -1254,6 +1255,19 @@ typedef enum { WMITLV_TAG_STRUC_wmi_vdev_pn_mgmt_rx_filter_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_set_multiple_pdev_vdev_param_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_set_param_info, + WMITLV_TAG_STRUC_wmi_pmm_scratch_reg_allocation_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_pmm_scratch_reg_info, + WMITLV_TAG_STRUC_wmi_pmm_available_scratch_reg_event_fixed_param, + WMITLV_TAG_STRUC_wmi_pmm_available_scratch_reg_info, + WMITLV_TAG_STRUC_wmi_pmm_scratch_reg_allocation_complete_event_fixed_param, + WMITLV_TAG_STRUC_wmi_bcn_tmpl_ml_info, + WMITLV_TAG_STRUC_wmi_peer_tx_filter_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_pdev_telemetry_stats, + WMITLV_TAG_STRUC_wmi_mgmt_ml_info, + WMITLV_TAG_STRUC_wmi_vdev_latency_event_fixed_param, + WMITLV_TAG_STRUC_wmi_tid_to_link_map, + WMITLV_TAG_STRUC_wmi_peer_tid_to_link_map_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_assoc_tid_to_link_map, } WMITLV_TAG_ID; /* @@ -1745,6 +1759,9 @@ typedef enum { OP(WMI_PEER_RX_PN_REQUEST_CMDID) \ OP(WMI_VDEV_PN_MGMT_RX_FILTER_CMDID) \ OP(WMI_SET_MULTIPLE_PDEV_VDEV_PARAM_CMDID) \ + OP(WMI_PMM_SCRATCH_REG_ALLOCATION_CMDID) \ + OP(WMI_PEER_TX_FILTER_CMDID) \ + OP(WMI_MLO_PEER_TID_TO_LINK_MAP_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -2028,6 +2045,9 @@ typedef enum { OP(WMI_RTT_PASN_PEER_DELETE_EVENTID) \ OP(WMI_PDEV_RSSI_DBM_CONVERSION_PARAMS_INFO_EVENTID) \ OP(WMI_PEER_RX_PN_RESPONSE_EVENTID) \ + OP(WMI_PMM_AVAILABLE_SCRATCH_REG_EVENTID) \ + OP(WMI_PMM_SCRATCH_REG_ALLOCATION_COMPLETE_EVENTID) \ + OP(WMI_VDEV_LATENCY_LEVEL_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -2469,7 +2489,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PRB_TMPL_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_bcn_tmpl_cmd_fixed_param, wmi_bcn_tmpl_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_bcn_prb_info, wmi_bcn_prb_info, bcn_prb_info, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, bufp, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_bcn_tmpl_ml_params, ml_bcn_param, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_bcn_tmpl_ml_params, ml_bcn_param, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_bcn_tmpl_ml_info, ml_bcn_info, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_BCN_TMPL_CMDID); @@ -2513,7 +2534,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_IPSEC_NATKEEPALIVE_FILTER_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_he_rate_set, peer_he_rates, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mlo_params, mlo_params, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_eht_rate_set, peer_eht_rates, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mlo_partner_link_params, partner_link_params, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mlo_partner_link_params, partner_link_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_tid_to_link_map, peer_tid_to_link_map, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ASSOC_CMDID); @@ -4203,6 +4225,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_SET_DSCP_TID_MAP_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_filter_nrp_config_cmd_fixed_param, wmi_vdev_filter_nrp_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_FILTER_NEIGHBOR_RX_PACKETS_CMDID); +/* Configure filter for Mac addr based filtering*/ +#define WMITLV_TABLE_WMI_PEER_TX_FILTER_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_tx_filter_cmd_fixed_param, wmi_peer_tx_filter_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_PEER_TX_FILTER_CMDID); + /* Configure filter for PN Rx Pkt indication which pkts need to be forwarded to host */ #define WMITLV_TABLE_WMI_VDEV_PN_MGMT_RX_FILTER_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_pn_mgmt_rx_filter_cmd_fixed_param, wmi_vdev_pn_mgmt_rx_filter_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -4882,6 +4909,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_MLO_READY_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mlo_teardown_fixed_param, wmi_mlo_teardown_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_MLO_TEARDOWN_CMDID); +/** WMI cmd used to setup Tid to Link Mapping for a MLO Peer */ +#define WMITLV_TABLE_WMI_MLO_PEER_TID_TO_LINK_MAP_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_tid_to_link_map_fixed_param, wmi_peer_tid_to_link_map_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_tid_to_link_map, tid_to_link_map, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_MLO_PEER_TID_TO_LINK_MAP_CMDID); + /* Mcast ipv4 address filter list cmd */ #define WMITLV_TABLE_WMI_VDEV_IGMP_OFFLOAD_CMDID(id,op,buf,len) \ WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_igmp_offload_fixed_param, wmi_igmp_offload_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ @@ -4980,6 +5013,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_RTT_PASN_AUTH_STATUS_CMD); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_rtt_pasn_deauth_cmd_fixed_param, wmi_rtt_pasn_deauth_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_RTT_PASN_DEAUTH_CMD); +/* Allocate PMM scratch registers */ +#define WMITLV_TABLE_WMI_PMM_SCRATCH_REG_ALLOCATION_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pmm_scratch_reg_allocation_cmd_fixed_param, wmi_pmm_scratch_reg_allocation_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_pmm_scratch_reg_info, scratch_reg_info, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_PMM_SCRATCH_REG_ALLOCATION_CMDID); + /************************** TLV definitions of WMI events *******************************/ @@ -5033,7 +5072,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_SERVICE_READY_EXT_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_htt_msdu_idx_to_htt_msdu_qtype, htt_msdu_idx_to_qtype_map, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_dbs_or_sbs_cap_ext, dbs_or_sbs_cap_ext, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_cust_bdf_version_capabilities, cust_bdf_version_capabilities, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_sw_cal_ver_cap, sw_cal_ver_cap, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_sw_cal_ver_cap, sw_cal_ver_cap, WMITLV_SIZE_VAR) \ + WMITLV_FXAR(id,op,buf,len, WMITLV_TAG_ARRAY_INT32, A_INT32, hw_tx_power_signed, WMITLV_SIZE_FIX, WMI_HW_TX_POWER_CAPS_MAX) WMITLV_CREATE_PARAM_STRUC(WMI_SERVICE_READY_EXT2_EVENTID); #define WMITLV_TABLE_WMI_SPECTRAL_CAPABILITIES_EVENTID(id,op,buf,len) \ @@ -5243,7 +5283,9 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_STA_KICKOUT_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_rssi_ctl_ext, rssi_ctl_ext, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mgmt_rx_reo_params, wmi_mgmt_rx_reo_params, reo_params, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mgmt_rx_params_ext, mgmt_rx_params_ext, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_frame_pn_params, pn_params, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_frame_pn_params, pn_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mgmt_ml_info, ml_info, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, bpcc_bufp, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_MGMT_RX_EVENTID); /* Management Rx FW Consumed Event */ @@ -5535,7 +5577,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_HOST_SWFDA_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_extd2_stats, peer_extd2_stats, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_pmf_bcn_protect_stats, pmf_bcn_protect_stats, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_extd_stats, vdev_extd_stats, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_pdev_extd_stats, pdev_extd_stats, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_pdev_extd_stats, pdev_extd_stats, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_pdev_telemetry_stats, pdev_telemetry_stats, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_UPDATE_STATS_EVENTID); /* Update PN response Event */ @@ -6651,6 +6694,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_GET_TPC_STATS_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_bcn_latency_fixed_param, wmi_vdev_bcn_latency_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_BCN_LATENCY_EVENTID); +/* Latency Level Event */ +#define WMITLV_TABLE_WMI_VDEV_LATENCY_LEVEL_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_latency_event_fixed_param, wmi_vdev_latency_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_LATENCY_LEVEL_EVENTID); + /* TWT Stats session event */ #define WMITLV_TABLE_WMI_TWT_SESSION_STATS_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_twt_session_stats_event_fixed_param, wmi_pdev_twt_session_stats_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ @@ -6737,6 +6785,17 @@ WMITLV_CREATE_PARAM_STRUC(WMI_RTT_PASN_PEER_CREATE_REQ_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_rtt_pasn_peer_delete_param, rtt_pasn_peer_param, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_RTT_PASN_PEER_DELETE_EVENTID); +/* Available PMM scratch registers event */ +#define WMITLV_TABLE_WMI_PMM_AVAILABLE_SCRATCH_REG_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pmm_available_scratch_reg_event_fixed_param, wmi_pmm_available_scratch_reg_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_pmm_available_scratch_reg_info, pmm_available_scratch_reg_info, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_PMM_AVAILABLE_SCRATCH_REG_EVENTID); + +/* Allocate PMM scratch registers event */ +#define WMITLV_TABLE_WMI_PMM_SCRATCH_REG_ALLOCATION_COMPLETE_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pmm_scratch_reg_allocation_complete_event_fixed_param, wmi_pmm_scratch_reg_allocation_complete_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_PMM_SCRATCH_REG_ALLOCATION_COMPLETE_EVENTID); + #ifdef __cplusplus } diff --git a/drivers/staging/fw-api/fw/wmi_unified.h b/drivers/staging/fw-api/fw/wmi_unified.h index f1a8aa93841c..10728000b880 100644 --- a/drivers/staging/fw-api/fw/wmi_unified.h +++ b/drivers/staging/fw-api/fw/wmi_unified.h @@ -703,6 +703,8 @@ typedef enum { WMI_PEER_RX_PN_REQUEST_CMDID, + /* Mac addr based filtering*/ + WMI_PEER_TX_FILTER_CMDID, /* beacon/management specific commands */ @@ -1146,6 +1148,9 @@ typedef enum { */ WMI_SET_MULTIPLE_PDEV_VDEV_PARAM_CMDID, + /* WMI cmd used to allocate HW scratch registers */ + WMI_PMM_SCRATCH_REG_ALLOCATION_CMDID, + /* Offload 11k related requests */ WMI_11K_OFFLOAD_REPORT_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_11K_OFFLOAD), /* invoke neighbor report from FW */ @@ -1455,6 +1460,8 @@ typedef enum { WMI_MLO_READY_CMDID, /** WMI cmd used for tearing down a hw_link part of MLO */ WMI_MLO_TEARDOWN_CMDID, + /** WMI cmd used to setup Tid to Link Mapping for a MLO Peer */ + WMI_MLO_PEER_TID_TO_LINK_MAP_CMDID, /** WMI commands specific to Service Aware WiFi (SAWF) */ /** configure or reconfigure the parameters for a service class */ @@ -1612,7 +1619,7 @@ typedef enum { WMI_PDEV_PKTLOG_DECODE_INFO_EVENTID, /** - * RSSI dB to dDm conversion params info event + * RSSI dB to dBm conversion params info event * sent to host after channel/bw/chainmask change per pdev. */ WMI_PDEV_RSSI_DBM_CONVERSION_PARAMS_INFO_EVENTID, @@ -1690,6 +1697,8 @@ typedef enum { WMI_VDEV_SMART_MONITOR_EVENTID, /** Send status of vdev mac address update request to host */ WMI_VDEV_UPDATE_MAC_ADDR_CONF_EVENTID, + /** event to report latency level honored by FW */ + WMI_VDEV_LATENCY_LEVEL_EVENTID, /* peer specific events */ /** FW reauet to kick out the station for reasons like inactivity,lack of response ..etc */ @@ -2061,6 +2070,12 @@ typedef enum { /** event to report ANI level of the channels */ WMI_GET_CHANNEL_ANI_EVENTID, + /* WMI event to available scratch registers */ + WMI_PMM_AVAILABLE_SCRATCH_REG_EVENTID, + + /* WMI event to scratch registers allocation */ + WMI_PMM_SCRATCH_REG_ALLOCATION_COMPLETE_EVENTID, + /* GPIO Event */ WMI_GPIO_INPUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_GPIO), /** upload H_CV info WMI event @@ -2807,6 +2822,16 @@ typedef enum { #define WMI_SET_PROJECT_ID(hw_bd_info, val) ((hw_bd_info)[PROJECT_ID] = (val)) #define WMI_SET_BOARD_DATA_REV(hw_bd_info, val) ((hw_bd_info)[BOARD_DATA_REV] = (val)) +/* + * Enum to indicate which Tx power capability is provided in which element of + * hw_tx_power_signed + */ +typedef enum { + WMI_HW_MIN_TX_POWER_SIGNED = 0, + WMI_HW_MAX_TX_POWER_SIGNED = 1, + WMI_HW_TX_POWER_CAPS_MAX, +} wmi_hw_tx_power_caps; + /** * The following struct holds optional payload for * wmi_service_ready_event_fixed_param,e.g., 11ac pass some of the @@ -3122,6 +3147,12 @@ typedef struct { A_UINT32 index_and_type; } wmi_htt_msdu_idx_to_htt_msdu_qtype; +typedef enum { + WMI_AFC_FEATURE_6G_DEPLOYMENT_UNSPECIFIED = 0, + WMI_AFC_FEATURE_6G_DEPLOYMENT_INDOOR_ONLY = 1, + WMI_AFC_FEATURE_6G_DEPLOYMENT_OUTDOOR_ONLY = 2, +} WMI_AFC_FEATURE_6G_DEPLOYMENT_TYPE; + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_service_ready_ext2_event_fixed_param.*/ @@ -3229,6 +3260,12 @@ typedef struct { */ A_UINT32 default_num_msduq_supported_per_tid; + /* + * Indoor/Outdoor specification for AFC support - + * refer to WMI_AFC_FEATURE_6G_DEPLOYMENT_TYPE enum + */ + A_UINT32 afc_deployment_type; + /* Followed by next TLVs: * WMI_DMA_RING_CAPABILITIES dma_ring_caps[]; * wmi_spectral_bin_scaling_params wmi_bin_scaling_params[]; @@ -3238,6 +3275,7 @@ typedef struct { * WMI_SCAN_RADIO_CAPABILITIES_EXT2 wmi_scan_radio_caps[]; * wmi_htt_msdu_idx_to_htt_msdu_qtype htt_msdu_idx_to_qtype_map[]; * wmi_dbs_or_sbs_cap_ext dbs_or_sbs_cap_ext; + * A_INT32 hw_tx_power_signed[WMI_HW_TX_POWER_CAPS_MAX]; */ } wmi_service_ready_ext2_event_fixed_param; @@ -3416,6 +3454,9 @@ typedef struct { */ A_UINT32 num_of_linkview_peers; + /* Total number of "real" max_active_vdevs that FW supports. */ + A_UINT32 num_max_active_vdevs; + /* * This fixed_param TLV is followed by these additional TLVs: * mac_addr_list[num_extra_mac_addr]; @@ -4192,7 +4233,27 @@ typedef struct { * Refer to the below definitions of the * WMI_RSRC_CFG_HOST_SERVICE_FLAG_REG_DISCARD_REQ_ID_CHECK_GET * and _SET macros. - * Bits 31:10 - Reserved + * Bit 10 + * This bit will be set when host wants to enable indoor for AFC + * when this bit is set to 0 indoor mode not enabled + * when this bit is set to 1 indoor mode is enabled + * WMI_RSRC_CFG_HOST_SERVICE_FLAG_AFC_INDOOR_SUPPORT_CHECK_GET + * and SET macros + * Bit 11 + * This bit will be set when host wants to enable outdoor for AFC + * when this bit is set to 0 outdoor mode not enabled + * when this bit is set to 1 outdoor mode is enabled + * WMI_RSRC_CFG_HOST_SERVICE_FLAG_AFC_OUTDOOR_SUPPORT_CHECK_GET + * and SET macros. + * Bit 12 + * This bit will be set when host host wants to enable/disable + * REO QREF feature + * when set to 1 - Enable the REO QREF feature + * when set to 0 - Disable the REO QREF feature + * Refer to the below definitions of the + * WMI_RSRC_CFG_HOST_SERVICE_FLAG_REO_QREF_FEATURE_SUPPORT_GET + * and _SET macros. + * Bits 31:13 - Reserved */ A_UINT32 host_service_flags; @@ -4277,6 +4338,12 @@ typedef struct { * LinkView peer in the target. */ A_UINT32 num_of_linkview_msduqs_per_tid; + + /** + * @brief num_max_active_vdevs - + * number of max active virtual devices (VAPs) to support + */ + A_UINT32 num_max_active_vdevs; } wmi_resource_config; #define WMI_MSDU_FLOW_AST_ENABLE_GET(msdu_flow_config0, ast_x) \ @@ -4571,6 +4638,21 @@ typedef struct { #define WMI_RSRC_CFG_HOST_SERVICE_FLAG_REG_DISCARD_AFC_REQ_ID_CHECK_SET(host_service_flags, val) \ WMI_SET_BITS(host_service_flags, 9, 1, val) +#define WMI_RSRC_CFG_HOST_SERVICE_FLAG_AFC_INDOOR_SUPPORT_CHECK_GET(host_service_flags) \ + WMI_GET_BITS(host_service_flags, 10, 1) +#define WMI_RSRC_CFG_HOST_SERVICE_FLAG_AFC_INDOOR_SUPPORT_CHECK_SET(host_service_flags, val) \ + WMI_SET_BITS(host_service_flags, 10, 1, val) + +#define WMI_RSRC_CFG_HOST_SERVICE_FLAG_AFC_OUTDOOR_SUPPORT_CHECK_GET(host_service_flags) \ + WMI_GET_BITS(host_service_flags, 11, 1) +#define WMI_RSRC_CFG_HOST_SERVICE_FLAG_AFC_OUTDOOR_SUPPORT_CHECK_SET(host_service_flags, val) \ + WMI_SET_BITS(host_service_flags, 11, 1, val) + +#define WMI_RSRC_CFG_HOST_SERVICE_FLAG_REO_QREF_FEATURE_SUPPORT_GET(host_service_flags) \ + WMI_GET_BITS(host_service_flags, 12, 1) +#define WMI_RSRC_CFG_HOST_SERVICE_FLAG_REO_QREF_FEATURE_SUPPORT_SET(host_service_flags, val) \ + WMI_SET_BITS(host_service_flags, 12, 1, val) + #define WMI_RSRC_CFG_CARRIER_CFG_CHARTER_ENABLE_GET(carrier_config) \ WMI_GET_BITS(carrier_config, 0, 1) #define WMI_RSRC_CFG_CARRIER_CFG_CHARTER_ENABLE_SET(carrier_config, val) \ @@ -5546,6 +5628,8 @@ typedef struct { * [31:16]: mgmt_pkt_ctr, Sequence number of the last fw consumed mgmt frame */ A_UINT32 mgmt_pkt_ctr_info; + A_UINT32 rx_ppdu_duration_us; /* receive duration in us */ + A_UINT32 mpdu_end_timestamp; /* mpdu end timestamp in us (based on HWMLO timer) */ } wmi_mgmt_rx_fw_consumed_hdr; /** Helper macro for param GET/SET of mgmt_rx_reo_params */ @@ -5575,6 +5659,8 @@ typedef struct { */ A_UINT32 mgmt_pkt_ctr_link_info; + A_UINT32 rx_ppdu_duration_us; /* receive duration in us */ + A_UINT32 mpdu_end_timestamp; /* mpdu end timestamp in us (based on HWMLO timer) */ } wmi_mgmt_rx_reo_params; /** Helper macro for param GET/SET */ @@ -5702,6 +5788,41 @@ typedef struct { A_UINT8 prev_pn[WMI_MAX_PN_LEN]; } wmi_frame_pn_params; +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_mgmt_ml_info */ + /** + * CU vdev map to initmate about the on-going Critical update + * per-link contains 16 VAPs at max. + */ + + /* + * bits : 0-15 | 16-31 + * link-id : 0 | 1 + */ + A_UINT32 cu_vdev_map_1; + /* + * bits : 0-15 | 16-31 + * link-id : 2 | 3 + */ + A_UINT32 cu_vdev_map_2; + /* + * bits : 0-15 | 16-31 + * link-id : 4 | 5 + */ + A_UINT32 cu_vdev_map_3; + /* + * bits : 0-15 | 16-31 + * link-id : 6 | 7 + */ + A_UINT32 cu_vdev_map_4; /* bits 63:32 */ + /** + * This is followed by byte array that contains BPCC value per MLO VAP. + * There will be 16 byte entries for each link corresponding to VAP-ID. + * So number of byte entries will be (num of max links supported by AP * 16) + * Note: num of max links supported = 8 + */ +} wmi_mgmt_ml_info; + typedef enum { PKT_CAPTURE_MODE_DISABLE = 0, PKT_CAPTURE_MODE_MGMT_ONLY, @@ -6519,8 +6640,22 @@ typedef struct { A_UINT32 bssid_idx; } wmi_vdev_filter_nrp_config_cmd_fixed_param; /* Filter for Neighbor Rx Packets */ +/* tx peer filter action - Filter Tx Packets - add/remove filter */ +enum { + WMI_PEER_TX_FILTER_ACTION_ADD = 1, + WMI_PEER_TX_FILTER_ACTION_REMOVE = 2, +}; -/*Command to set/unset chip in quiet mode*/ +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_tx_filter_cmd_fixed_param */ + A_UINT32 vdev_id; + /* Client MAC addr */ + wmi_mac_addr addr; + /* Add/Remove monitor_sta Filter */ + A_UINT32 action; /* WMI_PEER_TX_FILTER_ACTION enum */ +} wmi_peer_tx_filter_cmd_fixed_param; /* Filter for TX Packets */ + +/* Command to set/unset chip in quiet mode */ typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_set_quiet_cmd_fixed_param */ A_UINT32 pdev_id; /** pdev_id for identifying the MAC, See macros starting with WMI_PDEV_ID_ for values. */ @@ -9187,6 +9322,7 @@ typedef enum { WMI_REQUEST_PMF_BCN_PROTECT_STAT = 0x08000, WMI_REQUEST_VDEV_EXTD_STAT = 0x10000, WMI_REQUEST_PDEV_EXTD_STAT = 0x20000, + WMI_REQUEST_PDEV_TELEMETRY_STAT = 0x40000, } wmi_stats_id; /* @@ -9651,7 +9787,6 @@ typedef struct { * This TLV is followed by another TLV of array of bytes * num_channels * size of(struct wmi_channel_stats) */ - } wmi_radio_link_stats_event_fixed_param; /* per rate statistics */ @@ -10065,6 +10200,10 @@ typedef struct { * wmi_pdev_extd_stats wmi_pdev_extd_stats[] * follows the other TLVs */ +/* If WMI_REQUEST_PDEV_TELEMETRY_STAT is set in stats_id, then TLV + * wmi_pdev_telemetry_stats wmi_pdev_telemetry_stats[] + * follows the other TLVs + */ } wmi_stats_event_fixed_param; /* WLAN channel CCA stats bitmap */ @@ -11323,6 +11462,10 @@ typedef struct { * Indoor = 1, Outdoor = 2 */ A_UINT32 deployment_mode; + /* + * Proxy mode AFC-Response payload clear count + */ + A_UINT32 payload_clear_count; } wmi_ctrl_path_afc_stats_struct; typedef struct { @@ -11482,6 +11625,32 @@ typedef struct { A_UINT32 rx_other_11ax_msdu_cnt; } wmi_pdev_extd_stats; +/** + * pdev telemetry statistics + */ +typedef struct{ + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_telemetry_stats */ + A_UINT32 pdev_id; + /* + * Average channel latency per AC, units in micro seconds. + * avg_chan_lat_per_ac[0] : AC_VO + * avg_chan_lat_per_ac[1] : AC_VI + * avg_chan_lat_per_ac[2] : AC_BE + * avg_chan_lat_per_ac[3] : AC_BK + */ + A_UINT32 avg_chan_lat_per_ac[WMI_AC_MAX]; + /* + * Percentage of air time available for each AC, units in percentage. + * BIT[0-7] : AC_BE + * BIT[8-15] : AC_BK + * BIT[16-23] : AC_VI + * BIT[24-31] : AC_VO + * Please refer WMI_ESP_ESTIMATE_GET_* and WMI_ESP_ESTIMATE_SET_* macros + * to retrieve values for each access category in estimated_air_time_per_ac. + */ + A_UINT32 estimated_air_time_per_ac; +} wmi_pdev_telemetry_stats; + /** * VDEV statistics * @todo @@ -11837,7 +12006,9 @@ typedef struct { mlo_logical_link_index_valid:1, /* indicate if the logial link index in wmi_peer_assoc_mlo_params is valid */ mlo_peer_id_valid:1, /* indicate if the mlo peer id in wmi_peer_assoc_mlo_params is valid */ mlo_mcast_vdev:1, /* indicate this is the MLO mcast primary vdev */ - unused: 26; + emlsr_support:1, /* indicate that eMLSR is supported */ + mlo_force_link_inactive:1, /* indicate this link is forced inactive */ + unused: 24; }; A_UINT32 mlo_flags; }; @@ -13824,6 +13995,43 @@ typedef enum { */ WMI_VDEV_PARAM_11AZ_SECURITY_CONFIG, /* 0xAB */ + /* + * Latency Level Flags + */ + WMI_VDEV_PARAM_NORMAL_LATENCY_FLAGS_CONFIGURATION, /* 0xAC */ + WMI_VDEV_PARAM_XR_LATENCY_FLAGS_CONFIGURATION, /* 0xAD */ + WMI_VDEV_PARAM_LOW_LATENCY_FLAGS_CONFIGURATION, /* 0xAE */ + WMI_VDEV_PARAM_ULTRA_LOW_LATENCY_FLAGS_CONFIGURATION, /* 0xAF */ + + /* + * Latency level UL/DL + * 0-15 bits: UL + * 16-31 bits: DL + */ + WMI_VDEV_PARAM_NORMAL_LATENCY_UL_DL_CONFIGURATION, /* 0xB0 */ + WMI_VDEV_PARAM_XR_LATENCY_UL_DL_CONFIGURATION, /* 0xB1 */ + WMI_VDEV_PARAM_LOW_LATENCY_UL_DL_CONFIGURATION, /* 0xB2 */ + WMI_VDEV_PARAM_ULTRA_LOW_LATENCY_UL_DL_CONFIGURATION, /* 0xB3 */ + /* + * Ini to + * Configure default latency level for all clients + */ + WMI_VDEV_PARAM_DEFAULT_LATENCY_LEVEL_CONFIGURATION, /* 0xB4 */ + + /* + * Ini to + * Configure multi client Low latency Feature + */ + WMI_VDEV_PARAM_MULTI_CLIENT_LL_FEATURE_CONFIGURATION, /* 0xB5 */ + + /* + * traffic config for per vdev + * bit 0: low latency vdev + * bit 1: high tput vdev + * bit 31:2 Reserved + */ + WMI_VDEV_PARAM_VDEV_TRAFFIC_CONFIG, /* 0xB6 */ + /*=== ADD NEW VDEV PARAM TYPES ABOVE THIS LINE === * The below vdev param types are used for prototyping, and are @@ -14409,6 +14617,26 @@ typedef struct { #define WMI_BEACON_TMPLT_GET_LAST_TEMPLATE(_ema_param) \ WMI_GET_BITS(_ema_param, WMI_BEACON_TMPLT_LAST_TEMPLATE_BITPOS, 8) +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_bcn_tmpl_ml_info */ + /** hw_link_id: + * Unique link id across SOCs, got as part of QMI handshake + */ + A_UINT32 hw_link_id; + /** + * CU vdev map for the Critical update category-1 + * (Inclusion of CU IES) + */ + A_UINT32 cu_vdev_map_cat1_lo; /* bits 31:0 */ + A_UINT32 cu_vdev_map_cat1_hi; /* bits 63:32 */ + /** + * CU vdev map for the Critical update category-2 + * (modification of CU IES) + */ + A_UINT32 cu_vdev_map_cat2_lo; /* bits 31:0 */ + A_UINT32 cu_vdev_map_cat2_hi; /* bits 63:32 */ +} wmi_bcn_tmpl_ml_info; + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_bcn_tmpl_ml_params */ A_UINT32 vdev_id; /* partner vdev_id */ @@ -15935,6 +16163,7 @@ typedef struct { #define WMI_PEER_EXT_EHT 0x00000001 /* EHT enabled */ #define WMI_PEER_EXT_320MHZ 0x00000002 /* 320Mhz enabled */ #define WMI_PEER_EXT_DMS_CAPABLE 0x00000004 +#define WMI_PEER_EXT_HE_CAPS_6GHZ_VALID 0x00000008 /* param he_caps_6ghz is valid or not */ #define WMI_PEER_EXT_F_CRIT_PROTO_HINT_ENABLED 0x40000000 /** @@ -16011,8 +16240,37 @@ typedef struct { * In MCL systems, mld_peer_id will be set to invalid peer id. */ A_UINT32 mld_peer_id; + /** Link-ID of the AP to which STA is associated */ + A_UINT32 ieee_link_id; + /** eMLSR transition timeout in microseconds */ + A_UINT32 emlsr_trans_timeout_us; } wmi_peer_assoc_mlo_params; +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_assoc_tid_to_link_map */ + A_UINT32 tlv_header; + + /** + * A_UINT32 + * WMI_TID_TO_LINK_MAP_TID_NUM_GET / WMI_TID_TO_LINK_MAP_TID_NUM_SET + * tid_num:5, + * + * WMI_TID_TO_LINK_MAP_DIR_GET / WMI_TID_TO_LINK_MAP_DIR_SET + * dir:2, // 0 - DL, 1 - UL, 2 - BiDi + * + * WMI_TID_TO_LINK_MAP_DEFAULT_MAPPING_GET / + * WMI_TID_TO_LINK_MAP_DEFAULT_MAPPING_SET + * default_link_mapping:1, // If this is set to 1, ignore + * // link_mapping_mask for the specific tid + * + * WMI_TID_TO_LINK_MAP_LINK_MASK_GET / WMI_TID_TO_LINK_MAP_LINK_MASK_SET + * link_mapping_mask:16, + * + * rsvd:8; + */ + A_UINT32 tid_to_link_map_info; +} wmi_peer_assoc_tid_to_link_map; + typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_assoc_complete_cmd_fixed_param */ /** peer MAC address */ @@ -16154,6 +16412,7 @@ typedef struct { * For non-MLO peers the array length should be 0. * wmi_eht_rate_set_peer_eht_rates; <-- EHT capabilities of the peer * wmi_peer_assoc_mlo_partner_link_params link_info[] <-- partner link info + * wmi_peer_assoc_tid_to_link_map[] <-- tid to link_map info */ } wmi_peer_assoc_complete_cmd_fixed_param; @@ -16255,14 +16514,12 @@ typedef struct { * from dB to dBm units. */ -typedef struct{ +typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rssi_dbm_conversion_params_info */ /* Current operating bandwidth as per wmi_channel_width */ A_UINT32 curr_bw; /* Current rx chainmask */ A_UINT32 curr_rx_chainmask; - /* HW noise floor in dBm per chain, per 20MHz subband */ - A_INT32 nf_hw_dbm[MAX_ANTENNA_EIGHT][MAX_20MHZ_SEGMENTS]; /* 3 Bytes of xbar_config are used for RF to BB mapping*/ /* Samples of xbar_config, * If xbar_config is 0xFAC688(hex): @@ -16298,9 +16555,16 @@ typedef struct{ A_INT32 xlna_bypass_offset; /* Low noise amplifier bypass threshold; signed integer; units are in dB */ A_INT32 xlna_bypass_threshold; + /* nf_hw_dbm: + * 2D byte array of HW noise floor in dBm per chain, per 20MHz subband + * This array is filled in little endian format. + * for big-endian hosts, manual endian conversion is needed to obtain + * correct sequence of values. + */ + A_INT8 nf_hw_dbm[MAX_ANTENNA_EIGHT][MAX_20MHZ_SEGMENTS]; } wmi_rssi_dbm_conversion_params_info; -typedef struct{ +typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rssi_dbm_conversion_temp_offset_info */ /** * RSSI offset based on the current temperature, signed integer, @@ -16318,7 +16582,7 @@ typedef struct { A_UINT32 pdev_id; /** * Followed by these TLVs below. - * wmi_rssi_dbm_convresion_params_info rssi_dbm_conversion_param[0 or 1] + * wmi_rssi_dbm_conversion_params_info rssi_dbm_conversion_param[0 or 1] * wmi_rssi_dbm_conversion_params_info will be sent in case of * channel, BW, rx_chainmask change. * wmi_rssi_dbm_conversion_temp_offset_info rssi_temp_offset[0 or 1] @@ -17805,10 +18069,10 @@ typedef struct A_UINT32 is_add_ric; /**support add ric or delete ric*/ } wmi_ric_request_fixed_param; -/**tspec element: refer to 8.4.2.32 of 802.11 2012 spec +/** tspec element: refer to 8.4.2.32 of 802.11 2012 spec * these elements are used to construct tspec field in RIC request, which allow station to require specific TS when 11r roaming */ -typedef struct{ +typedef struct { A_UINT32 tlv_header; A_UINT32 ts_info; /** bits value of TS Info field.*/ A_UINT32 nominal_msdu_size; /**Nominal MSDU Size field*/ @@ -22430,7 +22694,7 @@ enum wmi_host_auto_shutdown_reason { }; /* WMI_HOST_AUTO_SHUTDOWN_EVENTID */ -typedef struct{ +typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_host_auto_shutdown_event_fixed_param */ A_UINT32 shutdown_reason; /* value: wmi_host_auto_shutdown_reason */ } wmi_host_auto_shutdown_event_fixed_param; @@ -22560,7 +22824,7 @@ typedef struct{ /** Bit map definition for basic_config_info ends */ -typedef struct{ +typedef struct { A_UINT32 tlv_header; /** Basic condition defined as bit map above, bitmap is chosen to save memory. * Bit0 ~ Bit4: tpc offset which will be adjusted if condtion matches, the unit is 0.5dB. bit4 indicates signed @@ -22607,7 +22871,7 @@ typedef struct{ #define WMI_TPC_CHAINMASK_CONFIG_DISABLE 0 /** control the off for the tpc & chainmask*/ #define WMI_TPC_CHAINMASK_CONFIG_ENABLE 1 /** control the on for the tpc & chainmask*/ -typedef struct{ +typedef struct { A_UINT32 tlv_header; A_UINT32 enable; /** enable to set tpc & chainmask when condtions meet, 0: disabled, 1: enabled. */ A_UINT32 num_tpc_chainmask_configs; @@ -24753,7 +25017,7 @@ typedef struct { } wmi_extscan_capabilities_event_fixed_param; /* WMI_D0_WOW_DISABLE_ACK_EVENTID */ -typedef struct{ +typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_d0_wow_disable_ack_event_fixed_param */ A_UINT32 reserved0; /* for future need */ } wmi_d0_wow_disable_ack_event_fixed_param; @@ -24959,7 +25223,7 @@ pattern returns to the MSB of X_0 and repeats. The GPIO state for each timing in High and the first interval of the pattern represents the time when the GPIO is Low. When a timing interval of Zero is reached, it is skipped and moves on to the next interval. */ -typedef struct{ +typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_set_led_flashing_cmd_fixed_param */ A_UINT32 pattern_id; /* pattern identifier */ A_UINT32 led_x0; /* led flashing parameter0 */ @@ -27568,6 +27832,101 @@ typedef enum { * A_UINT8 agcEnergyDetThr6GVLP thrCcaExt40dB_ETSI_MKK_CHN * A_UINT8 agcEnergyDetThr6GVLP.thrCcaExt80dB_ETSI_MKK_CHN */ + + BIOS_PARAM_TAS_CONFIG_TYPE, + /* + * BIOS_PARAM_TAS_CONFIG_TYPE Structure has 108 bytes. Please Note these fields of A_UINT32 or A_INT32. + * explicit endianness corrections will need to be done by any big-endian host when the little-endian target is paired with a big-endian host. + * PowerLimitIndicator points out which region(FCC OR ICNIRP) power limit value should be used. + * A bit of PowerLimitIndicator maps a country. bit value 0: ICNIRP 1: FCC + * + * A_UINT8 Version + * A_UINT8 TASIsPairWith3rdPartyWwan + * A_UINT8 SARAntennaGroupingExt[6] (6 Bytes) + * A_UINT32 TASPeakModeIndicator[8] (32 Bytes) + * A_UINT32 TAS_FCC_ICNIRP_Indicator[8] (32 Bytes) + * A_UINT32 PowerLimitIndicator[8] (32 Bytes) + * A_INT32 TASLogReducedLimit (4 Bytes) + */ + + BIOS_PARAM_TAS_DATA_TYPE, + /* + * BIOS_PARAM_TAS_DATA_TYPE Structure has 69 bytes as below, power limit value unit is 0.25 dBm. + * If Enable flag is 0, FW will not use power limit value of bios. + * + * A_UINT8 Version + * A_UINT8 Enable Flag + * A_UINT8 Power Table Index + * ====================FCC POWER LIMIT VALUE====================== + * A_INT8 FCC 2Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) + * A_INT8 FCC 2Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) + * A_INT8 FCC 2Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) + * A_INT8 FCC 5Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-1, Ch32 ~ Ch48) + * A_INT8 FCC 5Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-1, Ch32 ~ Ch48) + * A_INT8 FCC 5Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-1, Ch32 ~ Ch48) + * A_INT8 FCC 5Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-2, Ch50 ~ Ch144) + * A_INT8 FCC 5Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-2, Ch50 ~ Ch144) + * A_INT8 FCC 5Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-2, Ch50 ~ Ch144) + * A_INT8 FCC 5Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-3, Ch149 ~ Ch161) + * A_INT8 FCC 5Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-3, Ch149 ~ Ch161) + * A_INT8 FCC 5Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-3, Ch149 ~ Ch161) + * A_INT8 FCC 5Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-4, Ch163 ~ Ch177) + * A_INT8 FCC 5Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-4, Ch163 ~ Ch177) + * A_INT8 FCC 5Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-4, Ch163 ~ Ch177) + * A_INT8 FCC 6Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-5) (Ch1, Ch2 ~ Ch41) + * A_INT8 FCC 6Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-5) (Ch1, Ch2 ~ Ch41) + * A_INT8 FCC 6Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-5) (Ch1, Ch2 ~ Ch41) + * A_INT8 FCC 6Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-5) (Ch45 ~ Ch93) + * A_INT8 FCC 6Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-5) (Ch45 ~ Ch93) + * A_INT8 FCC 6Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-5) (Ch45 ~ Ch93) + * A_INT8 FCC 6Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-6) (Ch97~ Ch113) + * A_INT8 FCC 6Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-6) (Ch97~ Ch113) + * A_INT8 FCC 6Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-6) (Ch97~ Ch113) + * A_INT8 FCC 6Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-7) (Ch117~Ch149) + * A_INT8 FCC 6Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-7) (Ch117~Ch149) + * A_INT8 FCC 6Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-7) (Ch117~Ch149) + * A_INT8 FCC 6Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-7) (Ch117~Ch149) + * A_INT8 FCC 6Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-7) (Ch117~Ch149) + * A_INT8 FCC 6Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-7) (Ch117~Ch149) + * A_INT8 FCC 6Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-8) (Ch117~Ch149) + * A_INT8 FCC 6Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-8) (Ch117~Ch149) + * A_INT8 FCC 6Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-8) (Ch117~Ch149) + * ====================ICNIRP POWER LIMIT VALUE====================== + * A_INT8 ICNIRP 2Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) + * A_INT8 ICNIRP 2Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) + * A_INT8 ICNIRP 2Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) + * A_INT8 ICNIRP 5Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-1, Ch32 ~ Ch48) + * A_INT8 ICNIRP 5Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-1, Ch32 ~ Ch48) + * A_INT8 ICNIRP 5Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-1, Ch32 ~ Ch48) + * A_INT8 ICNIRP 5Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-2, Ch50 ~ Ch144) + * A_INT8 ICNIRP 5Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-2, Ch50 ~ Ch144) + * A_INT8 ICNIRP 5Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-2, Ch50 ~ Ch144) + * A_INT8 ICNIRP 5Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-3, Ch149 ~ Ch161) + * A_INT8 ICNIRP 5Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-3, Ch149 ~ Ch161) + * A_INT8 ICNIRP 5Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-3, Ch149 ~ Ch161) + * A_INT8 ICNIRP 5Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-4, Ch163 ~ Ch177) + * A_INT8 ICNIRP 5Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-4, Ch163 ~ Ch177) + * A_INT8 ICNIRP 5Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-4, Ch163 ~ Ch177) + * A_INT8 ICNIRP 6Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-5) (Ch1, Ch2 ~ Ch41) + * A_INT8 ICNIRP 6Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-5) (Ch1, Ch2 ~ Ch41) + * A_INT8 ICNIRP 6Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-5) (Ch1, Ch2 ~ Ch41) + * A_INT8 ICNIRP 6Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-5) (Ch45 ~ Ch93) + * A_INT8 ICNIRP 6Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-5) (Ch45 ~ Ch93) + * A_INT8 ICNIRP 6Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-5) (Ch45 ~ Ch93) + * A_INT8 ICNIRP 6Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-6) (Ch97~ Ch113) + * A_INT8 ICNIRP 6Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-6) (Ch97~ Ch113) + * A_INT8 ICNIRP 6Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-6) (Ch97~ Ch113) + * A_INT8 ICNIRP 6Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-7) (Ch117~Ch149) + * A_INT8 ICNIRP 6Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-7) (Ch117~Ch149) + * A_INT8 ICNIRP 6Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-7) (Ch117~Ch149) + * A_INT8 ICNIRP 6Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-7) (Ch117~Ch149) + * A_INT8 ICNIRP 6Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-7) (Ch117~Ch149) + * A_INT8 ICNIRP 6Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-7) (Ch117~Ch149) + * A_INT8 ICNIRP 6Ghz SISO (Chain0) Power Limit Value(unit: 0.25dBm) (UNII-8) (Ch117~Ch149) + * A_INT8 ICNIRP 6Ghz SISO (Chain1) Power Limit Value(unit: 0.25dBm) (UNII-8) (Ch117~Ch149) + * A_INT8 ICNIRP 6Ghz MIMO (Chain0 + Chain1) Power Limit Value(unit: 0.25dBm) (UNII-8) (Ch117~Ch149) + */ + BIOS_PARAM_TYPE_MAX, } bios_param_type_e; @@ -29350,6 +29709,10 @@ typedef enum wmi_hw_mode_config_type { WMI_HW_MODE_DBS_OR_SBS = 5, /* One PHY is on 5G and the other PHY can be in 2G or 5G. */ WMI_HW_MODE_DBS_2G_5G = 6, /* Both PHYs are active in different bands. PhyA 2G and PhyB 5G */ WMI_HW_MODE_2G_PHYB = 7, /* Ony PhyB 2G active */ + WMI_HW_MODE_EMLSR = 8, /* Both PHYs are active in listen mode in 1x1 + * and Tx/Rx trigger on any PHY will switch + * from 1x1 to 2x2 on that Phy + */ } WMI_HW_MODE_CONFIG_TYPE; /* @@ -29366,6 +29729,8 @@ typedef enum wmi_hw_mode_config_type { * WMI_MLO_CAP_FLAG_STR_IN_SBS: Support Non-STR MLO when SBS for the * specific HW mode * WMI_MLO_CAP_FLAG_STR: Support STR for the specific HW mode. + * + * WMI_MLO_CAP_FLAG_EMLSR: Support eMLSR mode. */ #define WMI_MLO_CAP_FLAG_NONE 0x00 #define WMI_MLO_CAP_FLAG_NON_STR_IN_DBS 0x01 @@ -29373,6 +29738,7 @@ typedef enum wmi_hw_mode_config_type { #define WMI_MLO_CAP_FLAG_NON_STR_IN_SBS 0x04 #define WMI_MLO_CAP_FLAG_STR_IN_SBS 0x08 #define WMI_MLO_CAP_FLAG_STR 0x10 +#define WMI_MLO_CAP_FLAG_EMLSR 0x20 /* * hw_mode_config_type sub-fields for chips that support 802.11BE/MLO: @@ -31001,6 +31367,8 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_VDEV_PN_MGMT_RX_FILTER_CMDID); WMI_RETURN_STRING(WMI_PEER_RX_PN_REQUEST_CMDID); WMI_RETURN_STRING(WMI_SET_MULTIPLE_PDEV_VDEV_PARAM_CMDID); + WMI_RETURN_STRING(WMI_PMM_SCRATCH_REG_ALLOCATION_CMDID); + WMI_RETURN_STRING(WMI_MLO_PEER_TID_TO_LINK_MAP_CMDID); } return (A_UINT8 *) "Invalid WMI cmd"; @@ -31058,6 +31426,7 @@ typedef enum { */ WMI_AFC_CMD_SERV_RESP_READY = 1, WMI_AFC_CMD_RESET = 2, /* Added cmd type to handle AFC reset */ + WMI_AFC_CMD_CLEAR_PAYLOAD = 3, /* Added cmd type to clear AFC response payload in proxy mode */ } WMI_AFC_CMD_TYPE; /** Host indicating AFC info availability to FW */ @@ -31440,10 +31809,14 @@ typedef enum { * with expiry event. * 3. If AFC server is not responding to FW in specified time, FW will * indicate host to switch to LPI. + * 4. In SP mode, if AFC server is not responding to FW in + * specified time then FW will indicate host to stop TX since + * there are no lower power mode available. */ WMI_AFC_EXPIRY_EVENT_START = 1, WMI_AFC_EXPIRY_EVENT_RENEW = 2, WMI_AFC_EXPIRY_EVENT_SWITCH_TO_LPI = 3, + WMI_AFC_EXPIRY_EVENT_STOP_TX = 4, } WMI_AFC_EXPIRY_EVENT_SUBTYPE; typedef enum { @@ -32004,6 +32377,14 @@ typedef enum { WMI_WLM_LL_ULTRA_LOW = 0x3, } WMI_WLM_LATENCY_LEVEL; +typedef struct { + A_UINT32 tlv_header; /* WMITLV_TAG_STRUC_wmi_vdev_latency_event_fixed_param */ + /** The latency level for specified vdev_id */ + A_UINT32 vdev_id; + /** latency level enum WMI_WLM_LATENCY_LEVEL honored by FW */ + A_UINT32 latency_level; +} wmi_vdev_latency_event_fixed_param; + /* * Lay out of flags in wmi_wlm_config_cmd_fixed_param * @@ -32116,31 +32497,53 @@ typedef enum { #define WLM_FLAGS_SCAN_SET_SPLIT_PAS_CH_ENABLE(flag, val) WMI_SET_BITS(flag, 21, 1, val) #define WLM_FLAGS_SCAN_IS_ADAPT_SCAN_ENABLED(flag) WMI_GET_BITS(flag, 22, 1) #define WLM_FLAGS_SCAN_SET_ADAPT_SCAN_ENABLE(flag, val) WMI_SET_BITS(flag, 22, 1, val) +#define WLM_FLAGS_SET_FORCE_DEFAULT_LATENCY(flag, val) WMI_SET_BITS(flag, 0, 1, val) +#define WLM_FLAGS_GET_FORCE_DEFAULT_LATENCY(flag) WMI_GET_BITS(flag, 0, 1) + +#define WLM_MAX_HOST_CLIENTS 5 typedef struct { - /** TLV tag and len; tag equals - * WMI_WLM_CONFIG_CMD_fixed_param */ + /** TLV tag and len; tag equals WMI_WLM_CONFIG_CMD_fixed_param */ A_UINT32 tlv_header; /* VDEV identifier */ A_UINT32 vdev_id; - /* Refer to WMI_WLM_LATENCY_LEVEL - * Once latency change detected, WLM will notify modules e.g. STAPS or SCAN/ROAM, - * who subscribed this event. And subscribers, like SCAN, may disable/cutoff offchan - * operation to support lower latency of WLAN. - */ + /* + * Refer to WMI_WLM_LATENCY_LEVEL + * Once latency change detected, WLM will notify modules e.g. STAPS or SCAN/ROAM, + * who subscribed this event. And subscribers, like SCAN, may disable/cutoff offchan + * operation to support lower latency of WLAN. + */ A_UINT32 latency_level; - /* represent uplink latency in ms - * This parameter will be used by STAPS module to decide timing parameters, like - * ITO or SPEC wakeup interval. For SCAN/ROAM, it may used to calculate offchan - * durations. - */ + /* + * represent uplink latency in ms + * This parameter will be used by STAPS module to decide timing parameters, like + * ITO or SPEC wakeup interval. For SCAN/ROAM, it may used to calculate offchan + * durations. + * For host and FW with multi client LL feature enabled, this field is obsolete. + */ A_UINT32 ul_latency; - /* represent downlink latency in ms - * Similar usage as ul_latency - */ + /* + * represent downlink latency in ms + * Similar usage as ul_latency + * For host and FW with multi client LL feature enabled, this field is obsolete. + */ A_UINT32 dl_latency; - /* flags for each client of WLM, refer to WLM_FLAGS_ definitions above */ + /* + * flags for each client of WLM, refer to WLM_FLAGS_ definitions above. + * For host and FW with multi client LL feature enabled, this field is obsolete. + */ A_UINT32 flags; + /* + * bit 0 used as force reset: + * to override the latency level as default + * for all the wlm clients + */ + A_UINT32 flags_ext; + /* + * clients of WLM Arbiter + * WLM_MAX_HOST_CLIENTS 5 + */ + A_UINT32 client_id_bitmask; } wmi_wlm_config_cmd_fixed_param; /* Broadcast TWT enable/disable for both REQUESTER and RESPONDER */ @@ -33641,12 +34044,17 @@ typedef struct { /* timestamp is the absolute time w.r.t host timer which is synchronized between the host and target */ A_UINT32 timestamp; /* Timestamp when frame is sent or received */ /* - * frame_info = frame_type | (frame_subtype << 2) | (request_or_response << 6)| (seq_num << 16) + * frame_info = frame_type | (frame_subtype << 2) | (request_or_response << 6) | (auth_algo_num << 7) | (seq_num << 16) * frame_type(2 bits), frame_subtype(4 bits) are from 802.11 spec. - * If frame_type is WMI_ROAM_FRAME_INFO_FRAME_TYPE_EXT, frame_subtype - * should be one of value in WMI_ROAM_FRAME_INFO_FRAME_TYPE_EXT_SUBTYPE. + * If frame_type is WMI_ROAM_FRAME_INFO_FRAME_TYPE_EXT, frame_subtype + * should be one of value in WMI_ROAM_FRAME_INFO_FRAME_TYPE_EXT_SUBTYPE. * request_or_response(1 bit) - Valid if frame_subtype is authentication. * 0 - Authentication request 1 - Authentication response + * auth_algo_num(5bits) : Lower 5 bits of 9.4.1.1 Authentication Algorithm + * Number field + * The auth_algo_num bits shall be ignored unless + * WMI_SERVICE_ROAM_STAT_PER_CANDIDATE_FRAME_INFO_SUPPORT is set and + * frame_subtype is auth frame. * seq_num(16 bits) - frame sequence number */ A_UINT32 frame_info; @@ -33673,6 +34081,7 @@ typedef struct { * sequence number) is retransmitted, in protocol level. */ A_UINT32 retry_count; + wmi_mac_addr bssid; /* AP MAC address */ } wmi_roam_frame_info; typedef enum { @@ -35627,25 +36036,61 @@ typedef struct { #define WMI_EHTCAP_PHY_MUBFMR320MHZ_GET(eht_cap_phy) WMI_GET_BITS(eht_cap_phy[1], 30, 1) #define WMI_EHTCAP_PHY_MUBFMR320MHZ_SET(eht_cap_phy, value) WMI_SET_BITS(eht_cap_phy[1], 30, 1, value) -/* Bit 63: reserved */ +/* Bit 63: TB sounding feedback rate limit */ +#define WMI_EHTCAP_PHY_TBSUNDFBRATELIMIT_GET(eht_cap_phy) WMI_GET_BITS(eht_cap_phy[1], 31, 1) +#define WMI_EHTCAP_PHY_TBSUNDFBRATELIMIT_SET(eht_cap_phy, value) WMI_SET_BITS(eht_cap_phy[1], 31, 1, value) + +/* Bit 64: Rx 1024-QAM in wider bandwidth DL OFDMA support */ +#define WMI_EHTCAP_PHY_RX1024QAMWIDERBWDLOFDMA_GET(eht_cap_phy) WMI_GET_BITS(eht_cap_phy[2], 0, 1) +#define WMI_EHTCAP_PHY_RX1024QAMWIDERBWDLOFDMA_SET(eht_cap_phy, value) WMI_SET_BITS(eht_cap_phy[2], 0, 1, value) + +/* Bit 65: Rx 4096-QAM in wider bandwidth DL OFDMA support */ +#define WMI_EHTCAP_PHY_RX4096QAMWIDERBWDLOFDMA_GET(eht_cap_phy) WMI_GET_BITS(eht_cap_phy[2], 1, 1) +#define WMI_EHTCAP_PHY_RX4096QAMWIDERBWDLOFDMA_SET(eht_cap_phy, value) WMI_SET_BITS(eht_cap_phy[2], 1, 1, value) + +/* Bits 66-71: reserved */ /****** End of 11BE EHT PHY Capabilities Information field ******/ /****** 11BE EHT MAC Capabilities Information field ******/ -/* Bit 0: NSEP priority access supported */ +/* Bit 0: NSEP/EPCS priority access supported: draft1.4 change the name from NSEP to EPCS + * To compatible with <= draft 1.4 ver, we keep 2 define there, but same bit. + */ #define WMI_EHTCAP_MAC_NSEPPRIACCESS_GET(eht_cap_mac) WMI_GET_BITS(eht_cap_mac[0], 0, 1) #define WMI_EHTCAP_MAC_NSEPPRIACCESS_SET(eht_cap_mac, value) WMI_SET_BITS(eht_cap_mac[0], 0, 1, value) +#define WMI_EHTCAP_MAC_EPCSPRIACCESS_GET(eht_cap_mac) WMI_EHTCAP_MAC_NSEPPRIACCESS_GET(eht_cap_mac) +#define WMI_EHTCAP_MAC_EPCSPRIACCESS_SET(eht_cap_mac, value) WMI_EHTCAP_MAC_NSEPPRIACCESS_SET(eht_cap_mac, value) /* Bit 1: EHT OM control support */ #define WMI_EHTCAP_MAC_EHTOMCTRL_GET(eht_cap_mac) WMI_GET_BITS(eht_cap_mac[0], 1, 1) #define WMI_EHTCAP_MAC_EHTOMCTRL_SET(eht_cap_mac, value) WMI_SET_BITS(eht_cap_mac[0], 1, 1, value) -/* Bit 2: triggered TXOP support */ +/* Bit 2: triggered TXOP mode 1 support + * As in draft 1.4, we define mode2 and to compatible with old version, we keep 2 define there, but same bit. + */ #define WMI_EHTCAP_MAC_TRIGTXOP_GET(eht_cap_mac) WMI_GET_BITS(eht_cap_mac[0], 2, 1) #define WMI_EHTCAP_MAC_TRIGTXOP_SET(eht_cap_mac, value) WMI_SET_BITS(eht_cap_mac[0], 2, 1, value) +#define WMI_EHTCAP_MAC_TRIGTXOPMODE1_GET(eht_cap_mac) WMI_EHTCAP_MAC_TRIGTXOP_GET(eht_cap_mac) +#define WMI_EHTCAP_MAC_TRIGTXOPMODE1_SET(eht_cap_mac, value) WMI_EHTCAP_MAC_TRIGTXOP_SET(eht_cap_mac, value) -/* Bit 3-15: reserved */ +/* Bit 3: triggered TXOP mode 2 support */ +#define WMI_EHTCAP_MAC_TRIGTXOPMODE2_GET(eht_cap_mac) WMI_GET_BITS(eht_cap_mac[0], 3, 1) +#define WMI_EHTCAP_MAC_TRIGTXOPMODE2_SET(eht_cap_mac, value) WMI_SET_BITS(eht_cap_mac[0], 3, 1, value) + +/* Bit 4: restricted TWT support */ +#define WMI_EHTCAP_MAC_RESTRICTTWT_GET(eht_cap_mac) WMI_GET_BITS(eht_cap_mac[0], 4, 1) +#define WMI_EHTCAP_MAC_RESTRICTTWT_SET(eht_cap_mac, value) WMI_SET_BITS(eht_cap_mac[0], 4, 1, value) + +/* Bit 5: SCS traffic description support */ +#define WMI_EHTCAP_MAC_SCSTRAFFICDESC_GET(eht_cap_mac) WMI_GET_BITS(eht_cap_mac[0], 5, 1) +#define WMI_EHTCAP_MAC_SCSTRAFFICDESC_SET(eht_cap_mac, value) WMI_SET_BITS(eht_cap_mac[0], 5, 1, value) + +/* Bit 6-7: maximum MPDU length */ +#define WMI_EHTCAP_MAC_MAXMPDULEN_GET(eht_cap_mac) WMI_GET_BITS(eht_cap_mac[0], 6, 2) +#define WMI_EHTCAP_MAC_MAXMPDULEN_SET(eht_cap_mac, value) WMI_SET_BITS(eht_cap_mac[0], 6, 2, value) + +/* Bit 8-15: reserved */ /****** End of 11BE EHT MAC Capabilities Information field ******/ @@ -37572,6 +38017,64 @@ typedef struct { A_UINT32 status; } wmi_mlo_teardown_complete_fixed_param; +#define WMI_TID_TO_LINK_MAP_TID_NUM_GET(_var) WMI_GET_BITS(_var, 0, 5) +#define WMI_TID_TO_LINK_MAP_TID_NUM_SET(_var, _val) WMI_SET_BITS(_var, 0, 5, _val) + +#define WMI_TID_TO_LINK_MAP_DIR_GET(_var) WMI_GET_BITS(_var, 5, 2) +#define WMI_TID_TO_LINK_MAP_DIR_SET(_var, _val) WMI_SET_BITS(_var, 5, 2, _val) + +#define WMI_TID_TO_LINK_MAP_DEFAULT_MAPPING_GET(_var) WMI_GET_BITS(_var, 7, 1) +#define WMI_TID_TO_LINK_MAP_DEFAULT_MAPPING_SET(_var, _val) WMI_SET_BITS(_var, 7, 1, _val) + +#define WMI_TID_TO_LINK_MAP_LINK_MASK_GET(_var) WMI_GET_BITS(_var, 8, 16) +#define WMI_TID_TO_LINK_MAP_LINK_MASK_SET(_var, _val) WMI_SET_BITS(_var, 8, 16, _val) + +enum { + WMI_TID_TO_LINK_MAP_DIR_DL, + WMI_TID_TO_LINK_MAP_DIR_UL, + WMI_TID_TO_LINK_MAP_DIR_BIDI, +}; + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_tid_to_link_map */ + A_UINT32 tlv_header; + + /** + * A_UINT32 + * WMI_TID_TO_LINK_MAP_TID_NUM_GET / WMI_TID_TO_LINK_MAP_TID_NUM_SET + * tid_num:5, + * + * WMI_TID_TO_LINK_MAP_DIR_GET / WMI_TID_TO_LINK_MAP_DIR_SET + * dir:2, // 0 - DL, 1 - UL, 2 - BiDi + * + * WMI_TID_TO_LINK_MAP_DEFAULT_MAPPING_GET / + * WMI_TID_TO_LINK_MAP_DEFAULT_MAPPING_SET + * default_link_mapping:1, // If this is set to 1, ignore + * // link_mapping_mask for the specific tid + * + * WMI_TID_TO_LINK_MAP_LINK_MASK_GET / WMI_TID_TO_LINK_MAP_LINK_MASK_SET + * link_mapping_mask:16, + * + * rsvd:8; + */ + A_UINT32 tid_to_link_map_info; +} wmi_tid_to_link_map; + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_tid_to_link_map_fixed_param */ + A_UINT32 tlv_header; + /** pdev_id for identifying the MAC, See macros starting with WMI_PDEV_ID_ for values. */ + A_UINT32 pdev_id; + + /** MLO Peer's current link MAC address */ + wmi_mac_addr link_macaddr; + + /** + * Following this structure is the TLV: + * struct wmi_tid_to_link_map tid_to_link_map[]; + */ +} wmi_peer_tid_to_link_map_fixed_param; + #define WMI_IGMP_OFFLOAD_SUPPORT_DISABLE_BITMASK 0x0 #define WMI_IGMP_V1_OFFLOAD_SUPPORT_BITMASK 0x1 #define WMI_IGMP_V2_OFFLOAD_SUPPORT_BITMASK 0x2 @@ -37940,11 +38443,54 @@ typedef struct { wmi_mac_addr peer_mac_addr; } wmi_rtt_pasn_deauth_cmd_fixed_param; +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pmm_scratch_reg_info */ + /** what the register is used for - see WFSS_PMM_SCRATCH_REG_PURPOSE enum */ + A_UINT32 pmm_scratch_reg_purpose; + /** Address of scratch register */ + A_UINT32 pmm_scratch_reg_address; +} wmi_pmm_scratch_reg_info; + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pmm_scratch_reg_allocation_cmd_fixed_param */ + /** pdev_id for identifying the MAC */ + A_UINT32 pdev_id; + /* + * Following this structure is the TLV: + * wmi_pmm_scratch_reg_info scratch_reg_info[]; + */ +} wmi_pmm_scratch_reg_allocation_cmd_fixed_param; + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pmm_available_scratch_reg_info */ + /** Scratch register address */ + A_UINT32 pmm_scratch_reg_address; +} wmi_pmm_available_scratch_reg_info; + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pmm_available_scratch_reg_event_fixed_param */ + /** pdev_id for identifying the MAC */ + A_UINT32 pdev_id; + /* + * Following this structure is the TLV: + * wmi_pmm_available_scratch_reg_info pmm_available_scratch_reg_info[]; + */ +} wmi_pmm_available_scratch_reg_event_fixed_param; + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pmm_scratch_reg_allocation_complete_event_fixed_param */ + /** pdev_id for identifying the MAC */ + A_UINT32 pdev_id; + /** 1 - success, 0 - failed */ + A_UINT32 is_allocated; +} wmi_pmm_scratch_reg_allocation_complete_event_fixed_param; + /* ADD NEW DEFS HERE */ +// { /***************************************************************************** * The following structures are deprecated. DO NOT USE THEM! */ @@ -38006,7 +38552,7 @@ typedef struct { /***************************************************************************** * END DEPRECATED */ - +// } /* ADD NEW DEFS ABOVE THIS DEPRECATED SECTION */ diff --git a/drivers/staging/fw-api/fw/wmi_version.h b/drivers/staging/fw-api/fw/wmi_version.h index 2751dffedf5d..32d4ffb405df 100644 --- a/drivers/staging/fw-api/fw/wmi_version.h +++ b/drivers/staging/fw-api/fw/wmi_version.h @@ -37,7 +37,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_ 1127 +#define __WMI_REVISION_ 1148 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work diff --git a/drivers/staging/fw-api/hw/qcn9224/mon_drop.h b/drivers/staging/fw-api/hw/qcn9224/mon_drop.h new file mode 100644 index 000000000000..89feeacf076b --- /dev/null +++ b/drivers/staging/fw-api/hw/qcn9224/mon_drop.h @@ -0,0 +1,101 @@ + +/* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + + + + + + + +#ifndef _MON_DROP_H_ +#define _MON_DROP_H_ +#if !defined(__ASSEMBLER__) +#endif + +#define NUM_OF_DWORDS_MON_DROP 2 + +#define NUM_OF_QWORDS_MON_DROP 1 + + +struct mon_drop { +#ifndef WIFI_BIT_ORDER_BIG_ENDIAN + uint32_t ppdu_id : 32; + uint32_t ppdu_drop_cnt : 10, + mpdu_drop_cnt : 10, + tlv_drop_cnt : 10, + end_of_ppdu_seen : 1, + reserved_1a : 1; +#else + uint32_t ppdu_id : 32; + uint32_t reserved_1a : 1, + end_of_ppdu_seen : 1, + tlv_drop_cnt : 10, + mpdu_drop_cnt : 10, + ppdu_drop_cnt : 10; +#endif +}; + + + + +#define MON_DROP_PPDU_ID_OFFSET 0x0000000000000000 +#define MON_DROP_PPDU_ID_LSB 0 +#define MON_DROP_PPDU_ID_MSB 31 +#define MON_DROP_PPDU_ID_MASK 0x00000000ffffffff + + + + +#define MON_DROP_PPDU_DROP_CNT_OFFSET 0x0000000000000000 +#define MON_DROP_PPDU_DROP_CNT_LSB 32 +#define MON_DROP_PPDU_DROP_CNT_MSB 41 +#define MON_DROP_PPDU_DROP_CNT_MASK 0x000003ff00000000 + + + + +#define MON_DROP_MPDU_DROP_CNT_OFFSET 0x0000000000000000 +#define MON_DROP_MPDU_DROP_CNT_LSB 42 +#define MON_DROP_MPDU_DROP_CNT_MSB 51 +#define MON_DROP_MPDU_DROP_CNT_MASK 0x000ffc0000000000 + + + + +#define MON_DROP_TLV_DROP_CNT_OFFSET 0x0000000000000000 +#define MON_DROP_TLV_DROP_CNT_LSB 52 +#define MON_DROP_TLV_DROP_CNT_MSB 61 +#define MON_DROP_TLV_DROP_CNT_MASK 0x3ff0000000000000 + + + + +#define MON_DROP_END_OF_PPDU_SEEN_OFFSET 0x0000000000000000 +#define MON_DROP_END_OF_PPDU_SEEN_LSB 62 +#define MON_DROP_END_OF_PPDU_SEEN_MSB 62 +#define MON_DROP_END_OF_PPDU_SEEN_MASK 0x4000000000000000 + + + + +#define MON_DROP_RESERVED_1A_OFFSET 0x0000000000000000 +#define MON_DROP_RESERVED_1A_LSB 63 +#define MON_DROP_RESERVED_1A_MSB 63 +#define MON_DROP_RESERVED_1A_MASK 0x8000000000000000 + + + +#endif diff --git a/drivers/staging/fw-api/hw/qcn9224/phyrx_common_user_info.h b/drivers/staging/fw-api/hw/qcn9224/phyrx_common_user_info.h new file mode 100644 index 000000000000..6094d1e4be79 --- /dev/null +++ b/drivers/staging/fw-api/hw/qcn9224/phyrx_common_user_info.h @@ -0,0 +1,210 @@ + +/* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + + + + + + + + +#ifndef _PHYRX_COMMON_USER_INFO_H_ +#define _PHYRX_COMMON_USER_INFO_H_ +#if !defined(__ASSEMBLER__) +#endif + +#define NUM_OF_DWORDS_PHYRX_COMMON_USER_INFO 4 + +#define NUM_OF_QWORDS_PHYRX_COMMON_USER_INFO 2 + + +struct phyrx_common_user_info { + uint32_t receive_duration : 16, + reserved_0a : 16; + uint32_t u_sig_puncture_pattern_encoding : 6, + reserved_1a : 26; + uint32_t eht_ppdu_type : 2, + bss_color_id : 6, + dl_ul_flag : 1, + txop_duration : 7, + cp_setting : 2, + ltf_size : 2, + spatial_reuse : 4, + rx_ndp : 1, + dot11be_su_extended : 1, + reserved_2a : 6; + uint32_t eht_duplicate : 2, + eht_sig_cmn_field_type : 2, + doppler_indication : 1, + sta_id : 11, + puncture_bitmap : 16; +}; + + + + +#define PHYRX_COMMON_USER_INFO_RECEIVE_DURATION_OFFSET 0x0000000000000000 +#define PHYRX_COMMON_USER_INFO_RECEIVE_DURATION_LSB 0 +#define PHYRX_COMMON_USER_INFO_RECEIVE_DURATION_MSB 15 +#define PHYRX_COMMON_USER_INFO_RECEIVE_DURATION_MASK 0x000000000000ffff + + + + +#define PHYRX_COMMON_USER_INFO_RESERVED_0A_OFFSET 0x0000000000000000 +#define PHYRX_COMMON_USER_INFO_RESERVED_0A_LSB 16 +#define PHYRX_COMMON_USER_INFO_RESERVED_0A_MSB 31 +#define PHYRX_COMMON_USER_INFO_RESERVED_0A_MASK 0x00000000ffff0000 + + + + +#define PHYRX_COMMON_USER_INFO_U_SIG_PUNCTURE_PATTERN_ENCODING_OFFSET 0x0000000000000000 +#define PHYRX_COMMON_USER_INFO_U_SIG_PUNCTURE_PATTERN_ENCODING_LSB 32 +#define PHYRX_COMMON_USER_INFO_U_SIG_PUNCTURE_PATTERN_ENCODING_MSB 37 +#define PHYRX_COMMON_USER_INFO_U_SIG_PUNCTURE_PATTERN_ENCODING_MASK 0x0000003f00000000 + + + + +#define PHYRX_COMMON_USER_INFO_RESERVED_1A_OFFSET 0x0000000000000000 +#define PHYRX_COMMON_USER_INFO_RESERVED_1A_LSB 38 +#define PHYRX_COMMON_USER_INFO_RESERVED_1A_MSB 63 +#define PHYRX_COMMON_USER_INFO_RESERVED_1A_MASK 0xffffffc000000000 + + + + +#define PHYRX_COMMON_USER_INFO_EHT_PPDU_TYPE_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_EHT_PPDU_TYPE_LSB 0 +#define PHYRX_COMMON_USER_INFO_EHT_PPDU_TYPE_MSB 1 +#define PHYRX_COMMON_USER_INFO_EHT_PPDU_TYPE_MASK 0x0000000000000003 + + + + +#define PHYRX_COMMON_USER_INFO_BSS_COLOR_ID_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_BSS_COLOR_ID_LSB 2 +#define PHYRX_COMMON_USER_INFO_BSS_COLOR_ID_MSB 7 +#define PHYRX_COMMON_USER_INFO_BSS_COLOR_ID_MASK 0x00000000000000fc + + + + +#define PHYRX_COMMON_USER_INFO_DL_UL_FLAG_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_DL_UL_FLAG_LSB 8 +#define PHYRX_COMMON_USER_INFO_DL_UL_FLAG_MSB 8 +#define PHYRX_COMMON_USER_INFO_DL_UL_FLAG_MASK 0x0000000000000100 + + + + +#define PHYRX_COMMON_USER_INFO_TXOP_DURATION_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_TXOP_DURATION_LSB 9 +#define PHYRX_COMMON_USER_INFO_TXOP_DURATION_MSB 15 +#define PHYRX_COMMON_USER_INFO_TXOP_DURATION_MASK 0x000000000000fe00 + + + + +#define PHYRX_COMMON_USER_INFO_CP_SETTING_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_CP_SETTING_LSB 16 +#define PHYRX_COMMON_USER_INFO_CP_SETTING_MSB 17 +#define PHYRX_COMMON_USER_INFO_CP_SETTING_MASK 0x0000000000030000 + + + + +#define PHYRX_COMMON_USER_INFO_LTF_SIZE_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_LTF_SIZE_LSB 18 +#define PHYRX_COMMON_USER_INFO_LTF_SIZE_MSB 19 +#define PHYRX_COMMON_USER_INFO_LTF_SIZE_MASK 0x00000000000c0000 + + + + +#define PHYRX_COMMON_USER_INFO_SPATIAL_REUSE_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_SPATIAL_REUSE_LSB 20 +#define PHYRX_COMMON_USER_INFO_SPATIAL_REUSE_MSB 23 +#define PHYRX_COMMON_USER_INFO_SPATIAL_REUSE_MASK 0x0000000000f00000 + + + + +#define PHYRX_COMMON_USER_INFO_RX_NDP_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_RX_NDP_LSB 24 +#define PHYRX_COMMON_USER_INFO_RX_NDP_MSB 24 +#define PHYRX_COMMON_USER_INFO_RX_NDP_MASK 0x0000000001000000 + + + + +#define PHYRX_COMMON_USER_INFO_DOT11BE_SU_EXTENDED_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_DOT11BE_SU_EXTENDED_LSB 25 +#define PHYRX_COMMON_USER_INFO_DOT11BE_SU_EXTENDED_MSB 25 +#define PHYRX_COMMON_USER_INFO_DOT11BE_SU_EXTENDED_MASK 0x0000000002000000 + + + + +#define PHYRX_COMMON_USER_INFO_RESERVED_2A_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_RESERVED_2A_LSB 26 +#define PHYRX_COMMON_USER_INFO_RESERVED_2A_MSB 31 +#define PHYRX_COMMON_USER_INFO_RESERVED_2A_MASK 0x00000000fc000000 + + + + +#define PHYRX_COMMON_USER_INFO_EHT_DUPLICATE_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_EHT_DUPLICATE_LSB 32 +#define PHYRX_COMMON_USER_INFO_EHT_DUPLICATE_MSB 33 +#define PHYRX_COMMON_USER_INFO_EHT_DUPLICATE_MASK 0x0000000300000000 + + + + +#define PHYRX_COMMON_USER_INFO_EHT_SIG_CMN_FIELD_TYPE_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_EHT_SIG_CMN_FIELD_TYPE_LSB 34 +#define PHYRX_COMMON_USER_INFO_EHT_SIG_CMN_FIELD_TYPE_MSB 35 +#define PHYRX_COMMON_USER_INFO_EHT_SIG_CMN_FIELD_TYPE_MASK 0x0000000c00000000 + + + + +#define PHYRX_COMMON_USER_INFO_DOPPLER_INDICATION_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_DOPPLER_INDICATION_LSB 36 +#define PHYRX_COMMON_USER_INFO_DOPPLER_INDICATION_MSB 36 +#define PHYRX_COMMON_USER_INFO_DOPPLER_INDICATION_MASK 0x0000001000000000 + + + + +#define PHYRX_COMMON_USER_INFO_STA_ID_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_STA_ID_LSB 37 +#define PHYRX_COMMON_USER_INFO_STA_ID_MSB 47 +#define PHYRX_COMMON_USER_INFO_STA_ID_MASK 0x0000ffe000000000 + + + + +#define PHYRX_COMMON_USER_INFO_PUNCTURE_BITMAP_OFFSET 0x0000000000000008 +#define PHYRX_COMMON_USER_INFO_PUNCTURE_BITMAP_LSB 48 +#define PHYRX_COMMON_USER_INFO_PUNCTURE_BITMAP_MSB 63 +#define PHYRX_COMMON_USER_INFO_PUNCTURE_BITMAP_MASK 0xffff000000000000 + + + +#endif diff --git a/drivers/staging/fw-api/hw/qcn9224/wcss_seq_hwioreg_umac.h b/drivers/staging/fw-api/hw/qcn9224/wcss_seq_hwioreg_umac.h index 4860d11e746a..6130085d8adf 100644 --- a/drivers/staging/fw-api/hw/qcn9224/wcss_seq_hwioreg_umac.h +++ b/drivers/staging/fw-api/hw/qcn9224/wcss_seq_hwioreg_umac.h @@ -12708,6 +12708,12 @@ out_dword_masked_ns(HWIO_REO_R0_CACHE_CTL_GXI_PRIORITY_ADDR(x),m,v,HWIO_REO_R0_C #define HWIO_TCL_R0_CONS_RING_CMN_CTRL_REG_DSCP_TID_MAP_PROGRAM_EN_BMSK 0x800000 #define HWIO_TCL_R0_CONS_RING_CMN_CTRL_REG_DSCP_TID_MAP_PROGRAM_EN_SHFT 23 +#define HWIO_TCL_R0_CMN_CONFIG_ADDR(x) ((x) + 0x24) +#define HWIO_TCL_R0_CMN_CONFIG_VDEVID_MISMATCH_EXCEPTION_BMSK 0x400000 +#define HWIO_TCL_R0_CMN_CONFIG_VDEVID_MISMATCH_EXCEPTION_SHFT 22 +#define HWIO_TCL_R0_CMN_CONFIG_MCAST_CMN_PN_SN_MLO_REINJECT_ENABLE_BMSK 0x1 +#define HWIO_TCL_R0_CMN_CONFIG_MCAST_CMN_PN_SN_MLO_REINJECT_ENABLE_SHFT 0 + #define HWIO_TCL_R0_RBM_MAPPING0_ADDR(x) ((x) + 0x88) #define HWIO_TCL_R0_RBM_MAPPING0_PHYS(x) ((x) + 0x88) #define HWIO_TCL_R0_RBM_MAPPING0_OFFS (0x88)