mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-23 00:59:39 +07:00
mt76: move irq handler in mt76x02-lib moudle
Move mt76x02_irq_handler handler in mt76x02_mmio.c in order to be reused in mt76x0 driver. Move mt76x02_rx_poll_complete routine in mt76x02-lib module. Moreover remove pci_core.c and mt76x2/trace.{c,h} since are empty files Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
53d20fdb46
commit
9b43960b89
@ -146,6 +146,8 @@ void mt76x02_tx_complete(struct mt76_dev *dev, struct sk_buff *skb);
|
|||||||
bool mt76x02_tx_status_data(struct mt76_dev *dev, u8 *update);
|
bool mt76x02_tx_status_data(struct mt76_dev *dev, u8 *update);
|
||||||
void mt76x02_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
|
void mt76x02_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
|
||||||
struct sk_buff *skb);
|
struct sk_buff *skb);
|
||||||
|
void mt76x02_rx_poll_complete(struct mt76_dev *mdev, enum mt76_rxq_id q);
|
||||||
|
irqreturn_t mt76x02_irq_handler(int irq, void *dev_instance);
|
||||||
void mt76x02_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
|
void mt76x02_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
|
||||||
struct sk_buff *skb);
|
struct sk_buff *skb);
|
||||||
int mt76x02_tx_prepare_skb(struct mt76_dev *mdev, void *txwi,
|
int mt76x02_tx_prepare_skb(struct mt76_dev *mdev, void *txwi,
|
||||||
|
@ -16,8 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/irq.h>
|
||||||
|
|
||||||
#include "mt76x02.h"
|
#include "mt76x02.h"
|
||||||
|
#include "mt76x02_trace.h"
|
||||||
|
|
||||||
static int
|
static int
|
||||||
mt76x02_init_tx_queue(struct mt76x02_dev *dev, struct mt76_queue *q,
|
mt76x02_init_tx_queue(struct mt76x02_dev *dev, struct mt76_queue *q,
|
||||||
@ -136,6 +138,66 @@ int mt76x02_dma_init(struct mt76x02_dev *dev)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(mt76x02_dma_init);
|
EXPORT_SYMBOL_GPL(mt76x02_dma_init);
|
||||||
|
|
||||||
|
void mt76x02_rx_poll_complete(struct mt76_dev *mdev, enum mt76_rxq_id q)
|
||||||
|
{
|
||||||
|
struct mt76x02_dev *dev;
|
||||||
|
|
||||||
|
dev = container_of(mdev, struct mt76x02_dev, mt76);
|
||||||
|
mt76x02_irq_enable(dev, MT_INT_RX_DONE(q));
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(mt76x02_rx_poll_complete);
|
||||||
|
|
||||||
|
irqreturn_t mt76x02_irq_handler(int irq, void *dev_instance)
|
||||||
|
{
|
||||||
|
struct mt76x02_dev *dev = dev_instance;
|
||||||
|
u32 intr;
|
||||||
|
|
||||||
|
intr = mt76_rr(dev, MT_INT_SOURCE_CSR);
|
||||||
|
mt76_wr(dev, MT_INT_SOURCE_CSR, intr);
|
||||||
|
|
||||||
|
if (!test_bit(MT76_STATE_INITIALIZED, &dev->mt76.state))
|
||||||
|
return IRQ_NONE;
|
||||||
|
|
||||||
|
trace_dev_irq(dev, intr, dev->mt76.mmio.irqmask);
|
||||||
|
|
||||||
|
intr &= dev->mt76.mmio.irqmask;
|
||||||
|
|
||||||
|
if (intr & MT_INT_TX_DONE_ALL) {
|
||||||
|
mt76x02_irq_disable(dev, MT_INT_TX_DONE_ALL);
|
||||||
|
tasklet_schedule(&dev->tx_tasklet);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intr & MT_INT_RX_DONE(0)) {
|
||||||
|
mt76x02_irq_disable(dev, MT_INT_RX_DONE(0));
|
||||||
|
napi_schedule(&dev->mt76.napi[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intr & MT_INT_RX_DONE(1)) {
|
||||||
|
mt76x02_irq_disable(dev, MT_INT_RX_DONE(1));
|
||||||
|
napi_schedule(&dev->mt76.napi[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intr & MT_INT_PRE_TBTT)
|
||||||
|
tasklet_schedule(&dev->pre_tbtt_tasklet);
|
||||||
|
|
||||||
|
/* send buffered multicast frames now */
|
||||||
|
if (intr & MT_INT_TBTT)
|
||||||
|
mt76_queue_kick(dev, &dev->mt76.q_tx[MT_TXQ_PSD]);
|
||||||
|
|
||||||
|
if (intr & MT_INT_TX_STAT) {
|
||||||
|
mt76x02_mac_poll_tx_status(dev, true);
|
||||||
|
tasklet_schedule(&dev->tx_tasklet);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intr & MT_INT_GPTIMER) {
|
||||||
|
mt76x02_irq_disable(dev, MT_INT_GPTIMER);
|
||||||
|
tasklet_schedule(&dev->dfs_pd.dfs_tasklet);
|
||||||
|
}
|
||||||
|
|
||||||
|
return IRQ_HANDLED;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(mt76x02_irq_handler);
|
||||||
|
|
||||||
void mt76x02_set_irq_mask(struct mt76x02_dev *dev, u32 clear, u32 set)
|
void mt76x02_set_irq_mask(struct mt76x02_dev *dev, u32 clear, u32 set)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -110,6 +110,29 @@ TRACE_EVENT(mac_txstat_fetch,
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
TRACE_EVENT(dev_irq,
|
||||||
|
TP_PROTO(struct mt76x02_dev *dev, u32 val, u32 mask),
|
||||||
|
|
||||||
|
TP_ARGS(dev, val, mask),
|
||||||
|
|
||||||
|
TP_STRUCT__entry(
|
||||||
|
DEV_ENTRY
|
||||||
|
__field(u32, val)
|
||||||
|
__field(u32, mask)
|
||||||
|
),
|
||||||
|
|
||||||
|
TP_fast_assign(
|
||||||
|
DEV_ASSIGN;
|
||||||
|
__entry->val = val;
|
||||||
|
__entry->mask = mask;
|
||||||
|
),
|
||||||
|
|
||||||
|
TP_printk(
|
||||||
|
DEV_PR_FMT " %08x & %08x",
|
||||||
|
DEV_PR_ARG, __entry->val, __entry->mask
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef TRACE_INCLUDE_PATH
|
#undef TRACE_INCLUDE_PATH
|
||||||
|
@ -7,8 +7,7 @@ mt76x2-common-y := \
|
|||||||
|
|
||||||
mt76x2e-y := \
|
mt76x2e-y := \
|
||||||
pci.o pci_main.o pci_init.o pci_tx.o \
|
pci.o pci_main.o pci_init.o pci_tx.o \
|
||||||
pci_core.o pci_mac.o pci_mcu.o pci_phy.o \
|
pci_mac.o pci_mcu.o pci_phy.o pci_dfs.o
|
||||||
pci_dfs.o pci_trace.o
|
|
||||||
|
|
||||||
mt76x2u-y := \
|
mt76x2u-y := \
|
||||||
usb.o usb_init.o usb_main.o usb_mac.o usb_mcu.o \
|
usb.o usb_init.o usb_main.o usb_mac.o usb_mcu.o \
|
||||||
|
@ -60,7 +60,6 @@ int mt76x2_register_device(struct mt76x02_dev *dev);
|
|||||||
void mt76x2_init_debugfs(struct mt76x02_dev *dev);
|
void mt76x2_init_debugfs(struct mt76x02_dev *dev);
|
||||||
void mt76x2_init_device(struct mt76x02_dev *dev);
|
void mt76x2_init_device(struct mt76x02_dev *dev);
|
||||||
|
|
||||||
irqreturn_t mt76x2_irq_handler(int irq, void *dev_instance);
|
|
||||||
void mt76x2_phy_power_on(struct mt76x02_dev *dev);
|
void mt76x2_phy_power_on(struct mt76x02_dev *dev);
|
||||||
int mt76x2_init_hardware(struct mt76x02_dev *dev);
|
int mt76x2_init_hardware(struct mt76x02_dev *dev);
|
||||||
void mt76x2_stop_hardware(struct mt76x02_dev *dev);
|
void mt76x2_stop_hardware(struct mt76x02_dev *dev);
|
||||||
@ -87,8 +86,6 @@ void mt76x2_mac_set_tx_protection(struct mt76x02_dev *dev, u32 val);
|
|||||||
|
|
||||||
void mt76x2_pre_tbtt_tasklet(unsigned long arg);
|
void mt76x2_pre_tbtt_tasklet(unsigned long arg);
|
||||||
|
|
||||||
void mt76x2_rx_poll_complete(struct mt76_dev *mdev, enum mt76_rxq_id q);
|
|
||||||
|
|
||||||
void mt76x2_sta_ps(struct mt76_dev *dev, struct ieee80211_sta *sta, bool ps);
|
void mt76x2_sta_ps(struct mt76_dev *dev, struct ieee80211_sta *sta, bool ps);
|
||||||
|
|
||||||
void mt76x2_update_channel(struct mt76_dev *mdev);
|
void mt76x2_update_channel(struct mt76_dev *mdev);
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
|
||||||
#include "mt76x2.h"
|
#include "mt76x2.h"
|
||||||
#include "trace.h"
|
|
||||||
|
|
||||||
static const struct pci_device_id mt76pci_device_table[] = {
|
static const struct pci_device_id mt76pci_device_table[] = {
|
||||||
{ PCI_DEVICE(0x14c3, 0x7662) },
|
{ PCI_DEVICE(0x14c3, 0x7662) },
|
||||||
@ -58,7 +57,7 @@ mt76pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||||||
dev->mt76.rev = mt76_rr(dev, MT_ASIC_VERSION);
|
dev->mt76.rev = mt76_rr(dev, MT_ASIC_VERSION);
|
||||||
dev_info(dev->mt76.dev, "ASIC revision: %08x\n", dev->mt76.rev);
|
dev_info(dev->mt76.dev, "ASIC revision: %08x\n", dev->mt76.rev);
|
||||||
|
|
||||||
ret = devm_request_irq(dev->mt76.dev, pdev->irq, mt76x2_irq_handler,
|
ret = devm_request_irq(dev->mt76.dev, pdev->irq, mt76x02_irq_handler,
|
||||||
IRQF_SHARED, KBUILD_MODNAME, dev);
|
IRQF_SHARED, KBUILD_MODNAME, dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -1,78 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
|
||||||
* copyright notice and this permission notice appear in all copies.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/delay.h>
|
|
||||||
#include "mt76x2.h"
|
|
||||||
#include "trace.h"
|
|
||||||
|
|
||||||
void mt76x2_rx_poll_complete(struct mt76_dev *mdev, enum mt76_rxq_id q)
|
|
||||||
{
|
|
||||||
struct mt76x02_dev *dev;
|
|
||||||
|
|
||||||
dev = container_of(mdev, struct mt76x02_dev, mt76);
|
|
||||||
mt76x02_irq_enable(dev, MT_INT_RX_DONE(q));
|
|
||||||
}
|
|
||||||
|
|
||||||
irqreturn_t mt76x2_irq_handler(int irq, void *dev_instance)
|
|
||||||
{
|
|
||||||
struct mt76x02_dev *dev = dev_instance;
|
|
||||||
u32 intr;
|
|
||||||
|
|
||||||
intr = mt76_rr(dev, MT_INT_SOURCE_CSR);
|
|
||||||
mt76_wr(dev, MT_INT_SOURCE_CSR, intr);
|
|
||||||
|
|
||||||
if (!test_bit(MT76_STATE_INITIALIZED, &dev->mt76.state))
|
|
||||||
return IRQ_NONE;
|
|
||||||
|
|
||||||
trace_dev_irq(dev, intr, dev->mt76.mmio.irqmask);
|
|
||||||
|
|
||||||
intr &= dev->mt76.mmio.irqmask;
|
|
||||||
|
|
||||||
if (intr & MT_INT_TX_DONE_ALL) {
|
|
||||||
mt76x02_irq_disable(dev, MT_INT_TX_DONE_ALL);
|
|
||||||
tasklet_schedule(&dev->tx_tasklet);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (intr & MT_INT_RX_DONE(0)) {
|
|
||||||
mt76x02_irq_disable(dev, MT_INT_RX_DONE(0));
|
|
||||||
napi_schedule(&dev->mt76.napi[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (intr & MT_INT_RX_DONE(1)) {
|
|
||||||
mt76x02_irq_disable(dev, MT_INT_RX_DONE(1));
|
|
||||||
napi_schedule(&dev->mt76.napi[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (intr & MT_INT_PRE_TBTT)
|
|
||||||
tasklet_schedule(&dev->pre_tbtt_tasklet);
|
|
||||||
|
|
||||||
/* send buffered multicast frames now */
|
|
||||||
if (intr & MT_INT_TBTT)
|
|
||||||
mt76_queue_kick(dev, &dev->mt76.q_tx[MT_TXQ_PSD]);
|
|
||||||
|
|
||||||
if (intr & MT_INT_TX_STAT) {
|
|
||||||
mt76x02_mac_poll_tx_status(dev, true);
|
|
||||||
tasklet_schedule(&dev->tx_tasklet);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (intr & MT_INT_GPTIMER) {
|
|
||||||
mt76x02_irq_disable(dev, MT_INT_GPTIMER);
|
|
||||||
tasklet_schedule(&dev->dfs_pd.dfs_tasklet);
|
|
||||||
}
|
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
|
||||||
}
|
|
||||||
|
|
@ -358,7 +358,7 @@ struct mt76x02_dev *mt76x2_alloc_device(struct device *pdev)
|
|||||||
.tx_prepare_skb = mt76x02_tx_prepare_skb,
|
.tx_prepare_skb = mt76x02_tx_prepare_skb,
|
||||||
.tx_complete_skb = mt76x02_tx_complete_skb,
|
.tx_complete_skb = mt76x02_tx_complete_skb,
|
||||||
.rx_skb = mt76x02_queue_rx_skb,
|
.rx_skb = mt76x02_queue_rx_skb,
|
||||||
.rx_poll_complete = mt76x2_rx_poll_complete,
|
.rx_poll_complete = mt76x02_rx_poll_complete,
|
||||||
.sta_ps = mt76x2_sta_ps,
|
.sta_ps = mt76x2_sta_ps,
|
||||||
};
|
};
|
||||||
struct mt76x02_dev *dev;
|
struct mt76x02_dev *dev;
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
#include "mt76x2.h"
|
#include "mt76x2.h"
|
||||||
#include "mcu.h"
|
#include "mcu.h"
|
||||||
#include "eeprom.h"
|
#include "eeprom.h"
|
||||||
#include "trace.h"
|
|
||||||
|
|
||||||
void mt76x2_mac_set_bssid(struct mt76x02_dev *dev, u8 idx, const u8 *addr)
|
void mt76x2_mac_set_bssid(struct mt76x02_dev *dev, u8 idx, const u8 *addr)
|
||||||
{
|
{
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
|
||||||
* copyright notice and this permission notice appear in all copies.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/module.h>
|
|
||||||
|
|
||||||
#ifndef __CHECKER__
|
|
||||||
#define CREATE_TRACE_POINTS
|
|
||||||
#include "trace.h"
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,67 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
|
||||||
* copyright notice and this permission notice appear in all copies.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(__MT76x2_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
||||||
#define __MT76x2_TRACE_H
|
|
||||||
|
|
||||||
#include <linux/tracepoint.h>
|
|
||||||
#include "mt76x2.h"
|
|
||||||
|
|
||||||
#undef TRACE_SYSTEM
|
|
||||||
#define TRACE_SYSTEM mt76x2
|
|
||||||
|
|
||||||
#define MAXNAME 32
|
|
||||||
#define DEV_ENTRY __array(char, wiphy_name, 32)
|
|
||||||
#define DEV_ASSIGN strlcpy(__entry->wiphy_name, wiphy_name(mt76_hw(dev)->wiphy), MAXNAME)
|
|
||||||
#define DEV_PR_FMT "%s"
|
|
||||||
#define DEV_PR_ARG __entry->wiphy_name
|
|
||||||
|
|
||||||
#define TXID_ENTRY __field(u8, wcid) __field(u8, pktid)
|
|
||||||
#define TXID_ASSIGN __entry->wcid = wcid; __entry->pktid = pktid
|
|
||||||
#define TXID_PR_FMT " [%d:%d]"
|
|
||||||
#define TXID_PR_ARG __entry->wcid, __entry->pktid
|
|
||||||
|
|
||||||
TRACE_EVENT(dev_irq,
|
|
||||||
TP_PROTO(struct mt76x02_dev *dev, u32 val, u32 mask),
|
|
||||||
|
|
||||||
TP_ARGS(dev, val, mask),
|
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
|
||||||
DEV_ENTRY
|
|
||||||
__field(u32, val)
|
|
||||||
__field(u32, mask)
|
|
||||||
),
|
|
||||||
|
|
||||||
TP_fast_assign(
|
|
||||||
DEV_ASSIGN;
|
|
||||||
__entry->val = val;
|
|
||||||
__entry->mask = mask;
|
|
||||||
),
|
|
||||||
|
|
||||||
TP_printk(
|
|
||||||
DEV_PR_FMT " %08x & %08x",
|
|
||||||
DEV_PR_ARG, __entry->val, __entry->mask
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#undef TRACE_INCLUDE_PATH
|
|
||||||
#define TRACE_INCLUDE_PATH .
|
|
||||||
#undef TRACE_INCLUDE_FILE
|
|
||||||
#define TRACE_INCLUDE_FILE trace
|
|
||||||
|
|
||||||
#include <trace/define_trace.h>
|
|
Loading…
Reference in New Issue
Block a user