diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index c4c8a83af1f5..876116c38ab1 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1153,6 +1153,9 @@ typedef enum { WMITLV_TAG_STRUC_wmi_pdev_extd_stats, WMITLV_TAG_STRUC_wmi_peer_assoc_mlo_params, WMITLV_TAG_STRUC_wmi_vdev_smart_monitor_event_fixed_param, + WMITLV_TAG_STRUC_wmi_mgmt_rx_reo_params, + WMITLV_TAG_STRUC_wmi_mgmt_rx_fw_consumed_hdr, + WMITLV_TAG_STRUC_wmi_mgmt_rx_reo_filter_configuration_cmd_fixed_param, } WMITLV_TAG_ID; /* @@ -1615,6 +1618,7 @@ typedef enum { OP(WMI_MLO_READY_CMDID) \ OP(WMI_MLO_TEARDOWN_CMDID) \ OP(WMI_VDEV_IGMP_OFFLOAD_CMDID) \ + OP(WMI_MGMT_RX_REO_FILTER_CONFIGURATION_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -1881,6 +1885,7 @@ typedef enum { OP(WMI_MLO_SETUP_COMPLETE_EVENTID) \ OP(WMI_MLO_TEARDOWN_COMPLETE_EVENTID) \ OP(WMI_VDEV_SMART_MONITOR_EVENTID) \ + OP(WMI_MGMT_RX_FW_CONSUMED_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -4658,6 +4663,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_MLO_TEARDOWN_CMDID); WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_ARRAY_FIXED_STRUC, WMI_IPV4_ADDR, mc_ipv4_list, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_IGMP_OFFLOAD_CMDID); +/* WMI CMD to receive the management filter criteria from the host for Rx REO */ +#define WMITLV_TABLE_WMI_MGMT_RX_REO_FILTER_CONFIGURATION_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mgmt_rx_reo_filter_configuration_cmd_fixed_param, wmi_mgmt_rx_reo_filter_configuration_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_MGMT_RX_REO_FILTER_CONFIGURATION_CMDID); + /************************** TLV definitions of WMI events *******************************/ @@ -4900,9 +4910,15 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_STA_KICKOUT_EVENTID); #define WMITLV_TABLE_WMI_MGMT_RX_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mgmt_rx_hdr, wmi_mgmt_rx_hdr, hdr, 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_rssi_ctl_ext, rssi_ctl_ext, WMITLV_SIZE_VAR) + 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_CREATE_PARAM_STRUC(WMI_MGMT_RX_EVENTID); +/* Management Rx FW Consumed Event */ +#define WMITLV_TABLE_WMI_MGMT_RX_FW_CONSUMED_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mgmt_rx_fw_consumed_hdr, wmi_mgmt_rx_fw_consumed_hdr, hdr, WMITLV_SIZE_FIX) + WMITLV_CREATE_PARAM_STRUC(WMI_MGMT_RX_FW_CONSUMED_EVENTID); + /* TBTT offset Event */ #define WMITLV_TABLE_WMI_TBTTOFFSET_UPDATE_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_tbtt_offset_event_fixed_param, wmi_tbtt_offset_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index e30aaaa27427..d4d97d7fdc9a 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -678,6 +678,8 @@ typedef enum { WMI_FD_TMPL_CMDID, /** Transmit QoS null Frame over wmi interface */ WMI_QOS_NULL_FRAME_TX_SEND_CMDID, + /** WMI CMD to receive the management filter criteria from the host for RX REO */ + WMI_MGMT_RX_REO_FILTER_CONFIGURATION_CMDID, /** commands to directly control ba negotiation directly from host. only used in test mode */ @@ -1686,6 +1688,9 @@ typedef enum { /** Event for QoS null frame TX completion */ WMI_QOS_NULL_FRAME_TX_COMPLETION_EVENTID, + /** WMI event for Firmware Consumed/Dropped Rx management frames indication */ + WMI_MGMT_RX_FW_CONSUMED_EVENTID, + /* ADDBA Related WMI Events*/ /** Indication the completion of the prior @@ -5058,6 +5063,79 @@ typedef struct { #define MAX_ANTENNA_EIGHT 8 + +/** Helper macro for params GET/SET of MGMT_RX_FW_CONSUMED_EVENTID */ +#define WMI_MGMT_RX_FW_CONSUMED_PARAM_PEER_ID_GET(peer_info_subtype) WMI_GET_BITS(peer_info_subtype, 0, 16) +#define WMI_MGMT_RX_FW_CONSUMED_PARAM_PEER_ID_SET(peer_info_subtype, value) WMI_SET_BITS(peer_info_subtype, 0, 16, value) + +#define WMI_MGMT_RX_FW_CONSUMED_PARAM_IEEE_LINK_ID_GET(peer_info_subtype) WMI_GET_BITS(peer_info_subtype, 16, 3) +#define WMI_MGMT_RX_FW_CONSUMED_PARAM_IEEE_LINK_ID_SET(peer_info_subtype, value) WMI_SET_BITS(peer_info_subtype, 16, 3, value) + +#define WMI_MGMT_RX_FW_CONSUMED_PARAM_SUBTYPE_GET(peer_info_subtype) WMI_GET_BITS(peer_info_subtype, 28, 4) +#define WMI_MGMT_RX_FW_CONSUMED_PARAM_SUBTYPE_SET(peer_info_subtype, value) WMI_SET_BITS(peer_info_subtype, 28, 4, value) + +#define WMI_MGMT_RX_FW_CONSUMED_PARAM_MGMT_PKT_CTR_VALID_GET(mgmt_pkt_ctr_info) WMI_GET_BITS(mgmt_pkt_ctr_info, 15, 1) +#define WMI_MGMT_RX_FW_CONSUMED_PARAM_MGMT_PKT_CTR_VALID_SET(mgmt_pkt_ctr_info, value) WMI_SET_BITS(mgmt_pkt_ctr_info, 15, 1, value) + +#define WMI_MGMT_RX_FW_CONSUMED_PARAM_MGMT_PKT_CTR_GET(mgmt_pkt_ctr_info) WMI_GET_BITS(mgmt_pkt_ctr_info, 16, 16) +#define WMI_MGMT_RX_FW_CONSUMED_PARAM_MGMT_PKT_CTR_SET(mgmt_pkt_ctr_info, value) WMI_SET_BITS(mgmt_pkt_ctr_info, 16, 16, value) + +typedef struct { + A_UINT32 tlv_header; /* WMITLV_TAG_STRUCT_wmi_mgmt_rx_fw_consumed_hdr */ + A_UINT32 rx_tsf_l32; /* h/w assigned timestamp of the rx frame in micro sec */ + A_UINT32 rx_tsf_u32 ;/* h/w assigned timestamp of the rx frame in micro sec */ + A_UINT32 pdev_id; /* pdev_id for identifying the MAC the rx mgmt frame was received by */ + /** + * peer_info_subtype + * + * [15:0]: ml_peer_id, ML peer_id unique across chips + * [18:16]: ieee_link_id, protocol link id on which the rx frame is received + * [27:19]: reserved + * [31:28]: subtype, subtype of the received MGMT frame + */ + A_UINT32 peer_info_subtype; + A_UINT32 chan_freq; /* frequency in MHz of the channel on which this frame was received */ + /* Timestamp (in micro sec) of the last fw consumed/dropped mgmt. frame, same across chips */ + A_UINT32 global_timestamp; + /** + * mgmt_pkt_ctr_info + * + * [14:0]: reserved + * [15]: mgmt_pkt_ctr_valid + * [31:16]: mgmt_pkt_ctr, Sequence number of the last fw consumed mgmt frame + */ + A_UINT32 mgmt_pkt_ctr_info; +} wmi_mgmt_rx_fw_consumed_hdr; + +/** Helper macro for param GET/SET of mgmt_rx_reo_params */ +#define WMI_MGMT_RX_REO_PARAM_IEEE_LINK_ID_GET(mgmt_pkt_ctr_link_info) WMI_GET_BITS(mgmt_pkt_ctr_link_info, 12, 3) +#define WMI_MGMT_RX_REO_PARAM_IEEE_LINK_ID_SET(mgmt_pkt_ctr_link_info, value) WMI_SET_BITS(mgmt_pkt_ctr_link_info, 12, 3, value) + +#define WMI_MGMT_RX_REO_PARAM_MGMT_PKT_CTR_VALID_GET(mgmt_pkt_ctr_link_info) WMI_GET_BITS(mgmt_pkt_ctr_link_info, 15, 1) +#define WMI_MGMT_RX_REO_PARAM_MGMT_PKT_CTR_VALID_SET(mgmt_pkt_ctr_link_info, value) WMI_SET_BITS(mgmt_pkt_ctr_link_info, 15, 1, value) + +#define WMI_MGMT_RX_REO_PARAM_MGMT_PKT_CTR_GET(mgmt_pkt_ctr_link_info) WMI_GET_BITS(mgmt_pkt_ctr_link_info, 16, 16) +#define WMI_MGMT_RX_REO_PARAM_MGMT_PKT_CTR_SET(mgmt_pkt_ctr_link_info, value) WMI_SET_BITS(mgmt_pkt_ctr_link_info, 16, 16, value) + +/** Data structure of the TLV to add in RX EVENTID for providing REO params + * like global_timestamp and mgmt_pkt_ctr + */ +typedef struct { + A_UINT32 tlv_header; /*TLV WMITLV_TAG_STRUC_wmi_mgmt_rx_reo_params*/ + /* Timestamp (in micro sec) of the last fw forwarded mgmt. frame, same across chips */ + A_UINT32 global_timestamp; + /** + * mgmt_pkt_ctr_link_info + * + * [11:0]: reserved + * [14:12]: ieee_link_id, protocol link id on which the rx frame is received + * [15]: mgmt_pkt_ctr_valid + * [31:16]: mgmt_pkt_ctr, Sequence number of the last fw forwarded mgmt frame + */ + + A_UINT32 mgmt_pkt_ctr_link_info; +} wmi_mgmt_rx_reo_params; + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_mgmt_rx_hdr */ /** channel on which this frame is received (channel number) */ @@ -5112,8 +5190,30 @@ typedef struct { /* This TLV is optionally followed by array of struct: * wmi_rssi_ctl_ext rssi_ctl_ext; */ +/* + * This TLV is followed by struct: + * wmi_mgmt_rx_reo_params reo_params;// MGMT rx REO params + */ } wmi_mgmt_rx_hdr; +/* WMI CMD to receive the management filter criteria from the host */ +typedef struct { + A_UINT32 tlv_header; /* WMITLV_TAG_STRUC_wmi_mgmt_reo_filter_cmd_fixed_param */ + A_UINT32 pdev_id; /* pdev_id for identifying the MAC */ + /* filter: + * Each bit represents the possible combination of frame type (2 bits) + * and subtype (4 bits) + * There would be 64 such combinations as per the 802.11 standard + * For Exp : We have beacon frame, we will take the type and subtype + * of this frame and concatenate the bits, it will give 6 bits + * number. We need to go to that bit position in the below + * 2 filter_low and filter_high bitmap and set the bit. + */ + A_UINT32 filter_low; + A_UINT32 filter_high; +} wmi_mgmt_rx_reo_filter_configuration_cmd_fixed_param; + + typedef enum { PKT_CAPTURE_MODE_DISABLE = 0, PKT_CAPTURE_MODE_MGMT_ONLY, @@ -28602,6 +28702,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_MLO_READY_CMDID); WMI_RETURN_STRING(WMI_MLO_TEARDOWN_CMDID); WMI_RETURN_STRING(WMI_VDEV_IGMP_OFFLOAD_CMDID); + WMI_RETURN_STRING(WMI_MGMT_RX_REO_FILTER_CONFIGURATION_CMDID); } return "Invalid WMI cmd"; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 1e2083cb623c..7fb107d18355 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_ 993 +#define __WMI_REVISION_ 994 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work