From b677c242af5bb81a1f5e21583d9080c674d5b613 Mon Sep 17 00:00:00 2001 From: Naveen Rawat Date: Wed, 29 Mar 2017 16:34:50 -0700 Subject: [PATCH] qcacld-3.0: Fix mismatch between assoc ie length and ext cap Assoc IE length sent in ROAM START cmd to firmware is cumulative len of all the IEs passed to firmware. Update in Ext Cap was causing this length value to be wrong. Update the Ext Cap IE length correctly when updating Assoc IE length. Change-Id: I3c4acf507d533896993a51c443407ecac290628a CRs-Fixed: 2026407 --- core/mac/src/pe/lim/lim_api.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index 3bea5ba24617..89539dee7570 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -2397,7 +2397,6 @@ QDF_STATUS lim_update_ext_cap_ie(tpAniSirGlobal mac_ctx, uint32_t dot11mode; bool vht_enabled = false; tDot11fIEExtCap default_scan_ext_cap = {0}, driver_ext_cap = {0}; - uint8_t ext_cap_ie_hdr[EXT_CAP_IE_HDR_LEN] = {0x7f, 0x9}; tSirRetStatus status; status = lim_strip_extcap_update_struct(mac_ctx, ie_data, @@ -2407,10 +2406,11 @@ QDF_STATUS lim_update_ext_cap_ie(tpAniSirGlobal mac_ctx, return QDF_STATUS_E_FAILURE; } + /* copy ie prior to ext cap to local buffer */ qdf_mem_copy(local_ie_buf, ie_data, (*local_ie_len)); - qdf_mem_copy(local_ie_buf + (*local_ie_len), - ext_cap_ie_hdr, EXT_CAP_IE_HDR_LEN); - (*local_ie_len) += EXT_CAP_IE_HDR_LEN; + + /* from here ext cap ie starts, set EID */ + local_ie_buf[*local_ie_len] = DOT11F_EID_EXTCAP; wlan_cfg_get_int(mac_ctx, WNI_CFG_DOT11_MODE, &dot11mode); if (IS_DOT11_MODE_VHT(dot11mode)) @@ -2421,6 +2421,8 @@ QDF_STATUS lim_update_ext_cap_ie(tpAniSirGlobal mac_ctx, if (eSIR_SUCCESS != status) { pe_err("Failed %d to create ext cap IE. Use default value instead", status); + local_ie_buf[*local_ie_len + 1] = DOT11F_IE_EXTCAP_MAX_LEN; + (*local_ie_len) += EXT_CAP_IE_HDR_LEN; qdf_mem_copy(local_ie_buf + (*local_ie_len), default_scan_ext_cap.bytes, DOT11F_IE_EXTCAP_MAX_LEN); @@ -2428,7 +2430,8 @@ QDF_STATUS lim_update_ext_cap_ie(tpAniSirGlobal mac_ctx, return QDF_STATUS_SUCCESS; } lim_merge_extcap_struct(&driver_ext_cap, &default_scan_ext_cap, true); - + local_ie_buf[*local_ie_len + 1] = driver_ext_cap.num_bytes; + (*local_ie_len) += EXT_CAP_IE_HDR_LEN; qdf_mem_copy(local_ie_buf + (*local_ie_len), driver_ext_cap.bytes, driver_ext_cap.num_bytes); (*local_ie_len) += driver_ext_cap.num_bytes;