From: Dale Farnsworth <[EMAIL PROTECTED]> Add support for the netpoll api for use by netconsole, kgdboe, etc.
Signed-off-by: Dale Farnsworth <[EMAIL PROTECTED]> --- linux-2.6.15-rc5-mm2/drivers/net/gianfar.c 2005-12-12 11:34:03.000000000 -0700 +++ new/drivers/net/gianfar.c 2005-12-12 11:34:09.000000000 -0700 @@ -133,6 +133,9 @@ #ifdef CONFIG_GFAR_NAPI static int gfar_poll(struct net_device *dev, int *budget); #endif +#ifdef CONFIG_NET_POLL_CONTROLLER +static void gfar_netpoll(struct net_device *dev); +#endif int gfar_clean_rx_ring(struct net_device *dev, int rx_work_limit); static int gfar_process_frame(struct net_device *dev, struct sk_buff *skb, int length); static void gfar_vlan_rx_register(struct net_device *netdev, @@ -261,6 +264,9 @@ dev->change_mtu = gfar_change_mtu; dev->mtu = 1500; dev->set_multicast_list = gfar_set_multi; +#ifdef CONFIG_NET_POLL_CONTROLLER + dev->poll_controller = gfar_netpoll; +#endif dev->ethtool_ops = &gfar_ethtool_ops; @@ -1018,6 +1024,31 @@ return 0; } +#ifdef CONFIG_NET_POLL_CONTROLLER +/* + * Polling - used by netconsole and other diagnostic tools + * to allow network i/o with interrupts disabled. + */ +static void gfar_netpoll(struct net_device *dev) +{ + struct gfar_private *priv = netdev_priv(dev); + + if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { + disable_irq(priv->interruptReceive); + disable_irq(priv->interruptTransmit); + disable_irq(priv->interruptError); + gfar_interrupt(priv->interruptTransmit, dev, NULL); + enable_irq(priv->interruptError); + enable_irq(priv->interruptTransmit); + enable_irq(priv->interruptReceive); + } else { + disable_irq(priv->interruptTransmit); + gfar_interrupt(priv->interruptTransmit, dev, NULL); + enable_irq(priv->interruptTransmit); + } +} +#endif + /* returns a net_device_stats structure pointer */ static struct net_device_stats * gfar_get_stats(struct net_device *dev) { - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html