Browse Source

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
Kiran Kumar Lokere 5 years ago
parent
commit
0f1f4635cf

+ 3 - 2
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

+ 11 - 2
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 -

+ 5 - 1
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;
 	}

+ 1 - 1
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;