prima: extscan: Update API extscan_get_valid_channels
1. Add change to parse and fetch max channels
2. Add change to send no of channels within the limits of max channels
Change-Id: Idd856a4f2b3a67a3a2cb65962a457379e6551665
CRs-Fixed: 834122
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index d51e7e0..0e1b326 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -3954,7 +3954,7 @@
tANI_U32 ChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0};
tANI_U8 numChannels = 0;
struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX + 1];
- tANI_U32 requestId;
+ tANI_U32 requestId, maxChannels;
tWifiBand wifiBand;
eHalStatus status;
struct sk_buff *replySkb;
@@ -3995,6 +3995,16 @@
tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_GET_VALID_CHANNELS_CONFIG_PARAM_WIFI_BAND]);
hddLog(VOS_TRACE_LEVEL_INFO, FL("Wifi band (%d)"), wifiBand);
+ /* Parse and fetch max channels */
+ if (!tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_GET_VALID_CHANNELS_CONFIG_PARAM_MAX_CHANNELS])
+ {
+ hddLog(LOGE, FL("attr max channels failed"));
+ return -EINVAL;
+ }
+ maxChannels = nla_get_u32(
+ tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_GET_VALID_CHANNELS_CONFIG_PARAM_MAX_CHANNELS]);
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("Max channels %d"), maxChannels);
+
status = sme_GetValidChannelsByBand((tHalHandle)(pHddCtx->hHal),
wifiBand, ChannelList,
&numChannels);
@@ -4003,7 +4013,10 @@
FL("sme_GetValidChannelsByBand failed (err=%d)"), status);
return -EINVAL;
}
+
+ numChannels = VOS_MIN(numChannels, maxChannels);
hddLog(VOS_TRACE_LEVEL_INFO, FL("Number of channels (%d)"), numChannels);
+
for (i = 0; i < numChannels; i++)
hddLog(VOS_TRACE_LEVEL_INFO, "Channel: %u ", ChannelList[i]);