Bläddra i källkod

Merge "qcacmn: Deliver EAP frames to stack from REO exception path"

Linux Build Service Account 4 år sedan
förälder
incheckning
ad6be37852

+ 2 - 0
dp/wifi3.0/dp_rx.c

@@ -2667,6 +2667,8 @@ bool dp_rx_deliver_special_frame(struct dp_soc *soc, struct dp_peer *peer,
 	qdf_nbuf_pull_head(nbuf, skip_len);
 
 	if (dp_rx_is_special_frame(nbuf, frame_mask)) {
+		dp_info("special frame, mpdu sn 0x%x",
+			hal_rx_get_rx_sequence(soc->hal_soc, rx_tlv_hdr));
 		qdf_nbuf_set_exc_frame(nbuf, 1);
 		dp_rx_deliver_to_stack(soc, peer->vdev, peer,
 				       nbuf, NULL);

+ 17 - 35
dp/wifi3.0/dp_rx_err.c

@@ -466,10 +466,8 @@ dp_rx_pn_error_handle(struct dp_soc *soc, hal_ring_desc_t ring_desc,
  *
  * @soc: core txrx main context
  * @nbuf: pointer to msdu skb
- * @rx_tlv_hdr: start of rx tlv header
- * @mpdu_desc_info: pointer to mpdu level description info
  * @peer_id: dp peer ID
- * @tid: dp tid
+ * @rx_tlv_hdr: start of rx tlv header
  *
  * This function process the msdu delivered from REO2TCL
  * ring with error type OOR
@@ -479,34 +477,19 @@ dp_rx_pn_error_handle(struct dp_soc *soc, hal_ring_desc_t ring_desc,
 static void
 dp_rx_oor_handle(struct dp_soc *soc,
 		 qdf_nbuf_t nbuf,
-		 uint8_t *rx_tlv_hdr,
-		 struct hal_rx_mpdu_desc_info *mpdu_desc_info,
 		 uint16_t peer_id,
-		 uint8_t tid)
+		 uint8_t *rx_tlv_hdr)
 {
 	uint32_t frame_mask = FRAME_MASK_IPV4_ARP | FRAME_MASK_IPV4_DHCP |
 				FRAME_MASK_IPV4_EAPOL | FRAME_MASK_IPV6_DHCP;
 	struct dp_peer *peer = NULL;
 
 	peer = dp_peer_get_ref_by_id(soc, peer_id, DP_MOD_ID_RX_ERR);
-	if (!peer || tid >= DP_MAX_TIDS) {
-		dp_info_rl("peer or tid %d not valid", tid);
+	if (!peer) {
+		dp_info_rl("peer not found");
 		goto free_nbuf;
 	}
 
-	/*
-	 * For REO error 7 OOR, if it is retry frame under BA session,
-	 * then it is likely SN duplicated frame, do not deliver EAPOL
-	 * to stack in this case since the connection might fail due to
-	 * duplicated EAP response.
-	 */
-	if (mpdu_desc_info &&
-	    mpdu_desc_info->mpdu_flags & HAL_MPDU_F_RETRY_BIT &&
-	    peer->rx_tid[tid].ba_status == DP_RX_BA_ACTIVE) {
-		frame_mask &= ~FRAME_MASK_IPV4_EAPOL;
-		DP_STATS_INC(soc, rx.err.reo_err_oor_eapol_drop, 1);
-	}
-
 	if (dp_rx_deliver_special_frame(soc, peer, nbuf, frame_mask,
 					rx_tlv_hdr)) {
 		DP_STATS_INC(soc, rx.err.reo_err_oor_to_stack, 1);
@@ -627,24 +610,24 @@ more_msdu_link_desc:
 			DP_STATS_INC(soc, rx.err.reo_err_oor_sg_count, 1);
 		}
 
-		/*
-		 * only first msdu, mpdu start description tlv valid?
-		 * and use it for following msdu.
-		 */
-		if (hal_rx_msdu_end_first_msdu_get(soc->hal_soc,
-						   rx_tlv_hdr_last))
-			tid = hal_rx_mpdu_start_tid_get(soc->hal_soc,
-							rx_tlv_hdr_first);
-
 		switch (err_code) {
 		case HAL_REO_ERR_REGULAR_FRAME_2K_JUMP:
+			/*
+			 * only first msdu, mpdu start description tlv valid?
+			 * and use it for following msdu.
+			 */
+			if (hal_rx_msdu_end_first_msdu_get(soc->hal_soc,
+							   rx_tlv_hdr_last))
+				tid = hal_rx_mpdu_start_tid_get(
+							soc->hal_soc,
+							rx_tlv_hdr_first);
+
 			dp_2k_jump_handle(soc, nbuf, rx_tlv_hdr_last,
 					  peer_id, tid);
 			break;
 
 		case HAL_REO_ERR_REGULAR_FRAME_OOR:
-			dp_rx_oor_handle(soc, nbuf, rx_tlv_hdr_last,
-					 mpdu_desc_info, peer_id, tid);
+			dp_rx_oor_handle(soc, nbuf, peer_id, rx_tlv_hdr_last);
 			break;
 		default:
 			dp_err_rl("Non-support error code %d", err_code);
@@ -2321,9 +2304,8 @@ done:
 						soc->hal_soc, rx_tlv_hdr);
 					nbuf->next = NULL;
 					dp_rx_oor_handle(soc, nbuf,
-							 rx_tlv_hdr,
-							 NULL,
-							 peer_id, tid);
+							 peer_id,
+							 rx_tlv_hdr);
 					break;
 				case HAL_REO_ERR_BAR_FRAME_2K_JUMP:
 				case HAL_REO_ERR_BAR_FRAME_OOR:

+ 0 - 5
dp/wifi3.0/dp_stats.c

@@ -6024,8 +6024,6 @@ void dp_txrx_path_stats(struct dp_soc *soc)
 			       pdev->soc->stats.rx.err.reo_err_oor_to_stack);
 		DP_PRINT_STATS("REO err oor msdu drop: %u",
 			       pdev->soc->stats.rx.err.reo_err_oor_drop);
-		DP_PRINT_STATS("REO err oor eapol drop: %u",
-			       pdev->soc->stats.rx.err.reo_err_oor_eapol_drop);
 		DP_PRINT_STATS("Rx err msdu rejected: %d",
 			       soc->stats.rx.err.rejected);
 		DP_PRINT_STATS("Rx raw frame dropped: %d",
@@ -6617,9 +6615,6 @@ dp_print_soc_rx_stats(struct dp_soc *soc)
 	DP_PRINT_STATS("REO err oor msdu drop: %d",
 		       soc->stats.rx.err.reo_err_oor_drop);
 
-	DP_PRINT_STATS("REO err oor eapol drop: %d",
-		       soc->stats.rx.err.reo_err_oor_eapol_drop);
-
 	DP_PRINT_STATS("Rx err msdu rejected: %d",
 		       soc->stats.rx.err.rejected);
 

+ 0 - 2
dp/wifi3.0/dp_types.h

@@ -1041,8 +1041,6 @@ struct dp_soc_stats {
 			uint32_t dup_refill_link_desc;
 			/* Incorrect msdu continuation bit in MSDU desc */
 			uint32_t msdu_continuation_err;
-			/* REO OOR eapol drop count */
-			uint32_t reo_err_oor_eapol_drop;
 			/* Non Eapol packet drop count due to peer not authorized  */
 			uint32_t peer_unauth_rx_pkt_drop;
 			/* count of start sequence (ssn) updates */

+ 13 - 0
umac/cmn_services/utils/inc/wlan_utility.h

@@ -60,6 +60,19 @@ struct wlan_op_mode_peer_count {
  */
 uint32_t wlan_chan_to_freq(uint8_t chan);
 
+/**
+  * wlan_get_320_center_freq() - find center frequencies for 320Mhz channel
+  * @freq: Primary frequency
+  * @center_freq1: possible 1st center frequency
+  * @center_freq2: possible 2nd center frequency
+  *
+  * return: void
+  **/
+void
+wlan_get_320_center_freq(qdf_freq_t freq,
+			 qdf_freq_t *center_freq1,
+			 qdf_freq_t *center_freq2);
+
 /**
  * wlan_freq_to_chan() - converts frequency to channel
  * @freq: frequency

+ 32 - 0
umac/cmn_services/utils/src/wlan_utility.c

@@ -71,6 +71,38 @@ uint8_t wlan_freq_to_chan(uint32_t freq)
 	return chan;
 }
 
+void
+wlan_get_320_center_freq(qdf_freq_t freq,
+			 qdf_freq_t *center_freq1,
+			 qdf_freq_t *center_freq2)
+{
+	*center_freq1 = 0;
+	*center_freq2 = 0;
+
+	if ((freq >= 5500) && (freq <= 5800)) {
+		*center_freq1 = 5650;
+	} else if ((freq >= 5955) && (freq <= 6095)) {
+		*center_freq1 = 6105;
+	} else if ((freq >= 6115) && (freq <= 6255)) {
+		*center_freq1 = 6105;
+		*center_freq2 = 6205;
+	} else if ((freq >= 6275) && (freq <= 6415)) {
+		*center_freq1 = 6265;
+		*center_freq2 = 6425;
+	} else if ((freq >= 6435) && (freq <= 6575)) {
+		*center_freq1 = 6425;
+		*center_freq2 = 6585;
+	} else if ((freq >= 6595) && (freq <= 6735)) {
+		*center_freq1 = 6585;
+		*center_freq2 = 6745;
+	} else if ((freq >= 6755) && (freq <= 6895)) {
+		*center_freq1 = 6745;
+		*center_freq2 = 6905;
+	} else if ((freq >= 6915) && (freq <= 7055)) {
+		*center_freq1 = 6905;
+	}
+}
+
 bool wlan_is_ie_valid(const uint8_t *ie, size_t ie_len)
 {
 	uint8_t elen;

+ 4 - 1
utils/logging/src/wlan_logging_sock_svc.c

@@ -222,11 +222,14 @@ static struct log_msg gplog_msg[MAX_LOGMSG_COUNT];
 
 static inline QDF_STATUS allocate_log_msg_buffer(void)
 {
+	qdf_minidump_log(gplog_msg, sizeof(gplog_msg), "wlan_logs");
 	return QDF_STATUS_SUCCESS;
 }
 
 static inline void free_log_msg_buffer(void)
-{ }
+{
+	qdf_minidump_remove(gplog_msg, sizeof(gplog_msg), "wlan_logs");
+}
 #endif
 
 /* Need to call this with spin_lock acquired */

+ 19 - 0
wmi/src/wmi_unified_tlv.c

@@ -11099,6 +11099,22 @@ static QDF_STATUS extract_rf_characterization_entries_tlv(wmi_unified_t wmi_hand
 }
 #endif
 
+#ifdef WLAN_FEATURE_11BE
+static void
+extract_11be_chainmask(struct wlan_psoc_host_chainmask_capabilities *cap,
+		       WMI_MAC_PHY_CHAINMASK_CAPABILITY *chainmask_caps)
+{
+	cap->supports_chan_width_320 =
+		WMI_SUPPORT_CHAN_WIDTH_320_GET(chainmask_caps->supported_flags);
+}
+#else
+static void
+extract_11be_chainmask(struct wlan_psoc_host_chainmask_capabilities *cap,
+		       WMI_MAC_PHY_CHAINMASK_CAPABILITY *chainmask_caps)
+{
+}
+#endif /* WLAN_FEATURE_11BE */
+
 /**
  * extract_chainmask_tables_tlv() - extract chain mask tables from event
  * @wmi_handle: wmi handle
@@ -11203,6 +11219,9 @@ static QDF_STATUS extract_chainmask_tables_tlv(wmi_unified_t wmi_handle,
 			chainmask_table[i].cap_list[j].supports_aDFS_160 =
 				WMI_SUPPORT_ADFS_160_GET(chainmask_caps->supported_flags);
 
+			extract_11be_chainmask(&chainmask_table[i].cap_list[j],
+					       chainmask_caps);
+
 			wmi_nofl_debug("supported_flags: 0x%08x  chainmasks: 0x%08x",
 				       chainmask_caps->supported_flags,
 				       chainmask_caps->chainmask);