Hi all, I brought NetGear's fa311 driver up to compile under 2.4.2. I put the updated source here - http://millweed.com/projects/fa311/fa311.c Or you can apply the following patch to the source gotten from the NetGear support site (http://www.netgear-support.com/ts/downloads/fa31lx70.zip) - --- /tmp/basdf/fa311.c Fri Jan 19 14:20:50 2001 +++ fa311.c Thu Mar 1 18:12:57 2001 @@ -174,23 +174,23 @@ /* Device private data */ struct fa311_priv { - struct device * next; /* Next fa311device */ + struct net_device * next; /* Next fa311device */ struct fa311_queue tx_queue; /* Transmit Descriptor Queue */ struct fa311_queue rx_queue; /* Receive Descriptor Queue */ - struct enet_statistics stats; /* MIB data */ + struct net_device_stats stats; /* MIB data */ }; -static struct device * fa311_dev_list; /* List of fa311devices */ +static struct net_device * fa311_dev_list; /* List of fa311devices */ /* Linux Network Driver interface routines */ -extern int fa311_probe (struct device *dev); -static int fa311_open (struct device *dev); -static int fa311_close (struct device *dev); -static int fa311_start_xmit (struct sk_buff *skb, struct device *dev); -static void fa311_set_multicast_list (struct device *dev); -static int fa311_ioctl (struct device *dev, struct ifreq *rq, int cmd); +extern int fa311_probe (struct net_device *dev); +static int fa311_open (struct net_device *dev); +static int fa311_close (struct net_device *dev); +static int fa311_start_xmit (struct sk_buff *skb, struct net_device *dev); +static void fa311_set_multicast_list (struct net_device *dev); +static int fa311_ioctl (struct net_device *dev, struct ifreq *rq, int cmd); static void fa311_interrupt (int irq, void *dev_id, struct pt_regs *regs); -static struct enet_statistics *fa311_get_stats (struct device *dev); +static struct net_device_stats *fa311_get_stats (struct net_device *dev); /* Support Functions */ /*static u16 swap_16 (u16 us);*/ @@ -206,11 +206,11 @@ static status fa311_dev_reset (u32 iobase); static status fa311_queue_create (struct fa311_queue *q, int count, int qtype); static status fa311_queue_delete (struct fa311_queue *q); -static virt_addr fa311_tx_desc_get (struct device *dev); -static virt_addr fa311_rx_desc_get (struct device *dev); -static status fa311_phy_setup (struct device *dev); +static virt_addr fa311_tx_desc_get (struct net_device *dev); +static virt_addr fa311_rx_desc_get (struct net_device *dev); +static status fa311_phy_setup (struct net_device *dev); static int fa311_crc (char * mc_addr); -static void fa311_tx_skb_reclaim (struct device *dev, virt_addr desc_addr); +static void fa311_tx_skb_reclaim (struct net_device *dev, virt_addr desc_addr); static void ReadEEWord(u16 iobase,u32 wordOffset,u16* pEeData); @@ -226,7 +226,7 @@ * registers each FA311 device found. */ int -fa311_probe (struct device *dev) +fa311_probe (struct net_device *dev) { int dev_count; u8 bus; @@ -353,7 +353,7 @@ /* fa311_open - open and initialize a device */ static int -fa311_open (struct device *dev) +fa311_open (struct net_device *dev) { u32 iobase = dev->base_addr; struct fa311_priv* priv = dev->priv; @@ -448,7 +448,7 @@ /* fa311_close - close a device, and reclaim resources */ static int -fa311_close (struct device *dev) +fa311_close (struct net_device *dev) { u32 iobase = dev->base_addr; struct fa311_priv* priv = dev->priv; @@ -480,19 +480,19 @@ * CMDSTS, and signals the chip */ static int -fa311_start_xmit (struct sk_buff *skb, struct device *dev) +fa311_start_xmit (struct sk_buff *skb, struct net_device *dev) { u32 iobase = dev->base_addr; u32 cmdsts; virt_addr tx_desc; - struct enet_statistics *stats_p; + struct net_device_stats *stats_p; if (skb->len > ETH_MAX_PKT_SIZE) return ERROR; tx_desc = fa311_tx_desc_get(dev); if (tx_desc == NULL) { - set_bit (0, &dev->tbusy); + netif_stop_queue(dev); DP_REG32_SET (DP_IMR, DP_IMR_TXOK | DP_IMR_TXIDLE); tx_desc = fa311_tx_desc_get (dev); } @@ -553,7 +553,7 @@ * size, and updates the BUFPTR and SKBPTR fields to the newly allocated SKB. */ static int -fa311_start_receive (struct device *dev) +fa311_start_receive (struct net_device *dev) { u32 cmdsts; int len; @@ -562,7 +562,7 @@ struct sk_buff *cur_skb; struct sk_buff *new_skb; struct sk_buff *rx_skb; - struct enet_statistics *stats_p; + struct net_device_stats *stats_p; stats_p = &((struct fa311_priv *)(dev->priv))->stats; @@ -648,15 +648,15 @@ } /* fa311_get_stats - get current device statistics */ -static struct enet_statistics * -fa311_get_stats (struct device *dev) +static struct net_device_stats * +fa311_get_stats (struct net_device *dev) { return &((struct fa311_priv *)(dev->priv))->stats; } /* fa311_set_multicast_list - sets multicast, & promiscuous mode */ static void -fa311_set_multicast_list (struct device *dev) +fa311_set_multicast_list (struct net_device *dev) { u32 iobase = dev->base_addr; u16 hash_table[32]; @@ -738,7 +738,7 @@ /* fa311_interrupt - handle driver specific ioctls */ static int -fa311_ioctl (struct device *dev, struct ifreq *rq, int cmd) +fa311_ioctl (struct net_device *dev, struct ifreq *rq, int cmd) { return -EOPNOTSUPP; } @@ -749,7 +749,7 @@ static void fa311_interrupt (int irq, void *dev_id, struct pt_regs *regs) { - struct device * dev = dev_id; + struct net_device * dev = dev_id; u16 iobase = dev->base_addr; u32 reg_isr; u32 CurrentLinkStatus; @@ -784,8 +784,8 @@ if (reg_isr & (DP_ISR_TXOK | DP_ISR_TXIDLE)) { DP_REG32_CLR (DP_IMR, (DP_IMR_TXOK|DP_IMR_TXIDLE)); - clear_bit (0, &dev->tbusy); - mark_bh (NET_BH); + netif_start_queue(dev); + netif_wake_queue(dev); } } @@ -979,7 +979,7 @@ * the owner, else returns NULL */ static virt_addr -fa311_tx_desc_get (struct device *dev) +fa311_tx_desc_get (struct net_device *dev) { struct fa311_queue * q; virt_addr desc_addr = NULL; @@ -998,7 +998,7 @@ /* fa311_tx_skb_reclaim - reclaim SKBs in transmitted descriptors */ static void -fa311_tx_skb_reclaim (struct device *dev, virt_addr desc_addr) +fa311_tx_skb_reclaim (struct net_device *dev, virt_addr desc_addr) { struct sk_buff * skb; struct fa311_queue * q; @@ -1020,7 +1020,7 @@ * the owner, else returns NULL */ static virt_addr -fa311_rx_desc_get (struct device *dev) +fa311_rx_desc_get (struct net_device *dev) { struct fa311_queue * q; virt_addr desc_addr = NULL; @@ -1038,7 +1038,7 @@ /* fa311_phy_setup - reset and setup the PHY device */ static status -fa311_phy_setup (struct device *dev) +fa311_phy_setup (struct net_device *dev) { u32 iobase = dev->base_addr; u32 dp_cfg_val; @@ -1215,7 +1215,7 @@ void cleanup_module (void) { - struct device *cur_dev; + struct net_device *cur_dev; cur_dev=fa311_dev_list; while (cur_dev) { -- Keith Craigie R&D Mediabolic, Inc. 415-346-2270 x115 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/