diff --git a/fw/htt.h b/fw/htt.h index 56d84680dc58..9cd62310a712 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -212,10 +212,11 @@ * 3.88 Add HTT_H2T_MSG_TYPE_HOST_PADDR_SIZE def. * 3.89 Add MSDU queue enumerations. * 3.90 Add HTT_T2H_MSG_TYPE_MLO_TIMESTAMP_OFFSET_IND def. - * 3.91 Add TT_T2H_MSG_TYPE_MLO_RX_PEER_MAP, _UNMAP defs. + * 3.91 Add HTT_T2H_MSG_TYPE_MLO_RX_PEER_MAP, _UNMAP defs. + * 3.92 Add HTT_H2T_MSG_TYPE_RXDMA_RXOLE_PPE_CFG def. */ #define HTT_CURRENT_VERSION_MAJOR 3 -#define HTT_CURRENT_VERSION_MINOR 91 +#define HTT_CURRENT_VERSION_MINOR 92 #define HTT_NUM_TX_FRAG_DESC 1024 @@ -528,6 +529,7 @@ enum htt_h2t_msg_type { HTT_H2T_MSG_TYPE_3_TUPLE_HASH_CFG = 0x16, HTT_H2T_MSG_TYPE_RX_FULL_MONITOR_MODE = 0x17, HTT_H2T_MSG_TYPE_HOST_PADDR_SIZE = 0x18, + HTT_H2T_MSG_TYPE_RXDMA_RXOLE_PPE_CFG = 0x19, /* keep this last */ HTT_H2T_NUM_MSGS @@ -7002,6 +7004,132 @@ PREPACK struct htt_h2t_host_paddr_size_entry_t { ((_var) |= ((_val) << HTT_H2T_HOST_PADDR_SIZE_NUM_ENTRIES_S)); \ } while (0) +/** + * @brief host --> target Host RXDMA RXOLE PPE register configuration + * + * MSG_TYPE => HTT_H2T_MSG_TYPE_RXDMA_RXOLE_PPE_CFG + * + * @details + * The HTT_H2T_MSG_TYPE_RXDMA_RXOLE_PPE_CFG message is sent by the host to + * provide the PPE DS register confiuration for RXOLE and RXDMA. + * + * The message would appear as follows: + * + * |31 19|18 |17 |16 |15 |14 |13 9|8|7 0| + * |---------------------------------+---+---+----------+-+-----------| + * | reserved |IFO|DNO|DRO|IBO|MIO| RDI |O| msg_type | + * |---------------------+---+---+---+---+---+----------+-+-----------| + * + * + * The message is interpreted as follows: + * dword0 - b'0:7 - msg_type: This will be set to + * 0x19 (HTT_H2T_MSG_TYPE_RXDMA_RXOLE_PPE_CFG) + * b'8 - override bit to drive MSDUs to PPE ring + * b'9:13 - REO destination ring indication + * b'14 - Multi buffer msdu override enable bit + * b'15 - Intra BSS override + * b'16 - Decap raw override + * b'17 - Decap Native wifi override + * b'18 - IP frag override + * b'19:31 - reserved + */ +PREPACK struct htt_h2t_msg_type_rxdma_rxole_ppe_cfg_t { + A_UINT32 msg_type: 8, /* HTT_H2T_MSG_TYPE_RXDMA_RXOLE_PPE_CFG */ + override: 1, + reo_destination_indication: 5, + multi_buffer_msdu_override_en: 1, + intra_bss_override: 1, + decap_raw_override: 1, + decap_nwifi_override: 1, + ip_frag_override: 1, + reserved: 13; +} POSTPACK; + +/* DWORD 0: Override */ +#define HTT_PPE_CFG_OVERRIDE_M 0x00000100 +#define HTT_PPE_CFG_OVERRIDE_S 8 +#define HTT_PPE_CFG_OVERRIDE_GET(_var) \ + (((_var) & HTT_PPE_CFG_OVERRIDE_M) >> \ + HTT_PPE_CFG_OVERRIDE_S) +#define HTT_PPE_CFG_OVERRIDE_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPE_CFG_OVERRIDE, _val); \ + ((_var) |= ((_val) << HTT_PPE_CFG_OVERRIDE_S)); \ + } while (0) + +/* DWORD 0: REO Destination Indication*/ +#define HTT_PPE_CFG_REO_DEST_IND_M 0x00003E00 +#define HTT_PPE_CFG_REO_DEST_IND_S 9 +#define HTT_PPE_CFG_REO_DEST_IND_GET(_var) \ + (((_var) & HTT_PPE_CFG_REO_DEST_IND_M) >> \ + HTT_PPE_CFG_REO_DEST_IND_S) +#define HTT_PPE_CFG_REO_DEST_IND_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPE_CFG_REO_DEST_IND, _val); \ + ((_var) |= ((_val) << HTT_PPE_CFG_REO_DEST_IND_S)); \ + } while (0) + +/* DWORD 0: Multi buffer MSDU override */ +#define HTT_PPE_CFG_MULTI_BUF_MSDU_OVERRIDE_EN_M 0x00004000 +#define HTT_PPE_CFG_MULTI_BUF_MSDU_OVERRIDE_EN_S 14 +#define HTT_PPE_CFG_MULTI_BUF_MSDU_OVERRIDE_EN_GET(_var) \ + (((_var) & HTT_PPE_CFG_MULTI_BUF_MSDU_OVERRIDE_EN_M) >> \ + HTT_PPE_CFG_MULTI_BUF_MSDU_OVERRIDE_EN_S) +#define HTT_PPE_CFG_MULTI_BUF_MSDU_OVERRIDE_EN_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPE_CFG_MULTI_BUF_MSDU_OVERRIDE_EN, _val); \ + ((_var) |= ((_val) << HTT_PPE_CFG_MULTI_BUF_MSDU_OVERRIDE_EN_S)); \ + } while (0) + +/* DWORD 0: Intra BSS override */ +#define HTT_PPE_CFG_INTRA_BSS_OVERRIDE_EN_M 0x00008000 +#define HTT_PPE_CFG_INTRA_BSS_OVERRIDE_EN_S 15 +#define HTT_PPE_CFG_INTRA_BSS_OVERRIDE_EN_GET(_var) \ + (((_var) & HTT_PPE_CFG_INTRA_BSS_OVERRIDE_EN_M) >> \ + HTT_PPE_CFG_INTRA_BSS_OVERRIDE_EN_S) +#define HTT_PPE_CFG_INTRA_BSS_OVERRIDE_EN_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPE_CFG_INTRA_BSS_OVERRIDE_EN, _val); \ + ((_var) |= ((_val) << HTT_PPE_CFG_INTRA_BSS_OVERRIDE_EN_S)); \ + } while (0) + +/* DWORD 0: Decap RAW override */ +#define HTT_PPE_CFG_DECAP_RAW_OVERRIDE_EN_M 0x00010000 +#define HTT_PPE_CFG_DECAP_RAW_OVERRIDE_EN_S 16 +#define HTT_PPE_CFG_DECAP_RAW_OVERRIDE_EN_GET(_var) \ + (((_var) & HTT_PPE_CFG_DECAP_RAW_OVERRIDE_EN_M) >> \ + HTT_PPE_CFG_DECAP_RAW_OVERRIDE_EN_S) +#define HTT_PPE_CFG_DECAP_RAW_OVERRIDE_EN_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPE_CFG_DECAP_RAW_OVERRIDE_EN, _val); \ + ((_var) |= ((_val) << HTT_PPE_CFG_DECAP_RAW_OVERRIDE_EN_S)); \ + } while (0) + +/* DWORD 0: Decap NWIFI override */ +#define HTT_PPE_CFG_DECAP_NWIFI_OVERRIDE_EN_M 0x00020000 +#define HTT_PPE_CFG_DECAP_NWIFI_OVERRIDE_EN_S 17 +#define HTT_PPE_CFG_DECAP_NWIFI_OVERRIDE_EN_GET(_var) \ + (((_var) & HTT_PPE_CFG_DECAP_NWIFI_OVERRIDE_EN_M) >> \ + HTT_PPE_CFG_DECAP_NWIFI_OVERRIDE_EN_S) +#define HTT_PPE_CFG_DECAP_NWIFI_OVERRIDE_EN_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPE_CFG_DECAP_NWIFI_OVERRIDE_EN, _val); \ + ((_var) |= ((_val) << HTT_PPE_CFG_DECAP_NWIFI_OVERRIDE_EN_S)); \ + } while (0) + +/* DWORD 0: IP frag override */ +#define HTT_PPE_CFG_IP_FRAG_OVERRIDE_EN_M 0x00040000 +#define HTT_PPE_CFG_IP_FRAG_OVERRIDE_EN_S 18 +#define HTT_PPE_CFG_IP_FRAG_OVERRIDE_EN_GET(_var) \ + (((_var) & HTT_PPE_CFG_IP_FRAG_OVERRIDE_EN_M) >> \ + HTT_PPE_CFG_IP_FRAG_OVERRIDE_EN_S) +#define HTT_PPE_CFG_IP_FRAG_OVERRIDE_EN_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPE_CFG_IP_FRAG_OVERRIDE_EN, _val); \ + ((_var) |= ((_val) << HTT_PPE_CFG_IP_FRAG_OVERRIDE_EN_S)); \ + } while (0) + + /*=== target -> host messages ===============================================*/ diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 6b32bb7e49ea..a79a54403a98 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1182,6 +1182,7 @@ typedef enum { WMITLV_TAG_STRUC_wmi_vdev_bcn_offload_ml_quiet_config_params, WMITLV_TAG_STRUC_wmi_pdev_multiple_vdev_set_param_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_pdev_mec_aging_timer_config_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_config_ppe_ds_cmd_fixed_param, } WMITLV_TAG_ID; /* @@ -1652,6 +1653,7 @@ typedef enum { OP(WMI_AFC_CMDID) \ OP(WMI_PDEV_MULTIPLE_VDEV_SET_PARAM_CMDID) \ OP(WMI_PDEV_MEC_AGING_TIMER_CONFIG_CMDID) \ + OP(WMI_PEER_CONFIG_PPE_DS_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -4745,6 +4747,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_MULTIPLE_VDEV_SET_PARAM_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_mec_aging_timer_config_cmd_fixed_param, wmi_pdev_mec_aging_timer_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_MEC_AGING_TIMER_CONFIG_CMDID); +/* PPE DS config */ +#define WMITLV_TABLE_WMI_PEER_CONFIG_PPE_DS_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_config_ppe_ds_cmd_fixed_param, wmi_peer_config_ppe_ds_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_PEER_CONFIG_PPE_DS_CMDID); + /************************** TLV definitions of WMI events *******************************/ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 5d30803bf557..26648519141f 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -654,6 +654,9 @@ typedef enum { */ WMI_PEER_CONFIG_VLAN_CMDID, + /** WMI command for per-peer configuration of PPE DS */ + WMI_PEER_CONFIG_PPE_DS_CMDID, + /* beacon/management specific commands */ @@ -5658,6 +5661,10 @@ typedef struct { #define WMI_TX_SEND_PARAM_CFR_CAPTURE_GET(tx_param_dword1) WMI_GET_BITS(tx_param_dword1, 21, 1) #define WMI_TX_SEND_PARAM_CFR_CAPTURE_SET(tx_param_dword1, value) WMI_SET_BITS(tx_param_dword1, 21, 1, value) +#define WMI_TX_SEND_PARAM_BEAMFORM_GET(tx_param_dword1) WMI_GET_BITS(tx_param_dword1, 22, 1) +#define WMI_TX_SEND_PARAM_BEAMFORM_SET(tx_param_dword1, value) WMI_SET_BITS(tx_param_dword1, 22, 1, value) + + /* TX_SEND flags: * Bit 0: set wrong txkey * There is one special WFA test case in STA or AP, setting wrong txkey @@ -28874,6 +28881,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_AFC_CMDID); WMI_RETURN_STRING(WMI_PDEV_MULTIPLE_VDEV_SET_PARAM_CMDID); WMI_RETURN_STRING(WMI_PDEV_MEC_AGING_TIMER_CONFIG_CMDID); + WMI_RETURN_STRING(WMI_PEER_CONFIG_PPE_DS_CMDID); } return "Invalid WMI cmd"; @@ -34294,6 +34302,36 @@ typedef struct { A_UINT32 vdev_id; } wmi_peer_config_vlan_cmd_fixed_param; +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_peer_config_ppe_ds_cmd_fixed_param */ + A_UINT32 tlv_header; + + wmi_mac_addr peer_macaddr; + A_UINT32 ppe_routing_enable; /* enum WMI_PPE_ROUTING_TYPE */ + + /* The processing stages in PPE that this packet buffer need to go through + * and on to which PPE queues these buffers should be mapped to. + * Refer pkg/ppe/src/ppe_sc.h for service code types + */ + A_UINT32 service_code; + + A_UINT32 priority_valid; + + /* Unique number that represents a VAP's vdev_id in PPE domain */ + A_UINT32 src_info; + + /* VDEV identifier */ + A_UINT32 vdev_id; +} wmi_peer_config_ppe_ds_cmd_fixed_param; + +typedef enum { + WMI_PPE_ROUTING_DISABLED = 0, + WMI_AST_USE_PPE_ENABLED = 1, + WMI_AST_USE_PPE_DISABLED = 2, + WMI_PPE_ROUTING_TYPE_MAX, +} WMI_PPE_ROUTING_TYPE; + typedef struct { /** TLV tag and len; tag equals * WMITLV_TAG_STRUC_wmi_pdev_multiple_vdev_restart_resp_event_fixed_param */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 5e4a69ba30e1..db0fba7f9237 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_ 1018 +#define __WMI_REVISION_ 1019 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work