浏览代码

qcacmn: Send default ies in scan request to fw

On framework initiated scan, ies are not sent in
scan request from upper layer and default scan ies are
not sent as part of scan request sent to firmware. This
results in not including oce ie in probe requests for
framework initated scans

Fix is to copy default ies to ie field in scan request
sent to firmware.

Change-Id: I895563bafc2a2b6e483d08cb28ee44ad34f5af70
CRs-Fixed: 2087124
yeshwanth sriram guntuka 7 年之前
父节点
当前提交
074f5e91b8
共有 2 个文件被更改,包括 30 次插入13 次删除
  1. 13 2
      os_if/linux/scan/inc/wlan_cfg80211_scan.h
  2. 17 11
      os_if/linux/scan/src/wlan_cfg80211_scan.c

+ 13 - 2
os_if/linux/scan/inc/wlan_cfg80211_scan.h

@@ -113,6 +113,17 @@ struct scan_req {
 	uint8_t source;
 };
 
+/**
+ * struct scan_params - Scan params
+ * @source: scan request source
+ * @default_ie: default scan ie
+ *
+ */
+struct scan_params {
+	uint8_t source;
+	struct element_info default_ie;
+};
+
 #ifdef FEATURE_WLAN_SCAN_PNO
 /**
  * wlan_cfg80211_sched_scan_start() - cfg80211 scheduled scan(pno) start
@@ -176,7 +187,7 @@ QDF_STATUS wlan_cfg80211_scan_priv_deinit(
  * wlan_cfg80211_scan() - API to process cfg80211 scan request
  * @pdev: Pointer to pdev
  * @request: Pointer to scan request
- * @source: source of scan request
+ * @params: scan params
  *
  * API to trigger scan and update cfg80211 scan database.
  * scan dump command can be used to fetch scan results
@@ -186,7 +197,7 @@ QDF_STATUS wlan_cfg80211_scan_priv_deinit(
  */
 int wlan_cfg80211_scan(struct wlan_objmgr_pdev *pdev,
 		struct cfg80211_scan_request *request,
-		uint8_t source);
+		struct scan_params *params);
 
 /**
  * wlan_cfg80211_inform_bss_frame() - API to inform beacon to cfg80211

+ 17 - 11
os_if/linux/scan/src/wlan_cfg80211_scan.c

@@ -1080,17 +1080,9 @@ void wlan_cfg80211_cleanup_scan_queue(struct wlan_objmgr_pdev *pdev)
 	return;
 }
 
-/**
- * wlan_cfg80211_scan() - Process scan request
- * @pdev: pdev object pointer
- * @request: scan request
- * @source : returns source of the scan request
- *
- * Return: 0 on success, error number otherwise
- */
 int wlan_cfg80211_scan(struct wlan_objmgr_pdev *pdev,
 		struct cfg80211_scan_request *request,
-		uint8_t source)
+		struct scan_params *params)
 {
 	struct net_device *dev = request->wdev->netdev;
 	struct scan_start_request *req;
@@ -1288,6 +1280,18 @@ int wlan_cfg80211_scan(struct wlan_objmgr_pdev *pdev,
 		req->scan_req.extraie.len = request->ie_len;
 		qdf_mem_copy(req->scan_req.extraie.ptr, request->ie,
 				request->ie_len);
+	} else if (params->default_ie.ptr && params->default_ie.len) {
+		req->scan_req.extraie.ptr =
+			qdf_mem_malloc(params->default_ie.len);
+		if (!req->scan_req.extraie.ptr) {
+			cfg80211_err("Failed to allocate memory");
+			status = -ENOMEM;
+			qdf_mem_free(req);
+			goto end;
+		}
+		req->scan_req.extraie.len = params->default_ie.len;
+		qdf_mem_copy(req->scan_req.extraie.ptr, params->default_ie.ptr,
+			     params->default_ie.len);
 	}
 
 	if (!is_p2p_scan) {
@@ -1302,7 +1306,8 @@ int wlan_cfg80211_scan(struct wlan_objmgr_pdev *pdev,
 		ucfg_scan_flush_results(pdev, NULL);
 
 	/* Enqueue the scan request */
-	wlan_scan_request_enqueue(pdev, request, source, req->scan_req.scan_id);
+	wlan_scan_request_enqueue(pdev, request, params->source,
+				  req->scan_req.scan_id);
 
 	qdf_runtime_pm_prevent_suspend(
 		&osif_priv->osif_scan->runtime_pm_lock);
@@ -1316,7 +1321,8 @@ int wlan_cfg80211_scan(struct wlan_objmgr_pdev *pdev,
 		} else {
 			status = -EIO;
 		}
-		wlan_scan_request_dequeue(pdev, scan_id, &request, &source);
+		wlan_scan_request_dequeue(pdev, scan_id, &request,
+					  &params->source);
 		if (qdf_list_empty(&osif_priv->osif_scan->scan_req_q))
 			qdf_runtime_pm_allow_suspend(
 				&osif_priv->osif_scan->runtime_pm_lock);