|
@@ -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)) {
|