From 0f1f4635cf8f8ea202019691cb74e5d4ce8d7f2b Mon Sep 17 00:00:00 2001 From: Kiran Kumar Lokere Date: Tue, 4 Jun 2019 18:50:52 -0700 Subject: [PATCH] qcacld-3.0: Set extended cap TWT capabilities in roam offload Set TWT capabilities in extended capability IE in roam scan offload request. Change-Id: I4f07cfff47a2ecc4acf4d43d8885ce65f2fa2141 CRs-Fixed: 2459217 --- core/mac/src/pe/include/lim_api.h | 5 +++-- core/mac/src/pe/lim/lim_api.c | 13 +++++++++++-- core/mac/src/pe/lim/lim_process_message_queue.c | 6 +++++- core/mac/src/pe/lim/lim_process_sme_req_messages.c | 2 +- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/core/mac/src/pe/include/lim_api.h b/core/mac/src/pe/include/lim_api.h index c1069f906c11..635d8aa55ea0 100644 --- a/core/mac/src/pe/include/lim_api.h +++ b/core/mac/src/pe/include/lim_api.h @@ -412,8 +412,9 @@ void lim_fill_join_rsp_ht_caps(struct pe_session *session, struct join_rsp *rsp) {} #endif -QDF_STATUS lim_update_ext_cap_ie(struct mac_context *mac_ctx, - uint8_t *ie_data, uint8_t *local_ie_buf, uint16_t *local_ie_len); +QDF_STATUS lim_update_ext_cap_ie(struct mac_context *mac_ctx, uint8_t *ie_data, + uint8_t *local_ie_buf, uint16_t *local_ie_len, + struct pe_session *session); /** * lim_handle_sap_beacon(): Handle the beacon received from scan module for SAP diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index a6396a7adbcd..d38c0de600f1 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -2754,11 +2754,13 @@ void lim_mon_init_session(struct mac_context *mac_ptr, * @ie_data: Default Scan IE data * @local_ie_buf: Local Scan IE data * @local_ie_len: Pointer to length of @ie_data + * @session: Pointer to pe session * * Return: QDF_STATUS */ -QDF_STATUS lim_update_ext_cap_ie(struct mac_context *mac_ctx, - uint8_t *ie_data, uint8_t *local_ie_buf, uint16_t *local_ie_len) +QDF_STATUS lim_update_ext_cap_ie(struct mac_context *mac_ctx, uint8_t *ie_data, + uint8_t *local_ie_buf, uint16_t *local_ie_len, + struct pe_session *session) { uint32_t dot11mode; bool vht_enabled = false; @@ -2806,6 +2808,13 @@ QDF_STATUS lim_update_ext_cap_ie(struct mac_context *mac_ctx, return QDF_STATUS_SUCCESS; } lim_merge_extcap_struct(&driver_ext_cap, &default_scan_ext_cap, true); + + if (session) + populate_dot11f_twt_extended_caps(mac_ctx, session, + &driver_ext_cap); + else + pe_err("Session NULL, cannot set TWT caps"); + local_ie_buf[*local_ie_len + 1] = driver_ext_cap.num_bytes; if ((*local_ie_len) > (MAX_DEFAULT_SCAN_IE_LEN - 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 2b6f43efd7fd..0bac8f7458a5 100644 --- a/core/mac/src/pe/lim/lim_process_message_queue.c +++ b/core/mac/src/pe/lim/lim_process_message_queue.c @@ -400,6 +400,7 @@ static void lim_process_set_default_scan_ie_request(struct mac_context *mac_ctx, uint16_t local_ie_len; struct scheduler_msg msg_q = {0}; QDF_STATUS ret_code; + struct pe_session *pe_session; if (!msg_buf) { pe_err("msg_buf is NULL"); @@ -413,9 +414,12 @@ static void lim_process_set_default_scan_ie_request(struct mac_context *mac_ctx, if (!local_ie_buf) return; + pe_session = pe_find_session_by_sme_session_id(mac_ctx, + + set_ie_params->session_id); if (lim_update_ext_cap_ie(mac_ctx, (uint8_t *)set_ie_params->ie_data, - local_ie_buf, &local_ie_len)) { + local_ie_buf, &local_ie_len, pe_session)) { pe_err("Update ext cap IEs fails"); goto scan_ie_send_fail; } diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index 905e7c40f2f4..a2ffb2c05ff5 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c @@ -3687,7 +3687,7 @@ static void __lim_process_roam_scan_offload_req(struct mac_context *mac_ctx, /* Update ext cap IE if present */ if (local_ie_len && !lim_update_ext_cap_ie(mac_ctx, req_buffer->assoc_ie.addIEdata, - local_ie_buf, &local_ie_len)) { + local_ie_buf, &local_ie_len, pe_session)) { if (local_ie_len < QDF_ARRAY_SIZE(req_buffer->assoc_ie.addIEdata)) { req_buffer->assoc_ie.length = local_ie_len;