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

Commit f6307dda authored by Sujith Manoharan's avatar Sujith Manoharan Committed by John W. Linville
Browse files

ath9k: Use a subroutine to check for "mybeacon"

parent 2b721118
Loading
Loading
Loading
Loading
+23 −13
Original line number Original line Diff line number Diff line
@@ -1160,6 +1160,24 @@ static void ath9k_apply_ampdu_details(struct ath_softc *sc,
	}
	}
}
}


static bool ath9k_is_mybeacon(struct ath_softc *sc, struct sk_buff *skb)
{
	struct ath_hw *ah = sc->sc_ah;
	struct ath_common *common = ath9k_hw_common(ah);
	struct ieee80211_hdr *hdr;

	hdr = (struct ieee80211_hdr *) (skb->data + ah->caps.rx_status_len);

	if (ieee80211_is_beacon(hdr->frame_control)) {
		RX_STAT_INC(rx_beacons);
		if (!is_zero_ether_addr(common->curbssid) &&
		    ether_addr_equal(hdr->addr3, common->curbssid))
			return true;
	}

	return false;
}

int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
{
{
	struct ath_buf *bf;
	struct ath_buf *bf;
@@ -1175,7 +1193,6 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
	enum ath9k_rx_qtype qtype;
	enum ath9k_rx_qtype qtype;
	bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
	bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
	int dma_type;
	int dma_type;
	u8 rx_status_len = ah->caps.rx_status_len;
	u64 tsf = 0;
	u64 tsf = 0;
	u32 tsf_lower = 0;
	u32 tsf_lower = 0;
	unsigned long flags;
	unsigned long flags;
@@ -1216,18 +1233,10 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
		else
		else
			hdr_skb = skb;
			hdr_skb = skb;


		hdr = (struct ieee80211_hdr *) (hdr_skb->data + rx_status_len);
		rs.is_mybeacon = ath9k_is_mybeacon(sc, hdr_skb);
		rxs = IEEE80211_SKB_RXCB(hdr_skb);

		if (ieee80211_is_beacon(hdr->frame_control)) {
		hdr = (struct ieee80211_hdr *) (hdr_skb->data +
			RX_STAT_INC(rx_beacons);
						ah->caps.rx_status_len);
			if (!is_zero_ether_addr(common->curbssid) &&
			    ether_addr_equal(hdr->addr3, common->curbssid))
				rs.is_mybeacon = true;
			else
				rs.is_mybeacon = false;
		}
		else
			rs.is_mybeacon = false;


		if (ieee80211_is_data_present(hdr->frame_control) &&
		if (ieee80211_is_data_present(hdr->frame_control) &&
		    !ieee80211_is_qos_nullfunc(hdr->frame_control))
		    !ieee80211_is_qos_nullfunc(hdr->frame_control))
@@ -1235,6 +1244,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)


		ath_debug_stat_rx(sc, &rs);
		ath_debug_stat_rx(sc, &rs);


		rxs = IEEE80211_SKB_RXCB(hdr_skb);
		memset(rxs, 0, sizeof(struct ieee80211_rx_status));
		memset(rxs, 0, sizeof(struct ieee80211_rx_status));


		rxs->mactime = (tsf & ~0xffffffffULL) | rs.rs_tstamp;
		rxs->mactime = (tsf & ~0xffffffffULL) | rs.rs_tstamp;