diff options
| author | Krishna Kumaar Natarajan <kknatara@qca.qualcomm.com> | 2015-06-19 12:47:13 -0700 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2015-06-29 18:43:59 +0530 |
| commit | 36e9b113fd39f99e1bfd8d93d5daf825219d33e6 (patch) | |
| tree | 14e44ae5b75c4dc0d71bc1286134534c168765b4 | |
| parent | 0b30a7789ffd66cfb25544cdd2ee5f4ec98918f7 (diff) | |
qcacld-2.0: Merge extended capabilities from supplicant with host
Merge extended capabilities coming from supplicant as of the scan command
with host capabilities and send it to the firmware via WMI interface. Also
remove extended capabilities IE from the scan request.
Change-Id: I568fb93fc5d5994a094f946df6896e559c2c7614
CRs-Fixed: 859628
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c | 18 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limSendManagementFrames.c | 188 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limUtils.c | 193 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limUtils.h | 12 |
4 files changed, 238 insertions, 173 deletions
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c index d396b721de10..760bbe654a3d 100644 --- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c @@ -1126,12 +1126,28 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac, tANI_U8 *vht_cap_ie; tANI_U16 vht_cap_len = 0; #endif /* WLAN_FEATURE_11AC */ - tSirRetStatus rc = eSIR_SUCCESS; + tSirRetStatus status, rc = eSIR_SUCCESS; + tDot11fIEExtCap extracted_extcap = {0}; + bool extcap_present = true; pMac->lim.fOffloadScanPending = 0; pMac->lim.fOffloadScanP2PSearch = 0; pMac->lim.offload_scan_filter_p2p_result = 0; + status = lim_strip_extcap_update_struct(pMac, + (uint8_t *) pScanReq + pScanReq->uIEFieldOffset, + &pScanReq->uIEFieldLen, &extracted_extcap); + + if (eSIR_SUCCESS != status) { + extcap_present = false; + limLog(pMac, LOG1, FL("Unable to Stripoff ExtCap IE from Scan Req")); + } + + if (extcap_present) { + limLog(pMac, LOG1, FL("Extcap was part of SCAN IE - Updating FW")); + lim_send_ext_cap_ie(pMac, pScanReq->sessionId, &extracted_extcap, true); + } + /* The tSirScanOffloadReq will reserve the space for first channel, so allocate the memory for (numChannels - 1) and uIEFieldLen */ len = sizeof(tSirScanOffloadReq) + (pScanReq->channelList.numChannels - 1) + diff --git a/CORE/MAC/src/pe/lim/limSendManagementFrames.c b/CORE/MAC/src/pe/lim/limSendManagementFrames.c index e3097663a461..7c89e3026d8e 100644 --- a/CORE/MAC/src/pe/lim/limSendManagementFrames.c +++ b/CORE/MAC/src/pe/lim/limSendManagementFrames.c @@ -69,150 +69,6 @@ //////////////////////////////////////////////////////////////////////// - - -tSirRetStatus limStripOffExtCapIE(tpAniSirGlobal pMac, - tANI_U8 *addIE, - tANI_U16 *addnIELen, - tANI_U8 *pExtractedExtCapIEBuf ) -{ - tANI_U8* tempbuf = NULL; - tANI_U16 tempLen = 0; - int left = *addnIELen; - tANI_U8 *ptr = addIE; - tANI_U8 elem_id, elem_len; - - if (NULL == addIE) - { - PELOGE(limLog(pMac, LOG1, FL("NULL addIE pointer"));) - return eSIR_IGNORE_IE ; - } - - tempbuf = vos_mem_malloc(left); - if ( NULL == tempbuf ) - { - PELOGE(limLog(pMac, LOGE, - FL("Unable to allocate memory to store addn IE"));) - return eSIR_MEM_ALLOC_FAILED; - } - - while(left >= 2) - { - elem_id = ptr[0]; - elem_len = ptr[1]; - left -= 2; - if (elem_len > left) - { - limLog( pMac, LOGE, - FL("Invalid IEs eid = %d elem_len=%d left=%d"), - elem_id,elem_len,left); - vos_mem_free(tempbuf); - return eSIR_FAILURE; - } - if ( !(DOT11F_EID_EXTCAP == elem_id) ) - { - vos_mem_copy (tempbuf + tempLen, &ptr[0], elem_len + 2); - tempLen += (elem_len + 2); - } - else - { /*Est Cap present size is 8 + 2 byte at present*/ - if ( NULL != pExtractedExtCapIEBuf ) - { - vos_mem_set(pExtractedExtCapIEBuf, - DOT11F_IE_EXTCAP_MAX_LEN + 2, 0); - if (elem_len <= DOT11F_IE_EXTCAP_MAX_LEN ) - { - vos_mem_copy (pExtractedExtCapIEBuf, &ptr[0], - elem_len + 2); - } - } - } - left -= elem_len; - ptr += (elem_len + 2); - } - vos_mem_copy (addIE, tempbuf, tempLen); - *addnIELen = tempLen; - vos_mem_free(tempbuf); - return eSIR_SUCCESS; -} - -void limUpdateExtCapIEtoStruct(tpAniSirGlobal pMac, - tANI_U8 *pBuf, - tDot11fIEExtCap *pDst) -{ - tANI_U8 pOut[DOT11F_IE_EXTCAP_MAX_LEN]; - - if ( NULL == pBuf ) - { - limLog( pMac, LOGE, - FL("Invalid Buffer Address")); - return; - } - if(NULL == pDst) - { - PELOGE(limLog(pMac, LOGE, - FL("NULL pDst pointer"));) - return ; - } - - if ( DOT11F_EID_EXTCAP != pBuf[0] || - pBuf[1] > DOT11F_IE_EXTCAP_MAX_LEN ) - { - limLog( pMac, LOG1, - FL("Invalid IEs eid = %d elem_len=%d "), - pBuf[0],pBuf[1]); - return; - } - vos_mem_set(( tANI_U8* )&pOut[0], DOT11F_IE_EXTCAP_MAX_LEN, 0); - vos_mem_copy(&pOut[0], &pBuf[2], DOT11F_IE_EXTCAP_MAX_LEN); - - if ( DOT11F_PARSE_SUCCESS != dot11fUnpackIeExtCap( pMac, - &pOut[0], DOT11F_IE_EXTCAP_MAX_LEN, pDst) ) - { - limLog( pMac, LOGE, - FL("dot11fUnpackIeExtCap Parse Error ")); - } -} - -tSirRetStatus limStripOffExtCapIEAndUpdateStruct(tpAniSirGlobal pMac, - tANI_U8* addIE, - tANI_U16 *addnIELen, - tDot11fIEExtCap * pDst ) -{ - tANI_U8 pExtractedExtCapIEBuf[DOT11F_IE_EXTCAP_MAX_LEN + 2]; - tSirRetStatus nSirStatus; - - vos_mem_set(( tANI_U8* )&pExtractedExtCapIEBuf[0], - DOT11F_IE_EXTCAP_MAX_LEN + 2, 0); - nSirStatus = limStripOffExtCapIE(pMac, addIE, addnIELen, - pExtractedExtCapIEBuf); - if ( eSIR_SUCCESS != nSirStatus ) - { - limLog( pMac, LOG1, FL("Failed to strip off in" - "limStripOffExtCapIE status = (%d)."), - nSirStatus ); - return nSirStatus; - } - /* update the extracted ExtCap to struct*/ - limUpdateExtCapIEtoStruct(pMac, pExtractedExtCapIEBuf, pDst); - return nSirStatus; -} - -void limMergeExtCapIEStruct(tDot11fIEExtCap *pDst, - tDot11fIEExtCap *pSrc) -{ - tANI_U8 *tempDst = (tANI_U8 *)pDst->bytes; - tANI_U8 *tempSrc = (tANI_U8 *)pSrc->bytes; - tANI_U8 structlen = member_size(tDot11fIEExtCap, bytes); - - while(tempDst && tempSrc && structlen--) - { - *tempDst |= *tempSrc; - tempDst++; - tempSrc++; - } -} - /** * * \brief This function is called to add the sequence number to the @@ -384,7 +240,7 @@ limSendProbeReqMgmtFrame(tpAniSirGlobal pMac, { tDot11fProbeRequest pr; tANI_U32 nStatus, nBytes, nPayload; - tSirRetStatus nSirStatus; + tSirRetStatus nSirStatus, extcap_status; tANI_U8 *pFrame; void *pPacket; eHalStatus halstatus; @@ -394,6 +250,8 @@ limSendProbeReqMgmtFrame(tpAniSirGlobal pMac, tANI_U8 txFlag = 0; tANI_U8 smeSessionId = 0; bool isVHTEnabled = false; + uint16_t addn_ielen = nAdditionalIELen; + @@ -430,9 +288,8 @@ limSendProbeReqMgmtFrame(tpAniSirGlobal pMac, // & delegating to assorted helpers: PopulateDot11fSSID( pMac, pSsid, &pr.SSID ); - if( nAdditionalIELen && pAdditionalIE ) - { - p2pIe = limGetP2pIEPtr(pMac, pAdditionalIE, nAdditionalIELen); + if(addn_ielen && pAdditionalIE) { + p2pIe = limGetP2pIEPtr(pMac, pAdditionalIE, addn_ielen); } /* Don't include 11b rate only when device is doing P2P Search */ if( ( WNI_CFG_DOT11_MODE_11B != dot11mode ) && @@ -538,7 +395,17 @@ limSendProbeReqMgmtFrame(tpAniSirGlobal pMac, "0x%08x)."), nStatus ); } - nBytes = nPayload + sizeof( tSirMacMgmtHdr ) + nAdditionalIELen; + /* Strip extended capability IE (if present). FW will add that IE */ + if (addn_ielen) { + extcap_status = lim_strip_extcap_ie(pMac, pAdditionalIE, &addn_ielen, + NULL); + if (eSIR_SUCCESS != extcap_status) + limLog(pMac, LOGE, + FL("Error:(%d) stripping extcap IE"), extcap_status); + + } + + nBytes = nPayload + sizeof( tSirMacMgmtHdr ) + addn_ielen; // Ok-- try to allocate some memory: halstatus = palPktAlloc( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT, @@ -584,12 +451,11 @@ limSendProbeReqMgmtFrame(tpAniSirGlobal pMac, "robe Request (0x%08x)."), nStatus ); } - // Append any AddIE if present. - if( nAdditionalIELen ) - { - vos_mem_copy( pFrame+sizeof(tSirMacMgmtHdr)+nPayload, - pAdditionalIE, nAdditionalIELen ); - nPayload += nAdditionalIELen; + /* Append any AddIE if present. */ + if(addn_ielen) { + vos_mem_copy(pFrame + sizeof(tSirMacMgmtHdr)+nPayload, + pAdditionalIE, addn_ielen); + nPayload += addn_ielen; } /* If this probe request is sent during P2P Search State, then we need @@ -915,7 +781,7 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, return; } - nSirStatus = limStripOffExtCapIEAndUpdateStruct(pMac, + nSirStatus = lim_strip_extcap_update_struct(pMac, addIE, &totalAddnIeLen, &extractedExtCap ); @@ -988,7 +854,7 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, /*merge ExtCap IE*/ if (extractedExtCapFlag) { - limMergeExtCapIEStruct(&pFrm->ExtCap, &extractedExtCap); + lim_merge_extcap_struct(&pFrm->ExtCap, &extractedExtCap); } // That done, pack the Probe Response: nStatus = dot11fPackProbeResponse( pMac, pFrm, pFrame + sizeof(tSirMacMgmtHdr), @@ -1529,7 +1395,7 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac, sizeof( tDot11fIEExtCap ), 0); addStripoffIELen = addnIELen; - nSirStatus = limStripOffExtCapIEAndUpdateStruct(pMac, + nSirStatus = lim_strip_extcap_update_struct(pMac, &addIE[0], &addStripoffIELen, &extractedExtCap ); @@ -1590,7 +1456,7 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac, /* merge the ExtCap struct*/ if (extractedExtCapFlag) { - limMergeExtCapIEStruct(&(frm.ExtCap), &extractedExtCap); + lim_merge_extcap_struct(&(frm.ExtCap), &extractedExtCap); } nStatus = dot11fPackAssocResponse( pMac, &frm, pFrame + sizeof( tSirMacMgmtHdr ), @@ -2164,7 +2030,7 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac, vos_mem_set( ( tANI_U8* )pFrm, sizeof( tDot11fAssocRequest ), 0 ); vos_mem_set(( tANI_U8* )&extractedExtCap, sizeof( tDot11fIEExtCap ), 0); - nSirStatus = limStripOffExtCapIEAndUpdateStruct(pMac, pAddIE, + nSirStatus = lim_strip_extcap_update_struct(pMac, pAddIE, &nAddIELen, &extractedExtCap ); if(eSIR_SUCCESS != nSirStatus ) @@ -2430,7 +2296,7 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac, /* merge the ExtCap struct*/ if (extractedExtCapFlag) { - limMergeExtCapIEStruct(&pFrm->ExtCap, &extractedExtCap); + lim_merge_extcap_struct(&pFrm->ExtCap, &extractedExtCap); } // That done, pack the Assoc Request: diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c index a9dd4b52423f..e4778b202145 100644 --- a/CORE/MAC/src/pe/lim/limUtils.c +++ b/CORE/MAC/src/pe/lim/limUtils.c @@ -6873,7 +6873,8 @@ void limProcessAddStaSelfRsp(tpAniSirGlobal pMac,tpSirMsgQ limMsgQ) (WMI_VDEV_TYPE_AP == pAddStaSelfParams->type && WMI_UNIFIED_VDEV_SUBTYPE_P2P_DEVICE == pAddStaSelfParams->subType))) { limLog(pMac, LOG1, FL("Add sta success - send ext cap IE")); - status = lim_send_ext_cap_ie(pMac, pAddStaSelfParams->sessionId); + status = lim_send_ext_cap_ie(pMac, pAddStaSelfParams->sessionId, NULL, + false); if (eHAL_STATUS_SUCCESS != status) limLog(pMac, LOGE, FL("Unable to send ExtCap to FW")); } @@ -8137,6 +8138,8 @@ void lim_check_and_reset_protection_params(tpAniSirGlobal mac_ctx) * lim_send_ext_cap_ie() - send ext cap IE to FW * @mac_ctx: global MAC context * @session_entry: PE session + * @extra_extcap: extracted ext cap + * @merge: merge extra ext cap * * This function is invoked after VDEV is created to update firmware * about the extended capabilities that the corresponding VDEV is capable @@ -8146,10 +8149,11 @@ void lim_check_and_reset_protection_params(tpAniSirGlobal mac_ctx) * Return: eHalStatus */ eHalStatus lim_send_ext_cap_ie(tpAniSirGlobal mac_ctx, - uint32_t session_id) + uint32_t session_id, + tDot11fIEExtCap *extra_extcap, bool merge) { tDot11fIEExtCap ext_cap_data = {0}; - uint32_t dot11mode; + uint32_t dot11mode, num_bytes; bool vht_enabled = false; struct vdev_ie_info *vdev_ie; vos_msg_t msg = {0}; @@ -8166,10 +8170,16 @@ eHalStatus lim_send_ext_cap_ie(tpAniSirGlobal mac_ctx, limLog(mac_ctx, LOGE, FL("Failed to populate ext cap IE")); return eHAL_STATUS_FAILURE; } + num_bytes = ext_cap_data.num_bytes; + + if (merge && NULL != extra_extcap && extra_extcap->num_bytes > 0) { + if (extra_extcap->num_bytes > ext_cap_data.num_bytes) + num_bytes = extra_extcap->num_bytes; + lim_merge_extcap_struct(&ext_cap_data, extra_extcap); + } /* Allocate memory for the WMI request, and copy the parameter */ - vdev_ie = vos_mem_malloc(sizeof(*vdev_ie) + - ext_cap_data.num_bytes); + vdev_ie = vos_mem_malloc(sizeof(*vdev_ie) + num_bytes); if (!vdev_ie) { limLog(mac_ctx, LOGE, FL("Failed to allocate memory")); return eHAL_STATUS_FAILED_ALLOC; @@ -8177,17 +8187,16 @@ eHalStatus lim_send_ext_cap_ie(tpAniSirGlobal mac_ctx, vdev_ie->vdev_id = session_id; vdev_ie->ie_id = DOT11F_EID_EXTCAP; - vdev_ie->length = ext_cap_data.num_bytes; + vdev_ie->length = num_bytes; limLog(mac_ctx, LOG1, FL("vdev %d ieid %d len %d"), session_id, - DOT11F_EID_EXTCAP, ext_cap_data.num_bytes); + DOT11F_EID_EXTCAP, num_bytes); temp = ext_cap_data.bytes; - for (i=0; i < ext_cap_data.num_bytes; i++, temp++) + for (i=0; i < num_bytes; i++, temp++) limLog(mac_ctx, LOG1, FL("%d byte is %02x"), i+1, *temp); vdev_ie->data = (uint8_t *)vdev_ie + sizeof(*vdev_ie); - vos_mem_copy(vdev_ie->data, ext_cap_data.bytes, - ext_cap_data.num_bytes); + vos_mem_copy(vdev_ie->data, ext_cap_data.bytes, num_bytes); msg.type = WDA_SET_IE_INFO; msg.bodyptr = vdev_ie; @@ -8203,3 +8212,167 @@ eHalStatus lim_send_ext_cap_ie(tpAniSirGlobal mac_ctx, return eHAL_STATUS_SUCCESS; } + +/** + * lim_strip_extcap_ie() - strip extended capability IE from IE buffer + * @mac_ctx: global MAC context + * @addn_ie: Additional IE buffer + * @addn_ielen: Length of additional IE + * @extracted_ie: if not NULL, copy the stripped IE to this buffer + * + * This utility function is used to strip of the extended capability IE present + * in additional IE buffer. + * + * Return: tSirRetStatus + */ +tSirRetStatus lim_strip_extcap_ie(tpAniSirGlobal mac_ctx, + uint8_t *addn_ie, uint16_t *addn_ielen, uint8_t *extracted_ie) +{ + uint8_t* tempbuf = NULL; + uint16_t templen = 0; + int left = *addn_ielen; + uint8_t *ptr = addn_ie; + uint8_t elem_id, elem_len; + + if (NULL == addn_ie) { + limLog(mac_ctx, LOG1, FL("NULL addn_ie pointer")); + return eSIR_IGNORE_IE ; + } + + tempbuf = vos_mem_malloc(left); + if (NULL == tempbuf) { + limLog(mac_ctx, LOGE, FL("Unable to allocate memory")); + return eSIR_MEM_ALLOC_FAILED; + } + + while(left >= 2) { + elem_id = ptr[0]; + elem_len = ptr[1]; + left -= 2; + if (elem_len > left) { + limLog( mac_ctx, LOGE, + FL("Invalid IEs eid = %d elem_len=%d left=%d"), + elem_id, elem_len, left); + vos_mem_free(tempbuf); + return eSIR_FAILURE; + } + if (!(DOT11F_EID_EXTCAP == elem_id)) { + vos_mem_copy (tempbuf + templen, &ptr[0], elem_len + 2); + templen += (elem_len + 2); + } else { + if (NULL != extracted_ie) { + vos_mem_set(extracted_ie, + DOT11F_IE_EXTCAP_MAX_LEN + 2, 0); + if (elem_len <= DOT11F_IE_EXTCAP_MAX_LEN) + vos_mem_copy(extracted_ie, &ptr[0], + elem_len + 2); + } + } + left -= elem_len; + ptr += (elem_len + 2); + } + vos_mem_copy (addn_ie, tempbuf, templen); + + *addn_ielen = templen; + vos_mem_free(tempbuf); + + return eSIR_SUCCESS; +} + +/** + * lim_update_extcap_struct() - poputlate the dot11f structure + * @mac_ctx: global MAC context + * @buf: extracted IE buffer + * @dst: extended capability IE structure to be updated + * + * This function is used to update the extended capability structure + * with @buf. + * + * Return: None + */ +void lim_update_extcap_struct(tpAniSirGlobal mac_ctx, + uint8_t *buf, tDot11fIEExtCap *dst) +{ + uint8_t out[DOT11F_IE_EXTCAP_MAX_LEN]; + + if (NULL == buf) { + limLog( mac_ctx, LOGE, FL("Invalid Buffer Address")); + return; + } + + if(NULL == dst) { + limLog(mac_ctx, LOGE, FL("NULL dst pointer")); + return ; + } + + if (DOT11F_EID_EXTCAP != buf[0] || buf[1] > DOT11F_IE_EXTCAP_MAX_LEN) { + limLog(mac_ctx, LOG1, FL("Invalid IEs eid = %d elem_len=%d "), + buf[0],buf[1]); + return; + } + + vos_mem_set((uint8_t *)&out[0], DOT11F_IE_EXTCAP_MAX_LEN, 0); + vos_mem_copy(&out[0], &buf[2], DOT11F_IE_EXTCAP_MAX_LEN); + + if (DOT11F_PARSE_SUCCESS != dot11fUnpackIeExtCap(mac_ctx, &out[0], + DOT11F_IE_EXTCAP_MAX_LEN, dst)) + limLog(mac_ctx, LOGE, FL("dot11fUnpackIeExtCap Parse Error ")); +} + +/** + * lim_strip_extcap_update_struct - strip extended capability IE and populate + * the dot11f structure + * @mac_ctx: global MAC context + * @addn_ie: Additional IE buffer + * @addn_ielen: Length of additional IE + * @dst: extended capability IE structure to be updated + * + * This function is used to strip extended capability IE from IE buffer and + * update the passed structure. + * + * Return: tSirRetStatus + */ +tSirRetStatus lim_strip_extcap_update_struct(tpAniSirGlobal mac_ctx, + uint8_t* addn_ie, uint16_t *addn_ielen, tDot11fIEExtCap *dst) +{ + uint8_t extracted_buff[DOT11F_IE_EXTCAP_MAX_LEN + 2]; + tSirRetStatus status; + + vos_mem_set((uint8_t* )&extracted_buff[0], DOT11F_IE_EXTCAP_MAX_LEN + 2, + 0); + status = lim_strip_extcap_ie(mac_ctx, addn_ie, addn_ielen, + extracted_buff); + if (eSIR_SUCCESS != status) { + limLog(mac_ctx, LOG1, + FL("Failed to strip extcap IE status = (%d)."), status); + return status; + } + + /* update the extracted ExtCap to struct*/ + lim_update_extcap_struct(mac_ctx, extracted_buff, dst); + return status; +} + +/** + * lim_merge_extcap_struct() - merge extended capabilities info + * @dst: destination extended capabilities + * @src: source extended capabilities + * + * This function is used to take @src info and merge it with @dst + * extended capabilities info. + * + * Return: None + */ +void lim_merge_extcap_struct(tDot11fIEExtCap *dst, + tDot11fIEExtCap *src) +{ + uint8_t *tempdst = (uint8_t *)dst->bytes; + uint8_t *tempsrc = (uint8_t *)src->bytes; + uint8_t structlen = member_size(tDot11fIEExtCap, bytes); + + while(tempdst && tempsrc && structlen--) { + *tempdst |= *tempsrc; + tempdst++; + tempsrc++; + } +} diff --git a/CORE/MAC/src/pe/lim/limUtils.h b/CORE/MAC/src/pe/lim/limUtils.h index 120b5a30675c..f380a237138c 100644 --- a/CORE/MAC/src/pe/lim/limUtils.h +++ b/CORE/MAC/src/pe/lim/limUtils.h @@ -620,5 +620,15 @@ bool lim_validate_received_frame_a1_addr(tpAniSirGlobal mac_ctx, void lim_set_stads_rtt_cap(tpDphHashNode sta_ds, struct s_ext_cap *ext_cap); void lim_check_and_reset_protection_params(tpAniSirGlobal mac_ctx); eHalStatus lim_send_ext_cap_ie(tpAniSirGlobal mac_ctx, - uint32_t session_id); + uint32_t session_id, + tDot11fIEExtCap *extracted_extcap, bool merge); + +tSirRetStatus lim_strip_extcap_ie(tpAniSirGlobal mac_ctx, uint8_t *addn_ie, + uint16_t *addn_ielen, uint8_t *extracted_extcap); +void lim_update_extcap_struct(tpAniSirGlobal mac_ctx, uint8_t *buf, + tDot11fIEExtCap *ext_cap); +tSirRetStatus lim_strip_extcap_update_struct(tpAniSirGlobal mac_ctx, + uint8_t* addn_ie, uint16_t *addn_ielen, tDot11fIEExtCap *dst); +void lim_merge_extcap_struct(tDot11fIEExtCap *dst, tDot11fIEExtCap *src); + #endif /* __LIM_UTILS_H */ |
