mt76: mt7663s: do not use altx for ctl/mgmt traffic
authorLorenzo Bianconi <lorenzo@kernel.org>
Sat, 5 Sep 2020 09:26:01 +0000 (11:26 +0200)
committerFelix Fietkau <nbd@nbd.name>
Thu, 24 Sep 2020 16:10:19 +0000 (18:10 +0200)
Since the sdio engine does not report quota for altx queue, move
ctl/mgmt traffic to standard data queues

Tested-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/sdio.c
drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c

index e0603e8..8621c6f 100644 (file)
@@ -323,7 +323,7 @@ static int mt7663s_probe(struct sdio_func *func,
 {
        static const struct mt76_driver_ops drv_ops = {
                .txwi_size = MT_USB_TXD_SIZE,
-               .drv_flags = MT_DRV_RX_DMA_HDR | MT_DRV_HW_MGMT_TXQ,
+               .drv_flags = MT_DRV_RX_DMA_HDR,
                .tx_prepare_skb = mt7663_usb_sdio_tx_prepare_skb,
                .tx_complete_skb = mt7663_usb_sdio_tx_complete_skb,
                .tx_status_data = mt7663_usb_sdio_tx_status_data,
index 3557df5..b2b528c 100644 (file)
@@ -124,16 +124,14 @@ static int mt7663s_tx_update_sched(struct mt76_dev *dev,
                                   bool mcu)
 {
        struct mt76_sdio *sdio = &dev->sdio;
-       struct mt76_phy *mphy = &dev->phy;
-       struct ieee80211_hdr *hdr;
        int size, ret = -EBUSY;
 
+       if (!test_bit(MT76_STATE_MCU_RUNNING, &dev->phy.state))
+               return 0;
+
        size = DIV_ROUND_UP(e->buf_sz + sdio->sched.deficit, MT_PSE_PAGE_SZ);
 
        if (mcu) {
-               if (!test_bit(MT76_STATE_MCU_RUNNING, &mphy->state))
-                       return 0;
-
                mutex_lock(&sdio->sched.lock);
                if (sdio->sched.pse_mcu_quota > size) {
                        sdio->sched.pse_mcu_quota -= size;
@@ -144,10 +142,6 @@ static int mt7663s_tx_update_sched(struct mt76_dev *dev,
                return ret;
        }
 
-       hdr = (struct ieee80211_hdr *)(e->skb->data + MT_USB_TXD_SIZE);
-       if (ieee80211_is_ctl(hdr->frame_control))
-               return 0;
-
        mutex_lock(&sdio->sched.lock);
        if (sdio->sched.pse_data_quota > size &&
            sdio->sched.ple_data_quota > 0) {