qcacmn: Register PNO callback only when PNO req is sent

PNO can be initiated from IOCTL with different calback and
thus register the callback while sending the PNO req.

Change-Id: I74109fc88cfbd082ce2ba5ca0a2396ab08b82b42
CRs-Fixed: 2032434
Dieser Commit ist enthalten in:
Abhishek Singh
2017-04-11 18:20:44 +05:30
committet von Sandeep Puligilla
Ursprung 9c63fb71d0
Commit 5468c57437

Datei anzeigen

@@ -130,13 +130,6 @@ static void wlan_cfg80211_pno_callback(struct wlan_objmgr_vdev *vdev,
cfg80211_sched_scan_results(pdev_ospriv->wiphy);
}
static void
wlan_cfg80211_register_pno_cb(struct wlan_objmgr_psoc *psoc)
{
ucfg_scan_register_pno_cb(psoc,
wlan_cfg80211_pno_callback, NULL);
}
/**
* wlan_cfg80211_is_pno_allowed() - Check if PNO is allowed
* @vdev: vdev ptr
@@ -179,6 +172,7 @@ int wlan_cfg80211_sched_scan_start(struct wlan_objmgr_pdev *pdev,
QDF_STATUS status;
uint8_t num_chan = 0, channel;
struct wlan_objmgr_vdev *vdev;
struct wlan_objmgr_psoc *psoc;
uint32_t valid_ch[SCAN_PNO_MAX_NETW_CHANNELS_EX] = {0};
vdev = wlan_objmgr_get_vdev_by_macaddr_from_pdev(pdev, dev->dev_addr,
@@ -195,6 +189,12 @@ int wlan_cfg80211_sched_scan_start(struct wlan_objmgr_pdev *pdev,
return -ENOTSUPP;
}
if (ucfg_scan_get_pno_in_progress(vdev)) {
cfg80211_debug("pno is already in progress");
wlan_objmgr_vdev_release_ref(vdev, WLAN_OSIF_ID);
return -EBUSY;
}
ucfg_scan_flush_results(pdev, NULL);
if (ucfg_scan_get_pdev_status(pdev) !=
SCAN_NOT_IN_PROGRESS) {
@@ -330,6 +330,11 @@ int wlan_cfg80211_sched_scan_start(struct wlan_objmgr_pdev *pdev,
req->fast_scan_period, req->fast_scan_max_cycles,
req->slow_scan_period);
wlan_pdev_obj_lock(pdev);
psoc = wlan_pdev_get_psoc(pdev);
wlan_pdev_obj_unlock(pdev);
ucfg_scan_register_pno_cb(psoc,
wlan_cfg80211_pno_callback, NULL);
ucfg_scan_get_pno_def_params(vdev, req);
status = ucfg_scan_pno_start(vdev, req);
if (QDF_IS_STATUS_ERROR(status)) {
@@ -371,13 +376,6 @@ int wlan_cfg80211_sched_scan_stop(struct wlan_objmgr_pdev *pdev,
wlan_objmgr_vdev_release_ref(vdev, WLAN_OSIF_ID);
return ret;
}
#else
static inline void
wlan_cfg80211_register_pno_cb(struct wlan_objmgr_psoc *psoc)
{
return;
}
#endif /*FEATURE_WLAN_SCAN_PNO */
/**
@@ -706,7 +704,6 @@ QDF_STATUS wlan_cfg80211_scan_priv_init(struct wlan_objmgr_pdev *pdev)
psoc = wlan_pdev_get_psoc(pdev);
wlan_pdev_obj_unlock(pdev);
wlan_cfg80211_register_pno_cb(psoc);
req_id = ucfg_scan_register_requester(psoc, "HDD",
wlan_cfg80211_scan_done_callback, NULL);