ath9k: Fix IRQ nobody cared issue with ath9k
[pandora-kernel.git] / drivers / net / atp.c
index 82d78ff..c10cd80 100644 (file)
@@ -171,7 +171,6 @@ static char mux_8012[] = { 0xff, 0xf7, 0xff, 0xfb, 0xf3, 0xfb, 0xff, 0xf7,};
 struct net_local {
     spinlock_t lock;
     struct net_device *next_module;
-    struct net_device_stats stats;
     struct timer_list timer;   /* Media selection timer. */
     long last_rx_time;         /* Last Rx, in jiffies, to handle Rx hang. */
     int saved_tx_size;
@@ -205,7 +204,6 @@ static irqreturn_t atp_interrupt(int irq, void *dev_id);
 static void net_rx(struct net_device *dev);
 static void read_block(long ioaddr, int length, unsigned char *buffer, int data_mode);
 static int net_close(struct net_device *dev);
-static struct net_device_stats *net_get_stats(struct net_device *dev);
 static void set_rx_mode_8002(struct net_device *dev);
 static void set_rx_mode_8012(struct net_device *dev);
 static void tx_timeout(struct net_device *dev);
@@ -250,6 +248,7 @@ static int __init atp_probe1(long ioaddr)
        struct net_local *lp;
        int saved_ctrl_reg, status, i;
        int res;
+       DECLARE_MAC_BUF(mac);
 
        outb(0xff, ioaddr + PAR_DATA);
        /* Save the original value of the Control register, in case we guessed
@@ -299,7 +298,6 @@ static int __init atp_probe1(long ioaddr)
        dev = alloc_etherdev(sizeof(struct net_local));
        if (!dev)
                return -ENOMEM;
-       SET_MODULE_OWNER(dev);
 
        /* Find the IRQ used by triggering an interrupt. */
        write_reg_byte(ioaddr, CMR2, 0x01);                     /* No accept mode, IRQ out. */
@@ -325,10 +323,9 @@ static int __init atp_probe1(long ioaddr)
                printk(KERN_INFO "%s", version);
 #endif
 
-       printk(KERN_NOTICE "%s: Pocket adapter found at %#3lx, IRQ %d, SAPROM "
-                  "%02X:%02X:%02X:%02X:%02X:%02X.\n", dev->name, dev->base_addr,
-                  dev->irq, dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2],
-                  dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]);
+       printk(KERN_NOTICE "%s: Pocket adapter found at %#3lx, IRQ %d, "
+              "SAPROM %s.\n",
+              dev->name, dev->base_addr, dev->irq, print_mac(mac, dev->dev_addr));
 
        /* Reset the ethernet hardware and activate the printer pass-through. */
        write_reg_high(ioaddr, CMR1, CMR1h_RESET | CMR1h_MUX);
@@ -349,7 +346,6 @@ static int __init atp_probe1(long ioaddr)
        dev->open               = net_open;
        dev->stop               = net_close;
        dev->hard_start_xmit    = atp_send_packet;
-       dev->get_stats          = net_get_stats;
        dev->set_multicast_list =
          lp->chip_type == RTL8002 ? &set_rx_mode_8002 : &set_rx_mode_8012;
        dev->tx_timeout         = tx_timeout;
@@ -382,8 +378,8 @@ static void __init get_node_ID(struct net_device *dev)
                sa_offset = 15;
 
        for (i = 0; i < 3; i++)
-               ((u16 *)dev->dev_addr)[i] =
-                       be16_to_cpu(eeprom_op(ioaddr, EE_READ(sa_offset + i)));
+               ((__be16 *)dev->dev_addr)[i] =
+                       cpu_to_be16(eeprom_op(ioaddr, EE_READ(sa_offset + i)));
 
        write_reg(ioaddr, CMR2, CMR2_NULL);
 }
@@ -539,18 +535,17 @@ static void write_packet(long ioaddr, int length, unsigned char *packet, int pad
 
 static void tx_timeout(struct net_device *dev)
 {
-       struct net_local *np = netdev_priv(dev);
        long ioaddr = dev->base_addr;
 
        printk(KERN_WARNING "%s: Transmit timed out, %s?\n", dev->name,
                   inb(ioaddr + PAR_CONTROL) & 0x10 ? "network cable problem"
                   :  "IRQ conflict");
-       np->stats.tx_errors++;
+       dev->stats.tx_errors++;
        /* Try to restart the adapter. */
        hardware_init(dev);
        dev->trans_start = jiffies;
        netif_wake_queue(dev);
-       np->stats.tx_errors++;
+       dev->stats.tx_errors++;
 }
 
 static int atp_send_packet(struct sk_buff *skb, struct net_device *dev)
@@ -630,7 +625,7 @@ static irqreturn_t atp_interrupt(int irq, void *dev_instance)
                                /* We acknowledged the normal Rx interrupt, so if the interrupt
                                   is still outstanding we must have a Rx error. */
                                if (read_status & (CMR1_IRQ << 3)) { /* Overrun. */
-                                       lp->stats.rx_over_errors++;
+                                       dev->stats.rx_over_errors++;
                                        /* Set to no-accept mode long enough to remove a packet. */
                                        write_reg_high(ioaddr, CMR2, CMR2h_OFF);
                                        net_rx(dev);
@@ -650,9 +645,9 @@ static irqreturn_t atp_interrupt(int irq, void *dev_instance)
                           and reinitialize the adapter. */
                        write_reg(ioaddr, ISR, ISR_TxErr + ISR_TxOK);
                        if (status & (ISR_TxErr<<3)) {
-                               lp->stats.collisions++;
+                               dev->stats.collisions++;
                                if (++lp->re_tx > 15) {
-                                       lp->stats.tx_aborted_errors++;
+                                       dev->stats.tx_aborted_errors++;
                                        hardware_init(dev);
                                        break;
                                }
@@ -661,7 +656,7 @@ static irqreturn_t atp_interrupt(int irq, void *dev_instance)
                                write_reg(ioaddr, CMR1, CMR1_ReXmit + CMR1_Xmit);
                        } else {
                                /* Finish up the transmit. */
-                               lp->stats.tx_packets++;
+                               dev->stats.tx_packets++;
                                lp->pac_cnt_in_tx_buf--;
                                if ( lp->saved_tx_size) {
                                        trigger_send(ioaddr, lp->saved_tx_size);
@@ -679,7 +674,7 @@ static irqreturn_t atp_interrupt(int irq, void *dev_instance)
                                           "%ld jiffies status %02x  CMR1 %02x.\n", dev->name,
                                           num_tx_since_rx, jiffies - dev->last_rx, status,
                                           (read_nibble(ioaddr, CMR1) >> 3) & 15);
-                       lp->stats.rx_missed_errors++;
+                       dev->stats.rx_missed_errors++;
                        hardware_init(dev);
                        num_tx_since_rx = 0;
                        break;
@@ -736,13 +731,13 @@ static void atp_timed_checker(unsigned long data)
                        struct net_local *lp = netdev_priv(atp_timed_dev);
                        write_reg_byte(ioaddr, PAR0 + i, atp_timed_dev->dev_addr[i]);
                        if (i == 2)
-                         lp->stats.tx_errors++;
+                         dev->stats.tx_errors++;
                        else if (i == 3)
-                         lp->stats.tx_dropped++;
+                         dev->stats.tx_dropped++;
                        else if (i == 4)
-                         lp->stats.collisions++;
+                         dev->stats.collisions++;
                        else
-                         lp->stats.rx_errors++;
+                         dev->stats.rx_errors++;
                  }
 #endif
        }
@@ -766,14 +761,14 @@ static void net_rx(struct net_device *dev)
                printk(KERN_DEBUG " rx_count %04x %04x %04x %04x..", rx_head.pad,
                           rx_head.rx_count, rx_head.rx_status, rx_head.cur_addr);
        if ((rx_head.rx_status & 0x77) != 0x01) {
-               lp->stats.rx_errors++;
-               if (rx_head.rx_status & 0x0004) lp->stats.rx_frame_errors++;
-               else if (rx_head.rx_status & 0x0002) lp->stats.rx_crc_errors++;
+               dev->stats.rx_errors++;
+               if (rx_head.rx_status & 0x0004) dev->stats.rx_frame_errors++;
+               else if (rx_head.rx_status & 0x0002) dev->stats.rx_crc_errors++;
                if (net_debug > 3)
                        printk(KERN_DEBUG "%s: Unknown ATP Rx error %04x.\n",
                                   dev->name, rx_head.rx_status);
                if  (rx_head.rx_status & 0x0020) {
-                       lp->stats.rx_fifo_errors++;
+                       dev->stats.rx_fifo_errors++;
                        write_reg_high(ioaddr, CMR1, CMR1h_TxENABLE);
                        write_reg_high(ioaddr, CMR1, CMR1h_RxENABLE | CMR1h_TxENABLE);
                } else if (rx_head.rx_status & 0x0050)
@@ -788,7 +783,7 @@ static void net_rx(struct net_device *dev)
                if (skb == NULL) {
                        printk(KERN_ERR "%s: Memory squeeze, dropping packet.\n",
                                   dev->name);
-                       lp->stats.rx_dropped++;
+                       dev->stats.rx_dropped++;
                        goto done;
                }
 
@@ -797,8 +792,8 @@ static void net_rx(struct net_device *dev)
                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;
        }
  done:
        write_reg(ioaddr, CMR1, CMR1_NextPkt);
@@ -850,15 +845,6 @@ net_close(struct net_device *dev)
        return 0;
 }
 
-/* Get the current statistics. This may be called with the card open or
-   closed. */
-static struct net_device_stats *
-net_get_stats(struct net_device *dev)
-{
-       struct net_local *lp = netdev_priv(dev);
-       return &lp->stats;
-}
-
 /*
  *     Set or clear the multicast filter for this adapter.
  */
@@ -868,14 +854,9 @@ static void set_rx_mode_8002(struct net_device *dev)
        struct net_local *lp = netdev_priv(dev);
        long ioaddr = dev->base_addr;
 
-       if ( dev->mc_count > 0 || (dev->flags & (IFF_ALLMULTI|IFF_PROMISC))) {
-               /* We must make the kernel realise we had to move
-                *      into promisc mode or we start all out war on
-                *      the cable. - AC
-                */
-               dev->flags|=IFF_PROMISC;
+       if (dev->mc_count > 0 || (dev->flags & (IFF_ALLMULTI|IFF_PROMISC)))
                lp->addr_mode = CMR2h_PROMISC;
-       else
+       else
                lp->addr_mode = CMR2h_Normal;
        write_reg_high(ioaddr, CMR2, lp->addr_mode);
 }