diff options
author | Thomas Petazzoni <thomas.petazzoni@free-electrons.com> | 2009-05-04 11:08:41 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-05-04 11:08:41 -0700 |
commit | 6e8cf5c069c6cb7b316e9b1715eac38873dd5cab (patch) | |
tree | fdbe28f7cf062c7e2dfaf4bdbb3e55345cf4bf60 /drivers/net/macb.c | |
parent | 255cac91c3c9ce7dca7713b93ab03c75b7902e0e (diff) | |
download | lwn-6e8cf5c069c6cb7b316e9b1715eac38873dd5cab.tar.gz lwn-6e8cf5c069c6cb7b316e9b1715eac38873dd5cab.zip |
macb: Add support of the netpoll API
With this patch in place, I'm successfully able to use the netconsole
mechanism with the Calao USB-A9263 board, which uses the AT91SAM9263
CPU, which in terms of Ethernet controller is supported by the macb
driver.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
[haavard.skinnemoen@atmel.com: disable_irq() -> local_irq_save()]
[haavard.skinnemoen@atmel.com: convert to net_device_ops]
Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/macb.c')
-rw-r--r-- | drivers/net/macb.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/net/macb.c b/drivers/net/macb.c index e82aee41d77e..722265920da8 100644 --- a/drivers/net/macb.c +++ b/drivers/net/macb.c @@ -599,6 +599,21 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id) return IRQ_HANDLED; } +#ifdef CONFIG_NET_POLL_CONTROLLER +/* + * Polling receive - used by netconsole and other diagnostic tools + * to allow network i/o with interrupts disabled. + */ +static void macb_poll_controller(struct net_device *dev) +{ + unsigned long flags; + + local_irq_save(flags); + macb_interrupt(dev->irq, dev); + local_irq_restore(flags); +} +#endif + static int macb_start_xmit(struct sk_buff *skb, struct net_device *dev) { struct macb *bp = netdev_priv(dev); @@ -1094,6 +1109,9 @@ static const struct net_device_ops macb_netdev_ops = { .ndo_validate_addr = eth_validate_addr, .ndo_change_mtu = eth_change_mtu, .ndo_set_mac_address = eth_mac_addr, +#ifdef CONFIG_NET_POLL_CONTROLLER + .ndo_poll_controller = macb_poll_controller, +#endif }; static int __init macb_probe(struct platform_device *pdev) |