From 0b8b15f97c362638a3317e221869a783bb0c2764 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 25 Oct 2018 12:58:51 +0200 Subject: [PATCH] mt7603: use common mmio mcu struct Signed-off-by: Felix Fietkau --- mt7603/dma.c | 4 ++-- mt7603/mcu.c | 31 +++++++++++++++---------------- mt7603/mt7603.h | 15 ++------------- 3 files changed, 19 insertions(+), 31 deletions(-) diff --git a/mt7603/dma.c b/mt7603/dma.c index b41d747d..81501307 100644 --- a/mt7603/dma.c +++ b/mt7603/dma.c @@ -135,8 +135,8 @@ int mt7603_dma_init(struct mt7603_dev *dev) mt76_dma_attach(&dev->mt76); - init_waitqueue_head(&dev->mcu.wait); - skb_queue_head_init(&dev->mcu.res_q); + init_waitqueue_head(&dev->mt76.mmio.mcu.wait); + skb_queue_head_init(&dev->mt76.mmio.mcu.res_q); tasklet_init(&dev->tx_tasklet, mt7603_tx_tasklet, (unsigned long) dev); diff --git a/mt7603/mcu.c b/mt7603/mcu.c index 86700c05..c9325dcc 100644 --- a/mt7603/mcu.c +++ b/mt7603/mcu.c @@ -45,37 +45,39 @@ static struct sk_buff *mt7603_mcu_msg_alloc(const void *data, int len) void mt7603_mcu_rx_event(struct mt7603_dev *dev, struct sk_buff *skb) { - skb_queue_tail(&dev->mcu.res_q, skb); - wake_up(&dev->mcu.wait); + skb_queue_tail(&dev->mt76.mmio.mcu.res_q, skb); + wake_up(&dev->mt76.mmio.mcu.wait); } static struct sk_buff * mt7603_mcu_get_response(struct mt7603_dev *dev, unsigned long expires) { + struct mt76_dev *mdev = &dev->mt76; unsigned long timeout; if (!time_is_after_jiffies(expires)) return NULL; timeout = expires - jiffies; - wait_event_timeout(dev->mcu.wait, !skb_queue_empty(&dev->mcu.res_q), + wait_event_timeout(mdev->mmio.mcu.wait, !skb_queue_empty(&mdev->mmio.mcu.res_q), timeout); - return skb_dequeue(&dev->mcu.res_q); + return skb_dequeue(&mdev->mmio.mcu.res_q); } static int __mt7603_mcu_msg_send(struct mt7603_dev *dev, struct sk_buff *skb, int cmd, int query, int *wait_seq) { - int hdrlen = dev->mcu.running ? sizeof(struct mt7603_mcu_txd) : 12; + int hdrlen = dev->mcu_running ? sizeof(struct mt7603_mcu_txd) : 12; + struct mt76_dev *mdev = &dev->mt76; struct mt7603_mcu_txd *txd; u8 seq; if (!skb) return -EINVAL; - seq = ++dev->mcu.msg_seq & 0xf; + seq = ++mdev->mmio.mcu.msg_seq & 0xf; if (!seq) - seq = ++dev->mcu.msg_seq & 0xf; + seq = ++mdev->mmio.mcu.msg_seq & 0xf; txd = (struct mt7603_mcu_txd *) skb_push(skb, hdrlen); memset(txd, 0, hdrlen); @@ -109,11 +111,12 @@ static int mt7603_mcu_msg_send(struct mt7603_dev *dev, struct sk_buff *skb, int cmd, int query, struct sk_buff **skb_ret) { + struct mt76_dev *mdev = &dev->mt76; unsigned long expires = jiffies + HZ; struct mt7603_mcu_rxd *rxd; int ret, seq; - mutex_lock(&dev->mcu.mutex); + mutex_lock(&mdev->mmio.mcu.mutex); ret = __mt7603_mcu_msg_send(dev, skb, cmd, query, &seq); if (ret) @@ -143,7 +146,7 @@ mt7603_mcu_msg_send(struct mt7603_dev *dev, struct sk_buff *skb, int cmd, int qu } out: - mutex_unlock(&dev->mcu.mutex); + mutex_unlock(&mdev->mmio.mcu.mutex); return ret; } @@ -301,7 +304,7 @@ running: mt76_set(dev, MT_SCH_4, BIT(8)); mt76_clear(dev, MT_SCH_4, BIT(8)); - dev->mcu.running = true; + dev->mcu_running = true; printk("firmware init done\n"); out: @@ -312,18 +315,14 @@ out: int mt7603_mcu_init(struct mt7603_dev *dev) { - mutex_init(&dev->mcu.mutex); + mutex_init(&dev->mt76.mmio.mcu.mutex); return mt7603_load_firmware(dev); } void mt7603_mcu_exit(struct mt7603_dev *dev) { - struct sk_buff *skb; - mt7603_mcu_restart(dev); - - while ((skb = skb_dequeue(&dev->mcu.res_q)) != NULL) - dev_kfree_skb(skb); + skb_queue_purge(&dev->mt76.mmio.mcu.res_q); } int mt7603_mcu_set_eeprom(struct mt7603_dev *dev) diff --git a/mt7603/mt7603.h b/mt7603/mt7603.h index 1097c142..5af22233 100644 --- a/mt7603/mt7603.h +++ b/mt7603/mt7603.h @@ -61,18 +61,6 @@ enum mt7603_bw { MT_BW_80, }; -struct mt7603_mcu { - struct mutex mutex; - - wait_queue_head_t wait; - struct sk_buff_head res_q; - - struct mt76_queue q_rx; - u32 msg_seq; - - bool running; -}; - struct mt7603_sta { struct mt76_wcid wcid; /* must be first */ @@ -145,9 +133,10 @@ struct mt7603_dev { ktime_t survey_time; int beacon_int; - struct mt7603_mcu mcu; struct mt76_queue q_rx; + bool mcu_running; + u8 beacon_mask; u8 beacon_check;