dma.c (68f0f2690e183306b52671a9ad09fb31808b0500) dma.c (e90354e0452d33f3dc77d7f5c0ff7033f97e1fbf)
1// SPDX-License-Identifier: ISC
2/* Copyright (C) 2019 MediaTek Inc.
3 *
4 * Author: Ryder Lee <ryder.lee@mediatek.com>
5 * Roy Luo <royluo@google.com>
6 * Lorenzo Bianconi <lorenzo@kernel.org>
7 * Felix Fietkau <nbd@nbd.name>
8 */

--- 80 unchanged lines hidden (view full) ---

89 }
90
91 ret = mt7615_init_tx_queue(dev, &dev->mt76.q_tx[MT_TXQ_MCU],
92 MT7615_TXQ_MCU,
93 MT7615_TX_MCU_RING_SIZE);
94 return 0;
95}
96
1// SPDX-License-Identifier: ISC
2/* Copyright (C) 2019 MediaTek Inc.
3 *
4 * Author: Ryder Lee <ryder.lee@mediatek.com>
5 * Roy Luo <royluo@google.com>
6 * Lorenzo Bianconi <lorenzo@kernel.org>
7 * Felix Fietkau <nbd@nbd.name>
8 */

--- 80 unchanged lines hidden (view full) ---

89 }
90
91 ret = mt7615_init_tx_queue(dev, &dev->mt76.q_tx[MT_TXQ_MCU],
92 MT7615_TXQ_MCU,
93 MT7615_TX_MCU_RING_SIZE);
94 return 0;
95}
96
97void mt7615_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
98 struct sk_buff *skb)
99{
100 struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
101 __le32 *rxd = (__le32 *)skb->data;
102 __le32 *end = (__le32 *)&skb->data[skb->len];
103 enum rx_pkt_type type;
104 u16 flag;
105
106 type = FIELD_GET(MT_RXD0_PKT_TYPE, le32_to_cpu(rxd[0]));
107 flag = FIELD_GET(MT_RXD0_PKT_FLAG, le32_to_cpu(rxd[0]));
108 if (type == PKT_TYPE_RX_EVENT && flag == 0x1)
109 type = PKT_TYPE_NORMAL_MCU;
110
111 switch (type) {
112 case PKT_TYPE_TXS:
113 for (rxd++; rxd + 7 <= end; rxd += 7)
114 mt7615_mac_add_txs(dev, rxd);
115 dev_kfree_skb(skb);
116 break;
117 case PKT_TYPE_TXRX_NOTIFY:
118 mt7615_mac_tx_free(dev, skb);
119 break;
120 case PKT_TYPE_RX_EVENT:
121 mt7615_mcu_rx_event(dev, skb);
122 break;
123 case PKT_TYPE_NORMAL_MCU:
124 case PKT_TYPE_NORMAL:
125 if (!mt7615_mac_fill_rx(dev, skb)) {
126 mt76_rx(&dev->mt76, q, skb);
127 return;
128 }
129 /* fall through */
130 default:
131 dev_kfree_skb(skb);
132 break;
133 }
134}
135
136static void
137mt7615_tx_cleanup(struct mt7615_dev *dev)
138{
139 int i;
140
141 mt76_queue_tx_cleanup(dev, MT_TXQ_MCU, false);
142 if (is_mt7615(&dev->mt76)) {
143 mt76_queue_tx_cleanup(dev, MT_TXQ_BE, false);

--- 185 unchanged lines hidden ---
97static void
98mt7615_tx_cleanup(struct mt7615_dev *dev)
99{
100 int i;
101
102 mt76_queue_tx_cleanup(dev, MT_TXQ_MCU, false);
103 if (is_mt7615(&dev->mt76)) {
104 mt76_queue_tx_cleanup(dev, MT_TXQ_BE, false);

--- 185 unchanged lines hidden ---