summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrishna Kumaar Natarajan <kknatara@qca.qualcomm.com>2014-12-16 14:42:47 -0800
committerAnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com>2014-12-19 16:19:09 +0530
commit55dce675eedf8026b4aab94579708fd875ca3fe7 (patch)
tree9983bff60ea671d31c4f5611e1e5582fc2b1e591
parent81a2f7cbff16f03feb886f25a3d94e54a61c37f6 (diff)
qcacld: UMAC: Adding VHT Capability info IE in broadcast probe request
Currently, STAUT is not adding VHT capability info while sending broadcast probe request. This change set add VHT capability IE based on dot11mode while sending START_SCAN_CMD to firmware. Change-Id: Ie458b75c0260003cc8c4373bc69e1646f661ce22 CRs-Fixed: 772096
-rw-r--r--CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c40
-rw-r--r--CORE/MAC/src/pe/lim/limUtils.c64
-rw-r--r--CORE/MAC/src/pe/lim/limUtils.h6
3 files changed, 107 insertions, 3 deletions
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index 93b8e3fb2efe..a22bdbb31e1c 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -1122,7 +1122,12 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac,
tANI_U8 *p;
tANI_U8 *ht_cap_ie;
tSirMsgQ msg;
- tANI_U16 i, len, ht_cap_len = 0;
+ tANI_U16 i, len;
+ tANI_U16 ht_cap_len = 0, addn_ie_len = 0;
+#ifdef WLAN_FEATURE_11AC
+ tANI_U8 *vht_cap_ie;
+ tANI_U16 vht_cap_len = 0;
+#endif /* WLAN_FEATURE_11AC */
tSirRetStatus rc = eSIR_SUCCESS;
pMac->lim.fOffloadScanPending = 0;
@@ -1138,7 +1143,21 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac,
FL("Adding HT Caps IE since dot11mode=%d"), pScanReq->dot11mode);
ht_cap_len = 2 + sizeof(tHtCaps); /* 2 bytes for EID and Length */
len += ht_cap_len;
+ addn_ie_len += ht_cap_len;
+ }
+
+#ifdef WLAN_FEATURE_11AC
+ if (IS_DOT11_MODE_VHT(pScanReq->dot11mode)) {
+ limLog(pMac, LOG1,
+ FL("Adding VHT Caps IE since dot11mode=%d"),
+ pScanReq->dot11mode);
+ /* 2 bytes for EID and Length */
+ vht_cap_len = 2 + sizeof(tSirMacVHTCapabilityInfo) +
+ sizeof(tSirVhtMcsInfo);
+ len += vht_cap_len;
+ addn_ie_len += vht_cap_len;
}
+#endif /* WLAN_FEATURE_11AC */
pScanOffloadReq = vos_mem_malloc(len);
if ( NULL == pScanOffloadReq )
@@ -1204,7 +1223,7 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac,
p[i] = pScanReq->channelList.channelNumber[i];
pScanOffloadReq->uIEFieldLen = pScanReq->uIEFieldLen;
- pScanOffloadReq->uIEFieldOffset = len - ht_cap_len -
+ pScanOffloadReq->uIEFieldOffset = len - addn_ie_len -
pScanOffloadReq->uIEFieldLen;
vos_mem_copy(
(tANI_U8 *) pScanOffloadReq + pScanOffloadReq->uIEFieldOffset,
@@ -1220,10 +1239,25 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac,
vos_mem_set(ht_cap_ie, ht_cap_len, 0);
*ht_cap_ie = SIR_MAC_HT_CAPABILITIES_EID;
*(ht_cap_ie + 1) = ht_cap_len - 2;
- lim_set_ht_caps(pMac, NULL, ht_cap_ie, len - ht_cap_len);
+ lim_set_ht_caps(pMac, NULL, ht_cap_ie, ht_cap_len);
pScanOffloadReq->uIEFieldLen += ht_cap_len;
}
+#ifdef WLAN_FEATURE_11AC
+ /* Copy VHT Capability info if dot11mode is VHT Capable */
+ if (IS_DOT11_MODE_VHT(pScanReq->dot11mode)) {
+ /* Populate EID and Length field here */
+ vht_cap_ie = (tANI_U8 *) pScanOffloadReq +
+ pScanOffloadReq->uIEFieldOffset +
+ pScanOffloadReq->uIEFieldLen;
+ vos_mem_set(vht_cap_ie, vht_cap_len, 0);
+ *vht_cap_ie = SIR_MAC_VHT_CAPABILITIES_EID;
+ *(vht_cap_ie + 1) = vht_cap_len - 2;
+ lim_set_vht_caps(pMac, NULL, vht_cap_ie, vht_cap_len);
+ pScanOffloadReq->uIEFieldLen += vht_cap_len;
+ }
+#endif /* WLAN_FEATURE_11AC */
+
rc = wdaPostCtrlMsg(pMac, &msg);
if (rc != eSIR_SUCCESS)
{
diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c
index c6fca3359b17..23b29b257f6d 100644
--- a/CORE/MAC/src/pe/lim/limUtils.c
+++ b/CORE/MAC/src/pe/lim/limUtils.c
@@ -7525,6 +7525,70 @@ void lim_set_ht_caps(tpAniSirGlobal p_mac, tpPESession p_session_entry,
}
}
+#ifdef WLAN_FEATURE_11AC
+void lim_set_vht_caps(tpAniSirGlobal p_mac, tpPESession p_session_entry,
+ tANI_U8 *p_ie_start,tANI_U32 num_bytes)
+{
+ v_U8_t *p_ie=NULL;
+ tDot11fIEVHTCaps dot11_vht_cap;
+
+ PopulateDot11fVHTCaps(p_mac, p_session_entry, &dot11_vht_cap);
+ p_ie = limGetIEPtr(p_mac, p_ie_start, num_bytes, DOT11F_EID_VHTCAPS,
+ ONE_BYTE);
+
+ if(p_ie) {
+ tSirMacVHTCapabilityInfo *vht_cap =
+ (tSirMacVHTCapabilityInfo *) &p_ie[2];
+ tSirVhtMcsInfo *vht_mcs = (tSirVhtMcsInfo *)
+ &p_ie[2 + sizeof(tSirMacVHTCapabilityInfo)];
+ union {
+ tANI_U16 u_value;
+ tSirMacVHTRxSupDataRateInfo vht_rx_supp_rate;
+ tSirMacVHTTxSupDataRateInfo vht_tx_supp_rate;
+ } u_vht_data_rate_info;
+
+
+ vht_cap->maxMPDULen = dot11_vht_cap.maxMPDULen;
+ vht_cap->supportedChannelWidthSet =
+ dot11_vht_cap.supportedChannelWidthSet;
+ vht_cap->ldpcCodingCap = dot11_vht_cap.ldpcCodingCap;
+ vht_cap->shortGI80MHz = dot11_vht_cap.shortGI80MHz;
+ vht_cap->shortGI160and80plus80MHz =
+ dot11_vht_cap.shortGI160and80plus80MHz;
+ vht_cap->txSTBC = dot11_vht_cap.txSTBC;
+ vht_cap->rxSTBC = dot11_vht_cap.rxSTBC;
+ vht_cap->suBeamFormerCap = dot11_vht_cap.suBeamFormerCap;
+ vht_cap->suBeamformeeCap = dot11_vht_cap.suBeamformeeCap;
+ vht_cap->csnofBeamformerAntSup = dot11_vht_cap.csnofBeamformerAntSup;
+ vht_cap->numSoundingDim = dot11_vht_cap.numSoundingDim;
+ vht_cap->muBeamformerCap = dot11_vht_cap.muBeamformerCap;
+ vht_cap->muBeamformeeCap = dot11_vht_cap.muBeamformeeCap;
+ vht_cap->vhtTXOPPS = dot11_vht_cap.vhtTXOPPS;
+ vht_cap->htcVHTCap = dot11_vht_cap.htcVHTCap;
+ vht_cap->maxAMPDULenExp = dot11_vht_cap.maxAMPDULenExp;
+ vht_cap->vhtLinkAdaptCap = dot11_vht_cap.vhtLinkAdaptCap;
+ vht_cap->rxAntPattern = dot11_vht_cap.rxAntPattern;
+ vht_cap->txAntPattern = dot11_vht_cap.txAntPattern;
+ vht_cap->reserved1 = dot11_vht_cap.reserved1;
+
+ /* Populate VHT MCS Information */
+ vht_mcs->rxMcsMap = dot11_vht_cap.rxMCSMap;
+ u_vht_data_rate_info.vht_rx_supp_rate.rxSupDataRate =
+ dot11_vht_cap.rxHighSupDataRate;
+ u_vht_data_rate_info.vht_rx_supp_rate.reserved =
+ dot11_vht_cap.reserved2;
+ vht_mcs->rxHighest = u_vht_data_rate_info.u_value;
+
+ vht_mcs->txMcsMap = dot11_vht_cap.txMCSMap;
+ u_vht_data_rate_info.vht_tx_supp_rate.txSupDataRate =
+ dot11_vht_cap.txSupDataRate;
+ u_vht_data_rate_info.vht_tx_supp_rate.reserved =
+ dot11_vht_cap.reserved3;
+ vht_mcs->txHighest = u_vht_data_rate_info.u_value;
+ }
+}
+#endif /* WLAN_FEATURE_11AC */
+
#ifdef SAP_AUTH_OFFLOAD
static tpDphHashNode
_sap_offload_parse_assoc_req(tpAniSirGlobal pmac,
diff --git a/CORE/MAC/src/pe/lim/limUtils.h b/CORE/MAC/src/pe/lim/limUtils.h
index 696ca6e62af3..ae83c1559e6a 100644
--- a/CORE/MAC/src/pe/lim/limUtils.h
+++ b/CORE/MAC/src/pe/lim/limUtils.h
@@ -587,6 +587,12 @@ void lim_set_ht_caps(tpAniSirGlobal p_mac,
tpPESession p_session_entry,
tANI_U8 *p_ie_start,
tANI_U32 num_bytes);
+#ifdef WLAN_FEATURE_11AC
+void lim_set_vht_caps(tpAniSirGlobal p_mac,
+ tpPESession p_session_entry,
+ tANI_U8 *p_ie_start,
+ tANI_U32 num_bytes);
+#endif /* WLAN_FEATURE_11AC */
#ifdef SAP_AUTH_OFFLOAD
void lim_sap_offload_add_sta(tpAniSirGlobal pmac,