qcacld-3.0: Remove obsolete set/reset ssid hotlist
This is a qcacld-2.0 to qcacld-3.0 propagation. Remove obsolete set/reset ssid hotlist. Change-Id: Ie6c4a9847f2daa9ba2aebd17f386d584201b86d6 CRs-Fixed: 1102593
Šī revīzija ir iekļauta:

revīziju iesūtīja
Sandeep Puligilla

vecāks
30641f17eb
revīzija
4698a9c284
@@ -938,14 +938,6 @@ static const struct nl80211_vendor_cmd_info wlan_hdd_cfg80211_vendor_events[] =
|
||||
=
|
||||
QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SIGNIFICANT_CHANGE
|
||||
},
|
||||
[QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_FOUND_INDEX] = {
|
||||
.vendor_id = QCA_NL80211_VENDOR_ID,
|
||||
.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_FOUND
|
||||
},
|
||||
[QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_LOST_INDEX] = {
|
||||
.vendor_id = QCA_NL80211_VENDOR_ID,
|
||||
.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_LOST
|
||||
},
|
||||
#endif /* FEATURE_WLAN_EXTSCAN */
|
||||
|
||||
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
|
||||
@@ -1043,14 +1035,6 @@ static const struct nl80211_vendor_cmd_info wlan_hdd_cfg80211_vendor_events[] =
|
||||
.vendor_id = QCA_NL80211_VENDOR_ID,
|
||||
.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_PASSPOINT_NETWORK_FOUND
|
||||
},
|
||||
[QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SSID_HOTLIST_INDEX] = {
|
||||
.vendor_id = QCA_NL80211_VENDOR_ID,
|
||||
.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SSID_HOTLIST
|
||||
},
|
||||
[QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SSID_HOTLIST_INDEX] = {
|
||||
.vendor_id = QCA_NL80211_VENDOR_ID,
|
||||
.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SSID_HOTLIST
|
||||
},
|
||||
[QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_LOST_INDEX] = {
|
||||
.vendor_id = QCA_NL80211_VENDOR_ID,
|
||||
.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_LOST
|
||||
@@ -9643,22 +9627,6 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = {
|
||||
WIPHY_VENDOR_CMD_NEED_RUNNING,
|
||||
.doit = wlan_hdd_cfg80211_reset_passpoint_list
|
||||
},
|
||||
{
|
||||
.info.vendor_id = QCA_NL80211_VENDOR_ID,
|
||||
.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SSID_HOTLIST,
|
||||
.flags = WIPHY_VENDOR_CMD_NEED_WDEV |
|
||||
WIPHY_VENDOR_CMD_NEED_NETDEV |
|
||||
WIPHY_VENDOR_CMD_NEED_RUNNING,
|
||||
.doit = wlan_hdd_cfg80211_extscan_set_ssid_hotlist
|
||||
},
|
||||
{
|
||||
.info.vendor_id = QCA_NL80211_VENDOR_ID,
|
||||
.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SSID_HOTLIST,
|
||||
.flags = WIPHY_VENDOR_CMD_NEED_WDEV |
|
||||
WIPHY_VENDOR_CMD_NEED_NETDEV |
|
||||
WIPHY_VENDOR_CMD_NEED_RUNNING,
|
||||
.doit = wlan_hdd_cfg80211_extscan_reset_ssid_hotlist
|
||||
},
|
||||
#endif /* FEATURE_WLAN_EXTSCAN */
|
||||
{
|
||||
.info.vendor_id = QCA_NL80211_VENDOR_ID,
|
||||
|
@@ -1293,150 +1293,6 @@ fail:
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_hdd_cfg80211_extscan_hotlist_ssid_match_ind() -
|
||||
* Handle an SSID hotlist match event
|
||||
* @ctx: HDD context registered with SME
|
||||
* @event: The SSID hotlist match event
|
||||
*
|
||||
* This function will take an SSID match event that was generated by
|
||||
* firmware and will convert it into a cfg80211 vendor event which is
|
||||
* sent to userspace.
|
||||
* This callback execute in atomic context and must not invoke any
|
||||
* blocking calls.
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static void
|
||||
wlan_hdd_cfg80211_extscan_hotlist_ssid_match_ind(void *ctx,
|
||||
tpSirWifiScanResultEvent event)
|
||||
{
|
||||
hdd_context_t *hdd_ctx = ctx;
|
||||
struct sk_buff *skb;
|
||||
uint32_t i, index;
|
||||
int flags = cds_get_gfp_flags();
|
||||
|
||||
ENTER();
|
||||
|
||||
if (wlan_hdd_validate_context(hdd_ctx))
|
||||
return;
|
||||
if (!event) {
|
||||
hdd_err("event is null");
|
||||
return;
|
||||
}
|
||||
|
||||
if (event->ap_found) {
|
||||
index = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_FOUND_INDEX;
|
||||
hdd_notice("SSID hotlist found");
|
||||
} else {
|
||||
index = QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_LOST_INDEX;
|
||||
hdd_notice("SSID hotlist lost");
|
||||
}
|
||||
|
||||
skb = cfg80211_vendor_event_alloc(hdd_ctx->wiphy,
|
||||
NULL,
|
||||
EXTSCAN_EVENT_BUF_SIZE + NLMSG_HDRLEN,
|
||||
index, flags);
|
||||
|
||||
if (!skb) {
|
||||
hdd_err("cfg80211_vendor_event_alloc failed");
|
||||
return;
|
||||
}
|
||||
hdd_notice("Req Id %u, Num results %u, More Data %u",
|
||||
event->requestId, event->numOfAps, event->moreData);
|
||||
|
||||
for (i = 0; i < event->numOfAps; i++) {
|
||||
hdd_notice("[i=%d] Timestamp %llu "
|
||||
"Ssid: %s "
|
||||
"Bssid (" MAC_ADDRESS_STR ") "
|
||||
"Channel %u "
|
||||
"Rssi %d "
|
||||
"RTT %u "
|
||||
"RTT_SD %u",
|
||||
i,
|
||||
event->ap[i].ts,
|
||||
event->ap[i].ssid,
|
||||
MAC_ADDR_ARRAY(event->ap[i].bssid.bytes),
|
||||
event->ap[i].channel,
|
||||
event->ap[i].rssi,
|
||||
event->ap[i].rtt,
|
||||
event->ap[i].rtt_sd);
|
||||
}
|
||||
|
||||
if (nla_put_u32(skb,
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_REQUEST_ID,
|
||||
event->requestId) ||
|
||||
nla_put_u32(skb,
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_NUM_RESULTS_AVAILABLE,
|
||||
event->numOfAps)) {
|
||||
hdd_err("put fail");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (event->numOfAps) {
|
||||
struct nlattr *aps;
|
||||
aps = nla_nest_start(skb,
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_LIST);
|
||||
if (!aps) {
|
||||
hdd_err("nest fail");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
for (i = 0; i < event->numOfAps; i++) {
|
||||
struct nlattr *ap;
|
||||
|
||||
ap = nla_nest_start(skb, i);
|
||||
if (!ap) {
|
||||
hdd_err("nest fail");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (hdd_wlan_nla_put_u64(skb,
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_TIME_STAMP,
|
||||
event->ap[i].ts) ||
|
||||
nla_put(skb,
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_SSID,
|
||||
sizeof(event->ap[i].ssid),
|
||||
event->ap[i].ssid) ||
|
||||
nla_put(skb,
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_BSSID,
|
||||
sizeof(event->ap[i].bssid),
|
||||
event->ap[i].bssid.bytes) ||
|
||||
nla_put_u32(skb,
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_CHANNEL,
|
||||
event->ap[i].channel) ||
|
||||
nla_put_s32(skb,
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RSSI,
|
||||
event->ap[i].rssi) ||
|
||||
nla_put_u32(skb,
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RTT,
|
||||
event->ap[i].rtt) ||
|
||||
nla_put_u32(skb,
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RTT_SD,
|
||||
event->ap[i].rtt_sd)) {
|
||||
hdd_err("put fail");
|
||||
goto fail;
|
||||
}
|
||||
nla_nest_end(skb, ap);
|
||||
}
|
||||
nla_nest_end(skb, aps);
|
||||
|
||||
if (nla_put_u8(skb,
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_MORE_DATA,
|
||||
event->moreData)) {
|
||||
hdd_err("put fail");
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
cfg80211_vendor_event(skb, flags);
|
||||
return;
|
||||
|
||||
fail:
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_hdd_cfg80211_extscan_generic_rsp() -
|
||||
* Handle a generic ExtScan Response message
|
||||
@@ -1539,11 +1395,6 @@ void wlan_hdd_cfg80211_extscan_callback(void *ctx, const uint16_t evType,
|
||||
(struct pno_match_found *)pMsg);
|
||||
break;
|
||||
|
||||
case eSIR_EXTSCAN_HOTLIST_SSID_MATCH_IND:
|
||||
wlan_hdd_cfg80211_extscan_hotlist_ssid_match_ind(ctx,
|
||||
(tpSirWifiScanResultEvent)pMsg);
|
||||
break;
|
||||
|
||||
case eSIR_EXTSCAN_SCAN_PROGRESS_EVENT_IND:
|
||||
wlan_hdd_cfg80211_extscan_scan_progress_event(ctx,
|
||||
(tpSirExtScanOnScanEventIndParams) pMsg);
|
||||
@@ -4419,397 +4270,6 @@ int wlan_hdd_cfg80211_reset_passpoint_list(struct wiphy *wiphy,
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* define short names for the global vendor params
|
||||
* used by __wlan_hdd_cfg80211_extscan_set_ssid_hotlist()
|
||||
*/
|
||||
#define PARAM_MAX \
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX
|
||||
#define PARAM_REQUEST_ID \
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_REQUEST_ID
|
||||
#define PARAMS_LOST_SSID_SAMPLE_SIZE \
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_SSID_HOTLIST_PARAMS_LOST_SSID_SAMPLE_SIZE
|
||||
#define PARAMS_NUM_SSID \
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_SSID_HOTLIST_PARAMS_NUM_SSID
|
||||
#define THRESHOLD_PARAM \
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_SSID_THRESHOLD_PARAM
|
||||
#define PARAM_SSID \
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_SSID_THRESHOLD_PARAM_SSID
|
||||
#define PARAM_BAND \
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_SSID_THRESHOLD_PARAM_BAND
|
||||
#define PARAM_RSSI_LOW \
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_SSID_THRESHOLD_PARAM_RSSI_LOW
|
||||
#define PARAM_RSSI_HIGH \
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_SSID_THRESHOLD_PARAM_RSSI_HIGH
|
||||
|
||||
/**
|
||||
* __wlan_hdd_cfg80211_extscan_set_ssid_hotlist() - set ssid hot list
|
||||
* @wiphy: Pointer to wireless phy
|
||||
* @wdev: Pointer to wireless device
|
||||
* @data: Pointer to data
|
||||
* @data_len: Data length
|
||||
*
|
||||
* Return: 0 on success, negative errno on failure
|
||||
*/
|
||||
static int
|
||||
__wlan_hdd_cfg80211_extscan_set_ssid_hotlist(struct wiphy *wiphy,
|
||||
struct wireless_dev *wdev,
|
||||
const void *data,
|
||||
int data_len)
|
||||
{
|
||||
struct sir_set_ssid_hotlist_request *request;
|
||||
struct net_device *dev = wdev->netdev;
|
||||
hdd_adapter_t *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
|
||||
hdd_context_t *hdd_ctx = wiphy_priv(wiphy);
|
||||
struct nlattr *tb[PARAM_MAX + 1];
|
||||
struct nlattr *tb2[PARAM_MAX + 1];
|
||||
struct nlattr *ssids;
|
||||
struct hdd_ext_scan_context *context;
|
||||
uint32_t request_id;
|
||||
char ssid_string[SIR_MAC_MAX_SSID_LENGTH + 1];
|
||||
int ssid_len, i, rem, ssid_str_len;
|
||||
QDF_STATUS status;
|
||||
int retval;
|
||||
unsigned long rc;
|
||||
|
||||
ENTER_DEV(dev);
|
||||
|
||||
if (QDF_GLOBAL_FTM_MODE == hdd_get_conparam()) {
|
||||
hdd_err("Command not allowed in FTM mode");
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
retval = wlan_hdd_validate_context(hdd_ctx);
|
||||
if (0 != retval)
|
||||
return -EINVAL;
|
||||
|
||||
if (!hdd_ctx->config->extscan_enabled) {
|
||||
hdd_err("extscan not supported");
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
if (nla_parse(tb, PARAM_MAX,
|
||||
data, data_len,
|
||||
wlan_hdd_extscan_config_policy)) {
|
||||
hdd_err("Invalid ATTR");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
request = qdf_mem_malloc(sizeof(*request));
|
||||
if (!request) {
|
||||
hdd_err("qdf_mem_malloc failed");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* Parse and fetch request Id */
|
||||
if (!tb[PARAM_REQUEST_ID]) {
|
||||
hdd_err("attr request id failed");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
request->request_id = nla_get_u32(tb[PARAM_REQUEST_ID]);
|
||||
hdd_notice("Request Id %d", request->request_id);
|
||||
|
||||
/* Parse and fetch lost SSID sample size */
|
||||
if (!tb[PARAMS_LOST_SSID_SAMPLE_SIZE]) {
|
||||
hdd_err("attr number of Ssid failed");
|
||||
goto fail;
|
||||
}
|
||||
request->lost_ssid_sample_size =
|
||||
nla_get_u32(tb[PARAMS_LOST_SSID_SAMPLE_SIZE]);
|
||||
hdd_notice("Lost SSID Sample Size %d",
|
||||
request->lost_ssid_sample_size);
|
||||
|
||||
/* Parse and fetch number of hotlist SSID */
|
||||
if (!tb[PARAMS_NUM_SSID]) {
|
||||
hdd_err("attr number of Ssid failed");
|
||||
goto fail;
|
||||
}
|
||||
request->ssid_count = nla_get_u32(tb[PARAMS_NUM_SSID]);
|
||||
hdd_notice("Number of SSID %d", request->ssid_count);
|
||||
|
||||
request->session_id = adapter->sessionId;
|
||||
hdd_notice("Session Id %d", request->session_id);
|
||||
|
||||
i = 0;
|
||||
nla_for_each_nested(ssids, tb[THRESHOLD_PARAM], rem) {
|
||||
if (i >= WLAN_EXTSCAN_MAX_HOTLIST_SSIDS) {
|
||||
hdd_err("Too Many SSIDs, %d exceeds %d",
|
||||
i, WLAN_EXTSCAN_MAX_HOTLIST_SSIDS);
|
||||
break;
|
||||
}
|
||||
if (nla_parse(tb2, PARAM_MAX,
|
||||
nla_data(ssids), nla_len(ssids),
|
||||
wlan_hdd_extscan_config_policy)) {
|
||||
hdd_err("nla_parse failed");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* Parse and fetch SSID */
|
||||
if (!tb2[PARAM_SSID]) {
|
||||
hdd_err("attr ssid failed");
|
||||
goto fail;
|
||||
}
|
||||
ssid_str_len = nla_strlcpy(ssid_string,
|
||||
tb2[PARAM_SSID],
|
||||
sizeof(ssid_string));
|
||||
if (ssid_str_len > SIR_MAC_MAX_SSID_LENGTH) {
|
||||
hdd_err("Invalid length exceeds max ssid length");
|
||||
goto fail;
|
||||
}
|
||||
hdd_notice("SSID %s",
|
||||
ssid_string);
|
||||
ssid_len = strlen(ssid_string);
|
||||
memcpy(request->ssids[i].ssid.ssId, ssid_string, ssid_len);
|
||||
request->ssids[i].ssid.length = ssid_len;
|
||||
|
||||
/* Parse and fetch low RSSI */
|
||||
if (!tb2[PARAM_BAND]) {
|
||||
hdd_err("attr band failed");
|
||||
goto fail;
|
||||
}
|
||||
request->ssids[i].band = nla_get_u8(tb2[PARAM_BAND]);
|
||||
hdd_notice("band %d", request->ssids[i].band);
|
||||
|
||||
/* Parse and fetch low RSSI */
|
||||
if (!tb2[PARAM_RSSI_LOW]) {
|
||||
hdd_err("attr low RSSI failed");
|
||||
goto fail;
|
||||
}
|
||||
request->ssids[i].rssi_low = nla_get_s32(tb2[PARAM_RSSI_LOW]);
|
||||
hdd_notice("RSSI low %d", request->ssids[i].rssi_low);
|
||||
|
||||
/* Parse and fetch high RSSI */
|
||||
if (!tb2[PARAM_RSSI_HIGH]) {
|
||||
hdd_err("attr high RSSI failed");
|
||||
goto fail;
|
||||
}
|
||||
request->ssids[i].rssi_high = nla_get_u32(tb2[PARAM_RSSI_HIGH]);
|
||||
hdd_notice("RSSI high %d", request->ssids[i].rssi_high);
|
||||
i++;
|
||||
}
|
||||
|
||||
context = &ext_scan_context;
|
||||
spin_lock(&context->context_lock);
|
||||
INIT_COMPLETION(context->response_event);
|
||||
context->request_id = request_id = request->request_id;
|
||||
spin_unlock(&context->context_lock);
|
||||
|
||||
status = sme_set_ssid_hotlist(hdd_ctx->hHal, request);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
hdd_err("sme_set_ssid_hotlist failed(err=%d)", status);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
qdf_mem_free(request);
|
||||
|
||||
/* request was sent -- wait for the response */
|
||||
rc = wait_for_completion_timeout(&context->response_event,
|
||||
msecs_to_jiffies
|
||||
(WLAN_WAIT_TIME_EXTSCAN));
|
||||
if (!rc) {
|
||||
hdd_err("sme_set_ssid_hotlist timed out");
|
||||
retval = -ETIMEDOUT;
|
||||
} else {
|
||||
spin_lock(&context->context_lock);
|
||||
if (context->request_id == request_id)
|
||||
retval = context->response_status;
|
||||
else
|
||||
retval = -EINVAL;
|
||||
spin_unlock(&context->context_lock);
|
||||
}
|
||||
|
||||
return retval;
|
||||
|
||||
fail:
|
||||
qdf_mem_free(request);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* done with short names for the global vendor params
|
||||
* used by wlan_hdd_cfg80211_extscan_set_ssid_hotlist()
|
||||
*/
|
||||
#undef PARAM_MAX
|
||||
#undef PARAM_REQUEST_ID
|
||||
#undef PARAMS_NUM_SSID
|
||||
#undef THRESHOLD_PARAM
|
||||
#undef PARAM_SSID
|
||||
#undef PARAM_BAND
|
||||
#undef PARAM_RSSI_LOW
|
||||
#undef PARAM_RSSI_HIGH
|
||||
|
||||
/**
|
||||
* wlan_hdd_cfg80211_extscan_set_ssid_hotlist() - set ssid hot list
|
||||
* @wiphy: Pointer to wireless phy
|
||||
* @wdev: Pointer to wireless device
|
||||
* @data: Pointer to data
|
||||
* @data_len: Data length
|
||||
*
|
||||
* Return: 0 on success, negative errno on failure
|
||||
*/
|
||||
int
|
||||
wlan_hdd_cfg80211_extscan_set_ssid_hotlist(struct wiphy *wiphy,
|
||||
struct wireless_dev *wdev,
|
||||
const void *data,
|
||||
int data_len)
|
||||
{
|
||||
int ret;
|
||||
|
||||
cds_ssr_protect(__func__);
|
||||
ret = __wlan_hdd_cfg80211_extscan_set_ssid_hotlist(wiphy, wdev, data,
|
||||
data_len);
|
||||
cds_ssr_unprotect(__func__);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* define short names for the global vendor params
|
||||
* used by __wlan_hdd_cfg80211_extscan_reset_ssid_hotlist()
|
||||
*/
|
||||
#define PARAM_MAX \
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX
|
||||
#define PARAM_REQUEST_ID \
|
||||
QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_REQUEST_ID
|
||||
|
||||
/**
|
||||
* __wlan_hdd_cfg80211_extscan_reset_ssid_hotlist() - reset ssid hot list
|
||||
* @wiphy: Pointer to wireless phy
|
||||
* @wdev: Pointer to wireless device
|
||||
* @data: Pointer to data
|
||||
* @data_len: Data length
|
||||
*
|
||||
* Return: 0 on success, negative errno on failure
|
||||
*/
|
||||
static int
|
||||
__wlan_hdd_cfg80211_extscan_reset_ssid_hotlist(struct wiphy *wiphy,
|
||||
struct wireless_dev *wdev,
|
||||
const void *data,
|
||||
int data_len)
|
||||
{
|
||||
struct sir_set_ssid_hotlist_request *request;
|
||||
struct net_device *dev = wdev->netdev;
|
||||
hdd_adapter_t *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
|
||||
hdd_context_t *hdd_ctx = wiphy_priv(wiphy);
|
||||
struct nlattr *tb[PARAM_MAX + 1];
|
||||
struct hdd_ext_scan_context *context;
|
||||
uint32_t request_id;
|
||||
QDF_STATUS status;
|
||||
int retval;
|
||||
unsigned long rc;
|
||||
|
||||
ENTER_DEV(dev);
|
||||
|
||||
if (QDF_GLOBAL_FTM_MODE == hdd_get_conparam()) {
|
||||
hdd_err("Command not allowed in FTM mode");
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
retval = wlan_hdd_validate_context(hdd_ctx);
|
||||
if (0 != retval)
|
||||
return -EINVAL;
|
||||
|
||||
if (!hdd_ctx->config->extscan_enabled) {
|
||||
hdd_err("extscan not supported");
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
if (nla_parse(tb, PARAM_MAX,
|
||||
data, data_len,
|
||||
wlan_hdd_extscan_config_policy)) {
|
||||
hdd_err("Invalid ATTR");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
request = qdf_mem_malloc(sizeof(*request));
|
||||
if (!request) {
|
||||
hdd_err("qdf_mem_malloc failed");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* Parse and fetch request Id */
|
||||
if (!tb[PARAM_REQUEST_ID]) {
|
||||
hdd_err("attr request id failed");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
request->request_id = nla_get_u32(tb[PARAM_REQUEST_ID]);
|
||||
hdd_notice("Request Id %d", request->request_id);
|
||||
|
||||
request->session_id = adapter->sessionId;
|
||||
hdd_notice("Session Id %d", request->session_id);
|
||||
|
||||
request->lost_ssid_sample_size = 0;
|
||||
request->ssid_count = 0;
|
||||
|
||||
context = &ext_scan_context;
|
||||
spin_lock(&context->context_lock);
|
||||
INIT_COMPLETION(context->response_event);
|
||||
context->request_id = request_id = request->request_id;
|
||||
spin_unlock(&context->context_lock);
|
||||
|
||||
status = sme_set_ssid_hotlist(hdd_ctx->hHal, request);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
hdd_err("sme_reset_ssid_hotlist failed(err=%d)", status);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
qdf_mem_free(request);
|
||||
|
||||
/* request was sent -- wait for the response */
|
||||
rc = wait_for_completion_timeout(&context->response_event,
|
||||
msecs_to_jiffies
|
||||
(WLAN_WAIT_TIME_EXTSCAN));
|
||||
if (!rc) {
|
||||
hdd_err("sme_reset_ssid_hotlist timed out");
|
||||
retval = -ETIMEDOUT;
|
||||
} else {
|
||||
spin_lock(&context->context_lock);
|
||||
if (context->request_id == request_id)
|
||||
retval = context->response_status;
|
||||
else
|
||||
retval = -EINVAL;
|
||||
spin_unlock(&context->context_lock);
|
||||
}
|
||||
|
||||
return retval;
|
||||
|
||||
fail:
|
||||
qdf_mem_free(request);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* done with short names for the global vendor params
|
||||
* used by wlan_hdd_cfg80211_extscan_reset_ssid_hotlist()
|
||||
*/
|
||||
#undef PARAM_MAX
|
||||
#undef PARAM_REQUEST_ID
|
||||
|
||||
/**
|
||||
* wlan_hdd_cfg80211_extscan_reset_ssid_hotlist() - reset ssid hot list
|
||||
* @wiphy: Pointer to wireless phy
|
||||
* @wdev: Pointer to wireless device
|
||||
* @data: Pointer to data
|
||||
* @data_len: Data length
|
||||
*
|
||||
* Return: 0 on success, negative errno on failure
|
||||
*/
|
||||
int
|
||||
wlan_hdd_cfg80211_extscan_reset_ssid_hotlist(struct wiphy *wiphy,
|
||||
struct wireless_dev *wdev,
|
||||
const void *data,
|
||||
int data_len)
|
||||
{
|
||||
int ret;
|
||||
|
||||
cds_ssr_protect(__func__);
|
||||
ret = __wlan_hdd_cfg80211_extscan_reset_ssid_hotlist(wiphy, wdev,
|
||||
data, data_len);
|
||||
cds_ssr_unprotect(__func__);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_hdd_init_completion_extwow() - Initialize ext wow variable
|
||||
* @hdd_ctx: Global HDD context
|
||||
|
@@ -104,7 +104,6 @@ typedef uint8_t tSirVersionString[SIR_VERSION_STRING_LEN];
|
||||
#define WLAN_EXTSCAN_MAX_BUCKETS 16
|
||||
#define WLAN_EXTSCAN_MAX_HOTLIST_APS 128
|
||||
#define WLAN_EXTSCAN_MAX_SIGNIFICANT_CHANGE_APS 64
|
||||
#define WLAN_EXTSCAN_MAX_HOTLIST_SSIDS 8
|
||||
|
||||
/* This should not be greater than MAX_NUMBER_OF_CONC_CONNECTIONS */
|
||||
#define MAX_VDEV_SUPPORTED 4
|
||||
@@ -164,7 +163,6 @@ typedef enum {
|
||||
eSIR_PASSPOINT_NETWORK_FOUND_IND,
|
||||
eSIR_EXTSCAN_SET_SSID_HOTLIST_RSP,
|
||||
eSIR_EXTSCAN_RESET_SSID_HOTLIST_RSP,
|
||||
eSIR_EXTSCAN_HOTLIST_SSID_MATCH_IND,
|
||||
|
||||
/* Keep this last */
|
||||
eSIR_EXTSCAN_CALLBACK_TYPE_MAX,
|
||||
@@ -4515,36 +4513,6 @@ struct sir_wisa_params {
|
||||
bool mode;
|
||||
uint8_t vdev_id;
|
||||
};
|
||||
/**
|
||||
* struct sir_ssid_hotlist_param - param for SSID Hotlist
|
||||
* @ssid: SSID which is being hotlisted
|
||||
* @band: Band in which the given SSID should be scanned
|
||||
* @rssi_low: Low bound on RSSI
|
||||
* @rssi_high: High bound on RSSI
|
||||
*/
|
||||
struct sir_ssid_hotlist_param {
|
||||
tSirMacSSid ssid;
|
||||
uint8_t band;
|
||||
int32_t rssi_low;
|
||||
int32_t rssi_high;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct sir_set_ssid_hotlist_request - set SSID hotlist request struct
|
||||
* @request_id: ID of the request
|
||||
* @session_id: ID of the session
|
||||
* @lost_ssid_sample_size: Number of consecutive scans in which the SSID
|
||||
* must not be seen in order to consider the SSID "lost"
|
||||
* @ssid_count: Number of valid entries in the @ssids array
|
||||
* @ssids: Array that defines the SSIDs that are in the hotlist
|
||||
*/
|
||||
struct sir_set_ssid_hotlist_request {
|
||||
uint32_t request_id;
|
||||
uint8_t session_id;
|
||||
uint32_t lost_ssid_sample_size;
|
||||
uint32_t ssid_count;
|
||||
struct sir_ssid_hotlist_param ssids[WLAN_EXTSCAN_MAX_HOTLIST_SSIDS];
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
uint32_t requestId;
|
||||
|
@@ -575,7 +575,7 @@ typedef struct sSirMbMsgP2p {
|
||||
#define SIR_HAL_SET_EPNO_LIST_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 313)
|
||||
#define SIR_HAL_SET_PASSPOINT_LIST_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 316)
|
||||
#define SIR_HAL_RESET_PASSPOINT_LIST_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 317)
|
||||
#define SIR_HAL_EXTSCAN_SET_SSID_HOTLIST_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 318)
|
||||
/* 318 unused */
|
||||
|
||||
#define SIR_HAL_OCB_SET_CONFIG_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 319)
|
||||
#define SIR_HAL_OCB_SET_UTC_TIME_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 320)
|
||||
|
@@ -691,7 +691,6 @@ uint8_t *mac_trace_get_wma_msg_string(uint16_t wma_msg)
|
||||
CASE_RETURN_STRING(WMA_SET_EPNO_LIST_REQ);
|
||||
CASE_RETURN_STRING(WMA_SET_PASSPOINT_LIST_REQ);
|
||||
CASE_RETURN_STRING(WMA_RESET_PASSPOINT_LIST_REQ);
|
||||
CASE_RETURN_STRING(WMA_EXTSCAN_SET_SSID_HOTLIST_REQ);
|
||||
#endif /* FEATURE_WLAN_EXTSCAN */
|
||||
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
|
||||
CASE_RETURN_STRING(WMA_LINK_LAYER_STATS_CLEAR_REQ);
|
||||
|
@@ -867,9 +867,6 @@ QDF_STATUS sme_set_passpoint_list(tHalHandle hal,
|
||||
struct wifi_passpoint_req *req_msg);
|
||||
QDF_STATUS sme_reset_passpoint_list(tHalHandle hal,
|
||||
struct wifi_passpoint_req *req_msg);
|
||||
QDF_STATUS
|
||||
sme_set_ssid_hotlist(tHalHandle hal,
|
||||
struct sir_set_ssid_hotlist_request *request);
|
||||
|
||||
QDF_STATUS sme_ext_scan_register_callback(tHalHandle hHal,
|
||||
void (*pExtScanIndCb)(void *, const uint16_t, void *));
|
||||
|
@@ -13323,50 +13323,6 @@ QDF_STATUS sme_reset_passpoint_list(tHalHandle hal,
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* sme_set_ssid_hotlist() - Set the SSID hotlist
|
||||
* @hal: SME handle
|
||||
* @request: set ssid hotlist request
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
sme_set_ssid_hotlist(tHalHandle hal,
|
||||
struct sir_set_ssid_hotlist_request *request)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
tpAniSirGlobal mac = PMAC_STRUCT(hal);
|
||||
struct scheduler_msg message;
|
||||
struct sir_set_ssid_hotlist_request *set_req;
|
||||
|
||||
set_req = qdf_mem_malloc(sizeof(*set_req));
|
||||
if (!set_req) {
|
||||
sms_log(mac, LOGE, FL("qdf_mem_malloc failed"));
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
*set_req = *request;
|
||||
status = sme_acquire_global_lock(&mac->sme);
|
||||
if (QDF_STATUS_SUCCESS == status) {
|
||||
/* Serialize the req through MC thread */
|
||||
message.bodyptr = set_req;
|
||||
message.type = WMA_EXTSCAN_SET_SSID_HOTLIST_REQ;
|
||||
status = scheduler_post_msg(QDF_MODULE_ID_WMA, &message);
|
||||
sme_release_global_lock(&mac->sme);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
qdf_mem_free(set_req);
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
} else {
|
||||
sms_log(mac, LOGE,
|
||||
FL("sme_acquire_global_lock failed!(status=%d)"),
|
||||
status);
|
||||
qdf_mem_free(set_req);
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS sme_ext_scan_register_callback(tHalHandle hHal,
|
||||
void (*pExtScanIndCb)(void *,
|
||||
const uint16_t,
|
||||
|
@@ -351,10 +351,6 @@ int wma_passpoint_match_event_handler(void *handle,
|
||||
uint8_t *cmd_param_info,
|
||||
uint32_t len);
|
||||
|
||||
int
|
||||
wma_extscan_hotlist_ssid_match_event_handler(void *handle,
|
||||
uint8_t *cmd_param_info,
|
||||
uint32_t len);
|
||||
#endif
|
||||
|
||||
void wma_register_extscan_event_handler(tp_wma_handle wma_handle);
|
||||
@@ -410,9 +406,6 @@ QDF_STATUS wma_set_passpoint_network_list(tp_wma_handle wma,
|
||||
|
||||
QDF_STATUS wma_reset_passpoint_network_list(tp_wma_handle wma,
|
||||
struct wifi_passpoint_req *req);
|
||||
QDF_STATUS
|
||||
wma_set_ssid_hotlist(tp_wma_handle wma,
|
||||
struct sir_set_ssid_hotlist_request *request);
|
||||
#endif
|
||||
|
||||
QDF_STATUS wma_ipa_offload_enable_disable(tp_wma_handle wma,
|
||||
|
@@ -417,7 +417,6 @@
|
||||
#define WMA_SET_EPNO_LIST_REQ SIR_HAL_SET_EPNO_LIST_REQ
|
||||
#define WMA_SET_PASSPOINT_LIST_REQ SIR_HAL_SET_PASSPOINT_LIST_REQ
|
||||
#define WMA_RESET_PASSPOINT_LIST_REQ SIR_HAL_RESET_PASSPOINT_LIST_REQ
|
||||
#define WMA_EXTSCAN_SET_SSID_HOTLIST_REQ SIR_HAL_EXTSCAN_SET_SSID_HOTLIST_REQ
|
||||
|
||||
#endif /* FEATURE_WLAN_EXTSCAN */
|
||||
|
||||
|
@@ -2117,10 +2117,6 @@ static int wma_extscan_get_eventid_from_tlvtag(uint32_t tag)
|
||||
event_id = WMI_EXTSCAN_CAPABILITIES_EVENTID;
|
||||
break;
|
||||
|
||||
case WMITLV_TAG_STRUC_wmi_extscan_hotlist_ssid_match_event_fixed_param:
|
||||
event_id = WMI_EXTSCAN_HOTLIST_SSID_MATCH_EVENTID;
|
||||
break;
|
||||
|
||||
default:
|
||||
event_id = 0;
|
||||
WMA_LOGE("%s: Unknown tag: %d", __func__, tag);
|
||||
|
@@ -6836,11 +6836,6 @@ QDF_STATUS wma_mc_process_msg(void *cds_context, struct scheduler_msg *msg)
|
||||
wma_reset_passpoint_network_list(wma_handle,
|
||||
(struct wifi_passpoint_req *)msg->bodyptr);
|
||||
break;
|
||||
case WMA_EXTSCAN_SET_SSID_HOTLIST_REQ:
|
||||
wma_set_ssid_hotlist(wma_handle,
|
||||
(struct sir_set_ssid_hotlist_request *)msg->bodyptr);
|
||||
qdf_mem_free(msg->bodyptr);
|
||||
break;
|
||||
#endif /* FEATURE_WLAN_EXTSCAN */
|
||||
case WMA_SET_SCAN_MAC_OUI_REQ:
|
||||
wma_scan_probe_setoui(wma_handle, msg->bodyptr);
|
||||
|
@@ -3406,11 +3406,6 @@ void wma_extscan_wow_event_callback(void *handle, void *event, uint32_t len)
|
||||
wma_extscan_capabilities_event_handler(handle, event, len);
|
||||
break;
|
||||
|
||||
case WMITLV_TAG_STRUC_wmi_extscan_hotlist_ssid_match_event_fixed_param:
|
||||
wma_extscan_hotlist_ssid_match_event_handler(handle,
|
||||
event, len);
|
||||
break;
|
||||
|
||||
default:
|
||||
WMA_LOGE(FL("Unknown tag: %d"), tag);
|
||||
break;
|
||||
@@ -3639,12 +3634,6 @@ void wma_register_extscan_event_handler(tp_wma_handle wma_handle)
|
||||
wma_passpoint_match_event_handler,
|
||||
WMA_RX_SERIALIZER_CTX);
|
||||
|
||||
|
||||
wmi_unified_register_event_handler(wma_handle->wmi_handle,
|
||||
WMI_EXTSCAN_HOTLIST_SSID_MATCH_EVENTID,
|
||||
wma_extscan_hotlist_ssid_match_event_handler,
|
||||
WMA_RX_SERIALIZER_CTX);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4566,102 +4555,6 @@ int wma_passpoint_match_event_handler(void *handle,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* wma_extscan_hotlist_ssid_match_event_handler() -
|
||||
* Handler for SSID hotlist match event from firmware
|
||||
* @handle: WMA handle
|
||||
* @cmd_param_info: WMI command buffer
|
||||
* @len: length of @cmd_param_info
|
||||
*
|
||||
* Return: 0 on success, non-zero on failure
|
||||
*/
|
||||
int
|
||||
wma_extscan_hotlist_ssid_match_event_handler(void *handle,
|
||||
uint8_t *cmd_param_info,
|
||||
uint32_t len)
|
||||
{
|
||||
WMI_EXTSCAN_HOTLIST_SSID_MATCH_EVENTID_param_tlvs *param_buf;
|
||||
wmi_extscan_hotlist_ssid_match_event_fixed_param *event;
|
||||
tSirWifiScanResultEvent *dest_hotlist;
|
||||
tSirWifiScanResult *dest_ap;
|
||||
wmi_extscan_wlan_descriptor *src_hotlist;
|
||||
int numap, j;
|
||||
bool ssid_found = false;
|
||||
tpAniSirGlobal mac = cds_get_context(QDF_MODULE_ID_PE);
|
||||
|
||||
if (!mac) {
|
||||
WMA_LOGE("%s: Invalid mac", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!mac->sme.pExtScanIndCb) {
|
||||
WMA_LOGE("%s: Callback not registered", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
param_buf = (WMI_EXTSCAN_HOTLIST_SSID_MATCH_EVENTID_param_tlvs *)
|
||||
cmd_param_info;
|
||||
if (!param_buf) {
|
||||
WMA_LOGE("%s: Invalid hotlist match event", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
event = param_buf->fixed_param;
|
||||
src_hotlist = param_buf->hotlist_ssid_match;
|
||||
numap = event->total_entries;
|
||||
if (!src_hotlist || !numap) {
|
||||
WMA_LOGE("%s: Hotlist AP's list invalid", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
dest_hotlist = qdf_mem_malloc(sizeof(*dest_hotlist) +
|
||||
sizeof(*dest_ap) * numap);
|
||||
if (!dest_hotlist) {
|
||||
WMA_LOGE("%s: Allocation failed for hotlist buffer",
|
||||
__func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
dest_ap = &dest_hotlist->ap[0];
|
||||
dest_hotlist->numOfAps = event->total_entries;
|
||||
dest_hotlist->requestId = event->config_request_id;
|
||||
|
||||
if (event->first_entry_index +
|
||||
event->num_entries_in_page < event->total_entries)
|
||||
dest_hotlist->moreData = 1;
|
||||
else
|
||||
dest_hotlist->moreData = 0;
|
||||
|
||||
WMA_LOGD("%s: Hotlist match: requestId: %u,numOfAps: %d", __func__,
|
||||
dest_hotlist->requestId, dest_hotlist->numOfAps);
|
||||
|
||||
for (j = 0; j < numap; j++) {
|
||||
dest_ap->channel = src_hotlist->channel;
|
||||
dest_ap->ts = src_hotlist->tstamp;
|
||||
ssid_found = src_hotlist->flags & WMI_HOTLIST_FLAG_PRESENCE;
|
||||
dest_ap->rtt = src_hotlist->rtt;
|
||||
dest_ap->rtt_sd = src_hotlist->rtt_sd;
|
||||
dest_ap->beaconPeriod = src_hotlist->beacon_interval;
|
||||
dest_ap->capability = src_hotlist->capabilities;
|
||||
dest_ap->ieLength = src_hotlist->ie_length;
|
||||
WMI_MAC_ADDR_TO_CHAR_ARRAY(&src_hotlist->bssid,
|
||||
dest_ap->bssid.bytes);
|
||||
qdf_mem_copy(dest_ap->ssid, src_hotlist->ssid.ssid,
|
||||
src_hotlist->ssid.ssid_len);
|
||||
dest_ap->ssid[src_hotlist->ssid.ssid_len] = '\0';
|
||||
dest_ap++;
|
||||
src_hotlist++;
|
||||
}
|
||||
|
||||
dest_hotlist->ap_found = ssid_found;
|
||||
mac->sme.pExtScanIndCb(mac->hHdd,
|
||||
eSIR_EXTSCAN_HOTLIST_SSID_MATCH_IND,
|
||||
dest_hotlist);
|
||||
WMA_LOGI("%s: sending hotlist ssid match event", __func__);
|
||||
qdf_mem_free(dest_hotlist);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* wma_get_buf_extscan_start_cmd() - Fill extscan start request
|
||||
* @handle: wma handle
|
||||
@@ -5649,41 +5542,6 @@ QDF_STATUS wma_reset_passpoint_network_list(tp_wma_handle wma,
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* wma_set_ssid_hotlist() - Handle an SSID hotlist set request
|
||||
* @wma: WMA handle
|
||||
* @request: SSID hotlist set request from SME
|
||||
*
|
||||
* Return: QDF_STATUS enumeration
|
||||
*/
|
||||
QDF_STATUS
|
||||
wma_set_ssid_hotlist(tp_wma_handle wma,
|
||||
struct sir_set_ssid_hotlist_request *request)
|
||||
{
|
||||
|
||||
if (!wma || !wma->wmi_handle) {
|
||||
WMA_LOGE("%s: WMA is closed, can not issue hotlist cmd",
|
||||
__func__);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
if (!request) {
|
||||
WMA_LOGE("%s: Invalid request buffer", __func__);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
if (!WMI_SERVICE_IS_ENABLED(wma->wmi_service_bitmap,
|
||||
WMI_SERVICE_EXTSCAN)) {
|
||||
WMA_LOGE("%s: extscan not enabled",
|
||||
__func__);
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
|
||||
if (wmi_unified_set_ssid_hotlist_cmd(wma->wmi_handle,
|
||||
(struct ssid_hotlist_request_params *)request)) {
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user