diff --git a/fw/htt.h b/fw/htt.h index 45305d3da39e..2d92b288a40e 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -208,9 +208,10 @@ * 3.84 Add fisa_control_bits_v2 def. * 3.85 Add HTT_RX_PEER_META_DATA defs. * 3.86 Add HTT_T2H_MSG_TYPE_FSE_CMEM_BASE_SEND def. + * 3.87 Add on-chip AST index field to PEER_MAP_V2 msg. */ #define HTT_CURRENT_VERSION_MAJOR 3 -#define HTT_CURRENT_VERSION_MINOR 86 +#define HTT_CURRENT_VERSION_MINOR 87 #define HTT_NUM_TX_FRAG_DESC 1024 @@ -9181,27 +9182,28 @@ PREPACK struct htt_tx_offload_deliver_ind_hdr_t * AST 3, check the AST_VALID_MASK(3) to see if the corresponding extension * AST is valid. * - * |31 28|27 24|23 20|19 17|16|15 8|7 0| - * |-----------------------------------------------------------------------| - * | SW peer ID | VDEV ID | msg type | - * |-----------------------------------------------------------------------| - * | MAC addr 3 | MAC addr 2 | MAC addr 1 | MAC addr 0 | - * |-----------------------------------------------------------------------| - * | HW peer ID / AST index 0 | MAC addr 5 | MAC addr 4 | - * |-----------------------------------------------------------------------| - * | Reserved_20_31 |ASTVM|NH| AST Hash Value | - * |-----------------------------------------------------------------------| - * | ASTFM3 | ASTFM2 | ASTFM1 | ASTFM0 | AST index 1 | - * |-----------------------------------------------------------------------| - * |TID valid low pri| TID valid hi pri| AST index 2 | - * |-----------------------------------------------------------------------| - * | Reserved_1 | AST index 3 | - * |-----------------------------------------------------------------------| - * | Reserved_2 | - * |-----------------------------------------------------------------------| + * |31 28|27 24|23 21|20|19 17|16|15 8|7 0| + * |-------------------------------------------------------------------------| + * | SW peer ID | VDEV ID | msg type | + * |-------------------------------------------------------------------------| + * | MAC addr 3 | MAC addr 2 | MAC addr 1 | MAC addr 0 | + * |-------------------------------------------------------------------------| + * | HW peer ID / AST index 0 | MAC addr 5 | MAC addr 4 | + * |-------------------------------------------------------------------------| + * | Reserved_21_31 |OA|ASTVM|NH| AST Hash Value | + * |-------------------------------------------------------------------------| + * | ASTFM3 | ASTFM2 | ASTFM1 | ASTFM0 | AST index 1 | + * |-------------------------------------------------------------------------| + * |TID valid low pri| TID valid hi pri | AST index 2 | + * |-------------------------------------------------------------------------| + * | LMAC/PMAC_RXPCU AST index | AST index 3 | + * |-------------------------------------------------------------------------| + * | Reserved_2 | + * |-------------------------------------------------------------------------| * Where: * NH = Next Hop * ASTVM = AST valid mask + * OA = on-chip AST valid bit * ASTFM = AST flow mask * * The following field definitions describe the format of the rx peer map v2 @@ -9244,6 +9246,10 @@ PREPACK struct htt_tx_offload_deliver_ind_hdr_t * - AST_VALID_MASK * Bits 19:17 * Purpose: Indicate if the AST 1 through AST 3 are valid + * - ONCHIP_AST_VALID_FLAG + * Bit 20 + * Purpose: Indicate if the on-chip AST index field (ONCHIP_AST_IDX) + * is valid. * - AST_INDEX_1 * Bits 15:0 * Purpose: indicate the second AST index for this peer @@ -9271,6 +9277,13 @@ PREPACK struct htt_tx_offload_deliver_ind_hdr_t * - AST_INDEX_3 * Bits 15:0 * Purpose: indicate the fourth AST index for this peer + * - ONCHIP_AST_IDX / RESERVED + * Bits 31:16 + * Purpose: This field is valid only when split AST feature is enabled. + * The ONCHIP_AST_VALID_FLAG identifies whether this field is valid. + * If valid, identifies the HW peer ID corresponding to the peer MAC + * address, this ast_idx is used for LMAC modules for RXPCU. + * Value: ID used by the LMAC HW to identify the peer */ #define HTT_RX_PEER_MAP_V2_VDEV_ID_M 0xff00 #define HTT_RX_PEER_MAP_V2_VDEV_ID_S 8 @@ -9289,6 +9302,9 @@ PREPACK struct htt_tx_offload_deliver_ind_hdr_t #define HTT_RX_PEER_MAP_V2_AST_VALID_MASK_M 0x000e0000 #define HTT_RX_PEER_MAP_V2_AST_VALID_MASK_S 17 +#define HTT_RX_PEER_MAP_V2_ONCHIP_AST_VALID_FLAG_M 0x00100000 +#define HTT_RX_PEER_MAP_V2_ONCHIP_AST_VALID_FLAG_S 20 + #define HTT_RX_PEER_MAP_V2_AST_INDEX_1_M 0xffff #define HTT_RX_PEER_MAP_V2_AST_INDEX_1_S 0 #define HTT_RX_PEER_MAP_V2_AST_0_FLOW_MASK_M 0x000f0000 @@ -9310,6 +9326,9 @@ PREPACK struct htt_tx_offload_deliver_ind_hdr_t #define HTT_RX_PEER_MAP_V2_AST_INDEX_3_M 0xffff #define HTT_RX_PEER_MAP_V2_AST_INDEX_3_S 0 +#define HTT_RX_PEER_MAP_V2_ONCHIP_AST_HASH_VALUE_M 0xffff0000 +#define HTT_RX_PEER_MAP_V2_ONCHIP_AST_HASH_VALUE_S 16 + #define HTT_RX_PEER_MAP_V2_VDEV_ID_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_MAP_V2_VDEV_ID, value); \ @@ -9342,6 +9361,14 @@ PREPACK struct htt_tx_offload_deliver_ind_hdr_t #define HTT_RX_PEER_MAP_V2_AST_HASH_VALUE_GET(word) \ (((word) & HTT_RX_PEER_MAP_V2_AST_HASH_VALUE_M) >> HTT_RX_PEER_MAP_V2_AST_HASH_VALUE_S) +#define HTT_RX_PEER_MAP_V2_ONCHIP_AST_HASH_VALUE_SET(word, value) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_PEER_MAP_V2_ONCHIP_AST_HASH_VALUE_M, value); \ + (word) |= (value) << HTT_RX_PEER_MAP_V2_ONCHIP_AST_HASH_VALUE_S; \ + } while (0) +#define HTT_RX_PEER_MAP_V2_ONCHIP_AST_HASH_VALUE_GET(word) \ + (((word) & HTT_RX_PEER_MAP_V2_ONCHIP_AST_HASH_VALUE_M) >> HTT_RX_PEER_MAP_V2_ONCHIP_AST_HASH_VALUE_S) + #define HTT_RX_PEER_MAP_V2_NEXT_HOP_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_MAP_V2_NEXT_HOP, value); \ @@ -9358,6 +9385,14 @@ PREPACK struct htt_tx_offload_deliver_ind_hdr_t #define HTT_RX_PEER_MAP_V2_AST_VALID_MASK_GET(word) \ (((word) & HTT_RX_PEER_MAP_V2_AST_VALID_MASK_M) >> HTT_RX_PEER_MAP_V2_AST_VALID_MASK_S) +#define HTT_RX_PEER_MAP_V2_ONCHIP_AST_VALID_FLAG_SET(word, value) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_PEER_MAP_V2_ONCHIP_AST_VALID_FLAG_M, value); \ + (word) |= (value) << HTT_RX_PEER_MAP_V2_ONCHIP_AST_VALID_FLAG_S; \ + } while (0) +#define HTT_RX_PEER_MAP_V2_ONCHIP_AST_VALID_MASK_GET(word) \ + (((word) & HTT_RX_PEER_MAP_V2_ONCHIP_AST_VALID_FLAG_M) >> HTT_RX_PEER_MAP_V2_ONCHIP_AST_VALID_FLAG_S) + #define HTT_RX_PEER_MAP_V2_AST_INDEX_1_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PEER_MAP_V2_AST_INDEX_1, value); \ diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 6d1268ab32c7..c6c10fe2e3ee 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -489,6 +489,7 @@ typedef enum { WMI_SERVICE_TWT_NUDGE = 269, /* Indicates that FW supports TWT Nudge command and event */ WMI_SERVICE_TWT_STATS = 270, /* Indicates that FW supports TWT Get_stats command and event */ WMI_SERVICE_TWT_ALL_DIALOG_ID = 271, /* Indicates that FW supports TWT ALL dialog ID(255) for all commands and events, except for TWT add dialog and TWT get stats */ + WMI_SERVICE_SPLIT_AST_SUPPORT = 272, /* Indicate that FW supports SPLIT AST table */ WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index fc33de71b06c..dde8741fe78d 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -3108,6 +3108,17 @@ typedef struct { */ A_UINT32 pktlog_defs_checksum; + /* + * max_onchip_ast_index - max AST index that Firmware can generate + * max_onchip_ast_index = (ast_table_size-1), where ast_table_size is + * dynamically chosen based on num_peers configutation from Host. + * Hence Host needs to know the max_onchip_ast_index that Firmware can + * generate. + * A 0x0 value for max_onchip_ast_index means the target has not specified + * a limit. + */ + A_UINT32 max_onchip_ast_index; + /* * This fixed_param TLV is followed by these additional TLVs: * mac_addr_list[num_extra_mac_addr]; @@ -3783,7 +3794,12 @@ typedef struct { * * Refer to WMI_RSRC_CFG_HOST_SERVICE_FLAG_HOST_SUPPORT_MULTI_RADIO_EVTS_PER_RADIO_GET/SET * macros defined below. - * Bits 31:2 - Reserved + * Bit 2 + * This bit will be set when host is able to handle split AST feature. + * Refer to the below definitions of the + * WMI_RSRC_CFG_HOST_SERVICE_FLAG_SPLIT_AST_FEATURE_HOST_SUPPORT_GET + * and _SET macros. + * Bits 31:3 - Reserved */ A_UINT32 host_service_flags; @@ -4047,6 +4063,11 @@ typedef struct { #define WMI_RSRC_CFG_HOST_SERVICE_FLAG_HOST_SUPPORT_MULTI_RADIO_EVTS_PER_RADIO_SET(host_service_flags, val) \ WMI_SET_BITS(host_service_flags, 1, 1, val) +#define WMI_RSRC_CFG_HOST_SERVICE_FLAG_SPLIT_AST_FEATURE_HOST_SUPPORT_GET(host_service_flags) \ + WMI_GET_BITS(host_service_flags, 2, 1) +#define WMI_RSRC_CFG_HOST_SERVICE_FLAG_SPLIT_AST_FEATURE_HOST_SUPPORT_SET(host_service_flags, val) \ + WMI_SET_BITS(host_service_flags, 2, 1, val) + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_init_cmd_fixed_param */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 2c2905559e28..e724dc6b3450 100644 --- a/fw/wmi_version.h +++ b/fw/wmi_version.h @@ -36,7 +36,7 @@ #define __WMI_VER_MINOR_ 0 /** WMI revision number has to be incremented when there is a * change that may or may not break compatibility. */ -#define __WMI_REVISION_ 935 +#define __WMI_REVISION_ 936 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work