mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
mt76: add an intermediate struct for rx status information
Preparation for passing in more internal rx data via skb->cb Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
+27
-1
@@ -384,10 +384,36 @@ int mt76_get_survey(struct ieee80211_hw *hw, int idx,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76_get_survey);
|
||||
|
||||
static void
|
||||
mt76_rx_convert(struct sk_buff *skb)
|
||||
{
|
||||
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
|
||||
struct mt76_rx_status mstat;
|
||||
|
||||
mstat = *((struct mt76_rx_status *) skb->cb);
|
||||
memset(status, 0, sizeof(*status));
|
||||
|
||||
status->flag = mstat.flag;
|
||||
status->freq = mstat.freq;
|
||||
status->vht_flag = mstat.vht_flag;
|
||||
status->rate_idx = mstat.rate_idx;
|
||||
status->vht_nss = mstat.vht_nss;
|
||||
status->rx_flags = mstat.rx_flags;
|
||||
status->band = mstat.band;
|
||||
status->signal = mstat.signal;
|
||||
status->chains = mstat.chains;
|
||||
|
||||
BUILD_BUG_ON(sizeof(mstat) > sizeof(skb->cb));
|
||||
BUILD_BUG_ON(sizeof(status->chain_signal) != sizeof(mstat.chain_signal));
|
||||
memcpy(status->chain_signal, mstat.chain_signal, sizeof(mstat.chain_signal));
|
||||
}
|
||||
|
||||
void mt76_rx_complete(struct mt76_dev *dev, enum mt76_rxq_id q)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
|
||||
while ((skb = __skb_dequeue(&dev->rx_skb[q])) != NULL)
|
||||
while ((skb = __skb_dequeue(&dev->rx_skb[q])) != NULL) {
|
||||
mt76_rx_convert(skb);
|
||||
ieee80211_rx_napi(dev->hw, NULL, skb, &dev->napi[q]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -250,6 +250,19 @@ struct mt76_rate_power {
|
||||
};
|
||||
};
|
||||
|
||||
struct mt76_rx_status {
|
||||
u64 flag;
|
||||
u16 freq;
|
||||
u8 vht_flag;
|
||||
u8 rate_idx;
|
||||
u8 vht_nss;
|
||||
u8 rx_flags;
|
||||
u8 band;
|
||||
u8 signal;
|
||||
u8 chains;
|
||||
s8 chain_signal[IEEE80211_MAX_CHAINS];
|
||||
};
|
||||
|
||||
#define mt76_rr(dev, ...) (dev)->mt76.bus->rr(&((dev)->mt76), __VA_ARGS__)
|
||||
#define mt76_wr(dev, ...) (dev)->mt76.bus->wr(&((dev)->mt76), __VA_ARGS__)
|
||||
#define mt76_rmw(dev, ...) (dev)->mt76.bus->rmw(&((dev)->mt76), __VA_ARGS__)
|
||||
|
||||
+1
-1
@@ -353,7 +353,7 @@ mt7603_get_rate(struct mt7603_dev *dev, struct ieee80211_supported_band *sband,
|
||||
int
|
||||
mt7603_mac_fill_rx(struct mt7603_dev *dev, struct sk_buff *skb)
|
||||
{
|
||||
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
|
||||
struct mt76_rx_status *status = (struct mt76_rx_status *) skb->cb;
|
||||
struct ieee80211_supported_band *sband;
|
||||
__le32 *rxd = (__le32 *) skb->data;
|
||||
u32 rxd0 = le32_to_cpu(rxd[0]);
|
||||
|
||||
+2
-2
@@ -42,7 +42,7 @@ void mt76x2_mac_set_ext_mac(struct mt76x2_dev *dev, u8 idx, const u8 *addr)
|
||||
}
|
||||
|
||||
static int
|
||||
mt76x2_mac_process_rate(struct ieee80211_rx_status *status, u16 rate)
|
||||
mt76x2_mac_process_rate(struct mt76_rx_status *status, u16 rate)
|
||||
{
|
||||
u8 idx = FIELD_GET(MT_RXWI_RATE_INDEX, rate);
|
||||
|
||||
@@ -281,7 +281,7 @@ static void mt76x2_remove_hdr_pad(struct sk_buff *skb)
|
||||
int mt76x2_mac_process_rx(struct mt76x2_dev *dev, struct sk_buff *skb,
|
||||
void *rxi)
|
||||
{
|
||||
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
|
||||
struct mt76_rx_status *status = (struct mt76_rx_status *) skb->cb;
|
||||
struct mt76x2_rxwi *rxwi = rxi;
|
||||
u32 ctl = le32_to_cpu(rxwi->ctl);
|
||||
u16 rate = le16_to_cpu(rxwi->rate);
|
||||
|
||||
Reference in New Issue
Block a user