diff options
| author | Krishna Kumaar Natarajan <kknatara@qca.qualcomm.com> | 2015-02-12 15:37:40 -0800 |
|---|---|---|
| committer | AnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com> | 2015-05-01 21:45:11 +0530 |
| commit | b6a4cfc0f6ea0f141e41fcbfdb36ba84831d2dee (patch) | |
| tree | 0fd4e880134c9b4ae93dc0753fc49052300643f4 | |
| parent | 2a03ce518ca47d85c741c52227e7c9e849ce76d4 (diff) | |
qcacld: Update fine timing measurement capabilities
Currently our driver does not have support to advertise Fine
Timing Measurement initiator/responder capability. As per
802.11mc spec, two bits are used to advertise this in extended
capability IE.
Introduce the second bit for advertising Fine Timing Measurement
initiator capability and add Ext Capability IE in Probe Request frame.
Change-Id: Iec7060079158a38549a6ee5819e6f2bba8ab5abe
CRs-Fixed: 798460
| -rw-r--r-- | CORE/MAC/inc/sirApi.h | 3 | ||||
| -rw-r--r-- | CORE/MAC/src/cfg/cfgUtil/dot11f.frms | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/include/dot11f.h | 3 | ||||
| -rw-r--r-- | CORE/MAC/src/include/parserApi.h | 4 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c | 8 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c | 8 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limSendManagementFrames.c | 15 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limUtils.c | 8 | ||||
| -rw-r--r-- | CORE/SYS/legacy/src/utils/src/dot11f.c | 23 | ||||
| -rw-r--r-- | CORE/SYS/legacy/src/utils/src/parserApi.c | 14 |
10 files changed, 56 insertions, 31 deletions
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index 13f1f3fbb688..2e3e77f4b2b3 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -5792,7 +5792,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/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/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/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; |
