diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 07d2c3e4e544..ce31fc216f6f 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -548,6 +548,14 @@ typedef enum { WMI_SERVICE_DYN_NSS_MASK_SUPPORT = 303, /* Indicates FW support for DYN NSS feature */ WMI_SERVICE_HW_MODE_POLICY_OFFLOAD_SUPPORT = 304, /* FW supports HW mode selection offload */ WMI_SERVICE_THERMAL_THROT_STATS_TEMP_RANGE_SUPPORT = 305, /* FW supports thermal throttling temperature range stats based on wmi_thermal_stats_action */ + /* + * Indicates FW support for spatial reuse enhancements. + * Below commands are added for the enhancements: + * WMI_PDEV_PARAM_OBSS_MIN_DURATION_CHECK_FOR_SR, + * WMI_PDEV_PARAM_TRUNCATE_SR, + * WMI_PDEV_PARAM_CTRL_FRAME_OBSS_PD_THRESHOLD + */ + WMI_SERVICE_SPATIAL_REUSE_ENHANCEMENT_SUPPORT = 306, WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index db9b54ffdac8..bd71fefeaf68 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -7680,6 +7680,53 @@ typedef enum { */ WMI_PDEV_PARAM_SCAN_RADIO_TX_ON_DFS, + /* + * Param to configure Minimum OBSS ppdu time below which + * spatial reuse will not happen over the TXOP duration of the OBSS frame. + * If the incoming OBSS frame ppdu duration is greater then the value + * configured, then spatial reuse can happen over the OBSS PPDU. + * The value is configured in microseconds. + */ + WMI_PDEV_PARAM_OBSS_MIN_DURATION_CHECK_FOR_SR, + + /* + * Param to Enable/Disable Truncate SR feature. + * PPDUs transmitted using SR opportunity will be truncated at the end + * of OBSS frame duration and will not extend beyond. + */ + WMI_PDEV_PARAM_TRUNCATE_SR, + + /* Parameter used to configure separate NON_SRG/SRG OBSS PD threshold for + * for Control Frame. + * (SRG = Spatial Reuse Group) + * The accepted values are in between 0x00 and 0xFF, inclusive. + * The parameter value is checked against the RSSI of the OBSS Control + * frame. If RSSI is below the parameter value, then the Control frame is + * aborted and NAV is ignored. Separate OBSS PD threshold for Control frame + * is added to account for the higher TX power used for such control frames + * when compared with data frames. + * + * The input value will be interpreted as a signed value in dBm units. + * + * The values will be reflected in the registers only if + * SRG / non-srg based spatial reuse is enabled via + * WMI_PDEV_PARAM_SET_CMD_OBSS_PD_THRESHOLD cmd. + * bit | purpose + * ----------------- + * 0 - 7 | Param Value for non-srg OBSS PD threshold for non-SRG + * | control frames + * 8 - 15| Param Value for srg OBSS PD threshold for SRG control frames + * 16 - 29| Reserved + * 30 | Enable/Disable separate SRG based spatial reuse for OBSS + * | control frames. + * | If set to 0, ignore bits 8-15. + * 31 | Enable/Disable separate non-SRG based spatial reuse for OBSS + * | control frames. + * | If set to 0, ignore bits 0-7. + */ + WMI_PDEV_PARAM_CTRL_FRAME_OBSS_PD_THRESHOLD, + + } WMI_PDEV_PARAM; #define WMI_PDEV_ONLY_BSR_TRIG_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 0, 1) @@ -7739,6 +7786,18 @@ typedef enum { #define WMI_PDEV_SRP_ENABLE_PER_AC_SET(per_ac_cfg, value) WMI_SET_BITS(per_ac_cfg, 16, 4, value) #define WMI_PDEV_SRP_ENABLE_PER_AC_GET(per_ac_cfg) WMI_GET_BITS(per_ac_cfg, 16, 4) +#define WMI_PDEV_IS_NON_SRG_SEP_PD_THRESH_CTRL_FRAME_ENABLED(pd_threshold_cfg) WMI_GET_BITS(pd_threshold_cfg, 31, 1) +#define WMI_PDEV_NON_SRG_SEP_PD_THRESH_CTRL_FRAME_ENABLE(pd_threshold_cfg) WMI_SET_BITS(pd_threshold_cfg, 31, 1, 1) +#define WMI_PDEV_NON_SRG_SEP_PD_THRESH_CTRL_FRAME_DISABLE(pd_threshold_cfg) WMI_SET_BITS(pd_threshold_cfg, 31, 1, 0) +#define WMI_PDEV_NON_SRG_SEP_PD_THRESH_CTRL_FRAME_SET(pd_threshold_cfg, value) WMI_SET_BITS(pd_threshold_cfg, 0, 8, value) +#define WMI_PDEV_NON_SRG_SEP_PD_THRESH_CTRL_FRAME_GET(pd_threshold_cfg) WMI_GET_BITS(pd_threshold_cfg, 0, 8) + +#define WMI_PDEV_IS_SRG_SEP_PD_THRESH_CTRL_FRAME_ENABLED(pd_threshold_cfg) WMI_GET_BITS(pd_threshold_cfg, 30, 1) +#define WMI_PDEV_SRG_SEP_PD_THRESH_CTRL_FRAME_ENABLE(pd_threshold_cfg) WMI_SET_BITS(pd_threshold_cfg, 30, 1, 1) +#define WMI_PDEV_SRG_SEP_PD_THRESH_CTRL_FRAME_DISABLE(pd_threshold_cfg) WMI_SET_BITS(pd_threshold_cfg, 30, 1, 0) +#define WMI_PDEV_SRG_SEP_PD_THRESH_CTRL_FRAME_SET(pd_threshold_cfg, value) WMI_SET_BITS(pd_threshold_cfg, 8, 8, value) +#define WMI_PDEV_SRG_SEP_PD_THRESH_CTRL_FRAME_GET(pd_threshold_cfg) WMI_GET_BITS(pd_threshold_cfg, 8, 8) + typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_set_param_cmd_fixed_param */ /** pdev_id for identifying the MAC diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 6bcd41919c56..20a5192e2c11 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_ 1053 +#define __WMI_REVISION_ 1054 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work