qcacmn: Add support for PNO scan in connected state
qcacld-2.0 to qcacmn propagation Add changes to support PNO scan in connected state to find better Ap's based on rssi threshold, band and rssi preference. Change-Id: I0744297cc5269f0fe37613247c911102e293d8e9 CRs-Fixed: 2000342
このコミットが含まれているのは:
@@ -234,37 +234,6 @@ static void wlan_cfg80211_pno_callback(struct wlan_objmgr_vdev *vdev,
|
||||
cfg80211_sched_scan_results(pdev_ospriv->wiphy);
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_cfg80211_is_pno_allowed() - Check if PNO is allowed
|
||||
* @vdev: vdev ptr
|
||||
*
|
||||
* The PNO Start request is coming from upper layers.
|
||||
* It is to be allowed only for Infra STA device type
|
||||
* and the link should be in a disconnected state.
|
||||
*
|
||||
* Return: Success if PNO is allowed, Failure otherwise.
|
||||
*/
|
||||
static QDF_STATUS wlan_cfg80211_is_pno_allowed(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
enum wlan_vdev_state state;
|
||||
enum tQDF_ADAPTER_MODE vdev_opmode;
|
||||
uint8_t vdev_id;
|
||||
|
||||
vdev_opmode = wlan_vdev_mlme_get_opmode(vdev);
|
||||
state = wlan_vdev_mlme_get_state(vdev);
|
||||
vdev_id = wlan_vdev_get_id(vdev);
|
||||
|
||||
cfg80211_notice("dev_mode=%d, state=%d vdev id %d",
|
||||
vdev_opmode, state, vdev_id);
|
||||
|
||||
if ((vdev_opmode == QDF_STA_MODE) &&
|
||||
((state == WLAN_VDEV_S_INIT) ||
|
||||
(state == WLAN_VDEV_S_STOP)))
|
||||
return QDF_STATUS_SUCCESS;
|
||||
else
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
#ifdef WLAN_POLICY_MGR_ENABLE
|
||||
static bool wlan_cfg80211_is_ap_go_present(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
@@ -354,6 +323,36 @@ static void wlan_pno_scan_rand_attr(struct wlan_objmgr_vdev *vdev,
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_hdd_sched_scan_update_relative_rssi() - update CPNO params
|
||||
* @pno_request: pointer to PNO scan request
|
||||
* @request: Pointer to cfg80211 scheduled scan start request
|
||||
*
|
||||
* This function is used to update Connected PNO params sent by kernel
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
#if defined(CFG80211_REPORT_BETTER_BSS_IN_SCHED_SCAN)
|
||||
static inline void wlan_hdd_sched_scan_update_relative_rssi(
|
||||
struct pno_scan_req_params *pno_request,
|
||||
struct cfg80211_sched_scan_request *request)
|
||||
{
|
||||
pno_request->relative_rssi_set = request->relative_rssi_set;
|
||||
pno_request->relative_rssi = request->relative_rssi;
|
||||
if (NL80211_BAND_2GHZ == request->rssi_adjust.band)
|
||||
pno_request->band_rssi_pref.band = WLAN_BAND_2_4_GHZ;
|
||||
else if (NL80211_BAND_5GHZ == request->rssi_adjust.band)
|
||||
pno_request->band_rssi_pref.band = WLAN_BAND_5_GHZ;
|
||||
pno_request->band_rssi_pref.rssi = request->rssi_adjust.delta;
|
||||
}
|
||||
#else
|
||||
static inline void wlan_hdd_sched_scan_update_relative_rssi(
|
||||
struct pno_scan_req_params *pno_request,
|
||||
struct cfg80211_sched_scan_request *request)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
int wlan_cfg80211_sched_scan_start(struct wlan_objmgr_pdev *pdev,
|
||||
struct net_device *dev,
|
||||
struct cfg80211_sched_scan_request *request,
|
||||
@@ -374,13 +373,6 @@ int wlan_cfg80211_sched_scan_start(struct wlan_objmgr_pdev *pdev,
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
status = wlan_cfg80211_is_pno_allowed(vdev);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
cfg80211_err("pno is not allowed");
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_OSIF_ID);
|
||||
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);
|
||||
@@ -544,6 +536,7 @@ int wlan_cfg80211_sched_scan_start(struct wlan_objmgr_pdev *pdev,
|
||||
cfg80211_notice("Base scan interval: %d sec, scan cycles: %d, slow scan interval %d",
|
||||
req->fast_scan_period, req->fast_scan_max_cycles,
|
||||
req->slow_scan_period);
|
||||
wlan_hdd_sched_scan_update_relative_rssi(req, request);
|
||||
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
ucfg_scan_register_pno_cb(psoc,
|
||||
|
新しいイシューから参照
ユーザーをブロックする