Tulip update
Subsystems (2)
cover Tulip update
[Resend with bugs fixed.]
This patch set includes all the non-controversial tulip patches from the parisc tree, plus a few extra cleanups. The major highlight is the patch moving tulip_select_media() and its associated delay to a work queue, a nice piece of work from Francois Romieu, with some tweaks by Kyle McMartin.
-VAL
PATCH 1/10 Change tulip maintainer
MAINTAINERS | 4 ++-- drivers/net/tulip/21142.c | 2 +- drivers/net/tulip/eeprom.c | 2 +- drivers/net/tulip/interrupt.c | 2 +- drivers/net/tulip/media.c | 2 +- drivers/net/tulip/pnic.c | 2 +- drivers/net/tulip/pnic2.c | 2 +- drivers/net/tulip/timer.c | 2 +- drivers/net/tulip/tulip_core.c | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-)
MAINTAINERS +2 -2
@@ -2956,8 +2956,8 @@ W: http://www.auk.cx/tms380tr/ S: Maintained TULIP NETWORK DRIVER -P: Jeff Garzik -M: [email protected] +P: Valerie Henson +M: [email protected] L: [email protected] W: http://sourceforge.net/projects/tulip/ S: Maintained
drivers/net/tulip/21142.c +1 -1
@@ -1,7 +1,7 @@/* drivers/net/tulip/21142.c -Maintained by Jeff Garzik <[email protected]> +Maintained by Valerie Henson <[email protected]> Copyright 2000,2001 The Linux Kernel Team Written/copyright 1994-2001 by Donald Becker.
drivers/net/tulip/eeprom.c +1 -1
@@ -1,7 +1,7 @@/* drivers/net/tulip/eeprom.c -Maintained by Jeff Garzik <[email protected]> +Maintained by Valerie Henson <[email protected]> Copyright 2000,2001 The Linux Kernel Team Written/copyright 1994-2001 by Donald Becker.
drivers/net/tulip/interrupt.c +1 -1
@@ -1,7 +1,7 @@/* drivers/net/tulip/interrupt.c -Maintained by Jeff Garzik <[email protected]> +Maintained by Valerie Henson <[email protected]> Copyright 2000,2001 The Linux Kernel Team Written/copyright 1994-2001 by Donald Becker.
drivers/net/tulip/media.c +1 -1
@@ -1,7 +1,7 @@/* drivers/net/tulip/media.c -Maintained by Jeff Garzik <[email protected]> +Maintained by Valerie Henson <[email protected]> Copyright 2000,2001 The Linux Kernel Team Written/copyright 1994-2001 by Donald Becker.
drivers/net/tulip/pnic.c +1 -1
@@ -1,7 +1,7 @@/* drivers/net/tulip/pnic.c -Maintained by Jeff Garzik <[email protected]> +Maintained by Valerie Henson <[email protected]> Copyright 2000,2001 The Linux Kernel Team Written/copyright 1994-2001 by Donald Becker.
drivers/net/tulip/pnic2.c +1 -1
@@ -1,7 +1,7 @@/* drivers/net/tulip/pnic2.c -Maintained by Jeff Garzik <[email protected]> +Maintained by Valerie Henson <[email protected]> Copyright 2000,2001 The Linux Kernel Team Written/copyright 1994-2001 by Donald Becker. Modified to hep support PNIC_II by Kevin B. Hendricks
drivers/net/tulip/timer.c +1 -1
@@ -1,7 +1,7 @@/* drivers/net/tulip/timer.c -Maintained by Jeff Garzik <[email protected]> +Maintained by Valerie Henson <[email protected]> Copyright 2000,2001 The Linux Kernel Team Written/copyright 1994-2001 by Donald Becker.
drivers/net/tulip/tulip_core.c +1 -1
@@ -1,7 +1,7 @@/* tulip_core.c: A DEC 21x4x-family ethernet driver for Linux. */ /* -Maintained by Jeff Garzik <[email protected]> +Maintained by Valerie Henson <[email protected]> Copyright 2000,2001 The Linux Kernel Team Written/copyright 1994-2001 by Donald Becker.
--
Jeff Garzik
AppliedRe: [patch 01/10] [TULIP] Change tulip maintainer
applied patches 1-8 of 10 to netdev-2.6.git#upstream.
patch #9 did not apply, stopping the merge.
PATCH 2/10 Print physical address in tulip_init_one
In reply to Valerie HensonFrom: Grant Grundler <[email protected]>
As the cookie returned by pci_iomap() is fairly useless...
[Compile warning on pci_resource_start() format fixed up by Valerie Henson.]
--- drivers/net/tulip/tulip_core.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-)
drivers/net/tulip/tulip_core.c +8 -2
@@ -1656,8 +1656,14 @@ static int __devinit tulip_init_one (strif (register_netdev (dev)) goto err_out_free_ring; -printk (KERN_INFO "%s: %s rev %d at %p," , - dev->name, chip_name, chip_rev, ioaddr); + printk(KERN_INFO "%s: %s rev %d at " +#ifdef CONFIG_TULIP_MMIO + "MMIO" +#else +"Port" +#endif +" %#llx," , dev->name, chip_name, chip_rev, + (unsigned long long )pci_resource_start (pdev,TULIP_BAR ));pci_set_drvdata (pdev, dev);if (eeprom_missing)
--
PATCH 3/10 Make DS21143 printout match lspci output
In reply to Valerie HensonFrom: Thibaut Varene <[email protected]>
--- drivers/net/tulip/tulip_core.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-)
drivers/net/tulip/tulip_core.c +1 -1
@@ -147,7 +147,7 @@ struct tulip_chip_table tulip_tbl[] = { HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | HAS_PCI_MWI, tulip_timer },/* DC21142, DC21143 */ - {"Digital DS21143 Tulip" ,128 ,0x0801fbff , + {"Digital DS21142/43 Tulip" ,128 ,0x0801fbff ,HAS_MII |HAS_MEDIA_TABLE |ALWAYS_CHECK_MII |HAS_ACPI |HAS_NWAY | HAS_INTR_MITIGATION | HAS_PCI_MWI, t21142_timer },
--
PATCH 4/10 Flush MMIO writes in reset sequence
In reply to Valerie HensonFrom: Grant Grundler <[email protected]>
The obvious safe registers to read is one from PCI config space.
--- drivers/net/tulip/tulip_core.c | 2 ++ 1 files changed, 2 insertions(+)
drivers/net/tulip/tulip_core.c +2 -0
@@ -295,12 +295,14 @@ static void tulip_up(struct net_device */* Reset the chip, holding bit 0 set at least 50 PCI cycles. */ iowrite32 (0x00000001 , ioaddr +CSR0 ); +pci_read_config_dword (tp->pdev,PCI_COMMAND , &i);/* flush write */ udelay (100 );/* Deassert reset. Wait the specified 50 PCI cycles after a reset by initializing Tx and Rx queues and the address filter list. */ iowrite32 (tp->csr0, ioaddr +CSR0 ); +pci_read_config_dword (tp->pdev,PCI_COMMAND , &i);/* flush write */ udelay (100 );if (tulip_debug >1 )
--
PATCH 5/10 Defer tulip_select_media() to process context
In reply to Valerie HensonFrom: Francois Romieu <[email protected]>
Move tulip_select_media() processing to a workqueue, instead of delaying in interrupt context, edited by Kyle McMartin to use kevent thread, instead of creating its own workqueue.
--- drivers/net/tulip/21142.c | 4 +- drivers/net/tulip/timer.c | 14 +++++++- drivers/net/tulip/tulip.h | 19 ++++++++++-- drivers/net/tulip/tulip_core.c | 64 +++++++++++++++++++---------------------- 4 files changed, 60 insertions(+), 41 deletions(-)
drivers/net/tulip/21142.c +2 -2
@@ -26,9 +26,9 @@ static u16 t21142_csr15[] = { 0x0008, 0x/* Handle the 21143 uniquely: do autoselect with NWay, not the EEPROM list of available transceivers. */ -void t21142_timer (unsigned long data) +void t21142_media_task (void *data) { -struct net_device *dev = (struct net_device *)data; +struct net_device *dev = data;struct tulip_private *tp =netdev_priv (dev);void __iomem *ioaddr = tp->base_addr;int csr12 =ioread32 (ioaddr +CSR12 );
drivers/net/tulip/timer.c +12 -2
@@ -18,13 +18,14 @@#include "tulip.h" -void tulip_timer (unsigned long data) +void tulip_media_task (void *data) { -struct net_device *dev = (struct net_device *)data; +struct net_device *dev = data;struct tulip_private *tp =netdev_priv (dev);void __iomem *ioaddr = tp->base_addr;u32 csr12 =ioread32 (ioaddr +CSR12 );int next_tick =2 *HZ ; +unsigned long flags;if (tulip_debug >2 ) { printk(KERN_DEBUG "%s: Media selection tick, %s, status %8.8x mode"
@@ -126,6 +127,15 @@ void tulip_timer(unsigned long data) }break ; } + + +spin_lock_irqsave (&tp->lock, flags); +if (tp->timeout_recovery) { +tulip_tx_timeout_complete (tp, ioaddr); + tp->timeout_recovery =0 ; + } +spin_unlock_irqrestore (&tp->lock, flags); +/* mod_timer synchronizes us with potential add_timer calls * from interrupts. */
drivers/net/tulip/tulip.h +16 -3
@@ -44,7 +44,8 @@ struct tulip_chip_table {int io_size;int valid_intrs;/* CSR7 interrupt enable settings */ int flags; -void (*media_timer) (unsigned long data); +void (*media_timer) (unsigned long ); +void (*media_task) (void *); };
@@ -366,6 +367,7 @@ struct tulip_private { unsigned int medialock:1; /* Don't sense media type. */ unsigned int mediasense:1; /* Media sensing in progress. */ unsigned int nway:1, nwayset:1; /* 21143 internal NWay. */ + unsigned int timeout_recovery:1;unsigned int csr0;/* CSR0 setting. */ unsigned int csr6;/* Current CSR6 control settings. */ unsigned char eeprom[EEPROM_SIZE ];/* Serial EEPROM contents. */
@@ -384,6 +386,7 @@ struct tulip_private {void __iomem *base_addr;int csr12_shadow;int pad0;/* Used for 8-byte alignment */ +struct work_struct media_work; };
@@ -398,7 +401,7 @@ struct eeprom_fixup {/* 21142.c */ extern u16 t21142_csr14[]; -void t21142_timer (unsigned long data); +void t21142_media_task (void *data);void t21142_start_nway (struct net_device *dev);void t21142_lnk_change (struct net_device *dev,int csr5);
@@ -436,7 +439,7 @@ void pnic_lnk_change(struct net_device *void pnic_timer (unsigned long data);/* timer.c */ -void tulip_timer (unsigned long data); +void tulip_media_task (void *data);void mxic_timer (unsigned long data);void comet_timer (unsigned long data);
@@ -488,4 +491,14 @@ static inline void tulip_restart_rxtx(st tulip_start_rxtx(tp); } +static inline void tulip_tx_timeout_complete (struct tulip_private *tp,void __iomem *ioaddr) +{ +/* Stop and restart the chip's Tx processes. */ +tulip_restart_rxtx (tp); +/* Trigger an immediate transmit demand. */ +iowrite32 (0 , ioaddr +CSR1 ); + + tp->stats.tx_errors++; +} +#endif /* __NET_TULIP_H__ */
drivers/net/tulip/tulip_core.c +30 -34
142 lines not on this page · raw message
--
PATCH 6/10 Clean up tulip.h
In reply to Valerie HensonFrom: Grant Grundler <[email protected]>
Update/cleanup some definitions in tulip.h and tulip_core.c.
--- drivers/net/tulip/tulip.h | 17 +++++++++++------ drivers/net/tulip/tulip_core.c | 7 ++----- 2 files changed, 13 insertions(+), 11 deletions(-)
drivers/net/tulip/tulip.h +11 -6
@@ -30,11 +30,10 @@/* undefine, or define to various debugging levels (>4 == obscene levels) */ #define TULIP_DEBUG 1 -/* undefine USE_IO_OPS for MMIO, define for PIO */ #ifdef CONFIG_TULIP_MMIO -# undef USE_IO_OPS +#define TULIP_BAR 1/* CBMA */ #else -# define USE_IO_OPS 1 +#define TULIP_BAR 0/* CBIO */ #endif
@@ -143,6 +142,7 @@ enum status_bits { RxNoBuf =0x80 , RxIntr =0x40 , TxFIFOUnderflow =0x20 , + RxErrIntr =0x10 , TxJabber =0x08 , TxNoBuf =0x04 , TxDied = 0x02,
@@ -193,9 +193,14 @@ struct tulip_tx_desc {enum desc_status_bits { - DescOwned =0x80000000 , - RxDescFatalErr =0x8000 , - RxWholePkt =0x0300 , + DescOwned =0x80000000 , + DescWholePkt =0x60000000 , + DescEndPkt =0x40000000 , + DescStartPkt =0x20000000 , + DescEndRing =0x02000000 , + DescUseLink =0x01000000 , + RxDescFatalErr =0x008000 , + RxWholePkt =0x00000300 , };
drivers/net/tulip/tulip_core.c +2 -5
@@ -1369,11 +1369,8 @@ static int __devinit tulip_init_one (strif (pci_request_regions (pdev,"tulip" )) goto err_out_free_netdev; -#ifndef USE_IO_OPS - ioaddr =pci_iomap (pdev,1 , tulip_tbl[chip_idx].io_size); -#else - ioaddr =pci_iomap (pdev,0 , tulip_tbl[chip_idx].io_size); -#endif + ioaddr =pci_iomap (pdev,TULIP_BAR , tulip_tbl[chip_idx].io_size); +if (!ioaddr) goto err_out_free_res;
--
PATCH 7/10 Use tulip.h in winbond-840.c
In reply to Valerie HensonFrom: Grant Grundler <[email protected]>
Include "tulip.h" in winbond-840.c and clean up lots of redundant definitions.
--- drivers/net/tulip/winbond-840.c | 68 ++++++++++++++-------------------------- 1 files changed, 24 insertions(+), 44 deletions(-)
drivers/net/tulip/winbond-840.c +24 -44
@@ -90,10 +90,8 @@ static int full_duplex[MAX_UNITS] = {-1,Making the Tx ring too large decreases the effectiveness of channel bonding and packet priority. There are no ill effects from too-large receive rings. */ -#define TX_RING_SIZE 16#define TX_QUEUE_LEN 10/* Limit ring entries actually used. */ #define TX_QUEUE_LEN_RESTART 5 -#define RX_RING_SIZE 32#define TX_BUFLIMIT (1024-128)
@@ -137,6 +135,8 @@ static int full_duplex[MAX_UNITS] = {-1,#include <asm/io.h> #include <asm/irq.h> +#include "tulip.h" +/* These identify the driver base version and may not be removed. */ static char version[] = KERN_INFO DRV_NAME ".c:v" DRV_VERSION " (2.4 port) " DRV_RELDATE " Donald Becker <[email protected]>\n"
@@ -242,8 +242,8 @@ static const struct pci_id_info pci_id_t };/* This driver was written to use PCI memory space, however some x86 systems -work only with I/O space accesses. Pass -DUSE_IO_OPS to use PCI I/O space -accesses instead of memory space. */ +work only with I/O space accesses. See CONFIG_TULIP_MMIO in .config +*/ /* Offsets to the Command and Status Registers, "CSRs". While similar to the Tulip, these registers are longword aligned.
@@ -261,21 +261,11 @@ enum w840_offsets { CurTxDescAddr=0x4C, CurTxBufAddr=0x50, }; -/* Bits in the interrupt status/enable registers. */ -/* The bits in the Intr Status/Enable registers, mostly interrupt sources. */ -enum intr_status_bits { - NormalIntr=0x10000 , AbnormalIntr=0x8000 , - IntrPCIErr=0x2000 , TimerInt=0x800 , - IntrRxDied=0x100 , RxNoBuf=0x80 , IntrRxDone=0x40 , - TxFIFOUnderflow=0x20 , RxErrIntr=0x10 , - TxIdle=0x04 , IntrTxStopped=0x02 , IntrTxDone=0x01 , -}; -/* Bits in the NetworkConfig register. */ enum rx_mode_bits { - AcceptErr=0x80 , AcceptRunt=0x40 , - AcceptBroadcast=0x20 , AcceptMulticast=0x10 , - AcceptAllPhys=0x08 , AcceptMyPhys=0x02 , + AcceptErr=0x80 , + RxAcceptBroadcast=0x20 , AcceptMulticast=0x10 , + RxAcceptAllPhys=0x08 , AcceptMyPhys=0x02 , };enum mii_reg_bits {
@@ -297,13 +287,6 @@ struct w840_tx_desc {u32 buffer1, buffer2; }; -/* Bits in network_desc.status */ -enum desc_status_bits { - DescOwn=0x80000000 , DescEndRing=0x02000000 , DescUseLink=0x01000000 , - DescWholePkt=0x60000000 , DescStartPkt=0x20000000 , DescEndPkt=0x40000000 , - DescIntr=0x80000000 , -}; -#define MII_CNT 1/* winbond only supports one MII */ struct netdev_private {struct w840_rx_desc *rx_ring;
@@ -371,7 +354,6 @@ static int __devinit w840_probe1 (structint irq;int i, option = find_cnt <MAX_UNITS ? options[find_cnt] :0 ;void __iomem *ioaddr; -int bar =1 ; i =pci_enable_device (pdev);if (i)return i;
@@ -393,10 +375,8 @@ static int __devinit w840_probe1 (structif (pci_request_regions (pdev,DRV_NAME )) goto err_out_netdev; -#ifdef USE_IO_OPS - bar =0 ; -#endif - ioaddr =pci_iomap (pdev, bar, netdev_res_size); + + ioaddr =pci_iomap (pdev,TULIP_BAR , netdev_res_size);if (!ioaddr) goto err_out_free_res;
@@ -838,7 +818,7 @@ static void init_rxtx_rings(struct net_d np->rx_buf_sz,PCI_DMA_FROMDEVICE); np->rx_ring[i].buffer1 = np->rx_addr[i]; - np->rx_ring[i].status = DescOwn; + np->rx_ring[i].status = DescOwned; } np->cur_rx =0 ;
@@ -923,7 +903,7 @@ static void init_registers(struct net_de }#elif defined(__powerpc__) || defined(__i386__) || defined(__alpha__) || defined(__ia64__) || defined(__x86_64__) i |=0xE000 ; -#elif defined(__sparc__) +#elif defined(__sparc__) || defined (CONFIG_PARISC) i |=0x4800 ;#else #warning Processor architecture undefined
@@ -1043,11 +1023,11 @@ static int start_tx(struct sk_buff *skb,/* Now acquire the irq spinlock. * The difficult race is the the ordering between -* increasing np->cur_tx and setting DescOwn: +* increasing np->cur_tx and setting DescOwned: * - if np->cur_tx is increased first the interrupt * handler could consider the packet as transmitted -* since DescOwn is cleared. -* - If DescOwn is set first the NIC could report the +* since DescOwned is cleared. +* - If DescOwned is set first the NIC could report the * packet as sent, but the interrupt handler would ignore it * since the np->cur_tx was not yet increased. */
@@ -1055,7 +1035,7 @@ static int start_tx(struct sk_buff *skb, np->cur_tx++;wmb ();/* flush length, buffer1, buffer2 */ - np->tx_ring[entry].status = DescOwn; + np->tx_ring[entry].status = DescOwned;wmb ();/* flush status and kick the hardware */ iowrite32 (0 , np->base_addr + TxStartDemand); np->tx_q_bytes += skb->len;
@@ -1155,12 +1135,12 @@ static irqreturn_t intr_handler(int irq, handled =1 ; -if (intr_status & (IntrRxDone | RxNoBuf)) +if (intr_status & (RxIntr | RxNoBuf))netdev_rx (dev);if (intr_status & RxNoBuf)iowrite32 (0 , ioaddr + RxStartDemand); -if (intr_status & (TxIdle | IntrTxDone) && +if (intr_status & (TxNoBuf | TxIntr) && np->cur_tx != np->dirty_tx) {spin_lock (&np->lock);netdev_tx_done (dev);
@@ -1168,8 +1148,8 @@ static irqreturn_t intr_handler(int irq, }/* Abnormal error summary/uncommon events handlers. */ -if (intr_status & (AbnormalIntr | TxFIFOUnderflow | IntrPCIErr | - TimerInt | IntrTxStopped)) +if (intr_status & (AbnormalIntr | TxFIFOUnderflow | SytemError | + TimerInt | TxDied))netdev_error (dev, intr_status);if (--work_limit <0 ) {
@@ -1305,7 +1285,7 @@ static int netdev_rx(struct net_device * np->rx_ring[entry].buffer1 = np->rx_addr[entry]; }wmb (); - np->rx_ring[entry].status = DescOwn; + np->rx_ring[entry].status = DescOwned; }return 0 ;
@@ -1342,7 +1322,7 @@ static void netdev_error(struct net_devi dev->name, new);update_csr6 (dev, new); } -if (intr_status & IntrRxDied) {/* Missed a Rx frame. */ +if (intr_status & RxDied) {/* Missed a Rx frame. */ np->stats.rx_errors++; }if (intr_status & TimerInt) {
@@ -1381,13 +1361,13 @@ static u32 __set_rx_mode(struct net_devi/* Unconditionally log net taps. */ printk (KERN_NOTICE "%s: Promiscuous mode enabled.\n" , dev->name);memset (mc_filter,0xff ,sizeof (mc_filter)); - rx_mode = AcceptBroadcast | AcceptMulticast | AcceptAllPhys + rx_mode = RxAcceptBroadcast | AcceptMulticast | RxAcceptAllPhys | AcceptMyPhys; }else if ((dev->mc_count > multicast_filter_limit) || (dev->flags &IFF_ALLMULTI )) {/* Too many to match, or accept all multicasts. */ memset (mc_filter,0xff ,sizeof (mc_filter)); - rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys; + rx_mode = RxAcceptBroadcast | AcceptMulticast | AcceptMyPhys; }else {struct dev_mc_list *mclist;int i;
@@ -1398,7 +1378,7 @@ static u32 __set_rx_mode(struct net_devi filterbit &=0x3f ; mc_filter[filterbit >>5 ] |=1 << (filterbit &31 ); } - rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys; + rx_mode = RxAcceptBroadcast | AcceptMulticast | AcceptMyPhys; }iowrite32 (mc_filter[0 ], ioaddr + MulticastFilter0);iowrite32 (mc_filter[1 ], ioaddr + MulticastFilter1);
--
PATCH 8/10 Handle pci_enable_device() errors in resume
In reply to Valerie Henson--- drivers/net/tulip/de2104x.c | 16 ++++++++++------ drivers/net/tulip/tulip_core.c | 5 ++++- drivers/net/tulip/winbond-840.c | 12 ++++++++---- 3 files changed, 22 insertions(+), 11 deletions(-)
drivers/net/tulip/tulip_core.c +4 -1
@@ -1780,7 +1780,10 @@ static int tulip_resume(struct pci_dev *pci_set_power_state (pdev,PCI_D0 );pci_restore_state (pdev); -pci_enable_device (pdev); +if ((retval =pci_enable_device (pdev))) { +printk (KERN_ERR "tulip: pci_enable_device failed in resume\n" ); +return retval; + }if ((retval =request_irq (dev->irq, &tulip_interrupt,IRQF_SHARED , dev->name, dev))) {printk (KERN_ERR "tulip: request_irq failed in resume\n" );
drivers/net/tulip/winbond-840.c +8 -4
@@ -1626,14 +1626,18 @@ static int w840_resume (struct pci_dev * {struct net_device *dev =pci_get_drvdata (pdev);struct netdev_private *np =netdev_priv (dev); +int retval =0 ;rtnl_lock ();if (netif_device_present (dev)) goto out;/* device not suspended */ if (netif_running (dev)) { -pci_enable_device (pdev); -/* pci_power_on(pdev); */ - +if ((retval =pci_enable_device (pdev))) { +printk (KERN_ERR +"%s: pci_enable_device failed in resume\n" , + dev->name); + goto out; + }spin_lock_irq (&np->lock);iowrite32 (1 , np->base_addr+PCIBusCfg);ioread32 (np->base_addr+PCIBusCfg);
@@ -1651,7 +1655,7 @@ static int w840_resume (struct pci_dev * } out:rtnl_unlock (); -return 0 ; +return retval; }#endif
drivers/net/tulip/de2104x.c +10 -6
@@ -2138,17 +2138,21 @@ static int de_resume (struct pci_dev *pd {struct net_device *dev =pci_get_drvdata (pdev);struct de_private *de = dev->priv; +int retval =0 ;rtnl_lock ();if (netif_device_present (dev)) goto out; -if (netif_running (dev)) { -pci_enable_device (pdev); -de_init_hw (de); -netif_device_attach (dev); - }else { -netif_device_attach (dev); +if (!netif_running (dev)) + goto out_attach; +if ((retval =pci_enable_device (pdev))) { +printk (KERN_ERR "%s: pci_enable_device failed in resume\n" , + dev->name); + goto out; } +de_init_hw (de); +out_attach: +netif_device_attach (dev); out:rtnl_unlock ();return 0 ;
--
PATCH 9/10 Update tulip version
In reply to Valerie Henson--- drivers/net/tulip/tulip_core.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
drivers/net/tulip/tulip_core.c +3 -3
@@ -17,11 +17,11 @@#define DRV_NAME "tulip"#ifdef CONFIG_TULIP_NAPI -#define DRV_VERSION "1.1.14-NAPI"/* Keep at least for test */ +#define DRV_VERSION "1.1.15-NAPI"/* Keep at least for test */ #else -#define DRV_VERSION "1.1.14" +#define DRV_VERSION "1.1.15"#endif -#define DRV_RELDATE "May 6, 2006" +#define DRV_RELDATE "Aug 23, 2006"#include <linux/module.h>
--
PATCH 10/10 Update winbond840.c version
In reply to Valerie Henson--- drivers/net/tulip/winbond-840.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/net/tulip/winbond-840.c +2 -2
@@ -45,8 +45,8 @@*/ #define DRV_NAME "winbond-840" -#define DRV_VERSION "1.01-d" -#define DRV_RELDATE "Nov-17-2001" +#define DRV_VERSION "1.01-e" +#define DRV_RELDATE "Aug-23-2006"/* Automatically extracted configuration info:
--