Commit 1d90ac41 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://kernel.bkbits.net/jgarzik/net-drivers-2.6

into home.osdl.org:/home/torvalds/v2.5/linux
parents 50692f8c c4f0fddf
This diff is collapsed.
...@@ -420,8 +420,8 @@ L: linux-computone@lazuli.wittsend.com ...@@ -420,8 +420,8 @@ L: linux-computone@lazuli.wittsend.com
S: Supported S: Supported
COMX/MULTIGATE SYNC SERIAL DRIVERS COMX/MULTIGATE SYNC SERIAL DRIVERS
P: Gergely Madarasz P: Pasztor Szilard
M: Gergely Madarasz <gorgo@itc.hu> M: Pasztor Szilard <don@itc.hu>
S: Supported S: Supported
COSA/SRP SYNC SERIAL DRIVER COSA/SRP SYNC SERIAL DRIVER
......
...@@ -110,6 +110,7 @@ ...@@ -110,6 +110,7 @@
#include <linux/mii.h> #include <linux/mii.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/crc32.h> #include <linux/crc32.h>
#include <linux/suspend.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
...@@ -1597,6 +1598,9 @@ static int rtl8139_thread (void *data) ...@@ -1597,6 +1598,9 @@ static int rtl8139_thread (void *data)
timeout = next_tick; timeout = next_tick;
do { do {
timeout = interruptible_sleep_on_timeout (&tp->thr_wait, timeout); timeout = interruptible_sleep_on_timeout (&tp->thr_wait, timeout);
/* make swsusp happy with our thread */
if (current->flags & PF_FREEZE)
refrigerator(PF_IOTHREAD);
} while (!signal_pending (current) && (timeout > 0)); } while (!signal_pending (current) && (timeout > 0));
if (signal_pending (current)) { if (signal_pending (current)) {
......
/* b44.c: Broadcom 4400 device driver. /* b44.c: Broadcom 4400 device driver.
* *
* Copyright (C) 2002 David S. Miller (davem@redhat.com) * Copyright (C) 2002 David S. Miller (davem@redhat.com)
* Fixed by Pekka Pietikainen (pp@ee.oulu.fi)
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -14,6 +15,7 @@ ...@@ -14,6 +15,7 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/version.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -23,8 +25,8 @@ ...@@ -23,8 +25,8 @@
#define DRV_MODULE_NAME "b44" #define DRV_MODULE_NAME "b44"
#define PFX DRV_MODULE_NAME ": " #define PFX DRV_MODULE_NAME ": "
#define DRV_MODULE_VERSION "0.6" #define DRV_MODULE_VERSION "0.9"
#define DRV_MODULE_RELDATE "Nov 11, 2002" #define DRV_MODULE_RELDATE "Jul 14, 2003"
#define B44_DEF_MSG_ENABLE \ #define B44_DEF_MSG_ENABLE \
(NETIF_MSG_DRV | \ (NETIF_MSG_DRV | \
...@@ -78,6 +80,15 @@ MODULE_PARM_DESC(b44_debug, "B44 bitmapped debugging message enable value"); ...@@ -78,6 +80,15 @@ MODULE_PARM_DESC(b44_debug, "B44 bitmapped debugging message enable value");
static int b44_debug = -1; /* -1 == use B44_DEF_MSG_ENABLE as value */ static int b44_debug = -1; /* -1 == use B44_DEF_MSG_ENABLE as value */
#ifndef PCI_DEVICE_ID_BCM4401
#define PCI_DEVICE_ID_BCM4401 0x4401
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
#define IRQ_RETVAL(x)
#define irqreturn_t void
#endif
static struct pci_device_id b44_pci_tbl[] __devinitdata = { static struct pci_device_id b44_pci_tbl[] __devinitdata = {
{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_BCM4401, { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_BCM4401,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
...@@ -259,7 +270,7 @@ static int ssb_is_core_up(struct b44 *bp) ...@@ -259,7 +270,7 @@ static int ssb_is_core_up(struct b44 *bp)
== SBTMSLOW_CLOCK); == SBTMSLOW_CLOCK);
} }
static void __b44_cam_write(struct b44 *bp, char *data, int index) static void __b44_cam_write(struct b44 *bp, unsigned char *data, int index)
{ {
u32 val; u32 val;
...@@ -521,7 +532,7 @@ static void b44_check_phy(struct b44 *bp) ...@@ -521,7 +532,7 @@ static void b44_check_phy(struct b44 *bp)
/* Link now up */ /* Link now up */
netif_carrier_on(bp->dev); netif_carrier_on(bp->dev);
b44_link_report(bp); b44_link_report(bp);
} else if (netif_carrier_ok(bp->dev)) { } else if (netif_carrier_ok(bp->dev) && !(bmsr & BMSR_LSTATUS)) {
/* Link now down */ /* Link now down */
netif_carrier_off(bp->dev); netif_carrier_off(bp->dev);
b44_link_report(bp); b44_link_report(bp);
...@@ -650,8 +661,7 @@ static void b44_recycle_rx(struct b44 *bp, int src_idx, u32 dest_idx_unmasked) ...@@ -650,8 +661,7 @@ static void b44_recycle_rx(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
src_map = &bp->rx_buffers[src_idx]; src_map = &bp->rx_buffers[src_idx];
dest_map->skb = src_map->skb; dest_map->skb = src_map->skb;
rh = (struct rx_header *) rh = (struct rx_header *) src_map->skb->data;
(src_map->skb->data - bp->rx_offset);
rh->len = 0; rh->len = 0;
rh->flags = 0; rh->flags = 0;
pci_unmap_addr_set(dest_map, mapping, pci_unmap_addr_set(dest_map, mapping,
...@@ -660,9 +670,12 @@ static void b44_recycle_rx(struct b44 *bp, int src_idx, u32 dest_idx_unmasked) ...@@ -660,9 +670,12 @@ static void b44_recycle_rx(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
ctrl = src_desc->ctrl; ctrl = src_desc->ctrl;
if (dest_idx == (B44_RX_RING_SIZE - 1)) if (dest_idx == (B44_RX_RING_SIZE - 1))
ctrl |= cpu_to_le32(DESC_CTRL_EOT); ctrl |= cpu_to_le32(DESC_CTRL_EOT);
else
ctrl &= cpu_to_le32(~DESC_CTRL_EOT);
dest_desc->ctrl = ctrl; dest_desc->ctrl = ctrl;
dest_desc->addr = src_desc->addr; dest_desc->addr = src_desc->addr;
src_map->skb = NULL;
} }
static int b44_rx(struct b44 *bp, int budget) static int b44_rx(struct b44 *bp, int budget)
...@@ -685,7 +698,7 @@ static int b44_rx(struct b44 *bp, int budget) ...@@ -685,7 +698,7 @@ static int b44_rx(struct b44 *bp, int budget)
pci_dma_sync_single(bp->pdev, map, pci_dma_sync_single(bp->pdev, map,
RX_PKT_BUF_SZ, RX_PKT_BUF_SZ,
PCI_DMA_FROMDEVICE); PCI_DMA_FROMDEVICE);
rh = (struct rx_header *) (skb->data - bp->rx_offset); rh = (struct rx_header *) skb->data;
len = cpu_to_le16(rh->len); len = cpu_to_le16(rh->len);
if ((len > (RX_PKT_BUF_SZ - bp->rx_offset)) || if ((len > (RX_PKT_BUF_SZ - bp->rx_offset)) ||
(rh->flags & cpu_to_le16(RX_FLAG_ERRORS))) { (rh->flags & cpu_to_le16(RX_FLAG_ERRORS))) {
...@@ -718,7 +731,9 @@ static int b44_rx(struct b44 *bp, int budget) ...@@ -718,7 +731,9 @@ static int b44_rx(struct b44 *bp, int budget)
goto drop_it; goto drop_it;
pci_unmap_single(bp->pdev, map, pci_unmap_single(bp->pdev, map,
skb_size, PCI_DMA_FROMDEVICE); skb_size, PCI_DMA_FROMDEVICE);
skb_put(skb, len); /* Leave out rx_header */
skb_put(skb, len+bp->rx_offset);
skb_pull(skb,bp->rx_offset);
} else { } else {
struct sk_buff *copy_skb; struct sk_buff *copy_skb;
...@@ -730,8 +745,8 @@ static int b44_rx(struct b44 *bp, int budget) ...@@ -730,8 +745,8 @@ static int b44_rx(struct b44 *bp, int budget)
copy_skb->dev = bp->dev; copy_skb->dev = bp->dev;
skb_reserve(copy_skb, 2); skb_reserve(copy_skb, 2);
skb_put(copy_skb, len); skb_put(copy_skb, len);
/* DMA sync done above */ /* DMA sync done above, copy just the actual packet */
memcpy(copy_skb->data, skb->data, len); memcpy(copy_skb->data, skb->data+bp->rx_offset, len);
skb = copy_skb; skb = copy_skb;
} }
...@@ -748,6 +763,7 @@ static int b44_rx(struct b44 *bp, int budget) ...@@ -748,6 +763,7 @@ static int b44_rx(struct b44 *bp, int budget)
} }
bp->rx_cons = cons; bp->rx_cons = cons;
bw32(B44_DMARX_PTR, cons * sizeof(struct dma_desc));
return received; return received;
} }
...@@ -764,6 +780,7 @@ static int b44_poll(struct net_device *netdev, int *budget) ...@@ -764,6 +780,7 @@ static int b44_poll(struct net_device *netdev, int *budget)
b44_tx(bp); b44_tx(bp);
/* spin_unlock(&bp->tx_lock); */ /* spin_unlock(&bp->tx_lock); */
} }
spin_unlock_irq(&bp->lock);
done = 1; done = 1;
if (bp->istat & ISTAT_RX) { if (bp->istat & ISTAT_RX) {
...@@ -783,10 +800,12 @@ static int b44_poll(struct net_device *netdev, int *budget) ...@@ -783,10 +800,12 @@ static int b44_poll(struct net_device *netdev, int *budget)
} }
if (bp->istat & ISTAT_ERRORS) { if (bp->istat & ISTAT_ERRORS) {
spin_lock_irq(&bp->lock);
b44_halt(bp); b44_halt(bp);
b44_init_rings(bp); b44_init_rings(bp);
b44_init_hw(bp); b44_init_hw(bp);
netif_wake_queue(bp->dev); netif_wake_queue(bp->dev);
spin_unlock_irq(&bp->lock);
done = 1; done = 1;
} }
...@@ -794,7 +813,6 @@ static int b44_poll(struct net_device *netdev, int *budget) ...@@ -794,7 +813,6 @@ static int b44_poll(struct net_device *netdev, int *budget)
netif_rx_complete(netdev); netif_rx_complete(netdev);
b44_enable_ints(bp); b44_enable_ints(bp);
} }
spin_unlock_irq(&bp->lock);
return (done ? 0 : 1); return (done ? 0 : 1);
} }
...@@ -885,7 +903,7 @@ static int b44_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -885,7 +903,7 @@ static int b44_start_xmit(struct sk_buff *skb, struct net_device *dev)
ctrl |= DESC_CTRL_EOT; ctrl |= DESC_CTRL_EOT;
bp->tx_ring[entry].ctrl = cpu_to_le32(ctrl); bp->tx_ring[entry].ctrl = cpu_to_le32(ctrl);
bp->tx_ring[entry].addr = cpu_to_le32((u32) mapping); bp->tx_ring[entry].addr = cpu_to_le32((u32) mapping+bp->dma_offset);
entry = NEXT_TX(entry); entry = NEXT_TX(entry);
...@@ -1173,8 +1191,8 @@ static int b44_init_hw(struct b44 *bp) ...@@ -1173,8 +1191,8 @@ static int b44_init_hw(struct b44 *bp)
__b44_set_rx_mode(bp->dev); __b44_set_rx_mode(bp->dev);
/* MTU + eth header + possible VLAN tag + struct rx_header */ /* MTU + eth header + possible VLAN tag + struct rx_header */
bw32(B44_RXMAXLEN, bp->dev->mtu + ETH_HLEN + 8 + 24); bw32(B44_RXMAXLEN, bp->dev->mtu + ETH_HLEN + 8 + RX_HEADER_LEN);
bw32(B44_TXMAXLEN, bp->dev->mtu + ETH_HLEN + 8 + 24); bw32(B44_TXMAXLEN, bp->dev->mtu + ETH_HLEN + 8 + RX_HEADER_LEN);
bw32(B44_TX_WMARK, 56); /* XXX magic */ bw32(B44_TX_WMARK, 56); /* XXX magic */
bw32(B44_DMATX_CTRL, DMATX_CTRL_ENABLE); bw32(B44_DMATX_CTRL, DMATX_CTRL_ENABLE);
...@@ -1184,6 +1202,7 @@ static int b44_init_hw(struct b44 *bp) ...@@ -1184,6 +1202,7 @@ static int b44_init_hw(struct b44 *bp)
bw32(B44_DMARX_ADDR, bp->rx_ring_dma + bp->dma_offset); bw32(B44_DMARX_ADDR, bp->rx_ring_dma + bp->dma_offset);
bw32(B44_DMARX_PTR, bp->rx_pending); bw32(B44_DMARX_PTR, bp->rx_pending);
bp->rx_prod = bp->rx_pending;
bw32(B44_MIB_CTRL, MIB_CTRL_CLR_ON_READ); bw32(B44_MIB_CTRL, MIB_CTRL_CLR_ON_READ);
...@@ -1345,6 +1364,8 @@ static void __b44_set_rx_mode(struct net_device *dev) ...@@ -1345,6 +1364,8 @@ static void __b44_set_rx_mode(struct net_device *dev)
__b44_load_mcast(bp, dev); __b44_load_mcast(bp, dev);
bw32(B44_RXCONFIG, val); bw32(B44_RXCONFIG, val);
val = br32(B44_CAM_CTRL);
bw32(B44_CAM_CTRL, val | CAM_CTRL_ENABLE);
} }
} }
...@@ -1678,8 +1699,9 @@ static int __devinit b44_get_invariants(struct b44 *bp) ...@@ -1678,8 +1699,9 @@ static int __devinit b44_get_invariants(struct b44 *bp)
bp->core_unit = ssb_core_unit(bp); bp->core_unit = ssb_core_unit(bp);
bp->dma_offset = ssb_get_addr(bp, SBID_PCI_DMA, 0); bp->dma_offset = ssb_get_addr(bp, SBID_PCI_DMA, 0);
/* XXX - really required?
bp->flags |= B44_FLAG_BUGGY_TXPTR; bp->flags |= B44_FLAG_BUGGY_TXPTR;
*/
out: out:
return err; return err;
} }
......
...@@ -142,7 +142,7 @@ ...@@ -142,7 +142,7 @@
#define MDIO_OP_READ 2 #define MDIO_OP_READ 2
#define MDIO_DATA_SB_MASK 0xc0000000 /* Start Bits */ #define MDIO_DATA_SB_MASK 0xc0000000 /* Start Bits */
#define MDIO_DATA_SB_SHIFT 30 #define MDIO_DATA_SB_SHIFT 30
#define MDIO_DATA_SB_START 0x10000000 /* Start Of Frame */ #define MDIO_DATA_SB_START 0x40000000 /* Start Of Frame */
#define B44_EMAC_IMASK 0x0418UL /* EMAC Interrupt Mask */ #define B44_EMAC_IMASK 0x0418UL /* EMAC Interrupt Mask */
#define B44_EMAC_ISTAT 0x041CUL /* EMAC Interrupt Status */ #define B44_EMAC_ISTAT 0x041CUL /* EMAC Interrupt Status */
#define EMAC_INT_MII 0x00000001 /* MII MDIO Interrupt */ #define EMAC_INT_MII 0x00000001 /* MII MDIO Interrupt */
......
...@@ -1475,6 +1475,107 @@ e1000_ethtool_ioctl(struct net_device *netdev, struct ifreq *ifr) ...@@ -1475,6 +1475,107 @@ e1000_ethtool_ioctl(struct net_device *netdev, struct ifreq *ifr)
return -EFAULT; return -EFAULT;
return 0; return 0;
} }
case ETHTOOL_GRXCSUM: {
struct ethtool_value edata = { ETHTOOL_GRXCSUM };
edata.data = adapter->rx_csum;
if (copy_to_user(addr, &edata, sizeof(edata)))
return -EFAULT;
return 0;
}
case ETHTOOL_SRXCSUM: {
struct ethtool_value edata;
if (copy_from_user(&edata, addr, sizeof(edata)))
return -EFAULT;
adapter->rx_csum = edata.data;
if(netif_running(netdev)) {
e1000_down(adapter);
e1000_up(adapter);
} else
e1000_reset(adapter);
return 0;
}
case ETHTOOL_GTXCSUM: {
struct ethtool_value edata = { ETHTOOL_GTXCSUM };
edata.data =
(netdev->features & NETIF_F_HW_CSUM) != 0;
if (copy_to_user(addr, &edata, sizeof(edata)))
return -EFAULT;
return 0;
}
case ETHTOOL_STXCSUM: {
struct ethtool_value edata;
if (copy_from_user(&edata, addr, sizeof(edata)))
return -EFAULT;
if(adapter->hw.mac_type < e1000_82543) {
if (edata.data != 0)
return -EINVAL;
return 0;
}
if (edata.data)
netdev->features |= NETIF_F_HW_CSUM;
else
netdev->features &= ~NETIF_F_HW_CSUM;
return 0;
}
case ETHTOOL_GSG: {
struct ethtool_value edata = { ETHTOOL_GSG };
edata.data =
(netdev->features & NETIF_F_SG) != 0;
if (copy_to_user(addr, &edata, sizeof(edata)))
return -EFAULT;
return 0;
}
case ETHTOOL_SSG: {
struct ethtool_value edata;
if (copy_from_user(&edata, addr, sizeof(edata)))
return -EFAULT;
if (edata.data)
netdev->features |= NETIF_F_SG;
else
netdev->features &= ~NETIF_F_SG;
return 0;
}
#ifdef NETIF_F_TSO
case ETHTOOL_GTSO: {
struct ethtool_value edata = { ETHTOOL_GTSO };
edata.data = (netdev->features & NETIF_F_TSO) != 0;
if (copy_to_user(addr, &edata, sizeof(edata)))
return -EFAULT;
return 0;
}
case ETHTOOL_STSO: {
struct ethtool_value edata;
if (copy_from_user(&edata, addr, sizeof(edata)))
return -EFAULT;
if ((adapter->hw.mac_type < e1000_82544) ||
(adapter->hw.mac_type == e1000_82547)) {
if (edata.data != 0)
return -EINVAL;
return 0;
}
if (edata.data)
netdev->features |= NETIF_F_TSO;
else
netdev->features &= ~NETIF_F_TSO;
return 0;
}
#endif
default: default:
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
char e1000_driver_name[] = "e1000"; char e1000_driver_name[] = "e1000";
char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver"; char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
char e1000_driver_version[] = "5.1.13-k1"; char e1000_driver_version[] = "5.1.13-k2";
char e1000_copyright[] = "Copyright (c) 1999-2003 Intel Corporation."; char e1000_copyright[] = "Copyright (c) 1999-2003 Intel Corporation.";
/* e1000_pci_tbl - PCI Device ID Table /* e1000_pci_tbl - PCI Device ID Table
......
...@@ -635,6 +635,7 @@ static void __devexit ne2k_pci_remove_one (struct pci_dev *pdev) ...@@ -635,6 +635,7 @@ static void __devexit ne2k_pci_remove_one (struct pci_dev *pdev)
unregister_netdev(dev); unregister_netdev(dev);
release_region(dev->base_addr, NE_IO_EXTENT); release_region(dev->base_addr, NE_IO_EXTENT);
kfree(dev->priv);
kfree(dev); kfree(dev);
pci_set_drvdata(pdev, NULL); pci_set_drvdata(pdev, NULL);
} }
......
...@@ -297,6 +297,7 @@ static dev_link_t *tc574_attach(void) ...@@ -297,6 +297,7 @@ static dev_link_t *tc574_attach(void)
link = &lp->link; link = &lp->link;
link->priv = dev; link->priv = dev;
spin_lock_init(&lp->window_lock);
init_timer(&link->release); init_timer(&link->release);
link->release.function = &tc574_release; link->release.function = &tc574_release;
link->release.data = (unsigned long)link; link->release.data = (unsigned long)link;
......
...@@ -254,8 +254,7 @@ static void SetLANCE(struct SKMCA_NETDEV *dev, u16 addr, u16 value) ...@@ -254,8 +254,7 @@ static void SetLANCE(struct SKMCA_NETDEV *dev, u16 addr, u16 value)
/* disable interrupts */ /* disable interrupts */
save_flags(flags); spin_lock_irqsave(&priv->lock, flags);
cli();
/* wait until no transfer is pending */ /* wait until no transfer is pending */
...@@ -281,7 +280,7 @@ static void SetLANCE(struct SKMCA_NETDEV *dev, u16 addr, u16 value) ...@@ -281,7 +280,7 @@ static void SetLANCE(struct SKMCA_NETDEV *dev, u16 addr, u16 value)
/* reenable interrupts */ /* reenable interrupts */
restore_flags(flags); spin_lock_irqrestore(&priv->lock, flags);
} }
/* get LANCE register */ /* get LANCE register */
...@@ -294,8 +293,7 @@ static u16 GetLANCE(struct SKMCA_NETDEV *dev, u16 addr) ...@@ -294,8 +293,7 @@ static u16 GetLANCE(struct SKMCA_NETDEV *dev, u16 addr)
/* disable interrupts */ /* disable interrupts */
save_flags(flags); spin_lock_irqsave(&priv->lock, flags);
cli();
/* wait until no transfer is pending */ /* wait until no transfer is pending */
...@@ -321,7 +319,7 @@ static u16 GetLANCE(struct SKMCA_NETDEV *dev, u16 addr) ...@@ -321,7 +319,7 @@ static u16 GetLANCE(struct SKMCA_NETDEV *dev, u16 addr)
/* reenable interrupts */ /* reenable interrupts */
restore_flags(flags); spin_lock_irqrestore(&priv->lock, flags);
return res; return res;
} }
...@@ -968,8 +966,9 @@ static int skmca_tx(struct sk_buff *skb, struct SKMCA_NETDEV *dev) ...@@ -968,8 +966,9 @@ static int skmca_tx(struct sk_buff *skb, struct SKMCA_NETDEV *dev)
#endif #endif
/* one more descriptor busy */ /* one more descriptor busy */
save_flags(flags);
cli(); spin_lock_irqsave(&priv->lock, flags);
priv->nexttxput++; priv->nexttxput++;
if (priv->nexttxput >= TXCOUNT) if (priv->nexttxput >= TXCOUNT)
priv->nexttxput = 0; priv->nexttxput = 0;
...@@ -994,7 +993,7 @@ static int skmca_tx(struct sk_buff *skb, struct SKMCA_NETDEV *dev) ...@@ -994,7 +993,7 @@ static int skmca_tx(struct sk_buff *skb, struct SKMCA_NETDEV *dev)
if (priv->txbusy == 0) if (priv->txbusy == 0)
SetLANCE(dev, LANCE_CSR0, CSR0_INEA | CSR0_TDMD); SetLANCE(dev, LANCE_CSR0, CSR0_INEA | CSR0_TDMD);
restore_flags(flags); spin_lock_irqrestore(&priv->lock, flags);
tx_done: tx_done:
......
...@@ -53,6 +53,7 @@ typedef struct { ...@@ -53,6 +53,7 @@ typedef struct {
int realirq; /* memorizes actual IRQ, even when int realirq; /* memorizes actual IRQ, even when
currently not allocated */ currently not allocated */
skmca_medium medium; /* physical cannector */ skmca_medium medium; /* physical cannector */
spinlock_t lock;
} skmca_priv; } skmca_priv;
/* card registers: control/status register bits */ /* card registers: control/status register bits */
......
...@@ -122,11 +122,14 @@ ...@@ -122,11 +122,14 @@
- No filtering multicast in promisc mode (Edward Peng) - No filtering multicast in promisc mode (Edward Peng)
- Fix for Rhine-I Tx timeouts - Fix for Rhine-I Tx timeouts
LK1.1.19 (Roger Luethi)
- Increase Tx threshold for unspecified errors
*/ */
#define DRV_NAME "via-rhine" #define DRV_NAME "via-rhine"
#define DRV_VERSION "1.1.18-2.5" #define DRV_VERSION "1.1.19-2.5"
#define DRV_RELDATE "July-4-2003" #define DRV_RELDATE "July-12-2003"
/* A few user-configurable values. /* A few user-configurable values.
...@@ -1664,9 +1667,13 @@ static void via_rhine_error(struct net_device *dev, int intr_status) ...@@ -1664,9 +1667,13 @@ static void via_rhine_error(struct net_device *dev, int intr_status)
} }
if ((intr_status & IntrTxError) && ~( IntrTxAborted | IntrTxUnderrun | if ((intr_status & IntrTxError) && ~( IntrTxAborted | IntrTxUnderrun |
IntrTxDescRace )) { IntrTxDescRace )) {
if (debug > 2) if (np->tx_thresh < 0xE0) {
printk(KERN_INFO "%s: Unspecified error.\n", writeb(np->tx_thresh += 0x20, ioaddr + TxConfig);
dev->name); }
if (debug > 1)
printk(KERN_INFO "%s: Unspecified error. Tx "
"threshold now %2.2x.\n",
dev->name, np->tx_thresh);
} }
if (intr_status & ( IntrTxAborted | IntrTxUnderrun | IntrTxDescRace | if (intr_status & ( IntrTxAborted | IntrTxUnderrun | IntrTxDescRace |
IntrTxError )) IntrTxError ))
......
...@@ -60,9 +60,10 @@ config COSA ...@@ -60,9 +60,10 @@ config COSA
# #
# COMX drivers # COMX drivers
# #
# Not updated to 2.6.
config COMX config COMX
tristate "MultiGate (COMX) synchronous serial boards support" tristate "MultiGate (COMX) synchronous serial boards support"
depends on WAN && (ISA || PCI) depends on WAN && (ISA || PCI) && OBSOLETE
---help--- ---help---
Say Y if you want to use any board from the MultiGate (COMX) family. Say Y if you want to use any board from the MultiGate (COMX) family.
These boards are synchronous serial adapters for the PC, These boards are synchronous serial adapters for the PC,
......
...@@ -296,6 +296,14 @@ config PCMCIA_ATMEL ...@@ -296,6 +296,14 @@ config PCMCIA_ATMEL
firmware package can be downloaded from firmware package can be downloaded from
http://www.thekelleys.org.uk/atmel/atmel_firmware.tar.gz http://www.thekelleys.org.uk/atmel/atmel_firmware.tar.gz
config PCMCIA_WL3501
tristate "Planet WL3501 PCMCIA cards"
depends on NET_RADIO && EXPERIMENTAL && PCMCIA
---help---
A driver for WL3501 PCMCIA 802.11 wireless cards made by Planet.
It has basic support for Linux wireless extensions and initial
micro support for ethtool.
# yes, this works even when no drivers are selected # yes, this works even when no drivers are selected
config NET_WIRELESS config NET_WIRELESS
bool bool
......
...@@ -23,4 +23,4 @@ obj-$(CONFIG_AIRO_CS) += airo_cs.o airo.o ...@@ -23,4 +23,4 @@ obj-$(CONFIG_AIRO_CS) += airo_cs.o airo.o
# 16-bit wireless PCMCIA client drivers # 16-bit wireless PCMCIA client drivers
obj-$(CONFIG_PCMCIA_RAYCS) += ray_cs.o obj-$(CONFIG_PCMCIA_RAYCS) += ray_cs.o
obj-$(CONFIG_PCMCIA_ATMEL) += atmel_cs.o atmel.o obj-$(CONFIG_PCMCIA_ATMEL) += atmel_cs.o atmel.o
obj-$(CONFIG_PCMCIA_WL3501) += wl3501_cs.o
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -281,6 +281,8 @@ struct ethtool_stats { ...@@ -281,6 +281,8 @@ struct ethtool_stats {
#define ETHTOOL_GSTRINGS 0x0000001b /* get specified string set */ #define ETHTOOL_GSTRINGS 0x0000001b /* get specified string set */
#define ETHTOOL_PHYS_ID 0x0000001c /* identify the NIC */ #define ETHTOOL_PHYS_ID 0x0000001c /* identify the NIC */
#define ETHTOOL_GSTATS 0x0000001d /* get NIC-specific statistics */ #define ETHTOOL_GSTATS 0x0000001d /* get NIC-specific statistics */
#define ETHTOOL_GTSO 0x0000001e /* Get TSO enable (ethtool_value) */
#define ETHTOOL_STSO 0x0000001f /* Set TSO enable (ethtool_value) */
/* compatibility with older code */ /* compatibility with older code */
#define SPARC_ETH_GSET ETHTOOL_GSET #define SPARC_ETH_GSET ETHTOOL_GSET
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment