Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da6a4352 authored by Johannes Berg's avatar Johannes Berg
Browse files

mac80211: separate encoding/bandwidth from flags



We currently use a lot of flags that are mutually incompatible,
separate this out into actual encoding and bandwidth enum values.

Much of this again done with spatch, with manual post-editing,
mostly to add the switch statements and get rid of the conversions.

@@
expression status;
@@
-status->enc_flags |= RX_ENC_FLAG_80MHZ
+status->bw = RATE_INFO_BW_80
@@
expression status;
@@
-status->enc_flags |= RX_ENC_FLAG_40MHZ
+status->bw = RATE_INFO_BW_40
@@
expression status;
@@
-status->enc_flags |= RX_ENC_FLAG_20MHZ
+status->bw = RATE_INFO_BW_20
@@
expression status;
@@
-status->enc_flags |= RX_ENC_FLAG_160MHZ
+status->bw = RATE_INFO_BW_160
@@
expression status;
@@
-status->enc_flags |= RX_ENC_FLAG_5MHZ
+status->bw = RATE_INFO_BW_5
@@
expression status;
@@
-status->enc_flags |= RX_ENC_FLAG_10MHZ
+status->bw = RATE_INFO_BW_10

@@
expression status;
@@
-status->enc_flags |= RX_ENC_FLAG_VHT
+status->encoding = RX_ENC_VHT
@@
expression status;
@@
-status->enc_flags |= RX_ENC_FLAG_HT
+status->encoding = RX_ENC_HT
@@
expression status;
@@
-status.enc_flags |= RX_ENC_FLAG_VHT
+status.encoding = RX_ENC_VHT
@@
expression status;
@@
-status.enc_flags |= RX_ENC_FLAG_HT
+status.encoding = RX_ENC_HT

@@
expression status;
@@
-(status->enc_flags & RX_ENC_FLAG_HT)
+(status->encoding == RX_ENC_HT)
@@
expression status;
@@
-(status->enc_flags & RX_ENC_FLAG_VHT)
+(status->encoding == RX_ENC_VHT)

@@
expression status;
@@
-(status->enc_flags & RX_ENC_FLAG_5MHZ)
+(status->bw == RATE_INFO_BW_5)
@@
expression status;
@@
-(status->enc_flags & RX_ENC_FLAG_10MHZ)
+(status->bw == RATE_INFO_BW_10)
@@
expression status;
@@
-(status->enc_flags & RX_ENC_FLAG_40MHZ)
+(status->bw == RATE_INFO_BW_40)
@@
expression status;
@@
-(status->enc_flags & RX_ENC_FLAG_80MHZ)
+(status->bw == RATE_INFO_BW_80)
@@
expression status;
@@
-(status->enc_flags & RX_ENC_FLAG_160MHZ)
+(status->bw == RATE_INFO_BW_160)

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 7fdd69c5
Loading
Loading
Loading
Loading
+14 −18
Original line number Diff line number Diff line
@@ -632,11 +632,11 @@ static void ath10k_htt_rx_h_rates(struct ath10k *ar,
		sgi = (info3 >> 7) & 1;

		status->rate_idx = mcs;
		status->enc_flags |= RX_ENC_FLAG_HT;
		status->encoding = RX_ENC_HT;
		if (sgi)
			status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
		if (bw)
			status->enc_flags |= RX_ENC_FLAG_40MHZ;
			status->bw = RATE_INFO_BW_40;
		break;
	case HTT_RX_VHT:
	case HTT_RX_VHT_WITH_TXBF:
@@ -700,18 +700,18 @@ static void ath10k_htt_rx_h_rates(struct ath10k *ar,
			break;
		/* 40MHZ */
		case 1:
			status->enc_flags |= RX_ENC_FLAG_40MHZ;
			status->bw = RATE_INFO_BW_40;
			break;
		/* 80MHZ */
		case 2:
			status->enc_flags |= RX_ENC_FLAG_80MHZ;
			status->bw = RATE_INFO_BW_80;
			break;
		case 3:
			status->enc_flags |= RX_ENC_FLAG_160MHZ;
			status->bw = RATE_INFO_BW_160;
			break;
		}

		status->enc_flags |= RX_ENC_FLAG_VHT;
		status->encoding = RX_ENC_VHT;
		break;
	default:
		break;
@@ -875,11 +875,8 @@ static void ath10k_htt_rx_h_ppdu(struct ath10k *ar,
		status->freq = 0;
		status->rate_idx = 0;
		status->vht_nss = 0;
		status->enc_flags &= ~(RX_ENC_FLAG_HT |
				       RX_ENC_FLAG_VHT |
				       RX_ENC_FLAG_SHORT_GI |
				       RX_ENC_FLAG_40MHZ |
				       RX_ENC_FLAG_80MHZ);
		status->encoding = RX_ENC_LEGACY;
		status->bw = RATE_INFO_BW_20;
		status->flag &= ~RX_FLAG_MACTIME_END;
		status->flag |= RX_FLAG_NO_SIGNAL_VAL;

@@ -941,13 +938,12 @@ static void ath10k_process_rx(struct ath10k *ar,
		   is_multicast_ether_addr(ieee80211_get_DA(hdr)) ?
							"mcast" : "ucast",
		   (__le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_SEQ) >> 4,
		   (status->enc_flags & (RX_ENC_FLAG_HT | RX_ENC_FLAG_VHT)) == 0 ?
		   "legacy" : "",
		   status->enc_flags & RX_ENC_FLAG_HT ? "ht" : "",
		   status->enc_flags & RX_ENC_FLAG_VHT ? "vht" : "",
		   status->enc_flags & RX_ENC_FLAG_40MHZ ? "40" : "",
		   status->enc_flags & RX_ENC_FLAG_80MHZ ? "80" : "",
		   status->enc_flags & RX_ENC_FLAG_160MHZ ? "160" : "",
		   (status->encoding == RX_ENC_LEGACY) ? "legacy" : "",
		   (status->encoding == RX_ENC_HT) ? "ht" : "",
		   (status->encoding == RX_ENC_VHT) ? "vht" : "",
		   (status->bw == RATE_INFO_BW_40) ? "40" : "",
		   (status->bw == RATE_INFO_BW_80) ? "80" : "",
		   (status->bw == RATE_INFO_BW_160) ? "160" : "",
		   status->enc_flags & RX_ENC_FLAG_SHORT_GI ? "sgi " : "",
		   status->rate_idx,
		   status->vht_nss,
+2 −2
Original line number Diff line number Diff line
@@ -1414,10 +1414,10 @@ ath5k_receive_frame(struct ath5k_hw *ah, struct sk_buff *skb,
	rxs->flag |= ath5k_rx_decrypted(ah, skb, rs);
	switch (ah->ah_bwmode) {
	case AR5K_BWMODE_5MHZ:
		rxs->enc_flags |= RX_ENC_FLAG_5MHZ;
		rxs->bw = RATE_INFO_BW_5;
		break;
	case AR5K_BWMODE_10MHZ:
		rxs->enc_flags |= RX_ENC_FLAG_10MHZ;
		rxs->bw = RATE_INFO_BW_10;
		break;
	default:
		break;
+1 −0
Original line number Diff line number Diff line
@@ -495,6 +495,7 @@ int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah, struct ath_rx_status *rxs,
	rxs->rs_status = 0;
	rxs->rs_flags =  0;
	rxs->enc_flags = 0;
	rxs->bw = RATE_INFO_BW_20;

	rxs->rs_datalen = rxsp->status2 & AR_DataLen;
	rxs->rs_tstamp =  rxsp->status3;
+5 −3
Original line number Diff line number Diff line
@@ -181,13 +181,15 @@ int ath9k_cmn_process_rate(struct ath_common *common,
	sband = hw->wiphy->bands[band];

	if (IS_CHAN_QUARTER_RATE(ah->curchan))
		rxs->enc_flags |= RX_ENC_FLAG_5MHZ;
		rxs->bw = RATE_INFO_BW_5;
	else if (IS_CHAN_HALF_RATE(ah->curchan))
		rxs->enc_flags |= RX_ENC_FLAG_10MHZ;
		rxs->bw = RATE_INFO_BW_10;

	if (rx_stats->rs_rate & 0x80) {
		/* HT rate */
		rxs->enc_flags |= RX_ENC_FLAG_HT | rx_stats->enc_flags;
		rxs->encoding = RX_ENC_HT;
		rxs->enc_flags |= rx_stats->enc_flags;
		rxs->bw = rx_stats->bw;
		rxs->rate_idx = rx_stats->rs_rate & 0x7f;
		return 0;
	}
+1 −1
Original line number Diff line number Diff line
@@ -116,7 +116,7 @@ void ath_debug_rate_stats(struct ath_softc *sc,
		if (rxs->rate_idx >= ARRAY_SIZE(rstats->ht_stats))
			goto exit;

		if (rxs->enc_flags & RX_ENC_FLAG_40MHZ)
		if ((rxs->bw == RATE_INFO_BW_40))
			rstats->ht_stats[rxs->rate_idx].ht40_cnt++;
		else
			rstats->ht_stats[rxs->rate_idx].ht20_cnt++;
Loading