wifi: mt76: add rx_check callback for usb devices
Introduce rx_check callback support for mt7663u and mt7921u drivers. Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
60c45a78c3
commit
12d7440e3b
|
@ -119,6 +119,7 @@ static int mt7663u_probe(struct usb_interface *usb_intf,
|
||||||
.tx_complete_skb = mt7663_usb_sdio_tx_complete_skb,
|
.tx_complete_skb = mt7663_usb_sdio_tx_complete_skb,
|
||||||
.tx_status_data = mt7663_usb_sdio_tx_status_data,
|
.tx_status_data = mt7663_usb_sdio_tx_status_data,
|
||||||
.rx_skb = mt7615_queue_rx_skb,
|
.rx_skb = mt7615_queue_rx_skb,
|
||||||
|
.rx_check = mt7615_rx_check,
|
||||||
.sta_ps = mt7615_sta_ps,
|
.sta_ps = mt7615_sta_ps,
|
||||||
.sta_add = mt7615_mac_sta_add,
|
.sta_add = mt7615_mac_sta_add,
|
||||||
.sta_remove = mt7615_mac_sta_remove,
|
.sta_remove = mt7615_mac_sta_remove,
|
||||||
|
|
|
@ -554,6 +554,26 @@ out:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(mt7921_mac_add_txs);
|
EXPORT_SYMBOL_GPL(mt7921_mac_add_txs);
|
||||||
|
|
||||||
|
bool mt7921_rx_check(struct mt76_dev *mdev, void *data, int len)
|
||||||
|
{
|
||||||
|
struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
|
||||||
|
__le32 *rxd = (__le32 *)data;
|
||||||
|
__le32 *end = (__le32 *)&rxd[len / 4];
|
||||||
|
enum rx_pkt_type type;
|
||||||
|
|
||||||
|
type = le32_get_bits(rxd[0], MT_RXD0_PKT_TYPE);
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case PKT_TYPE_TXS:
|
||||||
|
for (rxd += 2; rxd + 8 <= end; rxd += 8)
|
||||||
|
mt7921_mac_add_txs(dev, rxd);
|
||||||
|
return false;
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(mt7921_rx_check);
|
||||||
|
|
||||||
void mt7921_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
|
void mt7921_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
|
||||||
struct sk_buff *skb)
|
struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
|
|
|
@ -380,6 +380,7 @@ int mt7921e_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
|
||||||
|
|
||||||
void mt7921_tx_worker(struct mt76_worker *w);
|
void mt7921_tx_worker(struct mt76_worker *w);
|
||||||
void mt7921_tx_token_put(struct mt7921_dev *dev);
|
void mt7921_tx_token_put(struct mt7921_dev *dev);
|
||||||
|
bool mt7921_rx_check(struct mt76_dev *mdev, void *data, int len);
|
||||||
void mt7921_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
|
void mt7921_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
|
||||||
struct sk_buff *skb);
|
struct sk_buff *skb);
|
||||||
void mt7921_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps);
|
void mt7921_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps);
|
||||||
|
|
|
@ -183,6 +183,7 @@ static int mt7921u_probe(struct usb_interface *usb_intf,
|
||||||
.tx_complete_skb = mt7921_usb_sdio_tx_complete_skb,
|
.tx_complete_skb = mt7921_usb_sdio_tx_complete_skb,
|
||||||
.tx_status_data = mt7921_usb_sdio_tx_status_data,
|
.tx_status_data = mt7921_usb_sdio_tx_status_data,
|
||||||
.rx_skb = mt7921_queue_rx_skb,
|
.rx_skb = mt7921_queue_rx_skb,
|
||||||
|
.rx_check = mt7921_rx_check,
|
||||||
.sta_ps = mt7921_sta_ps,
|
.sta_ps = mt7921_sta_ps,
|
||||||
.sta_add = mt7921_mac_sta_add,
|
.sta_add = mt7921_mac_sta_add,
|
||||||
.sta_assoc = mt7921_mac_sta_assoc,
|
.sta_assoc = mt7921_mac_sta_assoc,
|
||||||
|
|
|
@ -528,6 +528,11 @@ mt76u_process_rx_entry(struct mt76_dev *dev, struct urb *urb,
|
||||||
|
|
||||||
head_room = drv_flags & MT_DRV_RX_DMA_HDR ? 0 : MT_DMA_HDR_LEN;
|
head_room = drv_flags & MT_DRV_RX_DMA_HDR ? 0 : MT_DMA_HDR_LEN;
|
||||||
data_len = min_t(int, len, data_len - head_room);
|
data_len = min_t(int, len, data_len - head_room);
|
||||||
|
|
||||||
|
if (len == data_len &&
|
||||||
|
dev->drv->rx_check && !dev->drv->rx_check(dev, data, data_len))
|
||||||
|
return 0;
|
||||||
|
|
||||||
skb = mt76u_build_rx_skb(dev, data, data_len, buf_size);
|
skb = mt76u_build_rx_skb(dev, data, data_len, buf_size);
|
||||||
if (!skb)
|
if (!skb)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue