aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2018-01-24 10:19:12 -0500
committerKalle Valo <kvalo@codeaurora.org>2018-01-26 04:18:32 -0500
commit4e34249e9565dc123ceb349b31acb9305673313e (patch)
tree4bf60c70734d89cfb99116bb3d76ea406828f2d7
parent1342cfea315aaffdc66e26fb595694928723e205 (diff)
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 <nbd@nbd.name> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
-rw-r--r--drivers/net/wireless/mediatek/mt76/mac80211.c29
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt76.h13
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt76x2_mac.c4
3 files changed, 43 insertions, 3 deletions
diff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c b/drivers/net/wireless/mediatek/mt76/mac80211.c
index 3acf0e175d71..258d2623d1bf 100644
--- a/drivers/net/wireless/mediatek/mt76/mac80211.c
+++ b/drivers/net/wireless/mediatek/mt76/mac80211.c
@@ -384,10 +384,37 @@ int mt76_get_survey(struct ieee80211_hw *hw, int idx,
384} 384}
385EXPORT_SYMBOL_GPL(mt76_get_survey); 385EXPORT_SYMBOL_GPL(mt76_get_survey);
386 386
387static void
388mt76_rx_convert(struct sk_buff *skb)
389{
390 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
391 struct mt76_rx_status mstat;
392
393 mstat = *((struct mt76_rx_status *) skb->cb);
394 memset(status, 0, sizeof(*status));
395
396 status->flag = mstat.flag;
397 status->freq = mstat.freq;
398 status->enc_flags = mstat.enc_flags;
399 status->encoding = mstat.encoding;
400 status->bw = mstat.bw;
401 status->rate_idx = mstat.rate_idx;
402 status->nss = mstat.nss;
403 status->band = mstat.band;
404 status->signal = mstat.signal;
405 status->chains = mstat.chains;
406
407 BUILD_BUG_ON(sizeof(mstat) > sizeof(skb->cb));
408 BUILD_BUG_ON(sizeof(status->chain_signal) != sizeof(mstat.chain_signal));
409 memcpy(status->chain_signal, mstat.chain_signal, sizeof(mstat.chain_signal));
410}
411
387void mt76_rx_complete(struct mt76_dev *dev, enum mt76_rxq_id q) 412void mt76_rx_complete(struct mt76_dev *dev, enum mt76_rxq_id q)
388{ 413{
389 struct sk_buff *skb; 414 struct sk_buff *skb;
390 415
391 while ((skb = __skb_dequeue(&dev->rx_skb[q])) != NULL) 416 while ((skb = __skb_dequeue(&dev->rx_skb[q])) != NULL) {
417 mt76_rx_convert(skb);
392 ieee80211_rx_napi(dev->hw, NULL, skb, &dev->napi[q]); 418 ieee80211_rx_napi(dev->hw, NULL, skb, &dev->napi[q]);
419 }
393} 420}
diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
index f88d9a15210a..be4846ee4828 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
@@ -250,6 +250,19 @@ struct mt76_rate_power {
250 }; 250 };
251}; 251};
252 252
253struct mt76_rx_status {
254 u32 flag;
255 u16 freq;
256 u8 enc_flags;
257 u8 encoding:2, bw:3;
258 u8 rate_idx;
259 u8 nss;
260 u8 band;
261 u8 signal;
262 u8 chains;
263 s8 chain_signal[IEEE80211_MAX_CHAINS];
264};
265
253#define mt76_rr(dev, ...) (dev)->mt76.bus->rr(&((dev)->mt76), __VA_ARGS__) 266#define mt76_rr(dev, ...) (dev)->mt76.bus->rr(&((dev)->mt76), __VA_ARGS__)
254#define mt76_wr(dev, ...) (dev)->mt76.bus->wr(&((dev)->mt76), __VA_ARGS__) 267#define mt76_wr(dev, ...) (dev)->mt76.bus->wr(&((dev)->mt76), __VA_ARGS__)
255#define mt76_rmw(dev, ...) (dev)->mt76.bus->rmw(&((dev)->mt76), __VA_ARGS__) 268#define mt76_rmw(dev, ...) (dev)->mt76.bus->rmw(&((dev)->mt76), __VA_ARGS__)
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2_mac.c b/drivers/net/wireless/mediatek/mt76/mt76x2_mac.c
index 98219b971463..2e12fc0d5c9e 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2_mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2_mac.c
@@ -29,7 +29,7 @@ void mt76x2_mac_set_bssid(struct mt76x2_dev *dev, u8 idx, const u8 *addr)
29} 29}
30 30
31static int 31static int
32mt76x2_mac_process_rate(struct ieee80211_rx_status *status, u16 rate) 32mt76x2_mac_process_rate(struct mt76_rx_status *status, u16 rate)
33{ 33{
34 u8 idx = FIELD_GET(MT_RXWI_RATE_INDEX, rate); 34 u8 idx = FIELD_GET(MT_RXWI_RATE_INDEX, rate);
35 35
@@ -268,7 +268,7 @@ static void mt76x2_remove_hdr_pad(struct sk_buff *skb)
268int mt76x2_mac_process_rx(struct mt76x2_dev *dev, struct sk_buff *skb, 268int mt76x2_mac_process_rx(struct mt76x2_dev *dev, struct sk_buff *skb,
269 void *rxi) 269 void *rxi)
270{ 270{
271 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); 271 struct mt76_rx_status *status = (struct mt76_rx_status *) skb->cb;
272 struct mt76x2_rxwi *rxwi = rxi; 272 struct mt76x2_rxwi *rxwi = rxi;
273 u32 ctl = le32_to_cpu(rxwi->ctl); 273 u32 ctl = le32_to_cpu(rxwi->ctl);
274 u16 rate = le16_to_cpu(rxwi->rate); 274 u16 rate = le16_to_cpu(rxwi->rate);