2.6.x net driver fixes
Subsystems (3)
PATCH 1/1 2.6.x net driver fixes
Please do a
bk pull bk://gkernel.bkbits.net/net-drivers-2.6
This will update the following files:
drivers/net/b44.c | 36 +++--- drivers/net/b44.h | 3 drivers/net/e1000/e1000.h | 1 drivers/net/e1000/e1000_main.c | 21 +++ drivers/net/macsonic.c | 1 drivers/net/pcnet32.c | 3 drivers/net/s2io-regs.h | 2 drivers/net/s2io.c | 245 +++++++++++++++++++---------------------- drivers/net/s2io.h | 119 ------------------- include/linux/pci_ids.h | 2 10 files changed, 167 insertions(+), 266 deletions(-)
through these ChangeSets:
<fthain:telegraphics.com.au>:
o fix Jazzsonic driver build on m68k
John W. Linville:
o e1000: add MODULE_VERSION
o b44: allocate tx bounce bufs as needed
o e1000: flush work queues on remove
o e1000: avoid sleeping in watchdog timer context
Ravinandan Arakali:
o S2io: Changed copyright and added support for Xframe II
o S2io: h/w initialization fixes
o S2io: Statistics fix
Steven HARDY:
o pcnet32: 79C975 fiber fix
drivers/net/b44.c +21 -15
@@ -907,6 +907,7 @@static int b44_start_xmit (struct sk_buff *skb,struct net_device *dev) {struct b44 *bp =netdev_priv (dev); +struct sk_buff *bounce_skb;dma_addr_t mapping;u32 len, entry, ctrl;
@@ -922,15 +923,31 @@return 1 ; } - entry = bp->tx_prod; mapping =pci_map_single (bp->pdev, skb->data, len,PCI_DMA_TODEVICE );if (mapping+len >B44_DMA_MASK ) {/* Chip can't handle DMA to/from >1GB, use bounce buffer */ -pci_unmap_single (bp->pdev, mapping, len,PCI_DMA_TODEVICE ); -memcpy (bp->tx_bufs+entry*TX_PKT_BUF_SZ ,skb->data,skb->len); - mapping =pci_map_single (bp->pdev, bp->tx_bufs+entry*TX_PKT_BUF_SZ , len,PCI_DMA_TODEVICE ); +pci_unmap_single (bp->pdev, mapping, len,PCI_DMA_TODEVICE ); + + bounce_skb =__dev_alloc_skb (TX_PKT_BUF_SZ , +GFP_ATOMIC |GFP_DMA ); +if (!bounce_skb) +return NETDEV_TX_BUSY ; + + mapping =pci_map_single (bp->pdev, bounce_skb->data, + len,PCI_DMA_TODEVICE ); +if (mapping+len >B44_DMA_MASK ) { +pci_unmap_single (bp->pdev, mapping, + len,PCI_DMA_TODEVICE ); +dev_kfree_skb_any (bounce_skb); +return NETDEV_TX_BUSY ; + } + +memcpy (skb_put (bounce_skb, len), skb->data, skb->len); +dev_kfree_skb_any (skb); + skb = bounce_skb; } + entry = bp->tx_prod; bp->tx_buffers[entry].skb = skb;pci_unmap_addr_set (&bp->tx_buffers[entry], mapping, mapping);
@@ -1077,11 +1094,6 @@ bp->tx_ring, bp->tx_ring_dma); bp->tx_ring =NULL ; } -if (bp->tx_bufs) { -pci_free_consistent (bp->pdev,B44_TX_RING_SIZE *TX_PKT_BUF_SZ , - bp->tx_bufs, bp->tx_bufs_dma); - bp->tx_bufs =NULL ; - } }/*
@@ -1103,12 +1115,6 @@if (!bp->tx_buffers) goto out_err;memset (bp->tx_buffers,0 , size); - - size =B44_TX_RING_SIZE *TX_PKT_BUF_SZ ; - bp->tx_bufs =pci_alloc_consistent (bp->pdev, size, &bp->tx_bufs_dma); -if (!bp->tx_bufs) - goto out_err; -memset (bp->tx_bufs,0 , size); size =DMA_TABLE_BYTES ; bp->rx_ring =pci_alloc_consistent (bp->pdev, size, &bp->rx_ring_dma);
drivers/net/b44.h +1 -2
@@ -383,7 +383,6 @@struct ring_info *rx_buffers;struct ring_info *tx_buffers; -unsigned char *tx_bufs;u32 dma_offset;u32 flags;
@@ -415,7 +414,7 @@struct pci_dev *pdev;struct net_device *dev; -dma_addr_t rx_ring_dma, tx_ring_dma,tx_bufs_dma; +dma_addr_t rx_ring_dma, tx_ring_dma;u32 rx_pending;u32 tx_pending;
drivers/net/e1000/e1000.h +1 -0
@@ -203,6 +203,7 @@spinlock_t stats_lock;atomic_t irq_sem;struct work_struct tx_timeout_task; +struct work_struct watchdog_task;uint8_t fc_autoneg;struct timer_list blink_timer;
drivers/net/e1000/e1000_main.c +18 -3
@@ -65,7 +65,8 @@#else #define DRIVERNAPI "-NAPI"#endif -char e1000_driver_version[] ="5.7.6-k2" DRIVERNAPI ; +#define DRV_VERSION "5.7.6-k2"DRIVERNAPI +char e1000_driver_version[] =DRV_VERSION ;char e1000_copyright[] ="Copyright (c) 1999-2004 Intel Corporation." ;/* e1000_pci_tbl - PCI Device ID Table
@@ -142,6 +143,7 @@static void e1000_set_multi (struct net_device *netdev);static void e1000_update_phy_info (unsigned long data);static void e1000_watchdog (unsigned long data); +static void e1000_watchdog_task (struct e1000_adapter *adapter);static void e1000_82547_tx_fifo_stall (unsigned long data);static int e1000_xmit_frame (struct sk_buff *skb,struct net_device *netdev);static struct net_device_stats *e1000_get_stats (struct net_device *netdev);
@@ -210,6 +212,7 @@MODULE_AUTHOR ("Intel Corporation, <[email protected]>" );MODULE_DESCRIPTION ("Intel(R) PRO/1000 Network Driver" );MODULE_LICENSE ("GPL" ); +MODULE_VERSION (DRV_VERSION );static int debug =NETIF_MSG_DRV |NETIF_MSG_PROBE ;module_param (debug, int,0 );
@@ -574,6 +577,9 @@ adapter->watchdog_timer.function = &e1000_watchdog; adapter->watchdog_timer.data = (unsigned long ) adapter; +INIT_WORK (&adapter->watchdog_task, + (void (*)(void *))e1000_watchdog_task, adapter); +init_timer (&adapter->phy_info_timer); adapter->phy_info_timer.function = &e1000_update_phy_info; adapter->phy_info_timer.data = (unsigned long ) adapter;
@@ -660,6 +666,8 @@struct e1000_adapter *adapter = netdev->priv;uint32_t manc; +flush_scheduled_work (); +if (adapter->hw.mac_type >= e1000_82540 && adapter->hw.media_type == e1000_media_type_copper) { manc =E1000_READ_REG (&adapter->hw,MANC );
@@ -1529,13 +1537,20 @@/** * e1000_watchdog - Timer Call-back -* @data: pointer to netdev cast into an unsigned long +* @data: pointer to adapter cast into an unsigned long **/ -static void e1000_watchdog (unsigned long data) {struct e1000_adapter *adapter = (struct e1000_adapter *) data; + +/* Do the rest outside of interrupt context */ +schedule_work (&adapter->watchdog_task); +} + +static void +e1000_watchdog_task (struct e1000_adapter *adapter) +{struct net_device *netdev = adapter->netdev;struct e1000_desc_ring *txdr = &adapter->tx_ring;uint32_t link;
drivers/net/macsonic.c +1 -0
@@ -638,6 +638,7 @@#define vdma_free (baz)#define sonic_chiptomem (bat) (bat)#define PHYSADDR (quux) (quux) +#define CPHYSADDR (quux) (quux)#define sonic_request_irq request_irq#define sonic_free_irq free_irq
drivers/net/pcnet32.c +2 -1
@@ -1351,7 +1351,8 @@printk (KERN_INFO "%s: registered as %s\n" , dev->name, lp->name); cards_found++; - a->write_bcr (ioaddr,2 ,0x1002 );/* enable LED writes */ +/* enable LED writes */ + a->write_bcr (ioaddr,2 , a->read_bcr (ioaddr,2 ) |0x1000 );return 0 ;
drivers/net/s2io-regs.h +1 -1
@@ -1,6 +1,6 @@/************************************************************************ * regs.h: A Linux PCI-X Ethernet driver for S2IO 10GbE Server NIC -* Copyright 2002 Raghavendra Koushik ([email protected]) +* Copyright(c) 2002-2005 Neterion Inc. * This software may be used and distributed according to the terms of * the GNU General Public License (GPL), incorporated herein by reference.
drivers/net/s2io.c +118 -127
320 lines not on this page · raw message
drivers/net/s2io.h +2 -117
142 lines not on this page · raw message
include/linux/pci_ids.h +2 -0
@@ -2159,6 +2159,8 @@#define PCI_VENDOR_ID_S2IO 0x17d5#define PCI_DEVICE_ID_S2IO_WIN 0x5731#define PCI_DEVICE_ID_S2IO_UNI 0x5831 +#define PCI_DEVICE_ID_HERC_WIN 0x5732 +#define PCI_DEVICE_ID_HERC_UNI 0x5832#define PCI_VENDOR_ID_INFINICON 0x1820