qcacld-3.0: Populate 6 GHz channel info in the hdd context

Currently, on receiving scan events from FW, the host is
unable to populate the channel info buffer.

Populate 6 GHz channel info in hdd context from wiphy
as per NL80211_BAND_6GHZ band.

Change-Id: I726a43d0f2bbf6c8dfc405cfa917f8dfc8a8e0cd
CRs-Fixed: 3488036
This commit is contained in:
Abhinav Kumar
2023-05-10 08:56:30 -07:00
committed by Madan Koyyalamudi
parent 1ff8294469
commit a8f9ec8edf

View File

@@ -509,10 +509,45 @@ static void hdd_init_6ghz(struct hdd_context *hdd_ctx)
hdd_exit();
}
/**
* wlan_hdd_populate_6g_chan_info() - Populate 6 GHz chan info in hdd context
* @hdd_ctx: pointer to hdd context
* @index: 6 GHz channel beginning index in chan_info of @hdd_ctx
*
* Return: Number of 6 GHz channels populated
*/
static uint32_t
wlan_hdd_populate_6g_chan_info(struct hdd_context *hdd_ctx, uint32_t index)
{
uint32_t num_6g, i;
struct scan_chan_info *chan_info;
if (!hdd_ctx->wiphy->bands[HDD_NL80211_BAND_6GHZ] ||
!hdd_ctx->wiphy->bands[HDD_NL80211_BAND_6GHZ]->n_channels) {
hdd_debug("6GHz channel list not populated to wiphy");
return 0;
}
num_6g = QDF_ARRAY_SIZE(hdd_channels_6_ghz);
chan_info = hdd_ctx->chan_info;
for (i = 0; i < num_6g; i++)
chan_info[index + i].freq = hdd_channels_6_ghz[i].center_freq;
return num_6g;
}
#else
static void hdd_init_6ghz(struct hdd_context *hdd_ctx)
{
}
static inline uint32_t
wlan_hdd_populate_6g_chan_info(struct hdd_context *hdd_ctx, uint32_t index)
{
return 0;
}
#endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 7, 0)) || \
@@ -25746,7 +25781,7 @@ static void wlan_hdd_fill_subband_scan_info(struct hdd_context *hdd_ctx,
info->subband_info.vdev_id, info->freq, ch_width, start_freq,
end_freq, freq_info_num);
for (idx = 0; idx < SIR_MAX_NUM_CHANNELS; idx++) {
for (idx = 0; idx < NUM_CHANNELS; idx++) {
if (chan[idx].freq == 0)
continue;
@@ -25851,20 +25886,17 @@ void wlan_hdd_init_chan_info(struct hdd_context *hdd_ctx)
}
num_5g = QDF_ARRAY_SIZE(hdd_channels_5_ghz);
for (; (index - num_2g) < num_5g; index++) {
if (wlan_reg_is_dsrc_freq(
hdd_channels_5_ghz[index - num_2g].center_freq))
continue;
for (; (index - num_2g) < num_5g; index++)
hdd_ctx->chan_info[index].freq =
hdd_channels_5_ghz[index - num_2g].center_freq;
}
index = num_2g + num_5g;
index = wlan_hdd_populate_5dot9_chan_info(hdd_ctx, index);
index += wlan_hdd_populate_5dot9_chan_info(hdd_ctx, index);
index += wlan_hdd_populate_6g_chan_info(hdd_ctx, index);
hdd_debug("Number of channels populated : %d", index);
mac_handle = hdd_ctx->mac_handle;
sme_set_chan_info_callback(mac_handle,
&wlan_hdd_chan_info_cb);
sme_set_chan_info_callback(mac_handle, &wlan_hdd_chan_info_cb);
}
/**