diff options
| author | Selvaraj, Sridhar <sselvara@codeaurora.org> | 2017-01-30 15:19:07 +0530 |
|---|---|---|
| committer | qcabuildsw <qcabuildsw@localhost> | 2017-02-23 05:20:51 -0800 |
| commit | 6b59ad870cc64ec08aae9514e00d30d88b2dbe4e (patch) | |
| tree | 1d7ac41f3943cf61d81d279836c981066aa7d0b4 | |
| parent | 2cabe48209b7063fe67475005999209748fd0b59 (diff) | |
qcacld-3.0: Send QCN IE to FW as part of scan and assoc IE for LFR3
Currently, host driver adds QCN IE in probe/assoc request initiated
from driver.
If QCN IE support is enabled in host driver[g_qcn_ie_support INI is 1],
add the QCN IE as part of scan/assoc IE's that are sent to FW to be
used for probe/assoc/reassoc frames initiated by FW.
Change-Id: Ic4d58b2cb827668a9ce9cfa5bad4d882816d607b
CRs-Fixed: 1117332
| -rw-r--r-- | core/mac/src/include/parser_api.h | 7 | ||||
| -rw-r--r-- | core/mac/src/pe/include/lim_api.h | 4 | ||||
| -rw-r--r-- | core/mac/src/pe/lim/lim_api.c | 36 | ||||
| -rw-r--r-- | core/mac/src/pe/lim/lim_process_message_queue.c | 8 | ||||
| -rw-r--r-- | core/mac/src/sys/legacy/src/utils/src/parser_api.c | 2 | ||||
| -rw-r--r-- | core/sme/src/csr/csr_api_roam.c | 10 |
6 files changed, 63 insertions, 4 deletions
diff --git a/core/mac/src/include/parser_api.h b/core/mac/src/include/parser_api.h index 01abc33c3091..dded689a21a9 100644 --- a/core/mac/src/include/parser_api.h +++ b/core/mac/src/include/parser_api.h @@ -60,8 +60,11 @@ #define MBO_IE_ASSOC_DISALLOWED_SUBATTR_ID 0x04 /* QCN IE definitions */ -#define QCN_IE_VERSION_SUBATTR_ID 1 -#define QCN_IE_VERSION_SUBATTR_LEN 2 +#define QCN_IE_HDR_LEN 6 + +#define QCN_IE_VERSION_SUBATTR_ID 1 +#define QCN_IE_VERSION_SUBATTR_DATA_LEN 2 +#define QCN_IE_VERSION_SUBATTR_LEN 4 #define QCN_IE_VERSION_SUPPORTED 1 #define QCN_IE_SUBVERSION_SUPPORTED 0 diff --git a/core/mac/src/pe/include/lim_api.h b/core/mac/src/pe/include/lim_api.h index 759854cb24ac..d733a87c4e71 100644 --- a/core/mac/src/pe/include/lim_api.h +++ b/core/mac/src/pe/include/lim_api.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -327,5 +327,7 @@ static inline void lim_fill_join_rsp_ht_caps(tpPESession session, #endif QDF_STATUS lim_update_ext_cap_ie(tpAniSirGlobal mac_ctx, uint8_t *ie_data, uint8_t *local_ie_buf, uint16_t *local_ie_len); +QDF_STATUS lim_add_qcn_ie(tpAniSirGlobal mac_ctx, uint8_t *ie_data, + uint16_t *ie_len); /************************************************************/ #endif /* __LIM_API_H */ diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index 79262a574172..aac04822c8ef 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -2345,3 +2345,39 @@ QDF_STATUS lim_update_ext_cap_ie(tpAniSirGlobal mac_ctx, (*local_ie_len) += DOT11F_IE_EXTCAP_MAX_LEN; return QDF_STATUS_SUCCESS; } + +/** + * lim_add_qcn_ie() - Add QCN IE to a given IE buffer + * + * @mac_ctx: Pointer to Global MAC structure + * @ie_data: IE buffer + * @ie_len: length of the @ie_data + * + * Return: QDF_STATUS + */ +QDF_STATUS lim_add_qcn_ie(tpAniSirGlobal mac_ctx, uint8_t *ie_data, + uint16_t *ie_len) +{ + tDot11fIEQCN_IE qcn_ie; + uint8_t qcn_ie_hdr[QCN_IE_HDR_LEN] + = {IE_EID_VENDOR, DOT11F_IE_QCN_IE_MAX_LEN, + 0x8C, 0xFD, 0xF0, 0x1}; + + if (((*ie_len) + DOT11F_IE_QCN_IE_MAX_LEN) > MAX_DEFAULT_SCAN_IE_LEN) { + lim_log(mac_ctx, LOGE, FL("IE buffer not enough for QCN IE")); + return QDF_STATUS_E_FAILURE; + } + + /* Add QCN IE header */ + qdf_mem_copy(ie_data + (*ie_len), qcn_ie_hdr, QCN_IE_HDR_LEN); + (*ie_len) += QCN_IE_HDR_LEN; + + /* Retrieve Version sub-attribute data */ + populate_dot11f_qcn_ie(&qcn_ie); + + /* Add QCN IE data[version sub attribute] */ + qdf_mem_copy(ie_data + (*ie_len), qcn_ie.version, + (QCN_IE_VERSION_SUBATTR_LEN)); + (*ie_len) += (QCN_IE_VERSION_SUBATTR_LEN); + return QDF_STATUS_SUCCESS; +} diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c index 53922c9dc126..f0d37da0f3b8 100644 --- a/core/mac/src/pe/lim/lim_process_message_queue.c +++ b/core/mac/src/pe/lim/lim_process_message_queue.c @@ -261,6 +261,7 @@ static void lim_process_set_default_scan_ie_request(tpAniSirGlobal mac_ctx, uint16_t local_ie_len; tSirMsgQ msg_q; tSirRetStatus ret_code; + QDF_STATUS qdf_status; if (!msg_buf) { lim_log(mac_ctx, LOGE, FL("msg_buf is NULL")); @@ -284,6 +285,13 @@ static void lim_process_set_default_scan_ie_request(tpAniSirGlobal mac_ctx, goto scan_ie_send_fail; } + if (mac_ctx->roam.configParam.qcn_ie_support) { + qdf_status = lim_add_qcn_ie(mac_ctx, local_ie_buf, + &local_ie_len); + if (QDF_IS_STATUS_ERROR(qdf_status)) + goto scan_ie_send_fail; + } + wma_ie_params = qdf_mem_malloc(sizeof(*wma_ie_params) + local_ie_len); if (!wma_ie_params) { lim_log(mac_ctx, LOGE, FL("fail to alloc wma_ie_params")); diff --git a/core/mac/src/sys/legacy/src/utils/src/parser_api.c b/core/mac/src/sys/legacy/src/utils/src/parser_api.c index 0eb6a848b7a9..fb2865db813f 100644 --- a/core/mac/src/sys/legacy/src/utils/src/parser_api.c +++ b/core/mac/src/sys/legacy/src/utils/src/parser_api.c @@ -1269,7 +1269,7 @@ void populate_dot11f_qcn_ie(tDot11fIEQCN_IE *pDot11f) { pDot11f->present = 1; pDot11f->version[0] = QCN_IE_VERSION_SUBATTR_ID; - pDot11f->version[1] = QCN_IE_VERSION_SUBATTR_LEN; + pDot11f->version[1] = QCN_IE_VERSION_SUBATTR_DATA_LEN; pDot11f->version[2] = QCN_IE_VERSION_SUPPORTED; pDot11f->version[3] = QCN_IE_SUBVERSION_SUPPORTED; } diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index e177adc2fac3..334ebc0906e8 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -17716,6 +17716,11 @@ static void csr_update_driver_assoc_ies(tpAniSirGlobal mac_ctx, uint8_t ese_ie[DOT11F_IE_ESEVERSION_MAX_LEN] = { 0x0, 0x40, 0x96, 0x3, ESE_VERSION_SUPPORTED}; #endif + uint8_t qcn_ie[DOT11F_IE_QCN_IE_MAX_LEN] + = {0x8C, 0xFD, 0xF0, 0x1, QCN_IE_VERSION_SUBATTR_ID, + QCN_IE_VERSION_SUBATTR_DATA_LEN, + QCN_IE_VERSION_SUPPORTED, + QCN_IE_SUBVERSION_SUPPORTED}; if (session->pConnectBssDesc) max_tx_pwr_cap = csr_get_cfg_max_tx_power(mac_ctx, @@ -17763,6 +17768,11 @@ static void csr_update_driver_assoc_ies(tpAniSirGlobal mac_ctx, } ese_populate_addtional_ies(mac_ctx, session, req_buf); + /* Append QCN IE if g_support_qcn_ie INI is enabled */ + if (mac_ctx->roam.configParam.qcn_ie_support) + csr_append_assoc_ies(mac_ctx, req_buf, IEEE80211_ELEMID_VENDOR, + DOT11F_IE_QCN_IE_MAX_LEN, + qcn_ie); } /** |
