Browse Source

qcacmn: Expose scan_backoff_multiplier for NLO/PNO

For Network Listen Offload and Perfered Network Offload, the fast scan
period is multiplied by scan_backoff_multiplier after max cycles have
occurred. Expose scan_backoff_multiplier to consumers of the WMI API,
so this parameter can be configured.

Change-Id: I478fb61cd096d3496205f4ff556e180dabf99b77
CRs-Fixed: 2035201
Dustin Brown 8 years ago
parent
commit
f3351d97d7

+ 3 - 1
os_if/linux/scan/inc/wlan_cfg80211_scan.h

@@ -117,12 +117,14 @@ struct scan_req {
  * @pdev: pdev pointer
  * @dev: Pointer network device
  * @request: Pointer to cfg80211 scheduled scan start request
+ * @scan_backoff_multiplier: multiply scan period by this after max cycles
  *
  * Return: 0 for success, non zero for failure
  */
 int wlan_cfg80211_sched_scan_start(struct wlan_objmgr_pdev *pdev,
 	struct net_device *dev,
-	struct cfg80211_sched_scan_request *request);
+	struct cfg80211_sched_scan_request *request,
+	uint8_t scan_backoff_multiplier);
 
 /**
  * wlan_cfg80211_sched_scan_stop() - cfg80211 scheduled scan(pno) stop

+ 4 - 2
os_if/linux/scan/src/wlan_cfg80211_scan.c

@@ -140,7 +140,7 @@ static void wlan_cfg80211_pno_callback(struct wlan_objmgr_vdev *vdev,
 	pdev_ospriv = wlan_pdev_get_ospriv(pdev);
 	wlan_pdev_obj_unlock(pdev);
 	if (!pdev_ospriv) {
-		cfg80211_err("pdev_osprivis NULL");
+		cfg80211_err("pdev_ospriv is NULL");
 		return;
 	}
 	cfg80211_sched_scan_results(pdev_ospriv->wiphy);
@@ -181,7 +181,8 @@ static QDF_STATUS wlan_cfg80211_is_pno_allowed(struct wlan_objmgr_vdev *vdev)
 
 int wlan_cfg80211_sched_scan_start(struct wlan_objmgr_pdev *pdev,
 	struct net_device *dev,
-	struct cfg80211_sched_scan_request *request)
+	struct cfg80211_sched_scan_request *request,
+	uint8_t scan_backoff_multiplier)
 {
 	struct pno_scan_req_params *req;
 	int i, j, ret = 0;
@@ -342,6 +343,7 @@ int wlan_cfg80211_sched_scan_start(struct wlan_objmgr_pdev *pdev,
 	 */
 	wlan_config_sched_scan_plan(req, request);
 	req->delay_start_time = hdd_config_sched_scan_start_delay(request);
+	req->scan_backoff_multiplier = scan_backoff_multiplier;
 	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);

+ 7 - 0
umac/scan/dispatcher/inc/wlan_scan_public_structs.h

@@ -880,6 +880,7 @@ struct pno_nw_type {
  * @slow_scan_period: Slow scan period
  * @delay_start_time: delay in seconds to use before starting the first scan
  * @fast_scan_max_cycles: Fast scan max cycles
+ * @scan_backoff_multiplier: multiply fast scan period by this after max cycles
  * @pno_channel_prediction: PNO channel prediction feature status
  * @uint32_t active_dwell_time: active dwell time
  * @uint32_t passive_dwell_time: passive dwell time
@@ -890,6 +891,11 @@ struct pno_nw_type {
  * @channel_prediction_full_scan: periodic timer upon which a full scan needs
  * to be triggered.
  * @networks_list: Preferred network list
+ *
+ * E.g.
+ *	{ fast_scan_period=120, fast_scan_max_cycles=2,
+ *	  slow_scan_period=1800, scan_backoff_multiplier=2 }
+ *	Result: 120s x2, 240s x2, 480s x2, 960s x2, 1800s xN
  */
 struct pno_scan_req_params {
 	uint32_t networks_cnt;
@@ -898,6 +904,7 @@ struct pno_scan_req_params {
 	uint32_t slow_scan_period;
 	uint32_t delay_start_time;
 	uint32_t fast_scan_max_cycles;
+	uint8_t scan_backoff_multiplier;
 	uint32_t active_dwell_time;
 	uint32_t passive_dwell_time;
 	uint32_t pno_channel_prediction;

+ 1 - 0
wmi/src/wmi_unified_tlv.c

@@ -7020,6 +7020,7 @@ static QDF_STATUS send_pno_start_cmd_tlv(wmi_unified_t wmi_handle,
 	cmd->slow_scan_period = pno->slow_scan_period;
 	cmd->delay_start_time = WMI_SEC_TO_MSEC(pno->delay_start_time);
 	cmd->fast_scan_max_cycles = pno->fast_scan_max_cycles;
+	cmd->scan_backoff_multiplier = pno->scan_backoff_multiplier;
 	WMI_LOGD("fast_scan_period: %d msec slow_scan_period: %d msec",
 			cmd->fast_scan_period, cmd->slow_scan_period);
 	WMI_LOGD("fast_scan_max_cycles: %d", cmd->fast_scan_max_cycles);