Pārlūkot izejas kodu

qcacmn: check for rx_user_status

add a condition to check for rx_user_status to see
if its NULL or not. in 2.0 platforms it comes always as valid
for 1.0 platforms it could vary.
In case of rx_user_status is NULL then user rx_status instead.
for when rx_user_status is valid then 'or' both values.

Change-Id: I9e87d3b3592741a24ef2ef229bf7d4cdbdb871a3
CRs-Fixed: 3755942
Ruben Columbus 1 gadu atpakaļ
vecāks
revīzija
69cd6cf948
1 mainītis faili ar 85 papildinājumiem un 37 dzēšanām
  1. 85 37
      qdf/linux/src/qdf_nbuf.c

+ 85 - 37
qdf/linux/src/qdf_nbuf.c

@@ -5093,29 +5093,49 @@ qdf_nbuf_update_radiotap_he_flags(struct mon_rx_status *rx_status,
 
 	rtap_len = qdf_align(rtap_len, 2);
 
-	put_unaligned_le16(rx_user_status->he_data1 |
-			   rx_status->he_data1, &rtap_buf[rtap_len]);
-	rtap_len += 2;
+	if (!rx_user_status) {
+		put_unaligned_le16(rx_status->he_data1, &rtap_buf[rtap_len]);
+		rtap_len += 2;
 
-	put_unaligned_le16(rx_user_status->he_data2 |
-			   rx_status->he_data2, &rtap_buf[rtap_len]);
-	rtap_len += 2;
+		put_unaligned_le16(rx_status->he_data2, &rtap_buf[rtap_len]);
+		rtap_len += 2;
 
-	put_unaligned_le16(rx_user_status->he_data3 |
-			   rx_status->he_data3, &rtap_buf[rtap_len]);
-	rtap_len += 2;
+		put_unaligned_le16(rx_status->he_data3, &rtap_buf[rtap_len]);
+		rtap_len += 2;
 
-	put_unaligned_le16(rx_user_status->he_data4 |
-			   rx_status->he_data4, &rtap_buf[rtap_len]);
-	rtap_len += 2;
+		put_unaligned_le16(rx_status->he_data4, &rtap_buf[rtap_len]);
+		rtap_len += 2;
 
-	put_unaligned_le16(rx_user_status->he_data5 |
-			   rx_status->he_data5, &rtap_buf[rtap_len]);
-	rtap_len += 2;
+		put_unaligned_le16(rx_status->he_data5, &rtap_buf[rtap_len]);
+		rtap_len += 2;
 
-	put_unaligned_le16(rx_user_status->he_data6 |
-			   rx_status->he_data6, &rtap_buf[rtap_len]);
-	rtap_len += 2;
+		put_unaligned_le16(rx_status->he_data6, &rtap_buf[rtap_len]);
+		rtap_len += 2;
+	} else {
+		put_unaligned_le16(rx_user_status->he_data1 |
+				   rx_status->he_data1, &rtap_buf[rtap_len]);
+		rtap_len += 2;
+
+		put_unaligned_le16(rx_user_status->he_data2 |
+				   rx_status->he_data2, &rtap_buf[rtap_len]);
+		rtap_len += 2;
+
+		put_unaligned_le16(rx_user_status->he_data3 |
+				   rx_status->he_data3, &rtap_buf[rtap_len]);
+		rtap_len += 2;
+
+		put_unaligned_le16(rx_user_status->he_data4 |
+				   rx_status->he_data4, &rtap_buf[rtap_len]);
+		rtap_len += 2;
+
+		put_unaligned_le16(rx_user_status->he_data5 |
+				   rx_status->he_data5, &rtap_buf[rtap_len]);
+		rtap_len += 2;
+
+		put_unaligned_le16(rx_user_status->he_data6 |
+				   rx_status->he_data6, &rtap_buf[rtap_len]);
+		rtap_len += 2;
+	}
 
 	return rtap_len;
 }
@@ -5306,17 +5326,31 @@ qdf_nbuf_update_radiotap_eht_flags(struct mon_rx_status *rx_status,
 	 */
 	rtap_len = qdf_align(rtap_len, 4);
 
-	put_unaligned_le32(rx_status->eht_known | rx_user_status->eht_known,
-			   &rtap_buf[rtap_len]);
-	rtap_len += 4;
+	if (!rx_user_status) {
+		put_unaligned_le32(rx_status->eht_known, &rtap_buf[rtap_len]);
+		rtap_len += 4;
 
-	put_unaligned_le32(rx_status->eht_data[0] | rx_user_status->eht_data[0],
-			   &rtap_buf[rtap_len]);
-	rtap_len += 4;
+		put_unaligned_le32(rx_status->eht_data[0], &rtap_buf[rtap_len]);
+		rtap_len += 4;
 
-	put_unaligned_le32(rx_status->eht_data[1] | rx_user_status->eht_data[1],
-			   &rtap_buf[rtap_len]);
-	rtap_len += 4;
+		put_unaligned_le32(rx_status->eht_data[1], &rtap_buf[rtap_len]);
+		rtap_len += 4;
+	} else {
+		put_unaligned_le32(rx_status->eht_known |
+				   rx_user_status->eht_known,
+				   &rtap_buf[rtap_len]);
+		rtap_len += 4;
+
+		put_unaligned_le32(rx_status->eht_data[0] |
+				   rx_user_status->eht_data[0],
+				   &rtap_buf[rtap_len]);
+		rtap_len += 4;
+
+		put_unaligned_le32(rx_status->eht_data[1] |
+				   rx_user_status->eht_data[1],
+				   &rtap_buf[rtap_len]);
+		rtap_len += 4;
+	}
 
 	put_unaligned_le32(rx_status->eht_data[2], &rtap_buf[rtap_len]);
 	rtap_len += 4;
@@ -5330,15 +5364,25 @@ qdf_nbuf_update_radiotap_eht_flags(struct mon_rx_status *rx_status,
 	put_unaligned_le32(rx_status->eht_data[5], &rtap_buf[rtap_len]);
 	rtap_len += 4;
 
-	put_unaligned_le32(rx_user_status->eht_user_info, &rtap_buf[rtap_len]);
-	rtap_len += 4;
+	if (!rx_user_status) {
+		qdf_rl_debug("EHT data %x %x %x %x %x %x %x",
+			     rx_status->eht_known, rx_status->eht_data[0],
+			     rx_status->eht_data[1], rx_status->eht_data[2],
+			     rx_status->eht_data[3], rx_status->eht_data[4],
+			     rx_status->eht_data[5]);
+	} else {
+		put_unaligned_le32(rx_user_status->eht_user_info, &rtap_buf[rtap_len]);
+		rtap_len += 4;
 
-	qdf_rl_debug("EHT data %x %x %x %x %x %x %x",
-		     rx_status->eht_known | rx_user_status->eht_known,
-		     rx_status->eht_data[0] | rx_user_status->eht_data[0],
-		     rx_status->eht_data[1] | rx_user_status->eht_data[1],
-		     rx_status->eht_data[2], rx_status->eht_data[3],
-		     rx_status->eht_data[4], rx_status->eht_data[5]);
+		qdf_rl_debug("EHT data %x %x %x %x %x %x %x",
+			     rx_status->eht_known | rx_user_status->eht_known,
+			     rx_status->eht_data[0] |
+			     rx_user_status->eht_data[0],
+			     rx_status->eht_data[1] |
+			     rx_user_status->eht_data[1],
+			     rx_status->eht_data[2], rx_status->eht_data[3],
+			     rx_status->eht_data[4], rx_status->eht_data[5]);
+	}
 
 	return rtap_len;
 }
@@ -5713,8 +5757,10 @@ unsigned int qdf_nbuf_update_radiotap(struct mon_rx_status *rx_status,
 							       rtap_buf,
 							       rtap_len);
 
-		if ((rtap_len - length) > RADIOTAP_EHT_FLAGS_LEN)
+		if ((rtap_len - length) > RADIOTAP_EHT_FLAGS_LEN) {
+			qdf_print("length is greater than RADIOTAP_EHT_FLAGS_LEN");
 			return 0;
+		}
 	}
 
 	if (rx_status->eht_flags) {
@@ -5725,8 +5771,10 @@ unsigned int qdf_nbuf_update_radiotap(struct mon_rx_status *rx_status,
 							      rtap_buf,
 							      rtap_len);
 
-		if ((rtap_len - length) > RADIOTAP_EHT_FLAGS_LEN)
+		if ((rtap_len - length) > RADIOTAP_EHT_FLAGS_LEN) {
+			qdf_print("length is greater than RADIOTAP_EHT_FLAGS_LEN");
 			return 0;
+		}
 	}
 
 	put_unaligned_le32(it_present_val, it_present);