summaryrefslogtreecommitdiff
path: root/target/linux
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2010-03-27 13:05:17 +0000
committerGabor Juhos <juhosg@openwrt.org>2010-03-27 13:05:17 +0000
commit245775a49f867b0da28b37934f9a512c1d05c054 (patch)
tree7ecff496229bbbd206510702ad85ce45a8db1a02 /target/linux
parent5dbee8b3aa04848da5187c34e7eb5d982af7100a (diff)
downloadmtk-20170518-245775a49f867b0da28b37934f9a512c1d05c054.zip
mtk-20170518-245775a49f867b0da28b37934f9a512c1d05c054.tar.gz
mtk-20170518-245775a49f867b0da28b37934f9a512c1d05c054.tar.bz2
ar71xx: ag71xx: Add netpoll support
This patch adds support for polling interrupts, used by netconsole and the likes. Tested on d-link dir-615 C1 using netconsole. Signed-off-by: Pat Erley <pat-lkml@erley.org> SVN-Revision: 20503
Diffstat (limited to 'target/linux')
-rw-r--r--target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c
index 4519ec8..8244239 100644
--- a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c
+++ b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c
@@ -926,6 +926,20 @@ static void ag71xx_set_multicast_list(struct net_device *dev)
/* TODO */
}
+#ifdef CONFIG_NET_POLL_CONTROLLER
+/*
+ * Polling 'interrupt' - used by things like netconsole to send skbs
+ * without having to re-enable interrupts. It's not called while
+ * the interrupt routine is executing.
+ */
+static void ag71xx_netpoll(struct net_device *dev)
+{
+ disable_irq(dev->irq);
+ ag71xx_interrupt(dev->irq, dev);
+ enable_irq(dev->irq);
+}
+#endif
+
static const struct net_device_ops ag71xx_netdev_ops = {
.ndo_open = ag71xx_open,
.ndo_stop = ag71xx_stop,
@@ -936,6 +950,9 @@ static const struct net_device_ops ag71xx_netdev_ops = {
.ndo_change_mtu = eth_change_mtu,
.ndo_set_mac_address = eth_mac_addr,
.ndo_validate_addr = eth_validate_addr,
+#ifdef CONFIG_NET_POLL_CONTROLLER
+ .ndo_poll_controller = ag71xx_netpoll,
+#endif
};
static int __init ag71xx_probe(struct platform_device *pdev)