diff --git a/os_if/linux/scan/src/wlan_cfg80211_scan.c b/os_if/linux/scan/src/wlan_cfg80211_scan.c index c0ad5fa4a663..180ecba9a97b 100644 --- a/os_if/linux/scan/src/wlan_cfg80211_scan.c +++ b/os_if/linux/scan/src/wlan_cfg80211_scan.c @@ -1279,7 +1279,7 @@ int wlan_cfg80211_scan(struct wlan_objmgr_vdev *vdev, struct wlan_ssid *pssid; uint8_t i; int ret = 0; - uint8_t num_chan = 0, channel; + uint8_t num_chan = 0; uint32_t c_freq; struct wlan_objmgr_pdev *pdev = wlan_vdev_get_pdev(vdev); wlan_scan_requester req_id; @@ -1424,7 +1424,8 @@ int wlan_cfg80211_scan(struct wlan_objmgr_vdev *vdev, qdf_set_macaddr_broadcast(&req->scan_req.bssid_list[0]); if (request->n_channels) { - char *chl = qdf_mem_malloc((request->n_channels * 5) + 1); + uint32_t buff_len = (request->n_channels * 5) + 1; + char *chl = qdf_mem_malloc(buff_len); int len = 0; #ifdef WLAN_POLICY_MGR_ENABLE bool ap_or_go_present = @@ -1438,18 +1439,19 @@ int wlan_cfg80211_scan(struct wlan_objmgr_vdev *vdev, goto err; } for (i = 0; i < request->n_channels; i++) { - channel = request->channels[i]->hw_value; - c_freq = wlan_reg_chan_to_freq(pdev, channel); - if (wlan_reg_is_dsrc_chan(pdev, channel)) + c_freq = request->channels[i]->center_freq; + if (wlan_reg_is_dsrc_freq(c_freq)) continue; #ifdef WLAN_POLICY_MGR_ENABLE if (ap_or_go_present) { bool ok; qdf_status = - policy_mgr_is_chan_ok_for_dnbs(psoc, - channel, - &ok); + policy_mgr_is_chan_ok_for_dnbs( + psoc, + wlan_reg_freq_to_chan( + pdev, c_freq), + &ok); if (QDF_IS_STATUS_ERROR(qdf_status)) { osif_err("DNBS check failed"); @@ -1462,7 +1464,8 @@ int wlan_cfg80211_scan(struct wlan_objmgr_vdev *vdev, continue; } #endif - len += snprintf(chl + len, 5, "%d ", channel); + len += snprintf(chl + len, buff_len - len, "%d ", + c_freq); req->scan_req.chan_list.chan[num_chan].freq = c_freq; band = util_scan_scm_freq_to_band(c_freq); if (band == WLAN_BAND_2_4_GHZ) @@ -1472,7 +1475,7 @@ int wlan_cfg80211_scan(struct wlan_objmgr_vdev *vdev, req->scan_req.chan_list.chan[num_chan].phymode = SCAN_PHY_MODE_11A; num_chan++; - if (num_chan >= WLAN_SCAN_MAX_NUM_CHANNELS) + if (num_chan >= NUM_CHANNELS) break; } osif_info("Channel-List: %s", chl); diff --git a/umac/scan/dispatcher/inc/wlan_scan_public_structs.h b/umac/scan/dispatcher/inc/wlan_scan_public_structs.h index 67eb6ed6a6c3..41ca37625ba0 100644 --- a/umac/scan/dispatcher/inc/wlan_scan_public_structs.h +++ b/umac/scan/dispatcher/inc/wlan_scan_public_structs.h @@ -28,13 +28,13 @@ #include #include #include +#include typedef uint16_t wlan_scan_requester; typedef uint32_t wlan_scan_id; #define WLAN_SCAN_MAX_NUM_SSID 16 #define WLAN_SCAN_MAX_NUM_BSSID 4 -#define WLAN_SCAN_MAX_NUM_CHANNELS 68 #define SCM_CANCEL_SCAN_WAIT_TIME 50 #define SCM_CANCEL_SCAN_WAIT_ITERATION 600 @@ -761,7 +761,7 @@ struct chan_info { */ struct chan_list { uint32_t num_chan; - struct chan_info chan[WLAN_SCAN_MAX_NUM_CHANNELS]; + struct chan_info chan[NUM_CHANNELS]; }; /**