From e2e3dfd9977fed08865a006df5fccb647452a006 Mon Sep 17 00:00:00 2001 From: Deepthi Gowri Date: Mon, 17 Oct 2016 16:37:52 +0530 Subject: [PATCH 001/119] qcacld-3.0: Use system time instead of jiffies for BSS received time qcacld-2.0 to qcacld-3.0 propagation During late suspend jiffies will not be incremented. Because of this scan results are not age out as the delta of current time and the BSS received time is not correct. To address this, use the system time instead of jiffies for the BSS received time and also make sure to use system time in all other functions. CRs-Fixed: 1018460 Change-Id: Ia14b84f1039dc4ffec6ad63550fed21e932f8012 --- core/hdd/inc/wlan_hdd_main.h | 4 +-- core/hdd/src/wlan_hdd_cfg80211.c | 10 ++++-- core/hdd/src/wlan_hdd_ipa.c | 6 ++-- core/hdd/src/wlan_hdd_p2p.c | 10 +++--- core/hdd/src/wlan_hdd_scan.c | 6 ++-- core/mac/inc/sir_api.h | 4 +-- core/mac/src/pe/lim/lim_api.c | 4 +-- core/mac/src/pe/lim/lim_p2p.c | 8 ++--- core/mac/src/pe/lim/lim_scan_result_utils.c | 6 ++-- core/sme/src/csr/csr_api_scan.c | 40 ++++++++++----------- core/sme/src/csr/csr_host_scan_roam.c | 11 +++--- core/sme/src/csr/csr_inside_api.h | 1 + core/sme/src/rrm/sme_rrm.c | 12 +++---- 13 files changed, 64 insertions(+), 58 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index ec6e5990dc08..1fc4e0cc11b6 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -1070,10 +1070,10 @@ struct hdd_adapter_s { int temperature; /* Time stamp for last completed RoC request */ - unsigned long last_roc_ts; + uint64_t last_roc_ts; /* Time stamp for start RoC request */ - unsigned long start_roc_ts; + uint64_t start_roc_ts; /* State for synchronous OCB requests to WMI */ struct sir_ocb_set_config_response ocb_set_config_resp; diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index ac58c814d1b3..da29cff9a74c 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -10594,8 +10594,14 @@ struct cfg80211_bss *wlan_hdd_cfg80211_inform_bss_frame(hdd_adapter_t *pAdapter, qie_age->oui_2 = QCOM_OUI2; qie_age->oui_3 = QCOM_OUI3; qie_age->type = QCOM_VENDOR_IE_AGE_TYPE; + /* + * Lowi expects the timestamp of bss in units of 1/10 ms. In driver + * all bss related timestamp is in units of ms. Due to this when scan + * results are sent to lowi the scan age is high.To address this, + * send age in units of 1/10 ms. + */ qie_age->age = - qdf_mc_timer_get_system_ticks() - bss_desc->nReceivedTime; + (qdf_mc_timer_get_system_time() - bss_desc->received_time)/10; qie_age->tsf_delta = bss_desc->tsf_delta; memcpy(&qie_age->beacon_tsf, bss_desc->timeStamp, sizeof(qie_age->beacon_tsf)); @@ -10769,7 +10775,7 @@ int wlan_hdd_cfg80211_update_bss(struct wiphy *wiphy, */ if ((scan_time == 0) || (scan_time < - pScanResult->BssDescriptor.nReceivedTime)) { + pScanResult->BssDescriptor.received_time)) { bss_status = wlan_hdd_cfg80211_inform_bss_frame(pAdapter, &pScanResult->BssDescriptor); diff --git a/core/hdd/src/wlan_hdd_ipa.c b/core/hdd/src/wlan_hdd_ipa.c index 8cdf2eb68eaf..67b443a4a820 100644 --- a/core/hdd/src/wlan_hdd_ipa.c +++ b/core/hdd/src/wlan_hdd_ipa.c @@ -362,7 +362,7 @@ static uint8_t vdev_to_iface[CSR_ROAM_SESSION_MAX]; * @rx_destructor_call: IPA Rx packet destructor count */ struct uc_rt_debug_info { - unsigned long time; + uint64_t time; uint64_t ipa_excep_count; uint64_t rx_drop_count; uint64_t net_sent_count; @@ -726,7 +726,7 @@ static void hdd_ipa_uc_rt_debug_host_fill(void *ctext) dump_info = &hdd_ipa->rt_bug_buffer[ hdd_ipa->rt_buf_fill_index % HDD_IPA_UC_RT_DEBUG_BUF_COUNT]; - dump_info->time = qdf_mc_timer_get_system_time(); + dump_info->time = (uint64_t)qdf_mc_timer_get_system_time(); dump_info->ipa_excep_count = hdd_ipa->stats.num_rx_excep; dump_info->rx_drop_count = hdd_ipa->ipa_rx_internel_drop_count; dump_info->net_sent_count = hdd_ipa->ipa_rx_net_send_count; @@ -779,7 +779,7 @@ void hdd_ipa_uc_rt_debug_host_dump(hdd_context_t *hdd_ctx) HDD_IPA_UC_RT_DEBUG_BUF_COUNT; dump_info = &hdd_ipa->rt_bug_buffer[dump_index]; HDD_IPA_LOG(QDF_TRACE_LEVEL_ERROR, - "%12lu:%10llu:%10llu:%10llu:%10llu:%10llu:%10llu:%10llu\n", + "%12llu:%10llu:%10llu:%10llu:%10llu:%10llu:%10llu:%10llu\n", dump_info->time, dump_info->ipa_excep_count, dump_info->rx_drop_count, dump_info->net_sent_count, dump_info->tx_mcbc_count, dump_info->tx_fwd_count, diff --git a/core/hdd/src/wlan_hdd_p2p.c b/core/hdd/src/wlan_hdd_p2p.c index 729fcd676ade..bfe19b409a1f 100644 --- a/core/hdd/src/wlan_hdd_p2p.c +++ b/core/hdd/src/wlan_hdd_p2p.c @@ -215,7 +215,8 @@ QDF_STATUS wlan_hdd_remain_on_channel_callback(tHalHandle hHal, void *pCtx, cookie, &pRemainChanCtx->chan, GFP_KERNEL); - pAdapter->last_roc_ts = qdf_mc_timer_get_system_time(); + pAdapter->last_roc_ts = + (uint64_t)qdf_mc_timer_get_system_time(); } /* Schedule any pending RoC: Any new roc request during this time @@ -840,7 +841,7 @@ static int wlan_hdd_request_remain_on_channel(struct wiphy *wiphy, hdd_conn_is_connected( WLAN_HDD_GET_STATION_CTX_PTR(sta_adapter))) { if (pAdapter->last_roc_ts != 0 && - ((qdf_mc_timer_get_system_time() - + (((uint64_t)qdf_mc_timer_get_system_time() - pAdapter->last_roc_ts) < pHddCtx->config->p2p_listen_defer_interval)) { if (pRemainChanCtx->duration > HDD_P2P_MAX_ROC_DURATION) @@ -961,7 +962,7 @@ void hdd_remain_chan_ready_handler(hdd_adapter_t *pAdapter, cfgState = WLAN_HDD_GET_CFG_STATE_PTR(pAdapter); hdd_notice("Ready on chan ind %d", scan_id); - pAdapter->start_roc_ts = qdf_mc_timer_get_system_time(); + pAdapter->start_roc_ts = (uint64_t)qdf_mc_timer_get_system_time(); mutex_lock(&cfgState->remain_on_chan_ctx_lock); pRemainChanCtx = cfgState->remain_on_chan_ctx; if (pRemainChanCtx != NULL) { @@ -1270,7 +1271,8 @@ static int __wlan_hdd_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev, mutex_lock(&cfgState->remain_on_chan_ctx_lock); if (cfgState->remain_on_chan_ctx) { - uint32_t current_time = qdf_mc_timer_get_system_time(); + uint64_t current_time = + (uint64_t)qdf_mc_timer_get_system_time(); int remaining_roc_time = ((int) cfgState->remain_on_chan_ctx->duration - (current_time - pAdapter->start_roc_ts)); diff --git a/core/hdd/src/wlan_hdd_scan.c b/core/hdd/src/wlan_hdd_scan.c index 441ba7ccc18f..a23809100cb8 100644 --- a/core/hdd/src/wlan_hdd_scan.c +++ b/core/hdd/src/wlan_hdd_scan.c @@ -482,9 +482,9 @@ static int hdd_indicate_scan_result(hdd_scan_info_t *scanInfo, /* AGE */ event.cmd = IWEVCUSTOM; p = custom; - p += scnprintf(p, MAX_CUSTOM_LEN, " Age: %lu", - qdf_mc_timer_get_system_ticks() - - descriptor->nReceivedTime); + p += scnprintf(p, MAX_CUSTOM_LEN, " Age: %llu", + qdf_mc_timer_get_system_time() - + descriptor->received_time); event.u.data.length = p - custom; current_event = iwe_stream_add_point(scanInfo->info, current_event, end, &event, custom); diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index c673d402d074..84faa1f04cdf 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -724,8 +724,8 @@ typedef struct sSirBssDescription { /* used only in scan case. */ uint8_t channelIdSelf; uint8_t sSirBssDescriptionRsvd[3]; - /* base on a tick count. It is a time stamp, not a relative time. */ - uint32_t nReceivedTime; + /* Based on system time, not a relative time. */ + uint64_t received_time; uint32_t parentTSF; uint32_t startTSF[2]; uint8_t mdiePresent; diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index 52615df03b3c..8597146e1eba 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -1871,8 +1871,8 @@ lim_roam_fill_bss_descr(tpAniSirGlobal pMac, qdf_mem_copy((uint8_t *) &bss_desc_ptr->bssId, (uint8_t *) mac_hdr->bssId, sizeof(tSirMacAddr)); - bss_desc_ptr->nReceivedTime = - (uint32_t)qdf_mc_timer_get_system_ticks(); + bss_desc_ptr->received_time = + (uint64_t)qdf_mc_timer_get_system_time(); if (parsed_frm_ptr->mdiePresent) { bss_desc_ptr->mdiePresent = parsed_frm_ptr->mdiePresent; qdf_mem_copy((uint8_t *)bss_desc_ptr->mdie, diff --git a/core/mac/src/pe/lim/lim_p2p.c b/core/mac/src/pe/lim/lim_p2p.c index 096f78a16581..e6af69c753df 100644 --- a/core/mac/src/pe/lim/lim_p2p.c +++ b/core/mac/src/pe/lim/lim_p2p.c @@ -175,11 +175,11 @@ void lim_process_insert_single_shot_noa_timeout(tpAniSirGlobal pMac) *------------------------------------------------------------------*/ void lim_convert_active_channel_to_passive_channel(tpAniSirGlobal pMac) { - uint32_t currentTime; - uint32_t lastTime = 0; - uint32_t timeDiff; + uint64_t currentTime; + uint64_t lastTime = 0; + uint64_t timeDiff; uint8_t i; - currentTime = qdf_mc_timer_get_system_time(); + currentTime = (uint64_t)qdf_mc_timer_get_system_time(); for (i = 1; i < SIR_MAX_24G_5G_CHANNEL_RANGE; i++) { if ((pMac->lim.dfschannelList.timeStamp[i]) != 0) { lastTime = pMac->lim.dfschannelList.timeStamp[i]; diff --git a/core/mac/src/pe/lim/lim_scan_result_utils.c b/core/mac/src/pe/lim/lim_scan_result_utils.c index 58b43db3e6b6..9bed13a0f534 100644 --- a/core/mac/src/pe/lim/lim_scan_result_utils.c +++ b/core/mac/src/pe/lim/lim_scan_result_utils.c @@ -177,14 +177,14 @@ lim_collect_bss_description(tpAniSirGlobal pMac, MAC_ADDR_ARRAY(pHdr->bssId), pBssDescr->rssi, pBssDescr->rssi_raw); - pBssDescr->nReceivedTime = (uint32_t) qdf_mc_timer_get_system_ticks(); + pBssDescr->received_time = (uint64_t)qdf_mc_timer_get_system_time(); pBssDescr->tsf_delta = WMA_GET_RX_TSF_DELTA(pRxPacketInfo); pBssDescr->seq_ctrl = pHdr->seqControl; lim_log(pMac, LOG1, - FL("BSSID: "MAC_ADDRESS_STR " tsf_delta = %u ReceivedTime = %u ssid = %s"), + FL("BSSID: "MAC_ADDRESS_STR " tsf_delta = %u ReceivedTime = %llu ssid = %s"), MAC_ADDR_ARRAY(pHdr->bssId), pBssDescr->tsf_delta, - pBssDescr->nReceivedTime, + pBssDescr->received_time, ((pBPR->ssidPresent) ? (char *)pBPR->ssId.ssId : "")); lim_log(pMac, LOG1, FL("Seq Ctrl: Frag Num: %d, Seq Num: LO:%02x HI:%02x"), diff --git a/core/sme/src/csr/csr_api_scan.c b/core/sme/src/csr/csr_api_scan.c index 3edaca4b8e9f..aaf51c2a8fc8 100644 --- a/core/sme/src/csr/csr_api_scan.c +++ b/core/sme/src/csr/csr_api_scan.c @@ -2858,8 +2858,8 @@ static void csr_purge_old_scan_results(tpAniSirGlobal mac_ctx) { tListElem *pentry, *tmp_entry; tCsrScanResult *presult, *oldest_bss = NULL; - uint32_t oldest_entry = 0; - uint32_t curr_time = qdf_mc_timer_get_system_ticks(); + uint64_t oldest_entry = 0; + uint64_t curr_time = (uint64_t)qdf_mc_timer_get_system_time(); csr_ll_unlock(&mac_ctx->scan.scanResultList); pentry = csr_ll_peek_head(&mac_ctx->scan.scanResultList, @@ -2868,10 +2868,10 @@ static void csr_purge_old_scan_results(tpAniSirGlobal mac_ctx) tmp_entry = csr_ll_next(&mac_ctx->scan.scanResultList, pentry, LL_ACCESS_NOLOCK); presult = GET_BASE_ADDR(pentry, tCsrScanResult, Link); - if ((curr_time - presult->Result.BssDescriptor.nReceivedTime) > + if ((curr_time - presult->Result.BssDescriptor.received_time) > oldest_entry) { oldest_entry = curr_time - - presult->Result.BssDescriptor.nReceivedTime; + presult->Result.BssDescriptor.received_time; oldest_bss = presult; } pentry = tmp_entry; @@ -2881,9 +2881,9 @@ static void csr_purge_old_scan_results(tpAniSirGlobal mac_ctx) if (csr_ll_remove_entry(&mac_ctx->scan.scanResultList, &oldest_bss->Link, LL_ACCESS_NOLOCK)) { sms_log(mac_ctx, LOG1, - FL("Current time delta (%d) of BSSID to be removed" MAC_ADDRESS_STR), + FL("Current time delta (%llu) of BSSID to be removed" MAC_ADDRESS_STR), (curr_time - - oldest_bss->Result.BssDescriptor.nReceivedTime), + oldest_bss->Result.BssDescriptor.received_time), MAC_ADDR_ARRAY( oldest_bss->Result.BssDescriptor.bssId)); csr_free_scan_result_entry(mac_ctx, oldest_bss); @@ -2961,8 +2961,9 @@ csr_remove_from_tmp_list(tpAniSirGlobal mac_ctx, * hidden ssid from the profile i.e., forget the SSID * via GUI that SSID shouldn't see in the profile */ - unsigned long time_gap = qdf_mc_timer_get_system_time() - - timer; + uint64_t time_gap = + (uint64_t)qdf_mc_timer_get_system_time() - + timer; if ((0 == bss_dscp->Result.ssId.length) && (time_gap <= HIDDEN_TIMER) && tmpSsid.length) { @@ -3097,7 +3098,7 @@ tCsrScanResult *csr_scan_append_bss_description(tpAniSirGlobal pMac, * hidden ssid from the profile i.e., forget the SSID * via GUI that SSID shouldn't see in the profile */ - if ((qdf_mc_timer_get_system_time() - timer) <= + if (((uint64_t)qdf_mc_timer_get_system_time() - timer) <= HIDDEN_TIMER) { pCsrBssDescription->Result.ssId = tmpSsid; pCsrBssDescription->Result.timer = timer; @@ -4887,8 +4888,8 @@ static bool csr_scan_age_out_bss(tpAniSirGlobal pMac, tCsrScanResult *pResult) FL("Connected BSS, Set Aging Count=%d for BSS " MAC_ADDRESS_STR), pResult->AgingCount, MAC_ADDR_ARRAY(pResult->Result.BssDescriptor.bssId)); - pResult->Result.BssDescriptor.nReceivedTime = - (uint32_t) qdf_mc_timer_get_system_ticks(); + pResult->Result.BssDescriptor.received_time = + (uint64_t)qdf_mc_timer_get_system_time(); return fRet; } /* @@ -5941,23 +5942,20 @@ static void csr_purge_scan_result_by_age(void *pv) tpAniSirGlobal mac_ctx = PMAC_STRUCT(pv); tListElem *entry, *tmp_entry; tCsrScanResult *result; - unsigned long ageout_time = - mac_ctx->scan.scanResultCfgAgingTime * QDF_TICKS_PER_SECOND/10; - unsigned long cur_time = qdf_mc_timer_get_system_ticks(); + uint64_t ageout_time = + mac_ctx->scan.scanResultCfgAgingTime * SYSTEM_TIME_SEC_TO_MSEC; + uint64_t cur_time = qdf_mc_timer_get_system_time(); uint8_t *bssId; csr_ll_lock(&mac_ctx->scan.scanResultList); entry = csr_ll_peek_head(&mac_ctx->scan.scanResultList, LL_ACCESS_NOLOCK); - sms_log(mac_ctx, LOG1, FL(" Ageout time=%ld"), ageout_time); + sms_log(mac_ctx, LOG1, FL(" Ageout time=%llu"), ageout_time); while (entry) { tmp_entry = csr_ll_next(&mac_ctx->scan.scanResultList, entry, LL_ACCESS_NOLOCK); result = GET_BASE_ADDR(entry, tCsrScanResult, Link); - /* - * qdf_mc_timer_get_system_ticks() returns in 10ms interval. - * so ageout time value also updated to 10ms interval value. - */ - if ((cur_time - result->Result.BssDescriptor.nReceivedTime) > + + if ((cur_time - result->Result.BssDescriptor.received_time) > ageout_time) { bssId = result->Result.BssDescriptor.bssId; sms_log(mac_ctx, LOGW, @@ -7055,7 +7053,7 @@ QDF_STATUS csr_scan_save_preferred_network_found(tpAniSirGlobal pMac, pBssDescr->capabilityInfo = *((uint16_t *)&parsed_frm->capabilityInfo); qdf_mem_copy((uint8_t *) &pBssDescr->bssId, (uint8_t *) macHeader->bssId, sizeof(tSirMacAddr)); - pBssDescr->nReceivedTime = (uint32_t) qdf_mc_timer_get_system_ticks(); + pBssDescr->received_time = (uint64_t)qdf_mc_timer_get_system_time(); sms_log(pMac, LOG2, FL("Bssid= "MAC_ADDRESS_STR" chan= %d, rssi = %d"), MAC_ADDR_ARRAY(pBssDescr->bssId), pBssDescr->channelId, pBssDescr->rssi); diff --git a/core/sme/src/csr/csr_host_scan_roam.c b/core/sme/src/csr/csr_host_scan_roam.c index fcbd0400ac49..43ddcaf5f6a0 100644 --- a/core/sme/src/csr/csr_host_scan_roam.c +++ b/core/sme/src/csr/csr_host_scan_roam.c @@ -149,9 +149,7 @@ void csr_neighbor_roam_process_scan_results(tpAniSirGlobal mac_ctx, tpCsrNeighborRoamControlInfo n_roam_info = &mac_ctx->roam.neighborRoamInfo[sessionid]; tpCsrNeighborRoamBSSInfo bss_info; - uint32_t age_ticks = 0; - uint32_t limit_ticks = - qdf_system_msecs_to_ticks(ROAM_AP_AGE_LIMIT_MS); + uint64_t age = 0; uint8_t num_candidates = 0; uint8_t num_dropped = 0; /* @@ -296,9 +294,10 @@ void csr_neighbor_roam_process_scan_results(tpAniSirGlobal mac_ctx, } /* check the age of the AP */ - age_ticks = (uint32_t) qdf_mc_timer_get_system_ticks() - - descr->nReceivedTime; - if (age_constraint == true && age_ticks > limit_ticks) { + age = (uint64_t) qdf_mc_timer_get_system_time() - + descr->received_time; + if (age_constraint == true && + age > ROAM_AP_AGE_LIMIT_MS) { num_dropped++; QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_WARN, diff --git a/core/sme/src/csr/csr_inside_api.h b/core/sme/src/csr/csr_inside_api.h index 9c66909c0255..02e83995019f 100644 --- a/core/sme/src/csr/csr_inside_api.h +++ b/core/sme/src/csr/csr_inside_api.h @@ -66,6 +66,7 @@ #define CSR_MAX_BSS_SUPPORT 512 #define SYSTEM_TIME_MSEC_TO_USEC 1000 +#define SYSTEM_TIME_SEC_TO_MSEC 1000 /* This number minus 1 means the number of times a channel is scanned before a BSS is remvoed from */ /* cache scan result */ diff --git a/core/sme/src/rrm/sme_rrm.c b/core/sme/src/rrm/sme_rrm.c index 9b86cf132557..c0857f8568ff 100644 --- a/core/sme/src/rrm/sme_rrm.c +++ b/core/sme/src/rrm/sme_rrm.c @@ -71,7 +71,7 @@ #define RRM_ROAM_SCORE_NEIGHBOR_IAPP_LIST 30 #endif -unsigned long rrm_scan_timer; +uint64_t rrm_scan_timer; /** * rrm_ll_purge_neighbor_cache() -Purges all the entries in the neighbor cache @@ -532,7 +532,7 @@ static QDF_STATUS sme_rrm_send_scan_result(tpAniSirGlobal mac_ctx, while (scan_results) { next_result = sme_scan_result_get_next(mac_ctx, result_handle); - sms_log(mac_ctx, LOG1, "Scan res timer:%lu, rrm scan timer:%lu", + sms_log(mac_ctx, LOG1, "Scan res timer:%lu, rrm scan timer:%llu", scan_results->timer, rrm_scan_timer); if (scan_results->timer >= rrm_scan_timer) { qdf_mem_zero(roam_info, sizeof(*roam_info)); @@ -655,7 +655,7 @@ static QDF_STATUS sme_rrm_issue_scan_req(tpAniSirGlobal mac_ctx) tpRrmSMEContext sme_rrm_ctx = &mac_ctx->rrm.rrmSmeContext; uint32_t session_id; tSirScanType scan_type; - unsigned long current_time; + uint64_t current_time; status = csr_roam_get_session_id_from_bssid(mac_ctx, &sme_rrm_ctx->sessionBssId, &session_id); @@ -726,8 +726,8 @@ static QDF_STATUS sme_rrm_issue_scan_req(tpAniSirGlobal mac_ctx) * and hence there is a check to see if the requests are atleast * 1 second apart. */ - current_time = qdf_mc_timer_get_system_time(); - sms_log(mac_ctx, LOG1, "prev scan triggered before %ld ms, totalchannels %d", + current_time = (uint64_t)qdf_mc_timer_get_system_time(); + sms_log(mac_ctx, LOG1, "prev scan triggered before %llu ms, totalchannels %d", current_time - rrm_scan_timer, sme_rrm_ctx->channelList.numOfChannels); if ((abs(current_time - rrm_scan_timer) > 1000) && @@ -737,7 +737,7 @@ static QDF_STATUS sme_rrm_issue_scan_req(tpAniSirGlobal mac_ctx) scan_req.idle_time = 1; } - rrm_scan_timer = qdf_mc_timer_get_system_time(); + rrm_scan_timer = (uint64_t)qdf_mc_timer_get_system_time(); /* set BSSType to default type */ scan_req.BSSType = eCSR_BSS_TYPE_ANY; From c797b62f4cff86e69ab6f76681d9bce23f8a3292 Mon Sep 17 00:00:00 2001 From: Kapil Gupta Date: Tue, 18 Oct 2016 12:05:44 +0530 Subject: [PATCH 002/119] qcacld-3.0: Fix memory leak issue qcacld-2.0 to qcacld-3.0 propagation Memory allocated to Ibss peers for IEs info is not getting freed in some cases. Add changes to fix memory leak. CRs-Fixed: 1075406 Change-Id: Ie22b70cb5050c2646e3c2c12fcbdf66255c1284b --- core/mac/src/pe/lim/lim_ibss_peer_mgmt.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/mac/src/pe/lim/lim_ibss_peer_mgmt.c b/core/mac/src/pe/lim/lim_ibss_peer_mgmt.c index fe04d3f6b952..4e5f6fe96c4a 100644 --- a/core/mac/src/pe/lim/lim_ibss_peer_mgmt.c +++ b/core/mac/src/pe/lim/lim_ibss_peer_mgmt.c @@ -1123,6 +1123,8 @@ __lim_ibss_search_and_delete_peer(tpAniSirGlobal mac_ptr, mac_ptr->lim.gLimIbssPeerList; } else prev_node->next = temp_node->next; + if (temp_node->beacon) + qdf_mem_free(temp_node->beacon); qdf_mem_free(temp_node); mac_ptr->lim.gLimNumIbssPeers--; @@ -1667,6 +1669,8 @@ void lim_ibss_heart_beat_handle(tpAniSirGlobal mac_ctx, tpPESession session) prevnode->next = tempnode->next; } + if (tempnode->beacon) + qdf_mem_free(tempnode->beacon); qdf_mem_free(tempnode); mac_ctx->lim.gLimNumIbssPeers--; From afeb1d6b347e7ffc1acc65addce77b2c163f5619 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Mon, 24 Oct 2016 10:58:55 -0700 Subject: [PATCH 003/119] Release 5.1.0.32P Release 5.1.0.32P Change-Id: I08bd05b5b5bf005a2e772b27538840f1dba77d98 CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 2482107417c5..87d7c43c833b 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "O" +#define QWLAN_VERSION_EXTRA "P" #define QWLAN_VERSION_BUILD 32 -#define QWLAN_VERSIONSTR "5.1.0.32O" +#define QWLAN_VERSIONSTR "5.1.0.32P" #endif /* QWLAN_VERSION_H */ From 3e6f638fcdc1c40964b7e93d5edc0072f2254f49 Mon Sep 17 00:00:00 2001 From: jge Date: Thu, 29 Sep 2016 13:28:28 +0800 Subject: [PATCH 004/119] qcacld-3.0: Fix tcp chksum can't be enabled for sap propagation from qcacld-2.0 to qcacld-3.0. In STA+AP or AP+AP mode, if the sap's interface is created rather than using wlan0, there is no setting for tcp chksum offload. Change-Id: I346ea186ad26c5f5a0fd4c3dee4a39b102570de7 CRs-Fixed: 1063245 --- core/hdd/src/wlan_hdd_hostapd.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 35e96c32627e..2834804009ee 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -5818,6 +5818,11 @@ hdd_adapter_t *hdd_wlan_create_ap_dev(hdd_context_t *pHddCtx, pWlanHostapdDev->mtu = HDD_DEFAULT_MTU; pWlanHostapdDev->tx_queue_len = HDD_NETDEV_TX_QUEUE_LEN; + if (pHddCtx->config->enable_ip_tcp_udp_checksum_offload) + pWlanHostapdDev->features |= + NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; + pWlanHostapdDev->features |= NETIF_F_RXCSUM; + qdf_mem_copy(pWlanHostapdDev->dev_addr, (void *)macAddr, sizeof(tSirMacAddr)); qdf_mem_copy(pHostapdAdapter->macAddressCurrent.bytes, From a3bcbe00ff547c209e304d87a54f5e5974e4fd75 Mon Sep 17 00:00:00 2001 From: Zhang Qian Date: Fri, 12 Aug 2016 16:20:36 +0800 Subject: [PATCH 005/119] qcacld-3.0: Extend cfg80211 configure API qcacld-2.0 to qcacld-3.0 propagation Extend cfg80211 configure API: 1. Vendor attribute for non aggregate/11g sw retry threshold. 2. Vendor attribute for aggregate sw retry threshold. 3. Vendor attribute for MGMT frame sw retry threshold. 4. Vendor attribute for CTRL frame sw retry threshold. 5. Vendor attribute for propagation delay. Change-Id: Icdcb0e83432299014fb46507bdd5978b76919ab5 CRs-Fixed: 1035577 --- core/hdd/src/wlan_hdd_cfg80211.c | 58 ++++++++++++++++++++++++++++++++ core/hdd/src/wlan_hdd_cfg80211.h | 30 +++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index da29cff9a74c..d4517ef32b32 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -3889,6 +3889,11 @@ wlan_hdd_wifi_config_policy[QCA_WLAN_VENDOR_ATTR_CONFIG_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_CONFIG_CHANNEL_AVOIDANCE_IND] = {.type = NLA_U8 }, [QCA_WLAN_VENDOR_ATTR_CONFIG_TX_MPDU_AGGREGATION] = {.type = NLA_U8 }, [QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION] = {.type = NLA_U8 }, + [QCA_WLAN_VENDOR_ATTR_CONFIG_NON_AGG_RETRY] = {.type = NLA_U8 }, + [QCA_WLAN_VENDOR_ATTR_CONFIG_AGG_RETRY] = {.type = NLA_U8 }, + [QCA_WLAN_VENDOR_ATTR_CONFIG_MGMT_RETRY] = {.type = NLA_U8 }, + [QCA_WLAN_VENDOR_ATTR_CONFIG_CTRL_RETRY] = {.type = NLA_U8 }, + [QCA_WLAN_VENDOR_ATTR_CONFIG_PROPAGATION_DELAY] = {.type = NLA_U8 }, }; /** @@ -3959,6 +3964,8 @@ __wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, uint8_t *scan_ie; struct sir_set_tx_rx_aggregation_size request; QDF_STATUS qdf_status; + uint8_t retry, delay; + int param_id; ENTER_DEV(dev); @@ -4068,6 +4075,57 @@ __wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, access_policy); } + if (tb[QCA_WLAN_VENDOR_ATTR_CONFIG_NON_AGG_RETRY]) { + retry = nla_get_u8(tb[ + QCA_WLAN_VENDOR_ATTR_CONFIG_NON_AGG_RETRY]); + retry = retry > CFG_NON_AGG_RETRY_MAX ? + CFG_NON_AGG_RETRY_MAX : retry; + param_id = WMI_PDEV_PARAM_NON_AGG_SW_RETRY_TH; + ret_val = wma_cli_set_command(adapter->sessionId, param_id, + retry, PDEV_CMD); + } + + if (tb[QCA_WLAN_VENDOR_ATTR_CONFIG_AGG_RETRY]) { + retry = nla_get_u8(tb[QCA_WLAN_VENDOR_ATTR_CONFIG_AGG_RETRY]); + retry = retry > CFG_AGG_RETRY_MAX ? + CFG_AGG_RETRY_MAX : retry; + + /* Value less than CFG_AGG_RETRY_MIN has side effect to t-put */ + retry = ((retry > 0) && (retry < CFG_AGG_RETRY_MIN)) ? + CFG_AGG_RETRY_MIN : retry; + param_id = WMI_PDEV_PARAM_AGG_SW_RETRY_TH; + ret_val = wma_cli_set_command(adapter->sessionId, param_id, + retry, PDEV_CMD); + } + + if (tb[QCA_WLAN_VENDOR_ATTR_CONFIG_MGMT_RETRY]) { + retry = nla_get_u8(tb[QCA_WLAN_VENDOR_ATTR_CONFIG_MGMT_RETRY]); + retry = retry > CFG_MGMT_RETRY_MAX ? + CFG_MGMT_RETRY_MAX : retry; + param_id = WMI_PDEV_PARAM_MGMT_RETRY_LIMIT; + ret_val = wma_cli_set_command(adapter->sessionId, param_id, + retry, PDEV_CMD); + } + + if (tb[QCA_WLAN_VENDOR_ATTR_CONFIG_CTRL_RETRY]) { + retry = nla_get_u8(tb[QCA_WLAN_VENDOR_ATTR_CONFIG_CTRL_RETRY]); + retry = retry > CFG_CTRL_RETRY_MAX ? + CFG_CTRL_RETRY_MAX : retry; + param_id = WMI_PDEV_PARAM_CTRL_RETRY_LIMIT; + ret_val = wma_cli_set_command(adapter->sessionId, param_id, + retry, PDEV_CMD); + } + + if (tb[QCA_WLAN_VENDOR_ATTR_CONFIG_PROPAGATION_DELAY]) { + delay = nla_get_u8(tb[ + QCA_WLAN_VENDOR_ATTR_CONFIG_PROPAGATION_DELAY]); + delay = delay > CFG_PROPAGATION_DELAY_MAX ? + CFG_PROPAGATION_DELAY_MAX : delay; + param_id = WMI_PDEV_PARAM_PROPAGATION_DELAY; + ret_val = wma_cli_set_command(adapter->sessionId, param_id, + delay, PDEV_CMD); + } + if (vendor_ie_present && access_policy_present) { if (access_policy == QCA_ACCESS_POLICY_DENY_UNLESS_LISTED) { access_policy = diff --git a/core/hdd/src/wlan_hdd_cfg80211.h b/core/hdd/src/wlan_hdd_cfg80211.h index 2c9a81cfed79..602bef0c651c 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.h +++ b/core/hdd/src/wlan_hdd_cfg80211.h @@ -2325,6 +2325,13 @@ enum qca_wlan_vendor_acs_hw_mode { QCA_ACS_MODE_IEEE80211ANY, }; +#define CFG_NON_AGG_RETRY_MAX (31) +#define CFG_AGG_RETRY_MAX (31) +#define CFG_MGMT_RETRY_MAX (31) +#define CFG_CTRL_RETRY_MAX (31) +#define CFG_PROPAGATION_DELAY_MAX (63) +#define CFG_AGG_RETRY_MIN (5) + /** * enum qca_access_policy - access control policy * @@ -2370,6 +2377,13 @@ enum qca_ignore_assoc_disallowed { * Tx aggregation size (8-bit unsigned value) * @QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION: * Rx aggregation size (8-bit unsigned value) + * @QCA_WLAN_VENDOR_ATTR_CONFIG_NON_AGG_RETRY: + * Non aggregrate/11g sw retry threshold + * @QCA_WLAN_VENDOR_ATTR_CONFIG_AGG_RETRY: aggregrate sw retry threshold + * @QCA_WLAN_VENDOR_ATTR_CONFIG_MGMT_RETRY: management frame sw retry threshold + * @QCA_WLAN_VENDOR_ATTR_CONFIG_CTRL_RETRY: control frame sw retry threshold + * @QCA_WLAN_VENDOR_ATTR_CONFIG_PROPAGATION_DELAY: + * propagation delay for 2G/5G band (units in us) * @QCA_WLAN_VENDOR_ATTR_CONFIG_SCAN_DEFAULT_IES: Update the default scan IEs * @QCA_WLAN_VENDOR_ATTR_CONFIG_GENERIC_COMMAND: * Unsigned 32-bit value attribute for generic commands @@ -2406,6 +2420,22 @@ enum qca_wlan_vendor_config { QCA_WLAN_VENDOR_ATTR_CONFIG_TX_MPDU_AGGREGATION, QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION, + /* 8-bit unsigned value to configure the Non aggregrate/11g sw + * retry threshold (0 disable, 31 max). */ + QCA_WLAN_VENDOR_ATTR_CONFIG_NON_AGG_RETRY, + /* 8-bit unsigned value to configure the aggregrate sw + * retry threshold (0 disable, 31 max). */ + QCA_WLAN_VENDOR_ATTR_CONFIG_AGG_RETRY, + /* 8-bit unsigned value to configure the MGMT frame + * retry threshold (0 disable, 31 max). */ + QCA_WLAN_VENDOR_ATTR_CONFIG_MGMT_RETRY, + /* 8-bit unsigned value to configure the CTRL frame + * retry threshold (0 disable, 31 max). */ + QCA_WLAN_VENDOR_ATTR_CONFIG_CTRL_RETRY, + /* 8-bit unsigned value to configure the propagation delay for + * 2G/5G band (0~63, units in us) */ + QCA_WLAN_VENDOR_ATTR_CONFIG_PROPAGATION_DELAY, + /* Attribute used to set scan default IEs to the driver. * * These IEs can be used by scan operations that will be initiated by From 2d7fb16abc08e5dd348e9e94b2967ede45d2e46f Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Mon, 24 Oct 2016 11:29:56 -0700 Subject: [PATCH 006/119] Release 5.1.0.32Q Release 5.1.0.32Q Change-Id: I40b358130eacdb586291097679a8565cb566078e CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 87d7c43c833b..d92bfa60d578 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "P" +#define QWLAN_VERSION_EXTRA "Q" #define QWLAN_VERSION_BUILD 32 -#define QWLAN_VERSIONSTR "5.1.0.32P" +#define QWLAN_VERSIONSTR "5.1.0.32Q" #endif /* QWLAN_VERSION_H */ From b0e1e533f0b514cc227839a1ed412340fb2e0254 Mon Sep 17 00:00:00 2001 From: Krunal Soni Date: Fri, 21 Oct 2016 17:42:08 -0700 Subject: [PATCH 007/119] qcacld-3.0: Fix to respond to SA query req only in-case of SAP-PMF As per the PMF offload feature, all STA related SA queries should be handled in firmware and all SAP related SA queries should be handled in host. Current driver is assuming that both are handled in firmware which is not true. Fix the design by checking if session is STA or SAP and take the decision based on that. Change-Id: I1a89e509068ecb85a6c5655dd43e01a39d660b2e CRs-Fixed: 1081177 --- core/mac/src/pe/lim/lim_process_action_frame.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/mac/src/pe/lim/lim_process_action_frame.c b/core/mac/src/pe/lim/lim_process_action_frame.c index df4b83cd9299..3f5b634c0e15 100644 --- a/core/mac/src/pe/lim/lim_process_action_frame.c +++ b/core/mac/src/pe/lim/lim_process_action_frame.c @@ -1546,10 +1546,9 @@ static void __lim_process_sa_query_request_action_frame(tpAniSirGlobal pMac, return; /* 11w offload is enabled then firmware should not fwd this frame */ - if (pMac->pmf_offload) { + if (LIM_IS_STA_ROLE(psessionEntry) && pMac->pmf_offload) { lim_log(pMac, LOGE, - FL("11w offload is enabled, SA Query request is not expected ") - ); + FL("11w offload enabled, SA Query req isn't expected")); return; } From d9ae863260ca507e55ef306c1a41457084dc6fe9 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Mon, 24 Oct 2016 13:48:57 -0700 Subject: [PATCH 008/119] Release 5.1.0.32R Release 5.1.0.32R Change-Id: I744567b176917d158bc06c71c86630e60f4dac13 CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index d92bfa60d578..8a61658abff0 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "Q" +#define QWLAN_VERSION_EXTRA "R" #define QWLAN_VERSION_BUILD 32 -#define QWLAN_VERSIONSTR "5.1.0.32Q" +#define QWLAN_VERSIONSTR "5.1.0.32R" #endif /* QWLAN_VERSION_H */ From 03890f55a4fdad216d46efb44cde3b4289fd5331 Mon Sep 17 00:00:00 2001 From: Houston Hoffman Date: Fri, 21 Oct 2016 14:43:46 -0700 Subject: [PATCH 009/119] qcacld-3.0: Abort cds_deinit_policy_mgr if context is null Avoid null pointer de-reference. Change-Id: I5f07ab5eba0d24512a06c5426427ad67ee6f798d CRs-Fixed: 1081073 --- core/cds/src/cds_concurrency.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/cds/src/cds_concurrency.c b/core/cds/src/cds_concurrency.c index a23a56b51ef7..562daefdad2d 100644 --- a/core/cds/src/cds_concurrency.c +++ b/core/cds/src/cds_concurrency.c @@ -3963,8 +3963,7 @@ QDF_STATUS cds_deinit_policy_mgr(void) cds_ctx = cds_get_context(QDF_MODULE_ID_QDF); if (!cds_ctx) { cds_err("Invalid CDS Context"); - status = QDF_STATUS_E_FAILURE; - QDF_ASSERT(0); + return QDF_STATUS_E_FAILURE; } if (!QDF_IS_STATUS_SUCCESS(qdf_event_destroy From 50dc3fa44b2873b5244287709ec5b26905877262 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Mon, 24 Oct 2016 14:48:09 -0700 Subject: [PATCH 010/119] Release 5.1.0.32S Release 5.1.0.32S Change-Id: I71d35cd8fbba38231d8905a806bf44aff29a21db CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 8a61658abff0..b08ef328557f 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "R" +#define QWLAN_VERSION_EXTRA "S" #define QWLAN_VERSION_BUILD 32 -#define QWLAN_VERSIONSTR "5.1.0.32R" +#define QWLAN_VERSIONSTR "5.1.0.32S" #endif /* QWLAN_VERSION_H */ From 8f289c8d2d1d0679fa94e46212185f5d13f8189e Mon Sep 17 00:00:00 2001 From: Yun Park Date: Tue, 18 Oct 2016 16:38:21 -0700 Subject: [PATCH 011/119] qcacld-3.0: Fix offload enable status checking after interface setup Since IPA offload enable status checking before interface setup, IPA offload enable/disable will not be performed properly. Fix to check IPA offload enable status after interface setup or before interface cleanup. Change-Id: Ifd950d7d629750afd526db56de2f4b656f1f87de CRs-Fixed: 1079440 --- core/hdd/src/wlan_hdd_ipa.c | 108 ++++++++++++++++++++---------------- 1 file changed, 59 insertions(+), 49 deletions(-) diff --git a/core/hdd/src/wlan_hdd_ipa.c b/core/hdd/src/wlan_hdd_ipa.c index 67b443a4a820..7576c5702caa 100644 --- a/core/hdd/src/wlan_hdd_ipa.c +++ b/core/hdd/src/wlan_hdd_ipa.c @@ -987,7 +987,7 @@ void hdd_ipa_uc_stat_request(hdd_adapter_t *adapter, uint8_t reason) return; } - HDD_IPA_LOG(LOG1, "STAT REQ Reason %d", reason); + HDD_IPA_LOG(LOGOFF, "STAT REQ Reason %d", reason); qdf_mutex_acquire(&hdd_ipa->ipa_lock); if ((HDD_IPA_UC_NUM_WDI_PIPE == hdd_ipa->activated_fw_pipe) && (false == hdd_ipa->resource_loading)) { @@ -1603,20 +1603,12 @@ static void hdd_ipa_uc_offload_enable_disable(hdd_adapter_t *adapter, if (!iface_context || (enable == iface_context->offload_enabled)) { /* IPA offload status is already set as desired */ HDD_IPA_LOG(QDF_TRACE_LEVEL_ERROR, - "offload_type=%d, vdev_id=%d, enable=%d", + "IPA offload status is already set: \ + (offload_type=%d, vdev_id=%d, enable=%d)", offload_type, adapter->sessionId, enable); - WARN_ON(1); return; } - /* Lower layer may send multiple START_BSS_EVENT in DFS mode or during - * channel change indication. Since these indications are sent by lower - * layer as SAP updates and IPA doesn't have to do anything for these - * updates so ignoring! - */ - if (QDF_SAP_MODE == adapter->device_mode && adapter->ipa_context) - return; - qdf_mem_zero(&ipa_offload_enable_disable, sizeof(ipa_offload_enable_disable)); ipa_offload_enable_disable.offload_type = offload_type; @@ -2290,10 +2282,10 @@ int hdd_ipa_set_perf_level(hdd_context_t *hdd_ctx, uint64_t tx_packets, else next_prod_bw = hdd_ctx->config->IpaLowBandwidthMbps; - HDD_IPA_LOG(LOG1, + HDD_IPA_LOG(LOGOFF, "CONS perf curr: %d, next: %d", hdd_ipa->curr_cons_bw, next_cons_bw); - HDD_IPA_LOG(LOG1, + HDD_IPA_LOG(LOGOFF, "PROD perf curr: %d, next: %d", hdd_ipa->curr_prod_bw, next_prod_bw); @@ -3793,55 +3785,52 @@ static int __hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, meta.msg_type = type; switch (type) { case WLAN_STA_CONNECT: + qdf_mutex_acquire(&hdd_ipa->event_lock); + /* STA already connected and without disconnect, connect again * This is Roaming scenario */ if (hdd_ipa->sta_connected) hdd_ipa_cleanup_iface(adapter->ipa_context); - if (hdd_ipa_uc_sta_is_enabled(hdd_ipa->hdd_ctx) && - (hdd_ipa->sap_num_connected_sta > 0) && - !hdd_ipa->sta_connected) - hdd_ipa_uc_offload_enable_disable(adapter, - SIR_STA_RX_DATA_OFFLOAD, 1); - - qdf_mutex_acquire(&hdd_ipa->event_lock); - ret = hdd_ipa_setup_iface(hdd_ipa, adapter, sta_id); if (ret) { qdf_mutex_release(&hdd_ipa->event_lock); - if (hdd_ipa_uc_sta_is_enabled(hdd_ipa->hdd_ctx) && - (hdd_ipa->sap_num_connected_sta > 0) && - !hdd_ipa->sta_connected) - hdd_ipa_uc_offload_enable_disable(adapter, - SIR_STA_RX_DATA_OFFLOAD, 0); goto end; } + if (hdd_ipa_uc_sta_is_enabled(hdd_ipa->hdd_ctx) && + (hdd_ipa->sap_num_connected_sta > 0) && + !hdd_ipa->sta_connected) { + qdf_mutex_release(&hdd_ipa->event_lock); + hdd_ipa_uc_offload_enable_disable(adapter, + SIR_STA_RX_DATA_OFFLOAD, 1); + qdf_mutex_acquire(&hdd_ipa->event_lock); + } + vdev_to_iface[adapter->sessionId] = ((struct hdd_ipa_iface_context *) (adapter->ipa_context))->iface_id; - qdf_mutex_release(&hdd_ipa->event_lock); - hdd_ipa->sta_connected = 1; + + qdf_mutex_release(&hdd_ipa->event_lock); break; case WLAN_AP_CONNECT: + qdf_mutex_acquire(&hdd_ipa->event_lock); + /* For DFS channel we get two start_bss event (before and after * CAC). Also when ACS range includes both DFS and non DFS * channels, we could possibly change channel many times due to * RADAR detection and chosen channel may not be a DFS channels. * So dont return error here. Just discard the event. */ - if (adapter->ipa_context) + if (adapter->ipa_context) { + qdf_mutex_release(&hdd_ipa->event_lock); return 0; + } - if (hdd_ipa_uc_is_enabled(hdd_ipa->hdd_ctx)) - hdd_ipa_uc_offload_enable_disable(adapter, - SIR_AP_RX_DATA_OFFLOAD, 1); - - qdf_mutex_acquire(&hdd_ipa->event_lock); ret = hdd_ipa_setup_iface(hdd_ipa, adapter, sta_id); if (ret) { HDD_IPA_LOG(QDF_TRACE_LEVEL_INFO, @@ -3851,6 +3840,13 @@ static int __hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, goto end; } + if (hdd_ipa_uc_is_enabled(hdd_ipa->hdd_ctx)) { + qdf_mutex_release(&hdd_ipa->event_lock); + hdd_ipa_uc_offload_enable_disable(adapter, + SIR_AP_RX_DATA_OFFLOAD, 1); + qdf_mutex_acquire(&hdd_ipa->event_lock); + } + vdev_to_iface[adapter->sessionId] = ((struct hdd_ipa_iface_context *) (adapter->ipa_context))->iface_id; @@ -3860,7 +3856,6 @@ static int __hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, case WLAN_STA_DISCONNECT: qdf_mutex_acquire(&hdd_ipa->event_lock); - hdd_ipa_cleanup_iface(adapter->ipa_context); if (!hdd_ipa->sta_connected) { HDD_IPA_LOG(QDF_TRACE_LEVEL_INFO, @@ -3886,24 +3881,29 @@ static int __hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, if (hdd_ipa_uc_sta_is_enabled(hdd_ipa->hdd_ctx) && (hdd_ipa->sap_num_connected_sta > 0)) { + qdf_mutex_release(&hdd_ipa->event_lock); hdd_ipa_uc_offload_enable_disable(adapter, SIR_STA_RX_DATA_OFFLOAD, 0); - vdev_to_iface[adapter->sessionId] = HDD_IPA_MAX_IFACE; + qdf_mutex_acquire(&hdd_ipa->event_lock); + vdev_to_iface[adapter->sessionId] = CSR_ROAM_SESSION_MAX; } + hdd_ipa_cleanup_iface(adapter->ipa_context); + qdf_mutex_release(&hdd_ipa->event_lock); break; case WLAN_AP_DISCONNECT: + qdf_mutex_acquire(&hdd_ipa->event_lock); + if (!adapter->ipa_context) { HDD_IPA_LOG(QDF_TRACE_LEVEL_INFO, "%s: Evt: %d, SAP already disconnected", msg_ex->name, meta.msg_type); + qdf_mutex_release(&hdd_ipa->event_lock); return -EINVAL; } - qdf_mutex_acquire(&hdd_ipa->event_lock); - hdd_ipa_cleanup_iface(adapter->ipa_context); if ((!hdd_ipa->num_iface) && (HDD_IPA_UC_NUM_WDI_PIPE == hdd_ipa->activated_fw_pipe)) { @@ -3923,18 +3923,19 @@ static int __hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, } if (hdd_ipa_uc_is_enabled(hdd_ipa->hdd_ctx)) { + qdf_mutex_release(&hdd_ipa->event_lock); hdd_ipa_uc_offload_enable_disable(adapter, SIR_AP_RX_DATA_OFFLOAD, 0); - vdev_to_iface[adapter->sessionId] = HDD_IPA_MAX_IFACE; + qdf_mutex_acquire(&hdd_ipa->event_lock); + vdev_to_iface[adapter->sessionId] = CSR_ROAM_SESSION_MAX; } + hdd_ipa_cleanup_iface(adapter->ipa_context); + qdf_mutex_release(&hdd_ipa->event_lock); break; case WLAN_CLIENT_CONNECT_EX: - HDD_IPA_LOG(QDF_TRACE_LEVEL_INFO, "%d %d", - adapter->dev->ifindex, sta_id); - if (!hdd_ipa_uc_is_enabled(hdd_ipa->hdd_ctx)) { HDD_IPA_LOG(QDF_TRACE_LEVEL_INFO, "%s: Evt: %d, IPA UC OFFLOAD NOT ENABLED", @@ -3945,37 +3946,43 @@ static int __hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, qdf_mutex_acquire(&hdd_ipa->event_lock); if (hdd_ipa_uc_find_add_assoc_sta(hdd_ipa, true, sta_id)) { + qdf_mutex_release(&hdd_ipa->event_lock); HDD_IPA_LOG(QDF_TRACE_LEVEL_ERROR, "%s: STA ID %d found, not valid", adapter->dev->name, sta_id); - qdf_mutex_release(&hdd_ipa->event_lock); return 0; } /* Enable IPA UC Data PIPEs when first STA connected */ if (0 == hdd_ipa->sap_num_connected_sta) { if (hdd_ipa_uc_sta_is_enabled(hdd_ipa->hdd_ctx) && - hdd_ipa->sta_connected) + hdd_ipa->sta_connected) { + qdf_mutex_release(&hdd_ipa->event_lock); hdd_ipa_uc_offload_enable_disable( hdd_get_adapter(hdd_ipa->hdd_ctx, QDF_STA_MODE), SIR_STA_RX_DATA_OFFLOAD, 1); + qdf_mutex_acquire(&hdd_ipa->event_lock); + } ret = hdd_ipa_uc_handle_first_con(hdd_ipa); if (ret) { - qdf_mutex_release(&hdd_ipa->event_lock); HDD_IPA_LOG(QDF_TRACE_LEVEL_ERROR, "%s: handle 1st con ret %d", adapter->dev->name, ret); if (hdd_ipa_uc_sta_is_enabled( hdd_ipa->hdd_ctx) && - hdd_ipa->sta_connected) + hdd_ipa->sta_connected) { + qdf_mutex_release(&hdd_ipa->event_lock); hdd_ipa_uc_offload_enable_disable( hdd_get_adapter( hdd_ipa->hdd_ctx, QDF_STA_MODE), SIR_STA_RX_DATA_OFFLOAD, 0); + } else { + qdf_mutex_release(&hdd_ipa->event_lock); + } return ret; } @@ -4045,13 +4052,15 @@ static int __hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id, hdd_ipa_uc_handle_last_discon(hdd_ipa); if (hdd_ipa_uc_sta_is_enabled(hdd_ipa->hdd_ctx) && - hdd_ipa->sta_connected) + hdd_ipa->sta_connected) { + qdf_mutex_release(&hdd_ipa->event_lock); hdd_ipa_uc_offload_enable_disable( hdd_get_adapter(hdd_ipa->hdd_ctx, QDF_STA_MODE), SIR_STA_RX_DATA_OFFLOAD, 0); - - qdf_mutex_release(&hdd_ipa->event_lock); + } else { + qdf_mutex_release(&hdd_ipa->event_lock); + } break; default: @@ -4222,6 +4231,7 @@ QDF_STATUS hdd_ipa_init(hdd_context_t *hdd_ctx) iface_context->adapter = NULL; iface_context->offload_enabled = 0; qdf_spinlock_create(&iface_context->interface_lock); + vdev_to_iface[i] = CSR_ROAM_SESSION_MAX; } INIT_WORK(&hdd_ipa->pm_work, hdd_ipa_pm_flush); From db91e23d4203897a374249a6c5a8bc3d324a41f0 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Mon, 24 Oct 2016 15:25:12 -0700 Subject: [PATCH 012/119] Release 5.1.0.32T Release 5.1.0.32T Change-Id: I1350cc6aab024fc46bc207f8c5a1b048e581b147 CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index b08ef328557f..bcddac10d7cf 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "S" +#define QWLAN_VERSION_EXTRA "T" #define QWLAN_VERSION_BUILD 32 -#define QWLAN_VERSIONSTR "5.1.0.32S" +#define QWLAN_VERSIONSTR "5.1.0.32T" #endif /* QWLAN_VERSION_H */ From 176c436ae724bbd506b2d0e009dc54471a4fc56c Mon Sep 17 00:00:00 2001 From: "Poddar, Siddarth" Date: Mon, 3 Oct 2016 12:25:00 +0530 Subject: [PATCH 013/119] qcacld-3.0: Add iwpriv pktlog command to alter pktlog buffer size Implement iwpriv pktlog command to change the pktlog buffer size. This command is effective only if pktlog disable is issued previously. This command needs two argument. First argument should be "3" which denotes to set the pktlog buff size. Second argument should be the pktlog size which user wants to change. For eg, "iwpriv wlan0 pktlog 3 2" will change the buffer size to 2 MB. Change-Id: Ifa27916667198c3fdc1c51d0e38564869405e041 CRs-Fixed: 1072584 --- core/hdd/inc/wlan_hdd_main.h | 13 +++++-- core/hdd/src/wlan_hdd_cfg80211.c | 3 ++ core/hdd/src/wlan_hdd_hostapd.c | 9 ++++- core/hdd/src/wlan_hdd_main.c | 65 +++++++++++++++++++++++++++++--- core/hdd/src/wlan_hdd_power.c | 2 +- core/hdd/src/wlan_hdd_wext.c | 23 ++++++++--- core/mac/inc/sir_api.h | 2 + core/sme/src/common/sme_api.c | 1 + core/utils/pktlog/pktlog_ac.c | 13 +++++-- core/wma/src/wma_main.c | 7 ++++ 10 files changed, 115 insertions(+), 23 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index 1fc4e0cc11b6..398e7c2f592e 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -1802,14 +1802,19 @@ static inline QDF_STATUS hdd_register_for_sap_restart_with_channel_switch(void) #endif #if !defined(REMOVE_PKT_LOG) -int hdd_process_pktlog_command(hdd_context_t *hdd_ctx, uint32_t set_value); -int hdd_pktlog_enable_disable(hdd_context_t *hdd_ctx, bool enable, uint8_t); +int hdd_process_pktlog_command(hdd_context_t *hdd_ctx, uint32_t set_value, + int set_value2); +int hdd_pktlog_enable_disable(hdd_context_t *hdd_ctx, bool enable, + uint8_t user_triggered, int size); + #else -int hdd_pktlog_enable_disable(hdd_context_t *hdd_ctx, bool enable, uint8_t) +static inline int hdd_pktlog_enable_disable(hdd_context_t *hdd_ctx, bool enable, + uint8_t user_triggered, int size) { return 0; } -int hdd_process_pktlog_command(hdd_context_t *hdd_ctx, uint32_t set_value) +static inline int hdd_process_pktlog_command(hdd_context_t *hdd_ctx, + uint32_t set_value, int set_value2) { return 0; } diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index d4517ef32b32..052c80abae02 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -4345,6 +4345,9 @@ static int __wlan_hdd_cfg80211_wifi_logger_start(struct wiphy *wiphy, tb[QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_FLAGS]); hdd_info("is_iwpriv_command =%d", start_log.is_iwpriv_command); + /* size is buff size which can be set using iwpriv command*/ + start_log.size = 0; + cds_set_ring_log_level(start_log.ring_id, start_log.verbose_level); if (start_log.ring_id == RING_ID_WAKELOCK) { diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 2834804009ee..989892b26b80 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -3603,8 +3603,13 @@ static __iw_softap_set_pktlog(struct net_device *dev, if (NULL == value) return -ENOMEM; + if (wrqu->data.length < 1 || wrqu->data.length > 2) { + hdd_err("pktlog: either 1 or 2 parameters are required"); + return -EINVAL; + } + hdd_ctx = WLAN_HDD_GET_CTX(pHostapdAdapter); - return hdd_process_pktlog_command(hdd_ctx, value[0]); + return hdd_process_pktlog_command(hdd_ctx, value[0], value[1]); } int @@ -5488,7 +5493,7 @@ static const struct iw_priv_args hostapd_private_args[] = { , { QCSAP_IOCTL_SET_PKTLOG, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + IW_PRIV_TYPE_INT | MAX_VAR_ARGS, 0, "pktlog" } , diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index af549d3ad93d..943f265fe6fb 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -7062,14 +7062,53 @@ static inline void hdd_release_rtnl_lock(void) { } #if !defined(REMOVE_PKT_LOG) +/* MAX iwpriv command support */ +#define PKTLOG_SET_BUFF_SIZE 3 +#define MAX_PKTLOG_SIZE 16 + +/** + * hdd_pktlog_set_buff_size() - set pktlog buffer size + * @hdd_ctx: hdd context + * @set_value2: pktlog buffer size value + * + * + * Return: 0 for success or error. + */ +static int hdd_pktlog_set_buff_size(hdd_context_t *hdd_ctx, int set_value2) +{ + struct sir_wifi_start_log start_log = { 0 }; + QDF_STATUS status; + + start_log.ring_id = RING_ID_PER_PACKET_STATS; + start_log.verbose_level = WLAN_LOG_LEVEL_OFF; + start_log.ini_triggered = cds_is_packet_log_enabled(); + start_log.user_triggered = 1; + start_log.size = set_value2; + + status = sme_wifi_start_logger(hdd_ctx->hHal, start_log); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("sme_wifi_start_logger failed(err=%d)", status); + EXIT(); + return -EINVAL; + } + + return 0; +} + /** * hdd_process_pktlog_command() - process pktlog command * @hdd_ctx: hdd context * @set_value: value set by user + * @set_value2: pktlog buffer size value + * + * This function process pktlog command. + * set_value2 only matters when set_value is 3 (set buff size) + * otherwise we ignore it. * * Return: 0 for success or error. */ -int hdd_process_pktlog_command(hdd_context_t *hdd_ctx, uint32_t set_value) +int hdd_process_pktlog_command(hdd_context_t *hdd_ctx, uint32_t set_value, + int set_value2) { int ret; bool enable; @@ -7079,13 +7118,24 @@ int hdd_process_pktlog_command(hdd_context_t *hdd_ctx, uint32_t set_value) if (0 != ret) return ret; - hdd_info("set pktlog %d", set_value); + hdd_info("set pktlog %d, set size %d", set_value, set_value2); - if (set_value > 2) { + if (set_value > PKTLOG_SET_BUFF_SIZE) { hdd_err("invalid pktlog value %d", set_value); return -EINVAL; } + if (set_value == PKTLOG_SET_BUFF_SIZE) { + if (set_value2 <= 0) { + hdd_err("invalid pktlog size %d", set_value2); + return -EINVAL; + } else if (set_value2 > MAX_PKTLOG_SIZE) { + hdd_err("Pktlog buff size is too large. max value is 16MB.\n"); + return -EINVAL; + } + return hdd_pktlog_set_buff_size(hdd_ctx, set_value2); + } + /* * set_value = 0 then disable packetlog * set_value = 1 enable packetlog forcefully @@ -7100,17 +7150,19 @@ int hdd_process_pktlog_command(hdd_context_t *hdd_ctx, uint32_t set_value) user_triggered = 1; } - return hdd_pktlog_enable_disable(hdd_ctx, enable, user_triggered); + return hdd_pktlog_enable_disable(hdd_ctx, enable, user_triggered, 0); } /** * hdd_pktlog_enable_disable() - Enable/Disable packet logging * @hdd_ctx: HDD context * @enable: Flag to enable/disable + * @user_triggered: triggered through iwpriv + * @size: buffer size to be used for packetlog * * Return: 0 on success; error number otherwise */ int hdd_pktlog_enable_disable(hdd_context_t *hdd_ctx, bool enable, - uint8_t user_triggered) + uint8_t user_triggered, int size) { struct sir_wifi_start_log start_log; QDF_STATUS status; @@ -7120,6 +7172,7 @@ int hdd_pktlog_enable_disable(hdd_context_t *hdd_ctx, bool enable, enable ? WLAN_LOG_LEVEL_ACTIVE : WLAN_LOG_LEVEL_OFF; start_log.ini_triggered = cds_is_packet_log_enabled(); start_log.user_triggered = user_triggered; + start_log.size = size; /* * Use "is_iwpriv_command" flag to distinguish iwpriv command from other * commands. Host uses this flag to decide whether to send pktlog @@ -8048,7 +8101,7 @@ int hdd_wlan_startup(struct device *dev) if (cds_is_packet_log_enabled()) - hdd_pktlog_enable_disable(hdd_ctx, true, 0); + hdd_pktlog_enable_disable(hdd_ctx, true, 0, 0); ret = hdd_register_notifiers(hdd_ctx); if (ret) diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index 7e6e0bd5571f..ffc48c3e714a 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -1586,7 +1586,7 @@ QDF_STATUS hdd_wlan_re_init(void) goto err_cds_disable; if (cds_is_packet_log_enabled()) - hdd_pktlog_enable_disable(pHddCtx, true, 0); + hdd_pktlog_enable_disable(pHddCtx, true, 0, 0); hdd_err("WLAN host driver reinitiation completed!"); goto success; diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index f4af8b1e7619..2761f9e7b65d 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -5382,11 +5382,6 @@ static int __iw_setint_getnone(struct net_device *dev, break; } - case WE_SET_PKTLOG: - { - hdd_process_pktlog_command(hdd_ctx, set_value); - break; - } case WE_SET_HIGHER_DTIM_TRANSITION: { if (!((set_value == false) || (set_value == true))) { @@ -8236,6 +8231,22 @@ static int __iw_set_var_ints_getnone(struct net_device *dev, } break; #endif + case WE_SET_PKTLOG: + { + int ret; + + if (num_args < 1 || num_args > 2) { + hdd_err("pktlog: either 1 or 2 parameters are required"); + return -EINVAL; + } + + ret = hdd_process_pktlog_command(hdd_ctx, apps_args[0], + apps_args[1]); + if (ret) + return ret; + break; + } + case WE_MAC_PWR_DEBUG_CMD: { struct sir_mac_pwr_dbg_cmd mac_pwr_dbg_args; @@ -10065,7 +10076,7 @@ static const struct iw_priv_args we_private_args[] = { "setTxMaxPower5G"}, {WE_SET_PKTLOG, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + IW_PRIV_TYPE_INT | MAX_VAR_ARGS, 0, "pktlog"}, diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 84faa1f04cdf..4e43c6dd3f19 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -3226,6 +3226,7 @@ typedef struct { * @is_iwpriv_command: Set 1 for iwpriv command * @ini_triggered: triggered using ini * @user_triggered: triggered by user + * @size: pktlog buffer size */ struct sir_wifi_start_log { uint32_t ring_id; @@ -3233,6 +3234,7 @@ struct sir_wifi_start_log { uint32_t is_iwpriv_command; bool ini_triggered; uint8_t user_triggered; + int size; }; diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 0c6cf0acc201..c5eef8a2f5a7 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -14760,6 +14760,7 @@ QDF_STATUS sme_wifi_start_logger(tHalHandle hal, req_msg->ring_id = start_log.ring_id; req_msg->ini_triggered = start_log.ini_triggered; req_msg->user_triggered = start_log.user_triggered; + req_msg->size = start_log.size; status = sme_acquire_global_lock(&mac->sme); if (status != QDF_STATUS_SUCCESS) { diff --git a/core/utils/pktlog/pktlog_ac.c b/core/utils/pktlog/pktlog_ac.c index dc7d0927fcb6..a4479ddef70d 100644 --- a/core/utils/pktlog/pktlog_ac.c +++ b/core/utils/pktlog/pktlog_ac.c @@ -484,12 +484,15 @@ int pktlog_setsize(struct hif_opaque_softc *scn, int32_t size) if (size < 0) return -EINVAL; - if (size == pl_info->buf_size) + if (size == pl_info->buf_size) { + qdf_print("%s: Pktlog Buff Size is already of same size.", + __func__); return 0; + } if (pl_info->log_state) { - printk - ("Logging should be disabled before changing bufer size\n"); + qdf_print("%s: Logging should be disabled before changing" + "buffer size.", __func__); return -EINVAL; } @@ -505,8 +508,10 @@ int pktlog_setsize(struct hif_opaque_softc *scn, int32_t size) pl_dev->tgt_pktlog_alloced = false; } - if (size != 0) + if (size != 0) { + qdf_print("%s: New Pktlog Buff Size is %d\n", __func__, size); pl_info->buf_size = size; + } return 0; } diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index fa9198feb700..e2e7e1642b44 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -5778,6 +5778,8 @@ void wma_enable_specific_fw_logs(tp_wma_handle wma_handle, } #if !defined(REMOVE_PKT_LOG) + +#define MEGABYTE (1024 * 1024) /** * wma_set_wifi_start_packet_stats() - Start/stop packet stats * @wma_handle: WMA handle @@ -5821,6 +5823,11 @@ void wma_set_wifi_start_packet_stats(void *wma_handle, ATH_PKTLOG_RX | ATH_PKTLOG_TX | ATH_PKTLOG_TEXT | ATH_PKTLOG_SW_EVENT; + if (start_log->size != 0) { + pktlog_setsize(scn, start_log->size * MEGABYTE); + return; + } + if (start_log->verbose_level == WLAN_LOG_LEVEL_ACTIVE) { pktlog_enable(scn, log_state, start_log->ini_triggered, start_log->user_triggered, From 4d91e770a430003691ffa3aaf20a558ac1d00cef Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Mon, 24 Oct 2016 16:02:55 -0700 Subject: [PATCH 014/119] Release 5.1.0.32U Release 5.1.0.32U Change-Id: I0cb887a7005338fbabf723c38e965b20a38089b8 CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index bcddac10d7cf..76394bc5e4b8 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "T" +#define QWLAN_VERSION_EXTRA "U" #define QWLAN_VERSION_BUILD 32 -#define QWLAN_VERSIONSTR "5.1.0.32T" +#define QWLAN_VERSIONSTR "5.1.0.32U" #endif /* QWLAN_VERSION_H */ From af901441736fe03d34e675f5bdd83ddc69334062 Mon Sep 17 00:00:00 2001 From: "Selvaraj, Sridhar" Date: Wed, 19 Oct 2016 15:38:47 +0530 Subject: [PATCH 015/119] qcacld-3.0: Remove redundant mem zero after malloc in HDD Remove redundant qdf_mem_zero after qdf_mem_malloc since output of qdf_mem_malloc already gives zeroed memory[i.e. kzalloc]. Change-Id: I3190e56ad7b8c12c4dc8357b1e1238e04f651d6a CRs-Fixed: 1079659 --- core/hdd/src/wlan_hdd_cfg.c | 1 - core/hdd/src/wlan_hdd_cfg80211.c | 3 --- core/hdd/src/wlan_hdd_ext_scan.c | 1 - core/hdd/src/wlan_hdd_green_ap.c | 1 - core/hdd/src/wlan_hdd_hostapd.c | 1 - core/hdd/src/wlan_hdd_ioctl.c | 3 --- core/hdd/src/wlan_hdd_main.c | 2 -- core/hdd/src/wlan_hdd_ocb.c | 3 --- core/hdd/src/wlan_hdd_p2p.c | 1 - core/hdd/src/wlan_hdd_power.c | 1 - core/hdd/src/wlan_hdd_scan.c | 2 -- core/hdd/src/wlan_hdd_tdls.c | 3 --- 12 files changed, 22 deletions(-) diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 584830a1d62d..b92c3c74e6a5 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -6876,7 +6876,6 @@ QDF_STATUS hdd_set_sme_config(hdd_context_t *pHddCtx) "%s: unable to allocate smeConfig", __func__); return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(smeConfig, sizeof(*smeConfig)); QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_INFO_HIGH, "%s bWmmIsEnabled=%d 802_11e_enabled=%d dot11Mode=%d", diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 052c80abae02..2e9494a6182b 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -6465,7 +6465,6 @@ static int hdd_set_reset_bpf_offload(hdd_context_t *hdd_ctx, hdd_err("qdf_mem_malloc failed for bpf_set_offload"); return -ENOMEM; } - qdf_mem_zero(bpf_set_offload, sizeof(*bpf_set_offload)); /* Parse and fetch bpf packet size */ if (!tb[BPF_PACKET_SIZE]) { @@ -9215,7 +9214,6 @@ static void wlan_hdd_set_dhcp_server_offload(hdd_adapter_t *pHostapdAdapter) hdd_err("could not allocate tDhcpSrvOffloadInfo!"); return; } - qdf_mem_zero(pDhcpSrvInfo, sizeof(*pDhcpSrvInfo)); pDhcpSrvInfo->vdev_id = pHostapdAdapter->sessionId; pDhcpSrvInfo->dhcpSrvOffloadEnabled = true; pDhcpSrvInfo->dhcpClientNum = pHddCtx->config->dhcpMaxNumClients; @@ -11482,7 +11480,6 @@ static int wlan_hdd_cfg80211_connect_start(hdd_adapter_t *pAdapter, eConnectionState_NotConnected); return -ENOMEM; } - qdf_mem_zero(sme_config, sizeof(*sme_config)); sme_get_config_param(pHddCtx->hHal, sme_config); /* These values are not sessionized. So, any change in these SME * configs on an older or parallel interface will affect the diff --git a/core/hdd/src/wlan_hdd_ext_scan.c b/core/hdd/src/wlan_hdd_ext_scan.c index b81bab3665de..d0a968daf69c 100644 --- a/core/hdd/src/wlan_hdd_ext_scan.c +++ b/core/hdd/src/wlan_hdd_ext_scan.c @@ -3894,7 +3894,6 @@ static int __wlan_hdd_cfg80211_set_epno_list(struct wiphy *wiphy, hdd_err("qdf_mem_malloc failed"); return -ENOMEM; } - qdf_mem_zero(req_msg, len); req_msg->num_networks = num_networks; /* Parse and fetch request Id */ diff --git a/core/hdd/src/wlan_hdd_green_ap.c b/core/hdd/src/wlan_hdd_green_ap.c index 1dccc70ae1c6..01afbd5a178a 100644 --- a/core/hdd/src/wlan_hdd_green_ap.c +++ b/core/hdd/src/wlan_hdd_green_ap.c @@ -315,7 +315,6 @@ static QDF_STATUS hdd_green_ap_attach(struct hdd_context_s *hdd_ctx) goto error; } - qdf_mem_zero(green_ap, sizeof(*green_ap)); green_ap->ps_state = GREEN_AP_PS_OFF_STATE; green_ap->ps_event = 0; green_ap->num_nodes = 0; diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 989892b26b80..c3dd96c240fe 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -1532,7 +1532,6 @@ QDF_STATUS hdd_hostapd_sap_event_cb(tpSap_Event pSapEvent, hdd_err("Failed to allocate station info"); return QDF_STATUS_E_FAILURE; } - memset(sta_info, 0, sizeof(*sta_info)); if (iesLen <= MAX_ASSOC_IND_IE_LEN) { sta_info->assoc_req_ies = (const u8 *)&pSapEvent->sapevt. diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c index e08879e1a6f8..21be7321f4c9 100644 --- a/core/hdd/src/wlan_hdd_ioctl.c +++ b/core/hdd/src/wlan_hdd_ioctl.c @@ -1162,7 +1162,6 @@ hdd_sendactionframe(hdd_adapter_t *adapter, const uint8_t *bssid, ret = -ENOMEM; goto exit; } - qdf_mem_zero(frame, frame_len); hdr = (struct ieee80211_hdr_3addr *)frame; hdr->frame_control = @@ -2819,7 +2818,6 @@ static int hdd_parse_get_cckm_ie(uint8_t *pValue, uint8_t **pCckmIe, hdd_err("qdf_mem_malloc failed"); return -ENOMEM; } - qdf_mem_zero(*pCckmIe, (*pCckmIeLen + 1) / 2); /* * the buffer received from the upper layer is character buffer, * we need to prepare the buffer taking 2 characters in to a U8 hex @@ -4854,7 +4852,6 @@ static int drv_cmd_set_ibss_beacon_oui_data(hdd_adapter_t *adapter, ret = -ENOMEM; goto exit; } - qdf_mem_zero(ibss_ie, command_len); ibss_ie_length = hdd_parse_set_ibss_oui_data_command(value, ibss_ie, &oui_length, diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 943f265fe6fb..d092dd8b55e3 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -6894,8 +6894,6 @@ static int hdd_update_cds_config(hdd_context_t *hdd_ctx) return -ENOMEM; } - qdf_mem_zero(cds_cfg, sizeof(*cds_cfg)); - /* UMA is supported in hardware for performing the * frame translation 802.11 <-> 802.3 */ diff --git a/core/hdd/src/wlan_hdd_ocb.c b/core/hdd/src/wlan_hdd_ocb.c index 9b435ce7dac3..f86a6f11f6dc 100644 --- a/core/hdd/src/wlan_hdd_ocb.c +++ b/core/hdd/src/wlan_hdd_ocb.c @@ -325,7 +325,6 @@ static struct sir_ocb_config *hdd_ocb_config_new(int num_channels, if (!cursor) goto fail; - qdf_mem_zero(cursor, len); ret = cursor; cursor += sizeof(*ret); @@ -1121,7 +1120,6 @@ __wlan_hdd_cfg80211_ocb_start_timing_advert(struct wiphy *wiphy, hdd_err("qdf_mem_malloc failed"); return -ENOMEM; } - qdf_mem_zero(timing_advert, sizeof(*timing_advert)); timing_advert->vdev_id = adapter->sessionId; /* Parse the netlink message */ @@ -1239,7 +1237,6 @@ __wlan_hdd_cfg80211_ocb_stop_timing_advert(struct wiphy *wiphy, hdd_err("qdf_mem_malloc failed"); return -ENOMEM; } - qdf_mem_zero(timing_advert, sizeof(sizeof(*timing_advert))); timing_advert->vdev_id = adapter->sessionId; /* Parse the netlink message */ diff --git a/core/hdd/src/wlan_hdd_p2p.c b/core/hdd/src/wlan_hdd_p2p.c index bfe19b409a1f..f74f14243399 100644 --- a/core/hdd/src/wlan_hdd_p2p.c +++ b/core/hdd/src/wlan_hdd_p2p.c @@ -823,7 +823,6 @@ static int wlan_hdd_request_remain_on_channel(struct wiphy *wiphy, return -ENOMEM; } - qdf_mem_zero(pRemainChanCtx, sizeof(*pRemainChanCtx)); qdf_mem_copy(&pRemainChanCtx->chan, chan, sizeof(struct ieee80211_channel)); pRemainChanCtx->duration = duration; diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index ffc48c3e714a..380083814306 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -1057,7 +1057,6 @@ void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, uint8_t set) hdd_err("Could not allocate Memory"); return; } - qdf_mem_zero(pMulticastAddrs, sizeof(tSirRcvFltMcAddrList)); pMulticastAddrs->action = set; if (set) { diff --git a/core/hdd/src/wlan_hdd_scan.c b/core/hdd/src/wlan_hdd_scan.c index a23809100cb8..a52f9ae6b0aa 100644 --- a/core/hdd/src/wlan_hdd_scan.c +++ b/core/hdd/src/wlan_hdd_scan.c @@ -2263,7 +2263,6 @@ static int __wlan_hdd_cfg80211_sched_scan_start(struct wiphy *wiphy, return -ENOMEM; } - memset(pPnoRequest, 0, sizeof(tSirPNOScanReq)); pPnoRequest->enable = 1; /*Enable PNO */ pPnoRequest->ucNetworksCount = request->n_match_sets; @@ -2534,7 +2533,6 @@ static int __wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy, return -ENOMEM; } - memset(pPnoRequest, 0, sizeof(tSirPNOScanReq)); pPnoRequest->enable = 0; /* Disable PNO */ pPnoRequest->ucNetworksCount = 0; diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index a433ab503abf..0227bd10d69e 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -741,8 +741,6 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter) hdd_err("malloc failed!"); return -ENOMEM; } - /* initialize TDLS pAdater context */ - qdf_mem_zero(pHddTdlsCtx, sizeof(tdlsCtx_t)); /* Initialize connection tracker timer */ qdf_mc_timer_init(&pHddTdlsCtx->peer_update_timer, @@ -1023,7 +1021,6 @@ hddTdlsPeer_t *wlan_hdd_tdls_get_peer(hdd_adapter_t *pAdapter, const u8 *mac, key = wlan_hdd_tdls_hash_key(mac); head = &pHddTdlsCtx->peer_list[key]; - qdf_mem_zero(peer, sizeof(hddTdlsPeer_t)); qdf_mem_copy(peer->peerMac, mac, sizeof(peer->peerMac)); peer->pHddTdlsCtx = pHddTdlsCtx; peer->pref_off_chan_num = pHddCtx->config->fTDLSPrefOffChanNum; From 6a8dcdff2b6654e8bd6a7dc1ed326f9e59b20430 Mon Sep 17 00:00:00 2001 From: "Selvaraj, Sridhar" Date: Wed, 19 Oct 2016 15:53:58 +0530 Subject: [PATCH 016/119] qcacld-3.0: Remove redundant mem zero after malloc in MAC Remove redundant qdf_mem_zero after qdf_mem_malloc since output of qdf_mem_malloc already gives zeroed memory[i.e. kzalloc]. Change-Id: Icdf64ffbf858201dfa315ab3c75bb32d5eca5fa8 CRs-Fixed: 1079679 --- core/mac/src/pe/lim/lim_admit_control.c | 2 -- core/mac/src/pe/lim/lim_api.c | 4 ---- core/mac/src/pe/lim/lim_assoc_utils.c | 13 +----------- core/mac/src/pe/lim/lim_ft.c | 4 ---- core/mac/src/pe/lim/lim_ft_preauth.c | 3 --- core/mac/src/pe/lim/lim_p2p.c | 4 ---- .../mac/src/pe/lim/lim_process_action_frame.c | 2 -- .../src/pe/lim/lim_process_assoc_req_frame.c | 2 -- .../src/pe/lim/lim_process_message_queue.c | 2 -- .../src/pe/lim/lim_process_mlm_host_roam.c | 4 ---- .../src/pe/lim/lim_process_mlm_req_messages.c | 1 - .../src/pe/lim/lim_process_mlm_rsp_messages.c | 3 --- .../src/pe/lim/lim_process_sme_req_messages.c | 18 ----------------- core/mac/src/pe/lim/lim_process_tdls.c | 3 --- core/mac/src/pe/lim/lim_prop_exts_utils.c | 1 - core/mac/src/pe/lim/lim_scan_result_utils.c | 2 -- core/mac/src/pe/lim/lim_security_utils.c | 8 ++------ .../src/pe/lim/lim_send_frames_host_roam.c | 1 - .../src/pe/lim/lim_send_management_frames.c | 5 ----- core/mac/src/pe/lim/lim_send_messages.c | 5 ----- .../src/pe/lim/lim_send_sme_rsp_messages.c | 20 ------------------- core/mac/src/pe/lim/lim_session.c | 3 --- core/mac/src/pe/lim/lim_timer_utils.c | 2 -- core/mac/src/pe/lim/lim_utils.c | 4 ---- core/mac/src/pe/nan/nan_datapath.c | 1 - core/mac/src/pe/rrm/rrm_api.c | 14 ------------- core/mac/src/pe/sch/sch_api.c | 1 - core/mac/src/pe/sch/sch_beacon_gen.c | 5 ----- .../sys/legacy/src/system/src/mac_init_api.c | 3 --- .../src/sys/legacy/src/utils/src/parser_api.c | 5 ----- 30 files changed, 3 insertions(+), 142 deletions(-) diff --git a/core/mac/src/pe/lim/lim_admit_control.c b/core/mac/src/pe/lim/lim_admit_control.c index 2ed47a0ab019..7c361f37ece2 100644 --- a/core/mac/src/pe/lim/lim_admit_control.c +++ b/core/mac/src/pe/lim/lim_admit_control.c @@ -933,7 +933,6 @@ lim_send_hal_msg_add_ts(tpAniSirGlobal pMac, return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set((uint8_t *) pAddTsParam, sizeof(tAddTsParams), 0); pAddTsParam->staIdx = staIdx; pAddTsParam->tspecIdx = tspecIdx; qdf_mem_copy(&pAddTsParam->tspec, &tspecIE, sizeof(tSirMacTspecIE)); @@ -997,7 +996,6 @@ lim_send_hal_msg_del_ts(tpAniSirGlobal pMac, msg.type = WMA_DEL_TS_REQ; msg.bodyptr = pDelTsParam; msg.bodyval = 0; - qdf_mem_set((uint8_t *) pDelTsParam, sizeof(tDelTsParams), 0); /* filling message parameters. */ pDelTsParam->staIdx = staIdx; diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index 8597146e1eba..901c564df9da 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -779,9 +779,6 @@ tSirRetStatus pe_open(tpAniSirGlobal pMac, struct cds_config_info *cds_cfg) goto pe_open_psession_fail; } - qdf_mem_set(pMac->lim.gpSession, - sizeof(tPESession) * pMac->lim.maxBssId, 0); - pMac->lim.mgmtFrameSessionId = 0xff; pMac->lim.tdls_frm_session_id = NO_SESSION; pMac->lim.deferredMsgCnt = 0; @@ -2045,7 +2042,6 @@ QDF_STATUS pe_roam_synch_callback(tpAniSirGlobal mac_ctx, mac_ctx->roam.pReassocResp = NULL; return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(roam_sync_ind_ptr->join_rsp, join_rsp_len); lim_log(mac_ctx, LOG1, FL("Session RicLength = %d"), ft_session_ptr->RICDataLen); diff --git a/core/mac/src/pe/lim/lim_assoc_utils.c b/core/mac/src/pe/lim/lim_assoc_utils.c index 8d914ee6e11c..266f9afcf607 100644 --- a/core/mac/src/pe/lim/lim_assoc_utils.c +++ b/core/mac/src/pe/lim/lim_assoc_utils.c @@ -2148,7 +2148,6 @@ lim_add_sta(tpAniSirGlobal mac_ctx, FL("Unable to allocate memory during ADD_STA")); return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set((uint8_t *) add_sta_params, sizeof(tAddStaParams), 0); if (LIM_IS_AP_ROLE(session_entry) || LIM_IS_IBSS_ROLE(session_entry) || LIM_IS_NDI_ROLE(session_entry)) @@ -2558,8 +2557,6 @@ lim_del_sta(tpAniSirGlobal pMac, return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set((uint8_t *) pDelStaParams, sizeof(tDeleteStaParams), 0); - /* */ /* DPH contains the STA index only for "peer" STA entries. */ /* LIM global contains "self" STA index */ @@ -2703,7 +2700,6 @@ lim_add_sta_self(tpAniSirGlobal pMac, uint16_t staIdx, uint8_t updateSta, FL("Unable to allocate memory during ADD_STA")); return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set((uint8_t *) pAddStaParams, sizeof(tAddStaParams), 0); /* / Add STA context at MAC HW (BMU, RHP & TFP) */ qdf_mem_copy((uint8_t *) pAddStaParams->staMac, @@ -3361,7 +3357,6 @@ lim_del_bss(tpAniSirGlobal pMac, tpDphHashNode pStaDs, uint16_t bssIdx, FL("Unable to allocate memory during ADD_BSS")); return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set((uint8_t *) pDelBssParams, sizeof(tDeleteBssParams), 0); pDelBssParams->sessionId = psessionEntry->peSessionId; /* update PE session Id */ @@ -3559,9 +3554,7 @@ tSirRetStatus lim_sta_send_add_bss(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, FL("Unable to allocate memory during ADD_BSS")); retCode = eSIR_MEM_ALLOC_FAILED; goto returnFailure; - } else - qdf_mem_set((uint8_t *) pAddBssParams, sizeof(tAddBssParams), - 0); + } qdf_mem_copy(pAddBssParams->bssId, bssDescription->bssId, sizeof(tSirMacAddr)); @@ -4101,8 +4094,6 @@ tSirRetStatus lim_sta_send_add_bss_pre_assoc(tpAniSirGlobal pMac, uint8_t update goto returnFailure; } - qdf_mem_set((uint8_t *) pAddBssParams, sizeof(tAddBssParams), 0); - lim_extract_ap_capabilities(pMac, (uint8_t *) bssDescription->ieFields, lim_get_ielen_from_bss_description(bssDescription), pBeaconStruct); @@ -4804,7 +4795,6 @@ void lim_send_sme_unprotected_mgmt_frame_ind(tpAniSirGlobal pMac, uint8_t frameT ("AllocateMemory failed for tSirSmeUnprotectedMgmtFrameInd")); return; } - qdf_mem_set((void *)pSirSmeMgmtFrame, length, 0); pSirSmeMgmtFrame->sessionId = sessionId; pSirSmeMgmtFrame->frameType = frameType; @@ -4847,7 +4837,6 @@ void lim_send_sme_tsm_ie_ind(tpAniSirGlobal pMac, tpPESession psessionEntry, FL("AllocateMemory failed for tSirSmeTsmIEInd")); return; } - qdf_mem_set((void *)pSirSmeTsmIeInd, sizeof(tSirSmeTsmIEInd), 0); pSirSmeTsmIeInd->sessionId = psessionEntry->smeSessionId; pSirSmeTsmIeInd->tsmIe.tsid = tid; diff --git a/core/mac/src/pe/lim/lim_ft.c b/core/mac/src/pe/lim/lim_ft.c index d4e02035613d..80bfec84cfef 100644 --- a/core/mac/src/pe/lim/lim_ft.c +++ b/core/mac/src/pe/lim/lim_ft.c @@ -157,8 +157,6 @@ void lim_ft_prepare_add_bss_req(tpAniSirGlobal pMac, return; } - qdf_mem_set((uint8_t *) pAddBssParams, sizeof(tAddBssParams), 0); - lim_extract_ap_capabilities(pMac, (uint8_t *) bssDescription->ieFields, lim_get_ielen_from_bss_description(bssDescription), pBeaconStruct); @@ -862,7 +860,6 @@ lim_ft_send_aggr_qos_rsp(tpAniSirGlobal pMac, uint8_t rspReqd, FL("AllocateMemory failed for tSirAggrQosRsp")); return; } - qdf_mem_set((uint8_t *) rsp, sizeof(*rsp), 0); rsp->messageType = eWNI_SME_FT_AGGR_QOS_RSP; rsp->sessionId = smesessionId; rsp->length = sizeof(*rsp); @@ -991,7 +988,6 @@ tSirRetStatus lim_process_ft_aggr_qos_req(tpAniSirGlobal pMac, uint32_t *pMsgBuf return eSIR_FAILURE; } - qdf_mem_set((uint8_t *) pAggrAddTsParam, sizeof(tAggrAddTsParams), 0); pAggrAddTsParam->staIdx = psessionEntry->staId; /* Fill in the sessionId specific to PE */ pAggrAddTsParam->sessionId = sessionId; diff --git a/core/mac/src/pe/lim/lim_ft_preauth.c b/core/mac/src/pe/lim/lim_ft_preauth.c index 6195a041f3c0..cca7f81fa040 100644 --- a/core/mac/src/pe/lim/lim_ft_preauth.c +++ b/core/mac/src/pe/lim/lim_ft_preauth.c @@ -597,7 +597,6 @@ void lim_post_ft_pre_auth_rsp(tpAniSirGlobal mac_ctx, QDF_ASSERT(ft_pre_auth_rsp != NULL); return; } - qdf_mem_zero(ft_pre_auth_rsp, rsp_len); lim_log(mac_ctx, LOG1, FL("Auth Rsp = %p"), ft_pre_auth_rsp); if (session) { @@ -679,8 +678,6 @@ QDF_STATUS lim_send_preauth_scan_offload(tpAniSirGlobal mac_ctx, return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(scan_offload_req, sizeof(tSirScanOffloadReq)); - msg.type = WMA_START_SCAN_OFFLOAD_REQ; msg.bodyptr = scan_offload_req; msg.bodyval = 0; diff --git a/core/mac/src/pe/lim/lim_p2p.c b/core/mac/src/pe/lim/lim_p2p.c index e6af69c753df..8c2318b5292c 100644 --- a/core/mac/src/pe/lim/lim_p2p.c +++ b/core/mac/src/pe/lim/lim_p2p.c @@ -90,8 +90,6 @@ static QDF_STATUS lim_send_hal_req_remain_on_chan_offload(tpAniSirGlobal pMac, return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(pScanOffloadReq, sizeof(tSirScanOffloadReq)); - msg.type = WMA_START_SCAN_OFFLOAD_REQ; msg.bodyptr = pScanOffloadReq; msg.bodyval = 0; @@ -390,7 +388,6 @@ void lim_send_sme_mgmt_frame_ind(tpAniSirGlobal pMac, uint8_t frameType, FL("AllocateMemory failed for eWNI_SME_LISTEN_RSP")); return; } - qdf_mem_set((void *)pSirSmeMgmtFrame, length, 0); pSirSmeMgmtFrame->frame_len = frameLen; pSirSmeMgmtFrame->sessionId = sessionId; @@ -754,7 +751,6 @@ tSirRetStatus __lim_process_sme_no_a_update(tpAniSirGlobal pMac, uint32_t *pMsgB return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set((uint8_t *) pMsgNoA, sizeof(tP2pPsConfig), 0); pMsgNoA->opp_ps = pNoA->opp_ps; pMsgNoA->ctWindow = pNoA->ctWindow; pMsgNoA->duration = pNoA->duration; diff --git a/core/mac/src/pe/lim/lim_process_action_frame.c b/core/mac/src/pe/lim/lim_process_action_frame.c index 3f5b634c0e15..455828a6b04f 100644 --- a/core/mac/src/pe/lim/lim_process_action_frame.c +++ b/core/mac/src/pe/lim/lim_process_action_frame.c @@ -422,8 +422,6 @@ lim_process_ext_channel_switch_action_frame(tpAniSirGlobal mac_ctx, return; } - qdf_mem_zero(ext_cng_chan_ind, - sizeof(*ext_cng_chan_ind)); ext_cng_chan_ind->session_id = session_entry->smeSessionId; diff --git a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c index c1d77bfb5f9c..5d7fe2487091 100644 --- a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c +++ b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c @@ -1863,7 +1863,6 @@ void lim_process_assoc_req_frame(tpAniSirGlobal mac_ctx, uint8_t *rx_pkt_info, FL("Allocate Memory failed in assoc_req")); return; } - qdf_mem_set((void *)assoc_req, sizeof(*assoc_req), 0); /* Parse Assoc Request frame */ if (false == lim_chk_assoc_req_parse_error(mac_ctx, hdr, session, @@ -2198,7 +2197,6 @@ void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx, FL("AllocateMemory failed for assoc_ind")); return; } - qdf_mem_set(assoc_ind, temp, 0); qdf_mem_copy((uint8_t *) assoc_ind->peerMacAddr, (uint8_t *) sta_ds->staAddr, sizeof(tSirMacAddr)); assoc_ind->aid = sta_ds->assocId; diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c index 2229f7f9bae7..381e186d5bb8 100644 --- a/core/mac/src/pe/lim/lim_process_message_queue.c +++ b/core/mac/src/pe/lim/lim_process_message_queue.c @@ -521,7 +521,6 @@ __lim_pno_match_fwd_bcn_probepsp(tpAniSirGlobal pmac, uint8_t *rx_pkt_info, } hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info); body = WMA_GET_RX_MPDU_DATA(rx_pkt_info); - qdf_mem_zero(result, sizeof(*result) + ie_len); /* Received frame does not have request id, hence set 0 */ result->request_id = 0; @@ -574,7 +573,6 @@ __lim_ext_scan_forward_bcn_probe_rsp(tpAniSirGlobal pmac, uint8_t *rx_pkt_info, } hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info); body = WMA_GET_RX_MPDU_DATA(rx_pkt_info); - qdf_mem_zero(result, sizeof(*result) + ie_len); /* Received frame does not have request id, hence set 0 */ result->requestId = 0; diff --git a/core/mac/src/pe/lim/lim_process_mlm_host_roam.c b/core/mac/src/pe/lim/lim_process_mlm_host_roam.c index cb16a1e43ca5..00e22ecef258 100644 --- a/core/mac/src/pe/lim/lim_process_mlm_host_roam.c +++ b/core/mac/src/pe/lim/lim_process_mlm_host_roam.c @@ -425,9 +425,6 @@ void lim_process_sta_mlm_add_bss_rsp_ft(tpAniSirGlobal pMac, if (NULL == pMac->lim.pSessionEntry->pLimMlmReassocRetryReq) goto end; - qdf_mem_set(pMac->lim.pSessionEntry-> - pLimMlmReassocRetryReq, - sizeof(tLimMlmReassocReq), 0); qdf_mem_copy(pMac->lim.pSessionEntry-> pLimMlmReassocRetryReq, psessionEntry->pLimMlmReassocReq, @@ -472,7 +469,6 @@ void lim_process_sta_mlm_add_bss_rsp_ft(tpAniSirGlobal pMac, FL("Unable to allocate memory during ADD_STA")); goto end; } - qdf_mem_set((uint8_t *) pAddStaParams, sizeof(tAddStaParams), 0); /* / Add STA context at MAC HW (BMU, RHP & TFP) */ qdf_mem_copy((uint8_t *) pAddStaParams->staMac, diff --git a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c index 6819abd894a8..7cf6c5eef08e 100644 --- a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c @@ -491,7 +491,6 @@ lim_mlm_add_bss(tpAniSirGlobal mac_ctx, return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set(addbss_param, sizeof(tAddBssParams), 0); /* Fill in tAddBssParams members */ qdf_mem_copy(addbss_param->bssId, mlm_start_req->bssId, sizeof(tSirMacAddr)); diff --git a/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c b/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c index 668b63696bb2..bd61bb43c4a0 100644 --- a/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c +++ b/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c @@ -586,8 +586,6 @@ void lim_process_mlm_auth_cnf(tpAniSirGlobal mac_ctx, uint32_t *msg) FL("mlmAuthReq :Memory alloc failed ")); return; } - qdf_mem_set((uint8_t *) auth_req, - sizeof(tLimMlmAuthReq), 0); if (session_entry->limSmeState == eLIM_SME_WT_AUTH_STATE) { sir_copy_mac_addr(auth_req->peerMacAddr, @@ -3197,7 +3195,6 @@ void lim_send_beacon_ind(tpAniSirGlobal pMac, tpPESession psessionEntry) ) return; } - qdf_mem_set(pBeaconGenParams, sizeof(*pBeaconGenParams), 0); qdf_mem_copy((void *)pBeaconGenParams->bssId, (void *)psessionEntry->bssId, QDF_MAC_ADDR_SIZE); limMsg.bodyptr = pBeaconGenParams; diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index 8528b912e356..e488b5f6cead 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c @@ -157,8 +157,6 @@ static QDF_STATUS lim_process_set_hw_mode(tpAniSirGlobal mac, uint32_t *msg) return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(req_msg, len); - req_msg->hw_mode_index = buf->set_hw.hw_mode_index; req_msg->reason = buf->set_hw.reason; /* Other parameters are not needed for WMA */ @@ -230,8 +228,6 @@ static QDF_STATUS lim_process_set_dual_mac_cfg_req(tpAniSirGlobal mac, return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(req_msg, len); - req_msg->scan_config = buf->set_dual_mac.scan_config; req_msg->fw_mode_config = buf->set_dual_mac.fw_mode_config; /* Other parameters are not needed for WMA */ @@ -676,7 +672,6 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) goto end; } - qdf_mem_set((void *)sme_start_bss_req, size, 0); qdf_mem_copy(sme_start_bss_req, msg_buf, sizeof(tSirSmeStartBssReq)); if (!lim_is_sme_start_bss_req_valid(mac_ctx, @@ -880,9 +875,6 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) ret_code = eSIR_SME_RESOURCES_UNAVAILABLE; goto free; } - qdf_mem_set(session->parsedAssocReq, - (session->dph.dphHashTable.size * - sizeof(tpSirAssocReq)), 0); } if (!sme_start_bss_req->channelId && @@ -975,8 +967,6 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) goto free; } - qdf_mem_set((void *)mlm_start_req, sizeof(tLimMlmStartReq), 0); - /* Copy SSID to the MLM start structure */ qdf_mem_copy((uint8_t *) &mlm_start_req->ssId, (uint8_t *) &sme_start_bss_req->ssId, @@ -1288,8 +1278,6 @@ static QDF_STATUS lim_send_hal_start_scan_offload_req(tpAniSirGlobal pMac, return QDF_STATUS_E_NOMEM; } - qdf_mem_set((uint8_t *) pScanOffloadReq, len, 0); - msg.type = WMA_START_SCAN_OFFLOAD_REQ; msg.bodyptr = pScanOffloadReq; msg.bodyval = 0; @@ -1584,7 +1572,6 @@ __lim_process_sme_join_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) ret_code = eSIR_SME_RESOURCES_UNAVAILABLE; goto end; } - (void)qdf_mem_set((void *)sme_join_req, n_size, 0); (void)qdf_mem_copy((void *)sme_join_req, (void *)msg_buf, n_size); @@ -1872,7 +1859,6 @@ __lim_process_sme_join_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) ret_code = eSIR_SME_RESOURCES_UNAVAILABLE; goto end; } - (void)qdf_mem_set((void *)mlm_join_req, val, 0); /* PE SessionId is stored as a part of JoinReq */ mlm_join_req->sessionId = session->peSessionId; @@ -2097,7 +2083,6 @@ static void __lim_process_sme_reassoc_req(tpAniSirGlobal mac_ctx, ret_code = eSIR_SME_RESOURCES_UNAVAILABLE; goto end; } - (void)qdf_mem_set((void *)reassoc_req, size, 0); (void)qdf_mem_copy((void *)reassoc_req, (void *)msg_buf, size); if (!lim_is_sme_join_req_valid(mac_ctx, @@ -4660,9 +4645,6 @@ skip_match: qdf_mem_malloc(sizeof(struct mgmt_frm_reg_info) + sme_req->matchLen); if (lim_mgmt_regn != NULL) { - qdf_mem_set((void *)lim_mgmt_regn, - sizeof(struct mgmt_frm_reg_info) + - sme_req->matchLen, 0); lim_mgmt_regn->frameType = sme_req->frameType; lim_mgmt_regn->matchLen = sme_req->matchLen; lim_mgmt_regn->sessionId = sme_req->sessionId; diff --git a/core/mac/src/pe/lim/lim_process_tdls.c b/core/mac/src/pe/lim/lim_process_tdls.c index 7b2e5cae97a3..6c16ae4b4dbb 100644 --- a/core/mac/src/pe/lim/lim_process_tdls.c +++ b/core/mac/src/pe/lim/lim_process_tdls.c @@ -3316,9 +3316,6 @@ tSirRetStatus lim_process_sme_tdls_link_establish_req(tpAniSirGlobal mac_ctx, return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set((uint8_t *) tdls_req_params, - sizeof(tTdlsLinkEstablishParams), 0); - tdls_req_params->staIdx = stads->staIndex; tdls_req_params->isResponder = tdls_req->isResponder; tdls_req_params->uapsdQueues = tdls_req->uapsdQueues; diff --git a/core/mac/src/pe/lim/lim_prop_exts_utils.c b/core/mac/src/pe/lim/lim_prop_exts_utils.c index c263b366d36e..629f32b8a002 100644 --- a/core/mac/src/pe/lim/lim_prop_exts_utils.c +++ b/core/mac/src/pe/lim/lim_prop_exts_utils.c @@ -127,7 +127,6 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie, return; } - qdf_mem_set((uint8_t *) beacon_struct, sizeof(tSirProbeRespBeacon), 0); *qos_cap = 0; *prop_cap = 0; *uapsd = 0; diff --git a/core/mac/src/pe/lim/lim_scan_result_utils.c b/core/mac/src/pe/lim/lim_scan_result_utils.c index 9bed13a0f534..6b19f0c3a107 100644 --- a/core/mac/src/pe/lim/lim_scan_result_utils.c +++ b/core/mac/src/pe/lim/lim_scan_result_utils.c @@ -389,8 +389,6 @@ lim_check_and_add_bss_description(tpAniSirGlobal mac_ctx, return; } - qdf_mem_zero(bssdescr, frame_len); - /* In scan state, store scan result. */ lim_collect_bss_description(mac_ctx, bssdescr, bpr, rx_packet_info, scanning); diff --git a/core/mac/src/pe/lim/lim_security_utils.c b/core/mac/src/pe/lim/lim_security_utils.c index a76eea60c45c..c5938c2b923d 100644 --- a/core/mac/src/pe/lim/lim_security_utils.c +++ b/core/mac/src/pe/lim/lim_security_utils.c @@ -842,9 +842,7 @@ void lim_send_set_bss_key_req(tpAniSirGlobal pMac, /* Respond to SME with error code */ mlmSetKeysCnf.resultCode = eSIR_SME_RESOURCES_UNAVAILABLE; goto end; - } else - qdf_mem_set((void *)pSetBssKeyParams, - sizeof(tSetBssKeyParams), 0); + } /* Update the WMA_SET_BSSKEY_REQ parameters */ pSetBssKeyParams->bssIdx = psessionEntry->bssIdx; @@ -943,9 +941,7 @@ void lim_send_set_sta_key_req(tpAniSirGlobal pMac, lim_log(pMac, LOGP, FL("Unable to allocate memory during SET_BSSKEY")); return; - } else - qdf_mem_set((void *)pSetStaKeyParams, sizeof(tSetStaKeyParams), - 0); + } /* Update the WMA_SET_STAKEY_REQ parameters */ pSetStaKeyParams->staIdx = staIdx; diff --git a/core/mac/src/pe/lim/lim_send_frames_host_roam.c b/core/mac/src/pe/lim/lim_send_frames_host_roam.c index 50c86a6ff657..2039955c7e17 100644 --- a/core/mac/src/pe/lim/lim_send_frames_host_roam.c +++ b/core/mac/src/pe/lim/lim_send_frames_host_roam.c @@ -487,7 +487,6 @@ void lim_send_retry_reassoc_req_frame(tpAniSirGlobal pMac, pTmpMlmReassocReq = qdf_mem_malloc(sizeof(tLimMlmReassocReq)); if (NULL == pTmpMlmReassocReq) goto end; - qdf_mem_set(pTmpMlmReassocReq, sizeof(tLimMlmReassocReq), 0); qdf_mem_copy(pTmpMlmReassocReq, pMlmReassocReq, sizeof(tLimMlmReassocReq)); } diff --git a/core/mac/src/pe/lim/lim_send_management_frames.c b/core/mac/src/pe/lim/lim_send_management_frames.c index 94248e13a9c4..2cd0f854db31 100644 --- a/core/mac/src/pe/lim/lim_send_management_frames.c +++ b/core/mac/src/pe/lim/lim_send_management_frames.c @@ -579,8 +579,6 @@ lim_send_probe_rsp_mgmt_frame(tpAniSirGlobal mac_ctx, return; } - qdf_mem_zero(&extracted_ext_cap, sizeof(extracted_ext_cap)); - /* * Fill out 'frm', after which we'll just hand the struct off to * 'dot11f_pack_probe_response'. @@ -1659,8 +1657,6 @@ lim_send_assoc_req_mgmt_frame(tpAniSirGlobal mac_ctx, return; } - qdf_mem_set((uint8_t *) frm, sizeof(tDot11fAssocRequest), 0); - if (add_ie_len && pe_session->is_ext_caps_present) { qdf_mem_set((uint8_t *) &extr_ext_cap, sizeof(tDot11fIEExtCap), 0); @@ -4023,7 +4019,6 @@ lim_send_radio_measure_report_action_frame(tpAniSirGlobal pMac, qdf_mem_free(frm); return eSIR_FAILURE; } - qdf_mem_set((uint8_t *) frm, sizeof(*frm), 0); frm->Category.category = SIR_MAC_ACTION_RRM; frm->Action.action = SIR_MAC_RRM_RADIO_MEASURE_RPT; diff --git a/core/mac/src/pe/lim/lim_send_messages.c b/core/mac/src/pe/lim/lim_send_messages.c index 8233822f0284..3222cf08c613 100644 --- a/core/mac/src/pe/lim/lim_send_messages.c +++ b/core/mac/src/pe/lim/lim_send_messages.c @@ -103,7 +103,6 @@ tSirRetStatus lim_send_cf_params(tpAniSirGlobal pMac, uint8_t bssIdx, retCode = eSIR_MEM_ALLOC_FAILED; goto returnFailure; } - qdf_mem_set((uint8_t *) pCFParams, sizeof(tUpdateCFParams), 0); pCFParams->cfpCount = cfpCount; pCFParams->cfpPeriod = cfpPeriod; pCFParams->bssIdx = bssIdx; @@ -227,7 +226,6 @@ tSirRetStatus lim_send_switch_chnl_params(tpAniSirGlobal pMac, "Unable to allocate memory for Switch Ch Params")); return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set((uint8_t *) pChnlParams, sizeof(tSwitchChannelParams), 0); pChnlParams->channelNumber = chnlNumber; pChnlParams->ch_center_freq_seg0 = ch_center_freq_seg0; pChnlParams->ch_center_freq_seg1 = ch_center_freq_seg1; @@ -491,7 +489,6 @@ tSirRetStatus lim_set_link_state(tpAniSirGlobal pMac, tSirLinkState state, retCode = eSIR_MEM_ALLOC_FAILED; return retCode; } - qdf_mem_set((uint8_t *) pLinkStateParams, sizeof(tLinkStateParams), 0); pLinkStateParams->state = state; pLinkStateParams->callback = callback; pLinkStateParams->callbackArg = callbackArg; @@ -534,7 +531,6 @@ extern tSirRetStatus lim_set_link_state_ft(tpAniSirGlobal pMac, tSirLinkState retCode = eSIR_MEM_ALLOC_FAILED; return retCode; } - qdf_mem_set((uint8_t *) pLinkStateParams, sizeof(tLinkStateParams), 0); pLinkStateParams->state = state; /* Copy Mac address */ sir_copy_mac_addr(pLinkStateParams->bssid, bssId); @@ -593,7 +589,6 @@ tSirRetStatus lim_send_beacon_filter_info(tpAniSirGlobal pMac, retCode = eSIR_MEM_ALLOC_FAILED; return retCode; } - qdf_mem_set((uint8_t *) pBeaconFilterMsg, msgSize, 0); /* Fill in capability Info and mask */ /* Don't send this message if no active Infra session is found. */ pBeaconFilterMsg->capabilityInfo = psessionEntry->limCurrentBssCaps; diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c index 6b524cfbb080..ab2fcb67c14c 100644 --- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c +++ b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c @@ -462,7 +462,6 @@ lim_send_sme_join_reassoc_rsp(tpAniSirGlobal mac_ctx, uint16_t msg_type, return; } - qdf_mem_set((uint8_t *) sme_join_rsp, rsp_len, 0); sme_join_rsp->beaconLength = 0; sme_join_rsp->assocReqLength = 0; sme_join_rsp->assocRspLength = 0; @@ -480,7 +479,6 @@ lim_send_sme_join_reassoc_rsp(tpAniSirGlobal mac_ctx, uint16_t msg_type, FL("MemAlloc fail - JOIN/REASSOC_RSP")); return; } - qdf_mem_set((uint8_t *) sme_join_rsp, rsp_len, 0); if (result_code == eSIR_SME_SUCCESS) { sta_ds = dph_get_hash_entry(mac_ctx, DPH_STA_HASH_INDEX_PEER, @@ -592,8 +590,6 @@ lim_send_sme_start_bss_rsp(tpAniSirGlobal pMac, ("call to AllocateMemory failed for eWNI_SME_START_BSS_RSP")); return; } - qdf_mem_set((uint8_t *) pSirSmeRsp, size, 0); - } else { /* subtract size of beaconLength + Mac Hdr + Fixed Fields before SSID */ ieOffset = sizeof(tAniBeaconStruct) + SIR_MAC_B_PR_SSID_OFFSET; @@ -611,7 +607,6 @@ lim_send_sme_start_bss_rsp(tpAniSirGlobal pMac, return; } - qdf_mem_set((uint8_t *) pSirSmeRsp, size, 0); size = sizeof(tSirSmeStartBssRsp); if (resultCode == eSIR_SME_SUCCESS) { @@ -769,7 +764,6 @@ lim_post_sme_scan_rsp_message(tpAniSirGlobal pMac, FL("AllocateMemory failed for eWNI_SME_SCAN_RSP")); return; } - qdf_mem_set((void *)pSirSmeScanRsp, sizeof(tSirSmeScanRsp), 0); pSirSmeScanRsp->messageType = eWNI_SME_SCAN_RSP; pSirSmeScanRsp->statusCode = resultCode; @@ -1697,7 +1691,6 @@ lim_send_sme_addts_rsp(tpAniSirGlobal pMac, uint8_t rspReqd, uint32_t status, return; } - qdf_mem_set((uint8_t *) rsp, sizeof(*rsp), 0); rsp->messageType = eWNI_SME_ADDTS_RSP; rsp->rc = status; rsp->rsp.status = (enum eSirMacStatusCodes)status; @@ -1746,7 +1739,6 @@ lim_send_sme_delts_rsp(tpAniSirGlobal pMac, tpSirDeltsReq delts, uint32_t status lim_log(pMac, LOGP, FL("AllocateMemory failed for DELTS_RSP")); return; } - qdf_mem_set((uint8_t *) rsp, sizeof(*rsp), 0); if (psessionEntry != NULL) { @@ -1797,7 +1789,6 @@ lim_send_sme_delts_ind(tpAniSirGlobal pMac, tpSirDeltsReqInfo delts, uint16_t ai lim_log(pMac, LOGP, FL("AllocateMemory failed for DELTS_IND")); return; } - qdf_mem_set((uint8_t *) rsp, sizeof(*rsp), 0); rsp->messageType = eWNI_SME_DELTS_IND; rsp->rc = eSIR_SUCCESS; @@ -1949,9 +1940,6 @@ lim_send_sme_ibss_peer_ind(tpAniSirGlobal pMac, return; } - qdf_mem_set((void *)pNewPeerInd, (sizeof(tSmeIbssPeerInd) + beaconLen), - 0); - qdf_mem_copy((uint8_t *) pNewPeerInd->peer_addr.bytes, peerMacAddr, QDF_MAC_ADDR_SIZE); pNewPeerInd->staId = staIndex; @@ -2180,7 +2168,6 @@ void lim_handle_csa_offload_msg(tpAniSirGlobal mac_ctx, tpSirMsgQ msg) goto err; } - qdf_mem_set(csa_offload_ind, sizeof(tSmeCsaOffloadInd), 0); csa_offload_ind->mesgType = eWNI_SME_CSA_OFFLOAD_EVENT; csa_offload_ind->mesgLen = sizeof(tSmeCsaOffloadInd); qdf_mem_copy(csa_offload_ind->bssid.bytes, session_entry->bssId, @@ -2275,7 +2262,6 @@ void lim_send_sme_max_assoc_exceeded_ntf(tpAniSirGlobal pMac, tSirMacAddr peerMa PELOGE(lim_log(pMac, LOGE, FL("Failed to allocate memory"));) return; } - qdf_mem_set((void *)pSmeMaxAssocInd, sizeof(tSmeMaxAssocInd), 0); qdf_mem_copy((uint8_t *) pSmeMaxAssocInd->peer_mac.bytes, (uint8_t *) peerMacAddr, QDF_MAC_ADDR_SIZE); pSmeMaxAssocInd->mesgType = eWNI_SME_MAX_ASSOC_EXCEEDED; @@ -2378,9 +2364,6 @@ lim_send_sme_ap_channel_switch_resp(tpAniSirGlobal pMac, return; } - qdf_mem_set((void *)pSmeSwithChnlParams, - sizeof(tSwitchChannelParams), 0); - qdf_mem_copy(pSmeSwithChnlParams, pChnlParams, sizeof(tSwitchChannelParams)); @@ -2501,7 +2484,6 @@ lim_process_beacon_tx_success_ind(tpAniSirGlobal pMac, uint16_t msgType, void *e return; } - qdf_mem_set((void *)pChanSwTxResponse, length, 0); pChanSwTxResponse->sessionId = psessionEntry->smeSessionId; pChanSwTxResponse->chanSwIeTxStatus = @@ -2526,8 +2508,6 @@ lim_process_beacon_tx_success_ind(tpAniSirGlobal pMac, uint16_t msgType, void *e ("AllocateMemory failed for beacon_tx_comp_rsp_ptr")); return; } - qdf_mem_set((void *)beacon_tx_comp_rsp_ptr, - sizeof(*beacon_tx_comp_rsp_ptr), 0); beacon_tx_comp_rsp_ptr->session_id = psessionEntry->smeSessionId; beacon_tx_comp_rsp_ptr->tx_status = QDF_STATUS_SUCCESS; diff --git a/core/mac/src/pe/lim/lim_session.c b/core/mac/src/pe/lim/lim_session.c index 7498c075a6dd..1bd3a4025af7 100644 --- a/core/mac/src/pe/lim/lim_session.c +++ b/core/mac/src/pe/lim/lim_session.c @@ -314,9 +314,6 @@ pe_create_session(tpAniSirGlobal pMac, uint8_t *bssid, uint8_t *sessionId, session_ptr->dph.dphHashTable.pDphNodeArray = NULL; return NULL; } - qdf_mem_set(session_ptr->gpLimPeerIdxpool, - sizeof(*session_ptr->gpLimPeerIdxpool) * (numSta + 1), - 0); session_ptr->freePeerIdxHead = 0; session_ptr->freePeerIdxTail = 0; session_ptr->gLimNumOfCurrentSTAs = 0; diff --git a/core/mac/src/pe/lim/lim_timer_utils.c b/core/mac/src/pe/lim/lim_timer_utils.c index bf4ad5968be6..cb244dd65d96 100644 --- a/core/mac/src/pe/lim/lim_timer_utils.c +++ b/core/mac/src/pe/lim/lim_timer_utils.c @@ -310,8 +310,6 @@ uint32_t lim_create_timers(tpAniSirGlobal pMac) lim_log(pMac, LOGP, FL("AllocateMemory failed!")); goto err_timer; } - qdf_mem_zero(pMac->lim.gLimPreAuthTimerTable.pTable, - cfgValue * sizeof(tLimPreAuthNode *)); for (i = 0; i < cfgValue; i++) { pMac->lim.gLimPreAuthTimerTable.pTable[i] = diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index f76cf455e1fc..0518ae8fe92d 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/core/mac/src/pe/lim/lim_utils.c @@ -4961,8 +4961,6 @@ void lim_process_del_ts_ind(tpAniSirGlobal pMac, tpSirMsgQ limMsg) goto error1; } - qdf_mem_set((uint8_t *) pDelTsReq, sizeof(tSirDeltsReq), 0); - if (pSta->wmeEnabled) qdf_mem_copy(&(pDelTsReq->req.tspec), &(pTspecInfo->tspec), sizeof(tSirMacTspecIE)); @@ -4993,7 +4991,6 @@ void lim_process_del_ts_ind(tpAniSirGlobal pMac, tpSirMsgQ limMsg) PELOGE(lim_log(pMac, LOGE, FL("AllocateMemory() failed"));) goto error3; } - qdf_mem_set((uint8_t *) pDelTsReqInfo, sizeof(tSirDeltsReqInfo), 0); if (pSta->wmeEnabled) qdf_mem_copy(&(pDelTsReqInfo->tspec), &(pTspecInfo->tspec), @@ -5248,7 +5245,6 @@ void lim_frame_transmission_control(tpAniSirGlobal pMac, tLimQuietTxMode type, return; } - qdf_mem_set((void *)pTxCtrlMsg, (sizeof(*pTxCtrlMsg) + nBytes), 0); status = __lim_fill_tx_control_params(pMac, pTxCtrlMsg, type, mode); if (status != QDF_STATUS_SUCCESS) { qdf_mem_free(pTxCtrlMsg); diff --git a/core/mac/src/pe/nan/nan_datapath.c b/core/mac/src/pe/nan/nan_datapath.c index 3bed714cdf2c..62ec69af98ec 100644 --- a/core/mac/src/pe/nan/nan_datapath.c +++ b/core/mac/src/pe/nan/nan_datapath.c @@ -286,7 +286,6 @@ static void lim_ndp_delete_peers(tpAniSirGlobal mac_ctx, return; } - qdf_mem_zero(deleted_peers, num_peers * sizeof(*deleted_peers)); for (i = 0; i < num_peers; i++) { lim_log(mac_ctx, LOG1, FL("ndp_map[%d]: MAC: " MAC_ADDRESS_STR " num_active %d"), diff --git a/core/mac/src/pe/rrm/rrm_api.c b/core/mac/src/pe/rrm/rrm_api.c index 51a2712141e9..c1a282e78946 100644 --- a/core/mac/src/pe/rrm/rrm_api.c +++ b/core/mac/src/pe/rrm/rrm_api.c @@ -386,7 +386,6 @@ rrm_process_neighbor_report_response(tpAniSirGlobal pMac, return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set(pSmeNeighborRpt, length, 0); /* Allocated memory for pSmeNeighborRpt...will be freed by other module */ @@ -641,8 +640,6 @@ rrm_process_beacon_report_req(tpAniSirGlobal pMac, } - qdf_mem_set(pSmeBcnReportReq, sizeof(tSirBeaconReportReqInd), 0); - /* Allocated memory for pSmeBcnReportReq....will be freed by other modulea */ qdf_mem_copy(pSmeBcnReportReq->bssId, pSessionEntry->bssId, sizeof(tSirMacAddr)); @@ -838,9 +835,6 @@ rrm_process_beacon_report_xmit(tpAniSirGlobal mac_ctx, return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_zero(report, beacon_xmit_ind->numBssDesc * - sizeof(*report)); - for (bss_desc_count = 0; bss_desc_count < beacon_xmit_ind->numBssDesc; bss_desc_count++) { beacon_report = @@ -956,7 +950,6 @@ static void rrm_process_beacon_request_failure(tpAniSirGlobal pMac, ("Unable to allocate memory during RRM Req processing")); return; } - qdf_mem_set(pReport, sizeof(tSirMacRadioMeasureReport), 0); pReport->token = pCurrentReq->token; pReport->type = SIR_MAC_RRM_BEACON_TYPE; @@ -1023,8 +1016,6 @@ tSirRetStatus rrm_process_beacon_req(tpAniSirGlobal mac_ctx, tSirMacAddr peer, FL("Unable to allocate memory during RRM Req processing")); return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set(report, sizeof(*report) * - (rrm_req->num_MeasurementRequest - index), 0); lim_log(mac_ctx, LOG3, FL("rrm beacon type refused of %d report in beacon table"), *num_report); @@ -1044,7 +1035,6 @@ tSirRetStatus rrm_process_beacon_req(tpAniSirGlobal mac_ctx, tSirMacAddr peer, return eSIR_MEM_ALLOC_FAILED; } lim_log(mac_ctx, LOG3, FL(" Processing Beacon Report request")); - qdf_mem_set(curr_req, sizeof(*curr_req), 0); curr_req->dialog_token = rrm_req->DialogToken.token; curr_req->token = rrm_req-> MeasurementRequest[index].measurement_token; @@ -1090,8 +1080,6 @@ tSirRetStatus update_rrm_report(tpAniSirGlobal mac_ctx, lim_log(mac_ctx, LOGP, FL("Unable to allocate memory during RRM Req processing")); return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set(report, sizeof(*report) * - (rrm_req->num_MeasurementRequest - index), 0); lim_log(mac_ctx, LOG3, FL("rrm beacon type incapable of %d report "), *num_report); } @@ -1134,7 +1122,6 @@ rrm_process_radio_measurement_request(tpAniSirGlobal mac_ctx, lim_log(mac_ctx, LOGP, FL("Unable to allocate memory during RRM Req processing")); return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set(report, sizeof(tSirMacRadioMeasureReport), 0); lim_log(mac_ctx, LOGE, FL("No requestIes in the measurement request, sending incapable report")); report->incapable = 1; num_report = 1; @@ -1157,7 +1144,6 @@ rrm_process_radio_measurement_request(tpAniSirGlobal mac_ctx, lim_log(mac_ctx, LOGP, FL("Unable to allocate memory during RRM Req processing")); return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set(report, sizeof(tSirMacRadioMeasureReport), 0); lim_log(mac_ctx, LOGE, FL("Allocated memory for report")); report->incapable = 1; report->type = rrm_req->MeasurementRequest[0].measurement_type; diff --git a/core/mac/src/pe/sch/sch_api.c b/core/mac/src/pe/sch/sch_api.c index 2eb27f8e73ec..1debe34dfa74 100644 --- a/core/mac/src/pe/sch/sch_api.c +++ b/core/mac/src/pe/sch/sch_api.c @@ -597,7 +597,6 @@ int sch_gen_timing_advert_frame(tpAniSirGlobal mac_ctx, tSirMacAddr self_addr, sch_log(mac_ctx, LOGE, FL("Cannot allocate memory")); return eSIR_FAILURE; } - qdf_mem_zero(*buf, buf_size); payload_size = 0; status = dot11f_pack_timing_advertisement_frame(mac_ctx, &frame, diff --git a/core/mac/src/pe/sch/sch_beacon_gen.c b/core/mac/src/pe/sch/sch_beacon_gen.c index 082834e5e71d..22c5738be6b4 100644 --- a/core/mac/src/pe/sch/sch_beacon_gen.c +++ b/core/mac/src/pe/sch/sch_beacon_gen.c @@ -219,9 +219,6 @@ sch_set_fixed_beacon_fields(tpAniSirGlobal mac_ctx, tpPESession session) mac->fc.fromDS = 0; mac->fc.toDS = 0; - /* Now set the beacon body */ - qdf_mem_set((uint8_t *) bcn_1, sizeof(tDot11fBeacon1), 0); - /* Skip over the timestamp (it'll be updated later). */ bcn_1->BeaconInterval.interval = session->beaconParams.beaconInterval; @@ -279,8 +276,6 @@ sch_set_fixed_beacon_fields(tpAniSirGlobal mac_ctx, tpPESession session) FL("Warnings while packing a tDot11fBeacon1(0x%08x.)."), n_status); } - /*changed to correct beacon corruption */ - qdf_mem_set((uint8_t *) bcn_2, sizeof(tDot11fBeacon2), 0); session->schBeaconOffsetBegin = offset + (uint16_t) n_bytes; sch_log(mac_ctx, LOG1, FL("Initialized beacon begin, offset %d"), offset); diff --git a/core/mac/src/sys/legacy/src/system/src/mac_init_api.c b/core/mac/src/sys/legacy/src/system/src/mac_init_api.c index 5e86c7e1f02e..8c0c432dae7e 100644 --- a/core/mac/src/sys/legacy/src/system/src/mac_init_api.c +++ b/core/mac/src/sys/legacy/src/system/src/mac_init_api.c @@ -124,9 +124,6 @@ tSirRetStatus mac_open(tHalHandle *pHalHandle, tHddHandle hHdd, if (NULL == p_mac) return eSIR_MEM_ALLOC_FAILED; - /* Initialize the p_mac structure */ - qdf_mem_set(p_mac, sizeof(tAniSirGlobal), 0); - /* * Set various global fields of p_mac here * (Could be platform dependant as some variables in p_mac are platform diff --git a/core/mac/src/sys/legacy/src/utils/src/parser_api.c b/core/mac/src/sys/legacy/src/utils/src/parser_api.c index eea1199143ba..3a2751528b0f 100644 --- a/core/mac/src/sys/legacy/src/utils/src/parser_api.c +++ b/core/mac/src/sys/legacy/src/utils/src/parser_api.c @@ -2327,8 +2327,6 @@ tSirRetStatus sir_convert_probe_frame2_struct(tpAniSirGlobal pMac, return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set((uint8_t *) pr, sizeof(tDot11fProbeResponse), 0); - /* delegate to the framesc-generated code, */ status = dot11f_unpack_probe_response(pMac, pFrame, nFrame, pr); if (DOT11F_FAILED(status)) { @@ -2624,7 +2622,6 @@ sir_convert_assoc_req_frame2_struct(tpAniSirGlobal pMac, } /* Zero-init our [out] parameter, */ qdf_mem_set((uint8_t *) pAssocReq, sizeof(tSirAssocReq), 0); - qdf_mem_set((uint8_t *) ar, sizeof(tDot11fAssocRequest), 0); /* delegate to the framesc-generated code, */ status = dot11f_unpack_assoc_request(pMac, pFrame, nFrame, ar); @@ -3829,8 +3826,6 @@ sir_convert_beacon_frame2_struct(tpAniSirGlobal pMac, return eSIR_MEM_ALLOC_FAILED; } - qdf_mem_set((uint8_t *) pBeacon, sizeof(tDot11fBeacon), 0); - /* get the MAC address out of the BD, */ qdf_mem_copy(pBeaconStruct->bssid, pHdr->sa, 6); From 5cc4af4405f603bfdfc31821c61f654d1e940b3c Mon Sep 17 00:00:00 2001 From: "Selvaraj, Sridhar" Date: Wed, 19 Oct 2016 10:41:59 +0530 Subject: [PATCH 017/119] qcacld-3.0: Avoid buffer overflow qcacld-2.0 to qcacld-3.0 propagation. scnprintf returns the number of characters which are actually written in the buffer. Currently there is no check, while filling buffer. Hence, a situation might arise where the len is greater than the sizeof of buffer. Later, this buffer is copied to user space through api copy_to_user and since the len is greater than buffer size, buffer over-flow would occur. As a part of fix, make sure that buffer over write doesn't occur. Change-Id: I652979cb26fd7fff36ee54f9ec60132453ac7913 CRs-Fixed: 908252 --- core/hdd/src/wlan_hdd_ioctl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c index 21be7321f4c9..086a2e68d238 100644 --- a/core/hdd/src/wlan_hdd_ioctl.c +++ b/core/hdd/src/wlan_hdd_ioctl.c @@ -3528,7 +3528,7 @@ static int drv_cmd_get_roam_scan_channels(hdd_adapter_t *adapter, */ len = scnprintf(extra, sizeof(extra), "%s %d", command, numChannels); - for (j = 0; (j < numChannels); j++) + for (j = 0; (j < numChannels) && len <= sizeof(extra); j++) len += scnprintf(extra + len, sizeof(extra) - len, " %d", ChannelList[j]); From 2cad651a1b20984f83d021a5364300a3105427b7 Mon Sep 17 00:00:00 2001 From: "Selvaraj, Sridhar" Date: Wed, 19 Oct 2016 16:08:39 +0530 Subject: [PATCH 018/119] qcacld-3.0: Remove redundant mem zero after malloc in DP/UTILS/CDS/WMA Remove redundant qdf_mem_zero after qdf_mem_malloc since output of qdf_mem_malloc already gives zeroed memory[i.e. kzalloc]. Change-Id: I385afd98a134c2d79189090ce4c84c4b3adcc94e CRs-Fixed: 1079691 --- core/cds/src/cds_api.c | 3 --- core/cds/src/cds_sched.c | 1 - core/cds/src/cds_utils.c | 2 -- core/dp/htt/htt.c | 1 - core/dp/htt/htt_tx.c | 6 ------ core/dp/txrx/ol_rx_reorder.c | 1 - core/dp/txrx/ol_tx_sched.c | 2 -- core/dp/txrx/ol_txrx.c | 2 -- core/dp/txrx/ol_txrx_peer_find.c | 9 --------- core/utils/epping/src/epping_helper.c | 3 --- core/utils/host_diag_log/src/host_diag_log.c | 2 -- core/utils/host_diag_log/src/i_host_diag_core_log.h | 1 - core/utils/pktlog/linux_ac.c | 1 - core/wma/src/wma_data.c | 1 - core/wma/src/wma_dev_if.c | 3 --- core/wma/src/wma_features.c | 1 - 16 files changed, 39 deletions(-) diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index 0914b0620f1b..7de4ad52b976 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -1130,9 +1130,6 @@ QDF_STATUS cds_alloc_context(void *p_cds_context, QDF_MODULE_ID moduleID, return QDF_STATUS_E_NOMEM; } - if (moduleID == QDF_MODULE_ID_TLSHIM) - qdf_mem_zero(*ppModuleContext, size); - *pGpModContext = *ppModuleContext; return QDF_STATUS_SUCCESS; diff --git a/core/cds/src/cds_sched.c b/core/cds/src/cds_sched.c index 46b76761bb94..bc5827993843 100644 --- a/core/cds/src/cds_sched.c +++ b/core/cds/src/cds_sched.c @@ -880,7 +880,6 @@ static QDF_STATUS cds_alloc_ol_rx_pkt_freeq(p_cds_sched_context pSchedContext) __func__); goto free; } - memset(pkt, 0, sizeof(*pkt)); spin_lock_bh(&pSchedContext->cds_ol_rx_pkt_freeq_lock); list_add_tail(&pkt->list, &pSchedContext->cds_ol_rx_pkt_freeq); spin_unlock_bh(&pSchedContext->cds_ol_rx_pkt_freeq_lock); diff --git a/core/cds/src/cds_utils.c b/core/cds/src/cds_utils.c index 5ae79e495d9e..da331dd8d7ca 100644 --- a/core/cds/src/cds_utils.c +++ b/core/cds/src/cds_utils.c @@ -426,7 +426,6 @@ cds_attach_mmie(uint8_t *igtk, uint8_t *ipn, uint16_t key_id, * Copy the AAD, Management frame body, and * MMIE with 8 bit MIC zeroed out */ - qdf_mem_zero(input, nBytes); qdf_mem_copy(input, aad, AAD_LEN); /* Copy Management Frame Body and MMIE without MIC */ qdf_mem_copy(input + AAD_LEN, @@ -533,7 +532,6 @@ cds_is_mmie_valid(uint8_t *igtk, uint8_t *ipn, uint8_t *frm, uint8_t *efrm) } /* Copy the AAD, MMIE with 8 bit MIC zeroed out */ - qdf_mem_zero(input, nBytes); qdf_mem_copy(input, aad, AAD_LEN); qdf_mem_copy(input + AAD_LEN, (uint8_t *) (wh + 1), nBytes - AAD_LEN - CMAC_TLEN); diff --git a/core/dp/htt/htt.c b/core/dp/htt/htt.c index 987eeecc7d38..80fb269b7dbb 100644 --- a/core/dp/htt/htt.c +++ b/core/dp/htt/htt.c @@ -294,7 +294,6 @@ htt_pdev_alloc(ol_txrx_pdev_handle txrx_pdev, pdev->txrx_pdev = txrx_pdev; pdev->htc_pdev = htc_pdev; - qdf_mem_set(&pdev->stats, sizeof(pdev->stats), 0); pdev->htt_htc_pkt_freelist = NULL; #ifdef ATH_11AC_TXCOMPACT pdev->htt_htc_pkt_misclist = NULL; diff --git a/core/dp/htt/htt_tx.c b/core/dp/htt/htt_tx.c index a3246eeaa3f5..b647ceca6d1f 100644 --- a/core/dp/htt/htt_tx.c +++ b/core/dp/htt/htt_tx.c @@ -1240,9 +1240,6 @@ int htt_tx_ipa_uc_attach(struct htt_pdev_t *pdev, return_code = -ENOBUFS; goto free_tx_comp_base; } - qdf_mem_zero(pdev->ipa_uc_tx_rsc.tx_buf_pool_vaddr_strg, - uc_tx_buf_cnt * - sizeof(*pdev->ipa_uc_tx_rsc.tx_buf_pool_vaddr_strg)); pdev->ipa_uc_tx_rsc.paddr_strg = qdf_mem_malloc(uc_tx_buf_cnt * @@ -1252,9 +1249,6 @@ int htt_tx_ipa_uc_attach(struct htt_pdev_t *pdev, return_code = -ENOBUFS; goto free_tx_comp_base; } - qdf_mem_zero(pdev->ipa_uc_tx_rsc.paddr_strg, - uc_tx_buf_cnt * - sizeof(*pdev->ipa_uc_tx_rsc.paddr_strg)); pdev->ipa_uc_tx_rsc.alloc_tx_buf_cnt = htt_tx_ipa_uc_wdi_tx_buf_alloc( pdev, uc_tx_buf_sz, uc_tx_buf_cnt, uc_tx_partition_base); diff --git a/core/dp/txrx/ol_rx_reorder.c b/core/dp/txrx/ol_rx_reorder.c index 2572ccdc34d0..5116cf0c0a6f 100644 --- a/core/dp/txrx/ol_rx_reorder.c +++ b/core/dp/txrx/ol_rx_reorder.c @@ -492,7 +492,6 @@ ol_rx_addba_handler(ol_txrx_pdev_handle pdev, round_pwr2_win_sz * sizeof(struct ol_rx_reorder_array_elem_t); rx_reorder->array = qdf_mem_malloc(array_size); TXRX_ASSERT1(rx_reorder->array); - qdf_mem_set(rx_reorder->array, array_size, 0x0); rx_reorder->win_sz_mask = round_pwr2_win_sz - 1; rx_reorder->num_mpdus = 0; diff --git a/core/dp/txrx/ol_tx_sched.c b/core/dp/txrx/ol_tx_sched.c index bafd83c661eb..b14966d8abef 100644 --- a/core/dp/txrx/ol_tx_sched.c +++ b/core/dp/txrx/ol_tx_sched.c @@ -991,8 +991,6 @@ ol_tx_sched_init_wrr_adv( if (scheduler == NULL) return scheduler; - qdf_mem_zero(scheduler, sizeof(*scheduler)); - OL_TX_SCHED_WRR_ADV_CAT_CFG_STORE(VO, scheduler); OL_TX_SCHED_WRR_ADV_CAT_CFG_STORE(VI, scheduler); OL_TX_SCHED_WRR_ADV_CAT_CFG_STORE(BE, scheduler); diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c index 5ea86231b7e9..f08e60c0e87e 100644 --- a/core/dp/txrx/ol_txrx.c +++ b/core/dp/txrx/ol_txrx.c @@ -975,7 +975,6 @@ ol_txrx_pdev_attach(ol_pdev_handle ctrl_pdev, pdev = qdf_mem_malloc(sizeof(*pdev)); if (!pdev) goto fail0; - qdf_mem_zero(pdev, sizeof(*pdev)); /* init LL/HL cfg here */ pdev->cfg.is_high_latency = ol_cfg_is_high_latency(ctrl_pdev); @@ -2134,7 +2133,6 @@ ol_txrx_peer_attach(ol_txrx_vdev_handle vdev, uint8_t *peer_mac_addr) peer = qdf_mem_malloc(sizeof(*peer)); if (!peer) return NULL; /* failure */ - qdf_mem_zero(peer, sizeof(*peer)); /* store provided params */ peer->vdev = vdev; diff --git a/core/dp/txrx/ol_txrx_peer_find.c b/core/dp/txrx/ol_txrx_peer_find.c index f43670155242..12638b04c858 100644 --- a/core/dp/txrx/ol_txrx_peer_find.c +++ b/core/dp/txrx/ol_txrx_peer_find.c @@ -310,15 +310,6 @@ static int ol_txrx_peer_find_map_attach(struct ol_txrx_pdev_t *pdev) if (!pdev->peer_id_to_obj_map) return 1; /* failure */ - /* - * The peer_id_to_obj_map doesn't really need to be initialized, - * since elements are only used after they have been individually - * initialized. - * However, it is convenient for debugging to have all elements - * that are not in use set to 0. - */ - qdf_mem_set(pdev->peer_id_to_obj_map, peer_map_size, 0); - return 0; /* success */ } diff --git a/core/utils/epping/src/epping_helper.c b/core/utils/epping/src/epping_helper.c index 43575ea132a1..4e6b6257b126 100644 --- a/core/utils/epping/src/epping_helper.c +++ b/core/utils/epping/src/epping_helper.c @@ -68,9 +68,6 @@ int epping_cookie_init(epping_context_t *pEpping_ctx) i); goto error; } - qdf_mem_zero(pEpping_ctx->s_cookie_mem[i], - sizeof(struct epping_cookie) * - MAX_COOKIE_SLOT_SIZE); } qdf_spinlock_create(&pEpping_ctx->cookie_lock); diff --git a/core/utils/host_diag_log/src/host_diag_log.c b/core/utils/host_diag_log/src/host_diag_log.c index 2fd1b3566fc9..2e90f40a1dce 100644 --- a/core/utils/host_diag_log/src/host_diag_log.c +++ b/core/utils/host_diag_log/src/host_diag_log.c @@ -140,8 +140,6 @@ void host_diag_log_submit(void *plog_hdr_ptr) return; } - qdf_mem_zero((void *)pBuf, total_len); - wmsg = (tAniHdr *) pBuf; wmsg->type = PTT_MSG_DIAG_CMDS_TYPE; wmsg->length = total_len; diff --git a/core/utils/host_diag_log/src/i_host_diag_core_log.h b/core/utils/host_diag_log/src/i_host_diag_core_log.h index 829ae193034e..9417837b8a34 100644 --- a/core/utils/host_diag_log/src/i_host_diag_core_log.h +++ b/core/utils/host_diag_log/src/i_host_diag_core_log.h @@ -85,7 +85,6 @@ void host_diag_log_submit(void *plog_hdr_ptr); do { \ payload_ptr = (payload_type *)qdf_mem_malloc(sizeof(payload_type)); \ if (payload_ptr) { \ - qdf_mem_zero(payload_ptr, sizeof(payload_type)); \ host_diag_log_set_code(payload_ptr, log_code); \ host_diag_log_set_length(payload_ptr, sizeof(payload_type)); \ } \ diff --git a/core/utils/pktlog/linux_ac.c b/core/utils/pktlog/linux_ac.c index f885d6672038..85d95568257f 100644 --- a/core/utils/pktlog/linux_ac.c +++ b/core/utils/pktlog/linux_ac.c @@ -603,7 +603,6 @@ int pktlog_send_per_pkt_stats_to_user(void) return -ENOMEM; } - qdf_mem_zero(pktlog, VOS_LOG_PKT_LOG_SIZE); host_diag_log_set_code(pktlog, LOG_WLAN_PKT_LOG_INFO_C); pktlog->buf_len = 0; diff --git a/core/wma/src/wma_data.c b/core/wma/src/wma_data.c index abdf3633bef8..e0c76e7dfa9a 100644 --- a/core/wma/src/wma_data.c +++ b/core/wma/src/wma_data.c @@ -2974,7 +2974,6 @@ void ol_rx_err(ol_pdev_handle pdev, uint8_t vdev_id, __func__); return; } - qdf_mem_set((void *)mic_err_ind, sizeof(*mic_err_ind), 0); mic_err_ind->messageType = eWNI_SME_MIC_FAILURE_IND; mic_err_ind->length = sizeof(*mic_err_ind); diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 49a7a0993cfa..57f3ff49241c 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -696,7 +696,6 @@ static void wma_vdev_start_rsp(tp_wma_handle wma, add_bss->status = QDF_STATUS_E_NOMEM; goto send_fail_resp; } - qdf_mem_zero(bcn, sizeof(*bcn)); bcn->buf = qdf_nbuf_alloc(NULL, WMA_BCN_BUF_MAX_SIZE, 0, sizeof(uint32_t), 0); if (!bcn->buf) { @@ -3641,7 +3640,6 @@ static void wma_add_tdls_sta(tp_wma_handle wma, tpAddStaParams add_sta) goto send_rsp; } - qdf_mem_zero(peerStateParams, sizeof(*peerStateParams)); peerStateParams->peerState = WMI_TDLS_PEER_STATE_PEERING; peerStateParams->vdevId = add_sta->smesessionId; qdf_mem_copy(&peerStateParams->peerMacAddr, @@ -4050,7 +4048,6 @@ static void wma_del_tdls_sta(tp_wma_handle wma, tpDeleteStaParams del_sta) goto send_del_rsp; } - qdf_mem_zero(peerStateParams, sizeof(*peerStateParams)); peerStateParams->peerState = WMA_TDLS_PEER_STATE_TEARDOWN; peerStateParams->vdevId = del_sta->smesessionId; qdf_mem_copy(&peerStateParams->peerMacAddr, diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index 05777be24c10..eb6338d92fdb 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -175,7 +175,6 @@ QDF_STATUS wma_send_snr_request(tp_wma_handle wma_handle, wma_handle->pGetRssiReq = NULL; return QDF_STATUS_E_NOMEM; } - qdf_mem_set(pRssiBkUp, sizeof(tAniGetRssiReq), 0); pRssiBkUp->sessionId = ((tAniGetRssiReq *) pGetRssiReq)->sessionId; pRssiBkUp->rssiCallback = From 6ada9ffd8c8659003f16f56c1e431317ac288d6a Mon Sep 17 00:00:00 2001 From: "Selvaraj, Sridhar" Date: Wed, 19 Oct 2016 16:03:25 +0530 Subject: [PATCH 019/119] qcacld-3.0: Remove redundant mem zero after malloc in SME Remove redundant qdf_mem_zero after qdf_mem_malloc since output of qdf_mem_malloc already gives zeroed memory[i.e. kzalloc]. Change-Id: I15e16bbe8caa8c03ffd1fefdabd415619393e117 CRs-Fixed: 1079684 --- core/sap/src/sap_ch_select.c | 3 -- core/sme/src/common/sme_api.c | 26 ------------- core/sme/src/common/sme_ft_api.c | 1 - core/sme/src/common/sme_power_save.c | 3 -- core/sme/src/csr/csr_api_roam.c | 56 ---------------------------- core/sme/src/csr/csr_api_scan.c | 27 -------------- core/sme/src/csr/csr_neighbor_roam.c | 9 ----- core/sme/src/csr/csr_roam_preauth.c | 1 - core/sme/src/csr/csr_util.c | 2 - core/sme/src/nan/nan_api.c | 2 - core/sme/src/nan/nan_datapath_api.c | 2 - core/sme/src/p2p/p2p_api.c | 3 -- core/sme/src/qos/sme_qos.c | 4 -- core/sme/src/rrm/sme_rrm.c | 11 ------ 14 files changed, 150 deletions(-) diff --git a/core/sap/src/sap_ch_select.c b/core/sap/src/sap_ch_select.c index fcf1b578b3b8..6ba0531ed621 100644 --- a/core/sap/src/sap_ch_select.c +++ b/core/sap/src/sap_ch_select.c @@ -574,9 +574,6 @@ static bool sap_chan_sel_init(tHalHandle halHandle, return eSAP_FALSE; } - qdf_mem_zero(pSpectCh, - (pSpectInfoParams->numSpectChans) * sizeof(*pSpectCh)); - /* Initialize the pointers in the DfsParams to the allocated memory */ pSpectInfoParams->pSpectCh = pSpectCh; diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index c5eef8a2f5a7..877fa62cf63e 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -352,7 +352,6 @@ static QDF_STATUS init_sme_cmd_list(tpAniSirGlobal pMac) } status = QDF_STATUS_SUCCESS; - qdf_mem_set(pMac->sme.pSmeCmdBufAddr, sme_cmd_ptr_ary_sz, 0); for (cmd_idx = 0; cmd_idx < pMac->sme.totalSmeCmd; cmd_idx++) { /* * Since total size of all commands together can be huge chunk @@ -2249,7 +2248,6 @@ QDF_STATUS sme_set_ese_beacon_request(tHalHandle hHal, const uint8_t sessionId, pSmeRrmContext->eseBcnReqInProgress = true; sms_log(pMac, LOGE, "Sending Beacon Report Req to SME"); - qdf_mem_zero(pSmeBcnReportReq, sizeof(tSirBeaconReportReqInd)); pSmeBcnReportReq->messageType = eWNI_SME_BEACON_REPORT_REQ_IND; pSmeBcnReportReq->length = sizeof(tSirBeaconReportReqInd); @@ -3507,7 +3505,6 @@ QDF_STATUS sme_get_ap_channel_from_scan_cache(tHalHandle hal_handle, FL("scan_filter mem alloc failed")); return QDF_STATUS_E_FAILURE; } else { - qdf_mem_set(scan_filter, sizeof(tCsrScanResultFilter), 0); qdf_mem_set(&first_ap_profile, sizeof(tSirBssDescription), 0); if (NULL == profile) { @@ -6662,7 +6659,6 @@ QDF_STATUS sme_register_p2p_ack_ind_callback(tHalHandle hal, sme_release_global_lock(&mac_ctx->sme); return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(msg, sizeof(*msg)); msg->message_type = eWNI_SME_REGISTER_P2P_ACK_CB; msg->length = sizeof(*msg); @@ -6704,7 +6700,6 @@ QDF_STATUS sme_register_mgmt_frame_ind_callback(tHalHandle hal, sme_release_global_lock(&mac_ctx->sme); return QDF_STATUS_E_NOMEM; } - qdf_mem_set(msg, sizeof(*msg), 0); msg->message_type = eWNI_SME_REGISTER_MGMT_FRAME_CB; msg->length = sizeof(*msg); @@ -6762,7 +6757,6 @@ QDF_STATUS sme_register_mgmt_frame(tHalHandle hHal, uint8_t sessionId, if (NULL == pMsg) status = QDF_STATUS_E_NOMEM; else { - qdf_mem_set(pMsg, len, 0); pMsg->messageType = eWNI_SME_REGISTER_MGMT_FRAME_REQ; pMsg->length = len; pMsg->sessionId = sessionId; @@ -6824,7 +6818,6 @@ QDF_STATUS sme_deregister_mgmt_frame(tHalHandle hHal, uint8_t sessionId, if (NULL == pMsg) status = QDF_STATUS_E_NOMEM; else { - qdf_mem_set(pMsg, len, 0); pMsg->messageType = eWNI_SME_REGISTER_MGMT_FRAME_REQ; pMsg->length = len; pMsg->registerFrame = false; @@ -10407,7 +10400,6 @@ QDF_STATUS sme_update_tdls_peer_state(tHalHandle hHal, return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(pTdlsPeerStateParams, sizeof(*pTdlsPeerStateParams)); qdf_mem_copy(&pTdlsPeerStateParams->peerMacAddr, &peerStateParams->peerMacAddr, sizeof(tSirMacAddr)); pTdlsPeerStateParams->vdevId = peerStateParams->vdevId; @@ -10551,7 +10543,6 @@ QDF_STATUS sme_send_tdls_chan_switch_req(tHalHandle hal, sme_release_global_lock(&mac->sme); return QDF_STATUS_E_FAILURE; } - qdf_mem_zero(chan_switch_params, sizeof(*chan_switch_params)); switch (ch_switch_params->tdls_off_ch_mode) { case ENABLE_CHANSWITCH: @@ -11623,7 +11614,6 @@ QDF_STATUS sme_dcc_clear_stats(tHalHandle hHal, uint32_t vdev_id, goto end; } - qdf_mem_zero(request, sizeof(*request)); request->vdev_id = vdev_id; request->dcc_stats_bitmap = dcc_stats_bitmap; @@ -12245,7 +12235,6 @@ QDF_STATUS sme_update_access_policy_vendor_ie(tHalHandle hal, return QDF_STATUS_E_FAILURE; } - qdf_mem_set(msg, msg_len, 0); msg->msg_type = (uint16_t)eWNI_SME_UPDATE_ACCESS_POLICY_VENDOR_IE; msg->length = (uint16_t)msg_len; @@ -12697,8 +12686,6 @@ QDF_STATUS sme_init_thermal_info(tHalHandle hHal, tSmeThermalParams thermalParam return QDF_STATUS_E_NOMEM; } - qdf_mem_zero((void *)pWmaParam, sizeof(t_thermal_mgmt)); - pWmaParam->thermalMgmtEnabled = thermalParam.smeThermalMgmtEnabled; pWmaParam->throttlePeriod = thermalParam.smeThrottlePeriod; @@ -12881,8 +12868,6 @@ QDF_STATUS sme_ap_disable_intra_bss_fwd(tHalHandle hHal, uint8_t sessionId, return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(pSapDisableIntraFwd, sizeof(tDisableIntraBssFwd)); - pSapDisableIntraFwd->sessionId = sessionId; pSapDisableIntraFwd->disableintrabssfwd = disablefwd; @@ -12967,8 +12952,6 @@ QDF_STATUS sme_stats_ext_request(uint8_t session_id, tpStatsExtRequestReq input) if (data == NULL) { return QDF_STATUS_E_NOMEM; } - - qdf_mem_zero(data, data_len); data->vdev_id = session_id; data->request_data_len = input->request_data_len; if (input->request_data_len) { @@ -13705,7 +13688,6 @@ QDF_STATUS sme_set_epno_list(tHalHandle hal, return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(req_msg, len); req_msg->num_networks = input->num_networks; req_msg->request_id = input->request_id; req_msg->session_id = input->session_id; @@ -13785,7 +13767,6 @@ QDF_STATUS sme_set_passpoint_list(tHalHandle hal, return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(req_msg, len); req_msg->num_networks = input->num_networks; req_msg->request_id = input->request_id; req_msg->session_id = input->session_id; @@ -13849,7 +13830,6 @@ QDF_STATUS sme_reset_passpoint_list(tHalHandle hal, return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(req_msg, sizeof(*req_msg)); req_msg->request_id = input->request_id; req_msg->session_id = input->session_id; @@ -14699,7 +14679,6 @@ QDF_STATUS sme_configure_modulated_dtim(tHalHandle h_hal, uint8_t session_id, if (QDF_STATUS_SUCCESS == status) { - qdf_mem_zero((void *)iwcmd, sizeof(*iwcmd)); iwcmd->param_value = modulated_dtim; iwcmd->param_vdev_id = session_id; iwcmd->param_id = GEN_PARAM_MODULATED_DTIM; @@ -14753,8 +14732,6 @@ QDF_STATUS sme_wifi_start_logger(tHalHandle hal, return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(req_msg, len); - req_msg->verbose_level = start_log.verbose_level; req_msg->is_iwpriv_command = start_log.is_iwpriv_command; req_msg->ring_id = start_log.ring_id; @@ -15262,8 +15239,6 @@ QDF_STATUS sme_pdev_set_pcl(tHalHandle hal, return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(req_msg, len); - for (i = 0; i < msg.pcl_len; i++) { req_msg->pcl_list[i] = msg.pcl_list[i]; req_msg->weight_list[i] = msg.weight_list[i]; @@ -16062,7 +16037,6 @@ void sme_send_disassoc_req_frame(tHalHandle hal, uint8_t session_id, if (!QDF_IS_STATUS_SUCCESS(qdf_status)) return; - qdf_mem_set(msg, sizeof(struct sme_send_disassoc_frm_req), 0); msg->msg_type = (uint16_t) eWNI_SME_SEND_DISASSOC_FRAME; msg->length = (uint16_t) sizeof(struct sme_send_disassoc_frm_req); diff --git a/core/sme/src/common/sme_ft_api.c b/core/sme/src/common/sme_ft_api.c index adbb1aa273c6..0ab104f00ea5 100644 --- a/core/sme/src/common/sme_ft_api.c +++ b/core/sme/src/common/sme_ft_api.c @@ -284,7 +284,6 @@ QDF_STATUS sme_ft_send_update_key_ind(tHalHandle hal, uint32_t session_id, if (NULL == msg) return QDF_STATUS_E_NOMEM; - qdf_mem_set(msg, msglen, 0); msg->messageType = eWNI_SME_FT_UPDATE_KEY; msg->length = msglen; diff --git a/core/sme/src/common/sme_power_save.c b/core/sme/src/common/sme_power_save.c index 48b298c653d6..915af516c2ea 100644 --- a/core/sme/src/common/sme_power_save.c +++ b/core/sme/src/common/sme_power_save.c @@ -313,7 +313,6 @@ static QDF_STATUS sme_ps_enter_wowl_req_params(tpAniSirGlobal mac_ctx, FL("Fail to allocate memory for Enter Wowl Request")); return QDF_STATUS_E_NOMEM; } - qdf_mem_set((uint8_t *) hal_wowl_params, sizeof(*hal_wowl_params), 0); /* fill in the message field */ hal_wowl_params->ucMagicPktEnable = sme_wowl_params->ucMagicPktEnable; @@ -421,8 +420,6 @@ static QDF_STATUS sme_ps_exit_wowl_req_params(tpAniSirGlobal mac_ctx, FL("Fail to allocate memory for WoWLAN Add Bcast Pattern ")); return QDF_STATUS_E_NOMEM; } - qdf_mem_set((uint8_t *) hal_wowl_msg, - sizeof(*hal_wowl_msg), 0); hal_wowl_msg->sessionId = session_id; if (QDF_STATUS_SUCCESS == sme_post_ps_msg_to_wma(WMA_WOWL_EXIT_REQ, diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 6c0f417ec805..784477f223cb 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -572,8 +572,6 @@ static void csr_roam_sort_channel_for_early_stop(tpAniSirGlobal mac_ctx, "Failed to allocate memory for tSirUpdateChanList"); return; } - qdf_mem_zero(chan_list_greedy, buf_size); - qdf_mem_zero(chan_list_non_greedy, buf_size); /* * fixed_greedy_chan_list is an evaluated channel list based on most of * the enterprise wifi deployments and the order of the channels @@ -693,7 +691,6 @@ QDF_STATUS csr_update_channel_list(tpAniSirGlobal pMac) "Failed to allocate memory for tSirUpdateChanList"); return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(pChanList, bufLen); for (i = 0; i < pScan->base_channels.numChannels; i++) { /* Scan is not performed on DSRC channels*/ @@ -3048,10 +3045,6 @@ static QDF_STATUS csr_init11d_info(tpAniSirGlobal pMac, tCsr11dinfo *ps11dinfo) qdf_mem_malloc(sizeof(tSirMacChanInfo) * WNI_CFG_VALID_CHANNEL_LIST_LEN); if (pChanInfo != NULL) { - qdf_mem_set(pChanInfo, - sizeof(tSirMacChanInfo) * - WNI_CFG_VALID_CHANNEL_LIST_LEN, 0); - pChanInfoStart = pChanInfo; for (index = 0; index < ps11dinfo->Channels.numChannels; index++) { @@ -3110,9 +3103,6 @@ QDF_STATUS csr_init_channel_power_list(tpAniSirGlobal pMac, tCsr11dinfo *ps11din qdf_mem_malloc(sizeof(tSirMacChanInfo) * WNI_CFG_VALID_CHANNEL_LIST_LEN); if (pChanInfo != NULL) { - qdf_mem_set(pChanInfo, - sizeof(tSirMacChanInfo) * - WNI_CFG_VALID_CHANNEL_LIST_LEN, 0); pChanInfoStart = pChanInfo; for (index = 0; index < ps11dinfo->Channels.numChannels; @@ -3681,7 +3671,6 @@ csr_send_mb_tkip_counter_measures_req_msg(tpAniSirGlobal pMac, status = QDF_STATUS_SUCCESS; if (!QDF_IS_STATUS_SUCCESS(status)) break; - qdf_mem_set(pMsg, sizeof(tSirSmeTkipCntrMeasReq), 0); pMsg->messageType = eWNI_SME_TKIP_CNTR_MEAS_REQ; pMsg->length = sizeof(tSirSmeTkipCntrMeasReq); pMsg->sessionId = sessionId; @@ -4805,7 +4794,6 @@ QDF_STATUS csr_roam_stop_network(tpAniSirGlobal pMac, uint32_t sessionId, if (NULL == pBssConfig) return QDF_STATUS_E_NOMEM; - qdf_mem_set(pBssConfig, sizeof(tBssConfigParam), 0); status = csr_roam_prepare_bss_config(pMac, pProfile, pBssDesc, pBssConfig, pIes); if (QDF_IS_STATUS_SUCCESS(status)) { @@ -5705,8 +5693,6 @@ QDF_STATUS csr_roam_process_command(tpAniSirGlobal pMac, tSmeCmd *pCommand) pSession->pCurRoamProfile = qdf_mem_malloc(sizeof(tCsrRoamProfile)); if (NULL != pSession->pCurRoamProfile) { - qdf_mem_set(pSession->pCurRoamProfile, - sizeof(tCsrRoamProfile), 0); csr_roam_copy_profile(pMac, pSession->pCurRoamProfile, &pCommand->u.roamCmd.roamProfile); @@ -5872,8 +5858,6 @@ static QDF_STATUS csr_roam_save_params(tpAniSirGlobal mac_ctx, if (NULL == session_ptr->pWpaRsnRspIE) return QDF_STATUS_E_NOMEM; - qdf_mem_set(session_ptr->pWpaRsnRspIE, - nIeLen + 2, 0); session_ptr->pWpaRsnRspIE[0] = DOT11F_EID_RSN; session_ptr->pWpaRsnRspIE[1] = (uint8_t) nIeLen; /* copy upto akm_suites */ @@ -7684,8 +7668,6 @@ QDF_STATUS csr_roam_connect(tpAniSirGlobal pMac, uint32_t sessionId, goto end; } - qdf_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), - 0); /* Try to connect to any BSS */ if (NULL == pProfile) { /* No encryption */ @@ -7921,7 +7903,6 @@ static QDF_STATUS csr_roam_join_last_profile(tpAniSirGlobal pMac, status = QDF_STATUS_E_NOMEM; goto end; } - qdf_mem_set(pProfile, sizeof(tCsrRoamProfile), 0); status = csr_roam_copy_profile(pMac, pProfile, pSession->pCurRoamProfile); if (!QDF_IS_STATUS_SUCCESS(status)) @@ -7931,7 +7912,6 @@ static QDF_STATUS csr_roam_join_last_profile(tpAniSirGlobal pMac, status = QDF_STATUS_E_NOMEM; goto end; } - qdf_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); status = csr_roam_prepare_filter_from_profile(pMac, pProfile, pScanFilter); if (!QDF_IS_STATUS_SUCCESS(status)) @@ -9200,7 +9180,6 @@ csr_check_profile_in_scan_cache(tpAniSirGlobal mac_ctx, sms_log(mac_ctx, LOGE, FL("alloc for ScanFilter failed.")); return false; } - qdf_mem_set(*scan_filter, sizeof(tCsrScanResultFilter), 0); (*scan_filter)->scan_filter_for_roam = 1; status = csr_roam_prepare_filter_from_profile(mac_ctx, &neighbor_roam_info->csrNeighborRoamProfile, @@ -9308,8 +9287,6 @@ void csr_roam_roaming_state_disassoc_rsp_processor(tpAniSirGlobal pMac, sme_qos_csr_event_ind(pMac, sessionId, SME_QOS_CSR_HANDOFF_ASSOC_REQ, NULL); - qdf_mem_set(pCurRoamProfile, sizeof(tCsrRoamProfile), - 0); csr_roam_copy_profile(pMac, pCurRoamProfile, pSession->pCurRoamProfile); /* make sure to put it at the head of the cmd queue */ @@ -10325,7 +10302,6 @@ static QDF_STATUS csr_send_reset_ap_caps_changed(tpAniSirGlobal pMac, status = QDF_STATUS_SUCCESS; if (QDF_IS_STATUS_SUCCESS(status)) { - qdf_mem_set(pMsg, sizeof(tSirResetAPCapsChange), 0); pMsg->messageType = eWNI_SME_RESET_AP_CAPS_CHANGED; pMsg->length = len; qdf_copy_macaddr(&pMsg->bssId, bssId); @@ -10453,7 +10429,6 @@ csr_roam_chk_lnk_disassoc_ind(tpAniSirGlobal mac_ctx, tSirSmeRsp *msg_ptr) * the WmStatusChange requests is pushed and processed */ pDisassocInd = (tSirSmeDisassocInd *) msg_ptr; - qdf_mem_set(&roam_info, sizeof(roam_info), 0); status = csr_roam_get_session_id_from_bssid(mac_ctx, &pDisassocInd->bssid, &sessionId); if (!QDF_IS_STATUS_SUCCESS(status)) { @@ -12372,7 +12347,6 @@ bool csr_is_same_profile(tpAniSirGlobal pMac, if (NULL == pScanFilter) return fCheck; - qdf_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); status = csr_roam_prepare_filter_from_profile(pMac, pProfile2, pScanFilter); if (!(QDF_IS_STATUS_SUCCESS(status))) @@ -13085,7 +13059,6 @@ static QDF_STATUS csr_roam_start_ibss(tpAniSirGlobal pMac, uint32_t sessionId, else status = QDF_STATUS_SUCCESS; if (QDF_IS_STATUS_SUCCESS(status)) { - qdf_mem_set(pBssConfig, sizeof(tBssConfigParam), 0); /* there is no Bss description before we start an IBSS so we need to adopt */ /* all Bss configuration parameters from the Profile. */ status = @@ -13519,7 +13492,6 @@ csr_roam_remove_connected_bss_from_scan_cache(tpAniSirGlobal pMac, if (NULL == pScanFilter) return QDF_STATUS_E_NOMEM; - qdf_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); pScanFilter->BSSIDs.bssid = qdf_mem_malloc(sizeof(struct qdf_mac_addr)); if (NULL == pScanFilter->BSSIDs.bssid) { qdf_mem_free(pScanFilter); @@ -13642,8 +13614,6 @@ static QDF_STATUS csr_roam_start_wds(tpAniSirGlobal pMac, uint32_t sessionId, pSession->pCurRoamProfile = qdf_mem_malloc(sizeof(tCsrRoamProfile)); if (pSession->pCurRoamProfile != NULL) { - qdf_mem_set(pSession->pCurRoamProfile, - sizeof(tCsrRoamProfile), 0); csr_roam_copy_profile(pMac, pSession->pCurRoamProfile, pProfile); @@ -13848,7 +13818,6 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, status = QDF_STATUS_SUCCESS; if (!QDF_IS_STATUS_SUCCESS(status)) break; - qdf_mem_set(csr_join_req, msgLen, 0); csr_join_req->messageType = messageType; csr_join_req->length = msgLen; csr_join_req->sessionId = (uint8_t) sessionId; @@ -14485,7 +14454,6 @@ QDF_STATUS csr_send_mb_disassoc_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, if (NULL == pMsg) return QDF_STATUS_E_NOMEM; - qdf_mem_set(pMsg, sizeof(tSirSmeDisassocReq), 0); pMsg->messageType = eWNI_SME_DISASSOC_REQ; pMsg->length = sizeof(tSirSmeDisassocReq); pMsg->sessionId = sessionId; @@ -14602,7 +14570,6 @@ QDF_STATUS csr_send_chng_mcc_beacon_interval(tpAniSirGlobal pMac, uint32_t sessi else status = QDF_STATUS_SUCCESS; if (QDF_IS_STATUS_SUCCESS(status)) { - qdf_mem_set(pMsg, sizeof(tSirChangeBIParams), 0); pMsg->messageType = eWNI_SME_CHNG_MCC_BEACON_INTERVAL; pMsg->length = len; @@ -14712,7 +14679,6 @@ QDF_STATUS csr_send_mb_disassoc_cnf_msg(tpAniSirGlobal pMac, status = QDF_STATUS_SUCCESS; if (!QDF_IS_STATUS_SUCCESS(status)) break; - qdf_mem_set(pMsg, sizeof(tSirSmeDisassocCnf), 0); pMsg->messageType = eWNI_SME_DISASSOC_CNF; pMsg->statusCode = eSIR_SME_SUCCESS; pMsg->length = sizeof(tSirSmeDisassocCnf); @@ -14749,7 +14715,6 @@ QDF_STATUS csr_send_mb_deauth_cnf_msg(tpAniSirGlobal pMac, status = QDF_STATUS_SUCCESS; if (!QDF_IS_STATUS_SUCCESS(status)) break; - qdf_mem_set(pMsg, sizeof(tSirSmeDeauthCnf), 0); pMsg->messageType = eWNI_SME_DEAUTH_CNF; pMsg->statusCode = eSIR_SME_SUCCESS; pMsg->length = sizeof(tSirSmeDeauthCnf); @@ -14784,7 +14749,6 @@ QDF_STATUS csr_send_assoc_cnf_msg(tpAniSirGlobal pMac, tpSirSmeAssocInd pAssocIn pMsg = qdf_mem_malloc(sizeof(tSirSmeAssocCnf)); if (NULL == pMsg) return QDF_STATUS_E_NOMEM; - qdf_mem_set(pMsg, sizeof(tSirSmeAssocCnf), 0); pMsg->messageType = eWNI_SME_ASSOC_CNF; pMsg->length = sizeof(tSirSmeAssocCnf); if (QDF_IS_STATUS_SUCCESS(Halstatus)) @@ -14824,7 +14788,6 @@ QDF_STATUS csr_send_assoc_ind_to_upper_layer_cnf_msg(tpAniSirGlobal pMac, pMsg = qdf_mem_malloc(sizeof(tSirSmeAssocIndToUpperLayerCnf)); if (NULL == pMsg) return QDF_STATUS_E_NOMEM; - qdf_mem_set(pMsg, sizeof(tSirSmeAssocIndToUpperLayerCnf), 0); pMsg->messageType = eWNI_SME_UPPER_LAYER_ASSOC_CNF; pMsg->length = sizeof(tSirSmeAssocIndToUpperLayerCnf); @@ -14920,7 +14883,6 @@ QDF_STATUS csr_send_mb_set_context_req_msg(tpAniSirGlobal pMac, pMsg = qdf_mem_malloc(msgLen); if (NULL == pMsg) return QDF_STATUS_E_NOMEM; - qdf_mem_set(pMsg, msgLen, 0); pMsg->messageType = eWNI_SME_SETCONTEXT_REQ; pMsg->length = msgLen; pMsg->sessionId = (uint8_t) sessionId; @@ -14986,7 +14948,6 @@ QDF_STATUS csr_send_mb_start_bss_req_msg(tpAniSirGlobal pMac, uint32_t sessionId if (NULL == pMsg) return QDF_STATUS_E_NOMEM; - qdf_mem_set(pMsg, sizeof(tSirSmeStartBssReq), 0); pMsg->messageType = eWNI_SME_START_BSS_REQ; pMsg->sessionId = sessionId; pMsg->length = sizeof(tSirSmeStartBssReq); @@ -15108,7 +15069,6 @@ QDF_STATUS csr_send_mb_stop_bss_req_msg(tpAniSirGlobal pMac, uint32_t sessionId) pMsg = qdf_mem_malloc(sizeof(tSirSmeStopBssReq)); if (NULL == pMsg) return QDF_STATUS_E_NOMEM; - qdf_mem_set(pMsg, sizeof(tSirSmeStopBssReq), 0); pMsg->messageType = eWNI_SME_STOP_BSS_REQ; pMsg->sessionId = sessionId; pMsg->length = sizeof(tSirSmeStopBssReq); @@ -15194,7 +15154,6 @@ QDF_STATUS csr_process_add_sta_session_rsp(tpAniSirGlobal pMac, uint8_t *pMsg) return QDF_STATUS_E_NOMEM; } - qdf_mem_set(msg, sizeof(*msg), 0); msg->msg_type = eWNI_SME_SET_IE_REQ; msg->session_id = rsp->session_id; msg->length = sizeof(*msg); @@ -17215,7 +17174,6 @@ csr_create_roam_scan_offload_request(tpAniSirGlobal mac_ctx, FL("Mem alloc for roam scan offload req failed.")); return NULL; } - qdf_mem_zero(req_buf, sizeof(tSirRoamOffloadScanReq)); req_buf->Command = command; /* * If command is STOP, then pass down ScanOffloadEnabled as Zero. This @@ -18364,7 +18322,6 @@ QDF_STATUS csr_roam_update_wparsni_es(tpAniSirGlobal pMac, uint32_t sessionId, pMsg = qdf_mem_malloc(sizeof(tSirUpdateAPWPARSNIEsReq)); if (NULL == pMsg) return QDF_STATUS_E_NOMEM; - qdf_mem_set(pMsg, sizeof(tSirUpdateAPWPARSNIEsReq), 0); pMsg->messageType = eWNI_SME_SET_APWPARSNIEs_REQ; pMsg->transactionId = 0; qdf_copy_macaddr(&pMsg->bssid, &pSession->selfMacAddr); @@ -18494,8 +18451,6 @@ QDF_STATUS csr_roam_channel_change_req(tpAniSirGlobal pMac, return QDF_STATUS_E_NOMEM; } - qdf_mem_set((void *)pMsg, sizeof(tSirChanChangeRequest), 0); - pMsg->messageType = eWNI_SME_CHANNEL_CHANGE_REQ; pMsg->messageLen = sizeof(tSirChanChangeRequest); pMsg->targetChannel = profile->ChannelInfo.ChannelList[0]; @@ -18539,7 +18494,6 @@ QDF_STATUS csr_roam_start_beacon_req(tpAniSirGlobal pMac, return QDF_STATUS_E_NOMEM; } - qdf_mem_set((void *)pMsg, sizeof(tSirStartBeaconIndication), 0); pMsg->messageType = eWNI_SME_START_BEACON_REQ; pMsg->messageLen = sizeof(tSirStartBeaconIndication); pMsg->beaconStartStatus = dfsCacWaitStatus; @@ -18651,8 +18605,6 @@ csr_roam_update_add_ies(tpAniSirGlobal pMac, return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(pUpdateAddIEs, sizeof(tSirUpdateIEsInd)); - pUpdateAddIEs->msgType = eWNI_SME_UPDATE_ADDITIONAL_IES; pUpdateAddIEs->msgLen = sizeof(tSirUpdateIEsInd); @@ -18697,7 +18649,6 @@ QDF_STATUS csr_send_ext_change_channel(tpAniSirGlobal mac_ctx, uint32_t channel, if (NULL == msg) return QDF_STATUS_E_NOMEM; - qdf_mem_zero(msg, sizeof(*msg)); msg->message_type = eWNI_SME_EXT_CHANGE_CHANNEL; msg->length = sizeof(*msg); msg->new_channel = channel; @@ -18733,7 +18684,6 @@ QDF_STATUS csr_roam_send_chan_sw_ie_request(tpAniSirGlobal mac_ctx, return QDF_STATUS_E_NOMEM; } - qdf_mem_set((void *)msg, sizeof(tSirDfsCsaIeRequest), 0); msg->msgType = eWNI_SME_DFS_BEACON_CHAN_SW_IE_REQ; msg->msgLen = sizeof(tSirDfsCsaIeRequest); @@ -19224,8 +19174,6 @@ void csr_process_set_hw_mode(tpAniSirGlobal mac, tSmeCmd *command) } } - qdf_mem_set(cmd, len, 0); - cmd->messageType = eWNI_SME_SET_HW_MODE_REQ; cmd->length = len; cmd->set_hw.hw_mode_index = command->u.set_hw_mode_cmd.hw_mode_index; @@ -19448,7 +19396,6 @@ void csr_process_nss_update_req(tpAniSirGlobal mac, tSmeCmd *command) goto fail; } - qdf_mem_set((void *)msg, sizeof(*msg), 0); msg->msgType = eWNI_SME_NSS_UPDATE_REQ; msg->msgLen = sizeof(*msg); @@ -19623,7 +19570,6 @@ void csr_roam_synch_callback(tpAniSirGlobal mac_ctx, } csr_scan_save_roam_offload_ap_to_scan_cache(mac_ctx, roam_synch_data, bss_desc); - qdf_mem_zero(roam_info, sizeof(tCsrRoamInfo)); roam_info->sessionId = session_id; csr_roam_call_callback(mac_ctx, roam_synch_data->roamedVdevId, roam_info, 0, eCSR_ROAM_TDLS_STATUS_UPDATE, @@ -19701,8 +19647,6 @@ void csr_roam_synch_callback(tpAniSirGlobal mac_ctx, sme_release_global_lock(&mac_ctx->sme); return; } - qdf_mem_zero(roam_info->pbFrames, roam_info->nBeaconLength + - roam_info->nAssocReqLength + roam_info->nAssocRspLength); qdf_mem_copy(roam_info->pbFrames, (uint8_t *)roam_synch_data + roam_synch_data->reassoc_req_offset + diff --git a/core/sme/src/csr/csr_api_scan.c b/core/sme/src/csr/csr_api_scan.c index aaf51c2a8fc8..43fcab6b3652 100644 --- a/core/sme/src/csr/csr_api_scan.c +++ b/core/sme/src/csr/csr_api_scan.c @@ -671,7 +671,6 @@ static QDF_STATUS csr_issue_roam_after_lostlink_scan(tpAniSirGlobal pMac, status = QDF_STATUS_E_NOMEM; goto free_filter; } - qdf_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); if (NULL == pSession->pCurRoamProfile) { pScanFilter->EncryptionType.numEntries = 1; pScanFilter->EncryptionType.encryptionType[0] = @@ -686,7 +685,6 @@ static QDF_STATUS csr_issue_roam_after_lostlink_scan(tpAniSirGlobal pMac, status = QDF_STATUS_E_NOMEM; goto free_filter; } - qdf_mem_set(pProfile, sizeof(tCsrRoamProfile), 0); status = csr_roam_copy_profile(pMac, pProfile, pSession->pCurRoamProfile); if (!QDF_IS_STATUS_SUCCESS(status)) @@ -838,7 +836,6 @@ csr_update_lost_link1_cmd(tpAniSirGlobal mac_ctx, tSmeCmd *cmd, if (NULL == scan_filter) return QDF_STATUS_E_NOMEM; - qdf_mem_set(scan_filter, sizeof(tCsrScanResultFilter), 0); status = csr_roam_prepare_filter_from_profile(mac_ctx, pSession->pCurRoamProfile, scan_filter); if (!QDF_IS_STATUS_SUCCESS(status)) @@ -1177,7 +1174,6 @@ QDF_STATUS csr_scan_handle_search_for_ssid(tpAniSirGlobal pMac, status = QDF_STATUS_E_NOMEM; break; } - qdf_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); status = csr_roam_prepare_filter_from_profile(pMac, pProfile, pScanFilter); if (!QDF_IS_STATUS_SUCCESS(status)) @@ -1930,7 +1926,6 @@ csr_save_scan_entry(tpAniSirGlobal pMac, qdf_mem_free(pNewIes); return status; } - qdf_mem_set(pResult, allocLen, 0); pResult->capValue = pBssDesc->capValue; pResult->preferValue = pBssDesc->preferValue; pResult->ucEncryptionType = uc; @@ -2121,7 +2116,6 @@ QDF_STATUS csr_scan_get_result(tpAniSirGlobal pMac, return QDF_STATUS_E_NOMEM; } - qdf_mem_set(pRetList, sizeof(tScanResultList), 0); csr_ll_open(pMac->hHdd, &pRetList->List); pRetList->pCurEntry = NULL; status = csr_parse_scan_results(pMac, pFilter, pRetList, &count); @@ -2380,7 +2374,6 @@ QDF_STATUS csr_scan_copy_result_list(tpAniSirGlobal pMac, tScanResultHandle hIn, if (NULL == pRetList) status = QDF_STATUS_E_NOMEM; else { - qdf_mem_set(pRetList, sizeof(tScanResultList), 0); csr_ll_open(pMac->hHdd, &pRetList->List); pRetList->pCurEntry = NULL; csr_ll_lock(&pMac->scan.scanResultList); @@ -3041,7 +3034,6 @@ static tCsrScanResult *csr_scan_save_bss_description(tpAniSirGlobal pMac, pCsrBssDescription = qdf_mem_malloc(cbAllocated); if (NULL != pCsrBssDescription) { - qdf_mem_set(pCsrBssDescription, cbAllocated, 0); pCsrBssDescription->AgingCount = (int32_t) pMac->roam.configParam.agingCount; sms_log(pMac, LOGW, @@ -3152,7 +3144,6 @@ QDF_STATUS csr_save_to_channel_power2_g_5_g(tpAniSirGlobal pMac, pChannelInfo++; continue; } - qdf_mem_set(pChannelSet, sizeof(tCsrChannelPowerInfo), 0); pChannelSet->firstChannel = pChannelInfo->firstChanNum; pChannelSet->numChannels = pChannelInfo->numChannels; /* @@ -3235,7 +3226,6 @@ static void csr_clear_dfs_channel_list(tpAniSirGlobal pMac) msgLen = (uint16_t) (sizeof(tSirMbMsg)); pMsg = qdf_mem_malloc(msgLen); if (NULL != pMsg) { - qdf_mem_set((void *)pMsg, msgLen, 0); pMsg->type = eWNI_SME_CLEAR_DFS_CHANNEL_LIST; pMsg->msgLen = msgLen; cds_send_mb_message_to_mac(pMsg); @@ -3624,8 +3614,6 @@ void csr_save_channel_power_for_band(tpAniSirGlobal pMac, bool fill_5f) if (NULL == chan_info) return; - qdf_mem_set(chan_info, sizeof(tSirMacChanInfo) * - WNI_CFG_VALID_CHANNEL_LIST_LEN, 0); ch_info_start = chan_info; for (idx = 0; idx < max_ch_idx; idx++) { ch = pMac->scan.defaultPowerTable[idx].chan_num; @@ -4361,7 +4349,6 @@ static tCsrScanResult *csr_scan_save_bss_description_to_interim_list( cbAllocated, cbBSSDesc); pCsrBssDescription = qdf_mem_malloc(cbAllocated); if (NULL != pCsrBssDescription) { - qdf_mem_set(pCsrBssDescription, cbAllocated, 0); qdf_mem_copy(&pCsrBssDescription->Result.BssDescriptor, pBSSDescription, cbBSSDesc); pCsrBssDescription->AgingCount = @@ -4999,7 +4986,6 @@ static QDF_STATUS csr_send_mb_scan_req(tpAniSirGlobal pMac, uint16_t sessionId, return QDF_STATUS_E_NOMEM; } - qdf_mem_set(pMsg, msgLen, 0); pMsg->messageType = eWNI_SME_SCAN_REQ; pMsg->length = msgLen; /* ToDO: Fill in session info when we need to do scan base on session */ @@ -5176,7 +5162,6 @@ QDF_STATUS csr_send_mb_scan_result_req(tpAniSirGlobal pMac, if (NULL == pMsg) return QDF_STATUS_E_NOMEM; - qdf_mem_set(pMsg, msgLen, 0); pMsg->messageType = eWNI_SME_SCAN_REQ; pMsg->length = msgLen; pMsg->sessionId = sessionId; @@ -6079,7 +6064,6 @@ QDF_STATUS csr_scan_get_pmkid_candidate_list(tpAniSirGlobal pMac, if (NULL == pScanFilter) return QDF_STATUS_E_NOMEM; - qdf_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); /* Here is the profile we need to connect to */ status = csr_roam_prepare_filter_from_profile(pMac, pSession->pCurRoamProfile, pScanFilter); @@ -6150,7 +6134,6 @@ QDF_STATUS csr_scan_get_bkid_candidate_list(tpAniSirGlobal pMac, if (NULL == pScanFilter) return QDF_STATUS_E_NOMEM; - qdf_mem_set(pScanFilter, sizeof(tCsrScanResultFilter), 0); /* Here is the profile we need to connect to */ status = csr_roam_prepare_filter_from_profile(pMac, pSession->pCurRoamProfile, pScanFilter); @@ -6315,9 +6298,6 @@ QDF_STATUS csr_scan_for_ssid(tpAniSirGlobal mac_ctx, uint32_t session_id, else status = QDF_STATUS_SUCCESS; - qdf_mem_set(scan_req->pIEField, - profile->nAddIEScanLength, 0); - if (QDF_IS_STATUS_SUCCESS(status)) { qdf_mem_copy(scan_req->pIEField, profile->pAddIEScan, @@ -6471,7 +6451,6 @@ void csr_save_tx_power_to_cfg(tpAniSirGlobal pMac, tDblLinkList *pList, if (pBuf == NULL) return; - qdf_mem_set(pBuf, dataLen, 0); ch_pwr_set = (tSirMacChanInfo *) (pBuf); pEntry = csr_ll_peek_head(pList, LL_ACCESS_LOCK); /* @@ -6613,8 +6592,6 @@ void csr_set_cfg_scan_control_list(tpAniSirGlobal pMac, uint8_t *countryCode, pControlList = qdf_mem_malloc(WNI_CFG_SCAN_CONTROL_LIST_LEN); if (pControlList != NULL) { - qdf_mem_set((void *)pControlList, WNI_CFG_SCAN_CONTROL_LIST_LEN, - 0); if (IS_SIR_STATUS_SUCCESS(wlan_cfg_get_str(pMac, WNI_CFG_SCAN_CONTROL_LIST, pControlList, &len))) { @@ -6847,7 +6824,6 @@ static void csr_send_scan_abort(tpAniSirGlobal mac_ctx, FL("Failed to alloc memory for SmeScanAbortReq")); return; } - qdf_mem_zero((void *)msg, msg_len); msg->type = eWNI_SME_SCAN_ABORT_IND; msg->msgLen = msg_len; msg->sessionId = session_id; @@ -6996,7 +6972,6 @@ QDF_STATUS csr_scan_save_preferred_network_found(tpAniSirGlobal pMac, qdf_mem_free(parsed_frm); return QDF_STATUS_E_NOMEM; } - qdf_mem_set(pScanResult, sizeof(tCsrScanResult) + uLen, 0); pBssDescr = &pScanResult->Result.BssDescriptor; /* * Length of BSS desription is without length of length itself and @@ -7269,7 +7244,6 @@ QDF_STATUS csr_scan_save_roam_offload_ap_to_scan_cache(tpAniSirGlobal pMac, return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(scan_res_ptr, sizeof(tCsrScanResult) + length); qdf_mem_copy(&scan_res_ptr->Result.BssDescriptor, bss_desc_ptr, (sizeof(tSirBssDescription) + length)); @@ -7382,7 +7356,6 @@ void csr_scan_active_list_timeout_handle(void *userData) FL("Failed to alloc memory for SmeScanAbortReq")); return; } - qdf_mem_zero((void *)msg, msg_len); msg->type = eWNI_SME_SCAN_ABORT_IND; msg->msgLen = msg_len; msg->sessionId = scan_cmd->sessionId; diff --git a/core/sme/src/csr/csr_neighbor_roam.c b/core/sme/src/csr/csr_neighbor_roam.c index 78d1d8661f4f..97cfb05f7d7b 100644 --- a/core/sme/src/csr/csr_neighbor_roam.c +++ b/core/sme/src/csr/csr_neighbor_roam.c @@ -385,10 +385,6 @@ csr_neighbor_roam_prepare_scan_profile_filter(tpAniSirGlobal pMac, return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(pScanFilter->BSSIDs.bssid, - sizeof(tSirMacAddr) * - pScanFilter->BSSIDs.numOfBSSIDs); - /* Populate the BSSID from handoff info received from HDD */ for (i = 0; i < pScanFilter->BSSIDs.numOfBSSIDs; i++) { qdf_copy_macaddr(&pScanFilter->BSSIDs.bssid[i], @@ -1516,7 +1512,6 @@ static QDF_STATUS csr_neighbor_roam_process_handoff_req( sms_log(mac_ctx, LOGE, FL("Memory alloc failed")); return QDF_STATUS_E_NOMEM; } - qdf_mem_set(profile, sizeof(tCsrRoamProfile), 0); status = csr_roam_copy_profile(mac_ctx, profile, session->pCurRoamProfile); @@ -1537,10 +1532,6 @@ static QDF_STATUS csr_neighbor_roam_process_handoff_req( } } - qdf_mem_zero(profile->BSSIDs.bssid, - sizeof(tSirMacAddr) * - profile->BSSIDs.numOfBSSIDs); - /* Populate the BSSID from handoff info received from HDD */ for (i = 0; i < profile->BSSIDs.numOfBSSIDs; i++) { qdf_copy_macaddr(&profile->BSSIDs.bssid[i], diff --git a/core/sme/src/csr/csr_roam_preauth.c b/core/sme/src/csr/csr_roam_preauth.c index 6b58af69afdc..9419514251a4 100644 --- a/core/sme/src/csr/csr_roam_preauth.c +++ b/core/sme/src/csr/csr_roam_preauth.c @@ -515,7 +515,6 @@ QDF_STATUS csr_roam_issue_ft_preauth_req(tHalHandle hal, uint32_t session_id, } /* Save the SME Session ID. We need it while processing preauth resp */ csr_session->ftSmeContext.smeSessionId = session_id; - qdf_mem_zero(preauth_req, auth_req_len); preauth_req->pbssDescription = (tpSirBssDescription) qdf_mem_malloc(sizeof(bss_desc->length) diff --git a/core/sme/src/csr/csr_util.c b/core/sme/src/csr/csr_util.c index b1766b31b769..42d8e07c6374 100644 --- a/core/sme/src/csr/csr_util.c +++ b/core/sme/src/csr/csr_util.c @@ -1289,8 +1289,6 @@ QDF_STATUS csr_get_parsed_bss_description_ies(tHalHandle hHal, if (pBssDesc && ppIEStruct) { *ppIEStruct = qdf_mem_malloc(sizeof(tDot11fBeaconIEs)); if ((*ppIEStruct) != NULL) { - qdf_mem_set((void *)*ppIEStruct, - sizeof(tDot11fBeaconIEs), 0); status = csr_parse_bss_description_ies(hHal, pBssDesc, *ppIEStruct); diff --git a/core/sme/src/nan/nan_api.c b/core/sme/src/nan/nan_api.c index 4e2ec69ab6e6..854975790758 100644 --- a/core/sme/src/nan/nan_api.c +++ b/core/sme/src/nan/nan_api.c @@ -108,8 +108,6 @@ QDF_STATUS sme_nan_request(tpNanRequestReq input) FL("Memory allocation failure")); return QDF_STATUS_E_NOMEM; } - - qdf_mem_zero(data, data_len); data->request_data_len = input->request_data_len; if (input->request_data_len) { qdf_mem_copy(data->request_data, diff --git a/core/sme/src/nan/nan_datapath_api.c b/core/sme/src/nan/nan_datapath_api.c index bae1285b4be3..0703283d082f 100644 --- a/core/sme/src/nan/nan_datapath_api.c +++ b/core/sme/src/nan/nan_datapath_api.c @@ -419,7 +419,6 @@ QDF_STATUS csr_process_ndp_initiator_request(tpAniSirGlobal mac_ctx, if (NULL == lim_msg) return QDF_STATUS_E_NOMEM; - qdf_mem_set(lim_msg, msg_len, 0); lim_msg->msg_type = eWNI_SME_NDP_INITIATOR_REQ; lim_msg->msg_len = msg_len; /* @@ -478,7 +477,6 @@ QDF_STATUS csr_process_ndp_responder_request(tpAniSirGlobal mac_ctx, goto free_config; } - qdf_mem_set(lim_msg, msg_len, 0); lim_msg->msg_type = eWNI_SME_NDP_RESPONDER_REQ; lim_msg->msg_len = msg_len; /* diff --git a/core/sme/src/p2p/p2p_api.c b/core/sme/src/p2p/p2p_api.c index 894f5cf31d47..60a7aff3d494 100644 --- a/core/sme/src/p2p/p2p_api.c +++ b/core/sme/src/p2p/p2p_api.c @@ -75,7 +75,6 @@ QDF_STATUS p2p_process_remain_on_channel_cmd(tpAniSirGlobal pMac, else { QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO, "%s call", __func__); - qdf_mem_set(pMsg, sizeof(tSirRemainOnChnReq), 0); pMsg->messageType = eWNI_SME_REMAIN_ON_CHANNEL_REQ; pMsg->length = (uint16_t) len; qdf_copy_macaddr(&pMsg->selfMacAddr, &pSession->selfMacAddr); @@ -301,7 +300,6 @@ QDF_STATUS p2p_send_action(tHalHandle hHal, uint8_t sessionId, if (NULL == pMsg) status = QDF_STATUS_E_NOMEM; else { - qdf_mem_set((void *)pMsg, msgLen, 0); pMsg->type = eWNI_SME_SEND_ACTION_FRAME_IND; pMsg->msgLen = msgLen; pMsg->sessionId = sessionId; @@ -350,7 +348,6 @@ QDF_STATUS p2p_set_ps(tHalHandle hHal, tP2pPsConfig *pNoA) if (NULL == pNoAParam) status = QDF_STATUS_E_NOMEM; else { - qdf_mem_set(pNoAParam, sizeof(tP2pPsConfig), 0); qdf_mem_copy(pNoAParam, pNoA, sizeof(tP2pPsConfig)); msg.type = eWNI_SME_UPDATE_NOA; msg.bodyval = 0; diff --git a/core/sme/src/qos/sme_qos.c b/core/sme/src/qos/sme_qos.c index 6a097f9cbe74..5f8a2f172fc1 100644 --- a/core/sme/src/qos/sme_qos.c +++ b/core/sme/src/qos/sme_qos.c @@ -3493,8 +3493,6 @@ QDF_STATUS sme_qos_ft_aggr_qos_req(tpAniSirGlobal mac_ctx, uint8_t session_id) return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(aggr_req, sizeof(tSirAggrQosReq)); - aggr_req->messageType = eWNI_SME_FT_AGGR_QOS_REQ; aggr_req->length = sizeof(tSirAggrQosReq); aggr_req->sessionId = session_id; @@ -3942,7 +3940,6 @@ QDF_STATUS sme_qos_add_ts_req(tpAniSirGlobal pMac, __func__, __LINE__); return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(pMsg, sizeof(tSirAddtsReq)); pMsg->messageType = eWNI_SME_ADDTS_REQ; pMsg->length = sizeof(tSirAddtsReq); pMsg->sessionId = sessionId; @@ -4059,7 +4056,6 @@ QDF_STATUS sme_qos_del_ts_req(tpAniSirGlobal pMac, __func__, __LINE__); return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(pMsg, sizeof(tSirDeltsReq)); /* get pointer to the TSPEC being deleted */ pSession = &sme_qos_cb.sessionInfo[sessionId]; pACInfo = &pSession->ac_info[ac]; diff --git a/core/sme/src/rrm/sme_rrm.c b/core/sme/src/rrm/sme_rrm.c index c0857f8568ff..11d3f69cb208 100644 --- a/core/sme/src/rrm/sme_rrm.c +++ b/core/sme/src/rrm/sme_rrm.c @@ -195,7 +195,6 @@ sme_rrm_send_beacon_report_xmit_ind(tpAniSirGlobal mac_ctx, "Unable to allocate memory for beacon report"); return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(beacon_rep, length); beacon_rep->messageType = eWNI_SME_BEACON_REPORT_RESP_XMIT_IND; beacon_rep->length = length; beacon_rep->uDialogToken = rrm_ctx->token; @@ -216,7 +215,6 @@ sme_rrm_send_beacon_report_xmit_ind(tpAniSirGlobal mac_ctx, if (NULL == beacon_rep->pBssDescription[i]) break; - qdf_mem_zero(beacon_rep->pBssDescription[i], tot_len); qdf_mem_copy(beacon_rep->pBssDescription[i], bss_desc, sizeof(tSirBssDescription)); qdf_mem_copy( @@ -446,7 +444,6 @@ static QDF_STATUS sme_rrm_send_scan_result(tpAniSirGlobal mac_ctx, sms_log(mac_ctx, LOGP, FL("qdf_mem_malloc failed")); return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(filter.SSIDs.SSIDList, sizeof(tCsrSSIDInfo)); filter.SSIDs.SSIDList->SSID.length = rrm_ctx->ssId.length; @@ -535,7 +532,6 @@ static QDF_STATUS sme_rrm_send_scan_result(tpAniSirGlobal mac_ctx, sms_log(mac_ctx, LOG1, "Scan res timer:%lu, rrm scan timer:%llu", scan_results->timer, rrm_scan_timer); if (scan_results->timer >= rrm_scan_timer) { - qdf_mem_zero(roam_info, sizeof(*roam_info)); roam_info->pBssDesc = &scan_results->BssDescriptor; csr_roam_call_callback(mac_ctx, session_id, roam_info, 0, eCSR_ROAM_UPDATE_SCAN_RESULT, @@ -692,8 +688,6 @@ static QDF_STATUS sme_rrm_issue_scan_req(tpAniSirGlobal mac_ctx) FL("qdf_mem_malloc failed")); return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(scan_req.SSIDs.SSIDList, - sizeof(tCsrSSIDInfo)); scan_req.SSIDs.SSIDList->SSID.length = sme_rrm_ctx->ssId.length; qdf_mem_copy(scan_req.SSIDs.SSIDList->SSID.ssId, @@ -952,7 +946,6 @@ QDF_STATUS sme_rrm_neighbor_report_request(tpAniSirGlobal pMac, uint8_t sessionI return QDF_STATUS_E_NOMEM; } - qdf_mem_zero(pMsg, sizeof(tSirNeighborReportReqInd)); rrm_ll_purge_neighbor_cache(pMac, &pMac->rrm.rrmSmeContext.neighborReportCache); @@ -1183,8 +1176,6 @@ static QDF_STATUS sme_rrm_process_neighbor_report(tpAniSirGlobal pMac, } - qdf_mem_zero(pNeighborReportDesc, - sizeof(tRrmNeighborReportDesc)); pNeighborReportDesc->pNeighborBssDescription = qdf_mem_malloc(sizeof(tSirNeighborBssDescription)); if (NULL == pNeighborReportDesc->pNeighborBssDescription) { @@ -1194,8 +1185,6 @@ static QDF_STATUS sme_rrm_process_neighbor_report(tpAniSirGlobal pMac, status = QDF_STATUS_E_NOMEM; goto end; } - qdf_mem_zero(pNeighborReportDesc->pNeighborBssDescription, - sizeof(tSirNeighborBssDescription)); qdf_mem_copy(pNeighborReportDesc->pNeighborBssDescription, &pNeighborRpt->sNeighborBssDescription[i], sizeof(tSirNeighborBssDescription)); From 1520e4374d398e7067eb397f8c0319c455cdbe9d Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Mon, 24 Oct 2016 16:45:20 -0700 Subject: [PATCH 020/119] Release 5.1.0.32V Release 5.1.0.32V Change-Id: Ic895a5c33c0c4e9cbc8a18001183be46a866ac53 CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 76394bc5e4b8..2e4dd0a03ff9 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "U" +#define QWLAN_VERSION_EXTRA "V" #define QWLAN_VERSION_BUILD 32 -#define QWLAN_VERSIONSTR "5.1.0.32U" +#define QWLAN_VERSIONSTR "5.1.0.32V" #endif /* QWLAN_VERSION_H */ From deaa781b63a030f04fc1368fa387eb0eafdab609 Mon Sep 17 00:00:00 2001 From: SaidiReddy Yenuga Date: Fri, 2 Sep 2016 18:16:48 +0530 Subject: [PATCH 021/119] qcacld-3.0: Modify CFG_INFRA_STA_KEEP_ALIVE_PERIOD_DEFAULT to 30 propagation from qcacld-2.0 to qcacld-3.0 Currently CFG_INFRA_STA_KEEP_ALIVE_PERIOD_DEFAULT is 0 in code and in ini file it is 30. If this parameter is undefined in ini file, then this KEEP alive feature gets disabled. Change CFG_INFRA_STA_KEEP_ALIVE_PERIOD_DEFAULT value to 30 in code. CRs-fixed: 1049206 Change-Id: Iff0933842b13482e9949473a4c8a48bf83230cc1 --- core/hdd/inc/wlan_hdd_cfg.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 63b2b0f5c05a..9ad137ddbba2 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -582,7 +582,7 @@ typedef enum { #define CFG_INFRA_STA_KEEP_ALIVE_PERIOD_NAME "gStaKeepAlivePeriod" #define CFG_INFRA_STA_KEEP_ALIVE_PERIOD_MIN (0) #define CFG_INFRA_STA_KEEP_ALIVE_PERIOD_MAX (65535) -#define CFG_INFRA_STA_KEEP_ALIVE_PERIOD_DEFAULT (0) +#define CFG_INFRA_STA_KEEP_ALIVE_PERIOD_DEFAULT (30) /* WMM configuration */ #define CFG_QOS_WMM_MODE_NAME "WmmIsEnabled" From 431c6b4bbcb63691618f57ea8ed5fd46393a26a9 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Tue, 25 Oct 2016 04:07:07 -0700 Subject: [PATCH 022/119] Release 5.1.0.32W Release 5.1.0.32W Change-Id: Iaba7d1003fe4f6b692a7058658693721d3f753d5 CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 2e4dd0a03ff9..eff3e368b93e 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "V" +#define QWLAN_VERSION_EXTRA "W" #define QWLAN_VERSION_BUILD 32 -#define QWLAN_VERSIONSTR "5.1.0.32V" +#define QWLAN_VERSIONSTR "5.1.0.32W" #endif /* QWLAN_VERSION_H */ From 0c66b1c7589c16c858cb98a57a00fcee3d2e6c68 Mon Sep 17 00:00:00 2001 From: Himanshu Agarwal Date: Fri, 21 Oct 2016 15:07:44 +0530 Subject: [PATCH 023/119] qcacld-3.0: Remove unwanted error messages Propagation from qcacld-2.0 to qcacld-3.0. Error level logs should be used only for error conditions. Add changes to move unwanted logs to info level. Change-Id: Ib5b3e1235ad36cf0594291f33e84758261e4d422 CRs-Fixed: 1049765 --- core/wma/src/wma_features.c | 64 ++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 36 deletions(-) diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index eb6338d92fdb..cf0deffae065 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -2745,22 +2745,20 @@ wma_wow_get_pkt_proto_subtype(uint8_t *data, uint16_t ether_type = (uint16_t)(*(uint16_t *)(data + QDF_NBUF_TRAC_ETH_TYPE_OFFSET)); - WMA_LOGE("Ether Type: 0x%04x", + WMA_LOGD("Ether Type: 0x%04x", ani_cpu_to_be16(ether_type)); if (QDF_NBUF_TRAC_EAPOL_ETH_TYPE == ani_cpu_to_be16(ether_type)) { if (len >= WMA_EAPOL_SUBTYPE_GET_MIN_LEN) return qdf_nbuf_data_get_eapol_subtype(data); - QDF_TRACE(QDF_MODULE_ID_WMA, - QDF_TRACE_LEVEL_ERROR, "EAPOL Packet"); + WMA_LOGD("EAPOL Packet"); return QDF_PROTO_INVALID; } else if (QDF_NBUF_TRAC_ARP_ETH_TYPE == ani_cpu_to_be16(ether_type)) { if (len >= WMA_ARP_SUBTYPE_GET_MIN_LEN) return qdf_nbuf_data_get_arp_subtype(data); - QDF_TRACE(QDF_MODULE_ID_WMA, - QDF_TRACE_LEVEL_ERROR, "ARP Packet"); + WMA_LOGD("ARP Packet"); return QDF_PROTO_INVALID; } else if (QDF_NBUF_TRAC_IPV4_ETH_TYPE == ani_cpu_to_be16(ether_type)) { @@ -2768,13 +2766,12 @@ wma_wow_get_pkt_proto_subtype(uint8_t *data, uint8_t proto_type; proto_type = qdf_nbuf_data_get_ipv4_proto(data); - WMA_LOGE("IPV4_proto_type: %u", proto_type); + WMA_LOGD("IPV4_proto_type: %u", proto_type); if (proto_type == QDF_NBUF_TRAC_ICMP_TYPE) { if (len >= WMA_ICMP_SUBTYPE_GET_MIN_LEN) return qdf_nbuf_data_get_icmp_subtype( data); - QDF_TRACE(QDF_MODULE_ID_WMA, - QDF_TRACE_LEVEL_ERROR, "ICMP Packet"); + WMA_LOGD("ICMP Packet"); return QDF_PROTO_INVALID; } else if (proto_type == QDF_NBUF_TRAC_UDP_TYPE) { if (len >= WMA_IS_DHCP_GET_MIN_LEN) { @@ -2782,9 +2779,7 @@ wma_wow_get_pkt_proto_subtype(uint8_t *data, if (len >= WMA_DHCP_SUBTYPE_GET_MIN_LEN) return qdf_nbuf_data_get_dhcp_subtype(data); - QDF_TRACE(QDF_MODULE_ID_WMA, - QDF_TRACE_LEVEL_ERROR, - "DHCP Packet"); + WMA_LOGD("DHCP Packet"); return QDF_PROTO_INVALID; } } @@ -2793,8 +2788,7 @@ wma_wow_get_pkt_proto_subtype(uint8_t *data, return QDF_PROTO_IPV4_TCP; } } - QDF_TRACE(QDF_MODULE_ID_WMA, - QDF_TRACE_LEVEL_ERROR, "IPV4 Packet"); + WMA_LOGD("IPV4 Packet"); return QDF_PROTO_INVALID; } else if (QDF_NBUF_TRAC_IPV6_ETH_TYPE == ani_cpu_to_be16(ether_type)) { @@ -2802,13 +2796,12 @@ wma_wow_get_pkt_proto_subtype(uint8_t *data, uint8_t proto_type; proto_type = qdf_nbuf_data_get_ipv6_proto(data); - WMA_LOGE("IPV6_proto_type: %u", proto_type); + WMA_LOGD("IPV6_proto_type: %u", proto_type); if (proto_type == QDF_NBUF_TRAC_ICMPV6_TYPE) { if (len >= WMA_ICMPV6_SUBTYPE_GET_MIN_LEN) return qdf_nbuf_data_get_icmpv6_subtype( data); - QDF_TRACE(QDF_MODULE_ID_WMA, - QDF_TRACE_LEVEL_ERROR, "ICMPV6 Packet"); + WMA_LOGD("ICMPV6 Packet"); return QDF_PROTO_INVALID; } else if (proto_type == QDF_NBUF_TRAC_UDP_TYPE) { return QDF_PROTO_IPV6_UDP; @@ -2816,8 +2809,7 @@ wma_wow_get_pkt_proto_subtype(uint8_t *data, return QDF_PROTO_IPV6_TCP; } } - QDF_TRACE(QDF_MODULE_ID_WMA, - QDF_TRACE_LEVEL_ERROR, "IPV6 Packet"); + WMA_LOGD("IPV6 Packet"); return QDF_PROTO_INVALID; } @@ -2846,7 +2838,7 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data, WMA_LOGD("wow_buf_pkt_len: %u", buf_len); if (buf_len >= QDF_NBUF_TRAC_IPV4_OFFSET) - WMA_LOGE("Src_mac: " MAC_ADDRESS_STR " Dst_mac: " MAC_ADDRESS_STR, + WMA_LOGD("Src_mac: " MAC_ADDRESS_STR " Dst_mac: " MAC_ADDRESS_STR, MAC_ADDR_ARRAY(data + QDF_NBUF_SRC_MAC_OFFSET), MAC_ADDR_ARRAY(data + QDF_NBUF_DEST_MAC_OFFSET)); else @@ -2858,14 +2850,14 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data, case QDF_PROTO_EAPOL_M2: case QDF_PROTO_EAPOL_M3: case QDF_PROTO_EAPOL_M4: - WMA_LOGE("WOW Wakeup: %s rcvd", + WMA_LOGD("WOW Wakeup: %s rcvd", wma_pkt_proto_subtype_to_string(proto_subtype)); if (buf_len >= WMA_EAPOL_INFO_GET_MIN_LEN) { pkt_len = (uint16_t)(*(uint16_t *)(data + EAPOL_PKT_LEN_OFFSET)); key_len = (uint16_t)(*(uint16_t *)(data + EAPOL_KEY_LEN_OFFSET)); - WMA_LOGE("Pkt_len: %u, Key_len: %u", + WMA_LOGD("Pkt_len: %u, Key_len: %u", ani_cpu_to_be16(pkt_len), ani_cpu_to_be16(key_len)); } @@ -2879,14 +2871,14 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data, case QDF_PROTO_DHCP_RELEASE: case QDF_PROTO_DHCP_INFORM: case QDF_PROTO_DHCP_DECLINE: - WMA_LOGE("WOW Wakeup: %s rcvd", + WMA_LOGD("WOW Wakeup: %s rcvd", wma_pkt_proto_subtype_to_string(proto_subtype)); if (buf_len >= WMA_DHCP_INFO_GET_MIN_LEN) { pkt_len = (uint16_t)(*(uint16_t *)(data + DHCP_PKT_LEN_OFFSET)); transaction_id = (uint32_t)(*(uint32_t *)(data + DHCP_TRANSACTION_ID_OFFSET)); - WMA_LOGE("Pkt_len: %u, Transaction_id: %u", + WMA_LOGD("Pkt_len: %u, Transaction_id: %u", ani_cpu_to_be16(pkt_len), ani_cpu_to_be16(transaction_id)); } @@ -2894,20 +2886,20 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data, case QDF_PROTO_ARP_REQ: case QDF_PROTO_ARP_RES: - WMA_LOGE("WOW Wakeup: %s rcvd", + WMA_LOGD("WOW Wakeup: %s rcvd", wma_pkt_proto_subtype_to_string(proto_subtype)); break; case QDF_PROTO_ICMP_REQ: case QDF_PROTO_ICMP_RES: - WMA_LOGE("WOW Wakeup: %s rcvd", + WMA_LOGD("WOW Wakeup: %s rcvd", wma_pkt_proto_subtype_to_string(proto_subtype)); if (buf_len >= WMA_IPV4_PKT_INFO_GET_MIN_LEN) { pkt_len = (uint16_t)(*(uint16_t *)(data + IPV4_PKT_LEN_OFFSET)); seq_num = (uint16_t)(*(uint16_t *)(data + ICMP_SEQ_NUM_OFFSET)); - WMA_LOGE("Pkt_len: %u, Seq_num: %u", + WMA_LOGD("Pkt_len: %u, Seq_num: %u", ani_cpu_to_be16(pkt_len), ani_cpu_to_be16(seq_num)); } @@ -2915,14 +2907,14 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data, case QDF_PROTO_ICMPV6_REQ: case QDF_PROTO_ICMPV6_RES: - WMA_LOGE("WOW Wakeup: %s rcvd", + WMA_LOGD("WOW Wakeup: %s rcvd", wma_pkt_proto_subtype_to_string(proto_subtype)); if (buf_len >= WMA_IPV6_PKT_INFO_GET_MIN_LEN) { pkt_len = (uint16_t)(*(uint16_t *)(data + IPV6_PKT_LEN_OFFSET)); seq_num = (uint16_t)(*(uint16_t *)(data + ICMPV6_SEQ_NUM_OFFSET)); - WMA_LOGE("Pkt_len: %u, Seq_num: %u", + WMA_LOGD("Pkt_len: %u, Seq_num: %u", ani_cpu_to_be16(pkt_len), ani_cpu_to_be16(seq_num)); } @@ -2930,7 +2922,7 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data, case QDF_PROTO_IPV4_UDP: case QDF_PROTO_IPV4_TCP: - WMA_LOGE("WOW Wakeup: %s rcvd", + WMA_LOGD("WOW Wakeup: %s rcvd", wma_pkt_proto_subtype_to_string(proto_subtype)); if (buf_len >= WMA_IPV4_PKT_INFO_GET_MIN_LEN) { pkt_len = (uint16_t)(*(uint16_t *)(data + @@ -2939,15 +2931,15 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data, IPV4_SRC_PORT_OFFSET)); dst_port = (uint16_t)(*(uint16_t *)(data + IPV4_DST_PORT_OFFSET)); - WMA_LOGE("Pkt_len: %u", + WMA_LOGD("Pkt_len: %u", ani_cpu_to_be16(pkt_len)); - WMA_LOGE("src_port: %u, dst_port: %u", + WMA_LOGD("src_port: %u, dst_port: %u", ani_cpu_to_be16(src_port), ani_cpu_to_be16(dst_port)); if (proto_subtype == QDF_PROTO_IPV4_TCP) { tcp_seq_num = (uint32_t)(*(uint32_t *)(data + IPV4_TCP_SEQ_NUM_OFFSET)); - WMA_LOGE("TCP_seq_num: %u", + WMA_LOGD("TCP_seq_num: %u", ani_cpu_to_be16(tcp_seq_num)); } } @@ -2955,7 +2947,7 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data, case QDF_PROTO_IPV6_UDP: case QDF_PROTO_IPV6_TCP: - WMA_LOGE("WOW Wakeup: %s rcvd", + WMA_LOGD("WOW Wakeup: %s rcvd", wma_pkt_proto_subtype_to_string(proto_subtype)); if (buf_len >= WMA_IPV6_PKT_INFO_GET_MIN_LEN) { pkt_len = (uint16_t)(*(uint16_t *)(data + @@ -2964,15 +2956,15 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data, IPV6_SRC_PORT_OFFSET)); dst_port = (uint16_t)(*(uint16_t *)(data + IPV6_DST_PORT_OFFSET)); - WMA_LOGE("Pkt_len: %u", + WMA_LOGD("Pkt_len: %u", ani_cpu_to_be16(pkt_len)); - WMA_LOGE("src_port: %u, dst_port: %u", + WMA_LOGD("src_port: %u, dst_port: %u", ani_cpu_to_be16(src_port), ani_cpu_to_be16(dst_port)); if (proto_subtype == QDF_PROTO_IPV6_TCP) { tcp_seq_num = (uint32_t)(*(uint32_t *)(data + IPV6_TCP_SEQ_NUM_OFFSET)); - WMA_LOGE("TCP_seq_num: %u", + WMA_LOGD("TCP_seq_num: %u", ani_cpu_to_be16(tcp_seq_num)); } } From d411cbc065d1be12e8640710de39388085911ed5 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Tue, 25 Oct 2016 05:10:10 -0700 Subject: [PATCH 024/119] Release 5.1.0.32X Release 5.1.0.32X Change-Id: I0fcf961f46cb83356c6f0a170cc90b130db4f517 CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index eff3e368b93e..40c27de1ad8c 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "W" +#define QWLAN_VERSION_EXTRA "X" #define QWLAN_VERSION_BUILD 32 -#define QWLAN_VERSIONSTR "5.1.0.32W" +#define QWLAN_VERSIONSTR "5.1.0.32X" #endif /* QWLAN_VERSION_H */ From 709a636c8a3d4c4fa4f2d644cad7ad665e7425ca Mon Sep 17 00:00:00 2001 From: Hanumanth Reddy Pothula Date: Tue, 18 Oct 2016 18:19:44 +0530 Subject: [PATCH 025/119] qcacld-3.0: Un-initialize modules after closing cds schedulers During driver un-initialization, cds scheduler is closed after un-initializing lower layer modules. This may lead to crash as there is possibility of MC thread to process commands after lower layer objects are uninitialized/freed. Un-initialize lower layer modules after closing cds schedulers. Change-Id: Ia43ca4f95c5b40aeb14976b523008e650ba26e10 CRs-Fixed: 1079196 --- core/hdd/src/wlan_hdd_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index d092dd8b55e3..9326fd93492c 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -4873,7 +4873,6 @@ static void hdd_wlan_exit(hdd_context_t *hdd_ctx) hdd_stop_all_adapters(hdd_ctx); } - hdd_wlan_stop_modules(hdd_ctx); /* * Close the scheduler before calling cds_close to make sure no thread * is scheduled after the each module close is called i.e after all the @@ -4885,6 +4884,8 @@ static void hdd_wlan_exit(hdd_context_t *hdd_ctx) QDF_ASSERT(QDF_IS_STATUS_SUCCESS(qdf_status)); } + hdd_wlan_stop_modules(hdd_ctx); + qdf_spinlock_destroy(&hdd_ctx->hdd_adapter_lock); qdf_spinlock_destroy(&hdd_ctx->sta_update_info_lock); qdf_spinlock_destroy(&hdd_ctx->connection_status_lock); From a87e2feaf8d0c83cc0e8dc2f9c3418030e318071 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Tue, 25 Oct 2016 06:37:24 -0700 Subject: [PATCH 026/119] Release 5.1.0.32Y Release 5.1.0.32Y Change-Id: I6f77d6d63b9df530ab730303092e670b6b4c53b7 CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 40c27de1ad8c..812baa79f15d 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "X" +#define QWLAN_VERSION_EXTRA "Y" #define QWLAN_VERSION_BUILD 32 -#define QWLAN_VERSIONSTR "5.1.0.32X" +#define QWLAN_VERSIONSTR "5.1.0.32Y" #endif /* QWLAN_VERSION_H */ From b7fe2611ea22c6f7e0687e7f60747274655aec2a Mon Sep 17 00:00:00 2001 From: Amar Singhal Date: Wed, 19 Oct 2016 10:49:58 -0700 Subject: [PATCH 027/119] qcacld-3.0: Disable non-20 mhz 2G world regulatory channels The minimum bandwidth supported is 5 MHZ. Kernel API wiphy_apply_custom_regulatory can enable channels 12/13 with BW 5/10 even for reg rule 2402-2472. Circumvent the issue by doing a check in the driver. Change-Id: I9ad600eda2e507312a3016aa6d1fe6fdc41724f2 CRs-Fixed: 1079851 --- core/hdd/src/wlan_hdd_regulatory.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/hdd/src/wlan_hdd_regulatory.c b/core/hdd/src/wlan_hdd_regulatory.c index 4487d5dd2500..2c237469c234 100644 --- a/core/hdd/src/wlan_hdd_regulatory.c +++ b/core/hdd/src/wlan_hdd_regulatory.c @@ -230,6 +230,8 @@ static void hdd_regulatory_wiphy_init(hdd_context_t *hdd_ctx, struct wiphy *wiphy) { const struct ieee80211_regdomain *reg_rules; + int chan_num; + struct ieee80211_channel chan; if (hdd_is_world_regdomain(reg->reg_domain)) { reg_rules = hdd_get_world_regrules(reg); @@ -248,6 +250,17 @@ static void hdd_regulatory_wiphy_init(hdd_context_t *hdd_ctx, hdd_ctx->reg.reg_flags = wiphy->regulatory_flags; wiphy_apply_custom_regulatory(wiphy, reg_rules); + /* + * disable 2.4 Ghz channels that dont have 20 mhz bw + */ + for (chan_num = 0; + chan_num < wiphy->bands[IEEE80211_BAND_2GHZ]->n_channels; + chan_num++) { + chan = wiphy->bands[IEEE80211_BAND_2GHZ]->channels[chan_num]; + if (chan.flags & IEEE80211_CHAN_NO_20MHZ) + chan.flags |= IEEE80211_CHAN_DISABLED; + } + /* * restore the driver regulatory flags since * wiphy_apply_custom_regulatory may have From 8284e5b398dd5401fcaaf324bdd90d897694cf1f Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Tue, 25 Oct 2016 08:49:54 -0700 Subject: [PATCH 028/119] Release 5.1.0.32Z Release 5.1.0.32Z Change-Id: Id024ebd4acdc9a6d1ab2d9b083bd48154459ab88 CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 812baa79f15d..8dcc74ec60ec 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "Y" +#define QWLAN_VERSION_EXTRA "Z" #define QWLAN_VERSION_BUILD 32 -#define QWLAN_VERSIONSTR "5.1.0.32Y" +#define QWLAN_VERSIONSTR "5.1.0.32Z" #endif /* QWLAN_VERSION_H */ From 0ce56d3b83d88b1109a4f50c300de78206b227bb Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Mon, 17 Oct 2016 16:18:03 -0700 Subject: [PATCH 029/119] qcacld-3.0: Fix SAP 'Channel Avoid' Build Issues The CLD driver does not compile when FEATURE_WLAN_CH_AVOID is not defined. Fix related issues. Change-Id: I3c3f14c16bd6a004670b6105231e591a13039fdc CRs-Fixed: 1078863 --- core/sap/src/sap_ch_select.c | 35 ++++++++++++++++++++++------------- core/sap/src/sap_fsm.c | 2 +- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/core/sap/src/sap_ch_select.c b/core/sap/src/sap_ch_select.c index 6ba0531ed621..9c9683789d4d 100644 --- a/core/sap/src/sap_ch_select.c +++ b/core/sap/src/sap_ch_select.c @@ -1879,6 +1879,7 @@ static bool sap_filter_over_lap_ch(ptSapContext pSapCtx, uint16_t chNum) return eSAP_FALSE; } +#ifdef FEATURE_WLAN_CH_AVOID /** * sap_select_channel_no_scan_result() - select SAP channel when no scan results * are available. @@ -1887,26 +1888,17 @@ static bool sap_filter_over_lap_ch(ptSapContext pSapCtx, uint16_t chNum) * Returns: channel number if success, 0 otherwise */ static uint8_t sap_select_channel_no_scan_result(tHalHandle hal, - ptSapContext sap_ctx) + ptSapContext sap_ctx) { - uint32_t start_ch_num, end_ch_num; -#ifdef FEATURE_WLAN_CH_AVOID enum channel_state ch_type; uint8_t i, first_safe_ch_in_range = SAP_CHANNEL_NOT_SELECTED; -#endif uint32_t dfs_master_cap_enabled; - start_ch_num = sap_ctx->acs_cfg->start_ch; - end_ch_num = sap_ctx->acs_cfg->end_ch; + uint32_t start_ch_num = sap_ctx->acs_cfg->start_ch; + uint32_t end_ch_num = sap_ctx->acs_cfg->end_ch; QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, FL("start - end: %d - %d"), start_ch_num, end_ch_num); -#ifndef FEATURE_WLAN_CH_AVOID - sap_ctx->acs_cfg->pri_ch = start_ch_num; - sap_ctx->acs_cfg->ht_sec_ch = 0; - /* pick the first channel in configured range */ - return start_ch_num; -#else sme_cfg_get_int(hal, WNI_CFG_DFS_MASTER_ENABLED, &dfs_master_cap_enabled); @@ -1962,8 +1954,25 @@ static uint8_t sap_select_channel_no_scan_result(tHalHandle hal, /* if no channel selected return SAP_CHANNEL_NOT_SELECTED */ return first_safe_ch_in_range; -#endif /* !FEATURE_WLAN_CH_AVOID */ } +#else +static uint8_t sap_select_channel_no_scan_result(tHalHandle hal, + ptSapContext sap_ctx) +{ + uint32_t start_ch_num = sap_ctx->acs_cfg->start_ch; + + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, + FL("start - end: %d - %d"), + start_ch_num, + sap_ctx->acs_cfg->end_ch); + + sap_ctx->acs_cfg->pri_ch = start_ch_num; + sap_ctx->acs_cfg->ht_sec_ch = 0; + + /* pick the first channel in configured range */ + return start_ch_num; +} +#endif /* FEATURE_WLAN_CH_AVOID */ /** * sap_select_channel() - select SAP channel diff --git a/core/sap/src/sap_fsm.c b/core/sap/src/sap_fsm.c index 25f2eb3886db..54a3dcedab60 100644 --- a/core/sap/src/sap_fsm.c +++ b/core/sap/src/sap_fsm.c @@ -4460,7 +4460,7 @@ static QDF_STATUS sap_get_channel_list(ptSapContext sap_ctx, uint8_t end_ch_num, band_end_ch; uint32_t en_lte_coex; tHalHandle hal = CDS_GET_HAL_CB(sap_ctx->p_cds_gctx); -#if defined(FEATURE_WLAN_CH_AVOID) || defined(SOFTAP_CHANNEL_RANGE) +#ifdef FEATURE_WLAN_CH_AVOID uint8_t i; #endif tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal); From 740580e82d2d4e3cbf025aff36521215ba690330 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Tue, 25 Oct 2016 11:26:52 -0700 Subject: [PATCH 030/119] Release 5.1.0.33 Release 5.1.0.33 Change-Id: I6ab1adcfc117c9572bdfc8607e03224e587db476 CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 8dcc74ec60ec..550f230b8b94 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "Z" -#define QWLAN_VERSION_BUILD 32 +#define QWLAN_VERSION_EXTRA "" +#define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.32Z" +#define QWLAN_VERSIONSTR "5.1.0.33" #endif /* QWLAN_VERSION_H */ From 249f03867709138db95ee536aafeb24123447f24 Mon Sep 17 00:00:00 2001 From: Archana Ramachandran Date: Wed, 19 Oct 2016 16:55:00 -0700 Subject: [PATCH 031/119] qcacld-3.0: Report correct TX ack status to supplicant Host driver reports TX ACK status as success when FW sends failure status. Due to this supplicant is not retrying the P2P confirmation frame resulting in Go Negotiation failure. P2P negotiation state machine can be messed up for other negotiation action frames as well. Change-Id: I9a22bd542aea32c7cbac11107fe8b6c9785a2ac1 CRs-Fixed: 1079970 --- core/mac/src/pe/lim/lim_p2p.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/mac/src/pe/lim/lim_p2p.c b/core/mac/src/pe/lim/lim_p2p.c index 8c2318b5292c..41098542cfc7 100644 --- a/core/mac/src/pe/lim/lim_p2p.c +++ b/core/mac/src/pe/lim/lim_p2p.c @@ -407,10 +407,11 @@ void lim_send_sme_mgmt_frame_ind(tpAniSirGlobal pMac, uint8_t frameType, return; } -QDF_STATUS lim_p2p_action_cnf(tpAniSirGlobal pMac, uint32_t txCompleteSuccess) +QDF_STATUS lim_p2p_action_cnf(tpAniSirGlobal pMac, uint32_t tx_status) { QDF_STATUS status; uint32_t mgmt_frame_sessionId; + bool tx_complete_ack = (tx_status) ? false : true; status = pe_acquire_global_lock(&pMac->lim); if (QDF_IS_STATUS_SUCCESS(status)) { @@ -429,7 +430,7 @@ QDF_STATUS lim_p2p_action_cnf(tpAniSirGlobal pMac, uint32_t txCompleteSuccess) mgmt_frame_sessionId); if (pMac->p2p_ack_ind_cb) pMac->p2p_ack_ind_cb(mgmt_frame_sessionId, - txCompleteSuccess); + tx_complete_ack); } } From ba4f59d18547bca5fbbef7bc883a5c0455c9b81e Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Tue, 25 Oct 2016 13:25:40 -0700 Subject: [PATCH 032/119] Release 5.1.0.33A Release 5.1.0.33A Change-Id: I49bd8286d6989dd3b0af6368cb1e85e2adda7f38 CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 550f230b8b94..fb09adf7d85f 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "" +#define QWLAN_VERSION_EXTRA "A" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33" +#define QWLAN_VERSIONSTR "5.1.0.33A" #endif /* QWLAN_VERSION_H */ From 224ae9c025558fc8a379ead284824c39482aff4e Mon Sep 17 00:00:00 2001 From: Naveen Rawat Date: Mon, 24 Oct 2016 15:36:56 -0700 Subject: [PATCH 033/119] qcacld-3.0: Send ASSOC_IEs only in connected state In function csr_roam_offload_scan do not populate ASSOC IE(which are only required in connected_state) in a non-connected state. Otherwise it will access connected BSS descriptor which is not avaiable in non-connected state. Change-Id: I9cb0b6f6a49b25c2bd74c5e2140e8fe8919f3f44 CRs-Fixed: 1081198 --- core/sme/src/csr/csr_api_roam.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 784477f223cb..547ae03fe3f7 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -17541,14 +17541,14 @@ static void csr_update_driver_assoc_ies(tpAniSirGlobal mac_ctx, = (uint8_t *) &mac_ctx->rrm.rrmPEContext.rrmEnabledCaps; uint8_t power_cap_ie_data[DOT11F_IE_POWERCAPS_MAX_LEN] = {MIN_TX_PWR_CAP, MAX_TX_PWR_CAP}; - uint8_t max_tx_pwr_cap - = csr_get_cfg_max_tx_power(mac_ctx, - session->pConnectBssDesc->channelId); - + uint8_t max_tx_pwr_cap = 0; uint8_t supp_chan_ie[DOT11F_IE_SUPPCHANNELS_MAX_LEN], supp_chan_ie_len; uint8_t ese_ie[DOT11F_IE_ESEVERSION_MAX_LEN] = { 0x0, 0x40, 0x96, 0x3, ESE_VERSION_SUPPORTED}; + if (session->pConnectBssDesc) + max_tx_pwr_cap = csr_get_cfg_max_tx_power(mac_ctx, + session->pConnectBssDesc->channelId); if (max_tx_pwr_cap) power_cap_ie_data[1] = max_tx_pwr_cap; @@ -17661,11 +17661,13 @@ csr_roam_offload_scan(tpAniSirGlobal mac_ctx, uint8_t session_id, /* * The Dynamic Config Items Update may happen even if the state is in * INIT. It is important to ensure that the command is passed down to - * the FW only if the Infra Station is in a connected state.A connected - * station could also be in a PREAUTH or REASSOC states.So, consider not - * sending the command down in INIT state. We also have to ensure that - * if there is a STOP command we always have to inform Riva, - * irrespective of whichever state we are in + * the FW only if the Infra Station is in a connected state. A connected + * station could also be in a PREAUTH or REASSOC states. + * 1) Block all CMDs that are not STOP in INIT State. For STOP always + * inform firmware irrespective of state. + * 2) Block update cfg CMD if its for REASON_ROAM_SET_BLACKLIST_BSSID, + * because we need to inform firmware of blacklisted AP for PNO in + * all states. */ if ((roam_info->neighborRoamState == From 460d23904a597535507a6ca17525dca6d97f4c15 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Tue, 25 Oct 2016 21:57:47 -0700 Subject: [PATCH 034/119] Release 5.1.0.33B Release 5.1.0.33B Change-Id: I055388a8fc8b890aad48dc978e8d25ce1decd6ce CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index fb09adf7d85f..13993cb44523 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "A" +#define QWLAN_VERSION_EXTRA "B" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33A" +#define QWLAN_VERSIONSTR "5.1.0.33B" #endif /* QWLAN_VERSION_H */ From af9f08cb064a64b467bdf0375e6de01499968941 Mon Sep 17 00:00:00 2001 From: "Padma, Santhosh Kumar" Date: Fri, 21 Oct 2016 21:26:29 +0530 Subject: [PATCH 035/119] qcacld-3.0: Use connected AP channel during reassoc to same AP Currently channel zero is configured by sigma dut when reassoc to same AP is issued. This results in failure as this is invalid channel. Fix this by passing channel of connected AP. Change-Id: I1fbdc10256b59d7ca49256461244566e04a52df5 CRs-Fixed: 1081234 --- core/hdd/src/wlan_hdd_ioctl.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c index 086a2e68d238..b12f4cba749c 100644 --- a/core/hdd/src/wlan_hdd_ioctl.c +++ b/core/hdd/src/wlan_hdd_ioctl.c @@ -4443,13 +4443,6 @@ static int drv_cmd_fast_reassoc(hdd_adapter_t *adapter, goto exit; } - /* Check channel number is a valid channel number */ - if (QDF_STATUS_SUCCESS != - wlan_hdd_validate_operation_channel(adapter, channel)) { - hdd_err("Invalid Channel [%d]", channel); - return -EINVAL; - } - /* * if the target bssid is same as currently associated AP, * issue reassoc to same AP @@ -4460,7 +4453,8 @@ static int drv_cmd_fast_reassoc(hdd_adapter_t *adapter, hdd_info("Reassoc BSSID is same as currently associated AP bssid"); if (roaming_offload_enabled(hdd_ctx)) { hdd_wma_send_fastreassoc_cmd((int)adapter->sessionId, - targetApBssid, (int)channel); + targetApBssid, + pHddStaCtx->conn_info.operationChannel); } else { sme_get_modify_profile_fields(hdd_ctx->hHal, adapter->sessionId, @@ -4471,6 +4465,13 @@ static int drv_cmd_fast_reassoc(hdd_adapter_t *adapter, return 0; } + /* Check channel number is a valid channel number */ + if (QDF_STATUS_SUCCESS != + wlan_hdd_validate_operation_channel(adapter, channel)) { + hdd_err("Invalid Channel [%d]", channel); + return -EINVAL; + } + if (roaming_offload_enabled(hdd_ctx)) { hdd_wma_send_fastreassoc_cmd((int)adapter->sessionId, targetApBssid, (int)channel); From 5272981b791c8cba84196e5b4ad003ec0a81b3ac Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Tue, 25 Oct 2016 23:12:29 -0700 Subject: [PATCH 036/119] Release 5.1.0.33C Release 5.1.0.33C Change-Id: I71a53ca2b97fa21572f5e79e9e05211276221b44 CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 13993cb44523..cacfdfb530d5 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "B" +#define QWLAN_VERSION_EXTRA "C" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33B" +#define QWLAN_VERSIONSTR "5.1.0.33C" #endif /* QWLAN_VERSION_H */ From 67a863b1b9ef80ec3422d66203587ee6b52b73b2 Mon Sep 17 00:00:00 2001 From: Himanshu Agarwal Date: Tue, 20 Sep 2016 15:09:09 +0530 Subject: [PATCH 037/119] qcacld-3.0: Add support to log roam events in DPTRACE Add support to log all the roam related commands and events in DPTRACE. Change-Id: I66773fc23dfeacf3a63688819e099bf44676d95b CRs-Fixed: 1081851 --- core/wma/src/wma_scan_roam.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 09ad59a89e40..47237e812a2d 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -2273,6 +2273,9 @@ int wma_roam_synch_event_handler(void *handle, uint8_t *event, return status; } + DPTRACE(qdf_dp_trace_record_event(QDF_DP_TRACE_EVENT_RECORD, + synch_event->vdev_id, QDF_PROTO_TYPE_EVENT, QDF_ROAM_SYNCH)); + if (wma_is_roam_synch_in_progress(wma, synch_event->vdev_id)) { WMA_LOGE("%s: Ignoring RSI since one is already in progress", __func__); @@ -2679,6 +2682,10 @@ void wma_process_roam_synch_complete(WMA_HANDLE handle, uint8_t vdev_id) vdev_id)) { return; } + + DPTRACE(qdf_dp_trace_record_event(QDF_DP_TRACE_EVENT_RECORD, + vdev_id, QDF_PROTO_TYPE_EVENT, QDF_ROAM_COMPLETE)); + WMA_LOGE("LFR3: Posting WMA_ROAM_OFFLOAD_SYNCH_CNF"); return; } @@ -5778,6 +5785,9 @@ int wma_roam_event_callback(WMA_HANDLE handle, uint8_t *event_buf, __func__, wmi_event->reason, wmi_event->notif, wmi_event->vdev_id, wmi_event->rssi); + DPTRACE(qdf_dp_trace_record_event(QDF_DP_TRACE_EVENT_RECORD, + wmi_event->vdev_id, QDF_PROTO_TYPE_EVENT, QDF_ROAM_EVENTID)); + switch (wmi_event->reason) { case WMI_ROAM_REASON_BMISS: WMA_LOGD("Beacon Miss for vdevid %x", wmi_event->vdev_id); From 2ef0b049cf0ba89322a49d03eb9b7f1f50ad08ce Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 26 Oct 2016 10:49:11 -0700 Subject: [PATCH 038/119] Release 5.1.0.33D Release 5.1.0.33D Change-Id: I00ce08cc93883ce02ee33c02449845049d2814eb CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index cacfdfb530d5..113e4adcd023 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "C" +#define QWLAN_VERSION_EXTRA "D" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33C" +#define QWLAN_VERSIONSTR "5.1.0.33D" #endif /* QWLAN_VERSION_H */ From 2836c5a199196a5609f94ae93f5145857d3d34cd Mon Sep 17 00:00:00 2001 From: "Kondabattini, Ganesh" Date: Tue, 20 Sep 2016 17:10:19 +0530 Subject: [PATCH 039/119] qcacld-3.0: Reset the parameters which overrides the ACS qcacld-2.0 to qcacld-3.0 propagation When restarting SAP due to unsafe channel list, make sure to set the acs_channel and sapConfig.channel to 0. Otherwise these parameters overides the ACS logic. Change-Id: I52d8575960e4d5bac5aa509df41c20fb846a96e6 CRs-Fixed: 1031468 --- core/hdd/src/wlan_hdd_main.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 9326fd93492c..3897c1252c62 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -6024,6 +6024,14 @@ void hdd_unsafe_channel_restart_sap(hdd_context_t *hdd_ctxt) if (!restart_chan) { hdd_alert("fail to restart SAP"); } else { + /* SAP restart due to unsafe channel. While restarting + * the SAP, make sure to clear acs_channel, channel to + * reset to 0. Otherwise these settings will override + * the ACS while restart. + */ + hdd_ctxt->acs_policy.acs_channel = AUTO_CHANNEL_SELECT; + adapter_temp->sessionCtx.ap.sapConfig.channel = + AUTO_CHANNEL_SELECT; hdd_info("sending coex indication"); wlan_hdd_send_svc_nlink_msg(hdd_ctxt->radio_index, WLAN_SVC_LTE_COEX_IND, NULL, 0); From 1a3dac6d94dad5d655d32cc553a9e64a801e638a Mon Sep 17 00:00:00 2001 From: Naveen Rawat Date: Tue, 25 Oct 2016 12:44:57 -0700 Subject: [PATCH 040/119] qcacld-3.0: Do not free node if qdf_list_remove_node fails In function __lim_process_sme_register_mgmt_frame_req, check for return of qdf_list_remove_node before freeing node. Change-Id: Ie52f298427e5b006b95f5248ce588d97e2c6aa72 CRs-Fixed: 1081795 --- core/mac/src/pe/lim/lim_process_sme_req_messages.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index e488b5f6cead..03936bd0f360 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c @@ -4633,11 +4633,12 @@ skip_match: } if (match) { qdf_mutex_acquire(&mac_ctx->lim.lim_frame_register_lock); - qdf_list_remove_node( + if (QDF_STATUS_SUCCESS == + qdf_list_remove_node( &mac_ctx->lim.gLimMgmtFrameRegistratinQueue, - (qdf_list_node_t *)lim_mgmt_regn); + (qdf_list_node_t *)lim_mgmt_regn)) + qdf_mem_free(lim_mgmt_regn); qdf_mutex_release(&mac_ctx->lim.lim_frame_register_lock); - qdf_mem_free(lim_mgmt_regn); } if (sme_req->registerFrame) { From 21a4e5139f7405e4c1cf3351280726361b392fc6 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 26 Oct 2016 14:13:28 -0700 Subject: [PATCH 041/119] Release 5.1.0.33E Release 5.1.0.33E Change-Id: I6484d08803eb680de466b36d13e504a1781b3ece CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 113e4adcd023..7b8da14a1384 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "D" +#define QWLAN_VERSION_EXTRA "E" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33D" +#define QWLAN_VERSIONSTR "5.1.0.33E" #endif /* QWLAN_VERSION_H */ From 833aa96a5b4fa25a3f1aaf1e5a835b0631f741b9 Mon Sep 17 00:00:00 2001 From: Amar Singhal Date: Tue, 25 Oct 2016 15:42:27 -0700 Subject: [PATCH 042/119] qcacld-3.0: Set maximum channel width correctly In case channel width is defined to be CH_WIDTH_MAX; channel width set to CH_WIDTH_80P80MHZ. This can be incorrect if the secondary frequency segment is not defined. So conditionally set maximum channel width to CH_WITH_160MHZ. CRs-Fixed: 1082221 Change-Id: Iff28c56de56e5481814b4710eb51920a88f0f5f7 --- core/cds/src/cds_reg_service.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/cds/src/cds_reg_service.c b/core/cds/src/cds_reg_service.c index 9b6b00d8d079..b486963516cb 100644 --- a/core/cds/src/cds_reg_service.c +++ b/core/cds/src/cds_reg_service.c @@ -469,8 +469,12 @@ static void cds_set_5g_channel_params(uint16_t oper_ch, const struct bonded_chan *bonded_chan_ptr = NULL; const struct bonded_chan *bonded_chan_ptr2 = NULL; - if (CH_WIDTH_MAX <= ch_params->ch_width) - ch_params->ch_width = CH_WIDTH_80P80MHZ; + if (CH_WIDTH_MAX <= ch_params->ch_width) { + if (0 != ch_params->center_freq_seg1) + ch_params->ch_width = CH_WIDTH_80P80MHZ; + else + ch_params->ch_width = CH_WIDTH_160MHZ; + } while (ch_params->ch_width != CH_WIDTH_INVALID) { bonded_chan_ptr = NULL; From cb0615103a989254d88084e23167be87464079b1 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 26 Oct 2016 15:04:53 -0700 Subject: [PATCH 043/119] Release 5.1.0.33F Release 5.1.0.33F Change-Id: Ibe5000be1fe1781a66e24fe12616e5f303cd9cdb CRs-Fixed: 688141 --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 7b8da14a1384..9f078aba7ba7 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "E" +#define QWLAN_VERSION_EXTRA "F" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33E" +#define QWLAN_VERSIONSTR "5.1.0.33F" #endif /* QWLAN_VERSION_H */ From 7d845118f8c1c50eea768b38b04cac583f2a3533 Mon Sep 17 00:00:00 2001 From: Liangwei Dong Date: Tue, 27 Sep 2016 22:24:21 -0400 Subject: [PATCH 044/119] qcacld-3.0: wma: fix same peer created again issue qcacld-2.0 to qcacld-3.0 propagation This change fixes the connection issue in ap+ap mode. One peer may connect to the second ap while another ap still has the connection with this peer, so the same peer may be created twice. Change-Id: I898ec326fb8cf080e8fa0b4737c897fc790633a0 CRs-Fixed: 955241 --- core/wma/src/wma_dev_if.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 57f3ff49241c..55e33bb22839 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -3412,6 +3412,20 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta) WMA_LOGE("%s: Peer already exists, Deleted peer with peer_addr %pM", __func__, add_sta->staMac); } + /* The code above only checks the peer existence on its own vdev. + * Need to check whether the peer exists on other vDevs because firmware + * can't create the peer if the peer with same MAC address already + * exists on the pDev. As this peer belongs to other vDevs, just return + * here. + */ + peer = ol_txrx_find_peer_by_addr(pdev, add_sta->staMac, &peer_id); + if (peer) { + WMA_LOGE("%s: My vdev:%d, but Peer exists on other vdev with " + "peer_addr %pM and peer_id %d", + __func__, vdev->vdev_id, add_sta->staMac, peer_id); + add_sta->status = QDF_STATUS_E_FAILURE; + goto send_rsp; + } status = wma_create_peer(wma, pdev, vdev, add_sta->staMac, WMI_PEER_TYPE_DEFAULT, add_sta->smesessionId, From 87a1ecce028364a0fae700423483656dadccae4c Mon Sep 17 00:00:00 2001 From: Liangwei Dong Date: Wed, 28 Sep 2016 04:03:16 -0400 Subject: [PATCH 045/119] qcacld-3.0: Handle dfs channel switch failure qcacld-2.0 to qcacld-3.0 propagation We need to stop SAP bss and destroy the SAP session if the channel switch failed. Otherwise, the vdev will leak and it will cause SoftAP start failed in following test. Change-Id: Ieb3a2d62c8698f245f787be3c215ee4365b2e8ba CRs-Fixed: 944741 --- core/sap/src/sap_api_link_cntl.c | 13 +++++++++---- core/sap/src/sap_fsm.c | 6 ++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/core/sap/src/sap_api_link_cntl.c b/core/sap/src/sap_api_link_cntl.c index 2447879bcab7..7b249cb746d5 100644 --- a/core/sap/src/sap_api_link_cntl.c +++ b/core/sap/src/sap_api_link_cntl.c @@ -1239,13 +1239,18 @@ wlansap_roam_callback(void *ctx, tCsrRoamInfo *csr_roam_info, uint32_t roamId, csr_roam_info, &qdf_ret_status); break; case eCSR_ROAM_RESULT_CHANNEL_CHANGE_FAILURE: - /* - * This is much more serious issue, we have to vacate the + /* This is much more serious issue, we have to vacate the * channel due to the presence of radar but our channel change * failed, stop the BSS operation completely and inform hostapd */ - sap_ctx->sapsMachine = eSAP_DISCONNECTED; - /* Inform cfg80211 and hostapd that BSS is not alive anymore */ + sap_event.event = eWNI_SME_CHANNEL_CHANGE_RSP; + sap_event.params = 0; + sap_event.u1 = eCSR_ROAM_INFRA_IND; + sap_event.u2 = eCSR_ROAM_RESULT_CHANNEL_CHANGE_FAILURE; + + qdf_status = sap_fsm(sap_ctx, &sap_event); + if (!QDF_IS_STATUS_SUCCESS(qdf_status)) + qdf_ret_status = QDF_STATUS_E_FAILURE; break; case eCSR_ROAM_EXT_CHG_CHNL_UPDATE_IND: qdf_status = sap_signal_hdd_event(sap_ctx, csr_roam_info, diff --git a/core/sap/src/sap_fsm.c b/core/sap/src/sap_fsm.c index 54a3dcedab60..ed2e70663118 100644 --- a/core/sap/src/sap_fsm.c +++ b/core/sap/src/sap_fsm.c @@ -3970,6 +3970,12 @@ static QDF_STATUS sap_fsm_state_disconnecting(ptSapContext sap_ctx, QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO, FL("Sending DFS eWNI_SME_CHANNEL_CHANGE_REQ")); + } else if (msg == eWNI_SME_CHANNEL_CHANGE_RSP) { + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO, + FL("in state %s, event msg %d result %d"), + "eSAP_DISCONNECTING ", msg, sap_event->u2); + if (sap_event->u2 == eCSR_ROAM_RESULT_CHANNEL_CHANGE_FAILURE) + qdf_status = sap_goto_disconnecting(sap_ctx); } else { QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, FL("in state %s, invalid event msg %d"), From e30491fbfeac1d72a344fac5ba968ef98e9dc6cd Mon Sep 17 00:00:00 2001 From: Kai Liu Date: Wed, 28 Sep 2016 23:41:13 +0800 Subject: [PATCH 046/119] qcacld-3.0: add channel 144 in sap channel leakage matrix qcacld-2.0 to qcacld-3.0 propagation Host driver will use sap channel leakage matrix to identify whether this channel is leakage due to radar detected in sap channel. channel 144 is missed in this table. Change-Id: I15b8cce29da8ba5d7beef1b4e684200121a4aa61 CRs-Fixed: 945408 --- core/sap/src/sap_fsm.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/core/sap/src/sap_fsm.c b/core/sap/src/sap_fsm.c index ed2e70663118..1222b8abb5f8 100644 --- a/core/sap/src/sap_fsm.c +++ b/core/sap/src/sap_fsm.c @@ -298,6 +298,19 @@ tSapChanMatrixInfo ht80_chan[] = { {132, SAP_TX_LEAKAGE_MIN}, {136, SAP_TX_LEAKAGE_MIN}, {144, SAP_TX_LEAKAGE_MIN} } }, + + {144, + {{36, SAP_TX_LEAKAGE_MAX}, {40, SAP_TX_LEAKAGE_MAX}, + {44, SAP_TX_LEAKAGE_MAX}, {48, SAP_TX_LEAKAGE_MAX}, + {52, SAP_TX_LEAKAGE_MAX}, {56, SAP_TX_LEAKAGE_MAX}, + {60, SAP_TX_LEAKAGE_MIN}, {64, SAP_TX_LEAKAGE_MIN}, + {100, SAP_TX_LEAKAGE_MIN}, {104, SAP_TX_LEAKAGE_MIN}, + {108, SAP_TX_LEAKAGE_MIN}, {112, SAP_TX_LEAKAGE_MIN}, + {116, SAP_TX_LEAKAGE_MIN}, {120, SAP_TX_LEAKAGE_MIN}, + {124, SAP_TX_LEAKAGE_MIN}, {128, SAP_TX_LEAKAGE_MIN}, + {132, SAP_TX_LEAKAGE_MIN}, {136, SAP_TX_LEAKAGE_MIN}, + {144, SAP_TX_LEAKAGE_MIN} + } }, }; /* channel tx leakage table - ht40 */ @@ -512,6 +525,19 @@ tSapChanMatrixInfo ht40_chan[] = { {144, SAP_TX_LEAKAGE_MIN} } }, + {144, + {{36, 695}, {40, 695}, + {44, 684}, {48, 684}, + {52, 664}, {56, 664}, + {60, 658}, {64, 658}, + {100, 601}, {104, 601}, + {108, 545}, {112, 545}, + {116, SAP_TX_LEAKAGE_AUTO_MIN}, {120, SAP_TX_LEAKAGE_AUTO_MIN}, + {124, SAP_TX_LEAKAGE_AUTO_MIN}, {128, SAP_TX_LEAKAGE_AUTO_MIN}, + {132, 262}, {136, 262}, + {140, SAP_TX_LEAKAGE_MIN}, + {144, SAP_TX_LEAKAGE_MIN} + } }, }; /* channel tx leakage table - ht20 */ @@ -725,6 +751,20 @@ tSapChanMatrixInfo ht20_chan[] = { {140, SAP_TX_LEAKAGE_MIN}, {144, SAP_TX_LEAKAGE_MIN} } }, + + {144, + {{36, 679}, {40, 673}, + {44, 667}, {48, 656}, + {52, 634}, {56, 663}, + {60, 662}, {64, 660}, + {100, SAP_TX_LEAKAGE_MAX}, {104, SAP_TX_LEAKAGE_MAX}, + {108, SAP_TX_LEAKAGE_MAX}, {112, 590}, + {116, 573}, {120, 553}, + {124, 533}, {128, 513}, + {132, 490}, {136, SAP_TX_LEAKAGE_MIN}, + {140, SAP_TX_LEAKAGE_MIN}, + {144, SAP_TX_LEAKAGE_MIN} + } }, }; #endif /* WLAN_ENABLE_CHNL_MATRIX_RESTRICTION */ From 27f2037fa655e838478a6e5b14b46b2038815a03 Mon Sep 17 00:00:00 2001 From: Kai Liu Date: Wed, 28 Sep 2016 23:52:36 +0800 Subject: [PATCH 047/119] qcacld-3.0: Destroy tx_frm_download_comp_event in wma_close qcacld-2.0 to qcacld-3.0 propagation Currently tx_frm_download_comp_event is used in Mcthread and destroyed in wma_stop, when wma_stop is called, Mcthread has not exited yet. In stress test, this event is destoryed but Mcthread is still using, so crash occurs. Solution is that destroy event in wma_close to avoid the case that after destroy this event is still used. Change-Id: I7d4e97ab261f586edfb90268544a2cda4e90a0b2 CRs-Fixed: 958906 --- core/wma/src/wma_data.c | 5 ----- core/wma/src/wma_main.c | 2 ++ 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/core/wma/src/wma_data.c b/core/wma/src/wma_data.c index e0c76e7dfa9a..8972e1791cc6 100644 --- a/core/wma/src/wma_data.c +++ b/core/wma/src/wma_data.c @@ -1556,11 +1556,6 @@ QDF_STATUS wma_tx_detach(tp_wma_handle wma_handle) NULL, txrx_pdev); } } - /* Destroy Tx Frame Complete event */ - qdf_event_destroy(&wma_handle->tx_frm_download_comp_event); - - /* Tx queue empty check event (dummy event) */ - qdf_event_destroy(&wma_handle->tx_queue_empty_event); /* Reset Tx Frm Callbacks */ wma_handle->tx_frm_download_comp_cb = NULL; diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index e2e7e1642b44..3962513329ea 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -3475,6 +3475,8 @@ QDF_STATUS wma_close(void *cds_ctx) qdf_event_destroy(&wma_handle->wma_resume_event); qdf_event_destroy(&wma_handle->runtime_suspend); qdf_event_destroy(&wma_handle->recovery_event); + qdf_event_destroy(&wma_handle->tx_frm_download_comp_event); + qdf_event_destroy(&wma_handle->tx_queue_empty_event); wma_cleanup_vdev_resp(wma_handle); wma_cleanup_hold_req(wma_handle); qdf_wake_lock_destroy(&wma_handle->wmi_cmd_rsp_wake_lock); From ffd2bb7166ff7bf8cb677872e1092932c43a5c9b Mon Sep 17 00:00:00 2001 From: Kai Liu Date: Thu, 29 Sep 2016 00:08:55 +0800 Subject: [PATCH 048/119] qcacld-3.0: WMA has to del sta if auth frame is received while connecting qcacld-2.0 to qcacld-3.0 propagation It's a fix for sns issue. Set DUT as sap, ref client sends assoc req to DUT and as part of this frame processing lim does ADD_STA and posts eWNI_SME_ASSOC_IND to sme layer. Before SME layer sends eWNI_SME_ASSOC_CNF, DUT receives auth frame which triggers deauth. In this case lim layer will delete ref client's related info, but wma layer doesn't get any notification. To fix this lim has to notify wma to do DEL_STA for that peer. Change-Id: Id4aae51aae3fb68e752d09793ad3bce17665fc2e CRs-Fixed: 979687 --- core/mac/src/pe/lim/lim_assoc_utils.c | 1 + 1 file changed, 1 insertion(+) diff --git a/core/mac/src/pe/lim/lim_assoc_utils.c b/core/mac/src/pe/lim/lim_assoc_utils.c index 266f9afcf607..b16c83e4e82b 100644 --- a/core/mac/src/pe/lim/lim_assoc_utils.c +++ b/core/mac/src/pe/lim/lim_assoc_utils.c @@ -585,6 +585,7 @@ lim_cleanup_rx_path(tpAniSirGlobal pMac, tpDphHashNode pStaDs, * Release our assigned AID back to the free pool */ if (LIM_IS_AP_ROLE(psessionEntry)) { + lim_del_sta(pMac, pStaDs, false, psessionEntry); lim_release_peer_idx(pMac, pStaDs->assocId, psessionEntry); } From d32281cbb54b304d9414d7e0559bba71838256f4 Mon Sep 17 00:00:00 2001 From: Frank Liu Date: Fri, 30 Sep 2016 11:25:14 +0800 Subject: [PATCH 049/119] qcacld-3.0: Fix sme active list timeout by tdls propagation from qcacld-2.0 to qcacld-3.0. If tdls commands fail before it's really executed, the commands in active list will not be removed and timeout. Change-Id: Ie10458dcdef9571520b995d1879b499fe855ce2a CRs-Fixed: 962237 --- core/sme/src/common/sme_api.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 877fa62cf63e..2b9b453c84b5 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -1017,6 +1017,15 @@ sme_process_cmd: pCommand->command); csr_ll_unlock(&pMac->sme.smeCmdActiveList); status = csr_tdls_process_cmd(pMac, pCommand); + if (!QDF_IS_STATUS_SUCCESS(status)) { + if (csr_ll_remove_entry(&pMac->sme.smeCmdActiveList, + &pCommand->Link, + LL_ACCESS_LOCK)) { + qdf_mem_zero(&pCommand->u.tdlsCmd, + sizeof(tTdlsCmd)); + csr_release_command(pMac, pCommand); + } + } break; #endif case e_sme_command_set_hw_mode: From d19fce6f8e434dbedff8a9698ebc813c6d35bd84 Mon Sep 17 00:00:00 2001 From: gbian Date: Mon, 10 Oct 2016 16:29:50 +0800 Subject: [PATCH 050/119] qcacld-3.0: Fix compilation errors when enable OL_TX_SCHED_RR qcacld-2.0 to qcacld-3.0 propagation Fix compilation errors when enable OL_TX_SCHED_RR. Change-Id: I2e0ae4d5cae8ad991f060d1276dcae6a4a46bdce CRs-Fixed: 1020665 --- core/dp/txrx/ol_tx_sched.c | 90 +++++++++++++++++++++++++++++--------- 1 file changed, 69 insertions(+), 21 deletions(-) diff --git a/core/dp/txrx/ol_tx_sched.c b/core/dp/txrx/ol_tx_sched.c index b14966d8abef..11d0d6c1a45a 100644 --- a/core/dp/txrx/ol_tx_sched.c +++ b/core/dp/txrx/ol_tx_sched.c @@ -204,13 +204,13 @@ ol_tx_sched_select_batch_rr( struct ol_tx_sched_rr_t *scheduler = pdev->tx_sched.scheduler; struct ol_tx_active_queues_in_tid_t *txq_queue; struct ol_tx_frms_queue_t *next_tq; - u_int16_t frames, used_credits, tx_limit, tx_limit_flag = 0; + u_int16_t frames, used_credits = 0, tx_limit, tx_limit_flag = 0; int bytes; TX_SCHED_DEBUG_PRINT("Enter %s\n", __func__); if (TAILQ_EMPTY(&scheduler->tx_active_tids_list)) - return; + return used_credits; txq_queue = TAILQ_FIRST(&scheduler->tx_active_tids_list); @@ -222,12 +222,12 @@ ol_tx_sched_select_batch_rr( credit = OL_A_MIN(credit, TX_SCH_MAX_CREDIT_FOR_THIS_TID(next_tq)); frames = next_tq->frms; /* download as many frames as credit allows */ - tx_limit = ol_tx_bad_peer_dequeue_check(txq, - category->specs.send_limit, + tx_limit = ol_tx_bad_peer_dequeue_check(next_tq, + frames, &tx_limit_flag); frames = ol_tx_dequeue( - pdev, txq, &sctx->head, tx_limit, &credit, &bytes); - ol_tx_bad_peer_update_tx_limit(pdev, txq, frames, tx_limit_flag); + pdev, next_tq, &sctx->head, tx_limit, &credit, &bytes); + ol_tx_bad_peer_update_tx_limit(pdev, next_tq, frames, tx_limit_flag); used_credits = credit; txq_queue->frms -= frames; @@ -445,6 +445,36 @@ ol_txrx_set_wmm_param(ol_txrx_pdev_handle data_pdev, "Dummy function when OL_TX_SCHED_RR is enabled\n"); } +/** + * ol_tx_sched_stats_display() - tx sched stats display + * @pdev: Pointer to the PDEV structure. + * + * Return: none. + */ +void ol_tx_sched_stats_display(struct ol_txrx_pdev_t *pdev) +{ +} + +/** + * ol_tx_sched_cur_state_display() - tx sched cur stat display + * @pdev: Pointer to the PDEV structure. + * + * Return: none. + */ +void ol_tx_sched_cur_state_display(struct ol_txrx_pdev_t *pdev) +{ +} + +/** + * ol_tx_sched_cur_state_display() - reset tx sched stats + * @pdev: Pointer to the PDEV structure. + * + * Return: none. + */ +void ol_tx_sched_stats_clear(struct ol_txrx_pdev_t *pdev) +{ +} + #endif /* OL_TX_SCHED == OL_TX_SCHED_RR */ /*--- advanced scheduler ----------------------------------------------------*/ @@ -1088,6 +1118,39 @@ ol_txrx_set_wmm_param(ol_txrx_pdev_handle data_pdev, } } +/** + * ol_tx_sched_stats_display() - tx sched stats display + * @pdev: Pointer to the PDEV structure. + * + * Return: none. + */ +void ol_tx_sched_stats_display(struct ol_txrx_pdev_t *pdev) +{ + OL_TX_SCHED_WRR_ADV_CAT_STAT_DUMP(pdev->tx_sched.scheduler); +} + +/** + * ol_tx_sched_cur_state_display() - tx sched cur stat display + * @pdev: Pointer to the PDEV structure. + * + * Return: none. + */ +void ol_tx_sched_cur_state_display(struct ol_txrx_pdev_t *pdev) +{ + OL_TX_SCHED_WRR_ADV_CAT_CUR_STATE_DUMP(pdev->tx_sched.scheduler); +} + +/** + * ol_tx_sched_cur_state_display() - reset tx sched stats + * @pdev: Pointer to the PDEV structure. + * + * Return: none. + */ +void ol_tx_sched_stats_clear(struct ol_txrx_pdev_t *pdev) +{ + OL_TX_SCHED_WRR_ADV_CAT_STAT_CLEAR(pdev->tx_sched.scheduler); +} + #endif /* OL_TX_SCHED == OL_TX_SCHED_WRR_ADV */ /*--- congestion control discard --------------------------------------------*/ @@ -1462,19 +1525,4 @@ ol_tx_sched_log(struct ol_txrx_pdev_t *pdev) #endif /* defined(DEBUG_HL_LOGGING) */ -void ol_tx_sched_stats_display(struct ol_txrx_pdev_t *pdev) -{ - OL_TX_SCHED_WRR_ADV_CAT_STAT_DUMP(pdev->tx_sched.scheduler); -} - -void ol_tx_sched_cur_state_display(struct ol_txrx_pdev_t *pdev) -{ - OL_TX_SCHED_WRR_ADV_CAT_CUR_STATE_DUMP(pdev->tx_sched.scheduler); -} - -void ol_tx_sched_stats_clear(struct ol_txrx_pdev_t *pdev) -{ - OL_TX_SCHED_WRR_ADV_CAT_STAT_CLEAR(pdev->tx_sched.scheduler); -} - #endif /* defined(CONFIG_HL_SUPPORT) */ From 8baf7c8ab00ef57659202c2777a04af1e9893aba Mon Sep 17 00:00:00 2001 From: Liangwei Dong Date: Tue, 11 Oct 2016 01:26:59 -0400 Subject: [PATCH 051/119] qcacld-3.0: Fix acs_cfg.ch_list memory leak qcacld-2.0 to qcacld-3.0 propagation If ACS failed, the __wlan_hdd_cfg80211_stop_ap will not be called to free the ch_list. Add new API wlan_hdd_undo_acs to do cleanup of DO_ACS to free ch_list memory. And call the API in hdd_deinit_adapter to fix ch_list leak issue. CRs-Fixed: 1002207 Change-Id: If3285739f2387928a1d7578f9d14089a486a6d9e (cherry picked from commit e55d0c20e574a63b5002650529054ace24ad7cad) --- core/hdd/inc/wlan_hdd_main.h | 3 +-- core/hdd/src/wlan_hdd_cfg80211.c | 22 +++++++++++++++++++++- core/hdd/src/wlan_hdd_hostapd.c | 18 ++---------------- core/hdd/src/wlan_hdd_main.c | 1 + 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index 398e7c2f592e..bfd9115d7817 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -1941,11 +1941,10 @@ static inline void hdd_enable_fastpath(struct hdd_config *hdd_cfg, } #endif void hdd_wlan_update_target_info(hdd_context_t *hdd_ctx, void *context); - enum sap_acs_dfs_mode wlan_hdd_get_dfs_mode(enum dfs_mode mode); - void hdd_ch_avoid_cb(void *hdd_context, void *indi_param); void hdd_unsafe_channel_restart_sap(hdd_context_t *hdd_ctx); int hdd_enable_disable_ca_event(hdd_context_t *hddctx, uint8_t set_value); +void wlan_hdd_undo_acs(hdd_adapter_t *adapter); #endif /* end #if !defined(WLAN_HDD_MAIN_H) */ diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 2e9494a6182b..b8ed55b67718 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -1621,7 +1621,7 @@ out: if (temp_skbuff != NULL) return cfg80211_vendor_cmd_reply(temp_skbuff); } - + wlan_hdd_undo_acs(adapter); clear_bit(ACS_IN_PROGRESS, &hdd_ctx->g_event_flags); return status; @@ -1653,6 +1653,26 @@ static int wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy, return ret; } +/** + * wlan_hdd_undo_acs : Do cleanup of DO_ACS + * @adapter: Pointer to adapter struct + * + * This function handle cleanup of what was done in DO_ACS, including free + * memory. + * + * Return: void + */ + +void wlan_hdd_undo_acs(hdd_adapter_t *adapter) +{ + if (adapter == NULL) + return; + if (adapter->sessionCtx.ap.sapConfig.acs_cfg.ch_list) { + qdf_mem_free(adapter->sessionCtx.ap.sapConfig.acs_cfg.ch_list); + adapter->sessionCtx.ap.sapConfig.acs_cfg.ch_list = NULL; + } +} + /** * wlan_hdd_cfg80211_start_pending_acs : Start pending ACS procedure for SAP * @work: Linux workqueue struct pointer for ACS work diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index c3dd96c240fe..e9738a16664e 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -7603,21 +7603,8 @@ static int __wlan_hdd_cfg80211_stop_ap(struct wiphy *wiphy, pHddCtx = WLAN_HDD_GET_CTX(pAdapter); ret = wlan_hdd_validate_context(pHddCtx); - if (0 != ret) { - if (cds_is_driver_unloading()) { - /* - * Unloading the driver so free the memory for ch_list, - * otherwise it will result in memory leak - */ - if (pAdapter->sessionCtx.ap.sapConfig.acs_cfg.ch_list) { - qdf_mem_free(pAdapter->sessionCtx.ap.sapConfig. - acs_cfg.ch_list); - pAdapter->sessionCtx.ap.sapConfig.acs_cfg. - ch_list = NULL; - } - } + if (0 != ret) return ret; - } status = hdd_get_front_adapter(pHddCtx, &pAdapterNode); while (NULL != pAdapterNode && QDF_STATUS_SUCCESS == status) { @@ -7663,8 +7650,7 @@ static int __wlan_hdd_cfg80211_stop_ap(struct wiphy *wiphy, qdf_spin_unlock(&pHddCtx->sap_update_info_lock); } pAdapter->sessionCtx.ap.sapConfig.acs_cfg.acs_mode = false; - if (pAdapter->sessionCtx.ap.sapConfig.acs_cfg.ch_list) - qdf_mem_free(pAdapter->sessionCtx.ap.sapConfig.acs_cfg.ch_list); + wlan_hdd_undo_acs(pAdapter); qdf_mem_zero(&pAdapter->sessionCtx.ap.sapConfig.acs_cfg, sizeof(struct sap_acs_cfg)); hdd_hostapd_stop(dev); diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 3897c1252c62..1cc03ca266d5 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -2916,6 +2916,7 @@ static void hdd_ap_adapter_deinit(hdd_context_t *hdd_ctx, hdd_wmm_adapter_close(adapter); clear_bit(WMM_INIT_DONE, &adapter->event_flags); } + wlan_hdd_undo_acs(adapter); hdd_cleanup_actionframe(hdd_ctx, adapter); From b3f26cc4f5833624a224e0047d40cdf23f2a98f2 Mon Sep 17 00:00:00 2001 From: Liangwei Dong Date: Tue, 11 Oct 2016 04:37:00 -0400 Subject: [PATCH 052/119] qcacld-3.0: Fix P2P GO vdev start failure qcacld-2.0 to qcacld-3.0 propagation In case of P2P device and P2P GO using seperated interface, if P2P Device interface listen (remain on channel) with long duration is active, P2P GO interface vdev start command will be timeout. In shared interface case, driver will cancel existing P2P listen during interface type changing from P2P device to P2P GO in __wlan_hdd_cfg80211_change_iface. There is no such issue. This fix is to extend the canceling logic just before P2P GO starting to avoid the vdev start timeout in first case. Change-Id: I5c5903bc5eded417ede670025c241daf73b96700 CRs-Fixed: 1022238 (cherry picked from commit 696a5a4e110482bcf873b6c657fe621aa2dd8b8e) --- core/hdd/src/wlan_hdd_hostapd.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index e9738a16664e..42fe0fd2e0b6 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -7896,6 +7896,16 @@ static int __wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy, return -EINVAL; } } + if (pAdapter->device_mode == QDF_P2P_GO_MODE) { + hdd_adapter_t *p2p_adapter; + p2p_adapter = hdd_get_adapter(pHddCtx, QDF_P2P_DEVICE_MODE); + if (p2p_adapter) { + hdd_info("cancel active p2p device ROC before GO " + "starting"); + wlan_hdd_cancel_existing_remain_on_channel( + p2p_adapter); + } + } if ((pAdapter->device_mode == QDF_SAP_MODE) || (pAdapter->device_mode == QDF_P2P_GO_MODE) From 9028d75166fb6c8d6ea67ad380dc0fd2f3da5b20 Mon Sep 17 00:00:00 2001 From: Liangwei Dong Date: Mon, 17 Oct 2016 02:00:17 -0400 Subject: [PATCH 053/119] qcacld-3.0: Fix invalid peer create after vdev down qcacld-2.0 to qcacld-3.0 propagation In a SNS case, driver receives ASSOC Req during the SAP Stopping. The SAP stopping will issue WMI_VDEV_DOWN_CMDID WMI command to firmware. And ASSOC req frame processing will issue a WMI_PEER_CREATE_CMDID WMI command to firmware. Then the firmware crash happens because firmware can't find the necessary BSS information to create the peer. Firmware doesn't support peer create after BSS down. The fix is to ignore the ASSOC Req frame while the deleting BSS is ongoing. Change-Id: Ib517642da4fc6b4778ef1ce4e6afd92fa3edb112 CRs-Fixed: 1053809 (cherry picked from commit 2118b5d37d9294a22cff60ec5bd2b7baf4a34cae) --- core/mac/src/pe/lim/lim_process_assoc_req_frame.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c index 5d7fe2487091..69f2d9b41b05 100644 --- a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c +++ b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c @@ -1775,6 +1775,15 @@ void lim_process_assoc_req_frame(tpAniSirGlobal mac_ctx, uint8_t *rx_pkt_info, WMA_GET_RX_MPDU_DATA(rx_pkt_info), frame_len); return; } + if (session->limMlmState == eLIM_MLM_WT_DEL_BSS_RSP_STATE) { + lim_log(mac_ctx, LOGE, FL("drop ASSOC REQ on sessionid: %d " + "role=%d from: "MAC_ADDRESS_STR" in limMlmState %d"), + session->peSessionId, + GET_LIM_SYSTEM_ROLE(session), + MAC_ADDR_ARRAY(hdr->sa), + eLIM_MLM_WT_DEL_BSS_RSP_STATE); + return; + } /* * If a STA is already present in DPH and it is initiating a Assoc From 7f07073647d981edfe04f2f6902bfff31383e948 Mon Sep 17 00:00:00 2001 From: Kai Liu Date: Thu, 20 Oct 2016 14:01:30 +0800 Subject: [PATCH 054/119] qcacld-3.0: Reduce hif usb remove time when card surprise-removed qcacld-2.0 to qcacld-3.0 propagation In USB solution, hif_usb_remove costs ~25s after card unplugged. Test step is simple, do p2p listen, then unplug card. Sme session close costs 15s. When do p2p listen, scan will be issued to fw, but this cmd is stuck in smeScanCmdActiveList which cause session close cmd eSmeCommandDelStaSession blocked and the timeout is 15s. This solution is that remove scan from smeScanCmdActiveList if scan cmd pending in active list when close session. Change-Id: I9f1af72cefe80dca056d7a23e015caa746952330 CRs-Fixed: 1068739 (cherry picked from commit b3460026a8ae119ac660b3970c9e3cc8b999656d) --- core/sme/src/csr/csr_api_roam.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 547ae03fe3f7..91103f3e8e5e 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -15708,6 +15708,9 @@ QDF_STATUS csr_roam_close_session(tpAniSirGlobal pMac, uint32_t sessionId, purge_sme_session_cmd_list(pMac, sessionId, &pMac->sme.smeScanCmdPendingList); + purge_sme_session_cmd_list(pMac, sessionId, + &pMac->sme.smeScanCmdActiveList); + purge_csr_session_cmd_list(pMac, sessionId); status = csr_issue_del_sta_for_session_req(pMac, sessionId, From 2259cb33c342bbb144a294eb628ea033bacfdda5 Mon Sep 17 00:00:00 2001 From: gbian Date: Fri, 30 Sep 2016 15:56:56 +0800 Subject: [PATCH 055/119] qcacld-3.0: indicate wow wake up frame for HL project qcacld-2.0 to qcacld-3.0 propagation Currently FW does not indicate wow wake up frame to host for HL project. After the change, FW will indicate wake up frame with HTT_T2H_MSG_TYPE_RX_OFFLOAD_DELIVER_IND htt msg and host will handle this message to indicate to OS protocol stack. Change-Id: I5f4446de7ec3c4ff1c1de6fd6105429e0898291c CRs-Fixed: 956416 (cherry picked from commit b5cb00e05b1db94a2869cc5becef3d777dbd560e) --- core/dp/htt/htt_rx.c | 34 ++++++++++++++++++++++++++++++++-- core/dp/htt/htt_t2h.c | 10 +++++++++- core/dp/txrx/ol_rx.c | 30 +++++++++++++++--------------- 3 files changed, 56 insertions(+), 18 deletions(-) diff --git a/core/dp/htt/htt_rx.c b/core/dp/htt/htt_rx.c index 62820e0e8720..8a9e9fa5092f 100644 --- a/core/dp/htt/htt_rx.c +++ b/core/dp/htt/htt_rx.c @@ -1375,9 +1375,39 @@ htt_rx_offload_msdu_pop_hl(htt_pdev_handle pdev, qdf_nbuf_t *head_buf, qdf_nbuf_t *tail_buf) { - return 0; -} + adf_nbuf_t buf; + u_int32_t *msdu_hdr, msdu_len; + int ret = 0; + *head_buf = *tail_buf = buf = offload_deliver_msg; + msdu_hdr = (u_int32_t *)adf_nbuf_data(buf); + /* First dword */ + + /* Second dword */ + msdu_hdr++; + msdu_len = HTT_RX_OFFLOAD_DELIVER_IND_MSDU_LEN_GET(*msdu_hdr); + *peer_id = HTT_RX_OFFLOAD_DELIVER_IND_MSDU_PEER_ID_GET(*msdu_hdr); + + /* Third dword */ + msdu_hdr++; + *vdev_id = HTT_RX_OFFLOAD_DELIVER_IND_MSDU_VDEV_ID_GET(*msdu_hdr); + *tid = HTT_RX_OFFLOAD_DELIVER_IND_MSDU_TID_GET(*msdu_hdr); + *fw_desc = HTT_RX_OFFLOAD_DELIVER_IND_MSDU_DESC_GET(*msdu_hdr); + + adf_nbuf_pull_head(buf, HTT_RX_OFFLOAD_DELIVER_IND_MSDU_HDR_BYTES \ + + HTT_RX_OFFLOAD_DELIVER_IND_HDR_BYTES); + + if (msdu_len <= adf_nbuf_len(buf)) { + adf_nbuf_set_pktlen(buf, msdu_len); + } else { + adf_os_print("%s: drop frame with invalid msdu len %d %d\n", + __FUNCTION__, msdu_len, (int)adf_nbuf_len(buf)); + adf_nbuf_free(offload_deliver_msg); + ret = -1; + } + + return ret; +} #endif int diff --git a/core/dp/htt/htt_t2h.c b/core/dp/htt/htt_t2h.c index c7863a618613..9d044f3e8c0b 100644 --- a/core/dp/htt/htt_t2h.c +++ b/core/dp/htt/htt_t2h.c @@ -213,7 +213,15 @@ void htt_t2h_lp_msg_handler(void *context, qdf_nbuf_t htt_t2h_msg, ol_rx_offload_deliver_ind_handler(pdev->txrx_pdev, htt_t2h_msg, msdu_cnt); - break; + if (pdev->cfg.is_high_latency) { + /* + * return here for HL to avoid double free on + * htt_t2h_msg + */ + return; + } else { + break; + } } case HTT_T2H_MSG_TYPE_RX_FRAG_IND: { diff --git a/core/dp/txrx/ol_rx.c b/core/dp/txrx/ol_rx.c index 4d9dc4aac1a9..9268bbe9bb7e 100644 --- a/core/dp/txrx/ol_rx.c +++ b/core/dp/txrx/ol_rx.c @@ -851,21 +851,21 @@ ol_rx_offload_deliver_ind_handler(ol_txrx_pdev_handle pdev, htt_pdev_handle htt_pdev = pdev->htt_pdev; while (msdu_cnt) { - htt_rx_offload_msdu_pop(htt_pdev, msg, &vdev_id, &peer_id, - &tid, &fw_desc, &head_buf, &tail_buf); - - peer = ol_txrx_peer_find_by_id(pdev, peer_id); - if (peer) { - ol_rx_data_process(peer, head_buf); - } else { - buf = head_buf; - while (1) { - qdf_nbuf_t next; - next = qdf_nbuf_next(buf); - htt_rx_desc_frame_free(htt_pdev, buf); - if (buf == tail_buf) - break; - buf = next; + if (!htt_rx_offload_msdu_pop(htt_pdev, msg, &vdev_id, &peer_id, + &tid, &fw_desc, &head_buf, &tail_buf)) { + peer = ol_txrx_peer_find_by_id(pdev, peer_id); + if (peer) { + ol_rx_data_process(peer, head_buf); + } else { + buf = head_buf; + while (1) { + qdf_nbuf_t next; + next = qdf_nbuf_next(buf); + htt_rx_desc_frame_free(htt_pdev, buf); + if (buf == tail_buf) + break; + buf = next; + } } } msdu_cnt--; From bf0e062ca3fe314a9edfbd9cd3c20feff2cbc971 Mon Sep 17 00:00:00 2001 From: gbian Date: Thu, 13 Oct 2016 16:07:07 +0800 Subject: [PATCH 056/119] qcacld-3.0: Flush vdev's TXQ with the same TID as inserted one qcacld-2.0 to qcacld-3.0 propagation Currently TXQ of DEFAULT_MGMT packet is using TID HTT_TX_EXT_TID_MGMT when we inserted into Scheduler, so use same TID when we flush it. Change-Id: I1631b7706d1f8bf0352ceecb8836d82743526e44 CRs-Fixed: 1000968 (cherry picked from commit 9b41b24a9da6b9415ebdafb6e4574f0b03570e9e) --- core/dp/txrx/ol_tx_queue.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/core/dp/txrx/ol_tx_queue.c b/core/dp/txrx/ol_tx_queue.c index 3044210dbbb8..5fa1b9982838 100644 --- a/core/dp/txrx/ol_tx_queue.c +++ b/core/dp/txrx/ol_tx_queue.c @@ -80,7 +80,27 @@ ol_tx_queue_vdev_flush(struct ol_txrx_pdev_t *pdev, struct ol_txrx_vdev_t *vdev) /* flush VDEV TX queues */ for (i = 0; i < OL_TX_VDEV_NUM_QUEUES; i++) { txq = &vdev->txqs[i]; - ol_tx_queue_free(pdev, txq, (i + OL_TX_NUM_TIDS), false); + /* + * currently txqs of MCAST_BCAST/DEFAULT_MGMT packet are using + * tid HTT_TX_EXT_TID_NON_QOS_MCAST_BCAST/HTT_TX_EXT_TID_MGMT + * when inserted into scheduler, so use same tid when we flush + * them + */ + if (i == OL_TX_VDEV_MCAST_BCAST) + ol_tx_queue_free(pdev, + txq, + HTT_TX_EXT_TID_NON_QOS_MCAST_BCAST, + false); + else if (i == OL_TX_VDEV_DEFAULT_MGMT) + ol_tx_queue_free(pdev, + txq, + HTT_TX_EXT_TID_MGMT, + false); + else + ol_tx_queue_free(pdev, + txq, + (i + OL_TX_NUM_TIDS), + false); } /* flush PEER TX queues */ do { From b0821c471b18dc9ca42e0f8715654469cafff077 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 26 Oct 2016 15:42:14 -0700 Subject: [PATCH 057/119] Release 5.1.0.33G Release 5.1.0.33G Change-Id: I0352881b7ed17e4d34ec5c74de0b77ca0e16324d CRs-Fixed: 688141 (cherry picked from commit 548562e0d00a7dacc70c53d99df8a0bdfd193e18) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 9f078aba7ba7..1d11ad8faf93 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "F" +#define QWLAN_VERSION_EXTRA "G" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33F" +#define QWLAN_VERSIONSTR "5.1.0.33G" #endif /* QWLAN_VERSION_H */ From 46956a5aff76d59076675c52a24301b8f368c870 Mon Sep 17 00:00:00 2001 From: Himanshu Agarwal Date: Tue, 26 Jul 2016 19:46:25 +0530 Subject: [PATCH 058/119] qcacld-3.0: Add infrastructure for pktstats based on linkedlist Proapagation from qcacld-2.0 to qcacld-3.0. Currently pktstats are stored in static allocated memory. This pkt stats can be accessed using 1) procEntry function 2) hal_proxy_daemon If user access it using procEntry then read pointer is moved ahead in static memory array because of which incomplete data goes when queried using hal_proxy_daemon. Fix this by maintaining the pktstats in link list. When the request comes from hal_proxy_daemon, complete data is sent to it from this link list Change-Id: I09bbd03fe378b296e110ce52cc8cbeb8cf8d723d CRs-Fixed: 958544 (cherry picked from commit c0d86fc4197383d0eb386e091cee5142a35b555a) --- core/cds/inc/cds_api.h | 1 + core/cds/src/cds_api.c | 20 + .../utils/logging/inc/wlan_logging_sock_svc.h | 3 + .../utils/logging/src/wlan_logging_sock_svc.c | 384 +++++++++++++++++- core/utils/pktlog/linux_ac.c | 132 ------ core/utils/pktlog/pktlog_internal.c | 26 +- 6 files changed, 418 insertions(+), 148 deletions(-) diff --git a/core/cds/inc/cds_api.h b/core/cds/inc/cds_api.h index fa048f1d72ea..f0061bf55ec4 100644 --- a/core/cds/inc/cds_api.h +++ b/core/cds/inc/cds_api.h @@ -292,4 +292,5 @@ bool cds_is_5_mhz_enabled(void); bool cds_is_10_mhz_enabled(void); bool cds_is_sub_20_mhz_enabled(void); bool cds_is_self_recovery_enabled(void); +void cds_pkt_stats_to_logger_thread(void *pl_hdr, void *pkt_dump, void *data); #endif /* if !defined __CDS_API_H */ diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index 7de4ad52b976..88cab038f21a 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -2290,3 +2290,23 @@ void cds_svc_fw_shutdown_ind(struct device *dev) { hdd_svc_fw_shutdown_ind(dev); } + +/* + * cds_pkt_stats_to_logger_thread() - send pktstats to user + * @pl_hdr: Pointer to pl_hdr + * @pkt_dump: Pointer to pkt_dump data structure. + * @data: Pointer to data + * + * This function is used to send the pkt stats to SVC module. + * + * Return: None + */ +inline void cds_pkt_stats_to_logger_thread(void *pl_hdr, void *pkt_dump, + void *data) +{ + if (cds_get_ring_log_level(RING_ID_PER_PACKET_STATS) != + WLAN_LOG_LEVEL_ACTIVE) + return; + + wlan_pkt_stats_to_logger_thread(pl_hdr, pkt_dump, data); +} diff --git a/core/utils/logging/inc/wlan_logging_sock_svc.h b/core/utils/logging/inc/wlan_logging_sock_svc.h index e2d0544f776a..1edb42cea675 100644 --- a/core/utils/logging/inc/wlan_logging_sock_svc.h +++ b/core/utils/logging/inc/wlan_logging_sock_svc.h @@ -77,4 +77,7 @@ static inline void wlan_report_log_completion(uint32_t is_fatal, } #endif /* FEATURE_WLAN_DIAG_SUPPORT */ + +void wlan_pkt_stats_to_logger_thread(void *pl_hdr, void *pkt_dump, void *data); + #endif /* WLAN_LOGGING_SOCK_SVC_H */ diff --git a/core/utils/logging/src/wlan_logging_sock_svc.c b/core/utils/logging/src/wlan_logging_sock_svc.c index 972a97867167..1385b8008fad 100644 --- a/core/utils/logging/src/wlan_logging_sock_svc.c +++ b/core/utils/logging/src/wlan_logging_sock_svc.c @@ -40,6 +40,7 @@ #include "pktlog_ac.h" #include #include "cds_utils.h" +#include "host_diag_core_log.h" #define LOGGING_TRACE(level, args ...) \ QDF_TRACE(QDF_MODULE_ID_HDD, level, ## args) @@ -49,10 +50,14 @@ #define ANI_NL_MSG_LOG_TYPE 89 #define ANI_NL_MSG_READY_IND_TYPE 90 #define MAX_LOGMSG_LENGTH 4096 +#define MAX_PKTSTATS_LENGTH 2048 +#define MAX_PKTSTATS_BUFF 16 #define HOST_LOG_DRIVER_MSG 0x001 #define HOST_LOG_PER_PKT_STATS 0x002 #define HOST_LOG_FW_FLUSH_COMPLETE 0x003 +#define DIAG_TYPE_LOGS 1 +#define PTT_MSG_DIAG_CMDS_TYPE 0x5050 struct log_msg { struct list_head node; @@ -67,6 +72,32 @@ struct log_msg { char logbuf[MAX_LOGMSG_LENGTH]; }; +/** + * struct packet_dump - This data structure contains the + * Tx/Rx packet stats + * @status: Status + * @type: Type + * @driver_ts: driver timestamp + * @fw_ts: fw timestamp + */ +struct packet_dump { + unsigned char status; + unsigned char type; + uint32_t driver_ts; + uint16_t fw_ts; +} __attribute__((__packed__)); + +/** + * struct pkt_stats_msg - This data structure contains the + * pkt stats node for link list + * @node: LinkList node + * @node: Pointer to skb + */ +struct pkt_stats_msg { + struct list_head node; + struct sk_buff *skb; +}; + struct wlan_logging { /* Log Fatal and ERROR to console */ bool log_fe_to_console; @@ -96,10 +127,18 @@ struct wlan_logging { bool is_active; /* Flush completion check */ bool is_flush_complete; + /* paramaters for pkt stats */ + struct list_head pkt_stat_free_list; + struct list_head pkt_stat_filled_list; + struct pkt_stats_msg *pkt_stats_pcur_node; + unsigned int pkt_stat_drop_cnt; + spinlock_t pkt_stats_lock; + unsigned int pkt_stats_msg_idx; }; static struct wlan_logging gwlan_logging; static struct log_msg *gplog_msg; +static struct pkt_stats_msg *gpkt_stats_buffers; /* PID of the APP to log the message */ static int gapp_pid = INVALID_PID; @@ -411,6 +450,144 @@ int wlan_log_to_user(QDF_TRACE_LEVEL log_level, char *to_be_sent, int length) return 0; } +/** + * pkt_stats_fill_headers() - This function adds headers to skb + * @skb: skb to which headers need to be added + * + * Return: 0 on success or Errno on failure + */ +static int pkt_stats_fill_headers(struct sk_buff *skb) +{ + struct host_log_pktlog_info cds_pktlog; + int cds_pkt_size = sizeof(struct host_log_pktlog_info); + tAniNlHdr msg_header; + int extra_header_len, nl_payload_len; + static int nlmsg_seq; + int diag_type; + + qdf_mem_zero(&cds_pktlog, cds_pkt_size); + cds_pktlog.version = VERSION_LOG_WLAN_PKT_LOG_INFO_C; + cds_pktlog.buf_len = skb->len; + cds_pktlog.seq_no = gwlan_logging.pkt_stats_msg_idx++; + host_diag_log_set_code(&cds_pktlog, LOG_WLAN_PKT_LOG_INFO_C); + host_diag_log_set_length(&cds_pktlog.log_hdr, skb->len + + cds_pkt_size); + + if (unlikely(skb_headroom(skb) < cds_pkt_size)) { + pr_err("VPKT [%d]: Insufficient headroom, head[%p], data[%p], req[%zu]", + __LINE__, skb->head, skb->data, sizeof(msg_header)); + return -EIO; + } + + qdf_mem_copy(skb_push(skb, cds_pkt_size), + &cds_pktlog, cds_pkt_size); + + if (unlikely(skb_headroom(skb) < sizeof(int))) { + pr_err("VPKT [%d]: Insufficient headroom, head[%p], data[%p], req[%zu]", + __LINE__, skb->head, skb->data, sizeof(int)); + return -EIO; + } + + diag_type = DIAG_TYPE_LOGS; + qdf_mem_copy(skb_push(skb, sizeof(int)), &diag_type, sizeof(int)); + + extra_header_len = sizeof(msg_header.radio) + sizeof(tAniHdr) + + sizeof(struct nlmsghdr); + nl_payload_len = extra_header_len + skb->len; + + msg_header.nlh.nlmsg_type = ANI_NL_MSG_PUMAC; + msg_header.nlh.nlmsg_len = nl_payload_len; + msg_header.nlh.nlmsg_flags = NLM_F_REQUEST; + msg_header.nlh.nlmsg_pid = 0; + msg_header.nlh.nlmsg_seq = nlmsg_seq++; + msg_header.radio = 0; + msg_header.wmsg.type = PTT_MSG_DIAG_CMDS_TYPE; + msg_header.wmsg.length = cpu_to_be16(skb->len); + + if (unlikely(skb_headroom(skb) < sizeof(msg_header))) { + pr_err("VPKT [%d]: Insufficient headroom, head[%p], data[%p], req[%zu]", + __LINE__, skb->head, skb->data, sizeof(msg_header)); + return -EIO; + } + + qdf_mem_copy(skb_push(skb, sizeof(msg_header)), &msg_header, + sizeof(msg_header)); + + return 0; +} + +/** + * pktlog_send_per_pkt_stats_to_user() - This function is used to send the per + * packet statistics to the user + * + * This function is used to send the per packet statistics to the user + * + * Return: Success if the message is posted to user + */ +int pktlog_send_per_pkt_stats_to_user(void) +{ + int ret = -1; + struct pkt_stats_msg *pstats_msg; + unsigned long flags; + struct sk_buff *skb_new = NULL; + static int rate_limit; + bool free_old_skb = false; + + while (!list_empty(&gwlan_logging.pkt_stat_filled_list) + && !gwlan_logging.exit) { + skb_new = dev_alloc_skb(MAX_PKTSTATS_LENGTH); + if (skb_new == NULL) { + if (!rate_limit) { + pr_err("%s: dev_alloc_skb() failed for msg size[%d] drop count = %u\n", + __func__, MAX_LOGMSG_LENGTH, + gwlan_logging.drop_count); + } + rate_limit = 1; + ret = -ENOMEM; + break; + } + + spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, flags); + + pstats_msg = (struct pkt_stats_msg *) + (gwlan_logging.pkt_stat_filled_list.next); + list_del_init(gwlan_logging.pkt_stat_filled_list.next); + spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, flags); + + ret = pkt_stats_fill_headers(pstats_msg->skb); + if (ret < 0) { + pr_err("%s failed to fill headers %d\n", __func__, ret); + free_old_skb = true; + goto err; + } + ret = nl_srv_bcast(pstats_msg->skb); + if (ret < 0) { + pr_info("%s: Send Failed %d drop_count = %u\n", + __func__, ret, + ++gwlan_logging.pkt_stat_drop_cnt); + } else { + ret = 0; + } +err: + /* + * Free old skb in case or error before assigning new skb + * to the free list. + */ + if (free_old_skb) + dev_kfree_skb(pstats_msg->skb); + + spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, flags); + pstats_msg->skb = skb_new; + list_add_tail(&pstats_msg->node, + &gwlan_logging.pkt_stat_free_list); + spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, flags); + ret = 0; + } + + return ret; + +} + static int send_filled_buffers_to_user(void) { int ret = -1; @@ -691,7 +868,7 @@ static int wlan_logging_proc_sock_rx_msg(struct sk_buff *skb) int wlan_logging_sock_activate_svc(int log_fe_to_console, int num_buf) { - int i = 0; + int i = 0, j, pkt_stats_size; unsigned long irq_flag; gapp_pid = INVALID_PID; @@ -720,6 +897,45 @@ int wlan_logging_sock_activate_svc(int log_fe_to_console, int num_buf) list_del_init(gwlan_logging.free_list.next); spin_unlock_irqrestore(&gwlan_logging.spin_lock, irq_flag); + /* Initialize the pktStats data structure here */ + pkt_stats_size = sizeof(struct pkt_stats_msg); + gpkt_stats_buffers = vmalloc(MAX_PKTSTATS_BUFF * pkt_stats_size); + if (!gpkt_stats_buffers) { + pr_err("%s: Could not allocate memory for Pkt stats\n", + __func__); + goto err1; + } + qdf_mem_zero(gpkt_stats_buffers, + MAX_PKTSTATS_BUFF * pkt_stats_size); + + spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, irq_flag); + gwlan_logging.pkt_stats_msg_idx = 0; + INIT_LIST_HEAD(&gwlan_logging.pkt_stat_free_list); + INIT_LIST_HEAD(&gwlan_logging.pkt_stat_filled_list); + spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, irq_flag); + + + for (i = 0; i < MAX_PKTSTATS_BUFF; i++) { + gpkt_stats_buffers[i].skb = dev_alloc_skb(MAX_PKTSTATS_LENGTH); + if (gpkt_stats_buffers[i].skb == NULL) { + pr_err("%s: Memory alloc failed for skb", __func__); + /* free previously allocated skb and return */ + for (j = 0; j < i ; j++) + dev_kfree_skb(gpkt_stats_buffers[j].skb); + goto err2; + } + spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, irq_flag); + list_add(&gpkt_stats_buffers[i].node, + &gwlan_logging.pkt_stat_free_list); + spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, irq_flag); + } + spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, irq_flag); + gwlan_logging.pkt_stats_pcur_node = (struct pkt_stats_msg *) + (gwlan_logging.pkt_stat_free_list.next); + list_del_init(gwlan_logging.pkt_stat_free_list.next); + spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, irq_flag); + /* Pkt Stats intialization done */ + init_waitqueue_head(&gwlan_logging.wait_queue); gwlan_logging.exit = false; clear_bit(HOST_LOG_DRIVER_MSG, &gwlan_logging.eventFlag); @@ -731,12 +947,7 @@ int wlan_logging_sock_activate_svc(int log_fe_to_console, int num_buf) if (IS_ERR(gwlan_logging.thread)) { pr_err("%s: Could not Create LogMsg Thread Controller", __func__); - spin_lock_irqsave(&gwlan_logging.spin_lock, irq_flag); - gwlan_logging.pcur_node = NULL; - spin_unlock_irqrestore(&gwlan_logging.spin_lock, irq_flag); - vfree(gplog_msg); - gplog_msg = NULL; - return -ENOMEM; + goto err3; } wake_up_process(gwlan_logging.thread); gwlan_logging.is_active = true; @@ -745,11 +956,31 @@ int wlan_logging_sock_activate_svc(int log_fe_to_console, int num_buf) nl_srv_register(ANI_NL_MSG_LOG, wlan_logging_proc_sock_rx_msg); return 0; + +err3: + for (i = 0; i < MAX_PKTSTATS_BUFF; i++) { + if (gpkt_stats_buffers[i].skb) + dev_kfree_skb(gpkt_stats_buffers[i].skb); + } +err2: + spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, irq_flag); + gwlan_logging.pkt_stats_pcur_node = NULL; + spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, irq_flag); + vfree(gpkt_stats_buffers); + gpkt_stats_buffers = NULL; +err1: + spin_lock_irqsave(&gwlan_logging.spin_lock, irq_flag); + gwlan_logging.pcur_node = NULL; + spin_unlock_irqrestore(&gwlan_logging.spin_lock, irq_flag); + vfree(gplog_msg); + gplog_msg = NULL; + return -ENOMEM; } int wlan_logging_sock_deactivate_svc(void) { unsigned long irq_flag; + int i = 0; if (!gplog_msg) return 0; @@ -775,14 +1006,29 @@ int wlan_logging_sock_deactivate_svc(void) vfree(gplog_msg); gplog_msg = NULL; + spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, irq_flag); + gwlan_logging.pkt_stats_pcur_node = NULL; + gwlan_logging.pkt_stats_msg_idx = 0; + gwlan_logging.pkt_stat_drop_cnt = 0; + for (i = 0; i < MAX_PKTSTATS_BUFF; i++) { + if (gpkt_stats_buffers[i].skb) + dev_kfree_skb(gpkt_stats_buffers[i].skb); + } + spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, irq_flag); + + vfree(gpkt_stats_buffers); + gpkt_stats_buffers = NULL; + return 0; } int wlan_logging_sock_init_svc(void) { spin_lock_init(&gwlan_logging.spin_lock); + spin_lock_init(&gwlan_logging.pkt_stats_lock); gapp_pid = INVALID_PID; gwlan_logging.pcur_node = NULL; + gwlan_logging.pkt_stats_pcur_node = NULL; return 0; } @@ -790,6 +1036,7 @@ int wlan_logging_sock_init_svc(void) int wlan_logging_sock_deinit_svc(void) { gwlan_logging.pcur_node = NULL; + gwlan_logging.pkt_stats_pcur_node = NULL; gapp_pid = INVALID_PID; return 0; @@ -867,4 +1114,127 @@ void wlan_flush_host_logs_for_fatal(void) } } +/** + * wlan_get_pkt_stats_free_node() - Get the free node for pkt stats + * + * This function is used to get the free node for pkt stats from + * free list/filles list + * + * Return: int + * + */ +static int wlan_get_pkt_stats_free_node(void) +{ + int ret = 0; + + list_add_tail(&gwlan_logging.pkt_stats_pcur_node->node, + &gwlan_logging.pkt_stat_filled_list); + + if (!list_empty(&gwlan_logging.pkt_stat_free_list)) { + /* Get buffer from free list */ + gwlan_logging.pkt_stats_pcur_node = + (struct pkt_stats_msg *)(gwlan_logging.pkt_stat_free_list.next); + list_del_init(gwlan_logging.pkt_stat_free_list.next); + } else if (!list_empty(&gwlan_logging.pkt_stat_filled_list)) { + /* Get buffer from filled list. This condition will drop the + * packet from being indicated to app + */ + gwlan_logging.pkt_stats_pcur_node = + (struct pkt_stats_msg *) + (gwlan_logging.pkt_stat_filled_list.next); + ++gwlan_logging.pkt_stat_drop_cnt; + /* print every 64th drop count */ + if (cds_is_multicast_logging() && + (!(gwlan_logging.pkt_stat_drop_cnt % 0x40))) { + pr_err("%s: drop_count = %u\n", + __func__, gwlan_logging.pkt_stat_drop_cnt); + } + list_del_init(gwlan_logging.pkt_stat_filled_list.next); + ret = 1; + } + + /* Reset the skb values, essential if dequeued from filled list */ + skb_trim(gwlan_logging.pkt_stats_pcur_node->skb, 0); + return ret; +} + +/** + * wlan_pkt_stats_to_logger_thread() - Add the pkt stats to SKB + * @pl_hdr: Pointer to pl_hdr + * @pkt_dump: Pointer to pkt_dump + * @data: Pointer to data + * + * This function adds the pktstats hdr and data to current + * skb node of free list. + * + * Return: None + */ +void wlan_pkt_stats_to_logger_thread(void *pl_hdr, void *pkt_dump, void *data) +{ + struct ath_pktlog_hdr *pktlog_hdr; + struct packet_dump *pkt_stats_dump; + int total_stats_len = 0; + bool wake_up_thread = false; + unsigned long flags; + struct sk_buff *ptr; + int hdr_size; + + pktlog_hdr = (struct ath_pktlog_hdr *)pl_hdr; + + if (pktlog_hdr == NULL) { + pr_err("%s : Invalid pkt_stats_header\n", __func__); + return; + } + + pkt_stats_dump = (struct packet_dump *)pkt_dump; + if (pkt_stats_dump) + total_stats_len = sizeof(struct ath_pktlog_hdr) + + pktlog_hdr->size + + sizeof(struct packet_dump); + else + total_stats_len = sizeof(struct ath_pktlog_hdr) + + pktlog_hdr->size; + + spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, flags); + + if (!gwlan_logging.pkt_stats_pcur_node) { + spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, flags); + return; + } + + /* Check if we can accommodate more log into current node/buffer */ + hdr_size = sizeof(struct host_log_pktlog_info) + + sizeof(tAniNlHdr); + if ((total_stats_len + hdr_size) >= + skb_tailroom(gwlan_logging.pkt_stats_pcur_node->skb)) { + wake_up_thread = true; + wlan_get_pkt_stats_free_node(); + } + + ptr = gwlan_logging.pkt_stats_pcur_node->skb; + qdf_mem_copy(skb_put(ptr, + sizeof(struct ath_pktlog_hdr)), + pktlog_hdr, + sizeof(struct ath_pktlog_hdr)); + + if (pkt_stats_dump) + qdf_mem_copy(skb_put(ptr, + sizeof(struct packet_dump)), + pkt_stats_dump, + sizeof(struct packet_dump)); + + qdf_mem_copy(skb_put(ptr, + pktlog_hdr->size), + data, pktlog_hdr->size); + + spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, flags); + + /* Wakeup logger thread */ + if (true == wake_up_thread) { + set_bit(HOST_LOG_PER_PKT_STATS, &gwlan_logging.eventFlag); + wake_up_interruptible(&gwlan_logging.wait_queue); + } +} + + #endif /* WLAN_LOGGING_SOCK_SVC_ENABLE */ diff --git a/core/utils/pktlog/linux_ac.c b/core/utils/pktlog/linux_ac.c index 85d95568257f..8d8d6cc31d7d 100644 --- a/core/utils/pktlog/linux_ac.c +++ b/core/utils/pktlog/linux_ac.c @@ -543,138 +543,6 @@ static int pktlog_release(struct inode *i, struct file *f) #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #endif -/** - * pktlog_send_per_pkt_stats_to_user() - This function is used to send the per - * packet statistics to the user - * - * This function is used to send the per packet statistics to the user - * - * Return: Success if the message is posted to user - * - */ -int pktlog_send_per_pkt_stats_to_user(void) -{ - ssize_t ret_val; - struct host_log_pktlog_info *pktlog = NULL; - ol_txrx_pdev_handle txrx_pdev = - cds_get_context(QDF_MODULE_ID_TXRX); - struct ath_pktlog_info *pl_info; - bool read_complete; - uint32_t num_bytes_read = 0; - - /* - * We do not want to do this packet stats related processing when - * packet log tool is run. i.e., we want this processing to be - * done only when start logging command of packet stats is initiated. - */ - if ((cds_get_ring_log_level(RING_ID_PER_PACKET_STATS) < - WLAN_LOG_LEVEL_ACTIVE)) { - printk(PKTLOG_TAG " %s: Shouldnt happen. Logging not started\n", - __func__); - return -EINVAL; - } - - if (!txrx_pdev) { - printk(PKTLOG_TAG " %s: Invalid TxRx handle\n", __func__); - return -EINVAL; - } - - pl_info = txrx_pdev->pl_dev->pl_info; - - if (!pl_info || !pl_info->buf) { - printk(PKTLOG_TAG " %s: Shouldnt happen. pl_info is invalid\n", - __func__); - return -EINVAL; - } - - if (pl_info->buf->rd_offset == -1) { - printk(PKTLOG_TAG " %s: Shouldnt happen. No write yet!\n", - __func__); - return -EINVAL; - } - - do { - pktlog = (struct host_log_pktlog_info *) - qdf_mem_malloc(sizeof(struct host_log_pktlog_info) + - VOS_LOG_PKT_LOG_SIZE); - if (!pktlog) { - printk(PKTLOG_TAG " %s: Memory allocation failed\n", - __func__); - return -ENOMEM; - } - - host_diag_log_set_code(pktlog, LOG_WLAN_PKT_LOG_INFO_C); - - pktlog->buf_len = 0; - pktlog->version = VERSION_LOG_WLAN_PKT_LOG_INFO_C; - - /* - * @ret_val: ret_val gives the actual data read from the buffer. - * When there is no more data to read, this value will be zero - * @offset: offset in the ring buffer. Initially it is zero and - * is incremented during every read based on number of bytes - * read - */ - ret_val = pktlog_read_proc_entry(pktlog->buf, - VOS_LOG_PKT_LOG_SIZE, - &pl_info->buf->offset, - pl_info, &read_complete); - if (ret_val) { - int index = 0; - struct ath_pktlog_hdr *temp; - while (1) { - if ((ret_val - index) < - sizeof(struct ath_pktlog_hdr)) { - /* Partial header */ - pl_info->buf->offset -= - (ret_val - index); - ret_val = index; - break; - } - temp = (struct ath_pktlog_hdr *) - (pktlog->buf + index); - if ((ret_val - index) < (temp->size + - sizeof(struct ath_pktlog_hdr))) { - /* Partial record payload */ - pl_info->buf->offset -= - (ret_val - index); - ret_val = index; - break; - } - index += temp->size + - sizeof(struct ath_pktlog_hdr); - } - } - - /* Data will include message index/seq number and buf length */ - pktlog->buf_len = ret_val; - if (ret_val) { - host_diag_log_set_length(pktlog, ret_val + - sizeof(struct host_log_pktlog_info)); - pktlog->seq_no = pl_info->buf->msg_index++; - WLAN_HOST_DIAG_LOG_REPORT(pktlog); - } else { - qdf_mem_free(pktlog); - } - num_bytes_read += ret_val; - - /* - * If the logger thread is scheduled late and the proc entry - * is having too much data to be read, we might start to starve - * the other threads if we continuously keep reading the proc - * entry. So, having a threshold to break this read from proc - * entry. - */ - if (num_bytes_read > HOST_LOG_PKT_LOG_THRESHOLD) { - read_complete = true; - printk(PKTLOG_TAG " %s: Break read to prevent starve\n", - __func__); - } - } while (read_complete == false); - - return 0; -} - /** * pktlog_read_proc_entry() - This function is used to read data from the * proc entry into the readers buffer diff --git a/core/utils/pktlog/pktlog_internal.c b/core/utils/pktlog/pktlog_internal.c index 27549c7cfb05..0e58acf4c802 100644 --- a/core/utils/pktlog/pktlog_internal.c +++ b/core/utils/pktlog/pktlog_internal.c @@ -206,15 +206,6 @@ char *pktlog_getbuf(struct ol_pktlog_dev_t *pl_dev, PKTLOG_UNLOCK(pl_info); } - /* - * We do not want to do this packet stats related processing when - * packet log tool is run. i.e., we want this processing to be - * done only when start logging command of packet stats is initiated. - */ - if (cds_get_ring_log_level(RING_ID_PER_PACKET_STATS) == - WLAN_LOG_LEVEL_ACTIVE) - pktlog_check_threshold(pl_info, log_size); - return plarg.buf; } @@ -426,6 +417,9 @@ A_STATUS process_tx_info(struct ol_txrx_pdev_t *txrx_pdev, void *data) ((void *)data + sizeof(struct ath_pktlog_hdr)), pl_hdr.size); + pl_hdr.size = log_size; + cds_pkt_stats_to_logger_thread(&pl_hdr, NULL, + txdesc_hdr_ctl); } if (pl_hdr.log_type == PKTLOG_TYPE_TX_STAT) { @@ -439,6 +433,8 @@ A_STATUS process_tx_info(struct ol_txrx_pdev_t *txrx_pdev, void *data) qdf_mem_copy(txstat_log.ds_status, ((void *)data + sizeof(struct ath_pktlog_hdr)), pl_hdr.size); + cds_pkt_stats_to_logger_thread(&pl_hdr, NULL, + txstat_log.ds_status); } return A_OK; } @@ -544,6 +540,9 @@ A_STATUS process_tx_info(struct ol_txrx_pdev_t *txrx_pdev, void *data) qdf_assert(txctl_log.txdesc_hdr_ctl); qdf_mem_copy(txctl_log.txdesc_hdr_ctl, &txctl_log.priv, sizeof(txctl_log.priv)); + pl_hdr.size = log_size; + cds_pkt_stats_to_logger_thread(&pl_hdr, NULL, + txctl_log.txdesc_hdr_ctl); /* Add Protocol information and HT specific information */ } @@ -557,6 +556,8 @@ A_STATUS process_tx_info(struct ol_txrx_pdev_t *txrx_pdev, void *data) qdf_mem_copy(txstat_log.ds_status, ((void *)data + sizeof(struct ath_pktlog_hdr)), pl_hdr.size); + cds_pkt_stats_to_logger_thread(&pl_hdr, NULL, + txstat_log.ds_status); } if (pl_hdr.log_type == PKTLOG_TYPE_TX_MSDU_ID) { @@ -576,6 +577,8 @@ A_STATUS process_tx_info(struct ol_txrx_pdev_t *txrx_pdev, void *data) sizeof(pl_msdu_info.priv.msdu_id_info)); qdf_mem_copy(pl_msdu_info.ath_msdu_info, &pl_msdu_info.priv, sizeof(pl_msdu_info.priv)); + cds_pkt_stats_to_logger_thread(&pl_hdr, NULL, + pl_msdu_info.ath_msdu_info); } return A_OK; } @@ -635,6 +638,8 @@ A_STATUS process_rx_info_remote(void *pdev, void *data) log_size, &pl_hdr); qdf_mem_copy(rxstat_log.rx_desc, (void *)rx_desc + sizeof(struct htt_host_fw_desc_base), pl_hdr.size); + cds_pkt_stats_to_logger_thread(&pl_hdr, NULL, + rxstat_log.rx_desc); msdu = qdf_nbuf_next(msdu); } return A_OK; @@ -684,6 +689,7 @@ A_STATUS process_rx_info(void *pdev, void *data) qdf_mem_copy(rxstat_log.rx_desc, (void *)data + sizeof(struct ath_pktlog_hdr), pl_hdr.size); + cds_pkt_stats_to_logger_thread(&pl_hdr, NULL, rxstat_log.rx_desc); return A_OK; } @@ -748,6 +754,7 @@ A_STATUS process_rate_find(void *pdev, void *data) qdf_mem_copy(rcf_log.rcFind, ((char *)data + sizeof(struct ath_pktlog_hdr)), pl_hdr.size); + cds_pkt_stats_to_logger_thread(&pl_hdr, NULL, rcf_log.rcFind); return A_OK; } @@ -880,6 +887,7 @@ A_STATUS process_rate_update(void *pdev, void *data) qdf_mem_copy(rcu_log.txRateCtrl, ((char *)data + sizeof(struct ath_pktlog_hdr)), pl_hdr.size); + cds_pkt_stats_to_logger_thread(&pl_hdr, NULL, rcu_log.txRateCtrl); return A_OK; } #endif /*REMOVE_PKT_LOG */ From 0527e8f6d22fa7d2220162d0000b8400d7e267c3 Mon Sep 17 00:00:00 2001 From: Himanshu Agarwal Date: Thu, 11 Aug 2016 14:58:34 +0530 Subject: [PATCH 059/119] qcacld-3.0: Dump Tx/Rx packets during connection Propagation from qcacld-2.0 to qcacld-3.0. Add changes to send 32 tx/rx packets to HAL layer during connection. This can help in debugging connection related issues. Change-Id: Icd08475c3f81aa182c902b8e8defbdb904c5509d CRs-Fixed: 959645 (cherry picked from commit 45416eeee7dde24f1456e0c2b667e8147742f054) --- core/dp/htt/htt_rx.c | 59 ++++ core/dp/htt/htt_types.h | 5 + core/dp/ol/inc/ol_htt_api.h | 6 + core/dp/ol/inc/ol_txrx_api.h | 8 +- core/dp/txrx/ol_rx.c | 46 +++ core/dp/txrx/ol_tx_desc.c | 12 +- core/dp/txrx/ol_tx_send.c | 65 +++- core/dp/txrx/ol_txrx.c | 3 + core/dp/txrx/ol_txrx_types.h | 8 +- core/hdd/src/wlan_hdd_assoc.c | 6 + core/hdd/src/wlan_hdd_power.c | 5 + core/sme/inc/csr_api.h | 1 + core/sme/inc/csr_internal.h | 1 + core/sme/src/csr/csr_api_roam.c | 87 ++++++ .../utils/logging/inc/wlan_logging_sock_svc.h | 3 + .../utils/logging/src/wlan_logging_sock_svc.c | 283 +++++++++++++++++- core/wma/inc/wma.h | 11 + core/wma/src/wma_data.c | 1 + core/wma/src/wma_mgmt.c | 60 ++++ uapi/linux/pktlog_ac_fmt.h | 114 ++++++- 20 files changed, 752 insertions(+), 32 deletions(-) diff --git a/core/dp/htt/htt_rx.c b/core/dp/htt/htt_rx.c index 8a9e9fa5092f..62a293dc0e1d 100644 --- a/core/dp/htt/htt_rx.c +++ b/core/dp/htt/htt_rx.c @@ -60,6 +60,7 @@ #include #include #endif +#include #ifdef HTT_DEBUG_DATA #define HTT_PKT_DUMP(x) x @@ -1998,6 +1999,7 @@ htt_rx_amsdu_rx_in_order_pop_ll(htt_pdev_handle pdev, uint8_t offload_ind, frag_ind; struct htt_host_rx_desc_base *rx_desc; uint8_t peer_id; + enum rx_pkt_fate status = RX_PKT_FATE_SUCCESS; HTT_ASSERT1(htt_rx_in_order_ring_elems(pdev) != 0); @@ -2083,6 +2085,15 @@ htt_rx_amsdu_rx_in_order_pop_ll(htt_pdev_handle pdev, msdu_count--; + /* calling callback function for packet logging */ + if (pdev->rx_pkt_dump_cb) { + if (qdf_unlikely((*((u_int8_t *) + &rx_desc->fw_desc.u.val)) & + FW_RX_DESC_ANY_ERR_M)) + status = RX_PKT_FATE_FW_DROP_INVALID; + pdev->rx_pkt_dump_cb(msdu, peer_id, status); + } + if (qdf_unlikely((*((u_int8_t *) &rx_desc->fw_desc.u.val)) & FW_RX_DESC_ANY_ERR_M)) { uint8_t tid = @@ -3536,3 +3547,51 @@ int htt_rx_ipa_uc_detach(struct htt_pdev_t *pdev) return 0; } #endif /* IPA_OFFLOAD */ + +/** + * htt_register_rx_pkt_dump_callback() - registers callback to + * get rx pkt status and call callback to do rx packet dump + * + * @pdev: htt pdev handle + * @callback: callback to get rx pkt status and + * call callback to do rx packet dump + * + * This function is used to register the callback to get + * rx pkt status and call callback to do rx packet dump + * + * Return: None + * + */ +void htt_register_rx_pkt_dump_callback(struct htt_pdev_t *pdev, + tp_rx_pkt_dump_cb callback) +{ + if (!pdev) { + qdf_print("%s: htt pdev is NULL, rx packet status callback register unsuccessful\n", + __func__); + return; + } + pdev->rx_pkt_dump_cb = callback; +} + +/** + * htt_deregister_rx_pkt_dump_callback() - deregisters callback to + * get rx pkt status and call callback to do rx packet dump + * + * @pdev: htt pdev handle + * + * This function is used to deregister the callback to get + * rx pkt status and call callback to do rx packet dump + * + * Return: None + * + */ +void htt_deregister_rx_pkt_dump_callback(struct htt_pdev_t *pdev) +{ + if (!pdev) { + qdf_print("%s: htt pdev is NULL, rx packet status callback deregister unsuccessful\n", + __func__); + return; + } + pdev->rx_pkt_dump_cb = NULL; +} + diff --git a/core/dp/htt/htt_types.h b/core/dp/htt/htt_types.h index 9c67355e74a1..82b3d97bd385 100644 --- a/core/dp/htt/htt_types.h +++ b/core/dp/htt/htt_types.h @@ -35,6 +35,7 @@ #include /* qdf_atomic_inc */ #include /* qdf_nbuf_t */ #include /* HTC_PACKET */ +#include #define DEBUG_DMA_DONE @@ -412,6 +413,10 @@ struct htt_pdev_t { struct rx_buf_debug *rx_buff_list; int rx_buff_index; #endif + + /* callback function for packetdump */ + tp_rx_pkt_dump_cb rx_pkt_dump_cb; + struct mon_channel mon_ch_info; }; diff --git a/core/dp/ol/inc/ol_htt_api.h b/core/dp/ol/inc/ol_htt_api.h index 21da2649125c..311de8896708 100644 --- a/core/dp/ol/inc/ol_htt_api.h +++ b/core/dp/ol/inc/ol_htt_api.h @@ -384,5 +384,11 @@ static inline void htt_clear_bundle_stats(struct htt_pdev_t *pdev) #endif void htt_mark_first_wakeup_packet(htt_pdev_handle pdev, uint8_t value); +typedef void (*tp_rx_pkt_dump_cb)(qdf_nbuf_t msdu, uint8_t peer_id, + uint8_t status); +void htt_register_rx_pkt_dump_callback(struct htt_pdev_t *pdev, + tp_rx_pkt_dump_cb ol_rx_pkt_dump_call); +void htt_deregister_rx_pkt_dump_callback(struct htt_pdev_t *pdev); +void ol_rx_pkt_dump_call(qdf_nbuf_t msdu, uint8_t peer_id, uint8_t status); #endif /* _OL_HTT_API__H_ */ diff --git a/core/dp/ol/inc/ol_txrx_api.h b/core/dp/ol/inc/ol_txrx_api.h index f350ecfa7d73..b0d56ee1df62 100644 --- a/core/dp/ol/inc/ol_txrx_api.h +++ b/core/dp/ol/inc/ol_txrx_api.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2014, 2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -60,4 +60,10 @@ enum ol_sec_type { ol_sec_type_types }; +typedef void (*tp_ol_packetdump_cb)(qdf_nbuf_t netbuf, + uint8_t status, uint8_t vdev_id, uint8_t type); +void ol_register_packetdump_callback(tp_ol_packetdump_cb ol_tx_packetdump_cb, + tp_ol_packetdump_cb ol_rx_packetdump_cb); +void ol_deregister_packetdump_callback(void); + #endif /* _OL_TXRX_API__H_ */ diff --git a/core/dp/txrx/ol_rx.c b/core/dp/txrx/ol_rx.c index 9268bbe9bb7e..3591c617ad02 100644 --- a/core/dp/txrx/ol_rx.c +++ b/core/dp/txrx/ol_rx.c @@ -58,6 +58,7 @@ #include #include #include +#include "pktlog_ac_fmt.h" #include @@ -1400,6 +1401,51 @@ ol_rx_in_order_indication_handler(ol_txrx_pdev_handle pdev, peer->rx_opt_proc(vdev, peer, tid, head_msdu); } +/** + * ol_rx_pkt_dump_call() - updates status and + * calls packetdump callback to log rx packet + * + * @msdu: rx packet + * @peer_id: peer id + * @status: status of rx packet + * + * This function is used to update the status of rx packet + * and then calls packetdump callback to log that packet. + * + * Return: None + * + */ +void ol_rx_pkt_dump_call( + qdf_nbuf_t msdu, + uint8_t peer_id, + uint8_t status) +{ + v_CONTEXT_t vos_context; + ol_txrx_pdev_handle pdev; + struct ol_txrx_peer_t *peer = NULL; + + vos_context = cds_get_global_context(); + pdev = cds_get_context(QDF_MODULE_ID_TXRX); + + if (!pdev) { + TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, + "%s: pdev is NULL", __func__); + return; + } + + if (pdev->ol_rx_packetdump_cb) { + peer = ol_txrx_peer_find_by_id(pdev, peer_id); + if (!peer) { + TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, + "%s: peer with peer id %d is NULL", __func__, + peer_id); + return; + } + pdev->ol_rx_packetdump_cb(msdu, status, peer->vdev->vdev_id, + RX_DATA_PKT); + } +} + /* the msdu_list passed here must be NULL terminated */ void ol_rx_in_order_deliver(struct ol_txrx_vdev_t *vdev, diff --git a/core/dp/txrx/ol_tx_desc.c b/core/dp/txrx/ol_tx_desc.c index 5294c8a242fd..dbaef89c7cb8 100644 --- a/core/dp/txrx/ol_tx_desc.c +++ b/core/dp/txrx/ol_tx_desc.c @@ -105,8 +105,6 @@ static inline void ol_tx_desc_reset_timestamp(struct ol_tx_desc_t *tx_desc) } #endif -#ifdef CONFIG_HL_SUPPORT - /** * ol_tx_desc_vdev_update() - vedv assign. * @tx_desc: tx descriptor pointer @@ -120,15 +118,6 @@ ol_tx_desc_vdev_update(struct ol_tx_desc_t *tx_desc, { tx_desc->vdev = vdev; } -#else - -static inline void -ol_tx_desc_vdev_update(struct ol_tx_desc_t *tx_desc, - struct ol_txrx_vdev_t *vdev) -{ - return; -} -#endif #ifdef CONFIG_PER_VDEV_TX_DESC_POOL @@ -235,6 +224,7 @@ struct ol_tx_desc_t *ol_tx_desc_alloc(struct ol_txrx_pdev_t *pdev, } ol_tx_desc_sanity_checks(pdev, tx_desc); ol_tx_desc_compute_delay(tx_desc); + ol_tx_desc_vdev_update(tx_desc, vdev); } else { pool->pkt_drop_no_desc++; qdf_spin_unlock_bh(&pool->flow_pool_lock); diff --git a/core/dp/txrx/ol_tx_send.c b/core/dp/txrx/ol_tx_send.c index 4d30adf3089a..a90bf86d4ff9 100644 --- a/core/dp/txrx/ol_tx_send.c +++ b/core/dp/txrx/ol_tx_send.c @@ -60,7 +60,7 @@ #endif #include #include - +#include #ifdef TX_CREDIT_RECLAIM_SUPPORT @@ -552,6 +552,11 @@ ol_tx_completion_handler(ol_txrx_pdev_handle pdev, tx_desc->status = status; netbuf = tx_desc->netbuf; QDF_NBUF_UPDATE_TX_PKT_COUNT(netbuf, QDF_NBUF_TX_PKT_FREE); + + if (pdev->ol_tx_packetdump_cb) + pdev->ol_tx_packetdump_cb(netbuf, status, + tx_desc->vdev->vdev_id, TX_DATA_PKT); + DPTRACE(qdf_dp_trace_ptr(netbuf, QDF_DP_TRACE_FREE_PACKET_PTR_RECORD, qdf_nbuf_data_addr(netbuf), @@ -766,6 +771,10 @@ ol_tx_single_completion_handler(ol_txrx_pdev_handle pdev, /* Do one shot statistics */ TXRX_STATS_UPDATE_TX_STATS(pdev, status, 1, qdf_nbuf_len(netbuf)); + if (pdev->ol_tx_packetdump_cb) + pdev->ol_tx_packetdump_cb(netbuf, status, + tx_desc->vdev->vdev_id, TX_MGMT_PKT); + if (OL_TX_DESC_NO_REFS(tx_desc)) { ol_tx_desc_frame_free_nonstd(pdev, tx_desc, status != htt_tx_status_ok); @@ -1168,3 +1177,57 @@ ol_tx_delay_compute(struct ol_txrx_pdev_t *pdev, } #endif /* QCA_COMPUTE_TX_DELAY */ + +/** + * ol_register_packetdump_callback() - registers + * tx data packet, tx mgmt. packet and rx data packet + * dump callback handler. + * + * @ol_tx_packetdump_cb: tx packetdump cb + * @ol_rx_packetdump_cb: rx packetdump cb + * + * This function is used to register tx data pkt, tx mgmt. + * pkt and rx data pkt dump callback + * + * Return: None + * + */ +void ol_register_packetdump_callback(tp_ol_packetdump_cb ol_tx_packetdump_cb, + tp_ol_packetdump_cb ol_rx_packetdump_cb) +{ + ol_txrx_pdev_handle pdev = cds_get_context(QDF_MODULE_ID_TXRX); + + if (!pdev) { + TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, + "%s: pdev is NULL", __func__); + return; + } + + pdev->ol_tx_packetdump_cb = ol_tx_packetdump_cb; + pdev->ol_rx_packetdump_cb = ol_rx_packetdump_cb; +} + +/** + * ol_deregister_packetdump_callback() - deregidters + * tx data packet, tx mgmt. packet and rx data packet + * dump callback handler + * + * This function is used to deregidter tx data pkt., + * tx mgmt. pkt and rx data pkt. dump callback + * + * Return: None + * + */ +void ol_deregister_packetdump_callback(void) +{ + ol_txrx_pdev_handle pdev = cds_get_context(QDF_MODULE_ID_TXRX); + + if (!pdev) { + TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, + "%s: pdev is NULL", __func__); + return; + } + + pdev->ol_tx_packetdump_cb = NULL; + pdev->ol_rx_packetdump_cb = NULL; +} diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c index f08e60c0e87e..0ed97844c07e 100644 --- a/core/dp/txrx/ol_txrx.c +++ b/core/dp/txrx/ol_txrx.c @@ -1013,6 +1013,8 @@ ol_txrx_pdev_attach(ol_pdev_handle ctrl_pdev, if (!pdev->htt_pdev) goto fail3; + htt_register_rx_pkt_dump_callback(pdev->htt_pdev, + ol_rx_pkt_dump_call); return pdev; fail3: @@ -1631,6 +1633,7 @@ void ol_txrx_pdev_detach(ol_txrx_pdev_handle pdev, int force) ol_txrx_peer_find_hash_erase(pdev); } + htt_deregister_rx_pkt_dump_callback(pdev->htt_pdev); ol_tx_deregister_flow_control(pdev); /* Stop the communication between HTT and target at first */ htt_detach_target(pdev->htt_pdev); diff --git a/core/dp/txrx/ol_txrx_types.h b/core/dp/txrx/ol_txrx_types.h index ee1bfb309a37..db2ccfd72eaf 100644 --- a/core/dp/txrx/ol_txrx_types.h +++ b/core/dp/txrx/ol_txrx_types.h @@ -187,9 +187,9 @@ struct ol_tx_desc_t { * This field is filled in with the ol_tx_frm_type enum. */ uint8_t pkt_type; -#if defined(CONFIG_HL_SUPPORT) + struct ol_txrx_vdev_t *vdev; -#endif + void *txq; #ifdef QCA_SUPPORT_SW_TXRX_ENCAP @@ -663,6 +663,10 @@ struct ol_txrx_pdev_t { } callbacks[OL_TXRX_MGMT_NUM_TYPES]; } tx_mgmt; + /* packetdump callback functions */ + tp_ol_packetdump_cb ol_tx_packetdump_cb; + tp_ol_packetdump_cb ol_rx_packetdump_cb; + struct { uint16_t pool_size; uint16_t num_free; diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index 341ef18ea1ab..84b87a32d1ce 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -63,6 +63,7 @@ #include "cdp_txrx_flow_ctrl_legacy.h" #include "cdp_txrx_peer_ops.h" #include "wlan_hdd_napi.h" +#include /* These are needed to recognize WPA and RSN suite types */ #define HDD_WPA_OUI_SIZE 4 @@ -1537,6 +1538,8 @@ static QDF_STATUS hdd_dis_connect_handler(hdd_adapter_t *pAdapter, hdd_clear_roam_profile_ie(pAdapter); hdd_wmm_init(pAdapter); + hdd_info("Invoking packetdump deregistration API"); + wlan_deregister_txrx_packetdump(); /* indicate 'disconnect' status to wpa_supplicant... */ hdd_send_association_event(dev, pRoamInfo); @@ -2800,6 +2803,9 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, MAC_ADDR_ARRAY(pWextState->req_bssId.bytes), roamResult, roamStatus); + hdd_err("Invoking packetdump deregistration API"); + wlan_deregister_txrx_packetdump(); + /* inform association failure event to nl80211 */ if (eCSR_ROAM_RESULT_ASSOC_FAIL_CON_CHANNEL == roamResult) { diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index 380083814306..fb4e58880e4d 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -76,6 +76,7 @@ #include "cdp_txrx_flow_ctrl_v2.h" #include "pld_common.h" #include "wlan_hdd_driver_ops.h" +#include /* Preprocessor definitions and constants */ #define HDD_SSR_BRING_UP_TIME 30000 @@ -1455,6 +1456,10 @@ QDF_STATUS hdd_wlan_shutdown(void) } cds_clear_concurrent_session_count(); + + hdd_info("Invoking packetdump deregistration API"); + wlan_deregister_txrx_packetdump(); + hdd_cleanup_scan_queue(pHddCtx); hdd_reset_all_adapters(pHddCtx); diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 1d619eb78221..4cf951f67506 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1756,5 +1756,6 @@ static inline void csr_roam_fill_tdls_info(tpAniSirGlobal mac_ctx, tCsrRoamInfo tpSirSmeJoinRsp join_rsp) {} #endif +void csr_packetdump_timer_stop(void); #endif diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index 89bf7b20a3e9..a9e1896c1641 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -1046,6 +1046,7 @@ typedef struct tagCsrRoamStruct { uint32_t deauthRspStatus; uint8_t *pReassocResp; /* reassociation response from new AP */ uint16_t reassocRespLen; /* length of reassociation response */ + qdf_mc_timer_t packetdump_timer; } tCsrRoamStruct; #define GET_NEXT_ROAM_ID(pRoamStruct) (((pRoamStruct)->nextRoamId + 1 == 0) ? \ diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 91103f3e8e5e..1edcd0b5332b 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -57,6 +57,7 @@ #include "cds_concurrency.h" #include "sme_nan_datapath.h" #include "pld_common.h" +#include #define MAX_PWR_FCC_CHAN_12 8 #define MAX_PWR_FCC_CHAN_13 2 @@ -85,6 +86,10 @@ #define MAX_CB_VALUE_IN_INI (2) #define MAX_SOCIAL_CHANNELS 3 + +/* packet dump timer duration of 60 secs */ +#define PKT_DUMP_TIMER_DURATION 60 + /* Choose the largest possible value that can be accomodates in 8 bit signed */ /* variable. */ #define SNR_HACK_BMPS (127) @@ -960,6 +965,58 @@ void csr_set_global_cfgs(tpAniSirGlobal pMac) csr_set_default_dot11_mode(pMac); } +/** + * csr_packetdump_timer_handler() - packet dump timer + * handler + * @pv: user data + * + * This function is used to handle packet dump timer + * + * Return: None + * + */ +static void csr_packetdump_timer_handler(void *pv) +{ + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO, + "%s Invoking packetdump deregistration API", __func__); + wlan_deregister_txrx_packetdump(); +} + +/** + * csr_packetdump_timer_stop() - stops packet dump timer + * + * This function is used to stop packet dump timer + * + * Return: None + * + */ +void csr_packetdump_timer_stop(void) +{ + QDF_STATUS status; + tHalHandle hal; + tpAniSirGlobal mac; + v_CONTEXT_t vos_ctx_ptr; + + /* get the global voss context */ + vos_ctx_ptr = cds_get_global_context(); + if (vos_ctx_ptr == NULL) { + QDF_ASSERT(0); + return; + } + + hal = cds_get_context(QDF_MODULE_ID_SME); + if (hal == NULL) { + QDF_ASSERT(0); + return; + } + + mac = PMAC_STRUCT(hal); + status = qdf_mc_timer_stop(&mac->roam.packetdump_timer); + if (!QDF_IS_STATUS_SUCCESS(status)) { + sms_log(mac, LOGE, FL("cannot stop packetdump timer")); + } +} + QDF_STATUS csr_roam_open(tpAniSirGlobal pMac) { QDF_STATUS status = QDF_STATUS_SUCCESS; @@ -986,6 +1043,14 @@ QDF_STATUS csr_roam_open(tpAniSirGlobal pMac) ("cannot allocate memory for WaitForKey time out timer")); break; } + status = qdf_mc_timer_init(&pMac->roam.packetdump_timer, + QDF_TIMER_TYPE_SW, csr_packetdump_timer_handler, + pMac); + if (!QDF_IS_STATUS_SUCCESS(status)) { + sms_log(pMac, LOGE, + FL("cannot allocate memory for packetdump timer")); + break; + } status = qdf_mc_timer_init(&pMac->roam.tlStatsReqInfo.hTlStatsTimer, QDF_TIMER_TYPE_SW, @@ -1010,6 +1075,8 @@ QDF_STATUS csr_roam_close(tpAniSirGlobal pMac) qdf_mc_timer_destroy(&pMac->roam.hTimerWaitForKey); qdf_mc_timer_stop(&pMac->roam.tlStatsReqInfo.hTlStatsTimer); qdf_mc_timer_destroy(&pMac->roam.tlStatsReqInfo.hTlStatsTimer); + qdf_mc_timer_stop(&pMac->roam.packetdump_timer); + qdf_mc_timer_destroy(&pMac->roam.packetdump_timer); return QDF_STATUS_SUCCESS; } @@ -13762,6 +13829,7 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, uint8_t ese_config = 0; tpCsrNeighborRoamControlInfo neigh_roam_info; uint32_t value = 0, value1 = 0; + QDF_STATUS packetdump_timer_status; if (!pSession) { sms_log(pMac, LOGE, FL(" session %d not found "), sessionId); @@ -14413,6 +14481,25 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, csr_join_req = NULL; break; } else { + if (pProfile->csrPersona == QDF_STA_MODE) { + sms_log(pMac, LOG1, + FL(" Invoking packetdump register API")); + wlan_register_txrx_packetdump(); + packetdump_timer_status = + qdf_mc_timer_start( + &pMac->roam.packetdump_timer, + (PKT_DUMP_TIMER_DURATION * + QDF_MC_TIMER_TO_SEC_UNIT)/ + QDF_MC_TIMER_TO_MS_UNIT); + if (!QDF_IS_STATUS_SUCCESS( + packetdump_timer_status)) { + sms_log(pMac, LOGE, + FL("cannot start packetdump timer")); + sms_log(pMac, LOGE, + FL("packetdump_timer_status: %d"), + packetdump_timer_status); + } + } #ifndef WLAN_MDM_CODE_REDUCTION_OPT if (eWNI_SME_JOIN_REQ == messageType) { /* Notify QoS module that join happening */ diff --git a/core/utils/logging/inc/wlan_logging_sock_svc.h b/core/utils/logging/inc/wlan_logging_sock_svc.h index 1edb42cea675..af85ab694352 100644 --- a/core/utils/logging/inc/wlan_logging_sock_svc.h +++ b/core/utils/logging/inc/wlan_logging_sock_svc.h @@ -80,4 +80,7 @@ static inline void wlan_report_log_completion(uint32_t is_fatal, void wlan_pkt_stats_to_logger_thread(void *pl_hdr, void *pkt_dump, void *data); +void wlan_deregister_txrx_packetdump(void); +void wlan_register_txrx_packetdump(void); + #endif /* WLAN_LOGGING_SOCK_SVC_H */ diff --git a/core/utils/logging/src/wlan_logging_sock_svc.c b/core/utils/logging/src/wlan_logging_sock_svc.c index 1385b8008fad..cbd8c8f36219 100644 --- a/core/utils/logging/src/wlan_logging_sock_svc.c +++ b/core/utils/logging/src/wlan_logging_sock_svc.c @@ -37,10 +37,39 @@ #include #include #include -#include "pktlog_ac.h" #include #include "cds_utils.h" #include "host_diag_core_log.h" +#include "wma.h" +#include "ol_txrx_api.h" +#include "csr_api.h" +#include "wlan_hdd_main.h" +#include "pktlog_ac.h" + +#define MAX_NUM_PKT_LOG 32 + +/** + * struct tx_status - tx status + * @tx_status_ok: successfully sent + acked + * @tx_status_discard: discard - not sent (congestion control) + * @tx_status_no_ack: no_ack - sent, but no ack + * @tx_status_download_fail: download_fail - + * the host could not deliver the tx frame to the target + * @tx_status_peer_del: peer_del - tx completion for + * alreay deleted peer used for HL case + * + * This enum has tx status types + */ +enum tx_status { + tx_status_ok, + tx_status_discard, + tx_status_no_ack, + tx_status_download_fail, + tx_status_peer_del, +}; + +static uint8_t gtx_count; +static uint8_t grx_count; #define LOGGING_TRACE(level, args ...) \ QDF_TRACE(QDF_MODULE_ID_HDD, level, ## args) @@ -1187,12 +1216,7 @@ void wlan_pkt_stats_to_logger_thread(void *pl_hdr, void *pkt_dump, void *data) } pkt_stats_dump = (struct packet_dump *)pkt_dump; - if (pkt_stats_dump) - total_stats_len = sizeof(struct ath_pktlog_hdr) + - pktlog_hdr->size + - sizeof(struct packet_dump); - else - total_stats_len = sizeof(struct ath_pktlog_hdr) + + total_stats_len = sizeof(struct ath_pktlog_hdr) + pktlog_hdr->size; spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, flags); @@ -1217,16 +1241,24 @@ void wlan_pkt_stats_to_logger_thread(void *pl_hdr, void *pkt_dump, void *data) pktlog_hdr, sizeof(struct ath_pktlog_hdr)); - if (pkt_stats_dump) + if (pkt_stats_dump) { qdf_mem_copy(skb_put(ptr, sizeof(struct packet_dump)), pkt_stats_dump, sizeof(struct packet_dump)); + pktlog_hdr->size -= sizeof(struct packet_dump); + } - qdf_mem_copy(skb_put(ptr, + if (data) + qdf_mem_copy(skb_put(ptr, pktlog_hdr->size), data, pktlog_hdr->size); + if (pkt_stats_dump->type == STOP_MONITOR) { + wake_up_thread = true; + wlan_get_pkt_stats_free_node(); + } + spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, flags); /* Wakeup logger thread */ @@ -1236,5 +1268,238 @@ void wlan_pkt_stats_to_logger_thread(void *pl_hdr, void *pkt_dump, void *data) } } +/** + * driver_hal_status_map() - maps driver to hal + * status + * @status: status to be mapped + * + * This function is used to map driver to hal status + * + * Return: None + * + */ +static void driver_hal_status_map(uint8_t *status) +{ + switch (*status) { + case tx_status_ok: + *status = TX_PKT_FATE_ACKED; + break; + case tx_status_discard: + *status = TX_PKT_FATE_DRV_DROP_OTHER; + break; + case tx_status_no_ack: + *status = TX_PKT_FATE_SENT; + break; + case tx_status_download_fail: + *status = TX_PKT_FATE_FW_QUEUED; + break; + default: + *status = TX_PKT_FATE_DRV_DROP_OTHER; + break; + } +} + + +/* + * send_packetdump() - send packet dump + * @netbuf: netbuf + * @status: status of tx packet + * @vdev_id: virtual device id + * @type: type of packet + * + * This function is used to send packet dump to HAL layer + * using wlan_pkt_stats_to_logger_thread + * + * Return: None + * + */ +static void send_packetdump(qdf_nbuf_t netbuf, uint8_t status, + uint8_t vdev_id, uint8_t type) +{ + struct ath_pktlog_hdr pktlog_hdr = {0}; + struct packet_dump pd_hdr = {0}; + hdd_context_t *hdd_ctx; + hdd_adapter_t *adapter; + v_CONTEXT_t vos_ctx; + + vos_ctx = cds_get_global_context(); + if (!vos_ctx) + return; + + hdd_ctx = (hdd_context_t *)cds_get_context(QDF_MODULE_ID_HDD); + if (!hdd_ctx) + return; + + adapter = hdd_get_adapter_by_vdev(hdd_ctx, vdev_id); + + /* Send packet dump only for STA interface */ + if (adapter->device_mode != QDF_STA_MODE) + return; + + pktlog_hdr.log_type = PKTLOG_TYPE_PKT_DUMP; + pktlog_hdr.size = sizeof(pd_hdr) + netbuf->len; + + pd_hdr.status = status; + pd_hdr.type = type; + pd_hdr.driver_ts = qdf_get_monotonic_boottime(); + + if ((type == TX_MGMT_PKT) || (type == TX_DATA_PKT)) + gtx_count++; + else if ((type == RX_MGMT_PKT) || (type == RX_DATA_PKT)) + grx_count++; + + wlan_pkt_stats_to_logger_thread(&pktlog_hdr, &pd_hdr, netbuf->data); +} + + +/* + * send_packetdump_monitor() - sends start/stop packet dump indication + * @type: type of packet + * + * This function is used to indicate HAL layer to start/stop monitoring + * of packets + * + * Return: None + * + */ +static void send_packetdump_monitor(uint8_t type) +{ + struct ath_pktlog_hdr pktlog_hdr = {0}; + struct packet_dump pd_hdr = {0}; + + pktlog_hdr.log_type = PKTLOG_TYPE_PKT_DUMP; + pktlog_hdr.size = sizeof(pd_hdr); + + pd_hdr.type = type; + + LOGGING_TRACE(QDF_TRACE_LEVEL_INFO, + "fate Tx-Rx %s: type: %d", __func__, type); + + wlan_pkt_stats_to_logger_thread(&pktlog_hdr, &pd_hdr, NULL); +} + +/** + * wlan_deregister_txrx_packetdump() - tx/rx packet dump + * deregistration + * + * This function is used to deregister tx/rx packet dump callbacks + * with ol, pe and htt layers + * + * Return: None + * + */ +void wlan_deregister_txrx_packetdump(void) +{ + if (gtx_count || grx_count) { + ol_deregister_packetdump_callback(); + wma_deregister_packetdump_callback(); + send_packetdump_monitor(STOP_MONITOR); + csr_packetdump_timer_stop(); + + gtx_count = 0; + grx_count = 0; + } else + LOGGING_TRACE(QDF_TRACE_LEVEL_INFO, + "%s: deregistered packetdump already", __func__); +} + +/* + * check_txrx_packetdump_count() - function to check + * tx/rx packet dump global counts + * + * This function is used to check global counts of tx/rx + * packet dump functionality. + * + * Return: 1 if either gtx_count or grx_count reached 32 + * 0 otherwise + * + */ +static bool check_txrx_packetdump_count(void) +{ + if (gtx_count == MAX_NUM_PKT_LOG || + grx_count == MAX_NUM_PKT_LOG) { + LOGGING_TRACE(QDF_TRACE_LEVEL_INFO, + "%s gtx_count: %d grx_count: %d deregister packetdump", + __func__, gtx_count, grx_count); + wlan_deregister_txrx_packetdump(); + return 1; + } + return 0; +} + +/* + * tx_packetdump_cb() - tx packet dump callback + * @netbuf: netbuf + * @status: status of tx packet + * @vdev_id: virtual device id + * @type: packet type + * + * This function is used to send tx packet dump to HAL layer + * and deregister packet dump callbacks + * + * Return: None + * + */ +static void tx_packetdump_cb(qdf_nbuf_t netbuf, uint8_t status, + uint8_t vdev_id, uint8_t type) +{ + bool temp; + + temp = check_txrx_packetdump_count(); + if (temp) + return; + + driver_hal_status_map(&status); + send_packetdump(netbuf, status, vdev_id, type); +} + + +/* + * rx_packetdump_cb() - rx packet dump callback + * @netbuf: netbuf + * @status: status of rx packet + * @vdev_id: virtual device id + * @type: packet type + * + * This function is used to send rx packet dump to HAL layer + * and deregister packet dump callbacks + * + * Return: None + * + */ +static void rx_packetdump_cb(qdf_nbuf_t netbuf, uint8_t status, + uint8_t vdev_id, uint8_t type) +{ + bool temp; + + temp = check_txrx_packetdump_count(); + if (temp) + return; + + send_packetdump(netbuf, status, vdev_id, type); +} + + +/** + * wlan_register_txrx_packetdump() - tx/rx packet dump + * registration + * + * This function is used to register tx/rx packet dump callbacks + * with ol, pe and htt layers + * + * Return: None + * + */ +void wlan_register_txrx_packetdump(void) +{ + ol_register_packetdump_callback(tx_packetdump_cb, + rx_packetdump_cb); + wma_register_packetdump_callback(tx_packetdump_cb, + rx_packetdump_cb); + send_packetdump_monitor(START_MONITOR); + + gtx_count = 0; + grx_count = 0; +} #endif /* WLAN_LOGGING_SOCK_SVC_ENABLE */ diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index b8468bb672e5..bda463e010c6 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -511,6 +511,9 @@ typedef void (*encrypt_decrypt_cb)(struct sir_encrypt_decrypt_rsp_params *encrypt_decrypt_rsp_params); +typedef void (*tp_wma_packetdump_cb)(qdf_nbuf_t netbuf, + uint8_t status, uint8_t vdev_id, uint8_t type); + /** * enum t_wma_drv_type - wma driver type * @WMA_DRIVER_TYPE_PRODUCTION: production driver type @@ -1191,6 +1194,7 @@ struct wmi_desc_t { pWMAAckFnTxComp ota_post_proc_cb; qdf_nbuf_t nbuf; uint32_t desc_id; + uint8_t vdev_id; }; /** @@ -1602,6 +1606,9 @@ typedef struct { QDF_STATUS (*pe_ndp_event_handler)(tpAniSirGlobal mac_ctx, cds_msg_t *msg); bool sub_20_support; + + tp_wma_packetdump_cb wma_mgmt_tx_packetdump_cb; + tp_wma_packetdump_cb wma_mgmt_rx_packetdump_cb; } t_wma_handle, *tp_wma_handle; /** @@ -2324,3 +2331,7 @@ QDF_STATUS wma_start_oem_data_req(tp_wma_handle wma_handle, QDF_STATUS wma_enable_disable_caevent_ind(tp_wma_handle wma_handle, uint8_t val); +void wma_register_packetdump_callback( + tp_wma_packetdump_cb wma_mgmt_tx_packetdump_cb, + tp_wma_packetdump_cb wma_mgmt_rx_packetdump_cb); +void wma_deregister_packetdump_callback(void); diff --git a/core/wma/src/wma_data.c b/core/wma/src/wma_data.c index 8972e1791cc6..84674c38f268 100644 --- a/core/wma/src/wma_data.c +++ b/core/wma/src/wma_data.c @@ -2831,6 +2831,7 @@ QDF_STATUS wma_tx_packet(void *wma_context, void *tx_frame, uint16_t frmLen, status = QDF_STATUS_E_FAILURE; } else { mgmt_param.desc_id = wmi_desc->desc_id; + wmi_desc->vdev_id = vdev_id; status = wmi_mgmt_unified_cmd_send( wma_handle->wmi_handle, &mgmt_param); diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index a3223b2f6814..a0f798fc7166 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -2496,6 +2496,11 @@ int wma_process_mgmt_tx_completion(tp_wma_handle wma_handle, if (wmi_desc->nbuf) qdf_nbuf_unmap_single(pdev->osdev, wmi_desc->nbuf, QDF_DMA_TO_DEVICE); + + if (wma_handle->wma_mgmt_tx_packetdump_cb) + wma_handle->wma_mgmt_tx_packetdump_cb(wmi_desc->nbuf, + QDF_STATUS_SUCCESS, wmi_desc->vdev_id, TX_MGMT_PKT); + if (wmi_desc->tx_cmpl_cb) wmi_desc->tx_cmpl_cb(wma_handle->mac_context, wmi_desc->nbuf, 1); @@ -3298,6 +3303,13 @@ static int wma_mgmt_rx_process(void *handle, uint8_t *data, return -EINVAL; } + if ((mgt_type == IEEE80211_FC0_TYPE_MGT && + mgt_subtype != IEEE80211_FC0_SUBTYPE_BEACON) && + wma_handle->wma_mgmt_rx_packetdump_cb) + wma_handle->wma_mgmt_rx_packetdump_cb(rx_pkt->pkt_buf, + QDF_STATUS_SUCCESS, rx_pkt->pkt_meta.sessionId, + RX_MGMT_PKT); + wma_handle->mgmt_rx(wma_handle, rx_pkt); return 0; } @@ -3395,3 +3407,51 @@ QDF_STATUS wma_register_mgmt_frm_client( return QDF_STATUS_SUCCESS; } + +/** + * wma_register_packetdump_callback() - stores tx and rx mgmt packet dump + * callback handler + * @wma_mgmt_tx_packetdump_cb: tx mgmt packetdump cb + * @wma_mgmt_rx_packetdump_cb: rx mgmt packetdump cb + * + * This function is used to store tx and rx mgmt. packet dump callback + * + * Return: None + * + */ +void wma_register_packetdump_callback( + tp_wma_packetdump_cb wma_mgmt_tx_packetdump_cb, + tp_wma_packetdump_cb wma_mgmt_rx_packetdump_cb) +{ + tp_wma_handle wma_handle = cds_get_context(QDF_MODULE_ID_WMA); + + if (!wma_handle) { + WMA_LOGE("wma handle is NULL"); + return; + } + + wma_handle->wma_mgmt_tx_packetdump_cb = wma_mgmt_tx_packetdump_cb; + wma_handle->wma_mgmt_rx_packetdump_cb = wma_mgmt_rx_packetdump_cb; +} + +/** + * wma_deregister_packetdump_callback() - removes tx and rx mgmt packet dump + * callback handler + * + * This function is used to remove tx and rx mgmt. packet dump callback + * + * Return: None + * + */ +void wma_deregister_packetdump_callback(void) +{ + tp_wma_handle wma_handle = cds_get_context(QDF_MODULE_ID_WMA); + + if (!wma_handle) { + WMA_LOGE("wma handle is NULL"); + return; + } + + wma_handle->wma_mgmt_tx_packetdump_cb = NULL; + wma_handle->wma_mgmt_tx_packetdump_cb = NULL; +} diff --git a/uapi/linux/pktlog_ac_fmt.h b/uapi/linux/pktlog_ac_fmt.h index c8782fd03f82..46dc10a8a582 100644 --- a/uapi/linux/pktlog_ac_fmt.h +++ b/uapi/linux/pktlog_ac_fmt.h @@ -70,6 +70,26 @@ struct ath_pktlog_hdr { #endif } __ATTRIB_PACK; +/** + * enum pkt_type - packet type + * @START_MONITOR: indicates parser to start packetdump parsing + * @STOP_MONITOR: indicates parser to stop packetdump parsing + * @TX_MGMT_PKT: TX management Packet + * @TX_DATA_PKT: TX data Packet + * @RX_MGMT_PKT: RX management Packet + * @RX_DATA_PKT: RX data Packet + * + * This enum has packet types + */ +enum pkt_type { + START_MONITOR = 1, + STOP_MONITOR, + TX_MGMT_PKT, + TX_DATA_PKT, + RX_MGMT_PKT, + RX_DATA_PKT, +}; + #define ATH_PKTLOG_HDR_FLAGS_MASK 0xffff #define ATH_PKTLOG_HDR_FLAGS_SHIFT 0 #define ATH_PKTLOG_HDR_FLAGS_OFFSET 0 @@ -127,17 +147,18 @@ enum { /* Types of packet log events */ -#define PKTLOG_TYPE_TX_CTRL 1 -#define PKTLOG_TYPE_TX_STAT 2 -#define PKTLOG_TYPE_TX_MSDU_ID 3 -#define PKTLOG_TYPE_TX_FRM_HDR 4 -#define PKTLOG_TYPE_RX_STAT 5 -#define PKTLOG_TYPE_RC_FIND 6 -#define PKTLOG_TYPE_RC_UPDATE 7 +#define PKTLOG_TYPE_TX_CTRL 1 +#define PKTLOG_TYPE_TX_STAT 2 +#define PKTLOG_TYPE_TX_MSDU_ID 3 +#define PKTLOG_TYPE_TX_FRM_HDR 4 +#define PKTLOG_TYPE_RX_STAT 5 +#define PKTLOG_TYPE_RC_FIND 6 +#define PKTLOG_TYPE_RC_UPDATE 7 #define PKTLOG_TYPE_TX_VIRT_ADDR 8 #define PKTLOG_TYPE_SMART_ANTENNA 9 #define PKTLOG_TYPE_SW_EVENT 10 -#define PKTLOG_TYPE_MAX 11 +#define PKTLOG_TYPE_PKT_DUMP 11 +#define PKTLOG_TYPE_MAX 12 #define PKTLOG_MAX_TXCTL_WORDS 57 /* +2 words for bitmap */ #define PKTLOG_MAX_TXSTATUS_WORDS 32 @@ -287,5 +308,82 @@ struct ath_pktlog_buf { sizeof(struct ath_pktlog_hdr)) ? _rd_offset : 0; \ } while(0) +/** + * enum tx_pkt_fate - tx packet fate + * @TX_PKT_FATE_ACKED: Sent over air and ACKed + * @TX_PKT_FATE_SENT: Sent over air but not ACKed. + * @TX_PKT_FATE_FW_QUEUED: Queued within firmware, + * but not yet sent over air + * @TX_PKT_FATE_FW_DROP_INVALID: Dropped by firmware as invalid. + * E.g. bad source address, bad checksum, or invalid for current state. + * @TX_PKT_FATE_FW_DROP_NOBUFS: Dropped by firmware due + * to lack of buffer space + * @TX_PKT_FATE_FW_DROP_OTHER: Dropped by firmware for any other + * reason. Includes frames that were sent by driver to firmware, but + * unaccounted for by firmware. + * @TX_PKT_FATE_DRV_QUEUED: Queued within driver, not yet sent to firmware. + * @TX_PKT_FATE_DRV_DROP_INVALID: Dropped by driver as invalid. + * E.g. bad source address, or invalid for current state. + * @TX_PKT_FATE_DRV_DROP_NOBUFS: Dropped by driver due to lack of buffer space + * @TX_PKT_FATE_DRV_DROP_OTHER: Dropped by driver for any other reason. + * E.g. out of buffers. + * + * This enum has packet fate types + */ + +enum tx_pkt_fate { + TX_PKT_FATE_ACKED, + TX_PKT_FATE_SENT, + TX_PKT_FATE_FW_QUEUED, + TX_PKT_FATE_FW_DROP_INVALID, + TX_PKT_FATE_FW_DROP_NOBUFS, + TX_PKT_FATE_FW_DROP_OTHER, + TX_PKT_FATE_DRV_QUEUED, + TX_PKT_FATE_DRV_DROP_INVALID, + TX_PKT_FATE_DRV_DROP_NOBUFS, + TX_PKT_FATE_DRV_DROP_OTHER, +}; + +/** + * enum rx_pkt_fate - rx packet fate + * @RX_PKT_FATE_SUCCESS: Valid and delivered to + * network stack (e.g., netif_rx()). + * @RX_PKT_FATE_FW_QUEUED: Queued within firmware, + * but not yet sent to driver. + * @RX_PKT_FATE_FW_DROP_FILTER: Dropped by firmware + * due to host-programmable filters. + * @RX_PKT_FATE_FW_DROP_INVALID: Dropped by firmware + * as invalid. E.g. bad checksum, decrypt failed, or invalid for current state. + * @RX_PKT_FATE_FW_DROP_NOBUFS: Dropped by firmware + * due to lack of buffer space. + * @RX_PKT_FATE_FW_DROP_OTHER: Dropped by firmware + * for any other reason. + * @RX_PKT_FATE_DRV_QUEUED: Queued within driver, + * not yet delivered to network stack. + * @RX_PKT_FATE_DRV_DROP_FILTER: Dropped by driver + * due to filter rules. + * @RX_PKT_FATE_DRV_DROP_INVALID: Dropped by driver as invalid. + * E.g. not permitted in current state. + * @RX_PKT_FATE_DRV_DROP_NOBUFS: Dropped by driver + * due to lack of buffer space. + * @RX_PKT_FATE_DRV_DROP_OTHER: Dropped by driver for any other reason. + * + * This enum has packet fate types + */ + +enum rx_pkt_fate { + RX_PKT_FATE_SUCCESS, + RX_PKT_FATE_FW_QUEUED, + RX_PKT_FATE_FW_DROP_FILTER, + RX_PKT_FATE_FW_DROP_INVALID, + RX_PKT_FATE_FW_DROP_NOBUFS, + RX_PKT_FATE_FW_DROP_OTHER, + RX_PKT_FATE_DRV_QUEUED, + RX_PKT_FATE_DRV_DROP_FILTER, + RX_PKT_FATE_DRV_DROP_INVALID, + RX_PKT_FATE_DRV_DROP_NOBUFS, + RX_PKT_FATE_DRV_DROP_OTHER, +}; + #endif /* _PKTLOG_FMT_H_ */ #endif /* REMOVE_PKT_LOG */ From e2606dde5c428fab77ae1f83829c129a7233b3fe Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 26 Oct 2016 16:16:46 -0700 Subject: [PATCH 060/119] Release 5.1.0.33H Release 5.1.0.33H Change-Id: I9a6d4d89be4357c36918d518e836307f0e8b286e CRs-Fixed: 688141 (cherry picked from commit b798f95ad488c848571d32c63301bc42b0722297) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 1d11ad8faf93..6ac874d9de0e 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "G" +#define QWLAN_VERSION_EXTRA "H" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33G" +#define QWLAN_VERSIONSTR "5.1.0.33H" #endif /* QWLAN_VERSION_H */ From efd71c358231de998b17525b55013c60a9dcef95 Mon Sep 17 00:00:00 2001 From: Naveen Rawat Date: Tue, 25 Oct 2016 17:05:47 -0700 Subject: [PATCH 061/119] qcacld-3.0: Add NULL pointer check before accessing roam profile Check for NULL pointer before accessing current roam profile in STOP_BSS rsp, csr_roam_roaming_state_stop_bss_rsp_processor. Change-Id: I670151fa81ab3389c7a07ef37bcc909e3fcb9387 CRs-Fixed: 1082446 (cherry picked from commit 1d0fd66e49e4c39ed57c80fa8603cc1b59c0b548) --- core/sme/src/csr/csr_api_roam.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 1edcd0b5332b..bc908880986b 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -9098,6 +9098,7 @@ static void csr_roam_roaming_state_stop_bss_rsp_processor(tpAniSirGlobal pMac, tSirSmeRsp *pSmeRsp) { eCsrRoamCompleteResult result_code = eCsrNothingToJoin; + tCsrRoamProfile *profile; #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR { @@ -9116,16 +9117,16 @@ static void csr_roam_roaming_state_stop_bss_rsp_processor(tpAniSirGlobal pMac, pMac->roam.roamSession[pSmeRsp->sessionId].connectState = eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED; if (CSR_IS_ROAM_SUBSTATE_STOP_BSS_REQ(pMac, pSmeRsp->sessionId)) { - if (CSR_IS_CONN_NDI(pMac->roam.roamSession[pSmeRsp->sessionId]. - pCurRoamProfile)) { + profile = + pMac->roam.roamSession[pSmeRsp->sessionId].pCurRoamProfile; + if (profile && CSR_IS_CONN_NDI(profile)) { result_code = eCsrStopBssSuccess; if (pSmeRsp->statusCode != eSIR_SME_SUCCESS) result_code = eCsrStopBssFailure; } csr_roam_complete(pMac, result_code, NULL); - } else - if (CSR_IS_ROAM_SUBSTATE_DISCONNECT_CONTINUE - (pMac, pSmeRsp->sessionId)) { + } else if (CSR_IS_ROAM_SUBSTATE_DISCONNECT_CONTINUE(pMac, + pSmeRsp->sessionId)) { csr_roam_reissue_roam_command(pMac); } } From 02a1276b1f6cf1fe52fd3938e44b7a69d5d14c99 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 26 Oct 2016 19:01:32 -0700 Subject: [PATCH 062/119] Release 5.1.0.33I Release 5.1.0.33I Change-Id: I04dcf134381577b5889ac0c3926f62ed64e7ed69 CRs-Fixed: 688141 (cherry picked from commit 2af8c3cef53bf93f565bc8ecc6075f7ecbe9dec0) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 6ac874d9de0e..56c3958f6a10 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "H" +#define QWLAN_VERSION_EXTRA "I" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33H" +#define QWLAN_VERSIONSTR "5.1.0.33I" #endif /* QWLAN_VERSION_H */ From 28b7151d8d8ecd3061b27f503f22c3dc94199812 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Tue, 25 Oct 2016 08:43:07 -0700 Subject: [PATCH 063/119] qcacld-3.0: Handle NULL pdev in cds_flush_cache_rx_queue() Currently cds_flush_cache_rx_queue() does not verify that cds_get_context() returns a valid pdev which could subsequently lead to dereferencing an invalid pointer. Add a validity check for this pointer. Change-Id: I326e0b92205fda78854c947248e675d287a7ec04 CRs-Fixed: 1082035 (cherry picked from commit 514e12df3c66ef0e457d76ef8c984874481f5117) --- core/cds/src/cds_api.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index 88cab038f21a..b5cfa3285cee 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -836,7 +836,11 @@ void cds_flush_cache_rx_queue(void) { uint8_t sta_id; struct ol_txrx_peer_t *peer; - struct ol_txrx_pdev_t *pdev = cds_get_context(QDF_MODULE_ID_TXRX); + struct ol_txrx_pdev_t *pdev; + + pdev = cds_get_context(QDF_MODULE_ID_TXRX); + if (!pdev) + return; for (sta_id = 0; sta_id < WLAN_MAX_STA_COUNT; sta_id++) { peer = ol_txrx_peer_find_by_local_id(pdev, sta_id); From d1698d580eeffdc2f72092eccccf543b1a8e63bc Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 26 Oct 2016 19:41:08 -0700 Subject: [PATCH 064/119] Release 5.1.0.33J Release 5.1.0.33J Change-Id: I43ed1feb0b8f8a41c1cf514ab5872644edabe564 CRs-Fixed: 688141 (cherry picked from commit 0a38d9b84f811f8eb81e4e5d458cd2b8fae1223c) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 56c3958f6a10..90b7c03ed657 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "I" +#define QWLAN_VERSION_EXTRA "J" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33I" +#define QWLAN_VERSIONSTR "5.1.0.33J" #endif /* QWLAN_VERSION_H */ From b913b39210c8741d3c660628ee3197e87bef7222 Mon Sep 17 00:00:00 2001 From: Sandeep Puligilla Date: Tue, 25 Oct 2016 16:31:46 -0700 Subject: [PATCH 065/119] qcacld-3.0: Don't allow start ap during sta connection Association completion handler(MCthread) acquired cds concurrency lock while holding the sme global lock and hostapd thread is trying to aquire sme lock while holding cds concurrency lock which resulted in deadlock. Don't allow start BSS while connection is in progress. Change-Id: I1887aab39d2fa13cc8a900164d2aa6d489464e42 CRs-Fixed: 1081809 (cherry picked from commit cdfb0b38197a13755847e303c753c01bd4801e82) --- core/hdd/src/wlan_hdd_hostapd.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 42fe0fd2e0b6..199268dd1d40 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -7822,7 +7822,6 @@ static int __wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy, pHddCtx = WLAN_HDD_GET_CTX(pAdapter); status = wlan_hdd_validate_context(pHddCtx); - if (0 != status) return status; @@ -7830,6 +7829,12 @@ static int __wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy, hdd_device_mode_to_string(pAdapter->device_mode), pAdapter->device_mode); + + if (cds_is_connection_in_progress()) { + hdd_err("Can't start BSS: connection is in progress"); + return -EBUSY; + } + channel_width = wlan_hdd_get_channel_bw(params->chandef.width); channel = ieee80211_frequency_to_channel( params->chandef.chan->center_freq); From df6454a80d8a3705359cf7b8f92849221108fb76 Mon Sep 17 00:00:00 2001 From: Sandeep Puligilla Date: Fri, 21 Oct 2016 16:10:59 -0700 Subject: [PATCH 066/119] qcacld-3.0: cancel all the scans during connect P2P connection failed when scan is active on another interface. Abort all the scans on all the active session when connect request is getting processed at SME. Change-Id: Ibc7c0df7f2884710fbaf29a5b1ff5d315c3bfc52 CRs-Fixed: 1081116 (cherry picked from commit 271cbf851f7fbbfeae503097e9d06ff3cb89c761) --- core/sme/src/csr/csr_api_roam.c | 3 +-- core/sme/src/csr/csr_api_scan.c | 33 +++++++++++++++++++++++++++++++ core/sme/src/csr/csr_inside_api.h | 2 ++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index bc908880986b..0c784ba5b0a8 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -7704,8 +7704,7 @@ QDF_STATUS csr_roam_connect(tpAniSirGlobal pMac, uint32_t sessionId, pSession->dhcp_done = false; csr_roam_cancel_roaming(pMac, sessionId); csr_scan_remove_fresh_scan_command(pMac, sessionId); - /* Only abort the scan if its not used for other roam/connect purpose */ - csr_scan_abort_mac_scan(pMac, sessionId, eCSR_SCAN_ABORT_DEFAULT); + csr_scan_abort_all_scans(pMac, eCSR_SCAN_ABORT_DEFAULT); csr_roam_remove_duplicate_command(pMac, sessionId, NULL, eCsrHddIssued); /* Check whether ssid changes */ if (csr_is_conn_state_connected(pMac, sessionId) && diff --git a/core/sme/src/csr/csr_api_scan.c b/core/sme/src/csr/csr_api_scan.c index 43fcab6b3652..1e7c88dfcad3 100644 --- a/core/sme/src/csr/csr_api_scan.c +++ b/core/sme/src/csr/csr_api_scan.c @@ -6626,6 +6626,39 @@ void csr_set_cfg_scan_control_list(tpAniSirGlobal pMac, uint8_t *countryCode, } /* AllocateMemory */ } + +/** + * csr_scan_abort_all_scans() - Abort scan on all Sessions + * @mac_ctx: pointer to Global Mac structure + * @reason: reason for cancelling scan + * + * Abort scan on all Sessions + * + * Return: QDF_STATUS + */ +QDF_STATUS csr_scan_abort_all_scans(tpAniSirGlobal mac_ctx, + eCsrAbortReason reason) +{ + QDF_STATUS status = QDF_STATUS_SUCCESS; + uint8_t session_id; + + mac_ctx->scan.fDropScanCmd = true; + for (session_id = 0; session_id < CSR_ROAM_SESSION_MAX; session_id++) { + if (CSR_IS_SESSION_VALID(mac_ctx, session_id)) { + csr_remove_cmd_with_session_id_from_pending_list( + mac_ctx, + session_id, &mac_ctx->sme.smeScanCmdPendingList, + eSmeCommandScan); + csr_abort_scan_from_active_list(mac_ctx, + &mac_ctx->sme.smeScanCmdActiveList, + session_id, eSmeCommandScan, reason); + } + } + mac_ctx->scan.fDropScanCmd = false; + + return status; +} + QDF_STATUS csr_scan_abort_mac_scan(tpAniSirGlobal pMac, uint8_t sessionId, eCsrAbortReason reason) { diff --git a/core/sme/src/csr/csr_inside_api.h b/core/sme/src/csr/csr_inside_api.h index 02e83995019f..47470725407d 100644 --- a/core/sme/src/csr/csr_inside_api.h +++ b/core/sme/src/csr/csr_inside_api.h @@ -268,6 +268,8 @@ QDF_STATUS csr_scan_for_ssid(tpAniSirGlobal pMac, uint32_t sessionId, bool csr_scan_remove_fresh_scan_command(tpAniSirGlobal pMac, uint8_t sessionId); QDF_STATUS csr_scan_abort_mac_scan(tpAniSirGlobal pMac, uint8_t sessionId, eCsrAbortReason reason); +QDF_STATUS csr_scan_abort_all_scans(tpAniSirGlobal mac_ctx, + eCsrAbortReason reason); void csr_remove_cmd_from_pending_list(tpAniSirGlobal pMac, tDblLinkList *pList, eSmeCommandType commandType); void csr_remove_cmd_with_session_id_from_pending_list(tpAniSirGlobal pMac, From 222c834672d04ae1f35f16d11c63b374b8433a11 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Wed, 26 Oct 2016 20:19:36 -0700 Subject: [PATCH 067/119] Release 5.1.0.33K Release 5.1.0.33K Change-Id: I07b6a14b288626e9a4d85971bcd435f4eae35577 CRs-Fixed: 688141 (cherry picked from commit ad605143c9fc0d805d72d8b92d9d234fe8866ff3) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 90b7c03ed657..c21cb3063e28 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "J" +#define QWLAN_VERSION_EXTRA "K" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33J" +#define QWLAN_VERSIONSTR "5.1.0.33K" #endif /* QWLAN_VERSION_H */ From 72e7aecf6d0a492e71264d5b099c091bf8a70f94 Mon Sep 17 00:00:00 2001 From: "Padma, Santhosh Kumar" Date: Wed, 12 Oct 2016 17:23:44 +0530 Subject: [PATCH 068/119] qcacld-3.0: Add feature flags for DISA functions Add feature flags for DISA functionality in SME and WMA layers Change-Id: I9fe33083469a2169cd06206e85d7965405d4a728 CRs-Fixed: 1076941 (cherry picked from commit 3c85d965eec08da145a26fc2ceefdaf8dcfb4df0) --- core/sme/inc/sme_api.h | 2 ++ core/sme/src/common/sme_api.c | 2 ++ core/wma/inc/wma_api.h | 9 +++++++++ core/wma/inc/wma_internal.h | 8 ++++++++ core/wma/src/wma_features.c | 2 ++ 5 files changed, 23 insertions(+) diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h index ce4bdac75066..3990ebab984b 100644 --- a/core/sme/inc/sme_api.h +++ b/core/sme/inc/sme_api.h @@ -1277,6 +1277,7 @@ QDF_STATUS sme_set_default_scan_ie(tHalHandle hal, uint16_t session_id, QDF_STATUS sme_update_session_param(tHalHandle hal, uint8_t session_id, uint32_t param_type, uint32_t param_val); +#ifdef WLAN_FEATURE_DISA /** * sme_encrypt_decrypt_msg_register_callback() - Registers * encrypt/decrypt message callback @@ -1315,6 +1316,7 @@ QDF_STATUS sme_encrypt_decrypt_msg_deregister_callback(tHalHandle h_hal); */ QDF_STATUS sme_encrypt_decrypt_msg(tHalHandle hal, struct encrypt_decrypt_req_params *encrypt_decrypt_params); +#endif /** * sme_set_cts2self_for_p2p_go() - sme function to set ini parms to FW. diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 2b9b453c84b5..6ba4d8a89717 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -16653,6 +16653,7 @@ QDF_STATUS sme_set_default_scan_ie(tHalHandle hal, uint16_t session_id, return status; } +#ifdef WLAN_FEATURE_DISA /** * sme_encrypt_decrypt_msg() - handles encrypt/decrypt mesaage * @hal: HAL handle @@ -16783,6 +16784,7 @@ QDF_STATUS sme_encrypt_decrypt_msg_deregister_callback(tHalHandle h_hal) } return status; } +#endif QDF_STATUS sme_set_cts2self_for_p2p_go(tHalHandle hal_handle) { diff --git a/core/wma/inc/wma_api.h b/core/wma/inc/wma_api.h index 58d34ec38724..e321cd1af6d2 100644 --- a/core/wma/inc/wma_api.h +++ b/core/wma/inc/wma_api.h @@ -299,8 +299,17 @@ void wma_process_pdev_hw_mode_trans_ind(void *wma, wmi_pdev_hw_mode_transition_event_fixed_param *fixed_param, wmi_pdev_set_hw_mode_response_vdev_mac_entry *vdev_mac_entry, struct sir_hw_mode_trans_ind *hw_mode_trans_ind); + +#ifdef WLAN_FEATURE_DISA QDF_STATUS wma_encrypt_decrypt_msg(WMA_HANDLE wma, struct encrypt_decrypt_req_params *encrypt_decrypt_params); +#else +static inline QDF_STATUS wma_encrypt_decrypt_msg(WMA_HANDLE wma, + struct encrypt_decrypt_req_params *encrypt_decrypt_params) +{ + return 0; +} +#endif /** * wma_set_cts2self_for_p2p_go() - set CTS2SELF command for P2P GO. diff --git a/core/wma/inc/wma_internal.h b/core/wma/inc/wma_internal.h index f35044e57d4a..a35254ae321b 100644 --- a/core/wma/inc/wma_internal.h +++ b/core/wma/inc/wma_internal.h @@ -1214,7 +1214,15 @@ QDF_STATUS wma_process_hal_pwr_dbg_cmd(WMA_HANDLE handle, struct sir_mac_pwr_dbg_cmd * sir_pwr_dbg_params); +#ifdef WLAN_FEATURE_DISA int wma_encrypt_decrypt_msg_handler(void *handle, uint8_t *data, uint32_t data_len); +#else +static inline int wma_encrypt_decrypt_msg_handler(void *handle, uint8_t *data, + uint32_t data_len) +{ + return 0; +} +#endif #endif diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index cf0deffae065..52b330d7938e 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -8279,6 +8279,7 @@ QDF_STATUS wma_enable_disable_caevent_ind(tp_wma_handle wma, uint8_t val) return QDF_STATUS_SUCCESS; } +#ifdef WLAN_FEATURE_DISA /** * wma_encrypt_decrypt_msg() - * @encrypt_decrypt_params: encryption/decryption params @@ -8383,3 +8384,4 @@ int wma_encrypt_decrypt_msg_handler(void *handle, uint8_t *data, return 0; } +#endif From c7d41a5dc3148562e4c3b8a4380e3168b25fe165 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 27 Oct 2016 00:14:56 -0700 Subject: [PATCH 069/119] Release 5.1.0.33L Release 5.1.0.33L Change-Id: I4c38836f62df5b877c055e57167e5e93991b75ee CRs-Fixed: 688141 (cherry picked from commit 9c185b08ffa3ac3fbd7c424e85b2c1a94ec49717) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index c21cb3063e28..b85e9c47359a 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "K" +#define QWLAN_VERSION_EXTRA "L" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33K" +#define QWLAN_VERSIONSTR "5.1.0.33L" #endif /* QWLAN_VERSION_H */ From 6493e1edf64443acd7f3c900cefcf295af033023 Mon Sep 17 00:00:00 2001 From: Himanshu Agarwal Date: Wed, 26 Oct 2016 17:50:50 +0530 Subject: [PATCH 070/119] qcacld-3.0: Fix DPTRACE implementation in rx path Propagation from qcacld-2.0 to qcacld-3.0. Fix DPTRACE implementation in rx path by setting QDF_NBUF_CB_TX_PACKET_TRACK for data packet to QDF_NBUF_TX_PKT_DATA_TRACK in ol_rx_offload_paddr_deliver_ind_handler. Change-Id: Iab77f19ee0040d601b3e91013d08a04362b3d4a9 CRs-Fixed: 1074435 (cherry picked from commit be3a5cd2e00aff5552dd4d55e199c5452b7b5c1b) --- core/dp/txrx/ol_rx.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/dp/txrx/ol_rx.c b/core/dp/txrx/ol_rx.c index 3591c617ad02..93624a199e7d 100644 --- a/core/dp/txrx/ol_rx.c +++ b/core/dp/txrx/ol_rx.c @@ -1516,6 +1516,8 @@ ol_rx_offload_paddr_deliver_ind_handler(htt_pdev_handle htt_pdev, peer = ol_txrx_peer_find_by_id(htt_pdev->txrx_pdev, peer_id); if (peer) { qdf_dp_trace_set_track(head_buf, QDF_RX); + QDF_NBUF_CB_TX_PACKET_TRACK(head_buf) = + QDF_NBUF_TX_PKT_DATA_TRACK; qdf_dp_trace_log_pkt(peer->vdev->vdev_id, head_buf, QDF_RX); DPTRACE(qdf_dp_trace(head_buf, From faa524c7042ce8fda3b5cee6081780691c324d98 Mon Sep 17 00:00:00 2001 From: Himanshu Agarwal Date: Wed, 26 Oct 2016 19:34:09 +0530 Subject: [PATCH 071/119] qcacld-3.0: Pass correct parameter in ol_rx_send_pktlog_event Pass correct parameter(msdu in place of head_msdu) in ol_rx_send_pktlog_event in ol_rx_indication_handler. Change-Id: I11c3fcf038b1b8242733bc19889d550fdf4a5766 CRs-Fixed: 1082515 (cherry picked from commit 97632b4f075245c93b348dfd2ed76b5b14bb9a5c) --- core/dp/txrx/ol_rx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/dp/txrx/ol_rx.c b/core/dp/txrx/ol_rx.c index 93624a199e7d..9b8a93e13fc0 100644 --- a/core/dp/txrx/ol_rx.c +++ b/core/dp/txrx/ol_rx.c @@ -626,7 +626,7 @@ ol_rx_indication_handler(ol_txrx_pdev_handle pdev, if (status != htt_rx_status_ctrl_mgmt_null) { /* Pktlog */ ol_rx_send_pktlog_event(pdev, - peer, head_msdu, 1); + peer, msdu, 1); } #endif if (status == htt_rx_status_err_inv_peer) { From 749e0f281b4e19007981504ee78663da8a93623a Mon Sep 17 00:00:00 2001 From: Himanshu Agarwal Date: Wed, 26 Oct 2016 21:12:59 +0530 Subject: [PATCH 072/119] qcacld-3.0: Fix memory leaks in driver Fix memory leak: 1) during driver shutdown as netbufs associated with outstanding descriptors at the time of driver shutdown are not getting freed. 2) in ol_tx_ll_fast where in case packet fails to download, descriptor is being freed but the netbuf associated with it is not getting freed. Change-Id: I6c3eaf551149078f1ecd1329d5f3fe8ab36c2f34 CRs-Fixed: 1081206 (cherry picked from commit 2e5ea6c3489e8ef40e07c45d0f8e244bbd6bee7f) --- core/dp/txrx/ol_tx.c | 3 ++- core/dp/txrx/ol_tx_desc.c | 2 ++ core/dp/txrx/ol_txrx.c | 11 +++++++---- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/core/dp/txrx/ol_tx.c b/core/dp/txrx/ol_tx.c index da265080de5e..eccc0507acc3 100644 --- a/core/dp/txrx/ol_tx.c +++ b/core/dp/txrx/ol_tx.c @@ -625,7 +625,8 @@ ol_tx_ll_fast(ol_txrx_vdev_handle vdev, qdf_nbuf_t msdu_list) * Free the descriptor, return the * packet to the caller. */ - ol_tx_desc_free(pdev, tx_desc); + ol_tx_desc_frame_free_nonstd(pdev, + tx_desc, 1); return msdu; } if (msdu_info.tso_info.curr_seg) { diff --git a/core/dp/txrx/ol_tx_desc.c b/core/dp/txrx/ol_tx_desc.c index dbaef89c7cb8..c4e78ae6de46 100644 --- a/core/dp/txrx/ol_tx_desc.c +++ b/core/dp/txrx/ol_tx_desc.c @@ -171,6 +171,7 @@ struct ol_tx_desc_t *ol_tx_desc_alloc(struct ol_txrx_pdev_t *pdev, ol_tx_desc_vdev_update(tx_desc, vdev); ol_tx_desc_count_inc(vdev); + qdf_atomic_inc(&tx_desc->ref_cnt); return tx_desc; } @@ -225,6 +226,7 @@ struct ol_tx_desc_t *ol_tx_desc_alloc(struct ol_txrx_pdev_t *pdev, ol_tx_desc_sanity_checks(pdev, tx_desc); ol_tx_desc_compute_delay(tx_desc); ol_tx_desc_vdev_update(tx_desc, vdev); + qdf_atomic_inc(&tx_desc->ref_cnt); } else { pool->pkt_drop_no_desc++; qdf_spin_unlock_bh(&pool->flow_pool_lock); diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c index 0ed97844c07e..19f4f2958d89 100644 --- a/core/dp/txrx/ol_txrx.c +++ b/core/dp/txrx/ol_txrx.c @@ -1633,10 +1633,8 @@ void ol_txrx_pdev_detach(ol_txrx_pdev_handle pdev, int force) ol_txrx_peer_find_hash_erase(pdev); } - htt_deregister_rx_pkt_dump_callback(pdev->htt_pdev); - ol_tx_deregister_flow_control(pdev); - /* Stop the communication between HTT and target at first */ - htt_detach_target(pdev->htt_pdev); + /* to get flow pool status before freeing descs */ + ol_tx_dump_flow_pool_info(); for (i = 0; i < pdev->tx_desc.pool_size; i++) { void *htt_tx_desc; @@ -1660,6 +1658,11 @@ void ol_txrx_pdev_detach(ol_txrx_pdev_handle pdev, int force) htt_tx_desc_free(pdev->htt_pdev, htt_tx_desc); } + htt_deregister_rx_pkt_dump_callback(pdev->htt_pdev); + ol_tx_deregister_flow_control(pdev); + /* Stop the communication between HTT and target at first */ + htt_detach_target(pdev->htt_pdev); + qdf_mem_multi_pages_free(pdev->osdev, &pdev->tx_desc.desc_pages, 0, true); pdev->tx_desc.freelist = NULL; From 6ddb1c06fb451984feee77383c4be6accacab3e7 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 27 Oct 2016 05:18:37 -0700 Subject: [PATCH 073/119] Release 5.1.0.33M Release 5.1.0.33M Change-Id: I135d7044c768ac9d79c0681a743d9a52bec4d48f CRs-Fixed: 688141 (cherry picked from commit 246dbb0edafa1ec439506239eadf044e0ad8b58a) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index b85e9c47359a..61bbc06de933 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "L" +#define QWLAN_VERSION_EXTRA "M" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33L" +#define QWLAN_VERSIONSTR "5.1.0.33M" #endif /* QWLAN_VERSION_H */ From b2cef911eb46f01506bb4c27e1360d4d52a0d26d Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Thu, 20 Oct 2016 17:39:31 -0700 Subject: [PATCH 074/119] qcacld-3.0: Improve CDS SSR Protecting Logging Any time SSR protect/unprotect fails, log a count of the pending functions. Also, periodically dump the protection log when it is full to help with debugging. Change-Id: I926b2f8198a14cf0fac4138400e84a6a8ffedc73 CRs-Fixed: 1082070 (cherry picked from commit dfef826bf4883bc59ea1e6bd7dfb227567b95d1d) --- core/cds/src/cds_sched.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/core/cds/src/cds_sched.c b/core/cds/src/cds_sched.c index bc5827993843..89397046e80b 100644 --- a/core/cds/src/cds_sched.c +++ b/core/cds/src/cds_sched.c @@ -1392,8 +1392,9 @@ static void cds_print_external_threads(void) while (i < MAX_SSR_PROTECT_LOG) { if (!ssr_protect_log[i].free) { QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "PID %d is stuck at %s", ssr_protect_log[i].pid, - ssr_protect_log[i].func); + "PID %d is executing %s", + ssr_protect_log[i].pid, + ssr_protect_log[i].func); } i++; } @@ -1433,10 +1434,22 @@ void cds_ssr_protect(const char *caller_func) spin_unlock_irqrestore(&ssr_protect_lock, irq_flags); + /* + * Dump the protect log at intervals if count is consistently growing. + * Long running functions should tend to dominate the protect log, so + * hopefully, dumping at multiples of log size will prevent spamming the + * logs while telling us which calls are taking a long time to finish. + */ + if (count >= MAX_SSR_PROTECT_LOG && count % MAX_SSR_PROTECT_LOG == 0) { + QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, + "Protect Log overflow; Dumping contents:"); + cds_print_external_threads(); + } + if (!status) QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "Could not track PID %d call %s: log is full", - current->pid, caller_func); + "%s can not be protected; PID:%d, entry_count:%d", + caller_func, current->pid, count); } /** @@ -1474,7 +1487,8 @@ void cds_ssr_unprotect(const char *caller_func) if (!status) QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "Untracked call %s", caller_func); + "%s was not protected; PID:%d, entry_count:%d", + caller_func, current->pid, count); } /** @@ -1503,6 +1517,8 @@ bool cds_wait_for_external_threads_completion(const char *caller_func) } /* at least one external thread is executing */ if (!count) { + QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, + "Timed-out waiting for active entry points:"); cds_print_external_threads(); return false; } From 17098c8d86cc2e796e37692781b04ee401c5bc36 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 27 Oct 2016 11:44:12 -0700 Subject: [PATCH 075/119] Release 5.1.0.33N Release 5.1.0.33N Change-Id: I179b7d01a90a5b6b8ca0c03bfc746652fe8113d2 CRs-Fixed: 688141 (cherry picked from commit 444c7232e72f968664136c5c4d38585a6acd01e2) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 61bbc06de933..a8911f6b81ad 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "M" +#define QWLAN_VERSION_EXTRA "N" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33M" +#define QWLAN_VERSIONSTR "5.1.0.33N" #endif /* QWLAN_VERSION_H */ From a30892e7849874e5dceab5b17122e58f93ee930f Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Wed, 12 Oct 2016 17:28:36 -0700 Subject: [PATCH 076/119] qcacld-3.0: 4.8 Kernel Migration - Remove ieee80211_band Update references from enum ieee80211_band to nl80211_band, as ieee80211_band was removed in version 4.7 of the Linux Kernel. Change-Id: Id42cf6e20c3ebe921546d11fd22c3909aeb84ddd CRs-Fixed: 1077221 (cherry picked from commit 8e62ee9836406b81fe3e418028cdb2ae8f5ec039) --- core/cds/src/cds_concurrency.c | 4 +-- core/hdd/src/wlan_hdd_assoc.c | 4 +-- core/hdd/src/wlan_hdd_cfg80211.c | 54 +++++++++++++++--------------- core/hdd/src/wlan_hdd_cfg80211.h | 9 +++++ core/hdd/src/wlan_hdd_ext_scan.c | 2 +- core/hdd/src/wlan_hdd_main.c | 6 ++-- core/hdd/src/wlan_hdd_ocb.c | 2 +- core/hdd/src/wlan_hdd_p2p.c | 4 +-- core/hdd/src/wlan_hdd_regulatory.c | 6 ++-- core/hdd/src/wlan_hdd_scan.c | 10 +++--- core/hdd/src/wlan_hdd_stats.c | 2 +- core/hdd/src/wlan_hdd_wext.c | 4 +-- 12 files changed, 58 insertions(+), 49 deletions(-) diff --git a/core/cds/src/cds_concurrency.c b/core/cds/src/cds_concurrency.c index 562daefdad2d..db2594c4cdef 100644 --- a/core/cds/src/cds_concurrency.c +++ b/core/cds/src/cds_concurrency.c @@ -6661,11 +6661,11 @@ static bool cds_sta_p2pgo_concur_handle(hdd_adapter_t *sta_adapter, if (p2pgo_channel_num <= 14) { freq = ieee80211_channel_to_frequency( p2pgo_channel_num, - IEEE80211_BAND_2GHZ); + NL80211_BAND_2GHZ); } else { freq = ieee80211_channel_to_frequency( p2pgo_channel_num, - IEEE80211_BAND_5GHZ); + NL80211_BAND_5GHZ); } qdf_mem_zero(&hdd_avoid_freq_list, sizeof(hdd_avoid_freq_list)); diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index 84b87a32d1ce..cd90e9f817cd 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -3004,10 +3004,10 @@ static void hdd_roam_ibss_indication_handler(hdd_adapter_t *pAdapter, if (chan_no <= 14) freq = ieee80211_channel_to_frequency(chan_no, - IEEE80211_BAND_2GHZ); + NL80211_BAND_2GHZ); else freq = ieee80211_channel_to_frequency(chan_no, - IEEE80211_BAND_5GHZ); + NL80211_BAND_5GHZ); chan = ieee80211_get_channel(pAdapter->wdev.wiphy, freq); diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index b8ed55b67718..6da8f4542d97 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -118,7 +118,7 @@ #define IBSS_CFG_PROTECTION_ENABLE_MASK 0x8282 #define HDD2GHZCHAN(freq, chan, flag) { \ - .band = IEEE80211_BAND_2GHZ, \ + .band = NL80211_BAND_2GHZ, \ .center_freq = (freq), \ .hw_value = (chan), \ .flags = (flag), \ @@ -127,7 +127,7 @@ } #define HDD5GHZCHAN(freq, chan, flag) { \ - .band = IEEE80211_BAND_5GHZ, \ + .band = NL80211_BAND_5GHZ, \ .center_freq = (freq), \ .hw_value = (chan), \ .flags = (flag), \ @@ -265,7 +265,7 @@ static struct ieee80211_rate a_mode_rates[] = { static struct ieee80211_supported_band wlan_hdd_band_2_4_ghz = { .channels = NULL, .n_channels = ARRAY_SIZE(hdd_channels_2_4_ghz), - .band = IEEE80211_BAND_2GHZ, + .band = NL80211_BAND_2GHZ, .bitrates = g_mode_rates, .n_bitrates = g_mode_rates_size, .ht_cap.ht_supported = 1, @@ -284,7 +284,7 @@ static struct ieee80211_supported_band wlan_hdd_band_2_4_ghz = { static struct ieee80211_supported_band wlan_hdd_band_5_ghz = { .channels = NULL, .n_channels = ARRAY_SIZE(hdd_channels_5_ghz), - .band = IEEE80211_BAND_5GHZ, + .band = NL80211_BAND_5GHZ, .bitrates = a_mode_rates, .n_bitrates = a_mode_rates_size, .ht_cap.ht_supported = 1, @@ -5265,11 +5265,11 @@ static int __wlan_hdd_cfg80211_get_preferred_freq_list(struct wiphy *wiphy, if (pcl[i] <= ARRAY_SIZE(hdd_channels_2_4_ghz)) freq_list[i] = ieee80211_channel_to_frequency(pcl[i], - IEEE80211_BAND_2GHZ); + NL80211_BAND_2GHZ); else freq_list[i] = ieee80211_channel_to_frequency(pcl[i], - IEEE80211_BAND_5GHZ); + NL80211_BAND_5GHZ); } /* send the freq_list back to supplicant */ @@ -8625,7 +8625,7 @@ int wlan_hdd_cfg80211_update_band(struct wiphy *wiphy, eCsrBand eBand) ENTER(); - for (i = 0; i < IEEE80211_NUM_BANDS; i++) { + for (i = 0; i < NUM_NL80211_BANDS; i++) { if (NULL == wiphy->bands[i]) continue; @@ -8637,7 +8637,7 @@ int wlan_hdd_cfg80211_update_band(struct wiphy *wiphy, eCsrBand eBand) cds_get_channel_state(band->channels[j]. hw_value); - if (IEEE80211_BAND_2GHZ == i && eCSR_BAND_5G == eBand) { + if (NL80211_BAND_2GHZ == i && eCSR_BAND_5G == eBand) { /* 5G only */ #ifdef WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY /* Enable Social channels for P2P */ @@ -8652,7 +8652,7 @@ int wlan_hdd_cfg80211_update_band(struct wiphy *wiphy, eCsrBand eBand) band->channels[j].flags |= IEEE80211_CHAN_DISABLED; continue; - } else if (IEEE80211_BAND_5GHZ == i && + } else if (NL80211_BAND_5GHZ == i && eCSR_BAND_24 == eBand) { /* 2G only */ band->channels[j].flags |= @@ -8812,14 +8812,14 @@ int wlan_hdd_cfg80211_init(struct device *dev, * wiphy flags don't get reset because of static memory. * It's better not to store channel in static memory. */ - wiphy->bands[IEEE80211_BAND_2GHZ] = &wlan_hdd_band_2_4_ghz; - wiphy->bands[IEEE80211_BAND_2GHZ]->channels = + wiphy->bands[NL80211_BAND_2GHZ] = &wlan_hdd_band_2_4_ghz; + wiphy->bands[NL80211_BAND_2GHZ]->channels = qdf_mem_malloc(sizeof(hdd_channels_2_4_ghz)); - if (wiphy->bands[IEEE80211_BAND_2GHZ]->channels == NULL) { + if (wiphy->bands[NL80211_BAND_2GHZ]->channels == NULL) { hdd_err("Not enough memory to allocate channels"); return -ENOMEM; } - qdf_mem_copy(wiphy->bands[IEEE80211_BAND_2GHZ]->channels, + qdf_mem_copy(wiphy->bands[NL80211_BAND_2GHZ]->channels, &hdd_channels_2_4_ghz[0], sizeof(hdd_channels_2_4_ghz)); if ((hdd_is_5g_supported(pHddCtx)) && @@ -8827,22 +8827,22 @@ int wlan_hdd_cfg80211_init(struct device *dev, (eHDD_DOT11_MODE_11g != pCfg->dot11Mode) && (eHDD_DOT11_MODE_11b_ONLY != pCfg->dot11Mode) && (eHDD_DOT11_MODE_11g_ONLY != pCfg->dot11Mode))) { - wiphy->bands[IEEE80211_BAND_5GHZ] = &wlan_hdd_band_5_ghz; - wiphy->bands[IEEE80211_BAND_5GHZ]->channels = + wiphy->bands[NL80211_BAND_5GHZ] = &wlan_hdd_band_5_ghz; + wiphy->bands[NL80211_BAND_5GHZ]->channels = qdf_mem_malloc(sizeof(hdd_channels_5_ghz)); - if (wiphy->bands[IEEE80211_BAND_5GHZ]->channels == NULL) { + if (wiphy->bands[NL80211_BAND_5GHZ]->channels == NULL) { hdd_err("Not enough memory to allocate channels"); qdf_mem_free(wiphy-> - bands[IEEE80211_BAND_2GHZ]->channels); - wiphy->bands[IEEE80211_BAND_2GHZ]->channels = NULL; + bands[NL80211_BAND_2GHZ]->channels); + wiphy->bands[NL80211_BAND_2GHZ]->channels = NULL; return -ENOMEM; } - qdf_mem_copy(wiphy->bands[IEEE80211_BAND_5GHZ]->channels, + qdf_mem_copy(wiphy->bands[NL80211_BAND_5GHZ]->channels, &hdd_channels_5_ghz[0], sizeof(hdd_channels_5_ghz)); } - for (i = 0; i < IEEE80211_NUM_BANDS; i++) { + for (i = 0; i < NUM_NL80211_BANDS; i++) { if (NULL == wiphy->bands[i]) continue; @@ -8850,7 +8850,7 @@ int wlan_hdd_cfg80211_init(struct device *dev, for (j = 0; j < wiphy->bands[i]->n_channels; j++) { struct ieee80211_supported_band *band = wiphy->bands[i]; - if (IEEE80211_BAND_2GHZ == i && + if (NL80211_BAND_2GHZ == i && eCSR_BAND_5G == pCfg->nBandCapability) { /* 5G only */ #ifdef WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY @@ -8864,7 +8864,7 @@ int wlan_hdd_cfg80211_init(struct device *dev, band->channels[j].flags |= IEEE80211_CHAN_DISABLED; continue; - } else if (IEEE80211_BAND_5GHZ == i && + } else if (NL80211_BAND_5GHZ == i && eCSR_BAND_24 == pCfg->nBandCapability) { /* 2G only */ band->channels[j].flags |= @@ -8921,7 +8921,7 @@ void wlan_hdd_cfg80211_deinit(struct wiphy *wiphy) { int i; - for (i = 0; i < IEEE80211_NUM_BANDS; i++) { + for (i = 0; i < NUM_NL80211_BANDS; i++) { if (NULL != wiphy->bands[i] && (NULL != wiphy->bands[i]->channels)) { qdf_mem_free(wiphy->bands[i]->channels); @@ -10698,15 +10698,15 @@ struct cfg80211_bss *wlan_hdd_cfg80211_inform_bss_frame(hdd_adapter_t *pAdapter, } if (chan_no <= ARRAY_SIZE(hdd_channels_2_4_ghz) && - (wiphy->bands[IEEE80211_BAND_2GHZ] != NULL)) { + (wiphy->bands[NL80211_BAND_2GHZ] != NULL)) { freq = ieee80211_channel_to_frequency(chan_no, - IEEE80211_BAND_2GHZ); + NL80211_BAND_2GHZ); } else if ((chan_no > ARRAY_SIZE(hdd_channels_2_4_ghz)) - && (wiphy->bands[IEEE80211_BAND_5GHZ] != NULL)) { + && (wiphy->bands[NL80211_BAND_5GHZ] != NULL)) { freq = ieee80211_channel_to_frequency(chan_no, - IEEE80211_BAND_5GHZ); + NL80211_BAND_5GHZ); } else { hdd_err("Invalid chan_no %d", chan_no); kfree(mgmt); diff --git a/core/hdd/src/wlan_hdd_cfg80211.h b/core/hdd/src/wlan_hdd_cfg80211.h index 602bef0c651c..5cdaad826294 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.h +++ b/core/hdd/src/wlan_hdd_cfg80211.h @@ -3224,4 +3224,13 @@ static inline void wlan_hdd_cfg80211_indicate_disconnect(struct net_device *dev, #endif struct cfg80211_bss *wlan_hdd_cfg80211_inform_bss_frame(hdd_adapter_t *pAdapter, tSirBssDescription *bss_desc); + +/* + * As of 4.7, ieee80211_band is removed; add shims so we can reference + * nl80211_band instead + */ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0)) +#define NUM_NL80211_BANDS ((enum nl80211_band)IEEE80211_NUM_BANDS) +#endif + #endif diff --git a/core/hdd/src/wlan_hdd_ext_scan.c b/core/hdd/src/wlan_hdd_ext_scan.c index d0a968daf69c..558b15fdd0df 100644 --- a/core/hdd/src/wlan_hdd_ext_scan.c +++ b/core/hdd/src/wlan_hdd_ext_scan.c @@ -2455,7 +2455,7 @@ static void hdd_remove_indoor_channels(struct wiphy *wiphy, uint32_t *chan_list, int i, j, k; for (i = 0; i < *num_channels; i++) - for (j = 0; j < IEEE80211_NUM_BANDS; j++) { + for (j = 0; j < NUM_NL80211_BANDS; j++) { if (wiphy->bands[j] == NULL) continue; for (k = 0; k < wiphy->bands[j]->n_channels; k++) { diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 1cc03ca266d5..eaa8287ecccd 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -998,7 +998,7 @@ static void hdd_update_tgt_vht_cap(hdd_context_t *hdd_ctx, struct hdd_config *pconfig = hdd_ctx->config; struct wiphy *wiphy = hdd_ctx->wiphy; struct ieee80211_supported_band *band_5g = - wiphy->bands[IEEE80211_BAND_5GHZ]; + wiphy->bands[NL80211_BAND_5GHZ]; uint32_t temp = 0; if (!band_5g) { @@ -3992,10 +3992,10 @@ void hdd_connect_result(struct net_device *dev, const u8 *bssid, if (chan_no <= 14) freq = ieee80211_channel_to_frequency(chan_no, - IEEE80211_BAND_2GHZ); + NL80211_BAND_2GHZ); else freq = ieee80211_channel_to_frequency(chan_no, - IEEE80211_BAND_5GHZ); + NL80211_BAND_5GHZ); chan = ieee80211_get_channel(padapter->wdev.wiphy, freq); bss = hdd_cfg80211_get_bss(padapter->wdev.wiphy, chan, bssid, diff --git a/core/hdd/src/wlan_hdd_ocb.c b/core/hdd/src/wlan_hdd_ocb.c index f86a6f11f6dc..78d25b3c25fa 100644 --- a/core/hdd/src/wlan_hdd_ocb.c +++ b/core/hdd/src/wlan_hdd_ocb.c @@ -145,7 +145,7 @@ static int dot11p_validate_channel(struct wiphy *wiphy, struct ieee80211_supported_band *current_band; struct ieee80211_channel *current_channel; - for (band_idx = 0; band_idx < IEEE80211_NUM_BANDS; band_idx++) { + for (band_idx = 0; band_idx < NUM_NL80211_BANDS; band_idx++) { current_band = wiphy->bands[band_idx]; if (!current_band) continue; diff --git a/core/hdd/src/wlan_hdd_p2p.c b/core/hdd/src/wlan_hdd_p2p.c index f74f14243399..486bc6eea3c5 100644 --- a/core/hdd/src/wlan_hdd_p2p.c +++ b/core/hdd/src/wlan_hdd_p2p.c @@ -2309,10 +2309,10 @@ void __hdd_indicate_mgmt_frame(hdd_adapter_t *pAdapter, /* Indicate an action frame. */ if (rxChan <= MAX_NO_OF_2_4_CHANNELS) freq = ieee80211_channel_to_frequency(rxChan, - IEEE80211_BAND_2GHZ); + NL80211_BAND_2GHZ); else freq = ieee80211_channel_to_frequency(rxChan, - IEEE80211_BAND_5GHZ); + NL80211_BAND_5GHZ); cfgState = WLAN_HDD_GET_CFG_STATE_PTR(pAdapter); diff --git a/core/hdd/src/wlan_hdd_regulatory.c b/core/hdd/src/wlan_hdd_regulatory.c index 2c237469c234..b64a4ac7c3b5 100644 --- a/core/hdd/src/wlan_hdd_regulatory.c +++ b/core/hdd/src/wlan_hdd_regulatory.c @@ -386,7 +386,7 @@ static void hdd_process_regulatory_data(hdd_context_t *hdd_ctx, band_capability = hdd_ctx->config->nBandCapability; hdd_ctx->isVHT80Allowed = 0; - for (band_num = 0; band_num < IEEE80211_NUM_BANDS; band_num++) { + for (band_num = 0; band_num < NUM_NL80211_BANDS; band_num++) { if (wiphy->bands[band_num] == NULL) continue; @@ -570,7 +570,7 @@ static void hdd_restore_custom_reg_settings(struct wiphy *wiphy, bool *reset) { struct ieee80211_supported_band *sband; - enum ieee80211_band band; + enum nl80211_band band; struct ieee80211_channel *chan; int i; @@ -578,7 +578,7 @@ static void hdd_restore_custom_reg_settings(struct wiphy *wiphy, (country_alpha2[1] == '0') && (wiphy->flags & WIPHY_FLAG_CUSTOM_REGULATORY)) { - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { + for (band = 0; band < NUM_NL80211_BANDS; band++) { sband = wiphy->bands[band]; if (!sband) continue; diff --git a/core/hdd/src/wlan_hdd_scan.c b/core/hdd/src/wlan_hdd_scan.c index a52f9ae6b0aa..729f0519ccfd 100644 --- a/core/hdd/src/wlan_hdd_scan.c +++ b/core/hdd/src/wlan_hdd_scan.c @@ -1798,7 +1798,7 @@ int wlan_hdd_cfg80211_scan(struct wiphy *wiphy, * Return: o for failure, rate bitmap for success */ static uint32_t wlan_hdd_get_rates(struct wiphy *wiphy, - enum ieee80211_band band, + enum nl80211_band band, const u8 *rates, unsigned int rate_count) { uint32_t j, count, rate_bitmap = 0; @@ -1885,7 +1885,7 @@ static int __wlan_hdd_cfg80211_vendor_scan(struct wiphy *wiphy, struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_SCAN_MAX + 1]; struct cfg80211_scan_request *request = NULL; struct nlattr *attr; - enum ieee80211_band band; + enum nl80211_band band; uint8_t n_channels = 0, n_ssid = 0, ie_len = 0; uint32_t tmp, count, j; unsigned int len; @@ -1910,7 +1910,7 @@ static int __wlan_hdd_cfg80211_vendor_scan(struct wiphy *wiphy, tb[QCA_WLAN_VENDOR_ATTR_SCAN_FREQUENCIES], tmp) n_channels++; } else { - for (band = 0; band < IEEE80211_NUM_BANDS; band++) + for (band = 0; band < NUM_NL80211_BANDS; band++) if (wiphy->bands[band]) n_channels += wiphy->bands[band]->n_channels; } @@ -1965,7 +1965,7 @@ static int __wlan_hdd_cfg80211_vendor_scan(struct wiphy *wiphy, count++; } } else { - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { + for (band = 0; band < NUM_NL80211_BANDS; band++) { if (!wiphy->bands[band]) continue; for (j = 0; j < wiphy->bands[band]->n_channels; @@ -2001,7 +2001,7 @@ static int __wlan_hdd_cfg80211_vendor_scan(struct wiphy *wiphy, request->ie_len); } - for (count = 0; count < IEEE80211_NUM_BANDS; count++) + for (count = 0; count < NUM_NL80211_BANDS; count++) if (wiphy->bands[count]) request->rates[count] = (1 << wiphy->bands[count]->n_bitrates) - 1; diff --git a/core/hdd/src/wlan_hdd_stats.c b/core/hdd/src/wlan_hdd_stats.c index 9061136c7940..d03a97c50299 100644 --- a/core/hdd/src/wlan_hdd_stats.c +++ b/core/hdd/src/wlan_hdd_stats.c @@ -2355,7 +2355,7 @@ static int __wlan_hdd_cfg80211_dump_survey(struct wiphy *wiphy, sme_get_operation_channel(halHandle, &channel, pAdapter->sessionId); hdd_wlan_get_freq(channel, &freq); - for (i = 0; i < IEEE80211_NUM_BANDS; i++) { + for (i = 0; i < NUM_NL80211_BANDS; i++) { if (NULL == wiphy->bands[i]) continue; diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index 2761f9e7b65d..9beba4fc996a 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -5086,10 +5086,10 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, return -EIO; } if (phddctx->config->nChannelBondingMode5GHz) - phddctx->wiphy->bands[IEEE80211_BAND_5GHZ]->ht_cap.cap + phddctx->wiphy->bands[NL80211_BAND_5GHZ]->ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40; else - phddctx->wiphy->bands[IEEE80211_BAND_5GHZ]->ht_cap.cap + phddctx->wiphy->bands[NL80211_BAND_5GHZ]->ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; hdd_warn("New_Phymode= %d ch_bonding=%d band=%d VHT_ch_width=%u", From c70038b2dedcf06528ad437a9460d0c5cb89bf63 Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Fri, 14 Oct 2016 12:43:24 -0700 Subject: [PATCH 077/119] qcacld-3.0: 4.8 Kernel Migration - Remove VM_FAULT_MINOR VM_FAULT_MINOR was finally removed in the 4.7 Linux Kernel. According to the below documentation, we should be returning a bitmask. In this case, we are not handling the fault and should return 0, which happens to be what VM_FAULT_MINOR was defined as anyway. "The vma's ->fault is responsible for returning a bitmask of VM_FAULT_xxx flags that give details about how the fault was handled. Replace the reference to VM_FAULT_MINOR with 0. Change-Id: Id1703a61b8798f307630ccdbb7b928799490413e CRs-Fixed: 1078189 (cherry picked from commit 09dd4f4dfff7320a2312245f6952f56e5f322c6b) --- core/utils/pktlog/linux_ac.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/utils/pktlog/linux_ac.c b/core/utils/pktlog/linux_ac.c index 8d8d6cc31d7d..37c8c87dc691 100644 --- a/core/utils/pktlog/linux_ac.c +++ b/core/utils/pktlog/linux_ac.c @@ -852,8 +852,9 @@ int pktlog_fault(struct vm_area_struct *vma, struct vm_fault *vmf) get_page(virt_to_page((void *)address)); vmf->page = virt_to_page((void *)address); - return VM_FAULT_MINOR; + return 0; } + static struct vm_operations_struct pktlog_vmops = { open: pktlog_vopen, close:pktlog_vclose, From e0024fa419ba3439dee5d051662b013c7f254ed5 Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Fri, 14 Oct 2016 16:29:21 -0700 Subject: [PATCH 078/119] qcacld-3.0: 4.8 Kernel Migration - Remove net_device->trans_start Net_device->trans_start was removed in the 4.7 kernel. Remove any references to it, and replace direct assignments to it with a call to netif_trans_update(). Change-Id: Ia512316c10afddcb1a8ed19222d933021f657a59 CRs-Fixed: 1078282 (cherry picked from commit e328cb49a4d712fe0fdf9b85c05513ef25b06458) --- core/hdd/inc/wlan_hdd_tx_rx.h | 21 +++++++++++++++++++++ core/hdd/src/wlan_hdd_softap_tx_rx.c | 7 ++----- core/hdd/src/wlan_hdd_tx_rx.c | 6 ++---- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_tx_rx.h b/core/hdd/inc/wlan_hdd_tx_rx.h index 6cf5cf852dc1..0352cdb8add1 100644 --- a/core/hdd/inc/wlan_hdd_tx_rx.h +++ b/core/hdd/inc/wlan_hdd_tx_rx.h @@ -130,4 +130,25 @@ void hdd_event_eapol_log(struct sk_buff *skb, enum qdf_proto_dir dir) {} #endif +/* + * As of the 4.7 kernel, net_device->trans_start is removed. Create shims to + * support compiling against older versions of the kernel. + */ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0)) +static inline void netif_trans_update(struct net_device *dev) +{ + dev->trans_start = jiffies; +} + +#define TX_TIMEOUT_TRACE(dev, module_id) QDF_TRACE( \ + module_id, QDF_TRACE_LEVEL_ERROR, \ + "%s: Transmission timeout occurred jiffies %lu trans_start %lu", \ + __func__, jiffies, dev->trans_start) +#else +#define TX_TIMEOUT_TRACE(dev, module_id) QDF_TRACE( \ + module_id, QDF_TRACE_LEVEL_ERROR, \ + "%s: Transmission timeout occurred jiffies %lu", \ + __func__, jiffies) +#endif + #endif /* end #if !defined(WLAN_HDD_TX_RX_H) */ diff --git a/core/hdd/src/wlan_hdd_softap_tx_rx.c b/core/hdd/src/wlan_hdd_softap_tx_rx.c index ab6357535162..f5c670d1174f 100644 --- a/core/hdd/src/wlan_hdd_softap_tx_rx.c +++ b/core/hdd/src/wlan_hdd_softap_tx_rx.c @@ -351,7 +351,7 @@ static int __hdd_softap_hard_start_xmit(struct sk_buff *skb, ++pAdapter->hdd_stats.hddTxRxStats.txXmitDroppedAC[ac]; goto drop_pkt; } - dev->trans_start = jiffies; + netif_trans_update(dev); return NETDEV_TX_OK; @@ -425,9 +425,7 @@ static void __hdd_softap_tx_timeout(struct net_device *dev) return; } - QDF_TRACE(QDF_MODULE_ID_HDD_SAP_DATA, QDF_TRACE_LEVEL_ERROR, - "%s: Transmission timeout occurred jiffies %lu trans_start %lu" - , __func__, jiffies, dev->trans_start); + TX_TIMEOUT_TRACE(dev, QDF_MODULE_ID_HDD_SAP_DATA); for (i = 0; i < NUM_TX_QUEUES; i++) { txq = netdev_get_tx_queue(dev, i); @@ -441,7 +439,6 @@ static void __hdd_softap_tx_timeout(struct net_device *dev) ol_tx_dump_flow_pool_info(); QDF_TRACE(QDF_MODULE_ID_HDD_DATA, QDF_TRACE_LEVEL_ERROR, "carrier state: %d", netif_carrier_ok(dev)); - } /** diff --git a/core/hdd/src/wlan_hdd_tx_rx.c b/core/hdd/src/wlan_hdd_tx_rx.c index 56056938c6d8..93283605640c 100644 --- a/core/hdd/src/wlan_hdd_tx_rx.c +++ b/core/hdd/src/wlan_hdd_tx_rx.c @@ -595,7 +595,7 @@ static int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) ++pAdapter->hdd_stats.hddTxRxStats.txXmitDroppedAC[ac]; goto drop_pkt; } - dev->trans_start = jiffies; + netif_trans_update(dev); return NETDEV_TX_OK; @@ -685,9 +685,7 @@ static void __hdd_tx_timeout(struct net_device *dev) struct netdev_queue *txq; int i = 0; - QDF_TRACE(QDF_MODULE_ID_HDD_DATA, QDF_TRACE_LEVEL_ERROR, - "%s: Transmission timeout occurred jiffies %lu trans_start %lu", - __func__, jiffies, dev->trans_start); + TX_TIMEOUT_TRACE(dev, QDF_MODULE_ID_HDD_DATA); DPTRACE(qdf_dp_trace(NULL, QDF_DP_TRACE_HDD_TX_TIMEOUT, NULL, 0, QDF_TX)); From bb7e2f5927dcaa3fd4328fdf63229c5b195fea35 Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Mon, 17 Oct 2016 12:16:35 -0700 Subject: [PATCH 079/119] qcacld-3.0: 4.8 Kernel Migration - Remove nla_put_u64() nla_put_u64() was replaced by nla_put_u64_64bit() in the 4.7 Kernel. Replace any references as needed, and provide a shim for compiling against older versions of the Linux kernel. Change-Id: Ia85a0d1d839a0c76a90dedd603ea667e029a1c6b CRs-Fixed: 1078754 (cherry picked from commit b5578f0c34243338d9a421e921c9432f5c1d835f) --- core/hdd/inc/wlan_hdd_main.h | 15 +++++++++++++++ core/hdd/src/wlan_hdd_ext_scan.c | 8 ++++---- core/hdd/src/wlan_hdd_scan.c | 8 +++++--- core/hdd/src/wlan_hdd_stats.c | 2 +- core/hdd/src/wlan_hdd_tsf.c | 7 ++++--- 5 files changed, 29 insertions(+), 11 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index bfd9115d7817..dbab5eba0196 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -1947,4 +1947,19 @@ void hdd_unsafe_channel_restart_sap(hdd_context_t *hdd_ctx); int hdd_enable_disable_ca_event(hdd_context_t *hddctx, uint8_t set_value); void wlan_hdd_undo_acs(hdd_adapter_t *adapter); + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0)) +static inline int +hdd_wlan_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value) +{ + return nla_put_u64(skb, attrtype, value); +} +#else +static inline int +hdd_wlan_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value) +{ + return nla_put_u64_64bit(skb, attrtype, value, NL80211_ATTR_PAD); +} +#endif + #endif /* end #if !defined(WLAN_HDD_MAIN_H) */ diff --git a/core/hdd/src/wlan_hdd_ext_scan.c b/core/hdd/src/wlan_hdd_ext_scan.c index 558b15fdd0df..3c16d709596a 100644 --- a/core/hdd/src/wlan_hdd_ext_scan.c +++ b/core/hdd/src/wlan_hdd_ext_scan.c @@ -230,7 +230,7 @@ static int hdd_extscan_nl_fill_bss(struct sk_buff *skb, tSirWifiScanResult *ap, if (!nla_ap) return -EINVAL; - if (nla_put_u64(skb, PARAM_TIME_STAMP, ap->ts) || + if (hdd_wlan_nla_put_u64(skb, PARAM_TIME_STAMP, ap->ts) || nla_put(skb, PARAM_SSID, sizeof(ap->ssid), ap->ssid) || nla_put(skb, PARAM_BSSID, sizeof(ap->bssid), ap->bssid.bytes) || nla_put_u32(skb, PARAM_CHANNEL, ap->channel) || @@ -591,7 +591,7 @@ wlan_hdd_cfg80211_extscan_hotlist_match_ind(void *ctx, if (!ap) goto fail; - if (nla_put_u64(skb, + if (hdd_wlan_nla_put_u64(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_TIME_STAMP, data->ap[i].ts) || nla_put(skb, @@ -837,7 +837,7 @@ wlan_hdd_cfg80211_extscan_full_scan_result_event(void *ctx, if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_REQUEST_ID, pData->requestId) || - nla_put_u64(skb, + hdd_wlan_nla_put_u64(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_TIME_STAMP, pData->ap.ts) || nla_put(skb, @@ -1383,7 +1383,7 @@ wlan_hdd_cfg80211_extscan_hotlist_ssid_match_ind(void *ctx, goto fail; } - if (nla_put_u64(skb, + if (hdd_wlan_nla_put_u64(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_TIME_STAMP, event->ap[i].ts) || nla_put(skb, diff --git a/core/hdd/src/wlan_hdd_scan.c b/core/hdd/src/wlan_hdd_scan.c index 729f0519ccfd..8871b50583a5 100644 --- a/core/hdd/src/wlan_hdd_scan.c +++ b/core/hdd/src/wlan_hdd_scan.c @@ -1085,7 +1085,7 @@ static void hdd_vendor_scan_callback(hdd_adapter_t *adapter, nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_SCAN_FLAGS, req->flags)) goto nla_put_failure; - if (nla_put_u64(skb, QCA_WLAN_VENDOR_ATTR_SCAN_COOKIE, cookie)) + if (hdd_wlan_nla_put_u64(skb, QCA_WLAN_VENDOR_ATTR_SCAN_COOKIE, cookie)) goto nla_put_failure; scan_status = (aborted == true) ? VENDOR_SCAN_STATUS_ABORTED : @@ -1842,7 +1842,8 @@ static int wlan_hdd_send_scan_start_event(struct wiphy *wiphy, return -ENOMEM; } - if (nla_put_u64(skb, QCA_WLAN_VENDOR_ATTR_SCAN_COOKIE, cookie)) { + if (hdd_wlan_nla_put_u64(skb, QCA_WLAN_VENDOR_ATTR_SCAN_COOKIE, + cookie)) { hdd_err("nla put fail"); kfree_skb(skb); return -EINVAL; @@ -1859,7 +1860,8 @@ static int wlan_hdd_send_scan_start_event(struct wiphy *wiphy, return -ENOMEM; } - if (nla_put_u64(skb, QCA_WLAN_VENDOR_ATTR_SCAN_COOKIE, cookie)) { + if (hdd_wlan_nla_put_u64(skb, QCA_WLAN_VENDOR_ATTR_SCAN_COOKIE, + cookie)) { kfree_skb(skb); return -EINVAL; } diff --git a/core/hdd/src/wlan_hdd_stats.c b/core/hdd/src/wlan_hdd_stats.c index d03a97c50299..e38f1db5f85a 100644 --- a/core/hdd/src/wlan_hdd_stats.c +++ b/core/hdd/src/wlan_hdd_stats.c @@ -473,7 +473,7 @@ static bool put_wifi_iface_stats(tpSirWifiIfaceStat pWifiIfaceStat, nla_put_u32(vendor_event, QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_LEAKY_AP_GUARD_TIME, pWifiIfaceStat->rx_leak_window) || - nla_put_u64(vendor_event, + hdd_wlan_nla_put_u64(vendor_event, QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_AVERAGE_TSF_OFFSET, average_tsf_offset)) { hdd_err("QCA_WLAN_VENDOR_ATTR put fail"); diff --git a/core/hdd/src/wlan_hdd_tsf.c b/core/hdd/src/wlan_hdd_tsf.c index 00ba66a82c59..7710527d9a65 100644 --- a/core/hdd/src/wlan_hdd_tsf.c +++ b/core/hdd/src/wlan_hdd_tsf.c @@ -342,12 +342,13 @@ static int __wlan_hdd_cfg80211_handle_tsf_cmd(struct wiphy *wiphy, status = -ENOMEM; goto end; } - if (nla_put_u64(reply_skb, QCA_WLAN_VENDOR_ATTR_TSF_TIMER_VALUE, + if (hdd_wlan_nla_put_u64(reply_skb, + QCA_WLAN_VENDOR_ATTR_TSF_TIMER_VALUE, ((uint64_t) adapter->tsf_high << 32 | adapter->tsf_low)) || - nla_put_u64(reply_skb, + hdd_wlan_nla_put_u64(reply_skb, QCA_WLAN_VENDOR_ATTR_TSF_SOC_TIMER_VALUE, - adapter->tsf_sync_soc_timer)){ + adapter->tsf_sync_soc_timer)) { hdd_err("nla put fail"); kfree_skb(reply_skb); status = -EINVAL; From 5df441e901f4f22b91aa315652c2407bcc7d049b Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Mon, 17 Oct 2016 15:05:36 -0700 Subject: [PATCH 080/119] qcacld-3.0: 4.8 Kernel Migration - Update calls to cfg80211_scan_done As of the Linux kernel 4.7, the Api for cfg80211_scan_done() has changed. Update references to the function and include a wrapper to support compiling against older kernels. Change-Id: I955d6c3767de86baeeb0760e42d12f46d0a00a5a CRs-Fixed: 1078834 (cherry picked from commit 64288ebb9bcf45a398c7625bf79ad35dcc202eed) --- core/hdd/src/wlan_hdd_scan.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/core/hdd/src/wlan_hdd_scan.c b/core/hdd/src/wlan_hdd_scan.c index 8871b50583a5..17d70699e543 100644 --- a/core/hdd/src/wlan_hdd_scan.c +++ b/core/hdd/src/wlan_hdd_scan.c @@ -1103,7 +1103,29 @@ nla_put_failure: return; } -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0)) +/** + * hdd_cfg80211_scan_done() - Scan completed callback to cfg80211 + * @adapter: Pointer to the adapter + * @req : Scan request + * @aborted : true scan aborted false scan success + * + * This function notifies scan done to cfg80211 + * + * Return: none + */ +static void hdd_cfg80211_scan_done(hdd_adapter_t *adapter, + struct cfg80211_scan_request *req, + bool aborted) +{ + struct cfg80211_scan_info info = { + .aborted = aborted + }; + + if (adapter->dev->flags & IFF_UP) + cfg80211_scan_done(req, &info); +} +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) /** * hdd_cfg80211_scan_done() - Scan completed callback to cfg80211 * @adapter: Pointer to the adapter @@ -1294,7 +1316,7 @@ static void wlan_hdd_cfg80211_scan_block_cb(struct work_struct *work) request->n_channels = 0; hdd_err("##In DFS Master mode. Scan aborted. Null result sent"); - cfg80211_scan_done(request, true); + hdd_cfg80211_scan_done(adapter, request, true); adapter->request = NULL; } } @@ -2669,7 +2691,7 @@ void hdd_cleanup_scan_queue(hdd_context_t *hdd_ctx) hdd_err("HDD adapter magic is invalid"); } else { if (NL_SCAN == source) - cfg80211_scan_done(req, aborted); + hdd_cfg80211_scan_done(adapter, req, aborted); else hdd_vendor_scan_callback(adapter, req, aborted); hdd_info("removed Scan id: %d, req = %p", From 53c3aa6a2471aa32678456ab01481b94831fd25b Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Tue, 18 Oct 2016 11:40:07 -0700 Subject: [PATCH 081/119] qcacld-3.0: 4.8 Kernel Migration - Update calls to abs() As of the Linux kernel 4.5, the abs() macro has changed so the results are no longer promoted to long. Fix related issues. Change-Id: Ic1e71327427df5fe2b47587f4dc164cbd50b86ee CRs-Fixed: 1079308 (cherry picked from commit c980b6d8cf8f9a8beeebd702b2fc98e6b8ffc948) --- core/sap/dfs/src/dfs_phyerr_tlv.c | 6 ++++-- core/sme/src/csr/csr_host_scan_roam.c | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/core/sap/dfs/src/dfs_phyerr_tlv.c b/core/sap/dfs/src/dfs_phyerr_tlv.c index 82c890f55d16..e232efee541b 100644 --- a/core/sap/dfs/src/dfs_phyerr_tlv.c +++ b/core/sap/dfs/src/dfs_phyerr_tlv.c @@ -754,13 +754,15 @@ tlv_calc_event_freq_chirp(struct ath_dfs *dfs, struct rx_radar_status *rs, DFS_DPRINTK(dfs, ATH_DEBUG_DFS_PHYERR | ATH_DEBUG_DFS_PHYERR_SUM, "%s: delta_peak=%d, pulse_duration=%d, bin_resolution=%d.%dKHz, " - "radar_fft_long_period=%d, total_bw=%d.%ldKHz", + "radar_fft_long_period=%d, total_bw=%d.%dKHz", __func__, delta_peak, pulse_duration, bin_resolution / 1000, bin_resolution % 1000, - radar_fft_long_period, total_bw / 100, abs(total_bw % 100)); + radar_fft_long_period, + total_bw / 100, + (int)abs(total_bw % 100)); total_bw /= 100; /* back to KHz */ diff --git a/core/sme/src/csr/csr_host_scan_roam.c b/core/sme/src/csr/csr_host_scan_roam.c index 43ddcaf5f6a0..cfe5cbc431d8 100644 --- a/core/sme/src/csr/csr_host_scan_roam.c +++ b/core/sme/src/csr/csr_host_scan_roam.c @@ -185,9 +185,9 @@ void csr_neighbor_roam_process_scan_results(tpAniSirGlobal mac_ctx, descr = &scan_result->BssDescriptor; QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, FL("Scan result: BSSID " MAC_ADDRESS_STR - " (Rssi %ld, Ch:%d)"), + " (Rssi %d, Ch:%d)"), MAC_ADDR_ARRAY(descr->bssId), - abs(descr->rssi), descr->channelId); + (int)abs(descr->rssi), descr->channelId); if (!qdf_mem_cmp(descr->bssId, n_roam_info->currAPbssid.bytes, From cc1753d2884798ddc84583740a3e56f6178984da Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Wed, 19 Oct 2016 16:25:45 -0700 Subject: [PATCH 082/119] qcacld-3.0: 4.8 Kernel Migration - Remove ablkcipher As of version 4.8 of the Linux kernel, the ablkcipher Api is removed. Remove all obsolete crypto functions that reference this Api. Change-Id: Ia82743d048834a67dfce23b91f660beb59b1e94d CRs-Fixed: 1079951 (cherry picked from commit bf349575d765f53f207c7cb2ad6c66a198cf07de) --- core/cds/inc/cds_crypto.h | 55 +--- core/cds/inc/cds_utils.h | 66 ----- core/cds/src/cds_utils.c | 529 -------------------------------------- 3 files changed, 1 insertion(+), 649 deletions(-) diff --git a/core/cds/inc/cds_crypto.h b/core/cds/inc/cds_crypto.h index 0f6ff79468fd..c3da63bca211 100644 --- a/core/cds/inc/cds_crypto.h +++ b/core/cds/inc/cds_crypto.h @@ -34,28 +34,7 @@ * */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static inline struct crypto_ahash *cds_crypto_alloc_ahash(const char *alg_name, - u32 type, u32 mask) -{ - return crypto_alloc_ahash(alg_name, type, mask); -} +#include static inline struct crypto_cipher * cds_crypto_alloc_cipher(const char *alg_name, u32 type, u32 mask) @@ -68,36 +47,4 @@ static inline void cds_crypto_free_cipher(struct crypto_cipher *tfm) crypto_free_cipher(tfm); } -static inline void cds_crypto_free_ahash(struct crypto_ahash *tfm) -{ - crypto_free_ahash(tfm); -} - -static inline int cds_crypto_ahash_setkey(struct crypto_ahash *tfm, - const u8 *key, unsigned int keylen) -{ - return crypto_ahash_setkey(tfm, key, keylen); -} - -static inline int cds_crypto_ahash_digest(struct ahash_request *req) -{ - return crypto_ahash_digest(req); -} - -static inline struct crypto_ablkcipher * -cds_crypto_alloc_ablkcipher(const char *alg_name, u32 type, u32 mask) -{ - return crypto_alloc_ablkcipher(alg_name, type, mask); -} - -static inline void cds_ablkcipher_request_free(struct ablkcipher_request *req) -{ - ablkcipher_request_free(req); -} - -static inline void cds_crypto_free_ablkcipher(struct crypto_ablkcipher *tfm) -{ - crypto_free_ablkcipher(tfm); -} - #endif /* if !defined __CDS_CRYPTO_H */ diff --git a/core/cds/inc/cds_utils.h b/core/cds/inc/cds_utils.h index 0a0cef30f7eb..839ef3dcc6af 100644 --- a/core/cds/inc/cds_utils.h +++ b/core/cds/inc/cds_utils.h @@ -118,72 +118,6 @@ QDF_STATUS cds_crypto_deinit(uint32_t hCryptProv); QDF_STATUS cds_rand_get_bytes(uint32_t handle, uint8_t *pbBuf, uint32_t numBytes); -/** - * cds_sha1_hmac_str - * - * FUNCTION: - * Generate the HMAC-SHA1 of a string given a key. - * - * LOGIC: - * Standard HMAC processing from RFC 2104. The code is provided in the - * appendix of the RFC. - * - * ASSUMPTIONS: - * The RFC is correct. - * - * @param text text to be hashed - * @param textLen length of text - * @param key key to use for HMAC - * @param keyLen length of key - * @param digest holds resultant SHA1 HMAC (20B) - * - * @return QDF_STATUS_SUCCSS if the operation succeeds - * - */ -QDF_STATUS cds_sha1_hmac_str(uint32_t cryptHandle, /* Handle */ - uint8_t *text, /* pointer to data stream */ - uint32_t textLen, /* length of data stream */ - uint8_t *key, /* pointer to authentication key */ - uint32_t keyLen, /* length of authentication key */ - uint8_t digest[CDS_DIGEST_SHA1_SIZE]); /* caller digest to be filled in */ - -/** - * cds_md5_hmac_str - * - * FUNCTION: - * Generate the HMAC-MD5 of a string given a key. - * - * LOGIC: - * Standard HMAC processing from RFC 2104. The code is provided in the - * appendix of the RFC. - * - * ASSUMPTIONS: - * The RFC is correct. - * - * @param text text to be hashed - * @param textLen length of text - * @param key key to use for HMAC - * @param keyLen length of key - * @param digest holds resultant MD5 HMAC (16B) - * - * @return QDF_STATUS_SUCCSS if the operation succeeds - * - */ -QDF_STATUS cds_md5_hmac_str(uint32_t cryptHandle, /* Handle */ - uint8_t *text, /* pointer to data stream */ - uint32_t textLen, /* length of data stream */ - uint8_t *key, /* pointer to authentication key */ - uint32_t keyLen, /* length of authentication key */ - uint8_t digest[CDS_DIGEST_MD5_SIZE]); /* caller digest to be filled in */ - -QDF_STATUS cds_encrypt_aes(uint32_t cryptHandle, /* Handle */ - uint8_t *pText, /* pointer to data stream */ - uint8_t *Encrypted, uint8_t *pKey); /* pointer to authentication key */ - -QDF_STATUS cds_decrypt_aes(uint32_t cryptHandle, /* Handle */ - uint8_t *pText, /* pointer to data stream */ - uint8_t *pDecrypted, uint8_t *pKey); /* pointer to authentication key */ - uint32_t cds_chan_to_freq(uint8_t chan); uint8_t cds_freq_to_chan(uint32_t freq); enum cds_band_type cds_chan_to_band(uint32_t chan); diff --git a/core/cds/src/cds_utils.c b/core/cds/src/cds_utils.c index da331dd8d7ca..8eaa2f501d4a 100644 --- a/core/cds/src/cds_utils.c +++ b/core/cds/src/cds_utils.c @@ -38,9 +38,6 @@ cds_crypto_init() - Initializes Crypto module cds_crypto_deinit() - De-initializes Crypto module cds_rand_get_bytes() - Generates random byte - cds_sha1_hmac_str() - Generate the HMAC-SHA1 of a string given a key - cds_encrypt_aes() - Generate AES Encrypted byte stream - cds_decrypt_aes() - Decrypts an AES Encrypted byte stream DEPENDENCIES: ============================================================================*/ @@ -568,532 +565,6 @@ err_tfm: } #endif /* WLAN_FEATURE_11W */ -/** - * cds_sha1_hmac_str - * - * FUNCTION: - * Generate the HMAC-SHA1 of a string given a key. - * - * LOGIC: - * Standard HMAC processing from RFC 2104. The code is provided in the - * appendix of the RFC. - * - * ASSUMPTIONS: - * The RFC is correct. - * - * @param text text to be hashed - * @param textLen length of text - * @param key key to use for HMAC - * @param keyLen length of key - * @param digest holds resultant SHA1 HMAC (20B) - * - * @return QDF_STATUS_SUCCSS if the operation succeeds - * - */ - -struct hmac_sha1_result { - struct completion completion; - int err; -}; - -static void hmac_sha1_complete(struct crypto_async_request *req, int err) -{ - struct hmac_sha1_result *r = req->data; - if (err == -EINPROGRESS) - return; - r->err = err; - complete(&r->completion); -} - -static int -hmac_sha1(uint8_t *key, uint8_t ksize, char *plaintext, uint8_t psize, - uint8_t *output, uint8_t outlen) -{ - int ret = 0; - struct crypto_ahash *tfm; - struct scatterlist sg; - struct ahash_request *req; - struct hmac_sha1_result tresult; - void *hash_buff = NULL; - - unsigned char hash_result[64]; - int i; - - memset(output, 0, outlen); - - init_completion(&tresult.completion); - - tfm = cds_crypto_alloc_ahash("hmac(sha1)", CRYPTO_ALG_TYPE_AHASH, - CRYPTO_ALG_TYPE_AHASH_MASK); - if (IS_ERR(tfm)) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "crypto_alloc_ahash failed"); - ret = PTR_ERR(tfm); - goto err_tfm; - } - - req = ahash_request_alloc(tfm, GFP_KERNEL); - if (!req) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "failed to allocate request for hmac(sha1)"); - ret = -ENOMEM; - goto err_req; - } - - ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, - hmac_sha1_complete, &tresult); - - hash_buff = kzalloc(psize, GFP_KERNEL); - if (!hash_buff) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "failed to kzalloc hash_buff"); - ret = -ENOMEM; - goto err_hash_buf; - } - - memset(hash_result, 0, 64); - memcpy(hash_buff, plaintext, psize); - sg_init_one(&sg, hash_buff, psize); - - if (ksize) { - crypto_ahash_clear_flags(tfm, ~0); - ret = cds_crypto_ahash_setkey(tfm, key, ksize); - if (ret) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "crypto_ahash_setkey failed"); - goto err_setkey; - } - } - - ahash_request_set_crypt(req, &sg, hash_result, psize); - ret = cds_crypto_ahash_digest(req); - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, "ret 0x%x", ret); - - switch (ret) { - case 0: - for (i = 0; i < outlen; i++) - output[i] = hash_result[i]; - break; - case -EINPROGRESS: - case -EBUSY: - ret = wait_for_completion_interruptible(&tresult.completion); - if (!ret && !tresult.err) { - for (i = 0; i < outlen; i++) - output[i] = hash_result[i]; - INIT_COMPLETION(tresult.completion); - break; - } else { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "wait_for_completion_interruptible failed"); - if (!ret) - ret = tresult.err; - goto out; - } - default: - goto out; - } - -out: -err_setkey: - kfree(hash_buff); -err_hash_buf: - ahash_request_free(req); -err_req: - cds_crypto_free_ahash(tfm); -err_tfm: - return ret; -} - -QDF_STATUS cds_sha1_hmac_str(uint32_t cryptHandle, /* Handle */ - uint8_t *pText, /* pointer to data stream */ - uint32_t textLen, /* length of data stream */ - uint8_t *pKey, /* pointer to authentication key */ - uint32_t keyLen, /* length of authentication key */ - uint8_t digest[CDS_DIGEST_SHA1_SIZE]) -{ /* caller digest to be filled in */ - int ret = 0; - - ret = hmac_sha1(pKey, /* uint8_t *key, */ - (uint8_t) keyLen, /* uint8_t ksize, */ - (char *)pText, /* char *plaintext, */ - (uint8_t) textLen, /* uint8_t psize, */ - digest, /* uint8_t *output, */ - CDS_DIGEST_SHA1_SIZE /* uint8_t outlen */ - ); - - if (ret != 0) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "hmac_sha1() call failed"); - return QDF_STATUS_E_FAULT; - } - - return QDF_STATUS_SUCCESS; -} - -/** - * cds_md5_hmac_str - * - * FUNCTION: - * Generate the HMAC-MD5 of a string given a key. - * - * LOGIC: - * Standard HMAC processing from RFC 2104. The code is provided in the - * appendix of the RFC. - * - * ASSUMPTIONS: - * The RFC is correct. - * - * @param text text to be hashed - * @param textLen length of text - * @param key key to use for HMAC - * @param keyLen length of key - * @param digest holds resultant MD5 HMAC (20B) - * - * @return QDF_STATUS_SUCCSS if the operation succeeds - * - */ -struct hmac_md5_result { - struct completion completion; - int err; -}; - -static void hmac_md5_complete(struct crypto_async_request *req, int err) -{ - struct hmac_md5_result *r = req->data; - if (err == -EINPROGRESS) - return; - r->err = err; - complete(&r->completion); -} - -static int -hmac_md5(uint8_t *key, uint8_t ksize, char *plaintext, uint8_t psize, - uint8_t *output, uint8_t outlen) -{ - int ret = 0; - struct crypto_ahash *tfm; - struct scatterlist sg; - struct ahash_request *req; - struct hmac_md5_result tresult = {.err = 0 }; - void *hash_buff = NULL; - - unsigned char hash_result[64]; - int i; - - memset(output, 0, outlen); - - init_completion(&tresult.completion); - - tfm = cds_crypto_alloc_ahash("hmac(md5)", CRYPTO_ALG_TYPE_AHASH, - CRYPTO_ALG_TYPE_AHASH_MASK); - if (IS_ERR(tfm)) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "crypto_alloc_ahash failed"); - ret = PTR_ERR(tfm); - goto err_tfm; - } - - req = ahash_request_alloc(tfm, GFP_KERNEL); - if (!req) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "failed to allocate request for hmac(md5)"); - ret = -ENOMEM; - goto err_req; - } - - ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, - hmac_md5_complete, &tresult); - - hash_buff = kzalloc(psize, GFP_KERNEL); - if (!hash_buff) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "failed to kzalloc hash_buff"); - ret = -ENOMEM; - goto err_hash_buf; - } - - memset(hash_result, 0, 64); - memcpy(hash_buff, plaintext, psize); - sg_init_one(&sg, hash_buff, psize); - - if (ksize) { - crypto_ahash_clear_flags(tfm, ~0); - ret = cds_crypto_ahash_setkey(tfm, key, ksize); - if (ret) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "crypto_ahash_setkey failed"); - goto err_setkey; - } - } - - ahash_request_set_crypt(req, &sg, hash_result, psize); - ret = cds_crypto_ahash_digest(req); - - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, "ret 0x%x", ret); - - switch (ret) { - case 0: - for (i = 0; i < outlen; i++) - output[i] = hash_result[i]; - break; - case -EINPROGRESS: - case -EBUSY: - ret = wait_for_completion_interruptible(&tresult.completion); - if (!ret && !tresult.err) { - INIT_COMPLETION(tresult.completion); - break; - } else { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "wait_for_completion_interruptible failed"); - if (!ret) - ret = tresult.err; - goto out; - } - default: - goto out; - } - -out: -err_setkey: - kfree(hash_buff); -err_hash_buf: - ahash_request_free(req); -err_req: - cds_crypto_free_ahash(tfm); -err_tfm: - return ret; -} - -QDF_STATUS cds_md5_hmac_str(uint32_t cryptHandle, /* Handle */ - uint8_t *pText, /* pointer to data stream */ - uint32_t textLen, /* length of data stream */ - uint8_t *pKey, /* pointer to authentication key */ - uint32_t keyLen, /* length of authentication key */ - uint8_t digest[CDS_DIGEST_MD5_SIZE]) -{ /* caller digest to be filled in */ - int ret = 0; - - ret = hmac_md5(pKey, /* uint8_t *key, */ - (uint8_t) keyLen, /* uint8_t ksize, */ - (char *)pText, /* char *plaintext, */ - (uint8_t) textLen, /* uint8_t psize, */ - digest, /* uint8_t *output, */ - CDS_DIGEST_MD5_SIZE /* uint8_t outlen */ - ); - - if (ret != 0) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "hmac_md5() call failed"); - return QDF_STATUS_E_FAULT; - } - - return QDF_STATUS_SUCCESS; -} - -struct ecb_aes_result { - struct completion completion; - int err; -}; - -static void ecb_aes_complete(struct crypto_async_request *req, int err) -{ - struct ecb_aes_result *r = req->data; - if (err == -EINPROGRESS) - return; - r->err = err; - complete(&r->completion); -} - -/*-------------------------------------------------------------------------- - - \brief cds_encrypt_aes() - Generate AES Encrypted byte stream - - The cds_encrypt_aes() function generates the encrypted byte stream for given text. - - Buffer should be allocated before calling cds_rand_get_bytes(). - - Attempting to initialize an already initialized lock results in - a failure. - - \param lock - pointer to the opaque lock object to initialize - - \return QDF_STATUS_SUCCESS - Successfully generated random memory. - - QDF_STATUS_E_FAULT - pbBuf is an invalid pointer. - - QDF_STATUS_E_FAILURE - default return value if it fails due to - unknown reasons - - ***QDF_STATUS_E_RESOURCES - System resources (other than memory) - are unavailable - \sa - - ( *** return value not considered yet ) - --------------------------------------------------------------------------*/ - -QDF_STATUS cds_encrypt_aes(uint32_t cryptHandle, /* Handle */ - uint8_t *pPlainText, /* pointer to data stream */ - uint8_t *pCiphertext, uint8_t *pKey) -{ /* pointer to authentication key */ - struct ecb_aes_result result; - struct ablkcipher_request *req; - struct crypto_ablkcipher *tfm; - int ret = 0; - char iv[IV_SIZE_AES_128]; - struct scatterlist sg_in; - struct scatterlist sg_out; - - init_completion(&result.completion); - - tfm = cds_crypto_alloc_ablkcipher("cbc(aes)", 0, 0); - if (IS_ERR(tfm)) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "crypto_alloc_ablkcipher failed"); - ret = PTR_ERR(tfm); - goto err_tfm; - } - - req = ablkcipher_request_alloc(tfm, GFP_KERNEL); - if (!req) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "Failed to allocate request for cbc(aes)"); - ret = -ENOMEM; - goto err_req; - } - - ablkcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, - ecb_aes_complete, &result); - - crypto_ablkcipher_clear_flags(tfm, ~0); - - ret = crypto_ablkcipher_setkey(tfm, pKey, AES_KEYSIZE_128); - if (ret) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "crypto_cipher_setkey failed"); - goto err_setkey; - } - - memset(iv, 0, IV_SIZE_AES_128); - - sg_init_one(&sg_in, pPlainText, AES_BLOCK_SIZE); - - sg_init_one(&sg_out, pCiphertext, AES_BLOCK_SIZE); - - ablkcipher_request_set_crypt(req, &sg_in, &sg_out, AES_BLOCK_SIZE, iv); - - crypto_ablkcipher_encrypt(req); - -/* ------------------------------------- */ -err_setkey: - cds_ablkcipher_request_free(req); -err_req: - cds_crypto_free_ablkcipher(tfm); -err_tfm: - /* return ret; */ - if (ret != 0) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "%s() call failed", __func__); - return QDF_STATUS_E_FAULT; - } - - return QDF_STATUS_SUCCESS; -} - -/*-------------------------------------------------------------------------- - - \brief cds_decrypt_aes() - Decrypts an AES Encrypted byte stream - - The cds_decrypt_aes() function decrypts the encrypted byte stream. - - Buffer should be allocated before calling cds_rand_get_bytes(). - - Attempting to initialize an already initialized lock results in - a failure. - - \param lock - pointer to the opaque lock object to initialize - - \return QDF_STATUS_SUCCESS - Successfully generated random memory. - - QDF_STATUS_E_FAULT - pbBuf is an invalid pointer. - - QDF_STATUS_E_FAILURE - default return value if it fails due to - unknown reasons - - ***QDF_STATUS_E_RESOURCES - System resources (other than memory) - are unavailable - \sa - - ( *** return value not considered yet ) - --------------------------------------------------------------------------*/ - -QDF_STATUS cds_decrypt_aes(uint32_t cryptHandle, /* Handle */ - uint8_t *pText, /* pointer to data stream */ - uint8_t *pDecrypted, uint8_t *pKey) -{ /* pointer to authentication key */ -/* QDF_STATUS uResult = QDF_STATUS_E_FAILURE; */ - struct ecb_aes_result result; - struct ablkcipher_request *req; - struct crypto_ablkcipher *tfm; - int ret = 0; - char iv[IV_SIZE_AES_128]; - struct scatterlist sg_in; - struct scatterlist sg_out; - - init_completion(&result.completion); - - tfm = cds_crypto_alloc_ablkcipher("cbc(aes)", 0, 0); - if (IS_ERR(tfm)) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "crypto_alloc_ablkcipher failed"); - ret = PTR_ERR(tfm); - goto err_tfm; - } - - req = ablkcipher_request_alloc(tfm, GFP_KERNEL); - if (!req) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "Failed to allocate request for cbc(aes)"); - ret = -ENOMEM; - goto err_req; - } - - ablkcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, - ecb_aes_complete, &result); - - crypto_ablkcipher_clear_flags(tfm, ~0); - - ret = crypto_ablkcipher_setkey(tfm, pKey, AES_KEYSIZE_128); - if (ret) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "crypto_cipher_setkey failed"); - goto err_setkey; - } - - memset(iv, 0, IV_SIZE_AES_128); - - sg_init_one(&sg_in, pText, AES_BLOCK_SIZE); - - sg_init_one(&sg_out, pDecrypted, AES_BLOCK_SIZE); - - ablkcipher_request_set_crypt(req, &sg_in, &sg_out, AES_BLOCK_SIZE, iv); - - crypto_ablkcipher_decrypt(req); - -/* ------------------------------------- */ -err_setkey: - cds_ablkcipher_request_free(req); -err_req: - cds_crypto_free_ablkcipher(tfm); -err_tfm: - /* return ret; */ - if (ret != 0) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "%s() call failed", __func__); - return QDF_STATUS_E_FAULT; - } - - return QDF_STATUS_SUCCESS; -} uint32_t cds_chan_to_freq(uint8_t chan) { From 9db538b5be80805420ef6eac5e9be40bbf492f05 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 27 Oct 2016 12:54:43 -0700 Subject: [PATCH 083/119] Release 5.1.0.33O Release 5.1.0.33O Change-Id: I1ae9cab43bb68459bf281f05d090fa488b09addd CRs-Fixed: 688141 (cherry picked from commit 34f633444f444cf1e89b1e3dc6486c3f115c431d) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index a8911f6b81ad..cf05326041bc 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "N" +#define QWLAN_VERSION_EXTRA "O" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33N" +#define QWLAN_VERSIONSTR "5.1.0.33O" #endif /* QWLAN_VERSION_H */ From 962336e56da76d65c9b04c684e4bec99ad8253f8 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Thu, 27 Oct 2016 08:05:43 -0700 Subject: [PATCH 084/119] qcacld-3.0: Fix attempt to stop uninitialized HDD QoS timer An assert was observed with the following traceback: qdf_mc_timer_stop+0x90/0x140 [wlan] hdd_wmm_disable_inactivity_timer+0x54/0xd0 [wlan] hdd_wmm_delts+0x168/0x240 [wlan] iw_del_tspec+0x94/0xf0 [wlan] In hdd_wmm_disable_inactivity_timer() there is sufficient guard logic to only act upon a valid timer: if (pQosContext->is_inactivity_timer_running == true) { So it is apparent that this flag was set to true. However in this specific use case the logs show that in the addTS path the timer was not started and the flag was not explicitly set. So the only explanation is that the flag was set via some other mechanism. There are two places where a pQosContext is allocated and initialized. In hdd_wmm_acquire_access() the implicit qos case is handled, and in that function there is an explicit assignment: pQosContext->is_inactivity_timer_running = false; In hdd_wmm_addts() the explicit qos case is handled, and in that function there is not an explicit assignment. Note the memory is allocated by: pQosContext = kmalloc(sizeof(*pQosContext), GFP_KERNEL); And there is not an explicit clearing of the memory. Hence in the case of an explicit addTS the is_inactivity_timer_running flag will have a garbage value. So in the case at handle this garbage value must have been equal to true. Fix this by explicitly setting is_inactivity_timer_running in the explicit qos case. Change-Id: I94325ab6889780d77241d6e1b3ac0a138cf786b8 CRs-Fixed: 1083078 (cherry picked from commit 9e5e59ff7a51680d582711ef1182fc6aace1bfe1) --- core/hdd/src/wlan_hdd_wmm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/core/hdd/src/wlan_hdd_wmm.c b/core/hdd/src/wlan_hdd_wmm.c index 53e0086cca19..5af581e23274 100644 --- a/core/hdd/src/wlan_hdd_wmm.c +++ b/core/hdd/src/wlan_hdd_wmm.c @@ -2157,6 +2157,7 @@ hdd_wlan_wmm_status_e hdd_wmm_addts(hdd_adapter_t *pAdapter, pQosContext->pAdapter = pAdapter; pQosContext->qosFlowId = 0; pQosContext->magic = HDD_WMM_CTX_MAGIC; + pQosContext->is_inactivity_timer_running = false; hdd_notice("Setting up QoS, context %p", pQosContext); From 74ec52e7150b781aebd1206c4e354d576b658a3e Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 27 Oct 2016 13:30:31 -0700 Subject: [PATCH 085/119] Release 5.1.0.33P Release 5.1.0.33P Change-Id: Ieda45269e9e54d13c049a566b52abb484b94561f CRs-Fixed: 688141 (cherry picked from commit b1efbb8202bf4f3b420b89c483ffba9491b78993) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index cf05326041bc..f0af057d79ad 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "O" +#define QWLAN_VERSION_EXTRA "P" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33O" +#define QWLAN_VERSIONSTR "5.1.0.33P" #endif /* QWLAN_VERSION_H */ From e38f4d255fe0c0922ce03a0eee360dcf541b7ffd Mon Sep 17 00:00:00 2001 From: Kiran Kumar Lokere Date: Thu, 20 Oct 2016 17:30:59 -0700 Subject: [PATCH 086/119] qcacld-3.0: Update the CSA processing with new VHT op definition channel width is not populated properly into the channel switch parameters hence the phy_mode is configured wrongly to the FW. Correct the channel width in the channel switch parameters and update the CSA processing with new VHT operation IE definition. Change-Id: I4f299dd721b602efb9e64797b1bdb34972e07797 CRs-Fixed: 1081503 (cherry picked from commit ebc53cabfb357847e434a4c822878fc4f1910be3) --- .../src/pe/lim/lim_send_sme_rsp_messages.c | 349 ++++++++++-------- core/mac/src/pe/lim/lim_utils.h | 3 + 2 files changed, 208 insertions(+), 144 deletions(-) diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c index ab2fcb67c14c..b5094115ff18 100644 --- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c +++ b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c @@ -1962,6 +1962,67 @@ lim_send_sme_ibss_peer_ind(tpAniSirGlobal pMac, } +void lim_process_csa_wdw_ie(tpAniSirGlobal mac_ctx, + struct csa_offload_params *csa_params, + tLimWiderBWChannelSwitchInfo *chnl_switch_info, + tpPESession session_entry) +{ + struct ch_params_s ch_params = {0}; + uint8_t ap_new_ch_width; + bool new_ch_width_dfn = false; + uint8_t center_freq_diff; + + ap_new_ch_width = csa_params->new_ch_width + 1; + if ((ap_new_ch_width == CH_WIDTH_80MHZ) && + csa_params->new_ch_freq_seg2) { + new_ch_width_dfn = true; + if (csa_params->new_ch_freq_seg2 > + csa_params->new_ch_freq_seg1) + center_freq_diff = csa_params->new_ch_freq_seg2 - + csa_params->new_ch_freq_seg1; + else + center_freq_diff = csa_params->new_ch_freq_seg1 - + csa_params->new_ch_freq_seg2; + if (center_freq_diff == CENTER_FREQ_DIFF_160MHz) + ap_new_ch_width = CH_WIDTH_160MHZ; + else if (center_freq_diff > CENTER_FREQ_DIFF_80P80MHz) + ap_new_ch_width = CH_WIDTH_80P80MHZ; + else + ap_new_ch_width = CH_WIDTH_80MHZ; + } + session_entry->gLimChannelSwitch.state = + eLIM_CHANNEL_SWITCH_PRIMARY_AND_SECONDARY; + if ((ap_new_ch_width == CH_WIDTH_160MHZ) && + !new_ch_width_dfn) { + ch_params.ch_width = CH_WIDTH_160MHZ; + cds_set_channel_params(csa_params->channel, 0, + &ch_params); + ap_new_ch_width = ch_params.ch_width; + csa_params->new_ch_freq_seg1 = ch_params.center_freq_seg0; + csa_params->new_ch_freq_seg2 = ch_params.center_freq_seg1; + } + chnl_switch_info->newChanWidth = ap_new_ch_width; + chnl_switch_info->newCenterChanFreq0 = csa_params->new_ch_freq_seg1; + chnl_switch_info->newCenterChanFreq1 = csa_params->new_ch_freq_seg2; + + if (session_entry->ch_width == ap_new_ch_width) + goto prnt_log; + + if (session_entry->ch_width == CH_WIDTH_80MHZ) { + chnl_switch_info->newChanWidth = CH_WIDTH_80MHZ; + chnl_switch_info->newCenterChanFreq1 = 0; + } else { + session_entry->ch_width = ap_new_ch_width; + chnl_switch_info->newChanWidth = ap_new_ch_width; + } +prnt_log: + lim_log(mac_ctx, LOG1, + FL("new channel: %d new_ch_width:%d seg0:%d seg1:%d"), + csa_params->channel, + chnl_switch_info->newChanWidth, + chnl_switch_info->newCenterChanFreq0, + chnl_switch_info->newCenterChanFreq1); +} /** * lim_handle_csa_offload_msg() - Handle CSA offload message * @mac_ctx: pointer to global adapter context @@ -2011,181 +2072,181 @@ void lim_handle_csa_offload_msg(tpAniSirGlobal mac_ctx, tpSirMsgQ msg) goto err; } - if (LIM_IS_STA_ROLE(session_entry)) { - /* - * on receiving channel switch announcement from AP, delete all - * TDLS peers before leaving BSS and proceed for channel switch - */ - lim_delete_tdls_peers(mac_ctx, session_entry); + if (!LIM_IS_STA_ROLE(session_entry)) { + lim_log(mac_ctx, LOG1, FL("Invalid role to handle CSA")); + goto err; + } - lim_ch_switch = &session_entry->gLimChannelSwitch; - session_entry->gLimChannelSwitch.switchMode = - csa_params->switch_mode; - /* timer already started by firmware, switch immediately */ - session_entry->gLimChannelSwitch.switchCount = 0; - session_entry->gLimChannelSwitch.primaryChannel = - csa_params->channel; - session_entry->gLimChannelSwitch.state = - eLIM_CHANNEL_SWITCH_PRIMARY_ONLY; - session_entry->gLimChannelSwitch.ch_width = CH_WIDTH_20MHZ; - lim_ch_switch->sec_ch_offset = - session_entry->htSecondaryChannelOffset; - session_entry->gLimChannelSwitch.ch_center_freq_seg0 = 0; - session_entry->gLimChannelSwitch.ch_center_freq_seg1 = 0; - chnl_switch_info = - &session_entry->gLimWiderBWChannelSwitch; + /* + * on receiving channel switch announcement from AP, delete all + * TDLS peers before leaving BSS and proceed for channel switch + */ + lim_delete_tdls_peers(mac_ctx, session_entry); - lim_log(mac_ctx, LOG1, - FL("vht:%d ht:%d flag:%x chan:%d seg1:%d seg2:%d width:%d country:%s class:%d"), + lim_ch_switch = &session_entry->gLimChannelSwitch; + session_entry->gLimChannelSwitch.switchMode = + csa_params->switch_mode; + /* timer already started by firmware, switch immediately */ + session_entry->gLimChannelSwitch.switchCount = 0; + session_entry->gLimChannelSwitch.primaryChannel = + csa_params->channel; + session_entry->gLimChannelSwitch.state = + eLIM_CHANNEL_SWITCH_PRIMARY_ONLY; + session_entry->gLimChannelSwitch.ch_width = CH_WIDTH_20MHZ; + lim_ch_switch->sec_ch_offset = + session_entry->htSecondaryChannelOffset; + session_entry->gLimChannelSwitch.ch_center_freq_seg0 = 0; + session_entry->gLimChannelSwitch.ch_center_freq_seg1 = 0; + chnl_switch_info = + &session_entry->gLimWiderBWChannelSwitch; + + lim_log(mac_ctx, LOG1, + FL("vht:%d ht:%d flag:%x chan:%d"), session_entry->vhtCapability, session_entry->htSupportedChannelWidthSet, csa_params->ies_present_flag, - csa_params->channel, csa_params->new_ch_freq_seg1, + csa_params->channel); + lim_log(mac_ctx, LOG1, + FL("seg1:%d seg2:%d width:%d country:%s class:%d"), + csa_params->new_ch_freq_seg1, csa_params->new_ch_freq_seg2, csa_params->new_ch_width, mac_ctx->scan.countryCodeCurrent, csa_params->new_op_class); - if (session_entry->vhtCapability && - session_entry->htSupportedChannelWidthSet) { - if (csa_params->ies_present_flag & lim_wbw_ie_present) { + if (session_entry->vhtCapability && + session_entry->htSupportedChannelWidthSet) { + if (csa_params->ies_present_flag & lim_wbw_ie_present) { + lim_process_csa_wdw_ie(mac_ctx, csa_params, + chnl_switch_info, session_entry); + lim_ch_switch->sec_ch_offset = + csa_params->sec_chan_offset; + } else if (csa_params->ies_present_flag + & lim_xcsa_ie_present) { + chan_space = + cds_reg_dmn_get_chanwidth_from_opclass( + mac_ctx->scan.countryCodeCurrent, + csa_params->channel, + csa_params->new_op_class); + session_entry->gLimChannelSwitch.state = + eLIM_CHANNEL_SWITCH_PRIMARY_AND_SECONDARY; + + if (chan_space == 80) { chnl_switch_info->newChanWidth = - csa_params->new_ch_width; - chnl_switch_info->newCenterChanFreq0 = - csa_params->new_ch_freq_seg1; - chnl_switch_info->newCenterChanFreq1 = - csa_params->new_ch_freq_seg2; - session_entry->gLimChannelSwitch.state = - eLIM_CHANNEL_SWITCH_PRIMARY_AND_SECONDARY; - session_entry->gLimChannelSwitch.ch_width = - csa_params->new_ch_width + 1; - } else if (csa_params->ies_present_flag - & lim_xcsa_ie_present) { - chan_space = - cds_reg_dmn_get_chanwidth_from_opclass( - mac_ctx->scan.countryCodeCurrent, - csa_params->channel, - csa_params->new_op_class); - session_entry->gLimChannelSwitch.state = - eLIM_CHANNEL_SWITCH_PRIMARY_AND_SECONDARY; - - if (chan_space == 80) { - chnl_switch_info->newChanWidth = - CH_WIDTH_80MHZ; - } else if (chan_space == 40) { - chnl_switch_info->newChanWidth = - CH_WIDTH_40MHZ; - } else { - chnl_switch_info->newChanWidth = - CH_WIDTH_20MHZ; - lim_ch_switch->state = - eLIM_CHANNEL_SWITCH_PRIMARY_ONLY; - } - - ch_params.ch_width = - chnl_switch_info->newChanWidth; - cds_set_channel_params(csa_params->channel, - 0, &ch_params); - chnl_switch_info->newCenterChanFreq0 = - ch_params.center_freq_seg0; - /* - * This is not applicable for 20/40/80 MHz. - * Only used when we support 80+80 MHz operation. - * In case of 80+80 MHz, this parameter indicates - * center channel frequency index of 80 MHz - * channel offrequency segment 1. - */ - chnl_switch_info->newCenterChanFreq1 = - ch_params.center_freq_seg1; - lim_ch_switch->sec_ch_offset = - ch_params.sec_ch_offset; - - } - session_entry->gLimChannelSwitch.ch_center_freq_seg0 = - chnl_switch_info->newCenterChanFreq0; - session_entry->gLimChannelSwitch.ch_center_freq_seg1 = - chnl_switch_info->newCenterChanFreq1; - session_entry->gLimChannelSwitch.ch_width = - chnl_switch_info->newChanWidth; - - } else if (session_entry->htSupportedChannelWidthSet) { - if (csa_params->ies_present_flag - & lim_xcsa_ie_present) { - chan_space = - cds_reg_dmn_get_chanwidth_from_opclass( - mac_ctx->scan.countryCodeCurrent, - csa_params->channel, - csa_params->new_op_class); - lim_ch_switch->state = - eLIM_CHANNEL_SWITCH_PRIMARY_AND_SECONDARY; - if (chan_space == 40) { - lim_ch_switch->ch_width = - CH_WIDTH_40MHZ; - chnl_switch_info->newChanWidth = - CH_WIDTH_40MHZ; - ch_params.ch_width = - chnl_switch_info->newChanWidth; - cds_set_channel_params( - csa_params->channel, - 0, &ch_params); - lim_ch_switch->ch_center_freq_seg0 = - ch_params.center_freq_seg0; - lim_ch_switch->sec_ch_offset = - ch_params.sec_ch_offset; - } else { - lim_ch_switch->ch_width = - CH_WIDTH_20MHZ; - chnl_switch_info->newChanWidth = - CH_WIDTH_40MHZ; - lim_ch_switch->state = - eLIM_CHANNEL_SWITCH_PRIMARY_ONLY; - lim_ch_switch->sec_ch_offset = - PHY_SINGLE_CHANNEL_CENTERED; - } + CH_WIDTH_80MHZ; + } else if (chan_space == 40) { + chnl_switch_info->newChanWidth = + CH_WIDTH_40MHZ; } else { + chnl_switch_info->newChanWidth = + CH_WIDTH_20MHZ; + lim_ch_switch->state = + eLIM_CHANNEL_SWITCH_PRIMARY_ONLY; + } + + ch_params.ch_width = + chnl_switch_info->newChanWidth; + cds_set_channel_params(csa_params->channel, + 0, &ch_params); + chnl_switch_info->newCenterChanFreq0 = + ch_params.center_freq_seg0; + /* + * This is not applicable for 20/40/80 MHz. + * Only used when we support 80+80 MHz operation. + * In case of 80+80 MHz, this parameter indicates + * center channel frequency index of 80 MHz + * channel offrequency segment 1. + */ + chnl_switch_info->newCenterChanFreq1 = + ch_params.center_freq_seg1; + lim_ch_switch->sec_ch_offset = + ch_params.sec_ch_offset; + + } + session_entry->gLimChannelSwitch.ch_center_freq_seg0 = + chnl_switch_info->newCenterChanFreq0; + session_entry->gLimChannelSwitch.ch_center_freq_seg1 = + chnl_switch_info->newCenterChanFreq1; + session_entry->gLimChannelSwitch.ch_width = + chnl_switch_info->newChanWidth; + + } else if (session_entry->htSupportedChannelWidthSet) { + if (csa_params->ies_present_flag + & lim_xcsa_ie_present) { + chan_space = + cds_reg_dmn_get_chanwidth_from_opclass( + mac_ctx->scan.countryCodeCurrent, + csa_params->channel, + csa_params->new_op_class); + lim_ch_switch->state = + eLIM_CHANNEL_SWITCH_PRIMARY_AND_SECONDARY; + if (chan_space == 40) { lim_ch_switch->ch_width = CH_WIDTH_40MHZ; - lim_ch_switch->state = - eLIM_CHANNEL_SWITCH_PRIMARY_AND_SECONDARY; - ch_params.ch_width = CH_WIDTH_40MHZ; - cds_set_channel_params(csa_params->channel, + chnl_switch_info->newChanWidth = + CH_WIDTH_40MHZ; + ch_params.ch_width = + chnl_switch_info->newChanWidth; + cds_set_channel_params( + csa_params->channel, 0, &ch_params); lim_ch_switch->ch_center_freq_seg0 = ch_params.center_freq_seg0; lim_ch_switch->sec_ch_offset = ch_params.sec_ch_offset; + } else { + lim_ch_switch->ch_width = + CH_WIDTH_20MHZ; + chnl_switch_info->newChanWidth = + CH_WIDTH_40MHZ; + lim_ch_switch->state = + eLIM_CHANNEL_SWITCH_PRIMARY_ONLY; + lim_ch_switch->sec_ch_offset = + PHY_SINGLE_CHANNEL_CENTERED; } - + } else { + lim_ch_switch->ch_width = + CH_WIDTH_40MHZ; + lim_ch_switch->state = + eLIM_CHANNEL_SWITCH_PRIMARY_AND_SECONDARY; + ch_params.ch_width = CH_WIDTH_40MHZ; + cds_set_channel_params(csa_params->channel, + 0, &ch_params); + lim_ch_switch->ch_center_freq_seg0 = + ch_params.center_freq_seg0; + lim_ch_switch->sec_ch_offset = + ch_params.sec_ch_offset; } - lim_log(mac_ctx, LOG1, FL("new ch width = %d space:%d"), + + } + lim_log(mac_ctx, LOG1, FL("new ch width = %d space:%d"), session_entry->gLimChannelSwitch.ch_width, chan_space); - lim_prepare_for11h_channel_switch(mac_ctx, session_entry); - csa_offload_ind = qdf_mem_malloc(sizeof(tSmeCsaOffloadInd)); - if (NULL == csa_offload_ind) { - lim_log(mac_ctx, LOGE, + lim_prepare_for11h_channel_switch(mac_ctx, session_entry); + csa_offload_ind = qdf_mem_malloc(sizeof(tSmeCsaOffloadInd)); + if (NULL == csa_offload_ind) { + lim_log(mac_ctx, LOGE, FL("memalloc fail eWNI_SME_CSA_OFFLOAD_EVENT")); - goto err; - } + goto err; + } - csa_offload_ind->mesgType = eWNI_SME_CSA_OFFLOAD_EVENT; - csa_offload_ind->mesgLen = sizeof(tSmeCsaOffloadInd); - qdf_mem_copy(csa_offload_ind->bssid.bytes, session_entry->bssId, - QDF_MAC_ADDR_SIZE); - mmh_msg.type = eWNI_SME_CSA_OFFLOAD_EVENT; - mmh_msg.bodyptr = csa_offload_ind; - mmh_msg.bodyval = 0; - lim_log(mac_ctx, LOG1, + csa_offload_ind->mesgType = eWNI_SME_CSA_OFFLOAD_EVENT; + csa_offload_ind->mesgLen = sizeof(tSmeCsaOffloadInd); + qdf_mem_copy(csa_offload_ind->bssid.bytes, session_entry->bssId, + QDF_MAC_ADDR_SIZE); + mmh_msg.type = eWNI_SME_CSA_OFFLOAD_EVENT; + mmh_msg.bodyptr = csa_offload_ind; + mmh_msg.bodyval = 0; + lim_log(mac_ctx, LOG1, FL("Sending eWNI_SME_CSA_OFFLOAD_EVENT to SME.")); - MTRACE(mac_trace_msg_tx + MTRACE(mac_trace_msg_tx (mac_ctx, session_entry->peSessionId, mmh_msg.type)); #ifdef FEATURE_WLAN_DIAG_SUPPORT - lim_diag_event_report(mac_ctx, + lim_diag_event_report(mac_ctx, WLAN_PE_DIAG_SWITCH_CHL_IND_EVENT, session_entry, eSIR_SUCCESS, eSIR_SUCCESS); #endif - lim_sys_process_mmh_msg_api(mac_ctx, &mmh_msg, ePROT); - } + lim_sys_process_mmh_msg_api(mac_ctx, &mmh_msg, ePROT); err: qdf_mem_free(csa_params); diff --git a/core/mac/src/pe/lim/lim_utils.h b/core/mac/src/pe/lim/lim_utils.h index 80a37c3f8605..5ad6bd0921e4 100644 --- a/core/mac/src/pe/lim/lim_utils.h +++ b/core/mac/src/pe/lim/lim_utils.h @@ -64,6 +64,9 @@ typedef enum { #define VHT_MCS_3x3_MASK 0x30 #define VHT_MCS_2x2_MASK 0x0C +#define CENTER_FREQ_DIFF_160MHz 8 +#define CENTER_FREQ_DIFF_80P80MHz 16 + #define IS_VHT_NSS_1x1(__mcs_map) ((__mcs_map & 0xFFFC) == 0xFFFC) #ifdef WLAN_FEATURE_11W From deb134c8d0711760445d9d385dc5bac724299009 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 27 Oct 2016 14:10:14 -0700 Subject: [PATCH 087/119] Release 5.1.0.33Q Release 5.1.0.33Q Change-Id: Id4445f76067058ddeba1785768e66f932cda7953 CRs-Fixed: 688141 (cherry picked from commit d3dbfb73ee65670d4b8a29e10898ed69797051f5) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index f0af057d79ad..ae64e868ad0d 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "P" +#define QWLAN_VERSION_EXTRA "Q" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33P" +#define QWLAN_VERSIONSTR "5.1.0.33Q" #endif /* QWLAN_VERSION_H */ From f7969a6c2dcc7731423daf7b2609e2af0b4cf068 Mon Sep 17 00:00:00 2001 From: Prashanth Bhatta Date: Thu, 20 Oct 2016 18:42:15 -0700 Subject: [PATCH 088/119] qcacld-3.0: Mechanism to complete waiting thread During remove() or shutdown(), driver waits for external thread to complete but there is no mechanism available today to inform lower layers that driver is about to go through remove() or shutdown(). Add mechanism to provide the notification about remove() or shutdown() so that lower layers can make use of it and get out of waiting logic and complete the remove() or shutdown() early without waiting for the timeout to happen. Change-Id: I1eece21fb63e6d5e0454659795a4dad011483c75 CRs-fixed: 1079299 (cherry picked from commit 305516248006141ef331c8c1b7a4b56999fa496d) --- core/cds/inc/cds_sched.h | 29 +++++++++ core/cds/src/cds_api.c | 2 + core/cds/src/cds_sched.c | 135 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 163 insertions(+), 3 deletions(-) diff --git a/core/cds/inc/cds_sched.h b/core/cds/inc/cds_sched.h index 61d8b3074ca5..9739ec4126ca 100644 --- a/core/cds/inc/cds_sched.h +++ b/core/cds/inc/cds_sched.h @@ -551,4 +551,33 @@ void cds_ssr_unprotect(const char *caller_func); bool cds_wait_for_external_threads_completion(const char *caller_func); int cds_get_gfp_flags(void); +/** + * cds_shutdown_notifier_register() - Register for shutdown notification + * @cb : Call back to be called + * @priv : Private pointer to be passed back to call back + * + * During driver remove or shutdown (recovery), external threads might be stuck + * waiting on some event from firmware at lower layers. Remove or shutdown can't + * proceed till the thread completes to avoid any race condition. Call backs can + * be registered here to get early notification of remove or shutdown so that + * waiting thread can be unblocked and hence remove or shutdown can proceed + * further as waiting there may not make sense when FW may already have been + * down. + * + * Return: CDS status + */ +QDF_STATUS cds_shutdown_notifier_register(void (*cb)(void *priv), void *priv); + +/** + * cds_shutdown_notifier_purge() - Purge all the notifiers + * + * Shutdown notifiers are added to provide the early notification of remove or + * shutdown being initiated. Adding this API to purge all the registered call + * backs as they are not useful any more while all the lower layers are being + * shutdown. + * + * Return: None + */ +void cds_shutdown_notifier_purge(void); + #endif /* #if !defined __CDS_SCHED_H */ diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index b5cfa3285cee..07f956662cb5 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -824,6 +824,8 @@ QDF_STATUS cds_close(v_CONTEXT_t cds_context) QDF_ASSERT(QDF_IS_STATUS_SUCCESS(qdf_status)); } + cds_shutdown_notifier_purge(); + cds_deinit_log_completion(); cds_deinit_ini_config(); qdf_timer_module_deinit(); diff --git a/core/cds/src/cds_sched.c b/core/cds/src/cds_sched.c index 89397046e80b..d352a06e71ea 100644 --- a/core/cds/src/cds_sched.c +++ b/core/cds/src/cds_sched.c @@ -73,6 +73,20 @@ struct ssr_protect { static spinlock_t ssr_protect_lock; static struct ssr_protect ssr_protect_log[MAX_SSR_PROTECT_LOG]; +struct shutdown_notifier { + struct list_head list; + void (*cb)(void *priv); + void *priv; +}; + +struct list_head shutdown_notifier_head; + +enum notifier_state { + NOTIFIER_STATE_NONE, + NOTIFIER_STATE_NOTIFYING, +} notifier_state; + + static p_cds_sched_context gp_cds_sched_context; static int cds_mc_thread(void *Arg); @@ -1373,6 +1387,8 @@ void cds_ssr_protect_init(void) ssr_protect_log[i].pid = 0; i++; } + + INIT_LIST_HEAD(&shutdown_notifier_head); } /** @@ -1491,6 +1507,113 @@ void cds_ssr_unprotect(const char *caller_func) caller_func, current->pid, count); } +/** + * cds_shutdown_notifier_register() - Register for shutdown notification + * @cb : Call back to be called + * @priv : Private pointer to be passed back to call back + * + * During driver remove or shutdown (recovery), external threads might be stuck + * waiting on some event from firmware at lower layers. Remove or shutdown can't + * proceed till the thread completes to avoid any race condition. Call backs can + * be registered here to get early notification of remove or shutdown so that + * waiting thread can be unblocked and hence remove or shutdown can proceed + * further as waiting there may not make sense when FW may already have been + * down. + * + * This is intended for early notification of remove() or shutdown() only so + * that lower layers can take care of stuffs like external waiting thread. + * + * Return: CDS status + */ +QDF_STATUS cds_shutdown_notifier_register(void (*cb)(void *priv), void *priv) +{ + struct shutdown_notifier *notifier; + unsigned long irq_flags; + + notifier = qdf_mem_malloc(sizeof(*notifier)); + + if (notifier == NULL) + return QDF_STATUS_E_NOMEM; + + /* + * This logic can be simpilfied if there is separate state maintained + * for shutdown and reinit. Right now there is only recovery in progress + * state and it doesn't help to check against it as during reinit some + * of the modules may need to register the call backs. + * For now this logic added to avoid notifier registration happen while + * this function is trying to call the call back with the notification. + */ + spin_lock_irqsave(&ssr_protect_lock, irq_flags); + if (notifier_state == NOTIFIER_STATE_NOTIFYING) { + spin_unlock_irqrestore(&ssr_protect_lock, irq_flags); + qdf_mem_free(notifier); + return -EINVAL; + } + + notifier->cb = cb; + notifier->priv = priv; + + list_add_tail(¬ifier->list, &shutdown_notifier_head); + spin_unlock_irqrestore(&ssr_protect_lock, irq_flags); + + return 0; +} + +/** + * cds_shutdown_notifier_purge() - Purge all the notifiers + * + * Shutdown notifiers are added to provide the early notification of remove or + * shutdown being initiated. Adding this API to purge all the registered call + * backs as they are not useful any more while all the lower layers are being + * shutdown. + * + * Return: None + */ +void cds_shutdown_notifier_purge(void) +{ + struct shutdown_notifier *notifier, *temp; + unsigned long irq_flags; + + spin_lock_irqsave(&ssr_protect_lock, irq_flags); + list_for_each_entry_safe(notifier, temp, + &shutdown_notifier_head, list) { + list_del(¬ifier->list); + spin_unlock_irqrestore(&ssr_protect_lock, irq_flags); + + qdf_mem_free(notifier); + + spin_lock_irqsave(&ssr_protect_lock, irq_flags); + } + + spin_unlock_irqrestore(&ssr_protect_lock, irq_flags); +} + +/** + * cds_shutdown_notifier_call() - Call shutdown notifier call back + * + * Call registered shutdown notifier call back to indicate about remove or + * shutdown. + */ +static void cds_shutdown_notifier_call(void) +{ + struct shutdown_notifier *notifier; + unsigned long irq_flags; + + spin_lock_irqsave(&ssr_protect_lock, irq_flags); + notifier_state = NOTIFIER_STATE_NOTIFYING; + + list_for_each_entry(notifier, &shutdown_notifier_head, list) { + spin_unlock_irqrestore(&ssr_protect_lock, irq_flags); + + notifier->cb(notifier->priv); + + spin_lock_irqsave(&ssr_protect_lock, irq_flags); + } + + notifier_state = NOTIFIER_STATE_NONE; + spin_unlock_irqrestore(&ssr_protect_lock, irq_flags); +} + /** * cds_wait_for_external_threads_completion() - wait for external threads * completion before proceeding further @@ -1502,19 +1625,25 @@ void cds_ssr_unprotect(const char *caller_func) bool cds_wait_for_external_threads_completion(const char *caller_func) { int count = MAX_SSR_WAIT_ITERATIONS; + int r; + + cds_shutdown_notifier_call(); while (count) { - if (!atomic_read(&ssr_protect_entry_count)) + r = atomic_read(&ssr_protect_entry_count); + + if (!r) break; if (--count) { QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, - "%s: Waiting for active entry points to exit", - __func__); + "%s: Waiting for %d active entry points to exit", + __func__, r); msleep(SSR_WAIT_SLEEP_TIME); } } + /* at least one external thread is executing */ if (!count) { QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, From e675ca784d30e2a8f31eed94a0422cd92c0411ef Mon Sep 17 00:00:00 2001 From: Prashanth Bhatta Date: Thu, 20 Oct 2016 18:42:37 -0700 Subject: [PATCH 089/119] qcacld-3.0: Complete resume if FW crashed If WLAN FW crashes while in suspend mode then kernel tries to resume the driver and WMA sends resume indication to WLAN FW and waits for the response from WLAN FW. Since FW is already crashed, there will not be any response from WLAN FW and wait logic waits for the timeout before bailing out. This may cause delay in completing the recovery and may cause other race conditions becuase of that. Register for shutdown notification so that call back would be called during recovery and resume event can be set to make sure resume thread doesn't just wait for the FW response. Change-Id: Icdd78479dd4072eabf29e7b0664d328553bfa1ad CRs-fixed: 1079299 (cherry picked from commit 9e493ade1c08204fcfff51c66d135803d830fa60) --- core/wma/src/wma_main.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 3962513329ea..98eadc66cbb8 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -1672,6 +1672,25 @@ static void wma_init_max_no_of_peers(tp_wma_handle wma_handle, cfg->max_no_of_peers = max_peers; } +/** + * wma_shutdown_notifier_cb - Shutdown notifer call back + * @priv : WMA handle + * + * During recovery, WMA may wait for resume to complete if the crash happens + * while in suspend. This may cause delays in completing the recovery. This call + * back would be called during recovery and the event is completed so that if + * the resume is waiting on FW to respond then it can get out of the wait so + * that recovery thread can start bringing down all the modules. + * + * Return: None + */ +static void wma_shutdown_notifier_cb(void *priv) +{ + tp_wma_handle wma_handle = priv; + + qdf_event_set(&wma_handle->wma_resume_event); +} + struct wma_version_info g_wmi_version_info; /** @@ -2097,6 +2116,14 @@ QDF_STATUS wma_open(void *cds_context, goto err_event_init; } + qdf_status = cds_shutdown_notifier_register(wma_shutdown_notifier_cb, + wma_handle); + if (qdf_status != QDF_STATUS_SUCCESS) { + WMA_LOGP("%s: Shutdown notifier register failed: %d", + __func__, qdf_status); + goto err_event_init; + } + qdf_status = qdf_event_create(&wma_handle->runtime_suspend); if (qdf_status != QDF_STATUS_SUCCESS) { WMA_LOGP("%s: runtime_suspend event initialization failed", From 697dd0cd4eb62c830b097751bd4987c860156abb Mon Sep 17 00:00:00 2001 From: Prashanth Bhatta Date: Thu, 20 Oct 2016 18:42:41 -0700 Subject: [PATCH 090/119] qcacld-3.0: Do not fail resume during recovery If WLAN FW crashes while in suspend mode then resume fails. Returning failure in this case confuses kernel power manager. Do not return failure to resume if recovery is going on. Also do not panic for the resume failures if recovery is going on. Change-Id: I380194cb53ca669edaf50544657b19b74de6dfd3 CRs-fixed: 1079299 (cherry picked from commit 3ff45a5b515810d36f36e2755a3653a55ab81a4a) --- core/hdd/src/wlan_hdd_driver_ops.c | 34 ++++++++++++++++++++++++------ core/hdd/src/wlan_hdd_power.c | 3 +++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/core/hdd/src/wlan_hdd_driver_ops.c b/core/hdd/src/wlan_hdd_driver_ops.c index 7861b503b4c5..afee223dcd4d 100644 --- a/core/hdd/src/wlan_hdd_driver_ops.c +++ b/core/hdd/src/wlan_hdd_driver_ops.c @@ -650,8 +650,13 @@ static int __wlan_hdd_bus_resume(void) { hdd_context_t *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); void *hif_ctx; - int status = wlan_hdd_validate_context(hdd_ctx); + int status; + QDF_STATUS qdf_status; + if (cds_is_driver_recovering()) + return 0; + + status = wlan_hdd_validate_context(hdd_ctx); if (status) return status; @@ -665,15 +670,28 @@ static int __wlan_hdd_bus_resume(void) return -EINVAL; status = hif_bus_resume(hif_ctx); - QDF_BUG(!status); + if (status) + goto out; status = wma_bus_resume(); - QDF_BUG(!status); + if (status) + goto out; - status = ol_txrx_bus_resume(); - QDF_BUG(!status); + qdf_status = ol_txrx_bus_resume(); + status = qdf_status_to_os_return(qdf_status); + if (status) + goto out; hdd_info("resume done"); + + return 0; + +out: + if (cds_is_driver_recovering()) + return 0; + + QDF_BUG(false); + return status; } @@ -701,8 +719,12 @@ static int __wlan_hdd_bus_resume_noirq(void) { hdd_context_t *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); void *hif_ctx; - int status = wlan_hdd_validate_context(hdd_ctx); + int status; + if (cds_is_driver_recovering()) + return 0; + + status = wlan_hdd_validate_context(hdd_ctx); if (status) { hdd_err("Invalid HDD context: %d", status); return status; diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index fb4e58880e4d..e555233a7b5e 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -1729,6 +1729,9 @@ static int __wlan_hdd_cfg80211_resume_wlan(struct wiphy *wiphy) ENTER(); + if (cds_is_driver_recovering()) + return 0; + if (QDF_GLOBAL_FTM_MODE == hdd_get_conparam()) { hdd_err("Command not allowed in FTM mode"); return -EINVAL; From 82cd89ca5a36bbcadd65537fcb196925a8341a3f Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 27 Oct 2016 15:51:35 -0700 Subject: [PATCH 091/119] Release 5.1.0.33R Release 5.1.0.33R Change-Id: I8ff78fd6cd885a3fe5ffbf0d16c5b4c82493d963 CRs-Fixed: 688141 (cherry picked from commit 8122db983b2e7ef0e30df5534fb0ceb5b8710484) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index ae64e868ad0d..25d0c934f475 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "Q" +#define QWLAN_VERSION_EXTRA "R" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33Q" +#define QWLAN_VERSIONSTR "5.1.0.33R" #endif /* QWLAN_VERSION_H */ From feb22898cb548697e6234526a5eb5ff8700e1a96 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Thu, 27 Oct 2016 14:12:38 -0700 Subject: [PATCH 092/119] Revert "qcacld-3.0: Use system time instead of jiffies for BSS received time" This reverts Change-Id Ia14b84f1039dc4ffec6ad63550fed21e932f8012 It was observed that in some scenarios scan results are not showing up in the UI in a timely manner. The speculation is that not all code was converted that needs to be converted. So revert this change for now with the expectation that a complete change will be forthcoming. This means that until a revised change is supplied that the original issue of scan result aging may again be present. Change-Id: I38d975fd9927493e81f4008b429abcae90af4fa9 CRs-Fixed: 1083225 (cherry picked from commit f40cf74d38bf630930325c6e9b703746bee107cc) --- core/hdd/inc/wlan_hdd_main.h | 4 +-- core/hdd/src/wlan_hdd_cfg80211.c | 10 ++---- core/hdd/src/wlan_hdd_ipa.c | 6 ++-- core/hdd/src/wlan_hdd_p2p.c | 10 +++--- core/hdd/src/wlan_hdd_scan.c | 6 ++-- core/mac/inc/sir_api.h | 4 +-- core/mac/src/pe/lim/lim_api.c | 4 +-- core/mac/src/pe/lim/lim_p2p.c | 8 ++--- core/mac/src/pe/lim/lim_scan_result_utils.c | 6 ++-- core/sme/src/csr/csr_api_scan.c | 40 +++++++++++---------- core/sme/src/csr/csr_host_scan_roam.c | 11 +++--- core/sme/src/csr/csr_inside_api.h | 1 - core/sme/src/rrm/sme_rrm.c | 12 +++---- 13 files changed, 58 insertions(+), 64 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index dbab5eba0196..92bb43634916 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -1070,10 +1070,10 @@ struct hdd_adapter_s { int temperature; /* Time stamp for last completed RoC request */ - uint64_t last_roc_ts; + unsigned long last_roc_ts; /* Time stamp for start RoC request */ - uint64_t start_roc_ts; + unsigned long start_roc_ts; /* State for synchronous OCB requests to WMI */ struct sir_ocb_set_config_response ocb_set_config_resp; diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 6da8f4542d97..c5e11a27ec3c 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -10673,14 +10673,8 @@ struct cfg80211_bss *wlan_hdd_cfg80211_inform_bss_frame(hdd_adapter_t *pAdapter, qie_age->oui_2 = QCOM_OUI2; qie_age->oui_3 = QCOM_OUI3; qie_age->type = QCOM_VENDOR_IE_AGE_TYPE; - /* - * Lowi expects the timestamp of bss in units of 1/10 ms. In driver - * all bss related timestamp is in units of ms. Due to this when scan - * results are sent to lowi the scan age is high.To address this, - * send age in units of 1/10 ms. - */ qie_age->age = - (qdf_mc_timer_get_system_time() - bss_desc->received_time)/10; + qdf_mc_timer_get_system_ticks() - bss_desc->nReceivedTime; qie_age->tsf_delta = bss_desc->tsf_delta; memcpy(&qie_age->beacon_tsf, bss_desc->timeStamp, sizeof(qie_age->beacon_tsf)); @@ -10854,7 +10848,7 @@ int wlan_hdd_cfg80211_update_bss(struct wiphy *wiphy, */ if ((scan_time == 0) || (scan_time < - pScanResult->BssDescriptor.received_time)) { + pScanResult->BssDescriptor.nReceivedTime)) { bss_status = wlan_hdd_cfg80211_inform_bss_frame(pAdapter, &pScanResult->BssDescriptor); diff --git a/core/hdd/src/wlan_hdd_ipa.c b/core/hdd/src/wlan_hdd_ipa.c index 7576c5702caa..6097b7c99350 100644 --- a/core/hdd/src/wlan_hdd_ipa.c +++ b/core/hdd/src/wlan_hdd_ipa.c @@ -362,7 +362,7 @@ static uint8_t vdev_to_iface[CSR_ROAM_SESSION_MAX]; * @rx_destructor_call: IPA Rx packet destructor count */ struct uc_rt_debug_info { - uint64_t time; + unsigned long time; uint64_t ipa_excep_count; uint64_t rx_drop_count; uint64_t net_sent_count; @@ -726,7 +726,7 @@ static void hdd_ipa_uc_rt_debug_host_fill(void *ctext) dump_info = &hdd_ipa->rt_bug_buffer[ hdd_ipa->rt_buf_fill_index % HDD_IPA_UC_RT_DEBUG_BUF_COUNT]; - dump_info->time = (uint64_t)qdf_mc_timer_get_system_time(); + dump_info->time = qdf_mc_timer_get_system_time(); dump_info->ipa_excep_count = hdd_ipa->stats.num_rx_excep; dump_info->rx_drop_count = hdd_ipa->ipa_rx_internel_drop_count; dump_info->net_sent_count = hdd_ipa->ipa_rx_net_send_count; @@ -779,7 +779,7 @@ void hdd_ipa_uc_rt_debug_host_dump(hdd_context_t *hdd_ctx) HDD_IPA_UC_RT_DEBUG_BUF_COUNT; dump_info = &hdd_ipa->rt_bug_buffer[dump_index]; HDD_IPA_LOG(QDF_TRACE_LEVEL_ERROR, - "%12llu:%10llu:%10llu:%10llu:%10llu:%10llu:%10llu:%10llu\n", + "%12lu:%10llu:%10llu:%10llu:%10llu:%10llu:%10llu:%10llu\n", dump_info->time, dump_info->ipa_excep_count, dump_info->rx_drop_count, dump_info->net_sent_count, dump_info->tx_mcbc_count, dump_info->tx_fwd_count, diff --git a/core/hdd/src/wlan_hdd_p2p.c b/core/hdd/src/wlan_hdd_p2p.c index 486bc6eea3c5..da23bada2fe2 100644 --- a/core/hdd/src/wlan_hdd_p2p.c +++ b/core/hdd/src/wlan_hdd_p2p.c @@ -215,8 +215,7 @@ QDF_STATUS wlan_hdd_remain_on_channel_callback(tHalHandle hHal, void *pCtx, cookie, &pRemainChanCtx->chan, GFP_KERNEL); - pAdapter->last_roc_ts = - (uint64_t)qdf_mc_timer_get_system_time(); + pAdapter->last_roc_ts = qdf_mc_timer_get_system_time(); } /* Schedule any pending RoC: Any new roc request during this time @@ -840,7 +839,7 @@ static int wlan_hdd_request_remain_on_channel(struct wiphy *wiphy, hdd_conn_is_connected( WLAN_HDD_GET_STATION_CTX_PTR(sta_adapter))) { if (pAdapter->last_roc_ts != 0 && - (((uint64_t)qdf_mc_timer_get_system_time() - + ((qdf_mc_timer_get_system_time() - pAdapter->last_roc_ts) < pHddCtx->config->p2p_listen_defer_interval)) { if (pRemainChanCtx->duration > HDD_P2P_MAX_ROC_DURATION) @@ -961,7 +960,7 @@ void hdd_remain_chan_ready_handler(hdd_adapter_t *pAdapter, cfgState = WLAN_HDD_GET_CFG_STATE_PTR(pAdapter); hdd_notice("Ready on chan ind %d", scan_id); - pAdapter->start_roc_ts = (uint64_t)qdf_mc_timer_get_system_time(); + pAdapter->start_roc_ts = qdf_mc_timer_get_system_time(); mutex_lock(&cfgState->remain_on_chan_ctx_lock); pRemainChanCtx = cfgState->remain_on_chan_ctx; if (pRemainChanCtx != NULL) { @@ -1270,8 +1269,7 @@ static int __wlan_hdd_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev, mutex_lock(&cfgState->remain_on_chan_ctx_lock); if (cfgState->remain_on_chan_ctx) { - uint64_t current_time = - (uint64_t)qdf_mc_timer_get_system_time(); + uint32_t current_time = qdf_mc_timer_get_system_time(); int remaining_roc_time = ((int) cfgState->remain_on_chan_ctx->duration - (current_time - pAdapter->start_roc_ts)); diff --git a/core/hdd/src/wlan_hdd_scan.c b/core/hdd/src/wlan_hdd_scan.c index 17d70699e543..d909dacc2baa 100644 --- a/core/hdd/src/wlan_hdd_scan.c +++ b/core/hdd/src/wlan_hdd_scan.c @@ -482,9 +482,9 @@ static int hdd_indicate_scan_result(hdd_scan_info_t *scanInfo, /* AGE */ event.cmd = IWEVCUSTOM; p = custom; - p += scnprintf(p, MAX_CUSTOM_LEN, " Age: %llu", - qdf_mc_timer_get_system_time() - - descriptor->received_time); + p += scnprintf(p, MAX_CUSTOM_LEN, " Age: %lu", + qdf_mc_timer_get_system_ticks() - + descriptor->nReceivedTime); event.u.data.length = p - custom; current_event = iwe_stream_add_point(scanInfo->info, current_event, end, &event, custom); diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 4e43c6dd3f19..3a8c353bde25 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -724,8 +724,8 @@ typedef struct sSirBssDescription { /* used only in scan case. */ uint8_t channelIdSelf; uint8_t sSirBssDescriptionRsvd[3]; - /* Based on system time, not a relative time. */ - uint64_t received_time; + /* base on a tick count. It is a time stamp, not a relative time. */ + uint32_t nReceivedTime; uint32_t parentTSF; uint32_t startTSF[2]; uint8_t mdiePresent; diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index 901c564df9da..9cdf5d054af7 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -1868,8 +1868,8 @@ lim_roam_fill_bss_descr(tpAniSirGlobal pMac, qdf_mem_copy((uint8_t *) &bss_desc_ptr->bssId, (uint8_t *) mac_hdr->bssId, sizeof(tSirMacAddr)); - bss_desc_ptr->received_time = - (uint64_t)qdf_mc_timer_get_system_time(); + bss_desc_ptr->nReceivedTime = + (uint32_t)qdf_mc_timer_get_system_ticks(); if (parsed_frm_ptr->mdiePresent) { bss_desc_ptr->mdiePresent = parsed_frm_ptr->mdiePresent; qdf_mem_copy((uint8_t *)bss_desc_ptr->mdie, diff --git a/core/mac/src/pe/lim/lim_p2p.c b/core/mac/src/pe/lim/lim_p2p.c index 41098542cfc7..64a1a54997d4 100644 --- a/core/mac/src/pe/lim/lim_p2p.c +++ b/core/mac/src/pe/lim/lim_p2p.c @@ -173,11 +173,11 @@ void lim_process_insert_single_shot_noa_timeout(tpAniSirGlobal pMac) *------------------------------------------------------------------*/ void lim_convert_active_channel_to_passive_channel(tpAniSirGlobal pMac) { - uint64_t currentTime; - uint64_t lastTime = 0; - uint64_t timeDiff; + uint32_t currentTime; + uint32_t lastTime = 0; + uint32_t timeDiff; uint8_t i; - currentTime = (uint64_t)qdf_mc_timer_get_system_time(); + currentTime = qdf_mc_timer_get_system_time(); for (i = 1; i < SIR_MAX_24G_5G_CHANNEL_RANGE; i++) { if ((pMac->lim.dfschannelList.timeStamp[i]) != 0) { lastTime = pMac->lim.dfschannelList.timeStamp[i]; diff --git a/core/mac/src/pe/lim/lim_scan_result_utils.c b/core/mac/src/pe/lim/lim_scan_result_utils.c index 6b19f0c3a107..ea2bb8d1d253 100644 --- a/core/mac/src/pe/lim/lim_scan_result_utils.c +++ b/core/mac/src/pe/lim/lim_scan_result_utils.c @@ -177,14 +177,14 @@ lim_collect_bss_description(tpAniSirGlobal pMac, MAC_ADDR_ARRAY(pHdr->bssId), pBssDescr->rssi, pBssDescr->rssi_raw); - pBssDescr->received_time = (uint64_t)qdf_mc_timer_get_system_time(); + pBssDescr->nReceivedTime = (uint32_t) qdf_mc_timer_get_system_ticks(); pBssDescr->tsf_delta = WMA_GET_RX_TSF_DELTA(pRxPacketInfo); pBssDescr->seq_ctrl = pHdr->seqControl; lim_log(pMac, LOG1, - FL("BSSID: "MAC_ADDRESS_STR " tsf_delta = %u ReceivedTime = %llu ssid = %s"), + FL("BSSID: "MAC_ADDRESS_STR " tsf_delta = %u ReceivedTime = %u ssid = %s"), MAC_ADDR_ARRAY(pHdr->bssId), pBssDescr->tsf_delta, - pBssDescr->received_time, + pBssDescr->nReceivedTime, ((pBPR->ssidPresent) ? (char *)pBPR->ssId.ssId : "")); lim_log(pMac, LOG1, FL("Seq Ctrl: Frag Num: %d, Seq Num: LO:%02x HI:%02x"), diff --git a/core/sme/src/csr/csr_api_scan.c b/core/sme/src/csr/csr_api_scan.c index 1e7c88dfcad3..fa72e875a92e 100644 --- a/core/sme/src/csr/csr_api_scan.c +++ b/core/sme/src/csr/csr_api_scan.c @@ -2851,8 +2851,8 @@ static void csr_purge_old_scan_results(tpAniSirGlobal mac_ctx) { tListElem *pentry, *tmp_entry; tCsrScanResult *presult, *oldest_bss = NULL; - uint64_t oldest_entry = 0; - uint64_t curr_time = (uint64_t)qdf_mc_timer_get_system_time(); + uint32_t oldest_entry = 0; + uint32_t curr_time = qdf_mc_timer_get_system_ticks(); csr_ll_unlock(&mac_ctx->scan.scanResultList); pentry = csr_ll_peek_head(&mac_ctx->scan.scanResultList, @@ -2861,10 +2861,10 @@ static void csr_purge_old_scan_results(tpAniSirGlobal mac_ctx) tmp_entry = csr_ll_next(&mac_ctx->scan.scanResultList, pentry, LL_ACCESS_NOLOCK); presult = GET_BASE_ADDR(pentry, tCsrScanResult, Link); - if ((curr_time - presult->Result.BssDescriptor.received_time) > + if ((curr_time - presult->Result.BssDescriptor.nReceivedTime) > oldest_entry) { oldest_entry = curr_time - - presult->Result.BssDescriptor.received_time; + presult->Result.BssDescriptor.nReceivedTime; oldest_bss = presult; } pentry = tmp_entry; @@ -2874,9 +2874,9 @@ static void csr_purge_old_scan_results(tpAniSirGlobal mac_ctx) if (csr_ll_remove_entry(&mac_ctx->scan.scanResultList, &oldest_bss->Link, LL_ACCESS_NOLOCK)) { sms_log(mac_ctx, LOG1, - FL("Current time delta (%llu) of BSSID to be removed" MAC_ADDRESS_STR), + FL("Current time delta (%d) of BSSID to be removed" MAC_ADDRESS_STR), (curr_time - - oldest_bss->Result.BssDescriptor.received_time), + oldest_bss->Result.BssDescriptor.nReceivedTime), MAC_ADDR_ARRAY( oldest_bss->Result.BssDescriptor.bssId)); csr_free_scan_result_entry(mac_ctx, oldest_bss); @@ -2954,9 +2954,8 @@ csr_remove_from_tmp_list(tpAniSirGlobal mac_ctx, * hidden ssid from the profile i.e., forget the SSID * via GUI that SSID shouldn't see in the profile */ - uint64_t time_gap = - (uint64_t)qdf_mc_timer_get_system_time() - - timer; + unsigned long time_gap = qdf_mc_timer_get_system_time() - + timer; if ((0 == bss_dscp->Result.ssId.length) && (time_gap <= HIDDEN_TIMER) && tmpSsid.length) { @@ -3090,7 +3089,7 @@ tCsrScanResult *csr_scan_append_bss_description(tpAniSirGlobal pMac, * hidden ssid from the profile i.e., forget the SSID * via GUI that SSID shouldn't see in the profile */ - if (((uint64_t)qdf_mc_timer_get_system_time() - timer) <= + if ((qdf_mc_timer_get_system_time() - timer) <= HIDDEN_TIMER) { pCsrBssDescription->Result.ssId = tmpSsid; pCsrBssDescription->Result.timer = timer; @@ -4875,8 +4874,8 @@ static bool csr_scan_age_out_bss(tpAniSirGlobal pMac, tCsrScanResult *pResult) FL("Connected BSS, Set Aging Count=%d for BSS " MAC_ADDRESS_STR), pResult->AgingCount, MAC_ADDR_ARRAY(pResult->Result.BssDescriptor.bssId)); - pResult->Result.BssDescriptor.received_time = - (uint64_t)qdf_mc_timer_get_system_time(); + pResult->Result.BssDescriptor.nReceivedTime = + (uint32_t) qdf_mc_timer_get_system_ticks(); return fRet; } /* @@ -5927,20 +5926,23 @@ static void csr_purge_scan_result_by_age(void *pv) tpAniSirGlobal mac_ctx = PMAC_STRUCT(pv); tListElem *entry, *tmp_entry; tCsrScanResult *result; - uint64_t ageout_time = - mac_ctx->scan.scanResultCfgAgingTime * SYSTEM_TIME_SEC_TO_MSEC; - uint64_t cur_time = qdf_mc_timer_get_system_time(); + unsigned long ageout_time = + mac_ctx->scan.scanResultCfgAgingTime * QDF_TICKS_PER_SECOND/10; + unsigned long cur_time = qdf_mc_timer_get_system_ticks(); uint8_t *bssId; csr_ll_lock(&mac_ctx->scan.scanResultList); entry = csr_ll_peek_head(&mac_ctx->scan.scanResultList, LL_ACCESS_NOLOCK); - sms_log(mac_ctx, LOG1, FL(" Ageout time=%llu"), ageout_time); + sms_log(mac_ctx, LOG1, FL(" Ageout time=%ld"), ageout_time); while (entry) { tmp_entry = csr_ll_next(&mac_ctx->scan.scanResultList, entry, LL_ACCESS_NOLOCK); result = GET_BASE_ADDR(entry, tCsrScanResult, Link); - - if ((cur_time - result->Result.BssDescriptor.received_time) > + /* + * qdf_mc_timer_get_system_ticks() returns in 10ms interval. + * so ageout time value also updated to 10ms interval value. + */ + if ((cur_time - result->Result.BssDescriptor.nReceivedTime) > ageout_time) { bssId = result->Result.BssDescriptor.bssId; sms_log(mac_ctx, LOGW, @@ -7061,7 +7063,7 @@ QDF_STATUS csr_scan_save_preferred_network_found(tpAniSirGlobal pMac, pBssDescr->capabilityInfo = *((uint16_t *)&parsed_frm->capabilityInfo); qdf_mem_copy((uint8_t *) &pBssDescr->bssId, (uint8_t *) macHeader->bssId, sizeof(tSirMacAddr)); - pBssDescr->received_time = (uint64_t)qdf_mc_timer_get_system_time(); + pBssDescr->nReceivedTime = (uint32_t) qdf_mc_timer_get_system_ticks(); sms_log(pMac, LOG2, FL("Bssid= "MAC_ADDRESS_STR" chan= %d, rssi = %d"), MAC_ADDR_ARRAY(pBssDescr->bssId), pBssDescr->channelId, pBssDescr->rssi); diff --git a/core/sme/src/csr/csr_host_scan_roam.c b/core/sme/src/csr/csr_host_scan_roam.c index cfe5cbc431d8..def107552ff4 100644 --- a/core/sme/src/csr/csr_host_scan_roam.c +++ b/core/sme/src/csr/csr_host_scan_roam.c @@ -149,7 +149,9 @@ void csr_neighbor_roam_process_scan_results(tpAniSirGlobal mac_ctx, tpCsrNeighborRoamControlInfo n_roam_info = &mac_ctx->roam.neighborRoamInfo[sessionid]; tpCsrNeighborRoamBSSInfo bss_info; - uint64_t age = 0; + uint32_t age_ticks = 0; + uint32_t limit_ticks = + qdf_system_msecs_to_ticks(ROAM_AP_AGE_LIMIT_MS); uint8_t num_candidates = 0; uint8_t num_dropped = 0; /* @@ -294,10 +296,9 @@ void csr_neighbor_roam_process_scan_results(tpAniSirGlobal mac_ctx, } /* check the age of the AP */ - age = (uint64_t) qdf_mc_timer_get_system_time() - - descr->received_time; - if (age_constraint == true && - age > ROAM_AP_AGE_LIMIT_MS) { + age_ticks = (uint32_t) qdf_mc_timer_get_system_ticks() - + descr->nReceivedTime; + if (age_constraint == true && age_ticks > limit_ticks) { num_dropped++; QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_WARN, diff --git a/core/sme/src/csr/csr_inside_api.h b/core/sme/src/csr/csr_inside_api.h index 47470725407d..03338de19033 100644 --- a/core/sme/src/csr/csr_inside_api.h +++ b/core/sme/src/csr/csr_inside_api.h @@ -66,7 +66,6 @@ #define CSR_MAX_BSS_SUPPORT 512 #define SYSTEM_TIME_MSEC_TO_USEC 1000 -#define SYSTEM_TIME_SEC_TO_MSEC 1000 /* This number minus 1 means the number of times a channel is scanned before a BSS is remvoed from */ /* cache scan result */ diff --git a/core/sme/src/rrm/sme_rrm.c b/core/sme/src/rrm/sme_rrm.c index 11d3f69cb208..b73c016176cc 100644 --- a/core/sme/src/rrm/sme_rrm.c +++ b/core/sme/src/rrm/sme_rrm.c @@ -71,7 +71,7 @@ #define RRM_ROAM_SCORE_NEIGHBOR_IAPP_LIST 30 #endif -uint64_t rrm_scan_timer; +unsigned long rrm_scan_timer; /** * rrm_ll_purge_neighbor_cache() -Purges all the entries in the neighbor cache @@ -529,7 +529,7 @@ static QDF_STATUS sme_rrm_send_scan_result(tpAniSirGlobal mac_ctx, while (scan_results) { next_result = sme_scan_result_get_next(mac_ctx, result_handle); - sms_log(mac_ctx, LOG1, "Scan res timer:%lu, rrm scan timer:%llu", + sms_log(mac_ctx, LOG1, "Scan res timer:%lu, rrm scan timer:%lu", scan_results->timer, rrm_scan_timer); if (scan_results->timer >= rrm_scan_timer) { roam_info->pBssDesc = &scan_results->BssDescriptor; @@ -651,7 +651,7 @@ static QDF_STATUS sme_rrm_issue_scan_req(tpAniSirGlobal mac_ctx) tpRrmSMEContext sme_rrm_ctx = &mac_ctx->rrm.rrmSmeContext; uint32_t session_id; tSirScanType scan_type; - uint64_t current_time; + unsigned long current_time; status = csr_roam_get_session_id_from_bssid(mac_ctx, &sme_rrm_ctx->sessionBssId, &session_id); @@ -720,8 +720,8 @@ static QDF_STATUS sme_rrm_issue_scan_req(tpAniSirGlobal mac_ctx) * and hence there is a check to see if the requests are atleast * 1 second apart. */ - current_time = (uint64_t)qdf_mc_timer_get_system_time(); - sms_log(mac_ctx, LOG1, "prev scan triggered before %llu ms, totalchannels %d", + current_time = qdf_mc_timer_get_system_time(); + sms_log(mac_ctx, LOG1, "prev scan triggered before %ld ms, totalchannels %d", current_time - rrm_scan_timer, sme_rrm_ctx->channelList.numOfChannels); if ((abs(current_time - rrm_scan_timer) > 1000) && @@ -731,7 +731,7 @@ static QDF_STATUS sme_rrm_issue_scan_req(tpAniSirGlobal mac_ctx) scan_req.idle_time = 1; } - rrm_scan_timer = (uint64_t)qdf_mc_timer_get_system_time(); + rrm_scan_timer = qdf_mc_timer_get_system_time(); /* set BSSType to default type */ scan_req.BSSType = eCSR_BSS_TYPE_ANY; From 40b16627b36627d9bb46a00a4a3ed8064c65e52b Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 27 Oct 2016 16:22:53 -0700 Subject: [PATCH 093/119] Release 5.1.0.33S Release 5.1.0.33S Change-Id: I32709dbf8167cc82dd9a8977cd877cf2c841aa05 CRs-Fixed: 688141 (cherry picked from commit 66aa76b1073ebe457e6127c0b4bef7f2755ad87d) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 25d0c934f475..d1631c80f717 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "R" +#define QWLAN_VERSION_EXTRA "S" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33R" +#define QWLAN_VERSIONSTR "5.1.0.33S" #endif /* QWLAN_VERSION_H */ From bc81a471db017f1f7c82ae739c885e54cff7d5d0 Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Wed, 26 Oct 2016 16:56:59 -0700 Subject: [PATCH 094/119] qcacld-3.0: Disable NETDEV watchdog while Unit-Test suspended If the TX queue is unresponsive for more than a few seconds, the Linux kernel raises a NETDEV watchdog event. Normally, this should never happen and indicates a problem because Apps should be suspended and not generating TX traffic. However, during Unit-Test suspend, Apps is not suspended and these events can be safely ignored. Disable NETDEV watchdog events in this case to dramatically reduce logging volume. Change-Id: Ia0d28f64d921add065d8dce3b2d6115600f16975 CRs-Fixed: 1076495 --- core/hdd/inc/wlan_hdd_power.h | 16 ++++++++++------ core/hdd/src/wlan_hdd_power.c | 30 ++++++++++++++++++++++-------- core/hdd/src/wlan_hdd_wext.c | 4 ++-- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_power.h b/core/hdd/inc/wlan_hdd_power.h index abb69bd56e66..4623d9bb6b83 100644 --- a/core/hdd/inc/wlan_hdd_power.h +++ b/core/hdd/inc/wlan_hdd_power.h @@ -224,26 +224,30 @@ void wlan_hdd_inc_suspend_stats(hdd_context_t *hdd_ctx, #ifdef WLAN_SUSPEND_RESUME_TEST /** * hdd_wlan_fake_apps_resume() - Resume from unit-test triggered suspend - * @wiphy: wiphy struct from a validated hdd context + * @wiphy: the kernel wiphy struct for the device being resumed + * @dev: the kernel net_device struct for the device being resumed * * Return: Zero on success, calls QDF_BUG() on failure */ -int hdd_wlan_fake_apps_resume(struct wiphy *wiphy); +int hdd_wlan_fake_apps_resume(struct wiphy *wiphy, struct net_device *dev); /** * hdd_wlan_fake_apps_suspend() - Initiate a unit-test triggered suspend - * @wiphy: wiphy struct from a validated hdd context + * @wiphy: the kernel wiphy struct for the device being suspended + * @dev: the kernel net_device struct for the device being suspended * * Return: Zero on success, suspend related non-zero error code on failure */ -int hdd_wlan_fake_apps_suspend(struct wiphy *wiphy); +int hdd_wlan_fake_apps_suspend(struct wiphy *wiphy, struct net_device *dev); #else -static inline int hdd_wlan_fake_apps_resume(struct wiphy *wiphy) +static inline int +hdd_wlan_fake_apps_resume(struct wiphy *wiphy, struct net_device *dev) { return 0; } -static inline int hdd_wlan_fake_apps_suspend(struct wiphy *wiphy) +static inline int +hdd_wlan_fake_apps_suspend(struct wiphy *wiphy, struct net_device *dev) { return 0; } diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index e555233a7b5e..bee6a6f01ba4 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -2430,6 +2430,7 @@ int hdd_set_qpower_config(hdd_context_t *hddctx, hdd_adapter_t *adapter, */ #define CE_IRQ_COUNT 12 #define CE_WAKE_IRQ 2 +static struct net_device *g_dev; static struct wiphy *g_wiphy; #define HDD_FA_SUSPENDED_BIT (0) @@ -2439,11 +2440,13 @@ static unsigned long fake_apps_state; * __hdd_wlan_fake_apps_resume() - The core logic for * hdd_wlan_fake_apps_resume() skipping the call to hif_fake_apps_resume(), * which is only need for non-irq resume - * @wiphy: wiphy struct from a validated hdd context + * @wiphy: the kernel wiphy struct for the device being resumed + * @dev: the kernel net_device struct for the device being resumed * - * Return: Zero on success, calls QDF_BUG() on failure + * Return: none, calls QDF_BUG() on failure */ -static void __hdd_wlan_fake_apps_resume(struct wiphy *wiphy) +static void __hdd_wlan_fake_apps_resume(struct wiphy *wiphy, + struct net_device *dev) { qdf_device_t qdf_dev = cds_get_context(QDF_MODULE_ID_QDF_DEVICE); int i, resume_err; @@ -2469,6 +2472,8 @@ static void __hdd_wlan_fake_apps_resume(struct wiphy *wiphy) resume_err = wlan_hdd_cfg80211_resume_wlan(wiphy); QDF_BUG(resume_err == 0); + + dev->watchdog_timeo = HDD_TX_TIMEOUT; } /** @@ -2485,11 +2490,13 @@ static void hdd_wlan_fake_apps_resume_irq_callback(uint32_t val) hdd_info("Trigger unit-test resume WLAN; val: 0x%x", val); QDF_BUG(g_wiphy); - __hdd_wlan_fake_apps_resume(g_wiphy); + QDF_BUG(g_dev); + __hdd_wlan_fake_apps_resume(g_wiphy, g_dev); g_wiphy = NULL; + g_dev = NULL; } -int hdd_wlan_fake_apps_suspend(struct wiphy *wiphy) +int hdd_wlan_fake_apps_suspend(struct wiphy *wiphy, struct net_device *dev) { qdf_device_t qdf_dev = cds_get_context(QDF_MODULE_ID_QDF_DEVICE); struct hif_opaque_softc *hif_ctx = cds_get_context(QDF_MODULE_ID_HIF); @@ -2522,10 +2529,17 @@ int hdd_wlan_fake_apps_suspend(struct wiphy *wiphy) /* re-enable wake irq */ pld_enable_irq(qdf_dev->dev, CE_WAKE_IRQ); - /* pass wiphy to callback via global variable */ + /* pass wiphy/dev to callback via global variables */ g_wiphy = wiphy; + g_dev = dev; hif_fake_apps_suspend(hif_ctx, hdd_wlan_fake_apps_resume_irq_callback); + /* + * Tell the kernel not to worry if TX queues aren't moving. This is + * expected since we are suspending the wifi hardware, but not APPS + */ + dev->watchdog_timeo = INT_MAX; + return 0; enable_irqs_and_bus_resume: @@ -2546,12 +2560,12 @@ resume_done: return suspend_err; } -int hdd_wlan_fake_apps_resume(struct wiphy *wiphy) +int hdd_wlan_fake_apps_resume(struct wiphy *wiphy, struct net_device *dev) { struct hif_opaque_softc *hif_ctx = cds_get_context(QDF_MODULE_ID_HIF); hif_fake_apps_resume(hif_ctx); - __hdd_wlan_fake_apps_resume(wiphy); + __hdd_wlan_fake_apps_resume(wiphy, dev); return 0; } diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index 9beba4fc996a..720d1f504fc2 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -9883,10 +9883,10 @@ static int __iw_set_two_ints_getnone(struct net_device *dev, ret = wlan_hdd_set_mon_chan(pAdapter, value[1], value[2]); break; case WE_SET_WLAN_SUSPEND: - ret = hdd_wlan_fake_apps_suspend(hdd_ctx->wiphy); + ret = hdd_wlan_fake_apps_suspend(hdd_ctx->wiphy, dev); break; case WE_SET_WLAN_RESUME: - ret = hdd_wlan_fake_apps_resume(hdd_ctx->wiphy); + ret = hdd_wlan_fake_apps_resume(hdd_ctx->wiphy, dev); break; default: hdd_err("Invalid IOCTL command %d", sub_cmd); From 58ce4da2f150d0bab2b6967d8ba433171d284109 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 27 Oct 2016 17:35:15 -0700 Subject: [PATCH 095/119] Release 5.1.0.33T Release 5.1.0.33T Change-Id: I2387e591c6aab4efe11aee399ef865448ce30152 CRs-Fixed: 688141 (cherry picked from commit 85b4a9f140dcd8d8c6674f2a5f48b2aae1faaf92) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index d1631c80f717..4abaaafd9cac 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "S" +#define QWLAN_VERSION_EXTRA "T" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33S" +#define QWLAN_VERSIONSTR "5.1.0.33T" #endif /* QWLAN_VERSION_H */ From 929ad039e82fbc48d4cff5742183ba73ec8b18f0 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 19 Oct 2016 07:34:42 -0700 Subject: [PATCH 096/119] qcacld-3.0: Fix hdd_ocb_config_new() signature hdd_ocb_config_new() takes four "length" parameters, currently defined to be of type 'int'. Since these are summed to calculate the size of a dynamic memory allocation they must be non-negative so change them to 'uint32_t'. Change-Id: Ie66bbb7c69aba92d9d846cb90628110b3bea8f74 CRs-Fixed: 1079596 (cherry picked from commit a3047fb23625dfae22520c106e8b90093590b3d4) --- core/hdd/src/wlan_hdd_ocb.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/core/hdd/src/wlan_hdd_ocb.c b/core/hdd/src/wlan_hdd_ocb.c index 78d25b3c25fa..64ac5a0ebb42 100644 --- a/core/hdd/src/wlan_hdd_ocb.c +++ b/core/hdd/src/wlan_hdd_ocb.c @@ -302,10 +302,11 @@ static int hdd_ocb_register_sta(hdd_adapter_t *adapter) * * Return: A pointer to the OCB configuration struct, NULL on failure. */ -static struct sir_ocb_config *hdd_ocb_config_new(int num_channels, - int num_schedule, - int ndl_chan_list_len, - int ndl_active_state_list_len) +static +struct sir_ocb_config *hdd_ocb_config_new(uint32_t num_channels, + uint32_t num_schedule, + uint32_t ndl_chan_list_len, + uint32_t ndl_active_state_list_len) { struct sir_ocb_config *ret = 0; uint32_t len; @@ -791,7 +792,7 @@ static int __wlan_hdd_cfg80211_ocb_set_config(struct wiphy *wiphy, uint32_t ndl_active_state_list_len; uint32_t flags = 0; int i; - int channel_count, schedule_size; + uint32_t channel_count, schedule_size; struct sir_ocb_config *config; int rc = -EINVAL; uint8_t *mac_addr; From 82fbd7c8b4a362481d85efa561729a0e2bc36c38 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 27 Oct 2016 18:27:12 -0700 Subject: [PATCH 097/119] Release 5.1.0.33U Release 5.1.0.33U Change-Id: Ibe27b95878211042a4120c80682cfe36aecccf52 CRs-Fixed: 688141 (cherry picked from commit 39388c29aebc5ee920d5cf348b92669d92b582ca) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 4abaaafd9cac..049fbaee04ce 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "T" +#define QWLAN_VERSION_EXTRA "U" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33T" +#define QWLAN_VERSIONSTR "5.1.0.33U" #endif /* QWLAN_VERSION_H */ From fc8feea9092ea8931d56bc84f6f55d0a6614d6e2 Mon Sep 17 00:00:00 2001 From: Kiran Kumar Lokere Date: Thu, 27 Oct 2016 17:07:00 -0700 Subject: [PATCH 098/119] qcacld-3.0: Fix -Wmissing-prototypes in lim_process_csa_wbw_ie Fix -Wmissing-prototypes in lim_process_csa_wbw_ie Change-Id: Ia2f874e4146f331c98d90eadca8f4f0eceddf821 CRs-Fixed: 1075090 (cherry picked from commit b8b3671a8f83104630619beac170d02803b98134) --- core/mac/src/pe/lim/lim_send_sme_rsp_messages.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c index b5094115ff18..4eae32115abf 100644 --- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c +++ b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c @@ -1962,7 +1962,16 @@ lim_send_sme_ibss_peer_ind(tpAniSirGlobal pMac, } -void lim_process_csa_wdw_ie(tpAniSirGlobal mac_ctx, +/** + * lim_process_csa_wbw_ie() - Process CSA Wide BW IE + * @mac_ctx: pointer to global adapter context + * @csa_params: pointer to CSA parameters + * @chnl_switch_info:pointer to channel switch parameters + * @session_entry: session pointer + * + * Return: None + */ +static void lim_process_csa_wbw_ie(tpAniSirGlobal mac_ctx, struct csa_offload_params *csa_params, tLimWiderBWChannelSwitchInfo *chnl_switch_info, tpPESession session_entry) @@ -2117,7 +2126,7 @@ void lim_handle_csa_offload_msg(tpAniSirGlobal mac_ctx, tpSirMsgQ msg) if (session_entry->vhtCapability && session_entry->htSupportedChannelWidthSet) { if (csa_params->ies_present_flag & lim_wbw_ie_present) { - lim_process_csa_wdw_ie(mac_ctx, csa_params, + lim_process_csa_wbw_ie(mac_ctx, csa_params, chnl_switch_info, session_entry); lim_ch_switch->sec_ch_offset = csa_params->sec_chan_offset; From 1d69124539abcc898b126f65f518915f5b2eb540 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 27 Oct 2016 19:41:40 -0700 Subject: [PATCH 099/119] Release 5.1.0.33V Release 5.1.0.33V Change-Id: If54300b706623f3b9f0ebb8cd41abfb53f9430ea CRs-Fixed: 688141 (cherry picked from commit 6f16a9ad0ef3760c43cc4ce2b00b815035403515) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 049fbaee04ce..c7ff30488e0c 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "U" +#define QWLAN_VERSION_EXTRA "V" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33U" +#define QWLAN_VERSIONSTR "5.1.0.33V" #endif /* QWLAN_VERSION_H */ From 4a682396cbb4b5726f0bbc9326093b9849703ccf Mon Sep 17 00:00:00 2001 From: Arif Hussain Date: Tue, 25 Oct 2016 13:59:03 -0700 Subject: [PATCH 100/119] qcacld-3.0: Fix null pointer dereference in __lim_process_gid_management_action_frame In __lim_process_gid_management_action_frame function dph_lookup_hash_entry may return NULL, So validate return type to avoid null pointer dereference. Change-Id: I7d66f61bb26017ed4ffdd3435520b68623dda55a CRs-Fixed: 1082162 (cherry picked from commit 86a1d429d9114f982dd837c4d2527f154261c459) --- core/mac/src/pe/lim/lim_process_action_frame.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/mac/src/pe/lim/lim_process_action_frame.c b/core/mac/src/pe/lim/lim_process_action_frame.c index 455828a6b04f..5a4609ec1b51 100644 --- a/core/mac/src/pe/lim/lim_process_action_frame.c +++ b/core/mac/src/pe/lim/lim_process_action_frame.c @@ -636,6 +636,11 @@ static void __lim_process_gid_management_action_frame(tpAniSirGlobal mac_ctx, } sta_ptr = dph_lookup_hash_entry(mac_ctx, mac_hdr->sa, &aid, &session->dph.dphHashTable); + if (!sta_ptr) { + lim_log(mac_ctx, LOGE, + FL("Failed to get STA entry from hash table")); + goto out; + } lim_log(mac_ctx, LOGE, FL("received Gid Management Action Frame , staIdx = %d"), sta_ptr->staIndex); From 165aa4cf98e1a483d17d256adcce194d19ad6693 Mon Sep 17 00:00:00 2001 From: Arif Hussain Date: Tue, 25 Oct 2016 14:21:53 -0700 Subject: [PATCH 101/119] qcacld-3.0: Fix null pointer dereference in sap_signal_hdd_event sap_signal_hdd_event function caller may pass NULL csr_romeinfo, So validate csr_roaminfo to avoid null pointer dereference. Change-Id: I17364d9c3eb7b84786a86c29bc03b99dc2c0149a CRs-Fixed: 1082162 (cherry picked from commit 023028cc64383d062d10a3922dc06ba6c4cac54a) --- core/sap/src/sap_fsm.c | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/core/sap/src/sap_fsm.c b/core/sap/src/sap_fsm.c index 1222b8abb5f8..8e7d744fe91c 100644 --- a/core/sap/src/sap_fsm.c +++ b/core/sap/src/sap_fsm.c @@ -2733,6 +2733,11 @@ QDF_STATUS sap_signal_hdd_event(ptSapContext sap_ctx, switch (sap_hddevent) { case eSAP_STA_ASSOC_IND: + if (!csr_roaminfo) { + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, + FL("Invalid CSR Roam Info")); + return QDF_STATUS_E_INVAL; + } /* TODO - Indicate the assoc request indication to OS */ sap_ap_event.sapHddEventCode = eSAP_STA_ASSOC_IND; assoc_ind = &sap_ap_event.sapevt.sapAssocIndication; @@ -2812,6 +2817,12 @@ QDF_STATUS sap_signal_hdd_event(ptSapContext sap_ctx, case eSAP_STA_ASSOC_EVENT: case eSAP_STA_REASSOC_EVENT: + + if (!csr_roaminfo) { + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, + FL("Invalid CSR Roam Info")); + return QDF_STATUS_E_INVAL; + } reassoc_complete = &sap_ap_event.sapevt.sapStationAssocReassocCompleteEvent; @@ -2868,6 +2879,12 @@ QDF_STATUS sap_signal_hdd_event(ptSapContext sap_ctx, break; case eSAP_STA_DISASSOC_EVENT: + + if (!csr_roaminfo) { + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, + FL("Invalid CSR Roam Info")); + return QDF_STATUS_E_INVAL; + } sap_ap_event.sapHddEventCode = eSAP_STA_DISASSOC_EVENT; disassoc_comp = &sap_ap_event.sapevt.sapStationDisassocCompleteEvent; @@ -2885,6 +2902,12 @@ QDF_STATUS sap_signal_hdd_event(ptSapContext sap_ctx, break; case eSAP_STA_SET_KEY_EVENT: + + if (!csr_roaminfo) { + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, + FL("Invalid CSR Roam Info")); + return QDF_STATUS_E_INVAL; + } sap_ap_event.sapHddEventCode = eSAP_STA_SET_KEY_EVENT; key_complete = &sap_ap_event.sapevt.sapStationSetKeyCompleteEvent; @@ -2894,6 +2917,12 @@ QDF_STATUS sap_signal_hdd_event(ptSapContext sap_ctx, break; case eSAP_STA_MIC_FAILURE_EVENT: + + if (!csr_roaminfo) { + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, + FL("Invalid CSR Roam Info")); + return QDF_STATUS_E_INVAL; + } sap_ap_event.sapHddEventCode = eSAP_STA_MIC_FAILURE_EVENT; mic_failure = &sap_ap_event.sapevt.sapStationMICFailureEvent; @@ -2919,6 +2948,12 @@ QDF_STATUS sap_signal_hdd_event(ptSapContext sap_ctx, break; case eSAP_WPS_PBC_PROBE_REQ_EVENT: + + if (!csr_roaminfo) { + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, + FL("Invalid CSR Roam Info")); + return QDF_STATUS_E_INVAL; + } sap_ap_event.sapHddEventCode = eSAP_WPS_PBC_PROBE_REQ_EVENT; qdf_mem_copy(&sap_ap_event.sapevt.sapPBCProbeReqEvent. @@ -2952,6 +2987,12 @@ QDF_STATUS sap_signal_hdd_event(ptSapContext sap_ctx, break; case eSAP_MAX_ASSOC_EXCEEDED: + + if (!csr_roaminfo) { + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, + FL("Invalid CSR Roam Info")); + return QDF_STATUS_E_INVAL; + } sap_ap_event.sapHddEventCode = eSAP_MAX_ASSOC_EXCEEDED; qdf_copy_macaddr(&sap_ap_event.sapevt. sapMaxAssocExceeded.macaddr, @@ -3000,6 +3041,12 @@ QDF_STATUS sap_signal_hdd_event(ptSapContext sap_ctx, (&mac_ctx->sap.SapDfsInfo.sapDfsChannelNolList[0]); break; case eSAP_ECSA_CHANGE_CHAN_IND: + + if (!csr_roaminfo) { + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, + FL("Invalid CSR Roam Info")); + return QDF_STATUS_E_INVAL; + } QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, "In %s, SAP event callback event = %s", __func__, "eSAP_ECSA_CHANGE_CHAN_IND"); From 31576d985adceb6581bb7ba30a815739b73928c4 Mon Sep 17 00:00:00 2001 From: Arif Hussain Date: Tue, 25 Oct 2016 14:32:12 -0700 Subject: [PATCH 102/119] qcacld-3.0: Fix input validation in wma_mgmt_tx_bundle_completion_handler In wma_mgmt_tx_bundle_completion_handler function fix validation code from logical AND to OR, to fail validation if any of the two input variable are invalid. Change-Id: I835b4d4bfb966e313c9ab05fb9fd57b10925d506 CRs-Fixed: 1082162 (cherry picked from commit d1c9e067b250fe75257164e1db7e363db583d49b) --- core/wma/src/wma_mgmt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index a0f798fc7166..d5aef6cedc37 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -2564,7 +2564,7 @@ int wma_mgmt_tx_bundle_completion_handler(void *handle, uint8_t *buf, int i; param_buf = (WMI_MGMT_TX_BUNDLE_COMPLETION_EVENTID_param_tlvs *)buf; - if (!param_buf && !wma_handle) { + if (!param_buf || !wma_handle) { WMA_LOGE("%s: Invalid mgmt Tx completion event", __func__); return -EINVAL; } From cf6b960cb0fa6604f18a57f8a7e29f6aeb8d9542 Mon Sep 17 00:00:00 2001 From: Arif Hussain Date: Tue, 25 Oct 2016 14:46:53 -0700 Subject: [PATCH 103/119] qcacld-3.0: Fix null pointer dereference in wma_roam_scan_offload_mode In wma_roam_scan_offload_mode function validate mem_alloc return pointer to avoid NULL pointer dereference. Change-Id: Ib2733346614ddb99ac329aa929a774db2c4325d6 CRs-Fixed: 1082162 (cherry picked from commit 97961da746e461c6f4f8ab3d77b269db77e5d2fa) --- core/wma/src/wma_scan_roam.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 47237e812a2d..8d28d4806bca 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -755,14 +755,17 @@ QDF_STATUS wma_roam_scan_offload_mode(tp_wma_handle wma_handle, struct roam_offload_scan_params *params = qdf_mem_malloc(sizeof(*params)); + if (!params) { + WMA_LOGE("%s: Failed to allocate scan params", __func__); + return QDF_STATUS_E_NOMEM; + } #ifdef WLAN_FEATURE_ROAM_OFFLOAD - int auth_mode = WMI_AUTH_NONE; + params->auth_mode = WMI_AUTH_NONE; if (roam_req) - auth_mode = e_csr_auth_type_to_rsn_authmode + params->auth_mode = e_csr_auth_type_to_rsn_authmode (roam_req->ConnectedNetwork.authentication, roam_req->ConnectedNetwork.encryption); - WMA_LOGD("%s : auth mode = %d", __func__, auth_mode); - params->auth_mode = auth_mode; + WMA_LOGD("%s : auth mode = %d", __func__, params->auth_mode); #endif /* WLAN_FEATURE_ROAM_OFFLOAD */ params->is_roam_req_valid = 0; From 941630a0d10e4c52d56f6aa63be92d13d441fdb9 Mon Sep 17 00:00:00 2001 From: Arif Hussain Date: Tue, 25 Oct 2016 14:58:06 -0700 Subject: [PATCH 104/119] qcacld-3.0: unlock chan_lock before return in wma_dfs_indicate_radar unlock chan_lock before return in wma_dfs_indicate_radar function in failure case. Change-Id: I389d6479d2cd048b636230b38f135471acd38d00 CRs-Fixed: 1082162 (cherry picked from commit 41e358802ddc6722e4f1bf37b8c68ceab5e5fee5) --- core/wma/src/wma_features.c | 1 + 1 file changed, 1 insertion(+) diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index 52b330d7938e..a2cef423385b 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -7546,6 +7546,7 @@ int wma_dfs_indicate_radar(struct ieee80211com *ic, qdf_mem_malloc(sizeof(struct wma_dfs_radar_indication)); if (radar_event == NULL) { WMA_LOGE(FL("Failed to allocate memory for radar_event")); + qdf_spin_unlock_bh(&ic->chan_lock); return -ENOMEM; } wma->dfs_ic->last_radar_found_chan = ichan->ic_ieee; From c2bb440175aad18c0f504c3f746252b26ca5f320 Mon Sep 17 00:00:00 2001 From: Arif Hussain Date: Tue, 25 Oct 2016 15:24:08 -0700 Subject: [PATCH 105/119] qcacld-3.0: Add validation code in __lim_process_roam_scan_offload_req In function __lim_process_roam_scan_offload_req add validation code to avoid buffer overflow during memcopy. Change-Id: I2ac02e276dd7e4df0a6dffe58181ff538b49ed74 CRs-Fixed: 1082162 (cherry picked from commit 9806f9cfe464fb7ebebbf1a1f27c2b0b39cb1ffd) --- core/mac/src/pe/lim/lim_process_sme_req_messages.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index 03936bd0f360..9bf72ec16e1f 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c @@ -4165,9 +4165,12 @@ static void __lim_process_roam_scan_offload_req(tpAniSirGlobal mac_ctx, if (local_ie_len && !lim_update_ext_cap_ie(mac_ctx, req_buffer->assoc_ie.addIEdata, local_ie_buf, &local_ie_len)) { - req_buffer->assoc_ie.length = local_ie_len; - qdf_mem_copy(req_buffer->assoc_ie.addIEdata, local_ie_buf, - local_ie_len); + if (local_ie_len <= + QDF_ARRAY_SIZE(req_buffer->assoc_ie.addIEdata)) { + req_buffer->assoc_ie.length = local_ie_len; + qdf_mem_copy(req_buffer->assoc_ie.addIEdata, + local_ie_buf, local_ie_len); + } } qdf_mem_free(local_ie_buf); From 16f1dae19a16adeb267940d14078a1f4726489b6 Mon Sep 17 00:00:00 2001 From: Arif Hussain Date: Tue, 25 Oct 2016 18:34:21 -0700 Subject: [PATCH 106/119] qcacld-3.0: Fix possible buffer overflow in sap_random_channel_sel In function sap_random_channel_sel change final_lst array size from WNI_CFG_VALID_CHANNEL_LIST_LEN (100) to QDF_MAX_NUM_CHAN (128) to avoid possible buffer overflow, as sap_apply_rules function can return rule_adjusted_cnt QDF_MAX_NUM_CHAN size. Change-Id: I367dc54966fa57a7ef0195279953e31def06fd21 CRs-Fixed: 1082162 (cherry picked from commit bceffc9b2cfb622fbb44b5ec768fd7ebc6ecadb2) --- core/sap/src/sap_fsm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/sap/src/sap_fsm.c b/core/sap/src/sap_fsm.c index 8e7d744fe91c..2a091dbbbfbd 100644 --- a/core/sap/src/sap_fsm.c +++ b/core/sap/src/sap_fsm.c @@ -1635,7 +1635,7 @@ static uint8_t sap_random_channel_sel(ptSapContext sap_ctx) /* ch list after invalidating channels leaking into NOL */ uint8_t *leakage_adjusted_lst; /* final list of channel from which random channel will be selected */ - uint8_t final_lst[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0}; + uint8_t final_lst[QDF_MAX_NUM_CHAN] = {0}; tAll5GChannelList *all_ch = &sap_ctx->SapAllChnlList; tHalHandle hal = CDS_GET_HAL_CB(sap_ctx->p_cds_gctx); tpAniSirGlobal mac_ctx; From c8572b7251ca6797c49e3f3f90031f658e919500 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 27 Oct 2016 20:20:50 -0700 Subject: [PATCH 107/119] Release 5.1.0.33W Release 5.1.0.33W Change-Id: I3a839b75717c65f885f33a2e00fbf7d345d5e33c CRs-Fixed: 688141 (cherry picked from commit 6e4d700fe01b3eee279c2ef42e81dd754abf72c2) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index c7ff30488e0c..732ef6937801 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "V" +#define QWLAN_VERSION_EXTRA "W" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33V" +#define QWLAN_VERSIONSTR "5.1.0.33W" #endif /* QWLAN_VERSION_H */ From a8e2e6fd592a785f68a88f4a1dbc3464e8734e5a Mon Sep 17 00:00:00 2001 From: Orhan K AKYILDIZ Date: Thu, 13 Oct 2016 22:24:12 -0700 Subject: [PATCH 108/119] qcacld-3.0: protect rxhash history buffer for SMP Add a spinlock to make sure that htt rx_hash history buffer will not break under SMP conditions. Apply the lock on set and reset operations. Add timestamp to each buffer entry (will store the time stamp of the last operation on the entry). Change-Id: If1dcab4ac331351cf2dcfbaa6cb24d453e7fdf50 CRs-Fixed: 1077047 (cherry picked from commit be2d6e14afdc142564bb9d7fbcc446c060b0d0d4) --- core/dp/htt/htt_internal.h | 28 ++++++++++++++++++++++++---- core/dp/htt/htt_types.h | 1 + 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/core/dp/htt/htt_internal.h b/core/dp/htt/htt_internal.h index 69fe95e44cb5..b26b58a63d8e 100644 --- a/core/dp/htt/htt_internal.h +++ b/core/dp/htt/htt_internal.h @@ -135,8 +135,10 @@ struct htt_host_rx_desc_base { struct rx_buf_debug { qdf_dma_addr_t paddr; qdf_nbuf_t nbuf; - void *nbuf_data; - bool in_use; + void *nbuf_data; /* lsb of this field is used for "in_use" */ + /* bool in_use; */ + uint64_t ts; /* timestamp */ + }; #endif @@ -619,6 +621,8 @@ void htt_rx_dbg_rxbuf_init(struct htt_pdev_t *pdev) if (!pdev->rx_buff_list) { qdf_print("HTT: debug RX buffer allocation failed\n"); QDF_ASSERT(0); + } else { + qdf_spinlock_create(&(pdev->rx_buff_list_lock)); } } @@ -634,16 +638,24 @@ static inline void htt_rx_dbg_rxbuf_set(struct htt_pdev_t *pdev, qdf_dma_addr_t paddr, qdf_nbuf_t rx_netbuf) { + void *tmp; if (pdev->rx_buff_list) { + qdf_spin_lock_bh(&(pdev->rx_buff_list_lock)); pdev->rx_buff_list[pdev->rx_buff_index].paddr = paddr; - pdev->rx_buff_list[pdev->rx_buff_index].in_use = true; pdev->rx_buff_list[pdev->rx_buff_index].nbuf_data = rx_netbuf->data; + /* pdev->rx_buff_list[pdev->rx_buff_index].in_use = true; */ + tmp = pdev->rx_buff_list[pdev->rx_buff_index].nbuf_data; + tmp = (void *)((uint64_t) tmp | 0x01); + pdev->rx_buff_list[pdev->rx_buff_index].nbuf_data = tmp; pdev->rx_buff_list[pdev->rx_buff_index].nbuf = rx_netbuf; + pdev->rx_buff_list[pdev->rx_buff_index].ts = + qdf_get_log_timestamp(); NBUF_MAP_ID(rx_netbuf) = pdev->rx_buff_index; if (++pdev->rx_buff_index == HTT_RX_RING_BUFF_DBG_LIST) pdev->rx_buff_index = 0; + qdf_spin_unlock_bh(&(pdev->rx_buff_list_lock)); } } @@ -658,12 +670,20 @@ void htt_rx_dbg_rxbuf_reset(struct htt_pdev_t *pdev, qdf_nbuf_t netbuf) { uint32_t index; + void *tmp; if (pdev->rx_buff_list) { + qdf_spin_lock_bh(&(pdev->rx_buff_list_lock)); index = NBUF_MAP_ID(netbuf); if (index < HTT_RX_RING_BUFF_DBG_LIST) { - pdev->rx_buff_list[index].in_use = false; + /* in_use = false */ + tmp = pdev->rx_buff_list[index].nbuf_data; + tmp = (void *)((uint64_t)tmp & 0xfffffffffffffffe); + pdev->rx_buff_list[index].nbuf_data = tmp; + pdev->rx_buff_list[index].ts = + qdf_get_log_timestamp(); } + qdf_spin_unlock_bh(&(pdev->rx_buff_list_lock)); } } /** diff --git a/core/dp/htt/htt_types.h b/core/dp/htt/htt_types.h index 82b3d97bd385..cb4e885d5521 100644 --- a/core/dp/htt/htt_types.h +++ b/core/dp/htt/htt_types.h @@ -411,6 +411,7 @@ struct htt_pdev_t { #ifdef DEBUG_RX_RING_BUFFER struct rx_buf_debug *rx_buff_list; + qdf_spinlock_t rx_buff_list_lock; int rx_buff_index; #endif From de3531a926cccb146a669f4720caa89d47fc3ca2 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Thu, 27 Oct 2016 22:22:39 -0700 Subject: [PATCH 109/119] Release 5.1.0.33X Release 5.1.0.33X Change-Id: I45526164e7a4629f83fffe6c1df48ee65fd1fbd3 CRs-Fixed: 688141 (cherry picked from commit bb89388a0e6d83d20c7b1921725856d5be1a1b60) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 732ef6937801..328b5df9c230 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "W" +#define QWLAN_VERSION_EXTRA "X" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33W" +#define QWLAN_VERSIONSTR "5.1.0.33X" #endif /* QWLAN_VERSION_H */ From 5c7e2f57a6f7086a3e48d2695cf5a38923e30864 Mon Sep 17 00:00:00 2001 From: Himanshu Agarwal Date: Thu, 27 Oct 2016 15:16:54 +0530 Subject: [PATCH 110/119] qcacld-3.0: Enable logging of all DPTRACE logs for protocol packets Enable logging of DPTRACE logs at each layer of driver and at tx completion for all tx as well as rx protocol packets. Change-Id: Id568c19196702034989a0f55490bc62667b3b20e CRs-Fixed: 1083002 (cherry picked from commit c91cad24c240283aa70b120836799014c820975f) --- core/dp/htt/htt_rx.c | 1 + core/dp/txrx/ol_rx.c | 1 + 2 files changed, 2 insertions(+) diff --git a/core/dp/htt/htt_rx.c b/core/dp/htt/htt_rx.c index 62a293dc0e1d..b99d3b0f1cc8 100644 --- a/core/dp/htt/htt_rx.c +++ b/core/dp/htt/htt_rx.c @@ -2058,6 +2058,7 @@ htt_rx_amsdu_rx_in_order_pop_ll(htt_pdev_handle pdev, */ qdf_nbuf_pull_head(msdu, HTT_RX_STD_DESC_RESERVATION); + QDF_NBUF_CB_DP_TRACE_PRINT(msdu) = false; qdf_dp_trace_set_track(msdu, QDF_RX); QDF_NBUF_CB_TX_PACKET_TRACK(msdu) = QDF_NBUF_TX_PKT_DATA_TRACK; ol_rx_log_packet(pdev, peer_id, msdu); diff --git a/core/dp/txrx/ol_rx.c b/core/dp/txrx/ol_rx.c index 9b8a93e13fc0..1897c95c929a 100644 --- a/core/dp/txrx/ol_rx.c +++ b/core/dp/txrx/ol_rx.c @@ -1515,6 +1515,7 @@ ol_rx_offload_paddr_deliver_ind_handler(htt_pdev_handle htt_pdev, peer = ol_txrx_peer_find_by_id(htt_pdev->txrx_pdev, peer_id); if (peer) { + QDF_NBUF_CB_DP_TRACE_PRINT(head_buf) = false; qdf_dp_trace_set_track(head_buf, QDF_RX); QDF_NBUF_CB_TX_PACKET_TRACK(head_buf) = QDF_NBUF_TX_PKT_DATA_TRACK; From fd68172e84dfecb5546036754a19d677a31b824b Mon Sep 17 00:00:00 2001 From: Himanshu Agarwal Date: Thu, 27 Oct 2016 19:07:25 +0530 Subject: [PATCH 111/119] qcacld-3.0: Fix improper naming and exporting of dump_frag_desc() Fix improper naming and exporting of dump_frag_desc() by: 1) adding ol_txrx prefix in the api 2) adding prototype of api to ol_tx.h and removing the local prototype for the api from core/dp/txrx/ol_tx_desc.c Change-Id: I29a06419164afba7c1c391d11aee10742d41b93c CRs-Fixed: 1083068 (cherry picked from commit bcc6b34818654241a4886b35619fb5e901f6f10b) --- core/dp/txrx/ol_tx.c | 6 +++--- core/dp/txrx/ol_tx.h | 9 +++++++++ core/dp/txrx/ol_tx_desc.c | 5 +---- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/core/dp/txrx/ol_tx.c b/core/dp/txrx/ol_tx.c index eccc0507acc3..1f171c07e9e0 100644 --- a/core/dp/txrx/ol_tx.c +++ b/core/dp/txrx/ol_tx.c @@ -1354,7 +1354,7 @@ ol_txrx_mgmt_tx_desc_alloc( * address of the initial fragment. */ #if defined(HELIUMPLUS_PADDR64) - /* dump_frag_desc("ol_txrx_mgmt_send(): after ol_tx_desc_ll", + /* ol_txrx_dump_frag_desc("ol_txrx_mgmt_send(): after ol_tx_desc_ll", tx_desc); */ #endif /* defined(HELIUMPLUS_PADDR64) */ if (tx_desc) { @@ -1369,7 +1369,7 @@ ol_txrx_mgmt_tx_desc_alloc( qdf_nbuf_get_frag_paddr(tx_mgmt_frm, 1), 0, 0); #if defined(HELIUMPLUS_PADDR64) && defined(HELIUMPLUS_DEBUG) - dump_frag_desc( + ol_txrx_dump_frag_desc( "after htt_tx_desc_frags_table_set", tx_desc); #endif /* defined(HELIUMPLUS_PADDR64) */ @@ -1701,7 +1701,7 @@ ol_txrx_mgmt_tx_cb_set(ol_txrx_pdev_handle pdev, } #if defined(HELIUMPLUS_PADDR64) -void dump_frag_desc(char *msg, struct ol_tx_desc_t *tx_desc) +void ol_txrx_dump_frag_desc(char *msg, struct ol_tx_desc_t *tx_desc) { uint32_t *frag_ptr_i_p; int i; diff --git a/core/dp/txrx/ol_tx.h b/core/dp/txrx/ol_tx.h index 561900a71dcd..5cb97e825d13 100644 --- a/core/dp/txrx/ol_tx.h +++ b/core/dp/txrx/ol_tx.h @@ -121,4 +121,13 @@ static inline void ol_tso_seg_list_deinit(struct ol_txrx_pdev_t *pdev) } #endif +#if defined(HELIUMPLUS_PADDR64) +void ol_txrx_dump_frag_desc(char *msg, struct ol_tx_desc_t *tx_desc); +#else +static inline +void ol_txrx_dump_frag_desc(char *msg, struct ol_tx_desc_t *tx_desc) +{ +} +#endif + #endif /* _OL_TX__H_ */ diff --git a/core/dp/txrx/ol_tx_desc.c b/core/dp/txrx/ol_tx_desc.c index c4e78ae6de46..ee42722c6fa8 100644 --- a/core/dp/txrx/ol_tx_desc.c +++ b/core/dp/txrx/ol_tx_desc.c @@ -403,9 +403,6 @@ void ol_tx_desc_free(struct ol_txrx_pdev_t *pdev, struct ol_tx_desc_t *tx_desc) } #endif -extern void -dump_frag_desc(char *msg, struct ol_tx_desc_t *tx_desc); - void dump_pkt(qdf_nbuf_t nbuf, qdf_dma_addr_t nbuf_paddr, int len) { @@ -583,7 +580,7 @@ struct ol_tx_desc_t *ol_tx_desc_ll(struct ol_txrx_pdev_t *pdev, } #if defined(HELIUMPLUS_DEBUG) - dump_frag_desc("ol_tx_desc_ll()", tx_desc); + ol_txrx_dump_frag_desc("ol_tx_desc_ll()", tx_desc); #endif return tx_desc; } From 4405cbfb79b5bd0af531dc0bc0308b6d72061058 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 28 Oct 2016 04:09:01 -0700 Subject: [PATCH 112/119] Release 5.1.0.33Y Release 5.1.0.33Y Change-Id: I7438d311c22416a826c65e35ccaaf97b52744e84 CRs-Fixed: 688141 (cherry picked from commit 8605902cf94dd3f0167926b0ec3c32c9b355c3ac) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 328b5df9c230..727cff417306 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "X" +#define QWLAN_VERSION_EXTRA "Y" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33X" +#define QWLAN_VERSIONSTR "5.1.0.33Y" #endif /* QWLAN_VERSION_H */ From b3ef41623c8a79a29847ca69c641ac7334d231b6 Mon Sep 17 00:00:00 2001 From: Hanumanth Reddy Pothula Date: Tue, 25 Oct 2016 15:13:26 +0530 Subject: [PATCH 113/119] qcacld-3.0: Don't set fixed params for setPktFilter ioctl While defining setPktFilter ioctl arguments, Host is setting IW_PRIV_SIZE_FIXED, which means setPktFilter ioctl accepts exactly fixed(103) number of parameters. So, if user issues the ioctl with number parameter other than 103, kernel returns failure. Remove IW_PRIV_SIZE_FIXED while defining arguments for setPktFilter IOCTL, so that setPktFilter is processed. Change-Id: I373609eb3c180af80218d6e955a1cf0d56f785a7 CRs-Fixed: 1081982 (cherry picked from commit 1105e872650391fbaad03efa325510482c413680) --- core/hdd/src/wlan_hdd_wext.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index 720d1f504fc2..52d44b5668cb 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -11060,8 +11060,8 @@ static const struct iw_priv_args we_private_args[] = { #ifdef WLAN_FEATURE_PACKET_FILTERING { WLAN_SET_PACKET_FILTER_PARAMS, - IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | - sizeof(struct pkt_filter_cfg), + IW_PRIV_TYPE_BYTE | + sizeof(struct pkt_filter_cfg), 0, "setPktFilter" } From 5d7138ba9363cf16a2beae3e40fc3790e8a6ba7f Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 28 Oct 2016 09:07:52 -0700 Subject: [PATCH 114/119] Release 5.1.0.33Z Release 5.1.0.33Z Change-Id: I4fe3be00220531ce6bab62fdbba237e72b85d6d3 CRs-Fixed: 688141 (cherry picked from commit ea4730ae12799e43443bbf4125d15541a54fc58a) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 727cff417306..995ab8364c7a 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "Y" +#define QWLAN_VERSION_EXTRA "Z" #define QWLAN_VERSION_BUILD 33 -#define QWLAN_VERSIONSTR "5.1.0.33Y" +#define QWLAN_VERSIONSTR "5.1.0.33Z" #endif /* QWLAN_VERSION_H */ From 79da812012e54c3c6180177c373bb562c66876fc Mon Sep 17 00:00:00 2001 From: Amar Singhal Date: Wed, 26 Oct 2016 16:29:01 -0700 Subject: [PATCH 115/119] qcacld-3.0: Combine channel states only for 80P80 We dont need to combine channel states if the Channel width is not 80P80MHZ. Fix this so the logic is easier to understand. CRs-Fixed: 1082221 Change-Id: Ie31d564f63278fe6549a2d54165920c28958c274 (cherry picked from commit a53a28f26e2add8309bb0c2ebacaa8f97f2506d3) --- core/cds/src/cds_reg_service.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/cds/src/cds_reg_service.c b/core/cds/src/cds_reg_service.c index b486963516cb..87706810b97b 100644 --- a/core/cds/src/cds_reg_service.c +++ b/core/cds/src/cds_reg_service.c @@ -486,13 +486,14 @@ static void cds_set_5g_channel_params(uint16_t oper_ch, chan_state = cds_get_5g_bonded_channel_state(oper_ch, ch_params->ch_width); - if (CH_WIDTH_80P80MHZ == ch_params->ch_width) + if (CH_WIDTH_80P80MHZ == ch_params->ch_width) { chan_state2 = cds_get_5g_bonded_channel_state( ch_params->center_freq_seg1 - 2, CH_WIDTH_80MHZ); - chan_state = cds_combine_channel_states(chan_state, - chan_state2); + chan_state = cds_combine_channel_states(chan_state, + chan_state2); + } if ((CHANNEL_STATE_ENABLE == chan_state) || (CHANNEL_STATE_DFS == chan_state)) { From b378c64e87393fc5f39070551493297bf1aa73bd Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 28 Oct 2016 10:29:46 -0700 Subject: [PATCH 116/119] Release 5.1.0.34 Release 5.1.0.34 Change-Id: Ia8c74e0028661471b4bee42d81f526c80e9ac2c7 CRs-Fixed: 688141 (cherry picked from commit 8f73342466126b314c1ca1dbd297cbc6c256df57) --- core/mac/inc/qwlan_version.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 995ab8364c7a..514d2f3d78fd 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "Z" -#define QWLAN_VERSION_BUILD 33 +#define QWLAN_VERSION_EXTRA "" +#define QWLAN_VERSION_BUILD 34 -#define QWLAN_VERSIONSTR "5.1.0.33Z" +#define QWLAN_VERSIONSTR "5.1.0.34" #endif /* QWLAN_VERSION_H */ From 35fc8ea8b87b4b4c737fb4254762cc8d1dccc44b Mon Sep 17 00:00:00 2001 From: Krunal Soni Date: Wed, 26 Oct 2016 18:52:38 -0700 Subject: [PATCH 117/119] qcacld-3.0: Fix to handle SAP+STA DFS MCC scenario 1) If STA is on 2G channel and SAP is coming up on 5G DFS channel then it should be allowed given that DBS is supported. 2) If STA is on 5G channel and SAP is coming up on 5G DFS channel then it shoudln't be allowed as it will create DFS MCC scenario 3) If SAP is on 5G DFS and STA is coming up on 2G channel then it should be allowed given that DBS is supported. 4) If SAP is on 5G or 2G channel and STA is coming up on either of the bands then allow connections to go through. Make necessary adjustment to apply all above 4 rules. Change-Id: I0a4dfe57cad1d2a62ada1bd8c258f7f3f6ac5dc2 CRs-Fixed: 1083376 (cherry picked from commit c6b307e0bc8ea638f44bd8ef86d09737a930b3ba) --- core/cds/src/cds_concurrency.c | 194 ++++++++++++++++---------------- core/hdd/src/wlan_hdd_hostapd.c | 30 ++++- core/sap/src/sap_fsm.c | 13 ++- 3 files changed, 134 insertions(+), 103 deletions(-) diff --git a/core/cds/src/cds_concurrency.c b/core/cds/src/cds_concurrency.c index db2594c4cdef..b297c09f5873 100644 --- a/core/cds/src/cds_concurrency.c +++ b/core/cds/src/cds_concurrency.c @@ -3344,7 +3344,6 @@ void cds_dump_concurrency_info(void) status = hdd_get_next_adapter(hdd_ctx, adapterNode, &pNext); adapterNode = pNext; } - cds_dump_current_concurrency(); hdd_ctx->mcc_mode = cds_current_concurrency_is_mcc(); } @@ -3572,6 +3571,52 @@ static void cds_pdev_set_pcl(enum tQDF_ADAPTER_MODE mode) cds_info("Set PCL to FW for mode:%d", mode); } + +/** + * cds_set_pcl_for_existing_combo() - Set PCL for existing connection + * @mode: Connection mode of type 'cds_con_mode' + * + * Set the PCL for an existing connection + * + * Return: None + */ +static void cds_set_pcl_for_existing_combo(enum cds_con_mode mode) +{ + struct cds_conc_connection_info info; + enum tQDF_ADAPTER_MODE pcl_mode; + + switch (mode) { + case CDS_STA_MODE: + pcl_mode = QDF_STA_MODE; + break; + case CDS_SAP_MODE: + pcl_mode = QDF_SAP_MODE; + break; + case CDS_P2P_CLIENT_MODE: + pcl_mode = QDF_P2P_CLIENT_MODE; + break; + case CDS_P2P_GO_MODE: + pcl_mode = QDF_P2P_GO_MODE; + break; + case CDS_IBSS_MODE: + pcl_mode = QDF_IBSS_MODE; + break; + default: + cds_err("Invalid mode to set PCL"); + return; + }; + + if (cds_mode_specific_connection_count(mode, NULL) > 0) { + /* Check, store and temp delete the mode's parameter */ + cds_store_and_del_conn_info(mode, &info); + /* Set the PCL to the FW since connection got updated */ + cds_pdev_set_pcl(pcl_mode); + cds_info("Set PCL to FW for mode:%d", mode); + /* Restore the connection info */ + cds_restore_deleted_conn_info(&info); + } +} + /** * cds_incr_active_session() - increments the number of active sessions * @mode: Adapter mode @@ -3633,9 +3678,14 @@ void cds_incr_active_session(enum tQDF_ADAPTER_MODE mode, cds_info("Set PCL of STA to FW"); } cds_incr_connection_count(session_id); + if ((cds_mode_specific_connection_count(CDS_STA_MODE, NULL) > 0) && + (mode != QDF_STA_MODE)) { + cds_set_pcl_for_existing_combo(CDS_STA_MODE); + } /* set tdls connection tracker state */ cds_set_tdls_ct_mode(hdd_ctx); + cds_dump_current_concurrency(); qdf_mutex_release(&cds_ctx->qdf_conc_list_lock); } @@ -3709,52 +3759,6 @@ done: return upgrade; } - -/** - * cds_set_pcl_for_existing_combo() - Set PCL for existing connection - * @mode: Connection mode of type 'cds_con_mode' - * - * Set the PCL for an existing connection - * - * Return: None - */ -static void cds_set_pcl_for_existing_combo(enum cds_con_mode mode) -{ - struct cds_conc_connection_info info; - enum tQDF_ADAPTER_MODE pcl_mode; - - switch (mode) { - case CDS_STA_MODE: - pcl_mode = QDF_STA_MODE; - break; - case CDS_SAP_MODE: - pcl_mode = QDF_SAP_MODE; - break; - case CDS_P2P_CLIENT_MODE: - pcl_mode = QDF_P2P_CLIENT_MODE; - break; - case CDS_P2P_GO_MODE: - pcl_mode = QDF_P2P_GO_MODE; - break; - case CDS_IBSS_MODE: - pcl_mode = QDF_IBSS_MODE; - break; - default: - cds_err("Invalid mode to set PCL"); - return; - }; - - if (cds_mode_specific_connection_count(mode, NULL) > 0) { - /* Check, store and temp delete the mode's parameter */ - cds_store_and_del_conn_info(mode, &info); - /* Set the PCL to the FW since connection got updated */ - cds_pdev_set_pcl(pcl_mode); - cds_info("Set PCL to FW for mode:%d", mode); - /* Restore the connection info */ - cds_restore_deleted_conn_info(&info); - } -} - /** * cds_get_pcl_for_existing_conn() - Get PCL for existing connection * @mode: Connection mode of type 'cds_con_mode' @@ -3908,6 +3912,8 @@ void cds_decr_active_session(enum tQDF_ADAPTER_MODE mode, /* set tdls connection tracker state */ cds_set_tdls_ct_mode(hdd_ctx); + cds_dump_current_concurrency(); + qdf_mutex_release(&cds_ctx->qdf_conc_list_lock); } @@ -5293,6 +5299,39 @@ static bool cds_vht160_conn_exist(void) return status; } +/** + * cds_is_5g_channel_allowed() - check if 5g channel is allowed + * @channel: channel number which needs to be validated + * @list: list of existing connections. + * @mode: mode against which channel needs to be validated + * + * This API takes the channel as input and compares with existing + * connection channels. If existing connection's channel is DFS channel + * and provided channel is 5G channel then don't allow concurrency to + * happen as MCC with DFS channel is not yet supported + * + * Return: true if 5G channel is allowed, false if not allowed + * + */ +static bool cds_is_5g_channel_allowed(uint8_t channel, uint32_t *list, + enum cds_con_mode mode) +{ + uint32_t index = 0, count = 0; + + count = cds_mode_specific_connection_count(mode, list); + while (index < count) { + if (CDS_IS_DFS_CH(conc_connection_list[list[index]].chan) && + CDS_IS_CHANNEL_5GHZ(channel) && + (channel != conc_connection_list[list[index]].chan)) { + cds_err("don't allow MCC if SAP/GO on DFS channel"); + return false; + } + index++; + } + return true; + +} + /** * cds_allow_concurrency() - Check for allowed concurrency * combination @@ -5356,59 +5395,24 @@ bool cds_allow_concurrency(enum cds_con_mode mode, if (channel) { /* don't allow 3rd home channel on same MAC */ - if (!cds_allow_new_home_channel(channel, - num_connections)) - goto done; - - /* - * If you already have STA connection then don't - * allow any other persona to make connection on DFS channel - * because STA might be on non-DFS right now but later on as - * part of roaming if STA connects to DFS channel which happens - * to be different than requested DFS channel then MCC DFS - * scenario will be encountered - */ - count = cds_mode_specific_connection_count(CDS_STA_MODE, - list); - if ((count > 0) && CDS_IS_DFS_CH(channel)) { - cds_err("STA active, don't allow DFS channel for 2nd connection"); + if (!cds_allow_new_home_channel(channel, num_connections)) goto done; - } /* - * don't allow MCC if SAP/GO on DFS channel or about to come up - * on DFS channel + * 1) DFS MCC is not yet supported + * 2) If you already have STA connection on 5G channel then + * don't allow any other persona to make connection on DFS + * channel because STA 5G + DFS MCC is not allowed. + * 3) If STA is on 2G channel and SAP is coming up on + * DFS channel then allow concurrency but make sure it is + * going to DBS and send PCL to firmware indicating that + * don't allow STA to roam to 5G channels. */ - count = cds_mode_specific_connection_count( - CDS_P2P_GO_MODE, list); - while (index < count) { - if ((CDS_IS_DFS_CH( - conc_connection_list[list[index]].chan)) && - (CDS_IS_CHANNEL_5GHZ(channel)) && - (channel != - conc_connection_list[list[index]].chan)) { - cds_err("don't allow MCC if SAP/GO on DFS channel"); - goto done; - } - index++; - } + if (!cds_is_5g_channel_allowed(channel, list, CDS_P2P_GO_MODE)) + goto done; + if (!cds_is_5g_channel_allowed(channel, list, CDS_SAP_MODE)) + goto done; - index = 0; - count = cds_mode_specific_connection_count( - CDS_SAP_MODE, list); - while (index < count) { - if ((CDS_IS_DFS_CH( - conc_connection_list[list[index]].chan)) && - (CDS_IS_CHANNEL_5GHZ(channel)) && - (channel != - conc_connection_list[list[index]].chan)) { - cds_err("don't allow MCC if SAP/GO on DFS channel"); - goto done; - } - index++; - } - - index = 0; if ((CDS_P2P_GO_MODE == mode) || (CDS_SAP_MODE == mode)) { if (CDS_IS_DFS_CH(channel)) match = cds_disallow_mcc(channel); diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 199268dd1d40..8884800e31f3 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -1049,11 +1049,15 @@ QDF_STATUS hdd_hostapd_sap_event_cb(tpSap_Event pSapEvent, pHostapdState->qdf_status = pSapEvent->sapevt.sapStartBssCompleteEvent.status; - qdf_status = qdf_event_set(&pHostapdState->qdf_event); - - if (!QDF_IS_STATUS_SUCCESS(qdf_status) - || pHostapdState->qdf_status) { + if (pHostapdState->qdf_status) { hdd_err("ERROR: startbss event failed!!"); + /* + * Make sure to set the event before proceeding + * for error handling otherwise caller thread will + * wait till 10 secs and no other connection will + * go through before that. + */ + qdf_event_set(&pHostapdState->qdf_event); goto stopbss; } else { sme_ch_avoid_update_req(pHddCtx->hHal); @@ -1084,6 +1088,13 @@ QDF_STATUS hdd_hostapd_sap_event_cb(tpSap_Event pSapEvent, pHostapdAdapter->dev->dev_addr); if (status) { hdd_err("WLAN_AP_CONNECT event failed!!"); + /* + * Make sure to set the event before proceeding + * for error handling otherwise caller thread + * will wait till 10 secs and no other + * connection will go through before that. + */ + qdf_event_set(&pHostapdState->qdf_event); goto stopbss; } } @@ -1209,6 +1220,17 @@ QDF_STATUS hdd_hostapd_sap_event_cb(tpSap_Event pSapEvent, hdd_info("set hw mode change not done"); cds_set_do_hw_mode_change_flag(false); } + /* + * set this event at the very end because once this events + * get set, caller thread is waiting to do further processing. + * so once this event gets set, current worker thread might get + * pre-empted by caller thread. + */ + qdf_status = qdf_event_set(&pHostapdState->qdf_event); + if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { + hdd_err("ERROR: startbss event set failed!!"); + goto stopbss; + } break; /* Event will be sent after Switch-Case stmt */ case eSAP_STOP_BSS_EVENT: diff --git a/core/sap/src/sap_fsm.c b/core/sap/src/sap_fsm.c index 2a091dbbbfbd..c7f263257bfa 100644 --- a/core/sap/src/sap_fsm.c +++ b/core/sap/src/sap_fsm.c @@ -4733,10 +4733,15 @@ static QDF_STATUS sap_get_5ghz_channel_list(ptSapContext sapContext) " Memory Allocation failed sap_get_channel_list"); return QDF_STATUS_E_NOMEM; } - - status = cds_get_pcl_for_existing_conn(CDS_SAP_MODE, - pcl.pcl_list, &pcl.pcl_len, - pcl.weight_list, QDF_ARRAY_SIZE(pcl.weight_list)); + if (cds_mode_specific_connection_count(CDS_SAP_MODE, NULL) == 0) { + status = cds_get_pcl(CDS_SAP_MODE, + pcl.pcl_list, &pcl.pcl_len, pcl.weight_list, + QDF_ARRAY_SIZE(pcl.weight_list)); + } else { + status = cds_get_pcl_for_existing_conn(CDS_SAP_MODE, + pcl.pcl_list, &pcl.pcl_len, pcl.weight_list, + QDF_ARRAY_SIZE(pcl.weight_list)); + } if (status != QDF_STATUS_SUCCESS) { cds_err("Get PCL failed"); return status; From d292a6b8cd843b8b09bbc9a1335dd626b879f99e Mon Sep 17 00:00:00 2001 From: Krunal Soni Date: Thu, 27 Oct 2016 17:25:23 -0700 Subject: [PATCH 118/119] qcacld-3.0: Enable Rx LDPC when DBS is disabled from INI As per new requirement, when DBS is disabled from INI, driver needs to enable Rx LDPC for all persona if it is supported by hardware and enabled from INI. CRs-Fixed: 1083379 Change-Id: I803ffd2c8035bd2604db7189f3d0734816c80d3f (cherry picked from commit 284064f72ae7a421a6d870c5c29d496fea23353f) --- core/sme/src/csr/csr_api_roam.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 0c784ba5b0a8..d9bbd0bda24d 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -14301,10 +14301,11 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, } /* * If RX LDPC has been disabled for 2.4GHz channels and enabled - * for 5Ghz for STA like persona here is how to handle those - * cases here (by now channel has been decided). + * for 5Ghz for STA like persona then here is how to handle + * those cases (by now channel has been decided). */ - if (eSIR_INFRASTRUCTURE_MODE == csr_join_req->bsstype) + if (eSIR_INFRASTRUCTURE_MODE == csr_join_req->bsstype || + !wma_is_dbs_enable()) csr_set_ldpc_exception(pMac, pSession, pBssDescription->channelId, pMac->roam.configParam.rxLdpcEnable); @@ -15119,7 +15120,12 @@ QDF_STATUS csr_send_mb_start_bss_req_msg(tpAniSirGlobal pMac, uint32_t sessionId qdf_mem_copy(&pMsg->extendedRateSet, &pParam->extendedRateSet, sizeof(tSirMacRateSet)); - if (eSIR_IBSS_MODE == pMsg->bssType) + /* + * If RX LDPC has been disabled for 2.4GHz channels and enabled + * for 5Ghz for STA like persona then here is how to handle + * those cases (by now channel has been decided). + */ + if (eSIR_IBSS_MODE == pMsg->bssType || !wma_is_dbs_enable()) csr_set_ldpc_exception(pMac, pSession, pMsg->channelId, pMac->roam.configParam.rxLdpcEnable); From 1bd774c3c0bd9226d07f8328a50bdc089dc7fd69 Mon Sep 17 00:00:00 2001 From: qcabuildsw Date: Fri, 28 Oct 2016 11:04:20 -0700 Subject: [PATCH 119/119] Release 5.1.0.34A Release 5.1.0.34A Change-Id: Ie37305564da9252d4086e710d299f3a48cc847b6 CRs-Fixed: 688141 (cherry picked from commit ef591b06b44e2bc3f9642db70a18f8008715ca28) --- core/mac/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 514d2f3d78fd..88237f8aec48 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "" +#define QWLAN_VERSION_EXTRA "A" #define QWLAN_VERSION_BUILD 34 -#define QWLAN_VERSIONSTR "5.1.0.34" +#define QWLAN_VERSIONSTR "5.1.0.34A" #endif /* QWLAN_VERSION_H */