diff --git a/fw/wmi_services.h b/fw/wmi_services.h index f0a53be80981..21960d2e23b9 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -209,6 +209,7 @@ typedef enum { WMI_SERVICE_CHAN_LOAD_INFO=128, /* The values in WMI_CHAN_INFO_EVENTID is the difference in cycle counters */ WMI_SERVICE_TX_PPDU_INFO_STATS_SUPPORT=129, /* support to report tx ppdu info stats via htt events */ + WMI_SERVICE_VDEV_LIMIT_OFFCHAN_SUPPORT=130, /* support to report the offchannel duration limiting capability on connected interface */ /******* ADD NEW SERVICES HERE *******/ diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 2e81ebe2528d..04a5cce5dccb 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -837,6 +837,7 @@ typedef enum { WMITLV_TAG_STRUC_wmi_pdev_bss_chan_info_request_fixed_param, WMITLV_TAG_STRUC_wmi_pdev_bss_chan_info_event_fixed_param, WMITLV_TAG_STRUC_wmi_roam_lca_disallow_config_tlv_param, + WMITLV_TAG_STRUC_wmi_vdev_limit_offchan_cmd_fixed_param, } WMITLV_TAG_ID; /* @@ -1172,6 +1173,7 @@ typedef enum { OP(WMI_THERM_THROT_SET_CONF_CMDID) \ OP(WMI_OEM_DMA_RING_CFG_REQ_CMDID) \ OP(WMI_PDEV_BSS_CHAN_INFO_REQUEST_CMDID) \ + OP(WMI_VDEV_LIMIT_OFFCHAN_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -2199,6 +2201,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_BSS_CHAN_INFO_REQUEST_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_get_tx_power_cmd_fixed_param, wmi_vdev_get_tx_power_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_GET_TX_POWER_CMDID); +/* Limit Offchannel duration Cmd */ +#define WMITLV_TABLE_WMI_VDEV_LIMIT_OFFCHAN_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_limit_offchan_cmd_fixed_param, wmi_vdev_limit_offchan_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_LIMIT_OFFCHAN_CMDID); + /* PDEV Set Base Mac Address Cmd */ #define WMITLV_TABLE_WMI_PDEV_SET_BASE_MACADDR_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_set_base_macaddr_cmd_fixed_param, wmi_pdev_set_base_macaddr_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index bfc919736fe9..60943a78745e 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -431,6 +431,8 @@ typedef enum { /** get tx power for the current vdev */ WMI_VDEV_GET_TX_POWER_CMDID, + /* limit STA offchannel activity */ + WMI_VDEV_LIMIT_OFFCHAN_CMDID, /* peer specific commands */ @@ -3885,6 +3887,26 @@ typedef struct { A_UINT32 vdev_id; /** unique id identifying the VDEV, generated by the caller */ } wmi_vdev_get_tx_power_event_fixed_param; +typedef enum { + /** Limit the offchannel duration */ + WMI_VDEV_LIMIT_OFFCHAN_ENABLE = 0x1, + /** Skip DFS channels from Scan channel list. + * valid for both host scans and FW scans */ + WMI_VDEV_LIMIT_OFFCHAN_SKIP_DFS = 0x2, +} wmi_vdev_limit_offchan_flags; + +typedef struct { + A_UINT32 tlv_header; /* WMITLV_TAG_STRUC_wmi_vdev_limit_offchan_cmd_fixed_param */ + /** Limit the duration of offchannel events requested by the vdev corresponding to the specified vdev_id */ + A_UINT32 vdev_id; + /** see enum wmi_vdev_limit_offchan_flags */ + A_UINT32 flags; + /** max offchannel time allowed in msec when WMI_VDEV_LIMIT_OFFCHAN_ENABLE flag is set */ + A_UINT32 max_offchan_time; + /** rest time in msec on the BSS channel */ + A_UINT32 rest_time; +} wmi_vdev_limit_offchan_cmd_fixed_param; + #define WMI_CSA_EVENT_QSBW_ISE_ID_MASK 0x000000FF /* information sub element id for QSBW, expected value is 0x02 */ #define WMI_CSA_EVENT_QSBW_ISE_LEN_MASK 0x0000FF00 /* length of QSBW ISE data, expected value is 0x02 */ #define WMI_CSA_EVENT_QSBW_ISE_CAP_MASK 0x00FF0000 /* capabilities, 0x01 for 5MHz, 0x02 for 10MHz, 0x01|0x2 for both (see WMI_CSA_EVENT_QSBW_ISE bitmask defs) */ @@ -19376,6 +19398,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_THERM_THROT_SET_CONF_CMDID); WMI_RETURN_STRING(WMI_OEM_DMA_RING_CFG_REQ_CMDID); WMI_RETURN_STRING(WMI_PDEV_BSS_CHAN_INFO_REQUEST_CMDID); + WMI_RETURN_STRING(WMI_VDEV_LIMIT_OFFCHAN_CMDID); } return "Invalid WMI cmd"; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index b45b715852e4..4e568ced0a32 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_ 406 +#define __WMI_REVISION_ 407 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work