qcacmn: Add changes in scan req to support P2P search scan
Add changes to support P2P search using new scan module. To support p2p search added vdev id and Broadcast mac address in scan req also enable flags depending on scan req type. Change-Id: I597f9f353da1b8b129f0ee16cd8eb7b7bbad2625 CRs-Fixed: 1095299
Bu işleme şunda yer alıyor:

işlemeyi yapan:
qcabuildsw

ebeveyn
d7caa4055e
işleme
f9297e523b
@@ -392,6 +392,7 @@ int wlan_cfg80211_scan(struct wlan_objmgr_pdev *pdev,
|
||||
struct pdev_osif_priv *osif_priv;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
wlan_scan_id scan_id;
|
||||
bool is_p2p_scan = false;
|
||||
|
||||
/* Get the vdev object */
|
||||
vdev = wlan_objmgr_get_vdev_by_macaddr_from_pdev(pdev, dev->dev_addr,
|
||||
@@ -427,6 +428,7 @@ int wlan_cfg80211_scan(struct wlan_objmgr_pdev *pdev,
|
||||
}
|
||||
/* fill the scan request structure */
|
||||
req->vdev = vdev;
|
||||
req->scan_req.vdev_id = wlan_vdev_get_id(vdev);
|
||||
req->scan_req.scan_id = scan_id;
|
||||
req->scan_req.scan_req_id = req_id;
|
||||
/*
|
||||
@@ -460,17 +462,58 @@ int wlan_cfg80211_scan(struct wlan_objmgr_pdev *pdev,
|
||||
(wlan_vdev_mlme_get_opmode(vdev) == QDF_P2P_GO_MODE))
|
||||
req->scan_req.scan_f_passive = false;
|
||||
|
||||
if (!request->no_cck) {
|
||||
if ((request->n_ssids == 1) && request->ssids &&
|
||||
!qdf_mem_cmp(&request->ssids[0], "DIRECT-", 7))
|
||||
is_p2p_scan = true;
|
||||
|
||||
if (is_p2p_scan && request->no_cck) {
|
||||
req->scan_req.adaptive_dwell_time_mode =
|
||||
SCAN_DWELL_MODE_STATIC;
|
||||
req->scan_req.dwell_time_active +=
|
||||
P2P_SEARCH_DWELL_TIME_INC;
|
||||
req->scan_req.repeat_probe_time =
|
||||
req->scan_req.dwell_time_active / 5;
|
||||
req->scan_req.burst_duration =
|
||||
BURST_SCAN_MAX_NUM_OFFCHANNELS *
|
||||
req->scan_req.dwell_time_active;
|
||||
if (req->scan_req.burst_duration >
|
||||
P2P_SCAN_MAX_BURST_DURATION) {
|
||||
uint8_t channels =
|
||||
P2P_SCAN_MAX_BURST_DURATION /
|
||||
req->scan_req.dwell_time_active;
|
||||
if (channels)
|
||||
req->scan_req.burst_duration =
|
||||
channels *
|
||||
req->scan_req.dwell_time_active;
|
||||
else
|
||||
req->scan_req.burst_duration =
|
||||
P2P_SCAN_MAX_BURST_DURATION;
|
||||
}
|
||||
req->scan_req.scan_ev_bss_chan = false;
|
||||
} else {
|
||||
req->scan_req.scan_f_cck_rates = true;
|
||||
if (!req->scan_req.num_ssids)
|
||||
req->scan_req.scan_f_bcast_probe = true;
|
||||
req->scan_req.scan_f_add_tpc_ie_in_probe = true;
|
||||
req->scan_req.scan_f_filter_prb_req = true;
|
||||
}
|
||||
req->scan_req.scan_f_add_ds_ie_in_probe = true;
|
||||
req->scan_req.scan_f_filter_prb_req = true;
|
||||
|
||||
req->scan_req.n_probes = (req->scan_req.repeat_probe_time > 0) ?
|
||||
(req->scan_req.dwell_time_active /
|
||||
req->scan_req.repeat_probe_time) : 0;
|
||||
|
||||
/*
|
||||
* FW require at least 1 MAC to send probe request.
|
||||
* If MAC is all 0 set it to BC addr as this is the address on
|
||||
* which fw will send probe req.
|
||||
*/
|
||||
req->scan_req.num_bssid = 1;
|
||||
qdf_mem_copy(&req->scan_req.bssid_list[0].bytes, request->bssid,
|
||||
QDF_MAC_ADDR_SIZE);
|
||||
if (qdf_is_macaddr_zero(&req->scan_req.bssid_list[0]))
|
||||
qdf_set_macaddr_broadcast(&req->scan_req.bssid_list[0]);
|
||||
|
||||
if (request->n_channels) {
|
||||
char chl[(request->n_channels * 5) + 1];
|
||||
int len = 0;
|
||||
@@ -494,9 +537,7 @@ int wlan_cfg80211_scan(struct wlan_objmgr_pdev *pdev,
|
||||
req->scan_req.num_chan = num_chan;
|
||||
|
||||
/* P2P increase the scan priority */
|
||||
if ((request->n_ssids == 1) &&
|
||||
(request->ssids != NULL) &&
|
||||
qdf_mem_cmp(&request->ssids[0], "DIRECT-", 7))
|
||||
if (is_p2p_scan)
|
||||
req->scan_req.scan_priority = SCAN_PRIORITY_HIGH;
|
||||
if (request->ie_len) {
|
||||
req->scan_req.extraie.ptr = qdf_mem_malloc(request->ie_len);
|
||||
@@ -510,6 +551,10 @@ int wlan_cfg80211_scan(struct wlan_objmgr_pdev *pdev,
|
||||
qdf_mem_copy(req->scan_req.extraie.ptr, request->ie,
|
||||
request->ie_len);
|
||||
}
|
||||
|
||||
if (request->flags & NL80211_SCAN_FLAG_FLUSH)
|
||||
ucfg_scan_flush_results(pdev, NULL);
|
||||
|
||||
/* Enqueue the scan request */
|
||||
wlan_scan_request_enqueue(pdev, request, source, req->scan_req.scan_id);
|
||||
|
||||
@@ -524,8 +569,6 @@ int wlan_cfg80211_scan(struct wlan_objmgr_pdev *pdev,
|
||||
}
|
||||
}
|
||||
|
||||
if (request->flags & NL80211_SCAN_FLAG_FLUSH)
|
||||
ucfg_scan_flush_results(pdev, NULL);
|
||||
end:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_OSIF_ID);
|
||||
return status;
|
||||
|
Yeni konuda referans
Bir kullanıcı engelle