diff options
| author | gaolez <gaolez@codeaurora.org> | 2016-09-06 11:23:08 +0800 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-10-12 14:47:25 +0530 |
| commit | bad505191bdb643f8f2c61eca7b1002208fbebc3 (patch) | |
| tree | 3ebe05cc180442dd8890aa80def7c95db8d9d2b4 | |
| parent | 88e6a67d5ad4eff94628b3863854e929b990cbac (diff) | |
qcacld-2.0: Add new params in ACS calc process
Before this change the ACS calc process only consider the
channel's rssi and bss count in this channel, in this change
add noise floor, channel free statistics and tx power in the
ACS calc process.
Change-Id: I654e53fa2441e03723f150d973c124985c67f2b4
CRs-fixed: 1050316
| -rw-r--r-- | CORE/MAC/inc/aniGlobal.h | 2 | ||||
| -rw-r--r-- | CORE/MAC/inc/sirApi.h | 45 | ||||
| -rw-r--r-- | CORE/MAC/src/include/sirParams.h | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessMessageQueue.c | 4 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c | 31 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limTypes.h | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limUtils.c | 49 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limUtils.h | 2 | ||||
| -rw-r--r-- | CORE/SAP/src/sapChSelect.c | 109 | ||||
| -rw-r--r-- | CORE/SAP/src/sapChSelect.h | 12 | ||||
| -rw-r--r-- | CORE/SAP/src/sapFsm.c | 3 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 60 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.h | 3 | ||||
| -rw-r--r-- | CORE/SME/inc/csrApi.h | 3 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrUtil.c | 47 | ||||
| -rw-r--r-- | CORE/SYS/legacy/src/utils/src/macTrace.c | 1 | ||||
| -rw-r--r-- | CORE/WDA/inc/wlan_qct_wda.h | 2 |
17 files changed, 374 insertions, 1 deletions
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h index 29a6eab0012f..1b81adc18f10 100644 --- a/CORE/MAC/inc/aniGlobal.h +++ b/CORE/MAC/inc/aniGlobal.h @@ -540,6 +540,8 @@ typedef struct sAniSirLim tANI_U8 abortScan; tLimScanChnInfo scanChnInfo; + struct lim_scan_channel_status scan_channel_status; + ////////////////////////////////////// SCAN/LEARN RELATED START /////////////////////////////////////////// tSirMacAddr gSelfMacAddr; //added for BT-AMP Support diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index e059830291a2..1f98554d7eb8 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -102,6 +102,14 @@ typedef tANI_U8 tSirVersionString[SIR_VERSION_STRING_LEN]; #define NUM_CHAINS_MAX 2 +#ifdef ACS_FW_REPORT_PARAM +#define SIR_MAX_SUPPORTED_ACS_CHANNEL_LIST SIR_MAX_SUPPORTED_CHANNEL_LIST +#define ACS_FW_REPORT_PARAM_CONFIGURED true +#else +#define SIR_MAX_SUPPORTED_ACS_CHANNEL_LIST 1 +#define ACS_FW_REPORT_PARAM_CONFIGURED false +#endif + typedef enum { eSIR_EXTSCAN_INVALID, @@ -2978,6 +2986,32 @@ typedef struct sLimScanChn tANI_U8 channelId; }tLimScanChn; +/** + * struct lim_channel_status + * @channelfreq: Channel freq + * @noise_floor: Noise Floor value + * @rx_clear_count: rx clear count + * @cycle_count: cycle count + * @chan_tx_pwr_range: channel tx power per range in 0.5dBm steps + * @chan_tx_pwr_throughput: channel tx power per throughput + * @rx_frame_count: rx frame count (cumulative) + * @bss_rx_cycle_count: BSS rx cycle count + * @rx_11b_mode_data_duration: b-mode data rx time (units are microseconds) + * @channel_id: channel index + */ +struct lim_channel_status { + uint32_t channelfreq; + uint32_t noise_floor; + uint32_t rx_clear_count; + uint32_t cycle_count; + uint32_t chan_tx_pwr_range; + uint32_t chan_tx_pwr_throughput; + uint32_t rx_frame_count; + uint32_t bss_rx_cycle_count; + uint32_t rx_11b_mode_data_duration; + uint32_t channel_id; +}; + typedef struct sSmeGetScanChnRsp { // Message Type @@ -2995,6 +3029,17 @@ typedef struct sLimScanChnInfo tLimScanChn scanChn[SIR_MAX_SUPPORTED_CHANNEL_LIST]; }tLimScanChnInfo; +/** + * struct lim_scan_channel_status + * @total_channel: total number of be scanned channel + * @channel_status_list: channel status info store in this array + */ +struct lim_scan_channel_status { + uint8_t total_channel; + struct lim_channel_status + channel_status_list[SIR_MAX_SUPPORTED_ACS_CHANNEL_LIST]; +}; + typedef struct sSirSmeGetAssocSTAsReq { tANI_U16 messageType; // eWNI_SME_GET_ASSOC_STAS_REQ diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h index 5fb0f9e5564c..571375da133b 100644 --- a/CORE/MAC/src/include/sirParams.h +++ b/CORE/MAC/src/include/sirParams.h @@ -782,6 +782,7 @@ typedef struct sSirMbMsgP2p #define SIR_HAL_SHORT_RETRY_LIMIT_CNT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 363) #define SIR_HAL_LONG_RETRY_LIMIT_CNT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 364) #define SIR_HAL_STA_INACTIVITY_TIMEOUT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 365) +#define SIR_HAL_RX_CHN_STATUS_EVENT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 366) #define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF) diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c index 0b8c1f436851..96607159c6db 100644 --- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c +++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c @@ -2129,6 +2129,10 @@ send_link_resp: limProcessRxScanEvent(pMac, limMsg->bodyptr); break; + case WDA_RX_CHN_STATUS_EVENT: + lim_process_rx_channel_status_event(pMac, limMsg->bodyptr); + break; + case WDA_IBSS_PEER_INACTIVITY_IND: { limProcessIbssPeerInactivity(pMac, limMsg->bodyptr); diff --git a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c index 730ffe1692ce..cfe751db001a 100644 --- a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c @@ -5201,3 +5201,34 @@ void limProcessRxScanEvent(tpAniSirGlobal pMac, void *buf) } vos_mem_free(buf); } + +/** + * lim_process_rx_channel_status_event() - processes + * event WDA_RX_CHN_STATUS_EVENT + * @mac_ctx Pointer to Global MAC structure + * @buf: Received message info + * + * Return: None + */ +void lim_process_rx_channel_status_event(tpAniSirGlobal mac_ctx, void *buf) +{ + struct lim_channel_status *channel_status_info = buf; + + if (ACS_FW_REPORT_PARAM_CONFIGURED) { + if (channel_status_info != NULL) + lim_add_channel_status_info(mac_ctx, + channel_status_info, + channel_status_info->channel_id); + else + VOS_TRACE(VOS_MODULE_ID_PE, + VOS_TRACE_LEVEL_ERROR, + "%s: ACS evt report buf NULL", __func__); + } else { + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, + "%s: Error evt report", __func__); + } + + if (NULL != buf) + vos_mem_free(buf); + return; +} diff --git a/CORE/MAC/src/pe/lim/limTypes.h b/CORE/MAC/src/pe/lim/limTypes.h index 198427ccca52..90d97cf5838f 100644 --- a/CORE/MAC/src/pe/lim/limTypes.h +++ b/CORE/MAC/src/pe/lim/limTypes.h @@ -1087,6 +1087,7 @@ typedef struct sSetLinkCbackParams #endif void limProcessRxScanEvent(tpAniSirGlobal mac, void *buf); +void lim_process_rx_channel_status_event(tpAniSirGlobal mac_ctx, void *buf); int limProcessRemainOnChnlReq(tpAniSirGlobal pMac, tANI_U32 *pMsg); void limRemainOnChnRsp(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data); diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c index c9d4f7dea8aa..3c15db754240 100644 --- a/CORE/MAC/src/pe/lim/limUtils.c +++ b/CORE/MAC/src/pe/lim/limUtils.c @@ -5989,6 +5989,55 @@ void limAddScanChannelInfo(tpAniSirGlobal pMac, tANI_U8 channelId) } } +/** + * lim_add_channel_status_info() - store + * chan status info into Global MAC structure + * @p_mac: Pointer to Global MAC structure + * @channel_stat: Pointer to chan status info reported by firmware + * @channel_id: current channel id + * + * Return: None + */ +void lim_add_channel_status_info(tpAniSirGlobal p_mac, + struct lim_channel_status *channel_stat, uint8_t channel_id) +{ + uint8_t i; + boolean found = false; + struct lim_scan_channel_status *channel_info = + &p_mac->lim.scan_channel_status; + struct lim_channel_status *channel_status_list = + channel_info->channel_status_list; + uint8_t total_channel = channel_info->total_channel; + + if (ACS_FW_REPORT_PARAM_CONFIGURED) { + for (i = 0; i < total_channel; i++) { + if (channel_status_list[i].channel_id == channel_id) { + vos_mem_copy( + &channel_status_list[i], + channel_stat, + sizeof(*channel_status_list)); + found = true; + break; + } + } + if (!found) { + if (total_channel < + SIR_MAX_SUPPORTED_ACS_CHANNEL_LIST) { + vos_mem_copy( + &channel_status_list[total_channel++], + channel_stat, + sizeof(*channel_status_list)); + channel_info->total_channel = total_channel; + } else { + PELOGW(limLog(p_mac, LOGW, + FL("Chan cnt exceed, channel_id=%d"), + channel_id);) + } + } + } + return; +} + /** * @function : limIsChannelValidForChannelSwitch() diff --git a/CORE/MAC/src/pe/lim/limUtils.h b/CORE/MAC/src/pe/lim/limUtils.h index e1b64fdcf6c8..1ab87089b942 100644 --- a/CORE/MAC/src/pe/lim/limUtils.h +++ b/CORE/MAC/src/pe/lim/limUtils.h @@ -403,6 +403,8 @@ void limDeleteDialogueTokenList(tpAniSirGlobal pMac); tSirRetStatus limSearchAndDeleteDialogueToken(tpAniSirGlobal pMac, tANI_U8 token, tANI_U16 assocId, tANI_U16 tid); void limRessetScanChannelInfo(tpAniSirGlobal pMac); void limAddScanChannelInfo(tpAniSirGlobal pMac, tANI_U8 channelId); +void lim_add_channel_status_info(tpAniSirGlobal p_mac, + struct lim_channel_status *channel_stat, uint8_t channel_id); tANI_U8 limGetChannelFromBeacon(tpAniSirGlobal pMac, tpSchBeaconStruct pBeacon); tSirNwType limGetNwType(tpAniSirGlobal pMac, tANI_U8 channelNum, tANI_U32 type, tpSchBeaconStruct pBeacon); diff --git a/CORE/SAP/src/sapChSelect.c b/CORE/SAP/src/sapChSelect.c index e11e6f95e31c..0d0427ba7e3b 100644 --- a/CORE/SAP/src/sapChSelect.c +++ b/CORE/SAP/src/sapChSelect.c @@ -741,6 +741,109 @@ v_U32_t sapweightRssiCount(v_S7_t rssi, v_U16_t count) } +/** + * sap_get_channel_status() - get channel info via channel number + * @p_mac: Pointer to Global MAC structure + * @channel_id: channel id + * + * Return: chan status info + */ +struct lim_channel_status *sap_get_channel_status + (tpAniSirGlobal p_mac, uint32_t channel_id) +{ + return csr_get_channel_status(p_mac, channel_id); +} + +/** + * sap_clear_channel_status() - clear chan info + * @p_mac: Pointer to Global MAC structure + * + * Return: none + */ +void sap_clear_channel_status(tpAniSirGlobal p_mac) +{ + csr_clear_channel_status(p_mac); +} +/** + * sap_weight_channel_status() - compute chan status weight + * @chn_stat: Pointer to chan status info + * + * Return: chan status weight + */ +uint32_t sap_weight_channel_status(struct lim_channel_status *channel_stat) +{ + int32_t noisefloor_weight = 0; + uint32_t chnfree_weight = 0; + uint32_t txpwr_weight_lowspeed = 0; + uint32_t txpwr_weight_highspeed = 0; + uint32_t channelstatus_weight = 0; + uint32_t rx_clear_count = 0; + uint32_t cycle_count = 0; + uint32_t chan_tx_pwr_throughput = 0; + + if (channel_stat == NULL || channel_stat->channelfreq == 0) + return 0; + + rx_clear_count = channel_stat->rx_clear_count; + cycle_count = channel_stat->cycle_count; + chan_tx_pwr_throughput = + channel_stat->chan_tx_pwr_throughput; + + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + "chan id=%d freq=%d nf=%d rx_cnt=%d cycle_cnt=%d tx_pwr_throughput=%d", + channel_stat->channel_id, + channel_stat->channelfreq, channel_stat->noise_floor, + rx_clear_count, cycle_count, chan_tx_pwr_throughput); + + noisefloor_weight = (channel_stat->noise_floor == 0) ? 0 : + (SOFTAP_NF_WEIGHT * + (channel_stat->noise_floor - SOFTAP_MIN_NF) + /(SOFTAP_MAX_NF - SOFTAP_MIN_NF)); + + if (noisefloor_weight > SOFTAP_NF_WEIGHT) + noisefloor_weight = SOFTAP_NF_WEIGHT; + else if (noisefloor_weight < 0) + noisefloor_weight = 0; + + chnfree_weight = (cycle_count == 0) ? 0 : + (SOFTAP_CHNFREE_WEIGHT * + (rx_clear_count/cycle_count - + SOFTAP_MIN_CHNFREE) + /(SOFTAP_MAX_CHNFREE - SOFTAP_MIN_CHNFREE)); + + if (chnfree_weight > SOFTAP_CHNFREE_WEIGHT) + chnfree_weight = SOFTAP_CHNFREE_WEIGHT; + + txpwr_weight_lowspeed = (channel_stat->chan_tx_pwr_range == 0) ? 0 : + (SOFTAP_TXPWR_WEIGHT * + (channel_stat->chan_tx_pwr_range - + SOFTAP_MIN_TXPWR) + /(SOFTAP_MAX_TXPWR - SOFTAP_MIN_TXPWR)); + + if (txpwr_weight_lowspeed > SOFTAP_TXPWR_WEIGHT) + txpwr_weight_lowspeed = SOFTAP_TXPWR_WEIGHT; + + txpwr_weight_highspeed = (chan_tx_pwr_throughput == 0) ? 0 : + (SOFTAP_TXPWR_WEIGHT * + (chan_tx_pwr_throughput - + SOFTAP_MIN_TXPWR) + /(SOFTAP_MAX_TXPWR - SOFTAP_MIN_TXPWR)); + + if (txpwr_weight_highspeed > SOFTAP_TXPWR_WEIGHT) + txpwr_weight_highspeed = SOFTAP_TXPWR_WEIGHT; + + + channelstatus_weight = noisefloor_weight + chnfree_weight + + txpwr_weight_lowspeed + txpwr_weight_highspeed; + + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + "In %s, nfWt=%d, chnfreeWt=%d, txpwrLspeedWt=%d, txpwrHspeedWt=%d", + __func__, noisefloor_weight, chnfree_weight, + txpwr_weight_lowspeed, txpwr_weight_highspeed); + + return channelstatus_weight; +} + /*========================================================================== FUNCTION sapInterferenceRssiCount @@ -1872,7 +1975,10 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, rssi = (v_S7_t)pSpectCh->rssiAgr; - pSpectCh->weight = SAPDFS_NORMALISE_1000 * sapweightRssiCount(rssi, pSpectCh->bssCount); + pSpectCh->weight = SAPDFS_NORMALISE_1000 * + (sapweightRssiCount(rssi, pSpectCh->bssCount) + + sap_weight_channel_status( + sap_get_channel_status(pMac, pSpectCh->chNum))); pSpectCh->weight_copy = pSpectCh->weight; //------ Debug Info ------ @@ -1883,6 +1989,7 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, //------ Debug Info ------ pSpectCh++; } + sap_clear_channel_status(pMac); vos_mem_free(pBeaconStruct); } diff --git a/CORE/SAP/src/sapChSelect.h b/CORE/SAP/src/sapChSelect.h index f6a2f245446d..4392999e51ba 100644 --- a/CORE/SAP/src/sapChSelect.h +++ b/CORE/SAP/src/sapChSelect.h @@ -81,6 +81,18 @@ #define SOFTAP_RSSI_WEIGHT (20) #define SOFTAP_COUNT_WEIGHT (20) +#define SOFTAP_MIN_NF (-120) +#define SOFTAP_MAX_NF (-60) +#define SOFTAP_MIN_CHNFREE (0) +#define SOFTAP_MAX_CHNFREE (1) +#define SOFTAP_MIN_TXPWR (0) +#define SOFTAP_MAX_TXPWR (63) + +#define SOFTAP_NF_WEIGHT (20) +#define SOFTAP_CHNFREE_WEIGHT (20) +#define SOFTAP_TXPWR_WEIGHT (20) + + #define SAP_DEFAULT_24GHZ_CHANNEL (6) #define SAP_DEFAULT_LOW_5GHZ_CHANNEL (40) #define SAP_DEFAULT_MID_5GHZ_CHANNEL (100) diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c index 1b979c50adec..e43e3cfb9a20 100644 --- a/CORE/SAP/src/sapFsm.c +++ b/CORE/SAP/src/sapFsm.c @@ -2738,6 +2738,9 @@ sapGotoChannelSel /* Set BSSType to default type */ scanRequest.BSSType = eCSR_BSS_TYPE_ANY; + if (ACS_FW_REPORT_PARAM_CONFIGURED) + scanRequest.BSSType = eCSR_BSS_TYPE_INFRA_AP; + #ifndef SOFTAP_CHANNEL_RANGE /*Scan all the channels */ scanRequest.ChannelInfo.numOfChannels = 0; diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 254523d48b34..a04be146383c 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -6841,6 +6841,7 @@ wma_chan_info_event_handler(void *handle, u_int8_t *event_buf, wmi_chan_info_event_fixed_param *event; struct scan_chan_info buf; tpAniSirGlobal mac = NULL; + struct lim_channel_status *channel_status; WMA_LOGD("%s: Enter", __func__); @@ -6876,6 +6877,54 @@ wma_chan_info_event_handler(void *handle, u_int8_t *event_buf, buf.rx_clear_count = event->rx_clear_count; mac->chan_info_cb(&buf); } + + if (ACS_FW_REPORT_PARAM_CONFIGURED && + mac->sme.currDeviceMode == VOS_STA_SAP_MODE && + mac->scan.curScanType == eSIR_ACTIVE_SCAN) { + param_buf = (WMI_CHAN_INFO_EVENTID_param_tlvs *) event_buf; + if (!param_buf) { + WMA_LOGE("Invalid chan info event buffer"); + return -EINVAL; + } + event = param_buf->fixed_param; + if (event->cmd_flags == WMA_CHAN_END_RESP) { + channel_status = + vos_mem_malloc(sizeof(*channel_status)); + if (!channel_status) { + WMA_LOGE + (FL("Mem alloc fail")); + return -ENOMEM; + } + WMA_LOGI( + FL("freq=%d nf=%d rx_cnt=%d tx_pwr=%d"), + event->freq, + event->noise_floor, + event->rx_clear_count, + event->chan_tx_pwr_tp); + + channel_status->channelfreq = event->freq; + channel_status->noise_floor = event->noise_floor; + channel_status->rx_clear_count = + event->rx_clear_count; + channel_status->cycle_count = event->cycle_count; + channel_status->chan_tx_pwr_range = + event->chan_tx_pwr_range; + channel_status->chan_tx_pwr_throughput = + event->chan_tx_pwr_tp; + channel_status->rx_frame_count = + event->rx_frame_count; + channel_status->bss_rx_cycle_count = + event->my_bss_rx_cycle_count; + channel_status->rx_11b_mode_data_duration = + event->rx_11b_mode_data_duration; + channel_status->channel_id = + vos_freq_to_chan(event->freq); + + wma_send_msg(handle, + WDA_RX_CHN_STATUS_EVENT, + (void *) channel_status, 0); + } + } return 0; } @@ -9092,6 +9141,17 @@ VOS_STATUS wma_get_buf_start_scan_cmd(tp_wma_handle wma_handle, if (scan_req->scanType == eSIR_PASSIVE_SCAN) cmd->scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE; + if (ACS_FW_REPORT_PARAM_CONFIGURED) { + /* add chan stat info report tag */ + if (scan_req->scanType == eSIR_ACTIVE_SCAN && + scan_req->bssType == eSIR_INFRA_AP_MODE) { + cmd->scan_ctrl_flags |= + WMI_SCAN_CHAN_STAT_EVENT; + WMA_LOGI("set ACS ctrl BIT"); + } + } + + cmd->scan_ctrl_flags |= WMI_SCAN_ADD_TPC_IE_IN_PROBE_REQ; cmd->scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ; diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h index 7dc0f3f325bb..ca75efb2d2de 100644 --- a/CORE/SERVICES/WMA/wma.h +++ b/CORE/SERVICES/WMA/wma.h @@ -294,6 +294,9 @@ static const t_probeTime_dwellTime #define WMA_EXTSCAN_BURST_DURATION 150 #endif +#define WMA_CHAN_START_RESP 0 +#define WMA_CHAN_END_RESP 1 + typedef void (*txFailIndCallback)(u_int8_t *peer_mac, u_int8_t seqNo); typedef struct { diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h index c46b905595fd..faef3b1e111e 100644 --- a/CORE/SME/inc/csrApi.h +++ b/CORE/SME/inc/csrApi.h @@ -1989,4 +1989,7 @@ tANI_BOOLEAN csr_create_sap_session_info( v_U16_t sap_ch, session_info_t *session_info); #endif +struct lim_channel_status *csr_get_channel_status( + void *p_mac, uint32_t channel_id); +void csr_clear_channel_status(void *p_mac); #endif diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c index f42a9d9378cc..ac104ab13df8 100644 --- a/CORE/SME/src/csr/csrUtil.c +++ b/CORE/SME/src/csr/csrUtil.c @@ -6177,6 +6177,53 @@ void csrDisconnectAllActiveSessions(tpAniSirGlobal pMac) } } +/** + * csr_get_channel_status() - get chan info via channel number + * @p_mac: Pointer to Global MAC structure + * @channel_id: channel id + * + * Return: chan status info + */ +struct lim_channel_status *csr_get_channel_status( + void *p_mac, uint32_t channel_id) +{ + uint8_t i; + struct lim_scan_channel_status *channel_status; + tpAniSirGlobal mac_ptr = (tpAniSirGlobal)p_mac; + + if (ACS_FW_REPORT_PARAM_CONFIGURED) { + channel_status = (struct lim_scan_channel_status *) + &mac_ptr->lim.scan_channel_status; + for (i = 0; i < channel_status->total_channel; i++) { + if (channel_status->channel_status_list[i].channel_id + == channel_id) + return &channel_status->channel_status_list[i]; + } + smsLog(mac_ptr, LOGW, + FL("Channel %d status info not exist"), + channel_id); + } + return NULL; +} + +/** + * csr_clear_channel_status() - clear chan info + * @p_mac: Pointer to Global MAC structure + * + * Return: none + */ +void csr_clear_channel_status(void *p_mac) +{ + tpAniSirGlobal mac_ptr = (tpAniSirGlobal)p_mac; + struct lim_scan_channel_status *channel_status; + if (ACS_FW_REPORT_PARAM_CONFIGURED) { + channel_status = (struct lim_scan_channel_status *) + &mac_ptr->lim.scan_channel_status; + channel_status->total_channel = 0; + } + return; +} + #ifdef FEATURE_WLAN_LFR tANI_BOOLEAN csrIsChannelPresentInList( tANI_U8 *pChannelList, diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c index f03b3d703028..61048ffeb03d 100644 --- a/CORE/SYS/legacy/src/utils/src/macTrace.c +++ b/CORE/SYS/legacy/src/utils/src/macTrace.c @@ -854,6 +854,7 @@ tANI_U8* macTraceGetWdaMsgString(tANI_U16 wdaMsg) CASE_RETURN_STRING(WDA_UPDATE_CHAN_LIST_REQ); CASE_RETURN_STRING(WDA_UPDATE_CHAN_LIST_RSP); CASE_RETURN_STRING(WDA_RX_SCAN_EVENT); + CASE_RETURN_STRING(WDA_RX_CHN_STATUS_EVENT); CASE_RETURN_STRING(WDA_IBSS_PEER_INACTIVITY_IND); CASE_RETURN_STRING(WDA_CLI_SET_CMD); CASE_RETURN_STRING(WDA_CLI_GET_CMD); diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h index c8951be8be95..9e05a8caf9d0 100644 --- a/CORE/WDA/inc/wlan_qct_wda.h +++ b/CORE/WDA/inc/wlan_qct_wda.h @@ -896,6 +896,8 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_UPDATE_CHAN_LIST_REQ SIR_HAL_UPDATE_CHAN_LIST_REQ #define WDA_UPDATE_CHAN_LIST_RSP SIR_HAL_UPDATE_CHAN_LIST_RSP #define WDA_RX_SCAN_EVENT SIR_HAL_RX_SCAN_EVENT +#define WDA_RX_CHN_STATUS_EVENT SIR_HAL_RX_CHN_STATUS_EVENT + #define WDA_IBSS_PEER_INACTIVITY_IND SIR_HAL_IBSS_PEER_INACTIVITY_IND #define WDA_CLI_SET_CMD SIR_HAL_CLI_SET_CMD |
