浏览代码

qcacld-3.0: Fix status check for ROAM Reassoc Frames

In api extract_roam_frame_info_tlv(), the request_response
bit is checked in order to determine whether the frame
received is a request frame or response frame which
in turn used to evaluate wmi_roam_frame_info->status_code
as tx_status code for transmitted frame and IEEE 80211
status code for received frames.
However, the request_response bit is only valid for Authentication
frames and hence status code for Association and Re-association
frame is reported incorrectly.

Fix the check to evaluate wmi_roam_frame_info->status_code as
tx_status code for the following:
1. Frame is Authentication Frame and request_response bit is
   set to '0'
2. Frame is Association Request frame
3. Frame is Re-Association Request Frame.

Change-Id: Icb7633ba8bf662f4987be016715051fa6d1adc06
CRs-Fixed: 3800906
Vijay Raj 1 年之前
父节点
当前提交
04a045bd2a
共有 1 个文件被更改,包括 12 次插入8 次删除
  1. 12 8
      components/wmi/src/wmi_unified_roam_tlv.c

+ 12 - 8
components/wmi/src/wmi_unified_roam_tlv.c

@@ -2069,17 +2069,21 @@ extract_roam_frame_info_tlv(wmi_unified_t wmi_handle, void *evt_buf,
 				WMI_GET_BITS(src_data->frame_info,
 					     WLAN_FRAME_INFO_AUTH_ALG_OFFSET,
 					     4);
+		/*
+		 * src_data->status_code is treated as tx status under
+		 * following condition:
+		 * 1. if the frame is an authentication frame and req_resp bit
+		 * is set to '0'
+		 * 2. If the Frame is Association Request frame
+		 * 3. If the Frame is Re-Association Request Frame
+		 */
 
-		if (!dst_buf->is_rsp) {
+		if ((!dst_buf->is_rsp &&
+		     dst_buf->subtype == MGMT_SUBTYPE_AUTH) ||
+		    dst_buf->subtype == MGMT_SUBTYPE_ASSOC_REQ ||
+		    dst_buf->subtype == MGMT_SUBTYPE_REASSOC_REQ) {
 			dst_buf->tx_status = wmi_get_converted_tx_status(
 							src_data->status_code);
-			/* wmi_roam_frame_info->status_code sent from the fw
-			 * denotes the tx_status of the transmitted frames.
-			 * To Do: Need a separate field for status code or
-			 * use existing field of wmi_roam_frame_info tlv
-			 * to send the tx status of transmitted frame from the
-			 * FW.
-			 */
 			dst_buf->status_code = 0;
 		}