summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xfw/wmi_tlv_defs.h18
-rwxr-xr-xfw/wmi_unified.h71
-rwxr-xr-xfw/wmi_version.h2
3 files changed, 83 insertions, 8 deletions
diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h
index a20d0ceff631..80684dc61656 100755
--- a/fw/wmi_tlv_defs.h
+++ b/fw/wmi_tlv_defs.h
@@ -839,6 +839,8 @@ typedef enum {
WMITLV_TAG_STRUC_wmi_roam_lca_disallow_config_tlv_param,
WMITLV_TAG_STRUC_wmi_vdev_limit_offchan_cmd_fixed_param,
WMITLV_TAG_STRUC_wmi_roam_rssi_rejection_oce_config_param,
+ WMITLV_TAG_STRUC_wmi_roam_rejection_list_config_param = /* alias */
+ WMITLV_TAG_STRUC_wmi_roam_rssi_rejection_oce_config_param,
WMITLV_TAG_STRUC_wmi_unit_test_event_fixed_param,
WMITLV_TAG_STRUC_wmi_roam_fils_offload_tlv_param,
WMITLV_TAG_STRUC_wmi_pdev_update_pmk_cache_cmd_fixed_param,
@@ -951,6 +953,8 @@ typedef enum {
WMITLV_TAG_STRUC_wmi_tlv_arrays_len_param,
WMITLV_TAG_STRUC_wmi_peer_unmap_response_cmd_fixed_param,
WMITLV_TAG_STRUC_wmi_pdev_csc_switch_count_status_event_fixed_param,
+ WMITLV_TAG_STRUC_wmi_roam_bss_load_config_cmd_fixed_param,
+ WMITLV_TAG_STRUC_wmi_roam_blacklist_event_fixed_param,
} WMITLV_TAG_ID;
/*
@@ -1341,6 +1345,7 @@ typedef enum {
OP(WMI_VDEV_GET_BCN_RECEPTION_STATS_CMDID) \
OP(WMI_PEER_TX_PN_REQUEST_CMDID) \
OP(WMI_PEER_UNMAP_RESPONSE_CMDID) \
+ OP(WMI_ROAM_BSS_LOAD_CONFIG_CMDID) \
/* add new CMD_LIST elements above this line */
@@ -1556,6 +1561,7 @@ typedef enum {
OP(WMI_VDEV_BCN_RECEPTION_STATS_EVENTID) \
OP(WMI_PEER_TX_PN_RESPONSE_EVENTID) \
OP(WMI_PDEV_CSC_SWITCH_COUNT_STATUS_EVENTID) \
+ OP(WMI_ROAM_BLACKLIST_EVENTID) \
/* add new EVT_LIST elements above this line */
@@ -2967,6 +2973,16 @@ WMITLV_CREATE_PARAM_STRUC(WMI_LPI_STOP_SCAN_CMDID);
WMITLV_CREATE_PARAM_STRUC(WMI_REQUEST_ROAM_SCAN_STATS_CMDID);
+/* BSS load parameters for roam trigger */
+#define WMITLV_TABLE_WMI_ROAM_BSS_LOAD_CONFIG_CMDID(id,op,buf,len) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_bss_load_config_cmd_fixed_param, wmi_roam_bss_load_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)
+WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_BSS_LOAD_CONFIG_CMDID);
+
+#define WMITLV_TABLE_WMI_ROAM_BLACKLIST_EVENTID(id,op,buf,len) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_blacklist_event_fixed_param, wmi_roam_blacklist_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_blacklist_with_timeout_tlv_param, blacklist_with_timeout, WMITLV_SIZE_VAR)
+WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_BLACKLIST_EVENTID);
+
#define WMITLV_TABLE_WMI_LPI_RESULT_EVENTID(id,op,buf,len) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_lpi_result_event_fixed_param, wmi_lpi_result_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR)
@@ -3314,7 +3330,7 @@ WMITLV_CREATE_PARAM_STRUC(WMI_DCC_UPDATE_NDL_CMDID);
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_FIXED_STRUC, wmi_mac_addr, bssid_preferred_list, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, bssid_preferred_factor, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_lca_disallow_config_tlv_param, lca_disallow_param, WMITLV_SIZE_VAR) \
- WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_rssi_rejection_oce_config_param, rssi_rejection_list, WMITLV_SIZE_VAR)
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_rejection_list_config_param, rssi_rejection_list, WMITLV_SIZE_VAR)
WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_FILTER_CMDID);
/* TSF timestamp action cmd */
diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h
index baf91fb31d67..7620bb91c01d 100755
--- a/fw/wmi_unified.h
+++ b/fw/wmi_unified.h
@@ -671,7 +671,9 @@ typedef enum {
/** Enable or Disable Fast Initial Link Setup (FILS) feature */
WMI_ENABLE_FILS_CMDID,
/** Request for roam scan stats */
- WMI_REQUEST_ROAM_SCAN_STATS_CMDID,
+ WMI_REQUEST_ROAM_SCAN_STATS_CMDID,
+ /** Configure BSS load parameters for roam trigger */
+ WMI_ROAM_BSS_LOAD_CONFIG_CMDID,
/** offload scan specific commands */
/** set offload scan AP profile */
@@ -1441,7 +1443,9 @@ typedef enum {
/** roam synch frame event */
WMI_ROAM_SYNCH_FRAME_EVENTID,
/** various roam scan stats */
- WMI_ROAM_SCAN_STATS_EVENTID,
+ WMI_ROAM_SCAN_STATS_EVENTID,
+ /** Blacklisted AP information event */
+ WMI_ROAM_BLACKLIST_EVENTID,
/** P2P disc found */
WMI_P2P_DISC_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_P2P),
@@ -11227,7 +11231,9 @@ typedef struct {
* BIT 1-2 : Action on non matching candidate with cache. Used WMI_ROAM_BTM_OFLD_NON_MATCHING_CND_XXX
* BIT 3-5 : Roaming handoff decisions. Use WMI_ROAM_BTM_OFLD_CNDS_MATCH_XXX
* BIT 6 : Enable/Disable solicited BTM
- * BIT 7-31 : Reserved
+ * BIT 7 : Roam BTM candidates based on the roam score instead of BTM preferred value
+ * BIT 8 : BTM query preference over 11k neighbor report request
+ * BIT 9-31 : Reserved
*/
#define WMI_ROAM_BTM_SET_ENABLE(flags, val) WMI_SET_BITS(flags, 0, 1, val)
#define WMI_ROAM_BTM_GET_ENABLE(flags) WMI_GET_BITS(flags, 0, 1)
@@ -11237,6 +11243,10 @@ typedef struct {
#define WMI_ROAM_BTM_GET_CNDS_MATCH_CONDITION(flags) WMI_GET_BITS(flags, 3, 3)
#define WMI_ROAM_BTM_SET_SOLICITED_BTM_ENABLE(flags, val) WMI_SET_BITS(flags, 6, 1, val)
#define WMI_ROAM_BTM_GET_SOLICITED_BTM_ENABLE(flags) WMI_GET_BITS(flags, 6, 1)
+#define WMI_ROAM_BTM_SET_CNDS_SELECT_BASED_ON_SCORE(flags) WMI_SET_BITS(flags, 7, 1, val)
+#define WMI_ROAM_BTM_GET_CNDS_SELECT_BASED_ON_SCORE(flags) WMI_GET_BITS(flags, 7, 1)
+#define WMI_ROAM_BTM_SET_BTM_QUERY_PREFERENCE_OVER_11K(flags) WMI_SET_BITS(flags, 8, 1, val)
+#define WMI_ROAM_BTM_GET_BTM_QUERY_PREFERENCE_OVER_11K(flags) WMI_GET_BITS(flags, 8, 1)
/** WMI_ROAM_BTM_SET_NON_MATCHING_CNDS_ACTION definition: When BTM candidate is not matched with cache by WMI_ROAM_BTM_SET_CNDS_MATCH_CONDITION, determine what to do */
#define WMI_ROAM_BTM_NON_MATCHING_CNDS_SCAN_CONSUME 0 /** Invoke roam scan and consume within firmware. Applicable only when ROAM_SCAN_MODE is enabled. If ROAM_SCAN_MODE is disabled, firmware won't scan and forward it to host */
@@ -11273,6 +11283,14 @@ typedef struct {
* Default value: 300 will be set if invalid value is given
*/
A_UINT32 stick_time_seconds;
+ /* Disassoc time threshold in milli seconds
+ * This time threshold allows the target to judge whether the STA
+ * should can move to another AP immediately, or if the STA has time
+ * to calculate roaming candidates.
+ * If the disassoc_timer_threshold value is 0x0, the field should be
+ * disregarded.
+ */
+ A_UINT32 disassoc_timer_threshold;
} wmi_btm_config_fixed_param;
#define WMI_ROAM_5G_BOOST_PENALIZE_ALGO_FIXED 0x0
@@ -11603,6 +11621,8 @@ typedef struct {
nss_scoring :- NSS scoring percentage information.
esp_qbss_scoring :- ESP/QBSS scoring percentage information
oce_wan_scoring : OCE WAN metrics percentage information
+ roam_score_delta_pcnt :- consider scanned AP as roam eligible candidate only if scanned AP score is at least roam_score_delta % better than connected AP score
+ roam_score_delta_mask :- roam trigger bitmap for which roam_score_delta needs to apply. The WMI_ROAM_TRIGGER_REASON_ID enum values identify which bit within the mask is used for which roam trigger cause.
*/
typedef struct {
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_cnd_scoring_param */
@@ -11624,6 +11644,8 @@ typedef struct {
wmi_roam_cnd_nss_scoring nss_scoring;
wmi_roam_cnd_esp_qbss_scoring esp_qbss_scoring;
wmi_roam_cnd_oce_wan_scoring oce_wan_scoring;
+ A_UINT32 roam_score_delta_pcnt;
+ A_UINT32 roam_score_delta_mask;
} wmi_roam_cnd_scoring_param;
/** To match an open AP, the rs_authmode should be set to WMI_AUTH_NONE
@@ -11878,6 +11900,7 @@ typedef struct {
A_UINT32 handoff_delay_for_rx; /* In msec. Delay Hand-Off by this duration to receive pending Rx frames from current BSS */
A_UINT32 max_mlme_sw_retries; /* maximum number of software retries for preauth and reassoc req */
A_UINT32 no_ack_timeout; /* In msec. duration to wait before another SW retry made if no ack seen for previous frame */
+ A_UINT32 roam_candidate_validity_time; /* In msec. validity duration of each entry in roam cache. If the value is 0x0, this field should be disregarded. */
} wmi_roam_offload_tlv_param;
@@ -11938,6 +11961,27 @@ typedef struct {
A_UINT32 btk[ROAM_OFFLOAD_BTK_BYTES>>2]; /* BTK offload. As this 4 byte aligned, we don't declare it as tlv array */
} wmi_roam_ese_offload_tlv_param;
+typedef struct {
+ /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_blacklist_with_timeout_tlv_param */
+ A_UINT32 tlv_header;
+ /** Blaclisted AP mac address */
+ wmi_mac_addr bssid;
+ /** How much time in milli seconds to keep AP in blacklist */
+ A_UINT32 timeout;
+} wmi_roam_blacklist_with_timeout_tlv_param;
+
+/** WMI_ROAM_BLACKLIST_EVENT: generated whenever STA needs to move AP to blacklist for a particluar time
+ * Ex: AP which sends BTM request with disassoc imminent is set should be
+ * moved to blacklist until disassociation timer expires
+ */
+typedef struct {
+ A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_blacklist_event_fixed_param */
+ A_UINT32 vdev_id;
+ /* This TLV is followed by further TLVs:
+ * wmi_roam_blacklist_with_timeout_tlv_param blacklist_with_timeout[]
+ */
+} wmi_roam_blacklist_event_fixed_param;
+
/** WMI_ROAM_EVENT: roam event triggering the host roam logic.
* generated when ever a better AP is found in the recent roam scan (or)
* when beacon miss is detected (or) when a DEAUTH/DISASSOC is received
@@ -12147,7 +12191,7 @@ enum {
#define WMI_ROAM_LCA_DISALLOW_SOURCE_FORCED 0x100
typedef struct {
- /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_rssi_rejection_oce_config_param */
+ /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_rejection_list_config_param */
A_UINT32 tlv_header;
/** BSSID of AP, who reject (re-)assoc due to low RSSI */
wmi_mac_addr bssid;
@@ -12155,7 +12199,8 @@ typedef struct {
A_UINT32 remaining_disallow_duration;
/** AP will be allowed for candidate, when AP RSSI better than expected RSSI units in dBm */
A_INT32 requested_rssi;
-} wmi_roam_rssi_rejection_oce_config_param;
+} wmi_roam_rejection_list_config_param;
+typedef wmi_roam_rejection_list_config_param wmi_roam_rssi_rejection_oce_config_param; /* retain old struct name as an alias for the new name */
typedef struct {
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_filter_list_fixed_param */
@@ -12174,7 +12219,7 @@ typedef struct {
* wmi_mac_addr bssid_preferred_list[];
* A_UINT32 bssid_preferred_factor[];
* wmi_roam_lca_disallow_config_tlv_param lca_disallow_param[0/1] (opt)
- * wmi_roam_rssi_rejection_oce_config_param rssi_rejection_list[]
+ * wmi_roam_rejection_list_config_param rssi_rejection_list[]
*/
} wmi_roam_filter_fixed_param;
@@ -22818,6 +22863,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command)
WMI_RETURN_STRING(WMI_SET_CURRENT_COUNTRY_CMDID);
WMI_RETURN_STRING(WMI_VDEV_GET_BCN_RECEPTION_STATS_CMDID);
WMI_RETURN_STRING(WMI_PEER_TX_PN_REQUEST_CMDID);
+ WMI_RETURN_STRING(WMI_ROAM_BSS_LOAD_CONFIG_CMDID);
}
return "Invalid WMI cmd";
@@ -23823,6 +23869,7 @@ typedef enum {
WMI_ROAM_TRIGGER_REASON_FORCED,
WMI_ROAM_TRIGGER_REASON_BTM,
WMI_ROAM_TRIGGER_REASON_UNIT_TEST,
+ WMI_ROAM_TRIGGER_REASON_BSS_LOAD,
WMI_ROAM_TRIGGER_REASON_MAX,
} WMI_ROAM_TRIGGER_REASON_ID;
@@ -23850,6 +23897,18 @@ typedef struct {
A_UINT32 vdev_id;
} wmi_request_roam_scan_stats_cmd_fixed_param;
+/** BSS load configuration parameters for roam trigger */
+typedef struct {
+ A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_bss_load_cmd_fixed_param */
+ A_UINT32 vdev_id;
+ /** Minimum number of beacons to be consider for calculating average AP BSS load within time monitor_time_window */
+ A_UINT32 beacons_min_count;
+ /** Monitor time window in seconds */
+ A_UINT32 monitor_time_window;
+ /** BSS load threshold after which roam scan should trigger */
+ A_UINT32 bss_load_threshold;
+} wmi_roam_bss_load_config_cmd_fixed_param;
+
typedef struct {
/*
* The timestamp is in units of ticks of a 19.2MHz clock.
diff --git a/fw/wmi_version.h b/fw/wmi_version.h
index e4970cde55d1..2cf3bd89fb9c 100755
--- 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_ 607
+#define __WMI_REVISION_ 608
/** The Version Namespace should not be normally changed. Only
* host and firmware of the same WMI namespace will work