summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrishna Kumaar Natarajan <kknatara@qca.qualcomm.com>2015-02-12 15:37:40 -0800
committerAnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com>2015-05-01 21:45:11 +0530
commitb6a4cfc0f6ea0f141e41fcbfdb36ba84831d2dee (patch)
tree0fd4e880134c9b4ae93dc0753fc49052300643f4
parent2a03ce518ca47d85c741c52227e7c9e849ce76d4 (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.h3
-rw-r--r--CORE/MAC/src/cfg/cfgUtil/dot11f.frms1
-rw-r--r--CORE/MAC/src/include/dot11f.h3
-rw-r--r--CORE/MAC/src/include/parserApi.h4
-rw-r--r--CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c8
-rw-r--r--CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c8
-rw-r--r--CORE/MAC/src/pe/lim/limSendManagementFrames.c15
-rw-r--r--CORE/MAC/src/pe/lim/limUtils.c8
-rw-r--r--CORE/SYS/legacy/src/utils/src/dot11f.c23
-rw-r--r--CORE/SYS/legacy/src/utils/src/parserApi.c14
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;