forked from luck/tmp_suning_uos_patched
[PATCH] Use tulip.h in winbond-840.c
Include "tulip.h" in winbond-840.c and clean up lots of redundant definitions. Signed-off-by: Grant Grundler <grundler@parisc-linux.org> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org> Signed-off-by: Valerie Henson <val_henson@linux.intel.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
7f2b12482c
commit
42eab56776
@ -90,10 +90,8 @@ static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
|
|||||||
Making the Tx ring too large decreases the effectiveness of channel
|
Making the Tx ring too large decreases the effectiveness of channel
|
||||||
bonding and packet priority.
|
bonding and packet priority.
|
||||||
There are no ill effects from too-large receive rings. */
|
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 10 /* Limit ring entries actually used. */
|
||||||
#define TX_QUEUE_LEN_RESTART 5
|
#define TX_QUEUE_LEN_RESTART 5
|
||||||
#define RX_RING_SIZE 32
|
|
||||||
|
|
||||||
#define TX_BUFLIMIT (1024-128)
|
#define TX_BUFLIMIT (1024-128)
|
||||||
|
|
||||||
@ -137,6 +135,8 @@ static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
|
|||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
|
|
||||||
|
#include "tulip.h"
|
||||||
|
|
||||||
/* These identify the driver base version and may not be removed. */
|
/* These identify the driver base version and may not be removed. */
|
||||||
static char version[] =
|
static char version[] =
|
||||||
KERN_INFO DRV_NAME ".c:v" DRV_VERSION " (2.4 port) " DRV_RELDATE " Donald Becker <becker@scyld.com>\n"
|
KERN_INFO DRV_NAME ".c:v" DRV_VERSION " (2.4 port) " DRV_RELDATE " Donald Becker <becker@scyld.com>\n"
|
||||||
@ -242,8 +242,8 @@ static const struct pci_id_info pci_id_tbl[] __devinitdata = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* This driver was written to use PCI memory space, however some x86 systems
|
/* 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
|
work only with I/O space accesses. See CONFIG_TULIP_MMIO in .config
|
||||||
accesses instead of memory space. */
|
*/
|
||||||
|
|
||||||
/* Offsets to the Command and Status Registers, "CSRs".
|
/* Offsets to the Command and Status Registers, "CSRs".
|
||||||
While similar to the Tulip, these registers are longword aligned.
|
While similar to the Tulip, these registers are longword aligned.
|
||||||
@ -261,21 +261,11 @@ enum w840_offsets {
|
|||||||
CurTxDescAddr=0x4C, CurTxBufAddr=0x50,
|
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. */
|
/* Bits in the NetworkConfig register. */
|
||||||
enum rx_mode_bits {
|
enum rx_mode_bits {
|
||||||
AcceptErr=0x80, AcceptRunt=0x40,
|
AcceptErr=0x80,
|
||||||
AcceptBroadcast=0x20, AcceptMulticast=0x10,
|
RxAcceptBroadcast=0x20, AcceptMulticast=0x10,
|
||||||
AcceptAllPhys=0x08, AcceptMyPhys=0x02,
|
RxAcceptAllPhys=0x08, AcceptMyPhys=0x02,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum mii_reg_bits {
|
enum mii_reg_bits {
|
||||||
@ -297,13 +287,6 @@ struct w840_tx_desc {
|
|||||||
u32 buffer1, buffer2;
|
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 */
|
#define MII_CNT 1 /* winbond only supports one MII */
|
||||||
struct netdev_private {
|
struct netdev_private {
|
||||||
struct w840_rx_desc *rx_ring;
|
struct w840_rx_desc *rx_ring;
|
||||||
@ -371,7 +354,6 @@ static int __devinit w840_probe1 (struct pci_dev *pdev,
|
|||||||
int irq;
|
int irq;
|
||||||
int i, option = find_cnt < MAX_UNITS ? options[find_cnt] : 0;
|
int i, option = find_cnt < MAX_UNITS ? options[find_cnt] : 0;
|
||||||
void __iomem *ioaddr;
|
void __iomem *ioaddr;
|
||||||
int bar = 1;
|
|
||||||
|
|
||||||
i = pci_enable_device(pdev);
|
i = pci_enable_device(pdev);
|
||||||
if (i) return i;
|
if (i) return i;
|
||||||
@ -393,10 +375,8 @@ static int __devinit w840_probe1 (struct pci_dev *pdev,
|
|||||||
|
|
||||||
if (pci_request_regions(pdev, DRV_NAME))
|
if (pci_request_regions(pdev, DRV_NAME))
|
||||||
goto err_out_netdev;
|
goto err_out_netdev;
|
||||||
#ifdef USE_IO_OPS
|
|
||||||
bar = 0;
|
ioaddr = pci_iomap(pdev, TULIP_BAR, netdev_res_size);
|
||||||
#endif
|
|
||||||
ioaddr = pci_iomap(pdev, bar, netdev_res_size);
|
|
||||||
if (!ioaddr)
|
if (!ioaddr)
|
||||||
goto err_out_free_res;
|
goto err_out_free_res;
|
||||||
|
|
||||||
@ -838,7 +818,7 @@ static void init_rxtx_rings(struct net_device *dev)
|
|||||||
np->rx_buf_sz,PCI_DMA_FROMDEVICE);
|
np->rx_buf_sz,PCI_DMA_FROMDEVICE);
|
||||||
|
|
||||||
np->rx_ring[i].buffer1 = np->rx_addr[i];
|
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;
|
np->cur_rx = 0;
|
||||||
@ -923,7 +903,7 @@ static void init_registers(struct net_device *dev)
|
|||||||
}
|
}
|
||||||
#elif defined(__powerpc__) || defined(__i386__) || defined(__alpha__) || defined(__ia64__) || defined(__x86_64__)
|
#elif defined(__powerpc__) || defined(__i386__) || defined(__alpha__) || defined(__ia64__) || defined(__x86_64__)
|
||||||
i |= 0xE000;
|
i |= 0xE000;
|
||||||
#elif defined(__sparc__)
|
#elif defined(__sparc__) || defined (CONFIG_PARISC)
|
||||||
i |= 0x4800;
|
i |= 0x4800;
|
||||||
#else
|
#else
|
||||||
#warning Processor architecture undefined
|
#warning Processor architecture undefined
|
||||||
@ -1043,11 +1023,11 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev)
|
|||||||
|
|
||||||
/* Now acquire the irq spinlock.
|
/* Now acquire the irq spinlock.
|
||||||
* The difficult race is the the ordering between
|
* 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
|
* - if np->cur_tx is increased first the interrupt
|
||||||
* handler could consider the packet as transmitted
|
* handler could consider the packet as transmitted
|
||||||
* since DescOwn is cleared.
|
* since DescOwned is cleared.
|
||||||
* - If DescOwn is set first the NIC could report the
|
* - If DescOwned is set first the NIC could report the
|
||||||
* packet as sent, but the interrupt handler would ignore it
|
* packet as sent, but the interrupt handler would ignore it
|
||||||
* since the np->cur_tx was not yet increased.
|
* since the np->cur_tx was not yet increased.
|
||||||
*/
|
*/
|
||||||
@ -1055,7 +1035,7 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev)
|
|||||||
np->cur_tx++;
|
np->cur_tx++;
|
||||||
|
|
||||||
wmb(); /* flush length, buffer1, buffer2 */
|
wmb(); /* flush length, buffer1, buffer2 */
|
||||||
np->tx_ring[entry].status = DescOwn;
|
np->tx_ring[entry].status = DescOwned;
|
||||||
wmb(); /* flush status and kick the hardware */
|
wmb(); /* flush status and kick the hardware */
|
||||||
iowrite32(0, np->base_addr + TxStartDemand);
|
iowrite32(0, np->base_addr + TxStartDemand);
|
||||||
np->tx_q_bytes += skb->len;
|
np->tx_q_bytes += skb->len;
|
||||||
@ -1155,12 +1135,12 @@ static irqreturn_t intr_handler(int irq, void *dev_instance, struct pt_regs *rgs
|
|||||||
|
|
||||||
handled = 1;
|
handled = 1;
|
||||||
|
|
||||||
if (intr_status & (IntrRxDone | RxNoBuf))
|
if (intr_status & (RxIntr | RxNoBuf))
|
||||||
netdev_rx(dev);
|
netdev_rx(dev);
|
||||||
if (intr_status & RxNoBuf)
|
if (intr_status & RxNoBuf)
|
||||||
iowrite32(0, ioaddr + RxStartDemand);
|
iowrite32(0, ioaddr + RxStartDemand);
|
||||||
|
|
||||||
if (intr_status & (TxIdle | IntrTxDone) &&
|
if (intr_status & (TxNoBuf | TxIntr) &&
|
||||||
np->cur_tx != np->dirty_tx) {
|
np->cur_tx != np->dirty_tx) {
|
||||||
spin_lock(&np->lock);
|
spin_lock(&np->lock);
|
||||||
netdev_tx_done(dev);
|
netdev_tx_done(dev);
|
||||||
@ -1168,8 +1148,8 @@ static irqreturn_t intr_handler(int irq, void *dev_instance, struct pt_regs *rgs
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Abnormal error summary/uncommon events handlers. */
|
/* Abnormal error summary/uncommon events handlers. */
|
||||||
if (intr_status & (AbnormalIntr | TxFIFOUnderflow | IntrPCIErr |
|
if (intr_status & (AbnormalIntr | TxFIFOUnderflow | SytemError |
|
||||||
TimerInt | IntrTxStopped))
|
TimerInt | TxDied))
|
||||||
netdev_error(dev, intr_status);
|
netdev_error(dev, intr_status);
|
||||||
|
|
||||||
if (--work_limit < 0) {
|
if (--work_limit < 0) {
|
||||||
@ -1305,7 +1285,7 @@ static int netdev_rx(struct net_device *dev)
|
|||||||
np->rx_ring[entry].buffer1 = np->rx_addr[entry];
|
np->rx_ring[entry].buffer1 = np->rx_addr[entry];
|
||||||
}
|
}
|
||||||
wmb();
|
wmb();
|
||||||
np->rx_ring[entry].status = DescOwn;
|
np->rx_ring[entry].status = DescOwned;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1342,7 +1322,7 @@ static void netdev_error(struct net_device *dev, int intr_status)
|
|||||||
dev->name, new);
|
dev->name, new);
|
||||||
update_csr6(dev, 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++;
|
np->stats.rx_errors++;
|
||||||
}
|
}
|
||||||
if (intr_status & TimerInt) {
|
if (intr_status & TimerInt) {
|
||||||
@ -1381,13 +1361,13 @@ static u32 __set_rx_mode(struct net_device *dev)
|
|||||||
/* Unconditionally log net taps. */
|
/* Unconditionally log net taps. */
|
||||||
printk(KERN_NOTICE "%s: Promiscuous mode enabled.\n", dev->name);
|
printk(KERN_NOTICE "%s: Promiscuous mode enabled.\n", dev->name);
|
||||||
memset(mc_filter, 0xff, sizeof(mc_filter));
|
memset(mc_filter, 0xff, sizeof(mc_filter));
|
||||||
rx_mode = AcceptBroadcast | AcceptMulticast | AcceptAllPhys
|
rx_mode = RxAcceptBroadcast | AcceptMulticast | RxAcceptAllPhys
|
||||||
| AcceptMyPhys;
|
| AcceptMyPhys;
|
||||||
} else if ((dev->mc_count > multicast_filter_limit)
|
} else if ((dev->mc_count > multicast_filter_limit)
|
||||||
|| (dev->flags & IFF_ALLMULTI)) {
|
|| (dev->flags & IFF_ALLMULTI)) {
|
||||||
/* Too many to match, or accept all multicasts. */
|
/* Too many to match, or accept all multicasts. */
|
||||||
memset(mc_filter, 0xff, sizeof(mc_filter));
|
memset(mc_filter, 0xff, sizeof(mc_filter));
|
||||||
rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
|
rx_mode = RxAcceptBroadcast | AcceptMulticast | AcceptMyPhys;
|
||||||
} else {
|
} else {
|
||||||
struct dev_mc_list *mclist;
|
struct dev_mc_list *mclist;
|
||||||
int i;
|
int i;
|
||||||
@ -1398,7 +1378,7 @@ static u32 __set_rx_mode(struct net_device *dev)
|
|||||||
filterbit &= 0x3f;
|
filterbit &= 0x3f;
|
||||||
mc_filter[filterbit >> 5] |= 1 << (filterbit & 31);
|
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[0], ioaddr + MulticastFilter0);
|
||||||
iowrite32(mc_filter[1], ioaddr + MulticastFilter1);
|
iowrite32(mc_filter[1], ioaddr + MulticastFilter1);
|
||||||
|
Loading…
Reference in New Issue
Block a user