diff --git a/wmi_unified_tlv.c b/wmi_unified_tlv.c index e183b3820a..e7beec6aed 100644 --- a/wmi_unified_tlv.c +++ b/wmi_unified_tlv.c @@ -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)) {