--- linux-2.6/drivers/net/natsemi.c 2004-08-10 13:35:34.000000000 +0400 +++ linux-2.6/drivers/net/natsemi.c 2004-08-11 23:41:29.000000000 +0400 @@ -765,6 +765,9 @@ static int netdev_close(struct net_device *dev); static int netdev_get_regs(struct net_device *dev, u8 *buf); static int netdev_get_eeprom(struct net_device *dev, u8 *buf); +#ifdef CONFIG_NET_POLL_CONTROLLER +static void natsemi_poll_controller(struct net_device *dev); +#endif static void move_int_phy(struct net_device *dev, int addr) { @@ -920,6 +923,9 @@ dev->do_ioctl = &netdev_ioctl; dev->tx_timeout = &tx_timeout; dev->watchdog_timeo = TX_TIMEOUT; +#ifdef CONFIG_NET_POLL_CONTROLLER + dev->poll_controller = natsemi_poll_controller; +#endif if (mtu) dev->mtu = mtu; @@ -2188,6 +2194,15 @@ return IRQ_RETVAL(handled); } +#ifdef CONFIG_NET_POLL_CONTROLLER +static void natsemi_poll_controller(struct net_device *dev) +{ + disable_irq(dev->irq); + intr_handler(dev->irq, dev, NULL); + enable_irq(dev->irq); +} +#endif + /* This routine is logically part of the interrupt handler, but separated for clarity and better register allocation. */ static void netdev_rx(struct net_device *dev)