summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSreelakshmi Konamki <skonam@codeaurora.org>2016-12-12 15:44:54 +0530
committerqcabuildsw <qcabuildsw@localhost>2016-12-14 06:35:44 -0800
commit105b330c81d781eb65bd6e0c880a70bad0050a45 (patch)
tree41226db3c064875af1764945b8032496fff2f355
parent228bda18e0577a905947ea8751de6dd5d0cf1c9a (diff)
qcacld-3.0: Retrieve BSSID to support vendor scan
Host doesnt have changes to support specific BSSID vendor scan if supplicant set specific BSSID. Add changes to get BSSID to do specific scan if supplicant set BSSID. Change-Id: I2b0ba590814e6c99f7003abdf855d3264b03a060 CRs-Fixed: 1099020
-rw-r--r--core/hdd/src/wlan_hdd_cfg80211.h2
-rw-r--r--core/hdd/src/wlan_hdd_scan.c35
-rw-r--r--core/sme/src/csr/csr_api_scan.c7
3 files changed, 42 insertions, 2 deletions
diff --git a/core/hdd/src/wlan_hdd_cfg80211.h b/core/hdd/src/wlan_hdd_cfg80211.h
index f61224ab2677..a85133831842 100644
--- a/core/hdd/src/wlan_hdd_cfg80211.h
+++ b/core/hdd/src/wlan_hdd_cfg80211.h
@@ -1732,6 +1732,7 @@ enum qca_wlan_vendor_attr_set_scanning_mac_oui {
* scan flag is set
* @QCA_WLAN_VENDOR_ATTR_SCAN_MAC_MASK: 6-byte MAC address mask to be used with
* randomisation
+ * @QCA_WLAN_VENDOR_ATTR_SCAN_BSSID: BSSID provided to do scan for specific BSS
*/
enum qca_wlan_vendor_attr_scan {
QCA_WLAN_VENDOR_ATTR_SCAN_INVALID_PARAM = 0,
@@ -1745,6 +1746,7 @@ enum qca_wlan_vendor_attr_scan {
QCA_WLAN_VENDOR_ATTR_SCAN_STATUS,
QCA_WLAN_VENDOR_ATTR_SCAN_MAC,
QCA_WLAN_VENDOR_ATTR_SCAN_MAC_MASK,
+ QCA_WLAN_VENDOR_ATTR_SCAN_BSSID,
QCA_WLAN_VENDOR_ATTR_SCAN_AFTER_LAST,
QCA_WLAN_VENDOR_ATTR_SCAN_MAX =
QCA_WLAN_VENDOR_ATTR_SCAN_AFTER_LAST - 1
diff --git a/core/hdd/src/wlan_hdd_scan.c b/core/hdd/src/wlan_hdd_scan.c
index 001a9031a39d..c84f407f06b2 100644
--- a/core/hdd/src/wlan_hdd_scan.c
+++ b/core/hdd/src/wlan_hdd_scan.c
@@ -1964,6 +1964,31 @@ static int wlan_hdd_send_scan_start_event(struct wiphy *wiphy,
return ret;
}
+
+/**
+ * wlan_hdd_copy_bssid() - API to copy the bssid to vendor Scan request
+ * @request: Pointer to vendor scan request
+ * @bssid: Pointer to BSSID
+ *
+ * This API copies the specific BSSID received from Supplicant and copies it to
+ * the vendor Scan request
+ *
+ * Return: None
+ */
+#if defined(CFG80211_SCAN_BSSID) || \
+ (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
+static inline void wlan_hdd_copy_bssid(struct cfg80211_scan_request *request,
+ uint8_t *bssid)
+{
+ qdf_mem_copy(request->bssid, bssid, QDF_MAC_ADDR_SIZE);
+}
+#else
+static inline void wlan_hdd_copy_bssid(struct cfg80211_scan_request *request,
+ uint8_t *bssid)
+{
+}
+#endif
+
/**
* __wlan_hdd_cfg80211_vendor_scan() - API to process venor scan request
* @wiphy: Pointer to wiphy
@@ -2134,6 +2159,16 @@ static int __wlan_hdd_cfg80211_vendor_scan(struct wiphy *wiphy,
goto error;
}
}
+
+ if (tb[QCA_WLAN_VENDOR_ATTR_SCAN_BSSID]) {
+ if (nla_len(tb[QCA_WLAN_VENDOR_ATTR_SCAN_BSSID]) <
+ QDF_MAC_ADDR_SIZE) {
+ hdd_err("invalid bssid length");
+ goto error;
+ }
+ wlan_hdd_copy_bssid(request,
+ nla_data(tb[QCA_WLAN_VENDOR_ATTR_SCAN_BSSID]));
+ }
request->no_cck =
nla_get_flag(tb[QCA_WLAN_VENDOR_ATTR_SCAN_TX_NO_CCK_RATE]);
request->wdev = wdev;
diff --git a/core/sme/src/csr/csr_api_scan.c b/core/sme/src/csr/csr_api_scan.c
index 92fa1afda4e2..948831fd5967 100644
--- a/core/sme/src/csr/csr_api_scan.c
+++ b/core/sme/src/csr/csr_api_scan.c
@@ -622,12 +622,13 @@ QDF_STATUS csr_scan_request(tpAniSirGlobal pMac, uint16_t sessionId,
QDF_TIMER_TYPE_SW,
csr_scan_active_list_timeout_handle, scan_cmd);
sms_log(pMac, LOG1,
- FL("SId=%d scanId=%d Scan reason=%u numSSIDs=%d numChan=%d P2P search=%d minCT=%d maxCT=%d uIEFieldLen=%d"),
+ FL("SId=%d scanId=%d Scan reason=%u numSSIDs=%d numChan=%d P2P search=%d minCT=%d maxCT=%d uIEFieldLen=%d BSSID: " MAC_ADDRESS_STR),
sessionId, scan_cmd->u.scanCmd.scanID,
scan_cmd->u.scanCmd.reason, pTempScanReq->SSIDs.numOfSSIDs,
pTempScanReq->ChannelInfo.numOfChannels,
pTempScanReq->p2pSearch, pTempScanReq->minChnTime,
- pTempScanReq->maxChnTime, pTempScanReq->uIEFieldLen);
+ pTempScanReq->maxChnTime, pTempScanReq->uIEFieldLen,
+ MAC_ADDR_ARRAY(scan_cmd->u.scanCmd.u.scanRequest.bssid.bytes));
status = csr_queue_sme_command(pMac, scan_cmd, false);
if (!QDF_IS_STATUS_SUCCESS(status)) {
@@ -5660,6 +5661,8 @@ QDF_STATUS csr_scan_copy_request(tpAniSirGlobal mac_ctx,
goto complete;
}
} /* Allocate memory for SSID List */
+ qdf_mem_copy(&dst_req->bssid, &src_req->bssid,
+ sizeof(struct qdf_mac_addr));
dst_req->p2pSearch = src_req->p2pSearch;
dst_req->skipDfsChnlInP2pSearch =
src_req->skipDfsChnlInP2pSearch;