Merge branch 'linus' into x86/signal
[pandora-kernel.git] / drivers / net / lib82596.c
index 5884f5b..b59f442 100644 (file)
@@ -176,8 +176,8 @@ struct i596_reg {
 struct i596_tbd {
        unsigned short size;
        unsigned short pad;
-       dma_addr_t     next;
-       dma_addr_t     data;
+       u32            next;
+       u32            data;
        u32 cache_pad[5];               /* Total 32 bytes... */
 };
 
@@ -195,12 +195,12 @@ struct i596_cmd {
        struct i596_cmd *v_next;        /* Address from CPUs viewpoint */
        unsigned short status;
        unsigned short command;
-       dma_addr_t     b_next;  /* Address from i596 viewpoint */
+       u32            b_next;  /* Address from i596 viewpoint */
 };
 
 struct tx_cmd {
        struct i596_cmd cmd;
-       dma_addr_t     tbd;
+       u32            tbd;
        unsigned short size;
        unsigned short pad;
        struct sk_buff *skb;            /* So we can free it after tx */
@@ -237,8 +237,8 @@ struct cf_cmd {
 struct i596_rfd {
        unsigned short stat;
        unsigned short cmd;
-       dma_addr_t     b_next;  /* Address from i596 viewpoint */
-       dma_addr_t     rbd;
+       u32            b_next;  /* Address from i596 viewpoint */
+       u32            rbd;
        unsigned short count;
        unsigned short size;
        struct i596_rfd *v_next;        /* Address from CPUs viewpoint */
@@ -249,18 +249,18 @@ struct i596_rfd {
 };
 
 struct i596_rbd {
-    /* hardware data */
-    unsigned short count;
-    unsigned short zero1;
-    dma_addr_t     b_next;
-    dma_addr_t     b_data;             /* Address from i596 viewpoint */
-    unsigned short size;
-    unsigned short zero2;
-    /* driver data */
-    struct sk_buff *skb;
-    struct i596_rbd *v_next;
-    dma_addr_t     b_addr;             /* This rbd addr from i596 view */
-    unsigned char *v_data;             /* Address from CPUs viewpoint */
+       /* hardware data */
+       unsigned short count;
+       unsigned short zero1;
+       u32            b_next;
+       u32            b_data;          /* Address from i596 viewpoint */
+       unsigned short size;
+       unsigned short zero2;
+       /* driver data */
+       struct sk_buff *skb;
+       struct i596_rbd *v_next;
+       u32            b_addr;          /* This rbd addr from i596 view */
+       unsigned char *v_data;          /* Address from CPUs viewpoint */
                                        /* Total 32 bytes... */
 #ifdef __LP64__
     u32 cache_pad[4];
@@ -275,8 +275,8 @@ struct i596_rbd {
 struct i596_scb {
        unsigned short status;
        unsigned short command;
-       dma_addr_t    cmd;
-       dma_addr_t    rfd;
+       u32           cmd;
+       u32           rfd;
        u32           crc_err;
        u32           align_err;
        u32           resource_err;
@@ -288,14 +288,14 @@ struct i596_scb {
 };
 
 struct i596_iscp {
-       u32           stat;
-       dma_addr_t    scb;
+       u32 stat;
+       u32 scb;
 };
 
 struct i596_scp {
-       u32           sysbus;
-       u32           pad;
-       dma_addr_t    iscp;
+       u32 sysbus;
+       u32 pad;
+       u32 iscp;
 };
 
 struct i596_dma {
@@ -322,7 +322,6 @@ struct i596_private {
        struct i596_cmd *cmd_head;
        int cmd_backlog;
        u32    last_cmd;
-       struct net_device_stats stats;
        int next_tx_cmd;
        int options;
        spinlock_t lock;       /* serialize access to chip */
@@ -352,7 +351,6 @@ static int i596_open(struct net_device *dev);
 static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev);
 static irqreturn_t i596_interrupt(int irq, void *dev_id);
 static int i596_close(struct net_device *dev);
-static struct net_device_stats *i596_get_stats(struct net_device *dev);
 static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd);
 static void i596_tx_timeout (struct net_device *dev);
 static void print_eth(unsigned char *buf, char *str);
@@ -725,7 +723,7 @@ memory_squeeze:
                                printk(KERN_ERR
                                       "%s: i596_rx Memory squeeze, dropping packet.\n",
                                       dev->name);
-                               lp->stats.rx_dropped++;
+                               dev->stats.rx_dropped++;
                        } else {
                                if (!rx_in_place) {
                                        /* 16 byte align the data fields */
@@ -742,28 +740,28 @@ memory_squeeze:
                                skb->protocol = eth_type_trans(skb, dev);
                                netif_rx(skb);
                                dev->last_rx = jiffies;
-                               lp->stats.rx_packets++;
-                               lp->stats.rx_bytes += pkt_len;
+                               dev->stats.rx_packets++;
+                               dev->stats.rx_bytes += pkt_len;
                        }
                } else {
                        DEB(DEB_ERRORS, printk(KERN_DEBUG
                                               "%s: Error, rfd.stat = 0x%04x\n",
                                               dev->name, rfd->stat));
-                       lp->stats.rx_errors++;
+                       dev->stats.rx_errors++;
                        if (rfd->stat & SWAP16(0x0100))
-                               lp->stats.collisions++;
+                               dev->stats.collisions++;
                        if (rfd->stat & SWAP16(0x8000))
-                               lp->stats.rx_length_errors++;
+                               dev->stats.rx_length_errors++;
                        if (rfd->stat & SWAP16(0x0001))
-                               lp->stats.rx_over_errors++;
+                               dev->stats.rx_over_errors++;
                        if (rfd->stat & SWAP16(0x0002))
-                               lp->stats.rx_fifo_errors++;
+                               dev->stats.rx_fifo_errors++;
                        if (rfd->stat & SWAP16(0x0004))
-                               lp->stats.rx_frame_errors++;
+                               dev->stats.rx_frame_errors++;
                        if (rfd->stat & SWAP16(0x0008))
-                               lp->stats.rx_crc_errors++;
+                               dev->stats.rx_crc_errors++;
                        if (rfd->stat & SWAP16(0x0010))
-                               lp->stats.rx_length_errors++;
+                               dev->stats.rx_length_errors++;
                }
 
                /* Clear the buffer descriptor count and EOF + F flags */
@@ -821,8 +819,8 @@ static inline void i596_cleanup_cmd(struct net_device *dev, struct i596_private
 
                                dev_kfree_skb(skb);
 
-                               lp->stats.tx_errors++;
-                               lp->stats.tx_aborted_errors++;
+                               dev->stats.tx_errors++;
+                               dev->stats.tx_aborted_errors++;
 
                                ptr->v_next = NULL;
                                ptr->b_next = I596_NULL;
@@ -951,10 +949,10 @@ static void i596_tx_timeout (struct net_device *dev)
                               "%s: transmit timed out, status resetting.\n",
                               dev->name));
 
-       lp->stats.tx_errors++;
+       dev->stats.tx_errors++;
 
        /* Try to restart the adaptor */
-       if (lp->last_restart == lp->stats.tx_packets) {
+       if (lp->last_restart == dev->stats.tx_packets) {
                DEB(DEB_ERRORS, printk(KERN_DEBUG "Resetting board.\n"));
                /* Shutdown and restart */
                i596_reset (dev, lp);
@@ -964,7 +962,7 @@ static void i596_tx_timeout (struct net_device *dev)
                lp->dma->scb.command = SWAP16(CUC_START | RX_START);
                DMA_WBACK_INV(dev, &(lp->dma->scb), sizeof(struct i596_scb));
                ca (dev);
-               lp->last_restart = lp->stats.tx_packets;
+               lp->last_restart = dev->stats.tx_packets;
        }
 
        dev->trans_start = jiffies;
@@ -999,7 +997,7 @@ static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev)
                DEB(DEB_ERRORS, printk(KERN_DEBUG
                                       "%s: xmit ring full, dropping packet.\n",
                                       dev->name));
-               lp->stats.tx_dropped++;
+               dev->stats.tx_dropped++;
 
                dev_kfree_skb(skb);
        } else {
@@ -1025,8 +1023,8 @@ static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev)
                DMA_WBACK_INV(dev, tbd, sizeof(struct i596_tbd));
                i596_add_cmd(dev, &tx_cmd->cmd);
 
-               lp->stats.tx_packets++;
-               lp->stats.tx_bytes += length;
+               dev->stats.tx_packets++;
+               dev->stats.tx_bytes += length;
        }
 
        netif_start_queue(dev);
@@ -1036,15 +1034,12 @@ static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
 static void print_eth(unsigned char *add, char *str)
 {
-       int i;
+       DECLARE_MAC_BUF(mac);
+       DECLARE_MAC_BUF(mac2);
 
-       printk(KERN_DEBUG "i596 0x%p, ", add);
-       for (i = 0; i < 6; i++)
-               printk(" %02X", add[i + 6]);
-       printk(" -->");
-       for (i = 0; i < 6; i++)
-               printk(" %02X", add[i]);
-       printk(" %02X%02X, %s\n", add[12], add[13], str);
+       printk(KERN_DEBUG "i596 0x%p, %s --> %s %02X%02X, %s\n",
+              add, print_mac(mac, add + 6), print_mac(mac2, add),
+              add[12], add[13], str);
 }
 
 static int __devinit i82596_probe(struct net_device *dev)
@@ -1076,7 +1071,6 @@ static int __devinit i82596_probe(struct net_device *dev)
        dev->open = i596_open;
        dev->stop = i596_close;
        dev->hard_start_xmit = i596_start_xmit;
-       dev->get_stats = i596_get_stats;
        dev->set_multicast_list = set_multicast_list;
        dev->tx_timeout = i596_tx_timeout;
        dev->watchdog_timeo = TX_TIMEOUT;
@@ -1130,12 +1124,6 @@ static irqreturn_t i596_interrupt(int irq, void *dev_id)
        struct i596_dma *dma;
        unsigned short status, ack_cmd = 0;
 
-       if (dev == NULL) {
-               printk(KERN_WARNING "%s: irq %d for unknown device.\n",
-                      __FUNCTION__, irq);
-               return IRQ_NONE;
-       }
-
        lp = netdev_priv(dev);
        dma = lp->dma;
 
@@ -1146,7 +1134,7 @@ static irqreturn_t i596_interrupt(int irq, void *dev_id)
 
        DEB(DEB_INTS, printk(KERN_DEBUG
                             "%s: i596 interrupt, IRQ %d, status %4.4x.\n",
-                       dev->name, irq, status));
+                       dev->name, dev->irq, status));
 
        ack_cmd = status & 0xf000;
 
@@ -1197,17 +1185,17 @@ static irqreturn_t i596_interrupt(int irq, void *dev_id)
                                        DEB(DEB_TXADDR,
                                            print_eth(skb->data, "tx-done"));
                                } else {
-                                       lp->stats.tx_errors++;
+                                       dev->stats.tx_errors++;
                                        if (ptr->status & SWAP16(0x0020))
-                                               lp->stats.collisions++;
+                                               dev->stats.collisions++;
                                        if (!(ptr->status & SWAP16(0x0040)))
-                                               lp->stats.tx_heartbeat_errors++;
+                                               dev->stats.tx_heartbeat_errors++;
                                        if (ptr->status & SWAP16(0x0400))
-                                               lp->stats.tx_carrier_errors++;
+                                               dev->stats.tx_carrier_errors++;
                                        if (ptr->status & SWAP16(0x0800))
-                                               lp->stats.collisions++;
+                                               dev->stats.collisions++;
                                        if (ptr->status & SWAP16(0x1000))
-                                               lp->stats.tx_aborted_errors++;
+                                               dev->stats.tx_aborted_errors++;
                                }
                                dma_unmap_single(dev->dev.parent,
                                                 tx_cmd->dma_addr,
@@ -1292,8 +1280,8 @@ static irqreturn_t i596_interrupt(int irq, void *dev_id)
                                           "%s: i596 interrupt receive unit inactive, status 0x%x\n",
                                           dev->name, status));
                                ack_cmd |= RX_START;
-                               lp->stats.rx_errors++;
-                               lp->stats.rx_fifo_errors++;
+                               dev->stats.rx_errors++;
+                               dev->stats.rx_fifo_errors++;
                                rebuild_rx_bufs(dev);
                        }
                }
@@ -1346,13 +1334,6 @@ static int i596_close(struct net_device *dev)
        return 0;
 }
 
-static struct net_device_stats *i596_get_stats(struct net_device *dev)
-{
-       struct i596_private *lp = netdev_priv(dev);
-
-       return &lp->stats;
-}
-
 /*
  *    Set or clear the multicast filter for this adaptor.
  */
@@ -1362,6 +1343,7 @@ static void set_multicast_list(struct net_device *dev)
        struct i596_private *lp = netdev_priv(dev);
        struct i596_dma *dma = lp->dma;
        int config = 0, cnt;
+       DECLARE_MAC_BUF(mac);
 
        DEB(DEB_MULTI,
            printk(KERN_DEBUG
@@ -1425,8 +1407,8 @@ static void set_multicast_list(struct net_device *dev)
                        if (i596_debug > 1)
                                DEB(DEB_MULTI,
                                    printk(KERN_DEBUG
-                                          "%s: Adding address %02x:%02x:%02x:%02x:%02x:%02x\n",
-                                          dev->name, cp[0], cp[1], cp[2], cp[3], cp[4], cp[5]));
+                                          "%s: Adding address %s\n",
+                                          dev->name, print_mac(mac, cp)));
                }
                DMA_WBACK_INV(dev, &dma->mc_cmd, sizeof(struct mc_cmd));
                i596_add_cmd(dev, &cmd->cmd);