ath9k_hw: rename the PA calib routines to match their families
[safe/jmp/linux-2.6] / drivers / net / tokenring / olympic.c
index cd142d0..3a25e04 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,13 +797,11 @@ 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) ;  
                                } else  {
-                                       skb->dev = dev ; 
-
                                        /* Optimise based upon number of buffers used. 
                                           If only one buffer is used we can simply swap the buffers around.
                                           If more than one then we must use the new buffer and copy the information
@@ -847,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) ;
@@ -864,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) ;
@@ -873,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 */
 
@@ -895,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++) {
@@ -903,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);
@@ -928,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 ; 
@@ -983,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);
@@ -1042,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 ; 
 
@@ -1064,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;
        } 
 
 }
@@ -1075,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;
 
@@ -1145,13 +1135,12 @@ 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;
-       struct dev_mc_list *dmi ; 
+       struct dev_mc_list *dmi;
        unsigned char dev_mc_address[4] ; 
-       int i ; 
 
        writel(olympic_priv->srb,olympic_mmio+LAPA);
        srb=olympic_priv->olympic_lap + (olympic_priv->srb & (~0xf800));
@@ -1188,7 +1177,7 @@ static void olympic_set_rx_mode(struct net_device *dev)
 
        dev_mc_address[0] = dev_mc_address[1] = dev_mc_address[2] = dev_mc_address[3] = 0 ; 
 
-       for (i=0,dmi=dev->mc_list;i < dev->mc_count; i++,dmi = dmi->next) { 
+       netdev_for_each_mc_addr(dmi, dev) {
                dev_mc_address[0] |= dmi->dmi_addr[2] ; 
                dev_mc_address[1] |= dmi->dmi_addr[3] ; 
                dev_mc_address[2] |= dmi->dmi_addr[4] ; 
@@ -1213,7 +1202,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;
 
@@ -1356,17 +1345,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) ; 
@@ -1387,7 +1369,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 ; 
@@ -1438,19 +1420,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) ;
-                       mac_hdr = (struct trh_hdr *)mac_frame->data ; 
-                       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]) ; 
+                       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: %pM\n",
+                              dev->name, mac_hdr->daddr);
+                       printk(KERN_WARNING "%s: MAC Frame Srce. Addr: %pM\n",
+                              dev->name, mac_hdr->saddr);
                }
-               mac_frame->dev = dev ; 
-               mac_frame->protocol = tr_type_trans(mac_frame,dev);
-               netif_rx(mac_frame) ;   
-               dev->last_rx = jiffies;
+               netif_rx(mac_frame);
 
 drop_frame:
                /* Now tell the card we have dealt with the received frame */
@@ -1573,7 +1556,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) ; 
@@ -1613,7 +1596,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)
@@ -1635,33 +1618,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),
@@ -1671,25 +1649,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))));
@@ -1697,14 +1669,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))),
@@ -1715,16 +1683,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),
@@ -1746,13 +1711,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) ; 
@@ -1771,7 +1736,7 @@ static struct pci_driver olympic_driver = {
 
 static int __init olympic_pci_init(void) 
 {
-       return pci_module_init (&olympic_driver) ; 
+       return pci_register_driver(&olympic_driver) ;
 }
 
 static void __exit olympic_pci_cleanup(void)