Browse Source

qcacld-3.0: Add diag event support for ACS

Send ACS diag event when SAP is doing ACS.

Change-Id: I409b57dce98a12796cfee1619c8efe47a403bd1d
CRs-Fixed: 2238666
wadesong 7 years ago
parent
commit
cb0ded2438

+ 5 - 1
core/hdd/src/wlan_hdd_cfg80211.c

@@ -2586,7 +2586,11 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
 		sap_config->acs_cfg.ch_width, ht_enabled, vht_enabled,
 		sap_config->acs_cfg.start_ch, sap_config->acs_cfg.end_ch,
 		sap_config->acs_cfg.band);
-
+	host_log_acs_req_event(adapter->dev->name,
+			  csr_phy_mode_str(sap_config->acs_cfg.hw_mode),
+			  ch_width, ht_enabled, vht_enabled,
+			  sap_config->acs_cfg.start_ch,
+			  sap_config->acs_cfg.end_ch);
 	if (hdd_ctx->config->auto_channel_select_weight)
 		sap_config->auto_channel_select_weight =
 		    hdd_ctx->config->auto_channel_select_weight;

+ 27 - 0
core/sap/src/sap_api_link_cntl.c

@@ -286,6 +286,31 @@ static QDF_STATUS sap_hdd_signal_event_handler(void *ctx)
 	return status;
 }
 
+/**
+ * acs_scan_done_status_str() - parse scan status to string
+ * @status: scan status
+ *
+ * This function parse scan status to string
+ *
+ * Return: status string
+ *
+ */
+static const char *acs_scan_done_status_str(eCsrScanStatus status)
+{
+	switch (status) {
+	case eCSR_SCAN_SUCCESS:
+		return "Success";
+	case eCSR_SCAN_FAILURE:
+		return "Failure";
+	case eCSR_SCAN_ABORT:
+		return "Abort";
+	case eCSR_SCAN_FOUND_PEER:
+		return "Found peer";
+	default:
+		return "Unknown";
+	}
+}
+
 QDF_STATUS wlansap_pre_start_bss_acs_scan_callback(tHalHandle hal_handle,
 						   struct sap_context *sap_ctx,
 						   uint8_t sessionid,
@@ -297,6 +322,8 @@ QDF_STATUS wlansap_pre_start_bss_acs_scan_callback(tHalHandle hal_handle,
 	uint8_t oper_channel = 0;
 	QDF_STATUS status = QDF_STATUS_E_FAILURE;
 
+	host_log_acs_scan_done(acs_scan_done_status_str(scan_status),
+			  sessionid, scanid);
 	if (eCSR_SCAN_SUCCESS != scan_status) {
 		QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR,
 			FL("CSR scan_status = eCSR_SCAN_ABORT/FAILURE (%d), choose default channel"),

+ 6 - 0
core/sap/src/sap_ch_select.c

@@ -1700,6 +1700,10 @@ debug_info:
 			  "In %s, Chan=%d Weight= %d rssiAgr=%d bssCount=%d",
 			  __func__, pSpectCh->chNum, pSpectCh->weight,
 			  pSpectCh->rssiAgr, pSpectCh->bssCount);
+		host_log_acs_chan_spect_weight(pSpectCh->chNum,
+					  (uint16_t)pSpectCh->weight,
+					  pSpectCh->rssiAgr,
+					  pSpectCh->bssCount);
 		/* ------ Debug Info ------ */
 		pSpectCh++;
 	}
@@ -2837,6 +2841,8 @@ sap_ch_sel_end:
 
 	QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH,
 		  FL("Running SAP Ch select Completed, Ch=%d"), best_ch_num);
+	host_log_acs_best_chan(best_ch_num, sap_ctx->acsBestChannelInfo.weight);
+
 	if (best_ch_num > 0 && best_ch_num <= 252)
 		return best_ch_num;
 	else

+ 8 - 3
core/sap/src/sap_fsm.c

@@ -851,6 +851,8 @@ QDF_STATUS sap_goto_channel_sel(struct sap_context *sap_context,
 #endif
 	tHalHandle h_hal;
 	uint8_t con_ch;
+	uint8_t vdev_id;
+	uint32_t scan_id;
 
 	h_hal = cds_get_context(QDF_MODULE_ID_SME);
 	if (NULL == h_hal) {
@@ -1005,8 +1007,10 @@ QDF_STATUS sap_goto_channel_sel(struct sap_context *sap_context,
 
 		ucfg_scan_init_default_params(vdev, req);
 		req->scan_req.dwell_time_active = 0;
-		req->scan_req.scan_id = ucfg_scan_get_scan_id(mac_ctx->psoc);
-		req->scan_req.vdev_id = wlan_vdev_get_id(vdev);
+		scan_id = ucfg_scan_get_scan_id(mac_ctx->psoc);
+		req->scan_req.scan_id = scan_id;
+		vdev_id = wlan_vdev_get_id(vdev);
+		req->scan_req.vdev_id = vdev_id;
 		req->scan_req.scan_req_id = sap_context->req_id;
 		sap_get_channel_list(sap_context, &channel_list,
 				  &num_of_channels);
@@ -1074,8 +1078,9 @@ QDF_STATUS sap_goto_channel_sel(struct sap_context *sap_context,
 		} else {
 			QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH,
 				 FL("return sme_ScanReq, scanID=%d, Ch=%d"),
-				req->scan_req.scan_id,
+				 scan_id,
 				 sap_context->channel);
+			host_log_acs_scan_start(scan_id, vdev_id);
 		}
 #ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE
 		}

+ 1 - 0
core/sme/inc/csr_api.h

@@ -1709,6 +1709,7 @@ QDF_STATUS csr_set_channels(tHalHandle hHal, tCsrConfigParam *pParam);
 /* enum to string conversion for debug output */
 const char *get_e_roam_cmd_status_str(eRoamCmdStatus val);
 const char *get_e_csr_roam_result_str(eCsrRoamResult val);
+const char *csr_phy_mode_str(eCsrPhyMode phy_mode);
 QDF_STATUS csr_set_phy_mode(tHalHandle hHal, uint32_t phyMode,
 			    enum band_info eBand, bool *pfRestartNeeded);
 typedef void (*csr_roamLinkQualityIndCallback)

+ 34 - 0
core/sme/src/csr/csr_util.c

@@ -374,6 +374,40 @@ const char *get_e_csr_roam_result_str(eCsrRoamResult val)
 	}
 }
 
+const char *csr_phy_mode_str(eCsrPhyMode phy_mode)
+{
+	switch (phy_mode) {
+	case eCSR_DOT11_MODE_abg:
+		return "abg";
+	case eCSR_DOT11_MODE_11a:
+		return "11a";
+	case eCSR_DOT11_MODE_11b:
+		return "11b";
+	case eCSR_DOT11_MODE_11g:
+		return "11g";
+	case eCSR_DOT11_MODE_11n:
+		return "11n";
+	case eCSR_DOT11_MODE_11g_ONLY:
+		return "11g_only";
+	case eCSR_DOT11_MODE_11n_ONLY:
+		return "11n_only";
+	case eCSR_DOT11_MODE_11b_ONLY:
+		return "11b_only";
+	case eCSR_DOT11_MODE_11ac:
+		return "11ac";
+	case eCSR_DOT11_MODE_11ac_ONLY:
+		return "11ac_only";
+	case eCSR_DOT11_MODE_AUTO:
+		return "auto";
+	case eCSR_DOT11_MODE_11ax:
+		return "11ax";
+	case eCSR_DOT11_MODE_11ax_ONLY:
+		return "11ax_only";
+	default:
+		return "unknown";
+	}
+}
+
 void purge_sme_session_active_scan_cmd_list(struct sAniSirGlobal *mac_ctx,
 				uint32_t session_id)
 {