diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 9007c4b601dd..e03647797902 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -697,6 +697,7 @@ typedef enum { WMI_SERVICE_OPT_DP_DIAG_SUPPORT = 438, /* FW supports diag QDATA feature */ WMI_SERVICE_MLO_ROAM_PARTNER_BRINGUP_FROM_HOST = 439, /* Indicates FW supports new design in which FW expects the host to bringup the partner link during roaming */ WMI_SERVICE_CTRL_PATH_PEER_BA_STATS = 440, /* FW supports retrieving BlockAck stats through WMI_REQUEST_CTRL_PATH_PEER_STAT */ + WMI_SERVICE_CTRL_PATH_STA_DAR_STATS_SUPPORT = 441, /* FW supports DAR stats reporting for STA mode */ WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 5f83c5bbaada..76012e9b04d5 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1479,6 +1479,7 @@ typedef enum { WMITLV_TAG_STRUC_wmi_ndp_set_latency_tput_fixed_param, WMITLV_TAG_STRUC_wmi_roam_partner_link_param, WMITLV_TAG_STRUC_wmi_mlo_link_ttlm_complete_fixed_param, + WMITLV_TAG_STRUC_wmi_ctrl_path_sta_dar_stats_struct, } WMITLV_TAG_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -7273,7 +7274,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_STATS_INFO_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ctrl_path_vdev_bcn_tx_stats_struct, ctrl_path_vdev_bcn_tx_stats, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ctrl_path_pdev_bcn_tx_stats_struct, ctrl_path_pdev_bcn_tx_stats, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ctrl_path_pdev_conn_stats_struct, ctrl_path_pdev_conn_stats, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ctrl_path_ml_rcfg_stats_struct, ctrl_path_ml_rcfg_stats, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ctrl_path_ml_rcfg_stats_struct, ctrl_path_ml_rcfg_stats, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ctrl_path_sta_dar_stats_struct, ctrl_path_sta_dar_stats, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_CTRL_PATH_STATS_EVENTID); /* diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 9d529930df03..61c640efd4ea 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -16679,6 +16679,40 @@ typedef struct { A_UINT32 dot11RTSFailureCount; } wmi_ctrl_path_sta_rrm_stats_struct; +typedef struct { + /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_ctrl_path_sta_dar_stats_struct */ + A_UINT32 tlv_header; + A_UINT32 vdev_id; + A_UINT32 stats_granularity; /* Possible values are listed in wmi_ctrl_path_stats_granularity enum. */ + /* transmit_pwr: + * Units are dB w.r.t. a -20 dBm reference. + * For example, if the STA's tx power is 10 dBm, the transmit_pwr field's + * value will be 30. + */ + A_UINT32 transmit_pwr; + A_UINT32 cca_busy_cnt; + A_UINT32 cycle_cnt; + /* + * For the below 8-element arrays, in case of AC-level granularity, + * only the first 4 elements of the array are populated, and are indexed + * by wmi_traffic_ac enum values. + * Otherwise, for TID level granularity all 8 elements of the array will + * be filled by FW, and are indexed by the TID value. + */ + A_UINT32 success_mpdu_tx_cnt[8]; + A_UINT32 dropped_mpdu_tx_cnt[8]; + A_UINT32 rts_success_cnt[8]; + A_UINT32 rts_fail_cnt[8]; + A_UINT32 fcs_fail_cnt[8]; /* number of rx MPDUs whose FCS check failed */ + /* ack_fail_cnt: + * number of tx MPDUs nacked within a block ack, + * or for which no block ack was received. + */ + A_UINT32 ack_fail_cnt[8]; + A_UINT32 ba_nego_fail_cnt; + A_UINT32 beacon_loss_cnt; +} wmi_ctrl_path_sta_dar_stats_struct; + typedef struct { /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_ctrl_path_vdev_bcn_stats_struct */ A_UINT32 tlv_header; @@ -36618,6 +36652,7 @@ typedef enum { WMI_REQUEST_CTRL_PATH_PDEV_BCN_TX_STAT = 20, WMI_REQUEST_CTRL_PATH_PDEV_CONN_STAT = 21, WMI_REQUEST_CTRL_PATH_ML_RECONFIG_STAT = 22, + WMI_REQUEST_CTRL_PATH_STA_DAR_STAT = 23, } wmi_ctrl_path_stats_id; typedef enum { @@ -36637,6 +36672,16 @@ typedef enum { WMI_REQUEST_CTRL_PATH_STAT_PERIODIC_PUBLISH = 5, } wmi_ctrl_path_stats_action; +typedef enum { + /* + * The following stats actions are mutually exclusive. + * A single stats request message can only specify one action. + */ + WMI_REQUEST_CTRL_PATH_STAT_DEFAULT = 0, /* unspecified granularity */ + WMI_REQUEST_CTRL_PATH_STAT_AC_LEVEL = 1, + WMI_REQUEST_CTRL_PATH_STAT_TID_LEVEL = 2, +} wmi_ctrl_path_stats_granularity; + typedef enum { WMI_HALPHY_CTRL_PATH_SU_STATS = 0, WMI_HALPHY_CTRL_PATH_SUTXBF_STATS, @@ -36673,6 +36718,13 @@ typedef struct { */ A_UINT32 stat_periodicity; + /** stats_granularity: + * Configures AC vs. TID granularity stats reporting, + * e.g. for STA_DAR_STATs. + * Possible values are listed in the wmi_ctrl_path_stats_granularity enum. + */ + A_UINT32 stats_granularity; /* refer to wmi_ctrl_path_stats_granularity */ + /** 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 diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 37409f2c28ee..daf771ced9b5 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_ 1594 +#define __WMI_REVISION_ 1595 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work