3c501: Bring into compliance with the coding style
3c501 leads the way... 8) Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
committed by
David S. Miller
parent
68d579fb93
commit
a35f5de776
@@ -17,7 +17,7 @@
|
|||||||
Annapolis MD 21403
|
Annapolis MD 21403
|
||||||
|
|
||||||
Fixed (again!) the missing interrupt locking on TX/RX shifting.
|
Fixed (again!) the missing interrupt locking on TX/RX shifting.
|
||||||
Alan Cox <Alan.Cox@linux.org>
|
Alan Cox <Alan.Cox@linux.org>
|
||||||
|
|
||||||
Removed calls to init_etherdev since they are no longer needed, and
|
Removed calls to init_etherdev since they are no longer needed, and
|
||||||
cleaned up modularization just a bit. The driver still allows only
|
cleaned up modularization just a bit. The driver still allows only
|
||||||
@@ -29,16 +29,16 @@
|
|||||||
the board. Now getting 150K/second FTP with a 3c501 card. Still playing
|
the board. Now getting 150K/second FTP with a 3c501 card. Still playing
|
||||||
with a TX-TX optimisation to see if we can touch 180-200K/second as seems
|
with a TX-TX optimisation to see if we can touch 180-200K/second as seems
|
||||||
theoretically maximum.
|
theoretically maximum.
|
||||||
19950402 Alan Cox <Alan.Cox@linux.org>
|
19950402 Alan Cox <Alan.Cox@linux.org>
|
||||||
|
|
||||||
Cleaned up for 2.3.x because we broke SMP now.
|
Cleaned up for 2.3.x because we broke SMP now.
|
||||||
20000208 Alan Cox <alan@redhat.com>
|
20000208 Alan Cox <alan@redhat.com>
|
||||||
|
|
||||||
Check up pass for 2.5. Nothing significant changed
|
Check up pass for 2.5. Nothing significant changed
|
||||||
20021009 Alan Cox <alan@redhat.com>
|
20021009 Alan Cox <alan@redhat.com>
|
||||||
|
|
||||||
Fixed zero fill corner case
|
Fixed zero fill corner case
|
||||||
20030104 Alan Cox <alan@redhat.com>
|
20030104 Alan Cox <alan@redhat.com>
|
||||||
|
|
||||||
|
|
||||||
For the avoidance of doubt the "preferred form" of this code is one which
|
For the avoidance of doubt the "preferred form" of this code is one which
|
||||||
@@ -139,8 +139,8 @@ static const char version[] =
|
|||||||
* The boilerplate probe code.
|
* The boilerplate probe code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int io=0x280;
|
static int io = 0x280;
|
||||||
static int irq=5;
|
static int irq = 5;
|
||||||
static int mem_start;
|
static int mem_start;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -229,8 +229,7 @@ static int __init el1_probe1(struct net_device *dev, int ioaddr)
|
|||||||
* Read the station address PROM data from the special port.
|
* Read the station address PROM data from the special port.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
for (i = 0; i < 6; i++)
|
for (i = 0; i < 6; i++) {
|
||||||
{
|
|
||||||
outw(i, ioaddr + EL1_DATAPTR);
|
outw(i, ioaddr + EL1_DATAPTR);
|
||||||
station_addr[i] = inb(ioaddr + EL1_SAPROM);
|
station_addr[i] = inb(ioaddr + EL1_SAPROM);
|
||||||
}
|
}
|
||||||
@@ -240,28 +239,24 @@ static int __init el1_probe1(struct net_device *dev, int ioaddr)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (station_addr[0] == 0x02 && station_addr[1] == 0x60
|
if (station_addr[0] == 0x02 && station_addr[1] == 0x60
|
||||||
&& station_addr[2] == 0x8c)
|
&& station_addr[2] == 0x8c)
|
||||||
{
|
|
||||||
mname = "3c501";
|
mname = "3c501";
|
||||||
} else if (station_addr[0] == 0x00 && station_addr[1] == 0x80
|
else if (station_addr[0] == 0x00 && station_addr[1] == 0x80
|
||||||
&& station_addr[2] == 0xC8)
|
&& station_addr[2] == 0xC8)
|
||||||
{
|
|
||||||
mname = "NP943";
|
mname = "NP943";
|
||||||
}
|
else {
|
||||||
else {
|
|
||||||
release_region(ioaddr, EL1_IO_EXTENT);
|
release_region(ioaddr, EL1_IO_EXTENT);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We auto-IRQ by shutting off the interrupt line and letting it float
|
* We auto-IRQ by shutting off the interrupt line and letting it
|
||||||
* high.
|
* float high.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
dev->irq = irq;
|
dev->irq = irq;
|
||||||
|
|
||||||
if (dev->irq < 2)
|
if (dev->irq < 2) {
|
||||||
{
|
|
||||||
unsigned long irq_mask;
|
unsigned long irq_mask;
|
||||||
|
|
||||||
irq_mask = probe_irq_on();
|
irq_mask = probe_irq_on();
|
||||||
@@ -274,8 +269,7 @@ static int __init el1_probe1(struct net_device *dev, int ioaddr)
|
|||||||
mdelay(20);
|
mdelay(20);
|
||||||
autoirq = probe_irq_off(irq_mask);
|
autoirq = probe_irq_off(irq_mask);
|
||||||
|
|
||||||
if (autoirq == 0)
|
if (autoirq == 0) {
|
||||||
{
|
|
||||||
printk(KERN_WARNING "%s probe at %#x failed to detect IRQ line.\n",
|
printk(KERN_WARNING "%s probe at %#x failed to detect IRQ line.\n",
|
||||||
mname, ioaddr);
|
mname, ioaddr);
|
||||||
release_region(ioaddr, EL1_IO_EXTENT);
|
release_region(ioaddr, EL1_IO_EXTENT);
|
||||||
@@ -292,7 +286,8 @@ static int __init el1_probe1(struct net_device *dev, int ioaddr)
|
|||||||
if (autoirq)
|
if (autoirq)
|
||||||
dev->irq = autoirq;
|
dev->irq = autoirq;
|
||||||
|
|
||||||
printk(KERN_INFO "%s: %s EtherLink at %#lx, using %sIRQ %d.\n", dev->name, mname, dev->base_addr,
|
printk(KERN_INFO "%s: %s EtherLink at %#lx, using %sIRQ %d.\n",
|
||||||
|
dev->name, mname, dev->base_addr,
|
||||||
autoirq ? "auto":"assigned ", dev->irq);
|
autoirq ? "auto":"assigned ", dev->irq);
|
||||||
|
|
||||||
#ifdef CONFIG_IP_MULTICAST
|
#ifdef CONFIG_IP_MULTICAST
|
||||||
@@ -343,7 +338,8 @@ static int el_open(struct net_device *dev)
|
|||||||
if (el_debug > 2)
|
if (el_debug > 2)
|
||||||
printk(KERN_DEBUG "%s: Doing el_open()...", dev->name);
|
printk(KERN_DEBUG "%s: Doing el_open()...", dev->name);
|
||||||
|
|
||||||
if ((retval = request_irq(dev->irq, &el_interrupt, 0, dev->name, dev)))
|
retval = request_irq(dev->irq, &el_interrupt, 0, dev->name, dev);
|
||||||
|
if (retval)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
spin_lock_irqsave(&lp->lock, flags);
|
spin_lock_irqsave(&lp->lock, flags);
|
||||||
@@ -371,8 +367,9 @@ static void el_timeout(struct net_device *dev)
|
|||||||
int ioaddr = dev->base_addr;
|
int ioaddr = dev->base_addr;
|
||||||
|
|
||||||
if (el_debug)
|
if (el_debug)
|
||||||
printk (KERN_DEBUG "%s: transmit timed out, txsr %#2x axsr=%02x rxsr=%02x.\n",
|
printk(KERN_DEBUG "%s: transmit timed out, txsr %#2x axsr=%02x rxsr=%02x.\n",
|
||||||
dev->name, inb(TX_STATUS), inb(AX_STATUS), inb(RX_STATUS));
|
dev->name, inb(TX_STATUS),
|
||||||
|
inb(AX_STATUS), inb(RX_STATUS));
|
||||||
dev->stats.tx_errors++;
|
dev->stats.tx_errors++;
|
||||||
outb(TX_NORM, TX_CMD);
|
outb(TX_NORM, TX_CMD);
|
||||||
outb(RX_NORM, RX_CMD);
|
outb(RX_NORM, RX_CMD);
|
||||||
@@ -425,8 +422,7 @@ static int el_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||||||
|
|
||||||
netif_stop_queue(dev);
|
netif_stop_queue(dev);
|
||||||
|
|
||||||
do
|
do {
|
||||||
{
|
|
||||||
int len = skb->len;
|
int len = skb->len;
|
||||||
int pad = 0;
|
int pad = 0;
|
||||||
int gp_start;
|
int gp_start;
|
||||||
@@ -435,10 +431,10 @@ static int el_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||||||
if (len < ETH_ZLEN)
|
if (len < ETH_ZLEN)
|
||||||
pad = ETH_ZLEN - len;
|
pad = ETH_ZLEN - len;
|
||||||
|
|
||||||
gp_start = 0x800 - ( len + pad );
|
gp_start = 0x800 - (len + pad);
|
||||||
|
|
||||||
lp->tx_pkt_start = gp_start;
|
lp->tx_pkt_start = gp_start;
|
||||||
lp->collisions = 0;
|
lp->collisions = 0;
|
||||||
|
|
||||||
dev->stats.tx_bytes += skb->len;
|
dev->stats.tx_bytes += skb->len;
|
||||||
|
|
||||||
@@ -455,37 +451,42 @@ static int el_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||||||
lp->txing = 1;
|
lp->txing = 1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Turn interrupts back on while we spend a pleasant afternoon
|
* Turn interrupts back on while we spend a pleasant
|
||||||
* loading bytes into the board
|
* afternoon loading bytes into the board
|
||||||
*/
|
*/
|
||||||
|
|
||||||
spin_unlock_irqrestore(&lp->lock, flags);
|
spin_unlock_irqrestore(&lp->lock, flags);
|
||||||
|
|
||||||
outw(0x00, RX_BUF_CLR); /* Set rx packet area to 0. */
|
/* Set rx packet area to 0. */
|
||||||
outw(gp_start, GP_LOW); /* aim - packet will be loaded into buffer start */
|
outw(0x00, RX_BUF_CLR);
|
||||||
outsb(DATAPORT,buf,len); /* load buffer (usual thing each byte increments the pointer) */
|
/* aim - packet will be loaded into buffer start */
|
||||||
|
outw(gp_start, GP_LOW);
|
||||||
|
/* load buffer (usual thing each byte increments the pointer) */
|
||||||
|
outsb(DATAPORT, buf, len);
|
||||||
if (pad) {
|
if (pad) {
|
||||||
while(pad--) /* Zero fill buffer tail */
|
while (pad--) /* Zero fill buffer tail */
|
||||||
outb(0, DATAPORT);
|
outb(0, DATAPORT);
|
||||||
}
|
}
|
||||||
outw(gp_start, GP_LOW); /* the board reuses the same register */
|
/* the board reuses the same register */
|
||||||
|
outw(gp_start, GP_LOW);
|
||||||
|
|
||||||
if(lp->loading != 2)
|
if (lp->loading != 2) {
|
||||||
{
|
/* fire ... Trigger xmit. */
|
||||||
outb(AX_XMIT, AX_CMD); /* fire ... Trigger xmit. */
|
outb(AX_XMIT, AX_CMD);
|
||||||
lp->loading=0;
|
lp->loading = 0;
|
||||||
dev->trans_start = jiffies;
|
dev->trans_start = jiffies;
|
||||||
if (el_debug > 2)
|
if (el_debug > 2)
|
||||||
printk(KERN_DEBUG " queued xmit.\n");
|
printk(KERN_DEBUG " queued xmit.\n");
|
||||||
dev_kfree_skb (skb);
|
dev_kfree_skb(skb);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* A receive upset our load, despite our best efforts */
|
/* A receive upset our load, despite our best efforts */
|
||||||
if(el_debug>2)
|
if (el_debug > 2)
|
||||||
printk(KERN_DEBUG "%s: burped during tx load.\n", dev->name);
|
printk(KERN_DEBUG "%s: burped during tx load.\n",
|
||||||
|
dev->name);
|
||||||
spin_lock_irqsave(&lp->lock, flags);
|
spin_lock_irqsave(&lp->lock, flags);
|
||||||
}
|
}
|
||||||
while(1);
|
while (1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -534,64 +535,59 @@ static irqreturn_t el_interrupt(int irq, void *dev_id)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (el_debug > 3)
|
if (el_debug > 3)
|
||||||
printk(KERN_DEBUG "%s: el_interrupt() aux=%#02x", dev->name, axsr);
|
printk(KERN_DEBUG "%s: el_interrupt() aux=%#02x",
|
||||||
|
dev->name, axsr);
|
||||||
|
|
||||||
if(lp->loading==1 && !lp->txing)
|
if (lp->loading == 1 && !lp->txing)
|
||||||
printk(KERN_WARNING "%s: Inconsistent state loading while not in tx\n",
|
printk(KERN_WARNING "%s: Inconsistent state loading while not in tx\n",
|
||||||
dev->name);
|
dev->name);
|
||||||
|
|
||||||
if (lp->txing)
|
|
||||||
{
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Board in transmit mode. May be loading. If we are
|
|
||||||
* loading we shouldn't have got this.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
if (lp->txing) {
|
||||||
|
/*
|
||||||
|
* Board in transmit mode. May be loading. If we are
|
||||||
|
* loading we shouldn't have got this.
|
||||||
|
*/
|
||||||
int txsr = inb(TX_STATUS);
|
int txsr = inb(TX_STATUS);
|
||||||
|
|
||||||
if(lp->loading==1)
|
if (lp->loading == 1) {
|
||||||
{
|
if (el_debug > 2) {
|
||||||
if(el_debug > 2)
|
printk(KERN_DEBUG "%s: Interrupt while loading [",
|
||||||
{
|
dev->name);
|
||||||
printk(KERN_DEBUG "%s: Interrupt while loading [", dev->name);
|
printk(" txsr=%02x gp=%04x rp=%04x]\n",
|
||||||
printk(KERN_DEBUG " txsr=%02x gp=%04x rp=%04x]\n", txsr, inw(GP_LOW),inw(RX_LOW));
|
txsr, inw(GP_LOW), inw(RX_LOW));
|
||||||
}
|
}
|
||||||
lp->loading=2; /* Force a reload */
|
/* Force a reload */
|
||||||
|
lp->loading = 2;
|
||||||
spin_unlock(&lp->lock);
|
spin_unlock(&lp->lock);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (el_debug > 6)
|
if (el_debug > 6)
|
||||||
printk(KERN_DEBUG " txsr=%02x gp=%04x rp=%04x", txsr, inw(GP_LOW),inw(RX_LOW));
|
printk(KERN_DEBUG " txsr=%02x gp=%04x rp=%04x",
|
||||||
|
txsr, inw(GP_LOW), inw(RX_LOW));
|
||||||
|
|
||||||
if ((axsr & 0x80) && (txsr & TX_READY) == 0)
|
if ((axsr & 0x80) && (txsr & TX_READY) == 0) {
|
||||||
{
|
|
||||||
/*
|
/*
|
||||||
* FIXME: is there a logic to whether to keep on trying or
|
* FIXME: is there a logic to whether to keep
|
||||||
* reset immediately ?
|
* on trying or reset immediately ?
|
||||||
*/
|
*/
|
||||||
if(el_debug>1)
|
if (el_debug > 1)
|
||||||
printk(KERN_DEBUG "%s: Unusual interrupt during Tx, txsr=%02x axsr=%02x"
|
printk(KERN_DEBUG "%s: Unusual interrupt during Tx, txsr=%02x axsr=%02x gp=%03x rp=%03x.\n",
|
||||||
" gp=%03x rp=%03x.\n", dev->name, txsr, axsr,
|
dev->name, txsr, axsr,
|
||||||
inw(ioaddr + EL1_DATAPTR), inw(ioaddr + EL1_RXPTR));
|
inw(ioaddr + EL1_DATAPTR),
|
||||||
|
inw(ioaddr + EL1_RXPTR));
|
||||||
lp->txing = 0;
|
lp->txing = 0;
|
||||||
netif_wake_queue(dev);
|
netif_wake_queue(dev);
|
||||||
}
|
} else if (txsr & TX_16COLLISIONS) {
|
||||||
else if (txsr & TX_16COLLISIONS)
|
|
||||||
{
|
|
||||||
/*
|
/*
|
||||||
* Timed out
|
* Timed out
|
||||||
*/
|
*/
|
||||||
if (el_debug)
|
if (el_debug)
|
||||||
printk (KERN_DEBUG "%s: Transmit failed 16 times, Ethernet jammed?\n",dev->name);
|
printk(KERN_DEBUG "%s: Transmit failed 16 times, Ethernet jammed?\n", dev->name);
|
||||||
outb(AX_SYS, AX_CMD);
|
outb(AX_SYS, AX_CMD);
|
||||||
lp->txing = 0;
|
lp->txing = 0;
|
||||||
dev->stats.tx_aborted_errors++;
|
dev->stats.tx_aborted_errors++;
|
||||||
netif_wake_queue(dev);
|
netif_wake_queue(dev);
|
||||||
}
|
} else if (txsr & TX_COLLISION) {
|
||||||
else if (txsr & TX_COLLISION)
|
|
||||||
{
|
|
||||||
/*
|
/*
|
||||||
* Retrigger xmit.
|
* Retrigger xmit.
|
||||||
*/
|
*/
|
||||||
@@ -599,7 +595,8 @@ static irqreturn_t el_interrupt(int irq, void *dev_id)
|
|||||||
if (el_debug > 6)
|
if (el_debug > 6)
|
||||||
printk(KERN_DEBUG " retransmitting after a collision.\n");
|
printk(KERN_DEBUG " retransmitting after a collision.\n");
|
||||||
/*
|
/*
|
||||||
* Poor little chip can't reset its own start pointer
|
* Poor little chip can't reset its own start
|
||||||
|
* pointer
|
||||||
*/
|
*/
|
||||||
|
|
||||||
outb(AX_SYS, AX_CMD);
|
outb(AX_SYS, AX_CMD);
|
||||||
@@ -608,53 +605,45 @@ static irqreturn_t el_interrupt(int irq, void *dev_id)
|
|||||||
dev->stats.collisions++;
|
dev->stats.collisions++;
|
||||||
spin_unlock(&lp->lock);
|
spin_unlock(&lp->lock);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
/*
|
/*
|
||||||
* It worked.. we will now fall through and receive
|
* It worked.. we will now fall through and receive
|
||||||
*/
|
*/
|
||||||
dev->stats.tx_packets++;
|
dev->stats.tx_packets++;
|
||||||
if (el_debug > 6)
|
if (el_debug > 6)
|
||||||
printk(KERN_DEBUG " Tx succeeded %s\n",
|
printk(KERN_DEBUG " Tx succeeded %s\n",
|
||||||
(txsr & TX_RDY) ? "." : "but tx is busy!");
|
(txsr & TX_RDY) ? "." : "but tx is busy!");
|
||||||
/*
|
/*
|
||||||
* This is safe the interrupt is atomic WRT itself.
|
* This is safe the interrupt is atomic WRT itself.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
lp->txing = 0;
|
lp->txing = 0;
|
||||||
netif_wake_queue(dev); /* In case more to transmit */
|
/* In case more to transmit */
|
||||||
|
netif_wake_queue(dev);
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else
|
/*
|
||||||
{
|
* In receive mode.
|
||||||
/*
|
*/
|
||||||
* In receive mode.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int rxsr = inb(RX_STATUS);
|
int rxsr = inb(RX_STATUS);
|
||||||
if (el_debug > 5)
|
if (el_debug > 5)
|
||||||
printk(KERN_DEBUG " rxsr=%02x txsr=%02x rp=%04x", rxsr, inb(TX_STATUS),inw(RX_LOW));
|
printk(KERN_DEBUG " rxsr=%02x txsr=%02x rp=%04x", rxsr, inb(TX_STATUS), inw(RX_LOW));
|
||||||
/*
|
/*
|
||||||
* Just reading rx_status fixes most errors.
|
* Just reading rx_status fixes most errors.
|
||||||
*/
|
*/
|
||||||
if (rxsr & RX_MISSED)
|
if (rxsr & RX_MISSED)
|
||||||
dev->stats.rx_missed_errors++;
|
dev->stats.rx_missed_errors++;
|
||||||
else if (rxsr & RX_RUNT)
|
else if (rxsr & RX_RUNT) {
|
||||||
{ /* Handled to avoid board lock-up. */
|
/* Handled to avoid board lock-up. */
|
||||||
dev->stats.rx_length_errors++;
|
dev->stats.rx_length_errors++;
|
||||||
if (el_debug > 5)
|
if (el_debug > 5)
|
||||||
printk(KERN_DEBUG " runt.\n");
|
printk(KERN_DEBUG " runt.\n");
|
||||||
}
|
} else if (rxsr & RX_GOOD) {
|
||||||
else if (rxsr & RX_GOOD)
|
|
||||||
{
|
|
||||||
/*
|
/*
|
||||||
* Receive worked.
|
* Receive worked.
|
||||||
*/
|
*/
|
||||||
el_receive(dev);
|
el_receive(dev);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
/*
|
/*
|
||||||
* Nothing? Something is broken!
|
* Nothing? Something is broken!
|
||||||
*/
|
*/
|
||||||
@@ -702,8 +691,7 @@ static void el_receive(struct net_device *dev)
|
|||||||
if (el_debug > 4)
|
if (el_debug > 4)
|
||||||
printk(KERN_DEBUG " el_receive %d.\n", pkt_len);
|
printk(KERN_DEBUG " el_receive %d.\n", pkt_len);
|
||||||
|
|
||||||
if ((pkt_len < 60) || (pkt_len > 1536))
|
if (pkt_len < 60 || pkt_len > 1536) {
|
||||||
{
|
|
||||||
if (el_debug)
|
if (el_debug)
|
||||||
printk(KERN_DEBUG "%s: bogus packet, length=%d\n", dev->name, pkt_len);
|
printk(KERN_DEBUG "%s: bogus packet, length=%d\n", dev->name, pkt_len);
|
||||||
dev->stats.rx_over_errors++;
|
dev->stats.rx_over_errors++;
|
||||||
@@ -722,26 +710,23 @@ static void el_receive(struct net_device *dev)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
outw(0x00, GP_LOW);
|
outw(0x00, GP_LOW);
|
||||||
if (skb == NULL)
|
if (skb == NULL) {
|
||||||
{
|
|
||||||
printk(KERN_INFO "%s: Memory squeeze, dropping packet.\n", dev->name);
|
printk(KERN_INFO "%s: Memory squeeze, dropping packet.\n", dev->name);
|
||||||
dev->stats.rx_dropped++;
|
dev->stats.rx_dropped++;
|
||||||
return;
|
return;
|
||||||
}
|
} else {
|
||||||
else
|
skb_reserve(skb, 2); /* Force 16 byte alignment */
|
||||||
{
|
|
||||||
skb_reserve(skb,2); /* Force 16 byte alignment */
|
|
||||||
/*
|
/*
|
||||||
* The read increments through the bytes. The interrupt
|
* The read increments through the bytes. The interrupt
|
||||||
* handler will fix the pointer when it returns to
|
* handler will fix the pointer when it returns to
|
||||||
* receive mode.
|
* receive mode.
|
||||||
*/
|
*/
|
||||||
insb(DATAPORT, skb_put(skb,pkt_len), pkt_len);
|
insb(DATAPORT, skb_put(skb, pkt_len), pkt_len);
|
||||||
skb->protocol=eth_type_trans(skb,dev);
|
skb->protocol = eth_type_trans(skb, dev);
|
||||||
netif_rx(skb);
|
netif_rx(skb);
|
||||||
dev->last_rx = jiffies;
|
dev->last_rx = jiffies;
|
||||||
dev->stats.rx_packets++;
|
dev->stats.rx_packets++;
|
||||||
dev->stats.rx_bytes+=pkt_len;
|
dev->stats.rx_bytes += pkt_len;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -760,7 +745,7 @@ static void el_reset(struct net_device *dev)
|
|||||||
struct net_local *lp = netdev_priv(dev);
|
struct net_local *lp = netdev_priv(dev);
|
||||||
int ioaddr = dev->base_addr;
|
int ioaddr = dev->base_addr;
|
||||||
|
|
||||||
if (el_debug> 2)
|
if (el_debug > 2)
|
||||||
printk(KERN_INFO "3c501 reset...");
|
printk(KERN_INFO "3c501 reset...");
|
||||||
outb(AX_RESET, AX_CMD); /* Reset the chip */
|
outb(AX_RESET, AX_CMD); /* Reset the chip */
|
||||||
outb(AX_LOOP, AX_CMD); /* Aux control, irq and loopback enabled */
|
outb(AX_LOOP, AX_CMD); /* Aux control, irq and loopback enabled */
|
||||||
@@ -794,7 +779,8 @@ static int el1_close(struct net_device *dev)
|
|||||||
int ioaddr = dev->base_addr;
|
int ioaddr = dev->base_addr;
|
||||||
|
|
||||||
if (el_debug > 2)
|
if (el_debug > 2)
|
||||||
printk(KERN_INFO "%s: Shutting down Ethernet card at %#x.\n", dev->name, ioaddr);
|
printk(KERN_INFO "%s: Shutting down Ethernet card at %#x.\n",
|
||||||
|
dev->name, ioaddr);
|
||||||
|
|
||||||
netif_stop_queue(dev);
|
netif_stop_queue(dev);
|
||||||
|
|
||||||
@@ -822,18 +808,14 @@ static void set_multicast_list(struct net_device *dev)
|
|||||||
{
|
{
|
||||||
int ioaddr = dev->base_addr;
|
int ioaddr = dev->base_addr;
|
||||||
|
|
||||||
if(dev->flags&IFF_PROMISC)
|
if (dev->flags & IFF_PROMISC) {
|
||||||
{
|
|
||||||
outb(RX_PROM, RX_CMD);
|
outb(RX_PROM, RX_CMD);
|
||||||
inb(RX_STATUS);
|
inb(RX_STATUS);
|
||||||
}
|
} else if (dev->mc_list || dev->flags & IFF_ALLMULTI) {
|
||||||
else if (dev->mc_list || dev->flags&IFF_ALLMULTI)
|
/* Multicast or all multicast is the same */
|
||||||
{
|
outb(RX_MULT, RX_CMD);
|
||||||
outb(RX_MULT, RX_CMD); /* Multicast or all multicast is the same */
|
|
||||||
inb(RX_STATUS); /* Clear status. */
|
inb(RX_STATUS); /* Clear status. */
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
outb(RX_NORM, RX_CMD);
|
outb(RX_NORM, RX_CMD);
|
||||||
inb(RX_STATUS);
|
inb(RX_STATUS);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user