diff --git a/fw/htt.h b/fw/htt.h index fae6efdb9419..1242e57d98ff 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -206,9 +206,10 @@ * 3.82 Add WIN_SIZE field to HTT_T2H_MSG_TYPE_RX_DELBA msg. * 3.83 Shrink seq_idx field in HTT PPDU ID from 3 bits to 2. * 3.84 Add fisa_control_bits_v2 def. + * 3.85 Add HTT_RX_PEER_META_DATA defs. */ #define HTT_CURRENT_VERSION_MAJOR 3 -#define HTT_CURRENT_VERSION_MINOR 84 +#define HTT_CURRENT_VERSION_MINOR 85 #define HTT_NUM_TX_FRAG_DESC 1024 @@ -14138,5 +14139,126 @@ PREPACK struct htt_ppdu_id { ((_var) |= ((_val) << HTT_PPDU_ID_SEQ_CMD_TYPE_S)); \ } while (0) +/** + * @brief target -> RX PEER METADATA V0 format + * Host will know the peer metadata version from the wmi_service_ready_ext2 + * message from target, and will confirm to the target which peer metadata + * version to use in the wmi_init message. + * + * The following diagram shows the format of the RX PEER METADATA. + * + * |31 24|23 16|15 8|7 0| + * |-----------------------------------------------------------------------| + * | Reserved | VDEV ID | PEER ID | + * |-----------------------------------------------------------------------| + */ +PREPACK struct htt_rx_peer_metadata_v0 { + A_UINT32 + peer_id: 16, + vdev_id: 8, + reserved1: 8; +} POSTPACK; + +#define HTT_RX_PEER_META_DATA_V0_PEER_ID_S 0 +#define HTT_RX_PEER_META_DATA_V0_PEER_ID_M 0x0000ffff +#define HTT_RX_PEER_META_DATA_V0_PEER_ID_GET(_var) \ + (((_var) & HTT_RX_PEER_META_DATA_V0_PEER_ID_M) >> HTT_RX_PEER_META_DATA_V0_PEER_ID_S) + +#define HTT_RX_PEER_META_DATA_V0_PEER_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V0_PEER_ID, _val); \ + ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V0_PEER_ID_S)); \ + } while (0) + +#define HTT_RX_PEER_META_DATA_V0_VDEV_ID_S 16 +#define HTT_RX_PEER_META_DATA_V0_VDEV_ID_M 0x00ff0000 +#define HTT_RX_PEER_META_DATA_V0_VDEV_ID_GET(_var) \ + (((_var) & HTT_RX_PEER_META_DATA_V0_VDEV_ID_M) >> HTT_RX_PEER_META_DATA_V0_VDEV_ID_S) + +#define HTT_RX_PEER_META_DATA_V0_VDEV_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V0_VDEV_ID, _val); \ + ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V0_VDEV_ID_S)); \ + } while (0) + +/** + * @brief target -> RX PEER METADATA V1 format + * Host will know the peer metadata version from the wmi_service_ready_ext2 + * message from target, and will confirm to the target which peer metadata + * version to use in the wmi_init message. + * + * The following diagram shows the format of the RX PEER METADATA V1 format. + * + * |31 29|28 26|25 24|23 16|15 14| 13 |12 0| + * |-----------------------------------------------------------------------| + * |Rsvd2|CHIP ID|LMAC ID| VDEV ID |Rsvd1|ML PEER| SW PEER ID/ML PEER ID| + * |-----------------------------------------------------------------------| + */ +PREPACK struct htt_rx_peer_metadata_v1 { + A_UINT32 + peer_id: 13, + ml_peer_valid: 1, + reserved1: 2, + vdev_id: 8, + lmac_id: 2, + chip_id: 3, + reserved2: 3; +} POSTPACK; + +#define HTT_RX_PEER_META_DATA_V1_PEER_ID_S 0 +#define HTT_RX_PEER_META_DATA_V1_PEER_ID_M 0x00001fff +#define HTT_RX_PEER_META_DATA_V1_PEER_ID_GET(_var) \ + (((_var) & HTT_RX_PEER_META_DATA_V1_PEER_ID_M) >> HTT_RX_PEER_META_DATA_V1_PEER_ID_S) + +#define HTT_RX_PEER_META_DATA_V1_PEER_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_PEER_ID, _val); \ + ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_PEER_ID_S)); \ + } while (0) + +#define HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_S 13 +#define HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_M 0x00002000 +#define HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_GET(_var) \ + (((_var) & HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_M) >> HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_S) + +#define HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID, _val); \ + ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_S)); \ + } while (0) + +#define HTT_RX_PEER_META_DATA_V1_VDEV_ID_S 16 +#define HTT_RX_PEER_META_DATA_V1_VDEV_ID_M 0x00ff0000 +#define HTT_RX_PEER_META_DATA_V1_VDEV_ID_GET(_var) \ + (((_var) & HTT_RX_PEER_META_DATA_V1_VDEV_ID_M) >> HTT_RX_PEER_META_DATA_V1_VDEV_ID_S) + +#define HTT_RX_PEER_META_DATA_V1_VDEV_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_VDEV_ID, _val); \ + ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_VDEV_ID_S)); \ + } while (0) + +#define HTT_RX_PEER_META_DATA_V1_LMAC_ID_S 24 +#define HTT_RX_PEER_META_DATA_V1_LMAC_ID_M 0x03000000 +#define HTT_RX_PEER_META_DATA_V1_LMAC_ID_GET(_var) \ + (((_var) & HTT_RX_PEER_META_DATA_V1_LMAC_ID_M) >> HTT_RX_PEER_META_DATA_V1_LMAC_ID_S) + +#define HTT_RX_PEER_META_DATA_V1_LMAC_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_LMAC_ID, _val); \ + ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_LMAC_ID_S)); \ + } while (0) + +#define HTT_RX_PEER_META_DATA_V1_CHIP_ID_S 26 +#define HTT_RX_PEER_META_DATA_V1_CHIP_ID_M 0x1c000000 +#define HTT_RX_PEER_META_DATA_V1_CHIP_ID_GET(_var) \ + (((_var) & HTT_RX_PEER_META_DATA_V1_CHIP_ID_M) >> HTT_RX_PEER_META_DATA_V1_CHIP_ID_S) + +#define HTT_RX_PEER_META_DATA_V1_CHIP_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1_CHIP_ID, _val); \ + ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1_CHIP_ID_S)); \ + } while (0) + #endif diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index c3add244437e..67e68e01fa1c 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -2824,6 +2824,11 @@ typedef struct { #define WMI_MAX_USER_PER_PPDU_DL_MUMIMO_SET(dword, value) \ WMI_SET_BITS(dword, 16, 16, value) +#define WMI_TARGET_CAP_FLAGS_RX_PEER_METADATA_VERSION_GET(target_cap_flags) \ + WMI_GET_BITS(target_cap_flags, 0, 2) +#define WMI_TARGET_CAP_FLAGS_RX_PEER_METADATA_VERSION_SET(target_cap_flags, value) \ + WMI_SET_BITS(target_cap_flags, 0, 2, value) + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_service_ready_ext2_event_fixed_param.*/ @@ -2887,6 +2892,18 @@ typedef struct { * If max_user_per_ppdu_mumimo == 0 the UL/DL max users are unspecified. */ A_UINT32 max_user_per_ppdu_mumimo; + + /** + * @brief target_cap_flags - flags containing information about target capabilities. + * Bits 1:0 + * Rx peer metadata version number used by target + * 0-> legacy case + * 1-> MLO support + * 2,3-> reserved + * Refer to WMI_TARGET_CAP_FLAGS_PEER_METADATA_VERSION macros. + * Bits 31:2 - Reserved + */ + A_UINT32 target_cap_flags; } wmi_service_ready_ext2_event_fixed_param; typedef struct { @@ -3683,7 +3700,17 @@ typedef struct { * * Refer to the below WMI_RSRC_CFG_FLAGS2_RE_ULRESP_PDEV_CFG_GET/SET * macros. - * Bits 31:4 - Reserved + * Bits 5:4 + * HTT rx peer metadata version number that host supports. + * Firmware intially sends the target supported version number + * as part of service_ready_ext2 message. + * Host can ack the version number that it is using as part of + * this message. + * 0-> legacy case + * 1-> MLO support + * 2-3-> Reserved + * Refer to the WMI_RSRC_CFG_FLAGS2_RX_PEER_METADATA_VERSION macros. + * Bits 31:6 - Reserved */ A_UINT32 flags2; /** @brief host_service_flags - can be used by Host to indicate @@ -3940,6 +3967,11 @@ typedef struct { #define WMI_RSRC_CFG_FLAGS2_RE_ULRESP_PDEV_CFG_SET(flags2, pdev_id, value) \ WMI_SET_BITS(flags2, pdev_id, 1, value) +#define WMI_RSRC_CFG_FLAGS2_RX_PEER_METADATA_VERSION_GET(flags2) \ + WMI_GET_BITS(flags2, 4, 2) +#define WMI_RSRC_CFG_FLAGS2_RX_PEER_METADATA_VERSION_SET(flags2, value) \ + WMI_SET_BITS(flags2, 4, 2, value) + #define WMI_RSRC_CFG_HOST_SERVICE_FLAG_NAN_IFACE_SUPPORT_GET(host_service_flags) \ WMI_GET_BITS(host_service_flags, 0, 1) #define WMI_RSRC_CFG_HOST_SERVICE_FLAG_NAN_IFACE_SUPPORT_SET(host_service_flags, val) \ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index f36722e0bd21..58516ac33cc6 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_ 879 +#define __WMI_REVISION_ 880 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work