diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 4d6f456fab..0abda37720 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1272,6 +1272,8 @@ typedef enum { WMITLV_TAG_STRUC_wmi_roam_enable_vendor_control_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_roam_get_vendor_control_param_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_roam_get_vendor_control_param_event_fixed_param, + WMITLV_TAG_STRUC_wmi_request_halphy_ctrl_path_stats_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_halphy_ctrl_path_stats_event_fixed_param, } WMITLV_TAG_ID; /* @@ -1768,6 +1770,7 @@ typedef enum { OP(WMI_MLO_PEER_TID_TO_LINK_MAP_CMDID) \ OP(WMI_ROAM_ENABLE_VENDOR_CONTROL_CMDID) \ OP(WMI_ROAM_GET_VENDOR_CONTROL_PARAM_CMDID) \ + OP(WMI_REQUEST_HALPHY_CTRL_PATH_STATS_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -2055,6 +2058,7 @@ typedef enum { OP(WMI_PMM_SCRATCH_REG_ALLOCATION_COMPLETE_EVENTID) \ OP(WMI_VDEV_LATENCY_LEVEL_EVENTID) \ OP(WMI_ROAM_GET_VENDOR_CONTROL_PARAM_EVENTID) \ + OP(WMI_HALPHY_CTRL_PATH_STATS_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -4405,6 +4409,14 @@ WMITLV_CREATE_PARAM_STRUC(WMI_REQUEST_PEER_STATS_INFO_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, odd_addr_read_args, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_REQUEST_CTRL_PATH_STATS_CMDID); +/* Request Halphy Stats through Ctrl Path */ +#define WMITLV_TABLE_WMI_REQUEST_HALPHY_CTRL_PATH_STATS_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_request_halphy_ctrl_path_stats_cmd_fixed_param, wmi_request_halphy_ctrl_path_stats_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)\ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, pdev_ids, WMITLV_SIZE_VAR)\ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, vdev_ids, WMITLV_SIZE_VAR)\ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_FIXED_STRUC, wmi_mac_addr, mac_addr_list, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_REQUEST_HALPHY_CTRL_PATH_STATS_CMDID); + /* Host sets the current country code */ #define WMITLV_TABLE_WMI_SET_CURRENT_COUNTRY_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_set_current_country_cmd_fixed_param, wmi_set_current_country_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -6452,6 +6464,23 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_STATS_INFO_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ctrl_path_afc_stats_struct, ctrl_path_afc_stats, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_CTRL_PATH_STATS_EVENTID); +/* + * Update HALPHY Control Path stats event + * Below definition shows TLV packing of HALPHY ctrl path event + * Special Patch code is needed on host side to have compatible + * HOST Endianness + */ +#define WMITLV_TABLE_WMI_HALPHY_CTRL_PATH_STATS_EVENTID(id, op, buf, len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_halphy_ctrl_path_stats_event_fixed_param, wmi_halphy_ctrl_path_stats_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_tpc_configs, tpc_configs, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_max_reg_power_allowed, regulatory_power, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_INT16, A_INT16, reg_buf, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_tpc_rates_array, tpc_rates, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_INT16, A_UINT16, rates_buf, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_tpc_ctl_pwr_table, ctl_power, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_INT8, ctl_buf, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_HALPHY_CTRL_PATH_STATS_EVENTID); + #define WMITLV_TABLE_WMI_RADIO_CHAN_STATS_EVENTID(id, op, buf, len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_radio_chan_stats_event_fixed_param, wmi_radio_chan_stats_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_radio_chan_stats, radio_chan_stats, WMITLV_SIZE_VAR) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index f43529b2f6..15041db0cd 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -1020,6 +1020,9 @@ typedef enum { /** request for thermal stats */ WMI_REQUEST_THERMAL_STATS_CMDID, + /** request for HALPHY stats through ctrl path */ + WMI_REQUEST_HALPHY_CTRL_PATH_STATS_CMDID, + /** ARP OFFLOAD REQUEST*/ WMI_SET_ARP_NS_OFFLOAD_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_ARP_NS_OFL), @@ -1949,6 +1952,11 @@ typedef enum { * and report stats info to host */ WMI_CTRL_PATH_STATS_EVENTID, + /** This event is used to respond to + * WMI_REQUEST_HALPHY_CTRL_PATH_STATS_CMDID and report stats info to host + */ + WMI_HALPHY_CTRL_PATH_STATS_EVENTID, + /* NLO specific events */ /** NLO match event after the first match */ @@ -11511,6 +11519,25 @@ typedef struct { */ } wmi_ctrl_path_stats_event_fixed_param; +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_halphy_ctrl_path_stats_event_fixed_param + */ + A_UINT32 tlv_header; + + /** Process id requested */ + A_UINT32 request_id; + + /* end_of_event - single event or Multiple Event */ + A_UINT32 end_of_event; + + /* + * event_count - If Multiple Events are send, this is to identify + * particular event out of Multiple Events that are send to host + */ + A_UINT32 event_count; +} wmi_halphy_ctrl_path_stats_event_fixed_param; + typedef struct { /** TLV tag and len; tag equals * WMITLV_TAG_STRUC_wmi_radio_chan_stats */ @@ -29530,6 +29557,11 @@ typedef enum { WMI_REQUEST_CTRL_PATH_AFC_STAT = 11, } wmi_ctrl_path_stats_id; +typedef enum { + /* bit 0 is currently unused / reserved */ + WMI_HALPHY_CTRL_PATH_PDEV_TX_STAT = 1, +} wmi_halphy_ctrl_path_stats_id; + typedef enum { /* * The following stats actions are mutually exclusive. @@ -29541,6 +29573,13 @@ typedef enum { WMI_REQUEST_CTRL_PATH_STAT_STOP = 4, } wmi_ctrl_path_stats_action; +typedef enum { + WMI_HALPHY_CTRL_PATH_SU_STATS = 0, + WMI_HALPHY_CTRL_PATH_SUTXBF_STATS, + WMI_HALPHY_CTRL_PATH_MU_STATS, + WMI_HALPHY_CTRL_PATH_MUTXBF_STATS, +} wmi_halphy_ctrl_path_subid; + typedef struct { /** TLV tag and len; tag equals * WMITLV_TAG_STRUC_wmi_request_ctrl_path_stats_cmd_fixed_param */ @@ -29571,6 +29610,44 @@ typedef struct { */ } wmi_request_ctrl_path_stats_cmd_fixed_param; +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_request_halphy_ctrl_path_stats_cmd_fixed_param */ + A_UINT32 tlv_header; + + /** Bitmask showing which of stats IDs 0-31 have been requested. + * These stats ids are defined in enum wmi_halphy_ctrl_path_stats_id. + */ + A_UINT32 stats_id_mask; + /** process id requested */ + A_UINT32 request_id; + /** action + * get/reset based on stats id + * defined as a part of wmi_ctrl_path_stats_action + **/ + A_UINT32 action; /* refer to wmi_ctrl_path_stats_action */ + + /** Request Halphy subid stats + * According to the requested stats_id_mask this halphy_subid varies + * For stats_id = 1, the possible values could be enum + * wmi_halphy_ctrl_path_halphyid + */ + A_UINT32 halphy_subid; + + /** The below TLV arrays optionally follow this fixed_param TLV structure: + * 1. A_UINT32 pdev_ids[]; + * If this array is present and non-zero length, stats should only + * be provided from the pdevs identified in the array. + * 2. A_UINT32 vdev_ids[]; + * If this array is present and non-zero length, stats should only + * be provided from the vdevs identified in the array. + * 3. wmi_mac_addr peer_macaddr[]; + * If this array is present and non-zero length, stats should only + * be provided from the peers with the MAC addresses specified + * in the array. + */ +} wmi_request_halphy_ctrl_path_stats_cmd_fixed_param; + typedef enum { WMI_REQUEST_ONE_RADIO_CHAN_STATS = 0x01, /* request stats of one specified channel */ WMI_REQUEST_ALL_RADIO_CHAN_STATS = 0x02, /* request stats of all channels */ @@ -31412,6 +31489,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_MLO_PEER_TID_TO_LINK_MAP_CMDID); WMI_RETURN_STRING(WMI_ROAM_ENABLE_VENDOR_CONTROL_CMDID); WMI_RETURN_STRING(WMI_ROAM_GET_VENDOR_CONTROL_PARAM_CMDID); + WMI_RETURN_STRING(WMI_REQUEST_HALPHY_CTRL_PATH_STATS_CMDID); } return (A_UINT8 *) "Invalid WMI cmd"; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index d964817fbf..5507281587 100644 --- a/fw/wmi_version.h +++ b/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_ 1151 +#define __WMI_REVISION_ 1152 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work