git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ide: fix ide_find_dma_mode() to print human-readable info
[safe/jmp/linux-2.6]
/
drivers
/
net
/
a2065.c
diff --git
a/drivers/net/a2065.c
b/drivers/net/a2065.c
index
8e538a6
..
18f7f81
100644
(file)
--- a/
drivers/net/a2065.c
+++ b/
drivers/net/a2065.c
@@
-48,7
+48,6
@@
#include <linux/skbuff.h>
#include <linux/slab.h>
#include <linux/string.h>
#include <linux/skbuff.h>
#include <linux/slab.h>
#include <linux/string.h>
-#include <linux/config.h>
#include <linux/init.h>
#include <linux/crc32.h>
#include <linux/zorro.h>
#include <linux/init.h>
#include <linux/crc32.h>
#include <linux/zorro.h>
@@
-94,7
+93,7
@@
struct lance_init_block {
unsigned short rx_len; /* receive len and high addr */
unsigned short tx_ptr; /* transmit descriptor addr */
unsigned short tx_len; /* transmit len and high addr */
unsigned short rx_len; /* receive len and high addr */
unsigned short tx_ptr; /* transmit descriptor addr */
unsigned short tx_len; /* transmit len and high addr */
-
+
/* The Tx and Rx ring entries must aligned on 8-byte boundaries. */
struct lance_rx_desc brx_ring[RX_RING_SIZE];
struct lance_tx_desc btx_ring[TX_RING_SIZE];
/* The Tx and Rx ring entries must aligned on 8-byte boundaries. */
struct lance_rx_desc brx_ring[RX_RING_SIZE];
struct lance_tx_desc btx_ring[TX_RING_SIZE];
@@
-116,11
+115,10
@@
struct lance_private {
int rx_new, tx_new;
int rx_old, tx_old;
int rx_new, tx_new;
int rx_old, tx_old;
-
+
int lance_log_rx_bufs, lance_log_tx_bufs;
int rx_ring_mod_mask, tx_ring_mod_mask;
int lance_log_rx_bufs, lance_log_tx_bufs;
int rx_ring_mod_mask, tx_ring_mod_mask;
- struct net_device_stats stats;
int tpe; /* cable-selection is TPE */
int auto_select; /* cable-selection by carrier */
unsigned short busmaster_regval;
int tpe; /* cable-selection is TPE */
int auto_select; /* cable-selection by carrier */
unsigned short busmaster_regval;
@@
-191,7
+189,7
@@
static void lance_init_ring (struct net_device *dev)
if (ZERO)
printk(KERN_DEBUG "TX rings:\n");
if (ZERO)
printk(KERN_DEBUG "TX rings:\n");
-
+
/* Setup the Tx ring entries */
for (i = 0; i <= (1<<lp->lance_log_tx_bufs); i++) {
leptr = LANCE_ADDR(&aib->tx_buf[i][0]);
/* Setup the Tx ring entries */
for (i = 0; i <= (1<<lp->lance_log_tx_bufs); i++) {
leptr = LANCE_ADDR(&aib->tx_buf[i][0]);
@@
-220,14
+218,14
@@
static void lance_init_ring (struct net_device *dev)
}
/* Setup the initialization block */
}
/* Setup the initialization block */
-
+
/* Setup rx descriptor pointer */
leptr = LANCE_ADDR(&aib->brx_ring);
ib->rx_len = (lp->lance_log_rx_bufs << 13) | (leptr >> 16);
ib->rx_ptr = leptr;
if (ZERO)
printk(KERN_DEBUG "RX ptr: %8.8x\n", leptr);
/* Setup rx descriptor pointer */
leptr = LANCE_ADDR(&aib->brx_ring);
ib->rx_len = (lp->lance_log_rx_bufs << 13) | (leptr >> 16);
ib->rx_ptr = leptr;
if (ZERO)
printk(KERN_DEBUG "RX ptr: %8.8x\n", leptr);
-
+
/* Setup tx descriptor pointer */
leptr = LANCE_ADDR(&aib->btx_ring);
ib->tx_len = (lp->lance_log_tx_bufs << 13) | (leptr >> 16);
/* Setup tx descriptor pointer */
leptr = LANCE_ADDR(&aib->btx_ring);
ib->tx_len = (lp->lance_log_tx_bufs << 13) | (leptr >> 16);
@@
-287,7
+285,7
@@
static int lance_rx (struct net_device *dev)
}
printk ("]\n");
#endif
}
printk ("]\n");
#endif
-
+
ll->rdp = LE_C0_RINT|LE_C0_INEA;
for (rd = &ib->brx_ring [lp->rx_new];
!((bits = rd->rmd1_bits) & LE_R1_OWN);
ll->rdp = LE_C0_RINT|LE_C0_INEA;
for (rd = &ib->brx_ring [lp->rx_new];
!((bits = rd->rmd1_bits) & LE_R1_OWN);
@@
-295,18
+293,18
@@
static int lance_rx (struct net_device *dev)
/* We got an incomplete frame? */
if ((bits & LE_R1_POK) != LE_R1_POK) {
/* We got an incomplete frame? */
if ((bits & LE_R1_POK) != LE_R1_POK) {
-
lp
->stats.rx_over_errors++;
-
lp
->stats.rx_errors++;
+
dev
->stats.rx_over_errors++;
+
dev
->stats.rx_errors++;
continue;
} else if (bits & LE_R1_ERR) {
/* Count only the end frame as a rx error,
* not the beginning
*/
continue;
} else if (bits & LE_R1_ERR) {
/* Count only the end frame as a rx error,
* not the beginning
*/
- if (bits & LE_R1_BUF)
lp
->stats.rx_fifo_errors++;
- if (bits & LE_R1_CRC)
lp
->stats.rx_crc_errors++;
- if (bits & LE_R1_OFL)
lp
->stats.rx_over_errors++;
- if (bits & LE_R1_FRA)
lp
->stats.rx_frame_errors++;
- if (bits & LE_R1_EOP)
lp
->stats.rx_errors++;
+ if (bits & LE_R1_BUF)
dev
->stats.rx_fifo_errors++;
+ if (bits & LE_R1_CRC)
dev
->stats.rx_crc_errors++;
+ if (bits & LE_R1_OFL)
dev
->stats.rx_over_errors++;
+ if (bits & LE_R1_FRA)
dev
->stats.rx_frame_errors++;
+ if (bits & LE_R1_EOP)
dev
->stats.rx_errors++;
} else {
len = (rd->mblength & 0xfff) - 4;
skb = dev_alloc_skb (len+2);
} else {
len = (rd->mblength & 0xfff) - 4;
skb = dev_alloc_skb (len+2);
@@
-314,24
+312,23
@@
static int lance_rx (struct net_device *dev)
if (skb == 0) {
printk(KERN_WARNING "%s: Memory squeeze, "
"deferring packet.\n", dev->name);
if (skb == 0) {
printk(KERN_WARNING "%s: Memory squeeze, "
"deferring packet.\n", dev->name);
-
lp
->stats.rx_dropped++;
+
dev
->stats.rx_dropped++;
rd->mblength = 0;
rd->rmd1_bits = LE_R1_OWN;
lp->rx_new = (lp->rx_new + 1) & lp->rx_ring_mod_mask;
return 0;
}
rd->mblength = 0;
rd->rmd1_bits = LE_R1_OWN;
lp->rx_new = (lp->rx_new + 1) & lp->rx_ring_mod_mask;
return 0;
}
-
- skb->dev = dev;
+
skb_reserve (skb, 2); /* 16 byte align */
skb_put (skb, len); /* make room */
skb_reserve (skb, 2); /* 16 byte align */
skb_put (skb, len); /* make room */
-
eth_copy_and_sum
(skb,
+
skb_copy_to_linear_data
(skb,
(unsigned char *)&(ib->rx_buf [lp->rx_new][0]),
(unsigned char *)&(ib->rx_buf [lp->rx_new][0]),
- len
, 0
);
+ len);
skb->protocol = eth_type_trans (skb, dev);
netif_rx (skb);
dev->last_rx = jiffies;
skb->protocol = eth_type_trans (skb, dev);
netif_rx (skb);
dev->last_rx = jiffies;
-
lp
->stats.rx_packets++;
-
lp
->stats.rx_bytes += len;
+
dev
->stats.rx_packets++;
+
dev
->stats.rx_bytes += len;
}
/* Return the packet to the pool */
}
/* Return the packet to the pool */
@@
-362,16
+359,16
@@
static int lance_tx (struct net_device *dev)
/* If we hit a packet not owned by us, stop */
if (td->tmd1_bits & LE_T1_OWN)
break;
/* If we hit a packet not owned by us, stop */
if (td->tmd1_bits & LE_T1_OWN)
break;
-
+
if (td->tmd1_bits & LE_T1_ERR) {
status = td->misc;
if (td->tmd1_bits & LE_T1_ERR) {
status = td->misc;
-
-
lp
->stats.tx_errors++;
- if (status & LE_T3_RTY)
lp
->stats.tx_aborted_errors++;
- if (status & LE_T3_LCOL)
lp
->stats.tx_window_errors++;
+
+
dev
->stats.tx_errors++;
+ if (status & LE_T3_RTY)
dev
->stats.tx_aborted_errors++;
+ if (status & LE_T3_LCOL)
dev
->stats.tx_window_errors++;
if (status & LE_T3_CLOS) {
if (status & LE_T3_CLOS) {
-
lp
->stats.tx_carrier_errors++;
+
dev
->stats.tx_carrier_errors++;
if (lp->auto_select) {
lp->tpe = 1 - lp->tpe;
printk(KERN_ERR "%s: Carrier Lost, "
if (lp->auto_select) {
lp->tpe = 1 - lp->tpe;
printk(KERN_ERR "%s: Carrier Lost, "
@@
-390,7
+387,7
@@
static int lance_tx (struct net_device *dev)
/* buffer errors and underflows turn off the transmitter */
/* Restart the adapter */
if (status & (LE_T3_BUF|LE_T3_UFL)) {
/* buffer errors and underflows turn off the transmitter */
/* Restart the adapter */
if (status & (LE_T3_BUF|LE_T3_UFL)) {
-
lp
->stats.tx_fifo_errors++;
+
dev
->stats.tx_fifo_errors++;
printk(KERN_ERR "%s: Tx: ERR_BUF|ERR_UFL, "
"restarting\n", dev->name);
printk(KERN_ERR "%s: Tx: ERR_BUF|ERR_UFL, "
"restarting\n", dev->name);
@@
-410,15
+407,15
@@
static int lance_tx (struct net_device *dev)
/* One collision before packet was sent. */
if (td->tmd1_bits & LE_T1_EONE)
/* One collision before packet was sent. */
if (td->tmd1_bits & LE_T1_EONE)
-
lp
->stats.collisions++;
+
dev
->stats.collisions++;
/* More than one collision, be optimistic. */
if (td->tmd1_bits & LE_T1_EMORE)
/* More than one collision, be optimistic. */
if (td->tmd1_bits & LE_T1_EMORE)
-
lp
->stats.collisions += 2;
+
dev
->stats.collisions += 2;
-
lp
->stats.tx_packets++;
+
dev
->stats.tx_packets++;
}
}
-
+
j = (j + 1) & lp->tx_ring_mod_mask;
}
lp->tx_old = j;
j = (j + 1) & lp->tx_ring_mod_mask;
}
lp->tx_old = j;
@@
-426,8
+423,7
@@
static int lance_tx (struct net_device *dev)
return 0;
}
return 0;
}
-static irqreturn_t
-lance_interrupt (int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t lance_interrupt (int irq, void *dev_id)
{
struct net_device *dev;
struct lance_private *lp;
{
struct net_device *dev;
struct lance_private *lp;
@@
-453,7
+449,7
@@
lance_interrupt (int irq, void *dev_id, struct pt_regs *regs)
/* Clear the error condition */
ll->rdp = LE_C0_BABL|LE_C0_ERR|LE_C0_MISS|LE_C0_INEA;
}
/* Clear the error condition */
ll->rdp = LE_C0_BABL|LE_C0_ERR|LE_C0_MISS|LE_C0_INEA;
}
-
+
if (csr0 & LE_C0_RINT)
lance_rx (dev);
if (csr0 & LE_C0_RINT)
lance_rx (dev);
@@
-462,9
+458,9
@@
lance_interrupt (int irq, void *dev_id, struct pt_regs *regs)
/* Log misc errors. */
if (csr0 & LE_C0_BABL)
/* Log misc errors. */
if (csr0 & LE_C0_BABL)
-
lp
->stats.tx_errors++; /* Tx babble. */
+
dev
->stats.tx_errors++; /* Tx babble. */
if (csr0 & LE_C0_MISS)
if (csr0 & LE_C0_MISS)
-
lp
->stats.rx_errors++; /* Missed a Rx frame. */
+
dev
->stats.rx_errors++; /* Missed a Rx frame. */
if (csr0 & LE_C0_MERR) {
printk(KERN_ERR "%s: Bus master arbitration failure, status "
"%4.4x.\n", dev->name, csr0);
if (csr0 & LE_C0_MERR) {
printk(KERN_ERR "%s: Bus master arbitration failure, status "
"%4.4x.\n", dev->name, csr0);
@@
-496,7
+492,7
@@
static int lance_open (struct net_device *dev)
ll->rdp = LE_C0_STOP;
/* Install the Interrupt handler */
ll->rdp = LE_C0_STOP;
/* Install the Interrupt handler */
- ret = request_irq(IRQ_AMIGA_PORTS, lance_interrupt,
SA_SHIRQ
,
+ ret = request_irq(IRQ_AMIGA_PORTS, lance_interrupt,
IRQF_SHARED
,
dev->name, dev);
if (ret) return ret;
dev->name, dev);
if (ret) return ret;
@@
-529,7
+525,7
@@
static inline int lance_reset (struct net_device *dev)
struct lance_private *lp = netdev_priv(dev);
volatile struct lance_regs *ll = lp->ll;
int status;
struct lance_private *lp = netdev_priv(dev);
volatile struct lance_regs *ll = lp->ll;
int status;
-
+
/* Stop the lance */
ll->rap = LE_CSR0;
ll->rdp = LE_C0_STOP;
/* Stop the lance */
ll->rap = LE_CSR0;
ll->rdp = LE_C0_STOP;
@@
-565,16
+561,14
@@
static int lance_start_xmit (struct sk_buff *skb, struct net_device *dev)
volatile struct lance_init_block *ib = lp->init_block;
int entry, skblen, len;
int status = 0;
volatile struct lance_init_block *ib = lp->init_block;
int entry, skblen, len;
int status = 0;
- static int outs;
unsigned long flags;
skblen = skb->len;
len = skblen;
unsigned long flags;
skblen = skb->len;
len = skblen;
-
+
if (len < ETH_ZLEN) {
len = ETH_ZLEN;
if (len < ETH_ZLEN) {
len = ETH_ZLEN;
- skb = skb_padto(skb, ETH_ZLEN);
- if (skb == NULL)
+ if (skb_padto(skb, ETH_ZLEN))
return 0;
}
return 0;
}
@@
-589,7
+583,7
@@
static int lance_start_xmit (struct sk_buff *skb, struct net_device *dev)
/* dump the packet */
{
int i;
/* dump the packet */
{
int i;
-
+
for (i = 0; i < 64; i++) {
if ((i % 16) == 0)
printk("\n" KERN_DEBUG);
for (i = 0; i < 64; i++) {
if ((i % 16) == 0)
printk("\n" KERN_DEBUG);
@@
-601,18
+595,17
@@
static int lance_start_xmit (struct sk_buff *skb, struct net_device *dev)
entry = lp->tx_new & lp->tx_ring_mod_mask;
ib->btx_ring [entry].length = (-len) | 0xf000;
ib->btx_ring [entry].misc = 0;
entry = lp->tx_new & lp->tx_ring_mod_mask;
ib->btx_ring [entry].length = (-len) | 0xf000;
ib->btx_ring [entry].misc = 0;
-
-
memcpy ((char *)&ib->tx_buf [entry][0], skb->data
, skblen);
+
+
skb_copy_from_linear_data(skb, (void *)&ib->tx_buf [entry][0]
, skblen);
/* Clear the slack of the packet, do I need this? */
if (len != skblen)
/* Clear the slack of the packet, do I need this? */
if (len != skblen)
- memset ((
char
*) &ib->tx_buf [entry][skblen], 0, len - skblen);
-
+ memset ((
void
*) &ib->tx_buf [entry][skblen], 0, len - skblen);
+
/* Now, give the packet to the lance */
ib->btx_ring [entry].tmd1_bits = (LE_T1_POK|LE_T1_OWN);
lp->tx_new = (lp->tx_new+1) & lp->tx_ring_mod_mask;
/* Now, give the packet to the lance */
ib->btx_ring [entry].tmd1_bits = (LE_T1_POK|LE_T1_OWN);
lp->tx_new = (lp->tx_new+1) & lp->tx_ring_mod_mask;
-
- outs++;
+ dev->stats.tx_bytes += skblen;
if (TX_BUFFS_AVAIL <= 0)
netif_stop_queue(dev);
if (TX_BUFFS_AVAIL <= 0)
netif_stop_queue(dev);
@@
-621,19
+614,12
@@
static int lance_start_xmit (struct sk_buff *skb, struct net_device *dev)
ll->rdp = LE_C0_INEA | LE_C0_TDMD;
dev->trans_start = jiffies;
dev_kfree_skb (skb);
ll->rdp = LE_C0_INEA | LE_C0_TDMD;
dev->trans_start = jiffies;
dev_kfree_skb (skb);
-
+
local_irq_restore(flags);
return status;
}
local_irq_restore(flags);
return status;
}
-static struct net_device_stats *lance_get_stats (struct net_device *dev)
-{
- struct lance_private *lp = netdev_priv(dev);
-
- return &lp->stats;
-}
-
/* taken from the depca driver */
static void lance_load_multicast (struct net_device *dev)
{
/* taken from the depca driver */
static void lance_load_multicast (struct net_device *dev)
{
@@
-644,9
+630,9
@@
static void lance_load_multicast (struct net_device *dev)
char *addrs;
int i;
u32 crc;
char *addrs;
int i;
u32 crc;
-
+
/* set all multicast bits */
/* set all multicast bits */
- if (dev->flags & IFF_ALLMULTI){
+ if (dev->flags & IFF_ALLMULTI){
ib->filter [0] = 0xffffffff;
ib->filter [1] = 0xffffffff;
return;
ib->filter [0] = 0xffffffff;
ib->filter [1] = 0xffffffff;
return;
@@
-663,7
+649,7
@@
static void lance_load_multicast (struct net_device *dev)
/* multicast address? */
if (!(*addrs & 1))
continue;
/* multicast address? */
if (!(*addrs & 1))
continue;
-
+
crc = ether_crc_le(6, addrs);
crc = crc >> 26;
mcast_table [crc >> 4] |= 1 << (crc & 0xf);
crc = ether_crc_le(6, addrs);
crc = crc >> 26;
mcast_table [crc >> 4] |= 1 << (crc & 0xf);
@@
-730,6
+716,7
@@
static int __devinit a2065_init_one(struct zorro_dev *z,
unsigned long board, base_addr, mem_start;
struct resource *r1, *r2;
int err;
unsigned long board, base_addr, mem_start;
struct resource *r1, *r2;
int err;
+ DECLARE_MAC_BUF(mac);
board = z->resource.start;
base_addr = board+A2065_LANCE;
board = z->resource.start;
base_addr = board+A2065_LANCE;
@@
-752,7
+739,6
@@
static int __devinit a2065_init_one(struct zorro_dev *z,
return -ENOMEM;
}
return -ENOMEM;
}
- SET_MODULE_OWNER(dev);
priv = netdev_priv(dev);
r1->name = dev->name;
priv = netdev_priv(dev);
r1->name = dev->name;
@@
-789,7
+775,6
@@
static int __devinit a2065_init_one(struct zorro_dev *z,
dev->hard_start_xmit = &lance_start_xmit;
dev->tx_timeout = &lance_tx_timeout;
dev->watchdog_timeo = 5*HZ;
dev->hard_start_xmit = &lance_start_xmit;
dev->tx_timeout = &lance_tx_timeout;
dev->watchdog_timeo = 5*HZ;
- dev->get_stats = &lance_get_stats;
dev->set_multicast_list = &lance_set_multicast;
dev->dma = 0;
dev->set_multicast_list = &lance_set_multicast;
dev->dma = 0;
@@
-808,9
+793,8
@@
static int __devinit a2065_init_one(struct zorro_dev *z,
zorro_set_drvdata(z, dev);
printk(KERN_INFO "%s: A2065 at 0x%08lx, Ethernet Address "
zorro_set_drvdata(z, dev);
printk(KERN_INFO "%s: A2065 at 0x%08lx, Ethernet Address "
- "%02x:%02x:%02x:%02x:%02x:%02x\n", dev->name, board,
- dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2],
- dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]);
+ "%s\n", dev->name, board,
+ print_mac(mac, dev->dev_addr));
return 0;
}
return 0;
}
@@
-829,7
+813,7
@@
static void __devexit a2065_remove_one(struct zorro_dev *z)
static int __init a2065_init_module(void)
{
static int __init a2065_init_module(void)
{
- return zorro_
module_init
(&a2065_driver);
+ return zorro_
register_driver
(&a2065_driver);
}
static void __exit a2065_cleanup_module(void)
}
static void __exit a2065_cleanup_module(void)