qcacmn: WMI changes to Send OCE rssi reject BSSID list to firmware
Add support for rssi based assoc rejection from a bssid and Try to connect to this bssid only after time interval indicated in Assoc reject or when rssi has improved by margin indicated in Assoc reject. On connection send OCE rssi reject BSSID list to firmware so that firmware will avoid connecting to these BSSID until RSSI improve or delta interval has elapsed. Change-Id: Ic14f85894a4a2f47bcdde9ce977c7b92aeaf8fce CRs-Fixed: 2076654
This commit is contained in:
@@ -5949,7 +5949,7 @@ static QDF_STATUS send_roam_scan_filter_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
wmi_buf_t buf = NULL;
|
||||
QDF_STATUS status;
|
||||
uint32_t i;
|
||||
uint32_t len;
|
||||
uint32_t len, blist_len = 0;
|
||||
uint8_t *buf_ptr;
|
||||
wmi_roam_filter_fixed_param *roam_filter;
|
||||
uint8_t *bssid_src_ptr = NULL;
|
||||
@@ -5957,6 +5957,7 @@ static QDF_STATUS send_roam_scan_filter_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
wmi_ssid *ssid_ptr = NULL;
|
||||
uint32_t *bssid_preferred_factor_ptr = NULL;
|
||||
wmi_roam_lca_disallow_config_tlv_param *blist_param;
|
||||
wmi_roam_rssi_rejection_oce_config_param *rssi_rej;
|
||||
|
||||
len = sizeof(wmi_roam_filter_fixed_param);
|
||||
|
||||
@@ -5971,9 +5972,15 @@ static QDF_STATUS send_roam_scan_filter_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
len += roam_req->num_bssid_preferred_list * sizeof(wmi_mac_addr);
|
||||
len += roam_req->num_bssid_preferred_list * sizeof(A_UINT32);
|
||||
}
|
||||
if (roam_req->lca_disallow_config_present)
|
||||
len += WMI_TLV_HDR_SIZE +
|
||||
sizeof(wmi_roam_lca_disallow_config_tlv_param);
|
||||
len += WMI_TLV_HDR_SIZE;
|
||||
if (roam_req->lca_disallow_config_present) {
|
||||
len += sizeof(*blist_param);
|
||||
blist_len = sizeof(*blist_param);
|
||||
}
|
||||
|
||||
len += WMI_TLV_HDR_SIZE;
|
||||
if (roam_req->num_rssi_rejection_ap)
|
||||
len += roam_req->num_rssi_rejection_ap * sizeof(*rssi_rej);
|
||||
|
||||
buf = wmi_buf_alloc(wmi_handle, len);
|
||||
if (!buf) {
|
||||
@@ -5994,6 +6001,8 @@ static QDF_STATUS send_roam_scan_filter_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
roam_filter->num_ssid_white_list = roam_req->num_ssid_white_list;
|
||||
roam_filter->num_bssid_preferred_list =
|
||||
roam_req->num_bssid_preferred_list;
|
||||
roam_filter->num_rssi_rejection_ap =
|
||||
roam_req->num_rssi_rejection_ap;
|
||||
buf_ptr += sizeof(wmi_roam_filter_fixed_param);
|
||||
|
||||
WMITLV_SET_HDR((buf_ptr),
|
||||
@@ -6045,11 +6054,10 @@ static QDF_STATUS send_roam_scan_filter_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
buf_ptr += WMI_TLV_HDR_SIZE +
|
||||
(roam_req->num_bssid_preferred_list * sizeof(uint32_t));
|
||||
|
||||
WMITLV_SET_HDR(buf_ptr,
|
||||
WMITLV_TAG_ARRAY_STRUC, blist_len);
|
||||
buf_ptr += WMI_TLV_HDR_SIZE;
|
||||
if (roam_req->lca_disallow_config_present) {
|
||||
WMITLV_SET_HDR(buf_ptr,
|
||||
WMITLV_TAG_ARRAY_STRUC,
|
||||
sizeof(wmi_roam_lca_disallow_config_tlv_param));
|
||||
buf_ptr += WMI_TLV_HDR_SIZE;
|
||||
blist_param =
|
||||
(wmi_roam_lca_disallow_config_tlv_param *) buf_ptr;
|
||||
WMITLV_SET_HDR(&blist_param->tlv_header,
|
||||
@@ -6065,6 +6073,28 @@ static QDF_STATUS send_roam_scan_filter_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
buf_ptr += (sizeof(wmi_roam_lca_disallow_config_tlv_param));
|
||||
}
|
||||
|
||||
WMITLV_SET_HDR(buf_ptr,
|
||||
WMITLV_TAG_ARRAY_STRUC,
|
||||
(roam_req->num_rssi_rejection_ap * sizeof(*rssi_rej)));
|
||||
buf_ptr += WMI_TLV_HDR_SIZE;
|
||||
for (i = 0; i < roam_req->num_rssi_rejection_ap; i++) {
|
||||
rssi_rej =
|
||||
(wmi_roam_rssi_rejection_oce_config_param *) buf_ptr;
|
||||
WMITLV_SET_HDR(&rssi_rej->tlv_header,
|
||||
WMITLV_TAG_STRUC_wmi_roam_rssi_rejection_oce_config_param,
|
||||
WMITLV_GET_STRUCT_TLVLEN(
|
||||
wmi_roam_rssi_rejection_oce_config_param));
|
||||
WMI_CHAR_ARRAY_TO_MAC_ADDR(
|
||||
roam_req->rssi_rejection_ap[i].bssid.bytes,
|
||||
&rssi_rej->bssid);
|
||||
rssi_rej->remaining_disallow_duration =
|
||||
roam_req->rssi_rejection_ap[i].remaining_duration;
|
||||
rssi_rej->requested_rssi =
|
||||
(A_INT32)roam_req->rssi_rejection_ap[i].expected_rssi;
|
||||
buf_ptr +=
|
||||
(sizeof(wmi_roam_rssi_rejection_oce_config_param));
|
||||
}
|
||||
|
||||
status = wmi_unified_cmd_send(wmi_handle, buf,
|
||||
len, WMI_ROAM_FILTER_CMDID);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
|
Reference in New Issue
Block a user