mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 14:34:27 -05:00 
			
		
		
		
	mac80211: backport RX timestamp flags patch
Backport RX timestamp flags patch needed for ath10k-ct to compile with newer versions. Link: https://github.com/openwrt/openwrt/pull/15735 Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
This commit is contained in:
		
							parent
							
								
									3b2a81ec24
								
							
						
					
					
						commit
						0134270319
					
				@ -0,0 +1,161 @@
 | 
				
			|||||||
 | 
					From d5b6f6d595b446c1693fdaa6aeb4a65b94d5fc90 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Johannes Berg <johannes.berg@intel.com>
 | 
				
			||||||
 | 
					Date: Wed, 20 Dec 2023 13:41:39 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH] wifi: mac80211: rework RX timestamp flags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					We only have a single flag free, and before using that for
 | 
				
			||||||
 | 
					another mactime flag, instead refactor the mactime flags
 | 
				
			||||||
 | 
					to use a 2-bit field.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 | 
				
			||||||
 | 
					Reviewed-by: Gregory Greenman <gregory.greenman@intel.com>
 | 
				
			||||||
 | 
					Reviewed-by: Benjamin Berg <benjamin.berg@intel.com>
 | 
				
			||||||
 | 
					Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
 | 
				
			||||||
 | 
					Link: https://msgid.link/20231220133549.d0e664832d14.I20c8900106f9bf81316bed778b1e3ce145785274@changeid
 | 
				
			||||||
 | 
					Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath10k/htt_rx.c |  2 +-
 | 
				
			||||||
 | 
					 include/net/mac80211.h                   | 13 +++++++++----
 | 
				
			||||||
 | 
					 net/mac80211/ieee80211_i.h               |  5 +----
 | 
				
			||||||
 | 
					 net/mac80211/util.c                      | 16 ++++++++++------
 | 
				
			||||||
 | 
					 4 files changed, 21 insertions(+), 15 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath10k/htt_rx.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
 | 
				
			||||||
 | 
					@@ -1294,7 +1294,7 @@ static void ath10k_htt_rx_h_ppdu(struct
 | 
				
			||||||
 | 
					 		status->encoding = RX_ENC_LEGACY;
 | 
				
			||||||
 | 
					 		status->bw = RATE_INFO_BW_20;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-		status->flag &= ~RX_FLAG_MACTIME_END;
 | 
				
			||||||
 | 
					+		status->flag &= ~RX_FLAG_MACTIME;
 | 
				
			||||||
 | 
					 		status->flag |= RX_FLAG_NO_SIGNAL_VAL;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 		status->flag &= ~(RX_FLAG_AMPDU_IS_LAST);
 | 
				
			||||||
 | 
					--- a/include/net/mac80211.h
 | 
				
			||||||
 | 
					+++ b/include/net/mac80211.h
 | 
				
			||||||
 | 
					@@ -1352,6 +1352,9 @@ ieee80211_tx_info_clear_status(struct ie
 | 
				
			||||||
 | 
					  *	the frame.
 | 
				
			||||||
 | 
					  * @RX_FLAG_FAILED_PLCP_CRC: Set this flag if the PCLP check failed on
 | 
				
			||||||
 | 
					  *	the frame.
 | 
				
			||||||
 | 
					+ * @RX_FLAG_MACTIME: The timestamp passed in the RX status (@mactime
 | 
				
			||||||
 | 
					+ *	field) is valid if this field is non-zero, and the position
 | 
				
			||||||
 | 
					+ *	where the timestamp was sampled depends on the value.
 | 
				
			||||||
 | 
					  * @RX_FLAG_MACTIME_START: The timestamp passed in the RX status (@mactime
 | 
				
			||||||
 | 
					  *	field) is valid and contains the time the first symbol of the MPDU
 | 
				
			||||||
 | 
					  *	was received. This is useful in monitor mode and for proper IBSS
 | 
				
			||||||
 | 
					@@ -1431,12 +1434,12 @@ ieee80211_tx_info_clear_status(struct ie
 | 
				
			||||||
 | 
					 enum mac80211_rx_flags {
 | 
				
			||||||
 | 
					 	RX_FLAG_MMIC_ERROR		= BIT(0),
 | 
				
			||||||
 | 
					 	RX_FLAG_DECRYPTED		= BIT(1),
 | 
				
			||||||
 | 
					-	RX_FLAG_MACTIME_PLCP_START	= BIT(2),
 | 
				
			||||||
 | 
					+	RX_FLAG_ONLY_MONITOR		= BIT(2),
 | 
				
			||||||
 | 
					 	RX_FLAG_MMIC_STRIPPED		= BIT(3),
 | 
				
			||||||
 | 
					 	RX_FLAG_IV_STRIPPED		= BIT(4),
 | 
				
			||||||
 | 
					 	RX_FLAG_FAILED_FCS_CRC		= BIT(5),
 | 
				
			||||||
 | 
					 	RX_FLAG_FAILED_PLCP_CRC 	= BIT(6),
 | 
				
			||||||
 | 
					-	RX_FLAG_MACTIME_START		= BIT(7),
 | 
				
			||||||
 | 
					+	/* one free bit at 7 */
 | 
				
			||||||
 | 
					 	RX_FLAG_NO_SIGNAL_VAL		= BIT(8),
 | 
				
			||||||
 | 
					 	RX_FLAG_AMPDU_DETAILS		= BIT(9),
 | 
				
			||||||
 | 
					 	RX_FLAG_PN_VALIDATED		= BIT(10),
 | 
				
			||||||
 | 
					@@ -1445,8 +1448,10 @@ enum mac80211_rx_flags {
 | 
				
			||||||
 | 
					 	RX_FLAG_AMPDU_IS_LAST		= BIT(13),
 | 
				
			||||||
 | 
					 	RX_FLAG_AMPDU_DELIM_CRC_ERROR	= BIT(14),
 | 
				
			||||||
 | 
					 	RX_FLAG_AMPDU_DELIM_CRC_KNOWN	= BIT(15),
 | 
				
			||||||
 | 
					-	RX_FLAG_MACTIME_END		= BIT(16),
 | 
				
			||||||
 | 
					-	RX_FLAG_ONLY_MONITOR		= BIT(17),
 | 
				
			||||||
 | 
					+	RX_FLAG_MACTIME			= BIT(16) | BIT(17),
 | 
				
			||||||
 | 
					+	RX_FLAG_MACTIME_PLCP_START	= 1 << 16,
 | 
				
			||||||
 | 
					+	RX_FLAG_MACTIME_START		= 2 << 16,
 | 
				
			||||||
 | 
					+	RX_FLAG_MACTIME_END		= 3 << 16,
 | 
				
			||||||
 | 
					 	RX_FLAG_SKIP_MONITOR		= BIT(18),
 | 
				
			||||||
 | 
					 	RX_FLAG_AMSDU_MORE		= BIT(19),
 | 
				
			||||||
 | 
					 	RX_FLAG_RADIOTAP_TLV_AT_END	= BIT(20),
 | 
				
			||||||
 | 
					--- a/net/mac80211/ieee80211_i.h
 | 
				
			||||||
 | 
					+++ b/net/mac80211/ieee80211_i.h
 | 
				
			||||||
 | 
					@@ -1807,10 +1807,7 @@ static inline bool txq_has_queue(struct
 | 
				
			||||||
 | 
					 static inline bool
 | 
				
			||||||
 | 
					 ieee80211_have_rx_timestamp(struct ieee80211_rx_status *status)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-	WARN_ON_ONCE(status->flag & RX_FLAG_MACTIME_START &&
 | 
				
			||||||
 | 
					-		     status->flag & RX_FLAG_MACTIME_END);
 | 
				
			||||||
 | 
					-	return !!(status->flag & (RX_FLAG_MACTIME_START | RX_FLAG_MACTIME_END |
 | 
				
			||||||
 | 
					-				  RX_FLAG_MACTIME_PLCP_START));
 | 
				
			||||||
 | 
					+	return status->flag & RX_FLAG_MACTIME;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 void ieee80211_vif_inc_num_mcast(struct ieee80211_sub_if_data *sdata);
 | 
				
			||||||
 | 
					--- a/net/mac80211/util.c
 | 
				
			||||||
 | 
					+++ b/net/mac80211/util.c
 | 
				
			||||||
 | 
					@@ -4174,6 +4174,7 @@ u64 ieee80211_calculate_rx_timestamp(str
 | 
				
			||||||
 | 
					 				     unsigned int mpdu_offset)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	u64 ts = status->mactime;
 | 
				
			||||||
 | 
					+	bool mactime_plcp_start;
 | 
				
			||||||
 | 
					 	struct rate_info ri;
 | 
				
			||||||
 | 
					 	u16 rate;
 | 
				
			||||||
 | 
					 	u8 n_ltf;
 | 
				
			||||||
 | 
					@@ -4181,6 +4182,9 @@ u64 ieee80211_calculate_rx_timestamp(str
 | 
				
			||||||
 | 
					 	if (WARN_ON(!ieee80211_have_rx_timestamp(status)))
 | 
				
			||||||
 | 
					 		return 0;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+	mactime_plcp_start = (status->flag & RX_FLAG_MACTIME) ==
 | 
				
			||||||
 | 
					+				RX_FLAG_MACTIME_PLCP_START;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 	memset(&ri, 0, sizeof(ri));
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	ri.bw = status->bw;
 | 
				
			||||||
 | 
					@@ -4195,7 +4199,7 @@ u64 ieee80211_calculate_rx_timestamp(str
 | 
				
			||||||
 | 
					 		if (status->enc_flags & RX_ENC_FLAG_SHORT_GI)
 | 
				
			||||||
 | 
					 			ri.flags |= RATE_INFO_FLAGS_SHORT_GI;
 | 
				
			||||||
 | 
					 		/* TODO/FIXME: is this right? handle other PPDUs */
 | 
				
			||||||
 | 
					-		if (status->flag & RX_FLAG_MACTIME_PLCP_START) {
 | 
				
			||||||
 | 
					+		if (mactime_plcp_start) {
 | 
				
			||||||
 | 
					 			mpdu_offset += 2;
 | 
				
			||||||
 | 
					 			ts += 36;
 | 
				
			||||||
 | 
					 		}
 | 
				
			||||||
 | 
					@@ -4212,7 +4216,7 @@ u64 ieee80211_calculate_rx_timestamp(str
 | 
				
			||||||
 | 
					 		 * See P802.11ax_D6.0, section 27.3.4 for
 | 
				
			||||||
 | 
					 		 * VHT PPDU format.
 | 
				
			||||||
 | 
					 		 */
 | 
				
			||||||
 | 
					-		if (status->flag & RX_FLAG_MACTIME_PLCP_START) {
 | 
				
			||||||
 | 
					+		if (mactime_plcp_start) {
 | 
				
			||||||
 | 
					 			mpdu_offset += 2;
 | 
				
			||||||
 | 
					 			ts += 36;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -4236,7 +4240,7 @@ u64 ieee80211_calculate_rx_timestamp(str
 | 
				
			||||||
 | 
					 		 * See P802.11REVmd_D3.0, section 19.3.2 for
 | 
				
			||||||
 | 
					 		 * HT PPDU format.
 | 
				
			||||||
 | 
					 		 */
 | 
				
			||||||
 | 
					-		if (status->flag & RX_FLAG_MACTIME_PLCP_START) {
 | 
				
			||||||
 | 
					+		if (mactime_plcp_start) {
 | 
				
			||||||
 | 
					 			mpdu_offset += 2;
 | 
				
			||||||
 | 
					 			if (status->enc_flags & RX_ENC_FLAG_HT_GF)
 | 
				
			||||||
 | 
					 				ts += 24;
 | 
				
			||||||
 | 
					@@ -4264,7 +4268,7 @@ u64 ieee80211_calculate_rx_timestamp(str
 | 
				
			||||||
 | 
					 		 * See P802.11REVmd_D3.0, section 21.3.2 for
 | 
				
			||||||
 | 
					 		 * VHT PPDU format.
 | 
				
			||||||
 | 
					 		 */
 | 
				
			||||||
 | 
					-		if (status->flag & RX_FLAG_MACTIME_PLCP_START) {
 | 
				
			||||||
 | 
					+		if (mactime_plcp_start) {
 | 
				
			||||||
 | 
					 			mpdu_offset += 2;
 | 
				
			||||||
 | 
					 			ts += 36;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -4298,7 +4302,7 @@ u64 ieee80211_calculate_rx_timestamp(str
 | 
				
			||||||
 | 
					 		bitrate = sband->bitrates[status->rate_idx].bitrate;
 | 
				
			||||||
 | 
					 		ri.legacy = DIV_ROUND_UP(bitrate, (1 << shift));
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-		if (status->flag & RX_FLAG_MACTIME_PLCP_START) {
 | 
				
			||||||
 | 
					+		if (mactime_plcp_start) {
 | 
				
			||||||
 | 
					 			if (status->band == NL80211_BAND_5GHZ) {
 | 
				
			||||||
 | 
					 				ts += 20 << shift;
 | 
				
			||||||
 | 
					 				mpdu_offset += 2;
 | 
				
			||||||
 | 
					@@ -4320,7 +4324,7 @@ u64 ieee80211_calculate_rx_timestamp(str
 | 
				
			||||||
 | 
					 		return 0;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	/* rewind from end of MPDU */
 | 
				
			||||||
 | 
					-	if (status->flag & RX_FLAG_MACTIME_END)
 | 
				
			||||||
 | 
					+	if ((status->flag & RX_FLAG_MACTIME) == RX_FLAG_MACTIME_END)
 | 
				
			||||||
 | 
					 		ts -= mpdu_len * 8 * 10 / rate;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	ts += mpdu_offset * 8 * 10 / rate;
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user