can: mscan-mpc5xxx: fix broken support for the MPC5200
[safe/jmp/linux-2.6] / drivers / net / tokenring / olympic.c
index a620658..f010a4d 100644 (file)
 #include <linux/jiffies.h>
 
 #include <net/checksum.h>
+#include <net/net_namespace.h>
 
 #include <asm/io.h>
 #include <asm/system.h>
  * Official releases will only have an a.b.c version number format. 
  */
 
-static char version[] __devinitdata = 
+static char version[] =
 "Olympic.c v1.0.5 6/04/02 - Peter De Schrijver & Mike Phillips" ; 
 
 static char *open_maj_error[]  = {"No error", "Lobe Media Test", "Physical Insertion",
@@ -131,7 +132,7 @@ static char *open_min_error[] = {"No error", "Function Failure", "Signal Lost",
                                   "Reserved", "Reserved", "No Monitor Detected for RPL", 
                                   "Monitor Contention failer for RPL", "FDX Protocol Error"};
 
-/* Module paramters */
+/* Module parameters */
 
 MODULE_AUTHOR("Mike Phillips <mikep@linuxtr.net>") ; 
 MODULE_DESCRIPTION("Olympic PCI/Cardbus Chipset Driver") ; 
@@ -171,7 +172,7 @@ module_param_array(message_level, int, NULL, 0) ;
 static int network_monitor[OLYMPIC_MAX_ADAPTERS] = {0,};
 module_param_array(network_monitor, int, NULL, 0);
 
-static struct pci_device_id olympic_pci_tbl[] = {
+static DEFINE_PCI_DEVICE_TABLE(olympic_pci_tbl) = {
        {PCI_VENDOR_ID_IBM,PCI_DEVICE_ID_IBM_TR_WAKE,PCI_ANY_ID,PCI_ANY_ID,},
        { }     /* Terminating Entry */
 };
@@ -181,12 +182,12 @@ MODULE_DEVICE_TABLE(pci,olympic_pci_tbl) ;
 static int olympic_probe(struct pci_dev *pdev, const struct pci_device_id *ent); 
 static int olympic_init(struct net_device *dev);
 static int olympic_open(struct net_device *dev);
-static int olympic_xmit(struct sk_buff *skb, struct net_device *dev);
+static netdev_tx_t olympic_xmit(struct sk_buff *skb,
+                                     struct net_device *dev);
 static int olympic_close(struct net_device *dev);
 static void olympic_set_rx_mode(struct net_device *dev);
 static void olympic_freemem(struct net_device *dev) ;  
 static irqreturn_t olympic_interrupt(int irq, void *dev_id);
-static struct net_device_stats * olympic_get_stats(struct net_device *dev);
 static int olympic_set_mac_address(struct net_device *dev, void *addr) ; 
 static void olympic_arb_cmd(struct net_device *dev);
 static int olympic_change_mtu(struct net_device *dev, int mtu);
@@ -194,6 +195,15 @@ static void olympic_srb_bh(struct net_device *dev) ;
 static void olympic_asb_bh(struct net_device *dev) ; 
 static int olympic_proc_info(char *buffer, char **start, off_t offset, int length, int *eof, void *data) ; 
 
+static const struct net_device_ops olympic_netdev_ops = {
+       .ndo_open               = olympic_open,
+       .ndo_stop               = olympic_close,
+       .ndo_start_xmit         = olympic_xmit,
+       .ndo_change_mtu         = olympic_change_mtu,
+       .ndo_set_multicast_list = olympic_set_rx_mode,
+       .ndo_set_mac_address    = olympic_set_mac_address,
+};
+
 static int __devinit olympic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
        struct net_device *dev ; 
@@ -219,14 +229,14 @@ static int __devinit olympic_probe(struct pci_dev *pdev, const struct pci_device
                goto op_release_dev;
        }
 
-       olympic_priv = dev->priv ;
+       olympic_priv = netdev_priv(dev) ;
        
        spin_lock_init(&olympic_priv->olympic_lock) ; 
 
        init_waitqueue_head(&olympic_priv->srb_wait);
        init_waitqueue_head(&olympic_priv->trb_wait);
 #if OLYMPIC_DEBUG  
-       printk(KERN_INFO "pci_device: %p, dev:%p, dev->priv: %p\n", pdev, dev, dev->priv);
+       printk(KERN_INFO "pci_device: %p, dev:%p, dev->priv: %p\n", pdev, dev, netdev_priv(dev));
 #endif
        dev->irq=pdev->irq;
        dev->base_addr=pci_resource_start(pdev, 0);
@@ -252,15 +262,7 @@ static int __devinit olympic_probe(struct pci_dev *pdev, const struct pci_device
                goto op_free_iomap;
        }                               
 
-       dev->open=&olympic_open;
-       dev->hard_start_xmit=&olympic_xmit;
-       dev->change_mtu=&olympic_change_mtu;
-       dev->stop=&olympic_close;
-       dev->do_ioctl=NULL;
-       dev->set_multicast_list=&olympic_set_rx_mode;
-       dev->get_stats=&olympic_get_stats ;
-       dev->set_mac_address=&olympic_set_mac_address ;  
-       SET_MODULE_OWNER(dev) ; 
+       dev->netdev_ops = &olympic_netdev_ops;
        SET_NETDEV_DEV(dev, &pdev->dev);
 
        pci_set_drvdata(pdev,dev) ; 
@@ -268,9 +270,9 @@ static int __devinit olympic_probe(struct pci_dev *pdev, const struct pci_device
        printk("Olympic: %s registered as: %s\n",olympic_priv->olympic_card_name,dev->name);
        if (olympic_priv->olympic_network_monitor) { /* Must go after register_netdev as we need the device name */ 
                char proc_name[20] ; 
-               strcpy(proc_name,"net/olympic_") ; 
+               strcpy(proc_name,"olympic_") ;
                strcat(proc_name,dev->name) ; 
-               create_proc_read_entry(proc_name,0,NULL,olympic_proc_info,(void *)dev) ; 
+               create_proc_read_entry(proc_name,0,init_net.proc_net,olympic_proc_info,(void *)dev) ;
                printk("Olympic: Network Monitor information: /proc/%s\n",proc_name); 
        }
        return  0 ;
@@ -290,14 +292,14 @@ op_disable_dev:
        return i;
 }
 
-static int __devinit olympic_init(struct net_device *dev)
+static int olympic_init(struct net_device *dev)
 {
        struct olympic_private *olympic_priv;
        u8 __iomem *olympic_mmio, *init_srb,*adapter_addr;
        unsigned long t; 
        unsigned int uaa_addr;
 
-       olympic_priv=(struct olympic_private *)dev->priv;
+       olympic_priv=netdev_priv(dev);
        olympic_mmio=olympic_priv->olympic_mmio;
 
        printk("%s \n", version);
@@ -357,7 +359,7 @@ static int __devinit olympic_init(struct net_device *dev)
 
        if(!(readl(olympic_mmio+BCTL) & BCTL_MODE_INDICATOR)) { 
                t=jiffies;
-               while (!readl(olympic_mmio+CLKCTL) & CLKCTL_PAUSE) { 
+               while (!(readl(olympic_mmio+CLKCTL) & CLKCTL_PAUSE)) {
                        schedule() ; 
                        if(time_after(jiffies, t + 2*HZ)) {
                                printk(KERN_ERR "IBM Cardbus tokenring adapter not responsing.\n") ; 
@@ -418,14 +420,12 @@ static int __devinit olympic_init(struct net_device *dev)
        writel(uaa_addr,olympic_mmio+LAPA);
        adapter_addr=olympic_priv->olympic_lap + (uaa_addr & (~0xf800));
 
+       memcpy_fromio(&dev->dev_addr[0], adapter_addr,6);
+
 #if OLYMPIC_DEBUG
-       printk("adapter address: %02x:%02x:%02x:%02x:%02x:%02x\n",
-                       readb(adapter_addr), readb(adapter_addr+1),readb(adapter_addr+2),
-                       readb(adapter_addr+3),readb(adapter_addr+4),readb(adapter_addr+5));
+       printk("adapter address: %pM\n", dev->dev_addr);
 #endif
 
-       memcpy_fromio(&dev->dev_addr[0], adapter_addr,6);
-
        olympic_priv->olympic_addr_table_addr = swab16(readw(init_srb + 12)); 
        olympic_priv->olympic_parms_addr = swab16(readw(init_srb + 14)); 
 
@@ -433,9 +433,9 @@ static int __devinit olympic_init(struct net_device *dev)
 
 }
 
-static int olympic_open(struct net_device *dev) 
+static int olympic_open(struct net_device *dev)
 {
-       struct olympic_private *olympic_priv=(struct olympic_private *)dev->priv;
+       struct olympic_private *olympic_priv=netdev_priv(dev);
        u8 __iomem *olympic_mmio=olympic_priv->olympic_mmio,*init_srb;
        unsigned long flags, t;
        int i, open_finished = 1 ;
@@ -445,9 +445,9 @@ static int olympic_open(struct net_device *dev)
 
        olympic_init(dev);
 
-       if(request_irq(dev->irq, &olympic_interrupt, IRQF_SHARED , "olympic", dev)) {
+       if (request_irq(dev->irq, olympic_interrupt, IRQF_SHARED , "olympic",
+                       dev))
                return -EAGAIN;
-       }
 
 #if OLYMPIC_DEBUG
        printk("BMCTL: %x\n",readl(olympic_mmio+BMCTL_SUM));
@@ -567,14 +567,8 @@ static int olympic_open(struct net_device *dev)
                        goto out;
 
                case 0x32:
-                       printk(KERN_WARNING "%s: Invalid LAA: %02x:%02x:%02x:%02x:%02x:%02x\n",
-                               dev->name, 
-                               olympic_priv->olympic_laa[0],
-                               olympic_priv->olympic_laa[1],
-                               olympic_priv->olympic_laa[2],
-                               olympic_priv->olympic_laa[3],
-                               olympic_priv->olympic_laa[4],
-                               olympic_priv->olympic_laa[5]) ; 
+                       printk(KERN_WARNING "%s: Invalid LAA: %pM\n",
+                              dev->name, olympic_priv->olympic_laa);
                        goto out;
 
                default:
@@ -675,7 +669,7 @@ static int olympic_open(struct net_device *dev)
 
        writel(BMCTL_TX1_DIS,olympic_mmio+BMCTL_RWM); /* Yes, this enables TX channel 1 */
        for(i=0;i<OLYMPIC_TX_RING_SIZE;i++) 
-               olympic_priv->olympic_tx_ring[i].buffer=0xdeadbeef;
+               olympic_priv->olympic_tx_ring[i].buffer=cpu_to_le32(0xdeadbeef);
 
        olympic_priv->free_tx_ring_entries=OLYMPIC_TX_RING_SIZE;
        olympic_priv->tx_ring_dma_addr = pci_map_single(olympic_priv->pdev,olympic_priv->olympic_tx_ring,
@@ -704,30 +698,24 @@ static int olympic_open(struct net_device *dev)
 #endif
 
        if (olympic_priv->olympic_network_monitor) { 
-               u8 __iomem *oat ; 
-               u8 __iomem *opt ; 
-               oat = (olympic_priv->olympic_lap + olympic_priv->olympic_addr_table_addr) ; 
-               opt = (olympic_priv->olympic_lap + olympic_priv->olympic_parms_addr) ; 
-
-               printk("%s: Node Address: %02x:%02x:%02x:%02x:%02x:%02x\n",dev->name, 
-                       readb(oat+offsetof(struct olympic_adapter_addr_table,node_addr)), 
-                       readb(oat+offsetof(struct olympic_adapter_addr_table,node_addr)+1),
-                       readb(oat+offsetof(struct olympic_adapter_addr_table,node_addr)+2),
-                       readb(oat+offsetof(struct olympic_adapter_addr_table,node_addr)+3),
-                       readb(oat+offsetof(struct olympic_adapter_addr_table,node_addr)+4),
-                       readb(oat+offsetof(struct olympic_adapter_addr_table,node_addr)+5));
+               u8 __iomem *oat;
+               u8 __iomem *opt;
+               u8 addr[6];
+               oat = (olympic_priv->olympic_lap + olympic_priv->olympic_addr_table_addr);
+               opt = (olympic_priv->olympic_lap + olympic_priv->olympic_parms_addr);
+
+               for (i = 0; i < 6; i++)
+                       addr[i] = readb(oat+offsetof(struct olympic_adapter_addr_table,node_addr)+i);
+               printk("%s: Node Address: %pM\n", dev->name, addr);
                printk("%s: Functional Address: %02x:%02x:%02x:%02x\n",dev->name, 
                        readb(oat+offsetof(struct olympic_adapter_addr_table,func_addr)), 
                        readb(oat+offsetof(struct olympic_adapter_addr_table,func_addr)+1),
                        readb(oat+offsetof(struct olympic_adapter_addr_table,func_addr)+2),
                        readb(oat+offsetof(struct olympic_adapter_addr_table,func_addr)+3));
-               printk("%s: NAUN Address: %02x:%02x:%02x:%02x:%02x:%02x\n",dev->name, 
-                       readb(opt+offsetof(struct olympic_parameters_table, up_node_addr)),
-                       readb(opt+offsetof(struct olympic_parameters_table, up_node_addr)+1),
-                       readb(opt+offsetof(struct olympic_parameters_table, up_node_addr)+2),
-                       readb(opt+offsetof(struct olympic_parameters_table, up_node_addr)+3),
-                       readb(opt+offsetof(struct olympic_parameters_table, up_node_addr)+4),
-                       readb(opt+offsetof(struct olympic_parameters_table, up_node_addr)+5));
+
+               for (i = 0; i < 6; i++)
+                       addr[i] = readb(opt+offsetof(struct olympic_parameters_table, up_node_addr)+i);
+               printk("%s: NAUN Address: %pM\n", dev->name, addr);
        }
        
        netif_start_queue(dev);
@@ -755,7 +743,7 @@ out:
  */
 static void olympic_rx(struct net_device *dev)
 {
-       struct olympic_private *olympic_priv=(struct olympic_private *)dev->priv;
+       struct olympic_private *olympic_priv=netdev_priv(dev);
        u8 __iomem *olympic_mmio=olympic_priv->olympic_mmio;
        struct olympic_rx_status *rx_status;
        struct olympic_rx_desc *rx_desc ; 
@@ -798,7 +786,7 @@ static void olympic_rx(struct net_device *dev)
                                } 
                                olympic_priv->rx_ring_last_received += i ; 
                                olympic_priv->rx_ring_last_received &= (OLYMPIC_RX_RING_SIZE -1) ; 
-                               olympic_priv->olympic_stats.rx_errors++;         
+                               dev->stats.rx_errors++;
                        } else {        
                        
                                if (buffer_cnt == 1) {
@@ -809,7 +797,7 @@ static void olympic_rx(struct net_device *dev)
 
                                if (skb == NULL) {
                                        printk(KERN_WARNING "%s: Not enough memory to copy packet to upper layers. \n",dev->name) ;
-                                       olympic_priv->olympic_stats.rx_dropped++ ; 
+                                       dev->stats.rx_dropped++;
                                        /* Update counters even though we don't transfer the frame */
                                        olympic_priv->rx_ring_last_received += i ; 
                                        olympic_priv->rx_ring_last_received &= (OLYMPIC_RX_RING_SIZE -1) ;  
@@ -845,7 +833,9 @@ static void olympic_rx(struct net_device *dev)
                                                        pci_dma_sync_single_for_cpu(olympic_priv->pdev,
                                                                le32_to_cpu(olympic_priv->olympic_rx_ring[rx_ring_last_received].buffer),
                                                                olympic_priv->pkt_buf_sz,PCI_DMA_FROMDEVICE) ; 
-                                                       memcpy(skb_put(skb,length-4),olympic_priv->rx_ring_skb[rx_ring_last_received]->data,length-4) ; 
+                                                       skb_copy_from_linear_data(olympic_priv->rx_ring_skb[rx_ring_last_received],
+                                                                     skb_put(skb,length - 4),
+                                                                     length - 4);
                                                        pci_dma_sync_single_for_device(olympic_priv->pdev,
                                                                le32_to_cpu(olympic_priv->olympic_rx_ring[rx_ring_last_received].buffer),
                                                                olympic_priv->pkt_buf_sz,PCI_DMA_FROMDEVICE) ;
@@ -862,7 +852,9 @@ static void olympic_rx(struct net_device *dev)
                                                                olympic_priv->pkt_buf_sz,PCI_DMA_FROMDEVICE) ; 
                                                        rx_desc = &(olympic_priv->olympic_rx_ring[rx_ring_last_received]);
                                                        cpy_length = (i == 1 ? frag_len : le32_to_cpu(rx_desc->res_length)); 
-                                                       memcpy(skb_put(skb, cpy_length), olympic_priv->rx_ring_skb[rx_ring_last_received]->data, cpy_length) ;
+                                                       skb_copy_from_linear_data(olympic_priv->rx_ring_skb[rx_ring_last_received],
+                                                                     skb_put(skb, cpy_length),
+                                                                     cpy_length);
                                                        pci_dma_sync_single_for_device(olympic_priv->pdev,
                                                                le32_to_cpu(olympic_priv->olympic_rx_ring[rx_ring_last_received].buffer),
                                                                olympic_priv->pkt_buf_sz,PCI_DMA_FROMDEVICE) ;
@@ -871,9 +863,8 @@ static void olympic_rx(struct net_device *dev)
                                                skb->protocol = tr_type_trans(skb,dev);
                                                netif_rx(skb) ; 
                                        } 
-                                       dev->last_rx = jiffies ; 
-                                       olympic_priv->olympic_stats.rx_packets++ ; 
-                                       olympic_priv->olympic_stats.rx_bytes += length ; 
+                                       dev->stats.rx_packets++ ;
+                                       dev->stats.rx_bytes += length ;
                                } /* if skb == null */
                        } /* If status & 0x3b */
 
@@ -893,7 +884,7 @@ static void olympic_rx(struct net_device *dev)
 
 static void olympic_freemem(struct net_device *dev) 
 { 
-       struct olympic_private *olympic_priv=(struct olympic_private *)dev->priv;
+       struct olympic_private *olympic_priv=netdev_priv(dev);
        int i;
                        
        for(i=0;i<OLYMPIC_RX_RING_SIZE;i++) {
@@ -901,7 +892,7 @@ static void olympic_freemem(struct net_device *dev)
                        dev_kfree_skb_irq(olympic_priv->rx_ring_skb[olympic_priv->rx_status_last_received]);
                        olympic_priv->rx_ring_skb[olympic_priv->rx_status_last_received] = NULL;
                }
-               if (olympic_priv->olympic_rx_ring[olympic_priv->rx_status_last_received].buffer != 0xdeadbeef) {
+               if (olympic_priv->olympic_rx_ring[olympic_priv->rx_status_last_received].buffer != cpu_to_le32(0xdeadbeef)) {
                        pci_unmap_single(olympic_priv->pdev, 
                        le32_to_cpu(olympic_priv->olympic_rx_ring[olympic_priv->rx_status_last_received].buffer),
                        olympic_priv->pkt_buf_sz, PCI_DMA_FROMDEVICE);
@@ -926,7 +917,7 @@ static void olympic_freemem(struct net_device *dev)
 static irqreturn_t olympic_interrupt(int irq, void *dev_id) 
 {
        struct net_device *dev= (struct net_device *)dev_id;
-       struct olympic_private *olympic_priv=(struct olympic_private *)dev->priv;
+       struct olympic_private *olympic_priv=netdev_priv(dev);
        u8 __iomem *olympic_mmio=olympic_priv->olympic_mmio;
        u32 sisr;
        u8 __iomem *adapter_check_area ; 
@@ -981,13 +972,13 @@ static irqreturn_t olympic_interrupt(int irq, void *dev_id)
                                olympic_priv->tx_ring_last_status++;
                                olympic_priv->tx_ring_last_status &= (OLYMPIC_TX_RING_SIZE-1);
                                olympic_priv->free_tx_ring_entries++;
-                               olympic_priv->olympic_stats.tx_bytes += olympic_priv->tx_ring_skb[olympic_priv->tx_ring_last_status]->len;
-                               olympic_priv->olympic_stats.tx_packets++ ; 
+                               dev->stats.tx_bytes += olympic_priv->tx_ring_skb[olympic_priv->tx_ring_last_status]->len;
+                               dev->stats.tx_packets++ ;
                                pci_unmap_single(olympic_priv->pdev, 
                                        le32_to_cpu(olympic_priv->olympic_tx_ring[olympic_priv->tx_ring_last_status].buffer), 
                                        olympic_priv->tx_ring_skb[olympic_priv->tx_ring_last_status]->len,PCI_DMA_TODEVICE);
                                dev_kfree_skb_irq(olympic_priv->tx_ring_skb[olympic_priv->tx_ring_last_status]);
-                               olympic_priv->olympic_tx_ring[olympic_priv->tx_ring_last_status].buffer=0xdeadbeef;
+                               olympic_priv->olympic_tx_ring[olympic_priv->tx_ring_last_status].buffer=cpu_to_le32(0xdeadbeef);
                                olympic_priv->olympic_tx_status_ring[olympic_priv->tx_ring_last_status].status=0;
                        }
                        netif_wake_queue(dev);
@@ -1040,9 +1031,10 @@ static irqreturn_t olympic_interrupt(int irq, void *dev_id)
        return IRQ_HANDLED;
 }      
 
-static int olympic_xmit(struct sk_buff *skb, struct net_device *dev) 
+static netdev_tx_t olympic_xmit(struct sk_buff *skb,
+                                     struct net_device *dev)
 {
-       struct olympic_private *olympic_priv=(struct olympic_private *)dev->priv;
+       struct olympic_private *olympic_priv=netdev_priv(dev);
        u8 __iomem *olympic_mmio=olympic_priv->olympic_mmio;
        unsigned long flags ; 
 
@@ -1062,10 +1054,10 @@ static int olympic_xmit(struct sk_buff *skb, struct net_device *dev)
                writew((((readw(olympic_mmio+TXENQ_1)) & 0x8000) ^ 0x8000) | 1,olympic_mmio+TXENQ_1);
                netif_wake_queue(dev);
                spin_unlock_irqrestore(&olympic_priv->olympic_lock,flags);
-               return 0;
+               return NETDEV_TX_OK;
        } else {
                spin_unlock_irqrestore(&olympic_priv->olympic_lock,flags);
-               return 1;
+               return NETDEV_TX_BUSY;
        } 
 
 }
@@ -1073,7 +1065,7 @@ static int olympic_xmit(struct sk_buff *skb, struct net_device *dev)
 
 static int olympic_close(struct net_device *dev) 
 {
-       struct olympic_private *olympic_priv=(struct olympic_private *)dev->priv;
+       struct olympic_private *olympic_priv=netdev_priv(dev);
        u8 __iomem *olympic_mmio=olympic_priv->olympic_mmio,*srb;
        unsigned long t,flags;
 
@@ -1143,7 +1135,7 @@ static int olympic_close(struct net_device *dev)
 
 static void olympic_set_rx_mode(struct net_device *dev) 
 {
-       struct olympic_private *olympic_priv = (struct olympic_private *) dev->priv ; 
+       struct olympic_private *olympic_priv = netdev_priv(dev);
        u8 __iomem *olympic_mmio = olympic_priv->olympic_mmio ; 
        u8 options = 0; 
        u8 __iomem *srb;
@@ -1211,7 +1203,7 @@ static void olympic_set_rx_mode(struct net_device *dev)
 
 static void olympic_srb_bh(struct net_device *dev) 
 { 
-       struct olympic_private *olympic_priv = (struct olympic_private *) dev->priv ; 
+       struct olympic_private *olympic_priv = netdev_priv(dev);
        u8 __iomem *olympic_mmio = olympic_priv->olympic_mmio ; 
        u8 __iomem *srb;
 
@@ -1354,17 +1346,10 @@ static void olympic_srb_bh(struct net_device *dev)
 
 } 
 
-static struct net_device_stats * olympic_get_stats(struct net_device *dev)
-{
-       struct olympic_private *olympic_priv ;
-       olympic_priv=(struct olympic_private *) dev->priv;
-       return (struct net_device_stats *) &olympic_priv->olympic_stats; 
-}
-
 static int olympic_set_mac_address (struct net_device *dev, void *addr) 
 {
        struct sockaddr *saddr = addr ; 
-       struct olympic_private *olympic_priv = (struct olympic_private *)dev->priv ; 
+       struct olympic_private *olympic_priv = netdev_priv(dev);
 
        if (netif_running(dev)) { 
                printk(KERN_WARNING "%s: Cannot set mac/laa address while card is open\n", dev->name) ; 
@@ -1385,7 +1370,7 @@ static int olympic_set_mac_address (struct net_device *dev, void *addr)
 
 static void olympic_arb_cmd(struct net_device *dev)
 {
-       struct olympic_private *olympic_priv = (struct olympic_private *) dev->priv;
+       struct olympic_private *olympic_priv = netdev_priv(dev);
        u8 __iomem *olympic_mmio=olympic_priv->olympic_mmio;
        u8 __iomem *arb_block, *asb_block, *srb  ; 
        u8 header_len ; 
@@ -1436,19 +1421,20 @@ static void olympic_arb_cmd(struct net_device *dev)
                        buffer_len = swab16(readw(buf_ptr+offsetof(struct mac_receive_buffer,buffer_length))); 
                        memcpy_fromio(skb_put(mac_frame, buffer_len), frame_data , buffer_len ) ;
                        next_ptr=readw(buf_ptr+offsetof(struct mac_receive_buffer,next)); 
-               } while (next_ptr && (buf_ptr=olympic_priv->olympic_lap + ntohs(next_ptr)));
+               } while (next_ptr && (buf_ptr=olympic_priv->olympic_lap + swab16(next_ptr)));
 
                mac_frame->protocol = tr_type_trans(mac_frame, dev);
 
                if (olympic_priv->olympic_network_monitor) { 
-                       struct trh_hdr *mac_hdr ; 
-                       printk(KERN_WARNING "%s: Received MAC Frame, details: \n",dev->name) ;
+                       struct trh_hdr *mac_hdr;
+                       printk(KERN_WARNING "%s: Received MAC Frame, details: \n",dev->name);
                        mac_hdr = tr_hdr(mac_frame);
-                       printk(KERN_WARNING "%s: MAC Frame Dest. Addr: %02x:%02x:%02x:%02x:%02x:%02x \n", dev->name , mac_hdr->daddr[0], mac_hdr->daddr[1], mac_hdr->daddr[2], mac_hdr->daddr[3], mac_hdr->daddr[4], mac_hdr->daddr[5]) ; 
-                       printk(KERN_WARNING "%s: MAC Frame Srce. Addr: %02x:%02x:%02x:%02x:%02x:%02x \n", dev->name , mac_hdr->saddr[0], mac_hdr->saddr[1], mac_hdr->saddr[2], mac_hdr->saddr[3], mac_hdr->saddr[4], mac_hdr->saddr[5]) ; 
+                       printk(KERN_WARNING "%s: MAC Frame Dest. Addr: %pM\n",
+                              dev->name, mac_hdr->daddr);
+                       printk(KERN_WARNING "%s: MAC Frame Srce. Addr: %pM\n",
+                              dev->name, mac_hdr->saddr);
                }
                netif_rx(mac_frame);
-               dev->last_rx = jiffies;
 
 drop_frame:
                /* Now tell the card we have dealt with the received frame */
@@ -1571,7 +1557,7 @@ drop_frame:
 
 static void olympic_asb_bh(struct net_device *dev) 
 {
-       struct olympic_private *olympic_priv = (struct olympic_private *) dev->priv ; 
+       struct olympic_private *olympic_priv = netdev_priv(dev);
        u8 __iomem *arb_block, *asb_block ; 
 
        arb_block = (olympic_priv->olympic_lap + olympic_priv->arb) ; 
@@ -1611,7 +1597,7 @@ static void olympic_asb_bh(struct net_device *dev)
  
 static int olympic_change_mtu(struct net_device *dev, int mtu) 
 {
-       struct olympic_private *olympic_priv = (struct olympic_private *) dev->priv;
+       struct olympic_private *olympic_priv = netdev_priv(dev);
        u16 max_mtu ; 
 
        if (olympic_priv->olympic_ring_speed == 4)
@@ -1633,33 +1619,28 @@ static int olympic_change_mtu(struct net_device *dev, int mtu)
 static int olympic_proc_info(char *buffer, char **start, off_t offset, int length, int *eof, void *data)
 {
        struct net_device *dev = (struct net_device *)data ; 
-       struct olympic_private *olympic_priv=(struct olympic_private *)dev->priv;
+       struct olympic_private *olympic_priv=netdev_priv(dev);
        u8 __iomem *oat = (olympic_priv->olympic_lap + olympic_priv->olympic_addr_table_addr) ; 
        u8 __iomem *opt = (olympic_priv->olympic_lap + olympic_priv->olympic_parms_addr) ; 
        int size = 0 ; 
        int len=0;
        off_t begin=0;
        off_t pos=0;
-       
+       u8 addr[6];
+       u8 addr2[6];
+       int i;
+
        size = sprintf(buffer, 
                "IBM Pit/Pit-Phy/Olympic Chipset Token Ring Adapter %s\n",dev->name);
        size += sprintf(buffer+size, "\n%6s: Adapter Address   : Node Address      : Functional Addr\n",
           dev->name); 
 
-       size += sprintf(buffer+size, "%6s: %02x:%02x:%02x:%02x:%02x:%02x : %02x:%02x:%02x:%02x:%02x:%02x : %02x:%02x:%02x:%02x\n",
+       for (i = 0 ; i < 6 ; i++)
+               addr[i] = readb(oat+offsetof(struct olympic_adapter_addr_table,node_addr) + i);
+
+       size += sprintf(buffer+size, "%6s: %pM : %pM : %02x:%02x:%02x:%02x\n",
           dev->name,
-           dev->dev_addr[0],
-          dev->dev_addr[1],
-          dev->dev_addr[2],
-          dev->dev_addr[3],
-          dev->dev_addr[4],
-          dev->dev_addr[5],
-          readb(oat+offsetof(struct olympic_adapter_addr_table,node_addr)), 
-          readb(oat+offsetof(struct olympic_adapter_addr_table,node_addr)+1),
-          readb(oat+offsetof(struct olympic_adapter_addr_table,node_addr)+2),
-          readb(oat+offsetof(struct olympic_adapter_addr_table,node_addr)+3),
-          readb(oat+offsetof(struct olympic_adapter_addr_table,node_addr)+4),
-          readb(oat+offsetof(struct olympic_adapter_addr_table,node_addr)+5),
+          dev->dev_addr, addr,
           readb(oat+offsetof(struct olympic_adapter_addr_table,func_addr)), 
           readb(oat+offsetof(struct olympic_adapter_addr_table,func_addr)+1),
           readb(oat+offsetof(struct olympic_adapter_addr_table,func_addr)+2),
@@ -1669,25 +1650,19 @@ static int olympic_proc_info(char *buffer, char **start, off_t offset, int lengt
 
        size += sprintf(buffer+size, "%6s: Physical Addr : Up Node Address   : Poll Address      : AccPri : Auth Src : Att Code :\n",
          dev->name) ; 
-          
-       size += sprintf(buffer+size, "%6s: %02x:%02x:%02x:%02x   : %02x:%02x:%02x:%02x:%02x:%02x : %02x:%02x:%02x:%02x:%02x:%02x : %04x   : %04x     :  %04x    :\n",
+
+       for (i = 0 ; i < 6 ; i++)
+               addr[i] = readb(opt+offsetof(struct olympic_parameters_table, up_node_addr) + i);
+       for (i = 0 ; i < 6 ; i++)
+               addr2[i] =  readb(opt+offsetof(struct olympic_parameters_table, poll_addr) + i);
+
+       size += sprintf(buffer+size, "%6s: %02x:%02x:%02x:%02x   : %pM : %pM : %04x   : %04x     :  %04x    :\n",
          dev->name,
          readb(opt+offsetof(struct olympic_parameters_table, phys_addr)),
          readb(opt+offsetof(struct olympic_parameters_table, phys_addr)+1),
          readb(opt+offsetof(struct olympic_parameters_table, phys_addr)+2),
          readb(opt+offsetof(struct olympic_parameters_table, phys_addr)+3),
-         readb(opt+offsetof(struct olympic_parameters_table, up_node_addr)),
-         readb(opt+offsetof(struct olympic_parameters_table, up_node_addr)+1),
-         readb(opt+offsetof(struct olympic_parameters_table, up_node_addr)+2),
-         readb(opt+offsetof(struct olympic_parameters_table, up_node_addr)+3),
-         readb(opt+offsetof(struct olympic_parameters_table, up_node_addr)+4),
-         readb(opt+offsetof(struct olympic_parameters_table, up_node_addr)+5),
-         readb(opt+offsetof(struct olympic_parameters_table, poll_addr)),
-         readb(opt+offsetof(struct olympic_parameters_table, poll_addr)+1),
-         readb(opt+offsetof(struct olympic_parameters_table, poll_addr)+2),
-         readb(opt+offsetof(struct olympic_parameters_table, poll_addr)+3),
-         readb(opt+offsetof(struct olympic_parameters_table, poll_addr)+4),
-         readb(opt+offsetof(struct olympic_parameters_table, poll_addr)+5),
+         addr, addr2,
          swab16(readw(opt+offsetof(struct olympic_parameters_table, acc_priority))),
          swab16(readw(opt+offsetof(struct olympic_parameters_table, auth_source_class))),
          swab16(readw(opt+offsetof(struct olympic_parameters_table, att_code))));
@@ -1695,14 +1670,10 @@ static int olympic_proc_info(char *buffer, char **start, off_t offset, int lengt
        size += sprintf(buffer+size, "%6s: Source Address    : Bcn T : Maj. V : Lan St : Lcl Rg : Mon Err : Frame Correl : \n",
          dev->name) ; 
        
-       size += sprintf(buffer+size, "%6s: %02x:%02x:%02x:%02x:%02x:%02x : %04x  : %04x   : %04x   : %04x   : %04x    :     %04x     : \n",
-         dev->name,
-         readb(opt+offsetof(struct olympic_parameters_table, source_addr)),
-         readb(opt+offsetof(struct olympic_parameters_table, source_addr)+1),
-         readb(opt+offsetof(struct olympic_parameters_table, source_addr)+2),
-         readb(opt+offsetof(struct olympic_parameters_table, source_addr)+3),
-         readb(opt+offsetof(struct olympic_parameters_table, source_addr)+4),
-         readb(opt+offsetof(struct olympic_parameters_table, source_addr)+5),
+       for (i = 0 ; i < 6 ; i++)
+               addr[i] = readb(opt+offsetof(struct olympic_parameters_table, source_addr) + i);
+       size += sprintf(buffer+size, "%6s: %pM : %04x  : %04x   : %04x   : %04x   : %04x    :     %04x     : \n",
+         dev->name, addr,
          swab16(readw(opt+offsetof(struct olympic_parameters_table, beacon_type))),
          swab16(readw(opt+offsetof(struct olympic_parameters_table, major_vector))),
          swab16(readw(opt+offsetof(struct olympic_parameters_table, lan_status))),
@@ -1713,16 +1684,13 @@ static int olympic_proc_info(char *buffer, char **start, off_t offset, int lengt
        size += sprintf(buffer+size, "%6s: Beacon Details :  Tx  :  Rx  : NAUN Node Address : NAUN Node Phys : \n",
          dev->name) ; 
 
-       size += sprintf(buffer+size, "%6s:                :  %02x  :  %02x  : %02x:%02x:%02x:%02x:%02x:%02x : %02x:%02x:%02x:%02x    : \n",
+       for (i = 0 ; i < 6 ; i++)
+               addr[i] = readb(opt+offsetof(struct olympic_parameters_table, beacon_naun) + i);
+       size += sprintf(buffer+size, "%6s:                :  %02x  :  %02x  : %pM : %02x:%02x:%02x:%02x    : \n",
          dev->name,
          swab16(readw(opt+offsetof(struct olympic_parameters_table, beacon_transmit))),
          swab16(readw(opt+offsetof(struct olympic_parameters_table, beacon_receive))),
-         readb(opt+offsetof(struct olympic_parameters_table, beacon_naun)),
-         readb(opt+offsetof(struct olympic_parameters_table, beacon_naun)+1),
-         readb(opt+offsetof(struct olympic_parameters_table, beacon_naun)+2),
-         readb(opt+offsetof(struct olympic_parameters_table, beacon_naun)+3),
-         readb(opt+offsetof(struct olympic_parameters_table, beacon_naun)+4),
-         readb(opt+offsetof(struct olympic_parameters_table, beacon_naun)+5),
+         addr,
          readb(opt+offsetof(struct olympic_parameters_table, beacon_phys)),
          readb(opt+offsetof(struct olympic_parameters_table, beacon_phys)+1),
          readb(opt+offsetof(struct olympic_parameters_table, beacon_phys)+2),
@@ -1744,13 +1712,13 @@ static int olympic_proc_info(char *buffer, char **start, off_t offset, int lengt
 static void __devexit olympic_remove_one(struct pci_dev *pdev) 
 {
        struct net_device *dev = pci_get_drvdata(pdev) ; 
-       struct olympic_private *olympic_priv=(struct olympic_private *)dev->priv;
+       struct olympic_private *olympic_priv=netdev_priv(dev);
 
        if (olympic_priv->olympic_network_monitor) { 
                char proc_name[20] ; 
-               strcpy(proc_name,"net/olympic_") ; 
+               strcpy(proc_name,"olympic_") ;
                strcat(proc_name,dev->name) ;
-               remove_proc_entry(proc_name,NULL); 
+               remove_proc_entry(proc_name,init_net.proc_net);
        }
        unregister_netdev(dev) ; 
        iounmap(olympic_priv->olympic_mmio) ;