diff options
| author | Akash Patel <akashp@codeaurora.org> | 2015-05-01 11:11:15 -0700 |
|---|---|---|
| committer | Akash Patel <akashp@codeaurora.org> | 2015-05-01 11:12:06 -0700 |
| commit | b203a120d28cdf5ac4e3e3594955032c8d4b4793 (patch) | |
| tree | 1e4a16f5a09a6f6fc7992c6e6d37d7316b40eb24 | |
| parent | 26385760a5abef4b3dd2e3f5662cb7274f06a5fa (diff) | |
| parent | fc6bf73c153998ba93caac082c2274891fa8ee86 (diff) | |
Release 4.0.10.89 QCACLD WLAN Driver
Merge remote-tracking branch 'origin/caf/caf-wlan/master' into HEAD
* origin/caf/caf-wlan/master:
Cafstaging Release 4.0.10.89
qcacld: Fix memory overwrite in struct join response and start bss
qcacld: Use different variable to check Blacklist BSSID
qcacld: configure tsf gpio pin
qcacld-2.0: Use the correct Max WMI length in set_bssid_hotlist
qcacld: Fix assert in FTM mode
qcacld: Fix length calculation for bss descriptor
qcacld: Provide tsf_delta to user space application
qcacld: Update fine timing measurement capabilities
qca-cld: ipa-uc: first connection and IPA resource grant race fix
Change-Id: I2e23d9c3a607126b57d7a0d2bfc7829d23a3ef8d
29 files changed, 255 insertions, 74 deletions
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c index c335eae90918..0941c4c71257 100644 --- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c +++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c @@ -575,6 +575,7 @@ static int tlshim_mgmt_rx_process(void *context, u_int8_t *data, rx_pkt->pkt_meta.mpdu_hdr_ptr = adf_nbuf_data(wbuf); rx_pkt->pkt_meta.mpdu_data_ptr = rx_pkt->pkt_meta.mpdu_hdr_ptr + rx_pkt->pkt_meta.mpdu_hdr_len; + rx_pkt->pkt_meta.tsf_delta = hdr->tsf_delta; rx_pkt->pkt_buf = wbuf; #ifdef BIG_ENDIAN_HOST @@ -602,10 +603,10 @@ static int tlshim_mgmt_rx_process(void *context, u_int8_t *data, #endif TLSHIM_LOGD( - "%s: BSSID: "MAC_ADDRESS_STR" snr = %d, rssi = %d, rssi_raw = %d", - __func__, MAC_ADDR_ARRAY(wh->i_addr3), - hdr->snr, rx_pkt->pkt_meta.rssi, - rx_pkt->pkt_meta.rssi_raw); + FL("BSSID: "MAC_ADDRESS_STR" snr = %d, rssi = %d, rssi_raw = %d tsf_delta: %u"), + MAC_ADDR_ARRAY(wh->i_addr3), hdr->snr, + rx_pkt->pkt_meta.rssi, + rx_pkt->pkt_meta.rssi_raw, hdr->tsf_delta); if (!tl_shim->mgmt_rx) { TLSHIM_LOGE("Not registered for Mgmt rx, dropping the frame"); diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index 5968e95c4485..689737e11cb4 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -2780,6 +2780,12 @@ enum dot11p_mode { #define CFG_INFORM_BSS_RSSI_RAW_MAX (1) #define CFG_INFORM_BSS_RSSI_RAW_DEFAULT (1) +/* GPIO pin to toogle when capture tsf */ +#define CFG_SET_TSF_GPIO_PIN_NAME "gtsf_gpio_pin" +#define CFG_SET_TSF_GPIO_PIN_MIN (0) +#define CFG_SET_TSF_GPIO_PIN_MAX (255) +#define CFG_SET_TSF_GPIO_PIN_DEFAULT (34) + /*--------------------------------------------------------------------------- Type declarations -------------------------------------------------------------------------*/ @@ -3381,6 +3387,7 @@ typedef struct #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ uint8_t prefer_non_dfs_on_radar; uint8_t inform_bss_rssi_raw; + uint32_t tsf_gpio_pin; } hdd_config_t; #ifdef WLAN_FEATURE_MBSSID diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h index 097539cde034..7ca9cdb59d6f 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg80211.h +++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h @@ -93,7 +93,7 @@ #define QCOM_OUI2 0xA0 #define QCOM_OUI3 0xC6 #define QCOM_VENDOR_IE_AGE_TYPE 0x100 -#define QCOM_VENDOR_IE_AGE_LEN 11 +#define QCOM_VENDOR_IE_AGE_LEN (sizeof(qcom_ie_age) - 2) #ifdef FEATURE_WLAN_TDLS #define WLAN_IS_TDLS_SETUP_ACTION(action) \ @@ -113,6 +113,7 @@ typedef struct { u8 oui_3; u32 type; u32 age; + u32 tsf_delta; }__attribute__((packed)) qcom_ie_age ; #endif diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index 9564fa809231..1ca006b4f6a7 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -3637,6 +3637,14 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_INFORM_BSS_RSSI_RAW_DEFAULT, CFG_INFORM_BSS_RSSI_RAW_MIN, CFG_INFORM_BSS_RSSI_RAW_MAX), +#ifdef WLAN_FEATURE_TSF + REG_VARIABLE(CFG_SET_TSF_GPIO_PIN_NAME, WLAN_PARAM_Integer, + hdd_config_t, tsf_gpio_pin, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_SET_TSF_GPIO_PIN_DEFAULT, + CFG_SET_TSF_GPIO_PIN_MIN, + CFG_SET_TSF_GPIO_PIN_MAX), +#endif }; #ifdef WLAN_FEATURE_MBSSID diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index bf2e0e51a6fe..06575fa3b9b4 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -11549,6 +11549,7 @@ wlan_hdd_cfg80211_inform_bss_frame( hdd_adapter_t *pAdapter, qie_age->oui_3 = QCOM_OUI3; qie_age->type = QCOM_VENDOR_IE_AGE_TYPE; qie_age->age = vos_timer_get_system_ticks() - bss_desc->nReceivedTime; + qie_age->tsf_delta = bss_desc->tsf_delta; #endif memcpy(mgmt->u.probe_resp.variable, ie, ie_length); diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c index df8f0247c8c6..75d51bc86da8 100644 --- a/CORE/HDD/src/wlan_hdd_ipa.c +++ b/CORE/HDD/src/wlan_hdd_ipa.c @@ -888,7 +888,12 @@ static void hdd_ipa_uc_rm_notify_handler(void *context, enum ipa_rm_event event) switch (event) { case IPA_RM_RESOURCE_GRANTED: /* Differed RM Granted */ - hdd_ipa_uc_enable_pipes(hdd_ipa); + vos_lock_acquire(&hdd_ipa->event_lock); + if ((VOS_FALSE == hdd_ipa->resource_unloading) && + (!hdd_ipa->activated_fw_pipe)) { + hdd_ipa_uc_enable_pipes(hdd_ipa); + } + vos_lock_release(&hdd_ipa->event_lock); if (hdd_ipa->pending_cons_req) { ipa_rm_notify_completion(IPA_RM_RESOURCE_GRANTED, IPA_RM_RESOURCE_WLAN_CONS); @@ -1854,13 +1859,8 @@ static void hdd_ipa_rm_notify(void *user_data, enum ipa_rm_event event, /* RM Notification comes with ISR context * it should be serialized into work queue to avoid * ISR sleep problem */ - if (hdd_ipa->resource_loading) { - hdd_ipa->uc_rm_work.event = event; - schedule_work(&hdd_ipa->uc_rm_work.work); - } else { - HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, - "UCResource Grntd with invalid status"); - } + hdd_ipa->uc_rm_work.event = event; + schedule_work(&hdd_ipa->uc_rm_work.work); break; } #endif /* IPA_UC_OFFLOAD */ diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 9aeb4715aa72..2f7fbf9f77a9 100755 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -11216,6 +11216,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) #endif hdd_context_t *pHddCtx = NULL; v_CONTEXT_t pVosContext= NULL; + eHalStatus hal_status; int ret; int i; struct wiphy *wiphy; @@ -11975,6 +11976,13 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) "%s: Error setting txlimit in sme", __func__); } + hal_status = sme_set_tsf_gpio(pHddCtx->hHal, pHddCtx->cfg_ini->tsf_gpio_pin); + + if (eHAL_STATUS_SUCCESS != hal_status) { + hddLog(VOS_TRACE_LEVEL_ERROR, + FL("set tsf GPIO fail")); + } + #ifdef MSM_PLATFORM spin_lock_init(&pHddCtx->bus_bw_lock); vos_timer_init(&pHddCtx->bus_bw_timer, diff --git a/CORE/HDD/src/wlan_hdd_memdump.c b/CORE/HDD/src/wlan_hdd_memdump.c index 8192d1e69318..7e06b32fc12c 100644 --- a/CORE/HDD/src/wlan_hdd_memdump.c +++ b/CORE/HDD/src/wlan_hdd_memdump.c @@ -477,6 +477,11 @@ int memdump_init(void) return -EINVAL; } + if (VOS_FTM_MODE == hdd_get_conparam()) { + hddLog(LOGE, FL("Not initializing memdump in FTM mode")); + return -EINVAL; + } + cb_status = sme_fw_mem_dump_register_cb(hdd_ctx->hHal, wlan_hdd_cfg80211_fw_mem_dump_cb); if (eHAL_STATUS_SUCCESS != cb_status) { @@ -530,6 +535,11 @@ void memdump_deinit(void) { return; } + if (VOS_FTM_MODE == hdd_get_conparam()) { + hddLog(LOGE, FL("Not deinitializing memdump in FTM mode")); + return; + } + adf_ctx = vos_get_context(VOS_MODULE_ID_ADF, hdd_ctx->pvosContext); if (!adf_ctx) { hddLog(LOGE, FL("ADF context is NULL")); diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 4f06b5a7a510..553537c9d3f6 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -42,9 +42,9 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 10 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 88 +#define QWLAN_VERSION_BUILD 89 -#define QWLAN_VERSIONSTR "4.0.10.88" +#define QWLAN_VERSIONSTR "4.0.10.89" #define AR6320_REV1_VERSION 0x5000000 diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index 13f1f3fbb688..c536a962274f 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -716,6 +716,7 @@ typedef struct sSirBssDescription tANI_U32 WscIeLen; tANI_U8 WscIeProbeRsp[WSCIE_PROBE_RSP_LEN]; tANI_U8 reservedPadding4; + tANI_U32 tsf_delta; tANI_U32 ieFields[1]; } tSirBssDescription, *tpSirBssDescription; @@ -749,10 +750,10 @@ typedef struct sSirSmeStartBssRsp tSirBssType bssType;//Add new type for WDS mode tANI_U16 beaconInterval;//Beacon Interval for both type tANI_U32 staId; /* Station ID for Self */ - tSirBssDescription bssDescription;//Peer BSS description #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH tSirSmeHTProfile HTProfile; #endif + tSirBssDescription bssDescription;//Peer BSS description } tSirSmeStartBssRsp, *tpSirSmeStartBssRsp; @@ -1136,10 +1137,11 @@ typedef struct sSirSmeJoinRsp bool tdls_chan_swit_prohibited; #endif - tANI_U8 frames[ 1 ]; #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH tSirSmeHTProfile HTProfile; #endif + + tANI_U8 frames[ 1 ]; } tSirSmeJoinRsp, *tpSirSmeJoinRsp; /// Definition for Authentication indication from peer @@ -5792,7 +5794,8 @@ typedef struct #define RTT_INVALID 0x00 #define RTT_TIMING_MEAS_CAPABILITY 0x01 -#define RTT_FINE_TIMING_MEAS_CAPABILITY 0x02 +#define RTT_FINE_TIME_MEAS_INITIATOR_CAPABILITY 0x02 +#define RTT_FINE_TIME_MEAS_RESPONDER_CAPABILITY 0x03 /* number of neighbor reports that we can handle in Neighbor Report Response */ #define MAX_SUPPORTED_NEIGHBOR_RPT 15 diff --git a/CORE/MAC/src/cfg/cfgUtil/dot11f.frms b/CORE/MAC/src/cfg/cfgUtil/dot11f.frms index 97740a94f53a..6e021c48b270 100644 --- a/CORE/MAC/src/cfg/cfgUtil/dot11f.frms +++ b/CORE/MAC/src/cfg/cfgUtil/dot11f.frms @@ -3368,6 +3368,7 @@ FRAME ProbeRequest // 7.2.3.8 OPTIE WFATPC; OPTIE P2PProbeReq; OPTIE VHTCaps; + OPTIE ExtCap; } // End frame ProbeRequest. FRAME ProbeResponse // 7.2.3.9 diff --git a/CORE/MAC/src/include/dot11f.h b/CORE/MAC/src/include/dot11f.h index b522dd05e5de..0f9e2a3e057d 100644 --- a/CORE/MAC/src/include/dot11f.h +++ b/CORE/MAC/src/include/dot11f.h @@ -37,7 +37,7 @@ * * * This file was automatically generated by 'framesc' - * Thu Mar 19 17:16:31 2015 from the following file(s): + * Thu Apr 30 13:39:44 2015 from the following file(s): * * dot11f.frms * @@ -6795,6 +6795,7 @@ typedef struct sDot11fProbeRequest{ tDot11fIEWFATPC WFATPC; tDot11fIEP2PProbeReq P2PProbeReq; tDot11fIEVHTCaps VHTCaps; + tDot11fIEExtCap ExtCap; } tDot11fProbeRequest; #define DOT11F_PROBEREQUEST ( 36 ) diff --git a/CORE/MAC/src/include/parserApi.h b/CORE/MAC/src/include/parserApi.h index ffc00b1696eb..03fa7c5fe676 100644 --- a/CORE/MAC/src/include/parserApi.h +++ b/CORE/MAC/src/include/parserApi.h @@ -398,8 +398,8 @@ struct s_ext_cap { uint8_t NwChanControl: 1; uint8_t WhiteSpaceMap: 1; uint8_t ChanAvailQuery: 1; - uint8_t fineTimingMeas: 1; - uint8_t reserved7: 1; + uint8_t fine_time_meas_responder: 1; + uint8_t fine_time_meas_initiator: 1; }; tANI_U8 diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h index 9607a7ce3e22..f235497ec332 100644 --- a/CORE/MAC/src/include/sirParams.h +++ b/CORE/MAC/src/include/sirParams.h @@ -711,6 +711,8 @@ typedef struct sSirMbMsgP2p #define SIR_HAL_START_STOP_PACKET_STATS (SIR_HAL_ITC_MSG_TYPES_BEGIN + 328) #define SIR_HAL_EXTSCAN_STATUS_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 329) +#define SIR_HAL_TSF_GPIO_PIN_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 330) + #define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF) // CFG message types diff --git a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c index 1825e7adf287..767a25dc2040 100644 --- a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c @@ -1384,13 +1384,13 @@ if (limPopulateMatchingRateSet(pMac, pStaDs->timingMeasCap |= (p_ext_cap->timingMeas)? RTT_TIMING_MEAS_CAPABILITY: RTT_INVALID; - pStaDs->timingMeasCap |= (p_ext_cap->fineTimingMeas)? - RTT_FINE_TIMING_MEAS_CAPABILITY: + pStaDs->timingMeasCap |= (p_ext_cap->fine_time_meas_initiator)? + RTT_FINE_TIME_MEAS_INITIATOR_CAPABILITY: RTT_INVALID; PELOG1(limLog(pMac, LOG1, - FL("ExtCap present, timingMeas: %d fineTimingMeas: %d"), + FL("ExtCap present, timingMeas: %d ftm_initiator: %d"), p_ext_cap->timingMeas, - p_ext_cap->fineTimingMeas);) + p_ext_cap->fine_time_meas_initiator);) } else { diff --git a/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c index a98912ee1e29..7237f453f4a7 100644 --- a/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c @@ -935,13 +935,13 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub pStaDs->timingMeasCap |= (p_ext_cap->timingMeas)? RTT_TIMING_MEAS_CAPABILITY: RTT_INVALID; - pStaDs->timingMeasCap |= (p_ext_cap->fineTimingMeas)? - RTT_FINE_TIMING_MEAS_CAPABILITY: + pStaDs->timingMeasCap |= (p_ext_cap->fine_time_meas_initiator)? + RTT_FINE_TIME_MEAS_INITIATOR_CAPABILITY: RTT_INVALID; PELOG1(limLog(pMac, LOG1, - FL("ExtCap present, timingMeas: %d fineTimingMeas: %d"), + FL("ExtCap present, timingMeas: %d ftm_initiator: %d"), p_ext_cap->timingMeas, - p_ext_cap->fineTimingMeas);) + p_ext_cap->fine_time_meas_initiator);) #ifdef FEATURE_WLAN_TDLS psessionEntry->tdls_prohibited = p_ext_cap->TDLSProhibited; diff --git a/CORE/MAC/src/pe/lim/limScanResultUtils.c b/CORE/MAC/src/pe/lim/limScanResultUtils.c index e622ffc7f00d..8a73b03b4abc 100644 --- a/CORE/MAC/src/pe/lim/limScanResultUtils.c +++ b/CORE/MAC/src/pe/lim/limScanResultUtils.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2015 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -177,11 +177,17 @@ limCollectBssDescription(tpAniSirGlobal pMac, /** * Length of BSS desription is without length of * length itself and length of pointer - * that holds the next BSS description + * that holds ieFields + * + * tSirBssDescription + * +--------+---------------------------------+---------------+ + * | length | other fields | pointer to IEs| + * +--------+---------------------------------+---------------+ + * ^ + * ieFields */ - pBssDescr->length = (tANI_U16)( - sizeof(tSirBssDescription) - sizeof(tANI_U16) - - sizeof(tANI_U32) + ieLen); + pBssDescr->length = (tANI_U16)(offsetof(tSirBssDescription, ieFields[0]) - + sizeof(pBssDescr->length) + ieLen); // Copy BSS Id vos_mem_copy((tANI_U8 *) &pBssDescr->bssId, @@ -250,11 +256,13 @@ limCollectBssDescription(tpAniSirGlobal pMac, //SINR no longer reported by HW pBssDescr->sinr = 0; - limLog(pMac, LOG3, - FL(MAC_ADDRESS_STR " rssi: normalized = %d, absolute = %d"), - MAC_ADDR_ARRAY(pHdr->bssId), pBssDescr->rssi, pBssDescr->rssi_raw); - pBssDescr->nReceivedTime = (tANI_TIMESTAMP)palGetTickCount(pMac->hHdd); + pBssDescr->tsf_delta = WDA_GET_RX_TSF_DELTA(pRxPacketInfo); + + limLog(pMac, LOG1, + FL("BSSID: "MAC_ADDRESS_STR " rssi: normalized = %d, absolute = %d tsf_delta = %u"), + MAC_ADDR_ARRAY(pHdr->bssId), pBssDescr->rssi, pBssDescr->rssi_raw, + pBssDescr->tsf_delta); #if defined WLAN_FEATURE_VOWIFI if( fScanning ) diff --git a/CORE/MAC/src/pe/lim/limSendManagementFrames.c b/CORE/MAC/src/pe/lim/limSendManagementFrames.c index 32dfe14e2baa..be02b54c7923 100644 --- a/CORE/MAC/src/pe/lim/limSendManagementFrames.c +++ b/CORE/MAC/src/pe/lim/limSendManagementFrames.c @@ -393,6 +393,7 @@ limSendProbeReqMgmtFrame(tpAniSirGlobal pMac, tANI_U8 *p2pIe = NULL; tANI_U8 txFlag = 0; tANI_U8 smeSessionId = 0; + bool isVHTEnabled = false; @@ -501,19 +502,19 @@ limSendProbeReqMgmtFrame(tpAniSirGlobal pMac, #ifdef WLAN_FEATURE_11AC if (psessionEntry != NULL ) { psessionEntry->vhtCapability = IS_DOT11_MODE_VHT(dot11mode); - //Include HT Capability IE - if (psessionEntry->vhtCapability) - { + /* Include VHT Capability IE */ + if (psessionEntry->vhtCapability) { PopulateDot11fVHTCaps( pMac, psessionEntry, &pr.VHTCaps ); + isVHTEnabled = true; } - } else { - if (IS_DOT11_MODE_VHT(dot11mode)) - { + } else { + if (IS_DOT11_MODE_VHT(dot11mode)) { PopulateDot11fVHTCaps( pMac, psessionEntry, &pr.VHTCaps ); + isVHTEnabled = true; } } #endif - + PopulateDot11fExtCap(pMac, isVHTEnabled, &pr.ExtCap, psessionEntry); // That's it-- now we pack it. First, how much space are we going to // need? diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c index eff2c6d57b5e..60e4400bc083 100644 --- a/CORE/MAC/src/pe/lim/limUtils.c +++ b/CORE/MAC/src/pe/lim/limUtils.c @@ -7948,14 +7948,14 @@ void lim_sap_offload_add_sta(tpAniSirGlobal pmac, tpSirMsgQ lim_msgq) sta_ds->timingMeasCap |= (p_ext_cap->timingMeas)? RTT_TIMING_MEAS_CAPABILITY : RTT_INVALID; - sta_ds->timingMeasCap |= (p_ext_cap->fineTimingMeas)? - RTT_FINE_TIMING_MEAS_CAPABILITY : + sta_ds->timingMeasCap |= (p_ext_cap->fine_time_meas_initiator)? + RTT_FINE_TIME_MEAS_INITIATOR_CAPABILITY : RTT_INVALID; PELOG1(limLog(pMac, LOG1, - FL("ExtCap present, timingMeas: %d fineTimingMeas: %d"), + FL("ExtCap present, timingMeas: %d ftm_initiator: %d"), p_ext_cap->timingMeas, - p_ext_cap->fineTimingMeas);) + p_ext_cap->fine_time_meas_initiator);) } else { sta_ds->timingMeasCap = 0; PELOG1(limLog(pmac, LOG1, FL("ExtCap not present"));) diff --git a/CORE/SERVICES/COMMON/wmi_unified_api.h b/CORE/SERVICES/COMMON/wmi_unified_api.h index 7cbcf986d974..db1476cdda46 100644 --- a/CORE/SERVICES/COMMON/wmi_unified_api.h +++ b/CORE/SERVICES/COMMON/wmi_unified_api.h @@ -145,4 +145,6 @@ wmi_set_d0wow_flag(wmi_unified_t wmi_handle, A_BOOL flag); WMA Callback to get the Tx complete for WOW_ENABLE */ typedef void (*wma_wow_tx_complete_cbk)(void *scn_handle); + +uint16_t wmi_get_max_msg_len(wmi_unified_t wmi_handle); #endif /* _WMI_UNIFIED_API_H_ */ diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index cf34c65d20d2..69b5176707ad 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -22356,6 +22356,47 @@ VOS_STATUS wma_notify_modem_power_state(void *wda_handle, return VOS_STATUS_SUCCESS; } +#ifdef WLAN_FEATURE_TSF +/** + * wma_set_tsf_gpio_pin() - send wmi cmd to configure gpio pin + * + * @handle: wma handler + * @pin: GPIO pin id + * + * Return: VOS_STATUS + */ +static VOS_STATUS wma_set_tsf_gpio_pin(WMA_HANDLE handle, + uint32_t pin) +{ + tp_wma_handle wma = (tp_wma_handle)handle; + int32_t ret; + + if (!wma || !wma->wmi_handle) { + WMA_LOGE("%s: WMA is closed, can not set gpio", + __func__); + return VOS_STATUS_E_INVAL; + } + + WMA_LOGD("%s: set tsf gpio pin: %d", + __func__, pin); + + ret = wmi_unified_pdev_set_param(wma->wmi_handle, + WMI_PDEV_PARAM_WNTS_CONFIG, pin); + if (ret) { + WMA_LOGE("%s: Failed to set tsf gpio pin (%d)", + __func__, ret); + return VOS_STATUS_E_FAILURE; + } + return VOS_STATUS_SUCCESS; +} +#else +static inline VOS_STATUS wma_set_tsf_gpio_pin(WMA_HANDLE handle, + uint32_t pin) +{ + return VOS_STATUS_E_INVAL; +} +#endif + #ifdef WLAN_FEATURE_STATS_EXT VOS_STATUS wma_stats_ext_req(void *wda_handle, tpStatsExtRequest preq) @@ -22920,17 +22961,18 @@ VOS_STATUS wma_stop_extscan(tp_wma_handle wma, * * Return: number of entries */ -static inline int wma_get_hotlist_entries_per_page(size_t cmd_size, +static inline int wma_get_hotlist_entries_per_page(wmi_unified_t wmi_handle, + size_t cmd_size, size_t per_entry_size) { uint32_t avail_space = 0; int num_entries = 0; + uint16_t max_msg_len = wmi_get_max_msg_len(wmi_handle); /* Calculate number of hotlist entries that can * be passed in wma message request. */ - avail_space = WMA_MAX_EXTSCAN_MSG_SIZE - - (cmd_size - WMI_TLV_HDR_SIZE); + avail_space = max_msg_len - cmd_size; num_entries = avail_space / per_entry_size; return num_entries; } @@ -22973,19 +23015,19 @@ VOS_STATUS wma_get_buf_extscan_hotlist_cmd(tp_wma_handle wma_handle, WMA_LOGE("%s: Invalid number of bssid's", __func__); return VOS_STATUS_E_INVAL; } - num_entries = wma_get_hotlist_entries_per_page(sizeof(*cmd), + num_entries = wma_get_hotlist_entries_per_page(wma_handle->wmi_handle, + cmd_len, sizeof(*dest_hotlist)); /* Split the hot list entry pages and send multiple command - * requests if the buffer reaches the maximum request size + * requests if the buffer reaches the maximum request size */ while (index < numap) { min_entries = VOS_MIN(num_entries, numap); len += min_entries * sizeof(wmi_extscan_hotlist_entry); buf = wmi_buf_alloc(wma_handle->wmi_handle, len); if (!buf) { - WMA_LOGP("%s: failed to allocate memory for start extscan cmd", - __func__); + WMA_LOGP("%s: wmi_buf_alloc failed", __func__); return VOS_STATUS_E_NOMEM; } buf_ptr = (u_int8_t *)wmi_buf_data(buf); @@ -23032,8 +23074,7 @@ VOS_STATUS wma_get_buf_extscan_hotlist_cmd(tp_wma_handle wma_handle, WMI_CHAR_ARRAY_TO_MAC_ADDR(src_ap->bssid, &dest_hotlist->bssid); - WMA_LOGD("%s:channel:%d min_rssi %d", - __func__, dest_hotlist->channel, + WMA_LOGD("%s: min_rssi %d", __func__, dest_hotlist->min_rssi); WMA_LOGD("%s: bssid mac_addr31to0: 0x%x, mac_addr47to32: 0x%x", __func__, dest_hotlist->bssid.mac_addr31to0, @@ -23074,8 +23115,8 @@ VOS_STATUS wma_extscan_start_hotlist_monitor(tp_wma_handle wma, vos_status = wma_get_buf_extscan_hotlist_cmd(wma, photlist, &len); if (vos_status != VOS_STATUS_SUCCESS) { - WMA_LOGE("%s: Failed to get buffer" - "for hotlist scan cmd", __func__); + WMA_LOGE("%s: Failed to get buffer for hotlist scan cmd", + __func__); return VOS_STATUS_E_FAILURE; } return VOS_STATUS_SUCCESS; @@ -25447,6 +25488,9 @@ VOS_STATUS wma_mc_process_msg(v_VOID_t *vos_context, vos_msg_t *msg) (struct sir_wifi_start_log *)msg->bodyptr); vos_mem_free(msg->bodyptr); break; + case WDA_TSF_GPIO_PIN: + wma_set_tsf_gpio_pin(wma_handle, msg->bodyval); + break; default: WMA_LOGD("unknow msg type %x", msg->type); /* Do Nothing? MSG Body should be freed at here */ diff --git a/CORE/SERVICES/WMI/wmi_unified.c b/CORE/SERVICES/WMI/wmi_unified.c index 24dc394cc5ec..c30a209f3c6b 100644 --- a/CORE/SERVICES/WMI/wmi_unified.c +++ b/CORE/SERVICES/WMI/wmi_unified.c @@ -51,7 +51,6 @@ #endif #define WMI_MIN_HEAD_ROOM 64 -#define WMI_MAX_LEN_BYTES 2048 #ifdef WMI_INTERFACE_EVENT_LOGGING /* WMI commands */ @@ -118,6 +117,19 @@ static void __wmi_control_rx(struct wmi_unified *wmi_handle, wmi_buf_t evt_buf); int wmi_get_host_credits(wmi_unified_t wmi_handle); /* WMI buffer APIs */ +/** + * wmi_get_max_msg_len() - get maximum WMI message length + * @wmi_handle: WMI handle. + * + * This function returns the maximum WMI message length + * + * Return: maximum WMI message length + */ +uint16_t wmi_get_max_msg_len(wmi_unified_t wmi_handle) +{ + return wmi_handle->max_msg_len - WMI_MIN_HEAD_ROOM; +} + wmi_buf_t wmi_buf_alloc(wmi_unified_t wmi_handle, u_int16_t len) { diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h index 5235b53bcb30..8e8a57cb8479 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -4282,4 +4282,14 @@ eHalStatus sme_update_roam_scan_hi_rssi_scan_params(tHalHandle hal_handle, eHalStatus sme_wifi_start_logger(tHalHandle hal, struct sir_wifi_start_log start_log); +#ifdef WLAN_FEATURE_TSF +eHalStatus sme_set_tsf_gpio(tHalHandle hHal, uint32_t pinvalue); +#else +static inline eHalStatus +sme_set_tsf_gpio(tHalHandle hHal, uint32_t pinvalue) +{ + return eHAL_STATUS_FAILURE; +} +#endif + #endif //#if !defined( __SME_API_H ) diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c index f41b7a138445..c7482c032b54 100644 --- a/CORE/SME/src/csr/csrUtil.c +++ b/CORE/SME/src/csr/csrUtil.c @@ -4853,7 +4853,7 @@ tANI_BOOLEAN csrMatchBSS( tHalHandle hHal, tSirBssDescription *pBssDesc, tCsrSca tDot11fBeaconIEs **ppIes) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - tANI_BOOLEAN fRC = eANI_BOOLEAN_FALSE, fCheck; + tANI_BOOLEAN fRC = eANI_BOOLEAN_FALSE, fCheck, blacklist_check; tANI_U32 i; tDot11fBeaconIEs *pIes = NULL; tANI_U8 *pb; @@ -4881,17 +4881,17 @@ tANI_BOOLEAN csrMatchBSS( tHalHandle hHal, tSirBssDescription *pBssDesc, tCsrSca if(!fCheck) break; /* Check for Blacklist BSSID's and avoid connections */ - fCheck = false; + blacklist_check = false; blacklist_bssid = (tCsrBssid *)&roam_params->bssid_avoid_list; for (i = 0; i < roam_params->num_bssid_avoid_list; i++) { if (csrIsMacAddressEqual(pMac, blacklist_bssid, (tCsrBssid *)pBssDesc->bssId)) { - fCheck = true; + blacklist_check = true; break; } blacklist_bssid++; } - if(fCheck) { + if(blacklist_check) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "Do not Attempt connection to blacklist bssid"); break; diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index fd4a973f4607..6e1dcbf4f8bd 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -16283,6 +16283,41 @@ eHalStatus sme_set_tsfcb return status; } +#ifdef WLAN_FEATURE_TSF +/* + * sme_set_tsf_gpio() - set gpio pin that be toggled when capture tef + * + * @hHal: Handler return by macOpen + * @pinvalue: gpio pin id + * + * Return: eHalStatus + */ +eHalStatus sme_set_tsf_gpio(tHalHandle hHal, uint32_t pinvalue) +{ + eHalStatus status; + VOS_STATUS vos_status; + vos_msg_t vos_msg = {0}; + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + + status = sme_AcquireGlobalLock(&pMac->sme); + if (eHAL_STATUS_SUCCESS == status) { + vos_msg.type = WDA_TSF_GPIO_PIN; + vos_msg.reserved = 0; + vos_msg.bodyval = pinvalue; + + vos_status = vos_mq_post_message(VOS_MQ_ID_WDA, &vos_msg); + if (!VOS_IS_STATUS_SUCCESS(vos_status)) { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: not able to post WDA_TSF_GPIO_PIN", + __func__); + status = eHAL_STATUS_FAILURE; + } + sme_ReleaseGlobalLock(&pMac->sme); + } + return status; +} +#endif + /* * sme_wifi_start_logger() - This function send the command to WMA * to either start/stop logging diff --git a/CORE/SYS/legacy/src/utils/src/dot11f.c b/CORE/SYS/legacy/src/utils/src/dot11f.c index c5e62baed085..bf5187055656 100644 --- a/CORE/SYS/legacy/src/utils/src/dot11f.c +++ b/CORE/SYS/legacy/src/utils/src/dot11f.c @@ -35,7 +35,7 @@ * * * This file was automatically generated by 'framesc' - * Thu Mar 19 17:16:31 2015 from the following file(s): + * Thu Apr 30 13:39:44 2015 from the following file(s): * * dot11f.frms * @@ -12591,6 +12591,7 @@ tANI_U32 dot11fUnpackPresenceRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nB {offsetof(tDot11fProbeRequest, WFATPC), offsetof(tDot11fIEWFATPC, present), 0, "WFATPC" , 0, 9, 9, SigIeWFATPC, {0, 80, 242, 8, 0}, 5, DOT11F_EID_WFATPC, 0, }, {offsetof(tDot11fProbeRequest, P2PProbeReq), offsetof(tDot11fIEP2PProbeReq, present), 0, "P2PProbeReq" , 0, 6, 43, SigIeP2PProbeReq, {80, 111, 154, 9, 0}, 4, DOT11F_EID_P2PPROBEREQ, 0, }, {offsetof(tDot11fProbeRequest, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, }, + {offsetof(tDot11fProbeRequest, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; tANI_U32 dot11fUnpackProbeRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fProbeRequest *pFrm) @@ -12995,6 +12996,16 @@ tANI_U32 dot11fUnpackProbeRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBEREQUEST), FRFL("txSupDataRate (13): %d\n"), pFrm->VHTCaps.txSupDataRate); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBEREQUEST), FRFL("reserved3 (3): %d\n"), pFrm->VHTCaps.reserved3); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBEREQUEST), FRFL("ExtCap:\n")); + if (!pFrm->ExtCap.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBEREQUEST), FRFL("Not present.\n")); + } + else + { + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBEREQUEST), FRFL("num_bytes: %d.\n"), pFrm->ExtCap.num_bytes); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBEREQUEST), ( tANI_U8* ) pFrm->ExtCap.bytes, pFrm->ExtCap.num_bytes); + } } # endif // DOT11F_DUMP_FRAMES return status; @@ -36401,6 +36412,16 @@ tANI_U32 dot11fPackProbeRequest(tpAniSirGlobal pCtx, tDot11fProbeRequest *pFrm, FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBEREQUEST), FRFL("txSupDataRate (13): %d\n"), pFrm->VHTCaps.txSupDataRate); FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBEREQUEST), FRFL("reserved3 (3): %d\n"), pFrm->VHTCaps.reserved3); } + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBEREQUEST), FRFL("ExtCap:\n")); + if (!pFrm->ExtCap.present) + { + FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBEREQUEST), FRFL("Not present.\n")); + } + else + { + FRAMES_LOG1(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBEREQUEST), FRFL("num_bytes: %d.\n"), pFrm->ExtCap.num_bytes); + FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBEREQUEST), ( tANI_U8* ) pFrm->ExtCap.bytes, pFrm->ExtCap.num_bytes); + } FRAMES_LOG0(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBEREQUEST), FRFL("to:\n")); FRAMES_DUMP(pCtx, FRAMES_SEV_FOR_FRAME(pCtx, DOT11F_PROBEREQUEST), pBuf, nBuf); } diff --git a/CORE/SYS/legacy/src/utils/src/parserApi.c b/CORE/SYS/legacy/src/utils/src/parserApi.c index a352e7273376..e72288496acb 100644 --- a/CORE/SYS/legacy/src/utils/src/parserApi.c +++ b/CORE/SYS/legacy/src/utils/src/parserApi.c @@ -1163,7 +1163,7 @@ PopulateDot11fExtCap(tpAniSirGlobal pMac, if (val) // If set to true then set RTTv3 { - p_ext_cap->fineTimingMeas = 1; + p_ext_cap->fine_time_meas_initiator = 1; } #ifdef QCA_HT_2040_COEX @@ -2573,8 +2573,8 @@ sirConvertAssocReqFrame2Struct(tpAniSirGlobal pMac, p_ext_cap = (struct s_ext_cap *)&pAssocReq->ExtCap.bytes; limLog(pMac, LOG1, - FL("ExtCap is present, timingMeas: %d, fineTimingMeas: %d"), - p_ext_cap->timingMeas, p_ext_cap->fineTimingMeas); + FL("ExtCap is present, timingMeas: %d, ftm_initiator: %d"), + p_ext_cap->timingMeas, p_ext_cap->fine_time_meas_initiator); } vos_mem_free(ar); return eSIR_SUCCESS; @@ -2765,8 +2765,8 @@ sirConvertAssocRespFrame2Struct(tpAniSirGlobal pMac, ar.ExtCap.num_bytes); p_ext_cap = (struct s_ext_cap *)&pAssocRsp->ExtCap.bytes; limLog(pMac, LOG1, - FL("ExtCap is present, timingMeas: %d, fineTimingMeas: %d"), - p_ext_cap->timingMeas, p_ext_cap->fineTimingMeas); + FL("ExtCap is present, timingMeas: %d, ftm_initiator: %d"), + p_ext_cap->timingMeas, p_ext_cap->fine_time_meas_initiator); } if ( ar.QosMapSet.present ) @@ -2964,8 +2964,8 @@ sirConvertReassocReqFrame2Struct(tpAniSirGlobal pMac, vos_mem_copy(&pAssocReq->ExtCap.bytes, &ar.ExtCap.bytes, ar.ExtCap.num_bytes); limLog(pMac, LOG1, - FL("ExtCap is present, timingMeas: %d, fineTimingMeas: %d"), - p_ext_cap->timingMeas, p_ext_cap->fineTimingMeas); + FL("ExtCap is present, timingMeas: %d, ftm_initiator: %d"), + p_ext_cap->timingMeas, p_ext_cap->fine_time_meas_initiator); } return eSIR_SUCCESS; diff --git a/CORE/VOSS/inc/i_vos_packet.h b/CORE/VOSS/inc/i_vos_packet.h index dd6b825ee379..72f93a3e0b94 100644 --- a/CORE/VOSS/inc/i_vos_packet.h +++ b/CORE/VOSS/inc/i_vos_packet.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2015 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -70,6 +70,7 @@ typedef struct u_int8_t sessionId; u_int8_t scan_src; u_int32_t rssi_raw; + u_int32_t tsf_delta; }t_packetmeta, *tp_packetmeta; /* implementation specific vos packet type */ diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h index 72dfb7916d3f..3413158700f3 100644 --- a/CORE/WDA/inc/wlan_qct_wda.h +++ b/CORE/WDA/inc/wlan_qct_wda.h @@ -477,6 +477,9 @@ VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext, #define WDA_GET_RX_PAYLOAD_LEN(pRxMeta) \ (((t_packetmeta *)pRxMeta)->mpdu_data_len) +#define WDA_GET_RX_TSF_DELTA(pRxMeta) \ + (((t_packetmeta *)pRxMeta)->tsf_delta) + #define WDA_GET_RX_MAC_RATE_IDX(pRxMeta) 0 #define WDA_GET_RX_MPDU_DATA(pRxMeta) \ @@ -1035,6 +1038,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ #define WDA_FW_MEM_DUMP_REQ SIR_HAL_FW_MEM_DUMP_REQ +#define WDA_TSF_GPIO_PIN SIR_HAL_TSF_GPIO_PIN_REQ tSirRetStatus wdaPostCtrlMsg(tpAniSirGlobal pMac, tSirMsgQ *pMsg); |
