mt76: add Rx stats support for radiotap
HE deivces need to add Rx radiotap header. Signed-off-by: Ryder Lee <ryder.lee@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
af4a2f2fdd
commit
77ae1d5e13
|
@ -119,7 +119,7 @@ static void
|
|||
mt76_rx_aggr_check_ctl(struct sk_buff *skb, struct sk_buff_head *frames)
|
||||
{
|
||||
struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
|
||||
struct ieee80211_bar *bar = (struct ieee80211_bar *)skb->data;
|
||||
struct ieee80211_bar *bar = mt76_skb_get_hdr(skb);
|
||||
struct mt76_wcid *wcid = status->wcid;
|
||||
struct mt76_rx_tid *tid;
|
||||
u16 seqno;
|
||||
|
@ -147,7 +147,7 @@ mt76_rx_aggr_check_ctl(struct sk_buff *skb, struct sk_buff_head *frames)
|
|||
void mt76_rx_aggr_reorder(struct sk_buff *skb, struct sk_buff_head *frames)
|
||||
{
|
||||
struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
|
||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
||||
struct ieee80211_hdr *hdr = mt76_skb_get_hdr(skb);
|
||||
struct mt76_wcid *wcid = status->wcid;
|
||||
struct ieee80211_sta *sta;
|
||||
struct mt76_rx_tid *tid;
|
||||
|
|
|
@ -726,7 +726,7 @@ mt76_check_ccmp_pn(struct sk_buff *skb)
|
|||
* Validate the first fragment both here and in mac80211
|
||||
* All further fragments will be validated by mac80211 only.
|
||||
*/
|
||||
hdr = (struct ieee80211_hdr *)skb->data;
|
||||
hdr = mt76_skb_get_hdr(skb);
|
||||
if (ieee80211_is_frag(hdr) &&
|
||||
!ieee80211_is_first_frag(hdr->frame_control))
|
||||
return 0;
|
||||
|
@ -799,7 +799,7 @@ mt76_airtime_flush_ampdu(struct mt76_dev *dev)
|
|||
static void
|
||||
mt76_airtime_check(struct mt76_dev *dev, struct sk_buff *skb)
|
||||
{
|
||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
||||
struct ieee80211_hdr *hdr = mt76_skb_get_hdr(skb);
|
||||
struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
|
||||
struct mt76_wcid *wcid = status->wcid;
|
||||
|
||||
|
@ -836,7 +836,7 @@ static void
|
|||
mt76_check_sta(struct mt76_dev *dev, struct sk_buff *skb)
|
||||
{
|
||||
struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
|
||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
||||
struct ieee80211_hdr *hdr = mt76_skb_get_hdr(skb);
|
||||
struct ieee80211_sta *sta;
|
||||
struct ieee80211_hw *hw;
|
||||
struct mt76_wcid *wcid = status->wcid;
|
||||
|
|
|
@ -746,6 +746,25 @@ static inline struct mt76_tx_cb *mt76_tx_skb_cb(struct sk_buff *skb)
|
|||
return ((void *)IEEE80211_SKB_CB(skb)->status.status_driver_data);
|
||||
}
|
||||
|
||||
static inline void *mt76_skb_get_hdr(struct sk_buff *skb)
|
||||
{
|
||||
struct mt76_rx_status mstat;
|
||||
u8 *data = skb->data;
|
||||
|
||||
/* Alignment concerns */
|
||||
BUILD_BUG_ON(sizeof(struct ieee80211_radiotap_he) % 4);
|
||||
BUILD_BUG_ON(sizeof(struct ieee80211_radiotap_he_mu) % 4);
|
||||
|
||||
mstat = *((struct mt76_rx_status *)skb->cb);
|
||||
|
||||
if (mstat.flag & RX_FLAG_RADIOTAP_HE)
|
||||
data += sizeof(struct ieee80211_radiotap_he);
|
||||
if (mstat.flag & RX_FLAG_RADIOTAP_HE_MU)
|
||||
data += sizeof(struct ieee80211_radiotap_he_mu);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
static inline void mt76_insert_hdr_pad(struct sk_buff *skb)
|
||||
{
|
||||
int len = ieee80211_get_hdrlen_from_skb(skb);
|
||||
|
|
Loading…
Reference in New Issue