diff options
| -rw-r--r-- | core/sme/src/csr/csr_api_roam.c | 62 |
1 files changed, 45 insertions, 17 deletions
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 5ee911294739..4465d1e6b640 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -13572,21 +13572,28 @@ static QDF_STATUS csr_roam_start_wds(tpAniSirGlobal pMac, uint32_t sessionId, * csr_add_supported_5Ghz_channels()- Add valid 5Ghz channels * in Join req. * @mac_ctx: pointer to global mac structure - * @csr_join_req: join req sent to lim + * @chan_list: Pointer to channel list buffer to populate + * @num_chan: Pointer to number of channels value to update + * @supp_chan_ie: Boolean to check if we need to populate as IE * * This function is called to update valid 5Ghz channels - * in Join req. + * in Join req. If @supp_chan_ie is true, supported channels IE + * format[chan num 1, num of channels 1, chan num 2, num of + * channels 2, ..] is populated. Else, @chan_list would be a list + * of supported channels[chan num 1, chan num 2..] * * Return: void */ static void csr_add_supported_5Ghz_channels(tpAniSirGlobal mac_ctx, - tSirSmeJoinReq *csr_join_req) + uint8_t *chan_list, + uint8_t *num_chnl, + bool supp_chan_ie) { uint16_t i, j; uint32_t size = 0; - if (!csr_join_req) { - sms_log(mac_ctx, LOGE, FL(" csr_join_reqis NULL")); + if (!chan_list) { + sms_log(mac_ctx, LOGE, FL("chan_list buffer NULL")); return; } @@ -13599,16 +13606,21 @@ static void csr_add_supported_5Ghz_channels(tpAniSirGlobal mac_ctx, /* Only add 5ghz channels.*/ if (CDS_IS_CHANNEL_5GHZ (mac_ctx->roam.validChannelList[i])) { - csr_join_req->supportedChannels.channelList[j] = - mac_ctx->roam.validChannelList[i]; + chan_list[j] + = mac_ctx->roam.validChannelList[i]; j++; + + if (supp_chan_ie) { + chan_list[j] = 1; + j++; + } } } - csr_join_req->supportedChannels.numChnl = j; + *num_chnl = (uint8_t)j; } else { sms_log(mac_ctx, LOGE, FL("can not find any valid channel")); - csr_join_req->supportedChannels.numChnl = 0; + *num_chnl = 0; } } @@ -14273,7 +14285,10 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, else csr_join_req->powerCap.maxTxPower = MAX_TX_PWR_CAP; - csr_add_supported_5Ghz_channels(pMac, csr_join_req); + csr_add_supported_5Ghz_channels(pMac, + csr_join_req->supportedChannels.channelList, + &csr_join_req->supportedChannels.numChnl, + false); csr_join_req->uapsdPerAcBitmask = (uint8_t)pProfile->uapsd_mask; /* Move the entire BssDescription into the join request. */ @@ -17283,6 +17298,7 @@ static void csr_append_assoc_ies(tpAniSirGlobal mac_ctx, return; } + sms_log(mac_ctx, LOG1, "Appended IE(Id:%d) to RSO", ie_id); assoc_ie->addIEdata[assoc_ie->length] = ie_id; assoc_ie->addIEdata[assoc_ie->length + 1] = ie_len; qdf_mem_copy(&assoc_ie->addIEdata[assoc_ie->length + 2], @@ -17312,6 +17328,10 @@ static void csr_update_driver_assoc_ies(tpAniSirGlobal mac_ctx, = csr_get_cfg_max_tx_power(mac_ctx, session->pConnectBssDesc->channelId); + uint8_t supp_chan_ie[DOT11F_IE_SUPPCHANNELS_MAX_LEN], supp_chan_ie_len; + uint8_t ese_ie[DOT11F_IE_ESEVERSION_MAX_LEN] + = { 0x0, 0x40, 0x96, 0x3, ESE_VERSION_SUPPORTED}; + if (max_tx_pwr_cap) power_cap_ie_data[1] = max_tx_pwr_cap; @@ -17323,8 +17343,22 @@ static void csr_update_driver_assoc_ies(tpAniSirGlobal mac_ctx, DOT11F_IE_POWERCAPS_MAX_LEN, power_cap_ie_data); power_caps_populated = true; + + /* Append Supported channels IE */ + csr_add_supported_5Ghz_channels(mac_ctx, supp_chan_ie, + &supp_chan_ie_len, true); + + csr_append_assoc_ies(mac_ctx, req_buf, + IEEE80211_ELEMID_SUPPCHAN, + supp_chan_ie_len, supp_chan_ie); } + /* Append ESE version IE if isEseIniFeatureEnabled INI is enabled */ + if (mac_ctx->roam.configParam.isEseIniFeatureEnabled) + csr_append_assoc_ies(mac_ctx, req_buf, IEEE80211_ELEMID_VENDOR, + DOT11F_IE_ESEVERSION_MAX_LEN, + ese_ie); + if (mac_ctx->rrm.rrmPEContext.rrmEnable) { /* Append RRM IE */ csr_append_assoc_ies(mac_ctx, req_buf, IEEE80211_ELEMID_RRM, @@ -17533,17 +17567,11 @@ csr_roam_offload_scan(tpAniSirGlobal mac_ctx, uint8_t session_id, req_buf->hi_rssi_scan_delay, req_buf->hi_rssi_scan_rssi_ub); - if (((command == ROAM_SCAN_OFFLOAD_START) && - (reason == REASON_CONNECT)) || - ((command == ROAM_SCAN_OFFLOAD_UPDATE_CFG) && - (reason == REASON_CONNECT_IES_CHANGED))) { - req_buf->assoc_ie.length = session->nAddIEAssocLength; + if (command != ROAM_SCAN_OFFLOAD_STOP) { qdf_mem_copy(req_buf->assoc_ie.addIEdata, session->pAddIEAssoc, session->nAddIEAssocLength); csr_update_driver_assoc_ies(mac_ctx, session, req_buf); - } else { - req_buf->assoc_ie.length = 0; } msg.type = WMA_ROAM_SCAN_OFFLOAD_REQ; |
