From cb0ded24387a4c0ec3d1deb7489ff9bb9b938e15 Mon Sep 17 00:00:00 2001 From: wadesong Date: Fri, 2 Feb 2018 17:57:20 +0800 Subject: [PATCH] qcacld-3.0: Add diag event support for ACS Send ACS diag event when SAP is doing ACS. Change-Id: I409b57dce98a12796cfee1619c8efe47a403bd1d CRs-Fixed: 2238666 --- core/hdd/src/wlan_hdd_cfg80211.c | 6 +++++- core/sap/src/sap_api_link_cntl.c | 27 +++++++++++++++++++++++++ core/sap/src/sap_ch_select.c | 6 ++++++ core/sap/src/sap_fsm.c | 11 ++++++++--- core/sme/inc/csr_api.h | 1 + core/sme/src/csr/csr_util.c | 34 ++++++++++++++++++++++++++++++++ 6 files changed, 81 insertions(+), 4 deletions(-) diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index d069b6243497..5060ff84909c 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/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; diff --git a/core/sap/src/sap_api_link_cntl.c b/core/sap/src/sap_api_link_cntl.c index 1d808caa1ce3..b115db775edc 100644 --- a/core/sap/src/sap_api_link_cntl.c +++ b/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"), diff --git a/core/sap/src/sap_ch_select.c b/core/sap/src/sap_ch_select.c index d29aa9f11f2c..8c938796e3ab 100644 --- a/core/sap/src/sap_ch_select.c +++ b/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 diff --git a/core/sap/src/sap_fsm.c b/core/sap/src/sap_fsm.c index ef008399471a..eb21dfe90099 100644 --- a/core/sap/src/sap_fsm.c +++ b/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 } diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 6f2c2a973aa4..7d87bb686ab2 100644 --- a/core/sme/inc/csr_api.h +++ b/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) diff --git a/core/sme/src/csr/csr_util.c b/core/sme/src/csr/csr_util.c index 32e3fa8760fd..1703a04442a7 100644 --- a/core/sme/src/csr/csr_util.c +++ b/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) {