diff options
author | Felix Fietkau <nbd@nbd.name> | 2018-01-24 10:19:12 -0500 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2018-01-26 04:18:32 -0500 |
commit | 4e34249e9565dc123ceb349b31acb9305673313e (patch) | |
tree | 4bf60c70734d89cfb99116bb3d76ea406828f2d7 | |
parent | 1342cfea315aaffdc66e26fb595694928723e205 (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.c | 29 | ||||
-rw-r--r-- | drivers/net/wireless/mediatek/mt76/mt76.h | 13 | ||||
-rw-r--r-- | drivers/net/wireless/mediatek/mt76/mt76x2_mac.c | 4 |
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 | } |
385 | EXPORT_SYMBOL_GPL(mt76_get_survey); | 385 | EXPORT_SYMBOL_GPL(mt76_get_survey); |
386 | 386 | ||
387 | static void | ||
388 | mt76_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 | |||
387 | void mt76_rx_complete(struct mt76_dev *dev, enum mt76_rxq_id q) | 412 | void 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 | ||
253 | struct 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 | ||
31 | static int | 31 | static int |
32 | mt76x2_mac_process_rate(struct ieee80211_rx_status *status, u16 rate) | 32 | mt76x2_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) | |||
268 | int mt76x2_mac_process_rx(struct mt76x2_dev *dev, struct sk_buff *skb, | 268 | int 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); |