Browse Source

qcacmn: Add proper scan req flags and bssid in scan request

scan req flags for FW should be set based on the flags in request.
scan request is assuming num_bssid as one and copying single
mac_address but it should support more bssid and hence change this
to add multiple bssids.

Change-Id: I3fbad3353c1a9904847e09c527254e104cb6db71
CRs-Fixed: 1099421
Kiran Venkatappa 8 years ago
parent
commit
88a68589e2
1 changed files with 42 additions and 3 deletions
  1. 42 3
      wmi/src/wmi_unified_tlv.c

+ 42 - 3
wmi/src/wmi_unified_tlv.c

@@ -1818,11 +1818,39 @@ static inline void copy_scan_notify_ev_flags(
 		WMI_SCAN_EVENT_FOREIGN_CHANNEL |
 		WMI_SCAN_EVENT_DEQUEUED
 		;
-	cmd->scan_ctrl_flags = params->scan_ctrl_flags;
-	cmd->scan_ctrl_flags |= WMI_SCAN_ADD_BCAST_PROBE_REQ;
+
+	cmd->scan_ctrl_flags = (params->passive_flag) ?
+	    WMI_SCAN_FLAG_PASSIVE : 0;
+
+	if (params->is_strict_pscan_en)
+		cmd->scan_ctrl_flags |= WMI_SCAN_FLAG_STRICT_PASSIVE_ON_PCHN;
 
 	if (params->is_phy_error)
 		cmd->scan_ctrl_flags |= WMI_SCAN_CAPTURE_PHY_ERROR;
+
+	if (params->half_rate)
+		cmd->scan_ctrl_flags |= WMI_SCAN_FLAG_HALF_RATE_SUPPORT;
+
+	if (params->quarter_rate)
+		cmd->scan_ctrl_flags |= WMI_SCAN_FLAG_QUARTER_RATE_SUPPORT;
+
+	if (params->is_phy_error)
+		cmd->scan_ctrl_flags |= WMI_SCAN_CAPTURE_PHY_ERROR;
+
+	cmd->scan_ctrl_flags |= WMI_SCAN_ADD_OFDM_RATES;
+	/* add cck rates if required */
+	if (params->add_cck_rates)
+		cmd->scan_ctrl_flags |= WMI_SCAN_ADD_CCK_RATES;
+	/** It enables the Channel stat event indication to host */
+	if (params->chan_stat_enable)
+		cmd->scan_ctrl_flags |= WMI_SCAN_CHAN_STAT_EVENT;
+	if (params->add_bcast_probe_reqd)
+		cmd->scan_ctrl_flags |= WMI_SCAN_ADD_BCAST_PROBE_REQ;
+	/* off channel TX control */
+	if (params->offchan_tx_mgmt)
+		cmd->scan_ctrl_flags |= WMI_SCAN_OFFCHAN_MGMT_TX;
+	if (params->offchan_tx_data)
+		cmd->scan_ctrl_flags |= WMI_SCAN_OFFCHAN_DATA_TX;
 }
 #endif
 /**
@@ -1858,7 +1886,8 @@ QDF_STATUS send_scan_start_cmd_tlv(wmi_unified_t wmi_handle,
 
 	/* Length TLV placeholder for array of wmi_mac_addr structures */
 	len += WMI_TLV_HDR_SIZE;
-	len += sizeof(wmi_mac_addr);
+	if (params->num_bssid)
+		len += sizeof(wmi_mac_addr) * params->num_bssid;
 
 	/* Length TLV placeholder for array of bytes */
 	len += WMI_TLV_HDR_SIZE;
@@ -1930,7 +1959,17 @@ QDF_STATUS send_scan_start_cmd_tlv(wmi_unified_t wmi_handle,
 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_FIXED_STRUC,
 		       (params->num_bssid * sizeof(wmi_mac_addr)));
 	bssid = (wmi_mac_addr *) (buf_ptr + WMI_TLV_HDR_SIZE);
+#if CONFIG_MCL
 	WMI_CHAR_ARRAY_TO_MAC_ADDR(params->mac_add_bytes, bssid);
+#else
+	if (params->num_bssid) {
+		for (i = 0; i < params->num_bssid; ++i) {
+			WMI_CHAR_ARRAY_TO_MAC_ADDR(params->bssid_list[i],
+					bssid);
+			bssid++;
+		}
+	}
+#endif
 	buf_ptr += WMI_TLV_HDR_SIZE + (params->num_bssid * sizeof(wmi_mac_addr));
 
 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_BYTE, params->ie_len_with_pad);