]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/net/wireless/wavelan.c
[SK_BUFF]: Introduce skb_mac_header()
[net-next-2.6.git] / drivers / net / wireless / wavelan.c
index ff192e96268a1c69519a3c35aac6386bec35ed10..2bf77b1ee531f314f4613fc233a041e6308795c9 100644 (file)
@@ -28,7 +28,7 @@
  */
 static u8 wv_irq_to_psa(int irq)
 {
-       if (irq < 0 || irq >= NELS(irqvals))
+       if (irq < 0 || irq >= ARRAY_SIZE(irqvals))
                return 0;
 
        return irqvals[irq];
@@ -42,7 +42,7 @@ static int __init wv_psa_to_irq(u8 irqval)
 {
        int irq;
 
-       for (irq = 0; irq < NELS(irqvals); irq++)
+       for (irq = 0; irq < ARRAY_SIZE(irqvals); irq++)
                if (irqvals[irq] == irqval)
                        return irq;
 
@@ -1695,8 +1695,8 @@ static int wv_frequency_list(unsigned long ioaddr,        /* I/O port of the card */
                /* Look in the table if the frequency is allowed */
                if (table[9 - (freq / 16)] & (1 << (freq % 16))) {
                        /* Compute approximate channel number */
-                       while ((((channel_bands[c] >> 1) - 24) < freq) &&
-                              (c < NELS(channel_bands)))
+                       while ((c < ARRAY_SIZE(channel_bands)) &&
+                               (((channel_bands[c] >> 1) - 24) < freq)) 
                                c++;
                        list[i].i = c;  /* Set the list index */
 
@@ -2512,14 +2512,13 @@ wv_packet_read(struct net_device * dev, u16 buf_off, int sksize)
                return;
        }
 
-       skb->dev = dev;
-
        /* Copy the packet to the buffer. */
        obram_read(ioaddr, buf_off, skb_put(skb, sksize), sksize);
        skb->protocol = eth_type_trans(skb, dev);
 
 #ifdef DEBUG_RX_INFO
-       wv_packet_info(skb->mac.raw, sksize, dev->name, "wv_packet_read");
+       wv_packet_info(skb_mac_header(skb), sksize, dev->name,
+                      "wv_packet_read");
 #endif                         /* DEBUG_RX_INFO */
 
        /* Statistics-gathering and associated stuff.
@@ -2555,7 +2554,7 @@ wv_packet_read(struct net_device * dev, u16 buf_off, int sksize)
 
                /* Spying stuff */
 #ifdef IW_WIRELESS_SPY
-               wl_spy_gather(dev, skb->mac.raw + WAVELAN_ADDR_SIZE,
+               wl_spy_gather(dev, skb_mac_header(skb) + WAVELAN_ADDR_SIZE,
                              stats);
 #endif /* IW_WIRELESS_SPY */
 #ifdef HISTOGRAM
@@ -2903,6 +2902,7 @@ static int wavelan_packet_xmit(struct sk_buff *skb, struct net_device * dev)
 {
        net_local *lp = (net_local *) dev->priv;
        unsigned long flags;
+       char data[ETH_ZLEN];
 
 #ifdef DEBUG_TX_TRACE
        printk(KERN_DEBUG "%s: ->wavelan_packet_xmit(0x%X)\n", dev->name,
@@ -2937,15 +2937,16 @@ static int wavelan_packet_xmit(struct sk_buff *skb, struct net_device * dev)
         * able to detect collisions, therefore in theory we don't really
         * need to pad. Jean II */
        if (skb->len < ETH_ZLEN) {
-               skb = skb_padto(skb, ETH_ZLEN);
-               if (skb == NULL)
-                       return 0;
+               memset(data, 0, ETH_ZLEN);
+               memcpy(data, skb->data, skb->len);
+               /* Write packet on the card */
+               if(wv_packet_write(dev, data, ETH_ZLEN))
+                       return 1;       /* We failed */
        }
-
-       /* Write packet on the card */
-       if(wv_packet_write(dev, skb->data, skb->len))
+       else if(wv_packet_write(dev, skb->data, skb->len))
                return 1;       /* We failed */
 
+
        dev_kfree_skb(skb);
 
 #ifdef DEBUG_TX_TRACE
@@ -3766,7 +3767,7 @@ static int wv_check_ioaddr(unsigned long ioaddr, u8 * mac)
  * This function is the interrupt handler for the WaveLAN card. This
  * routine will be called whenever: 
  */
-static irqreturn_t wavelan_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t wavelan_interrupt(int irq, void *dev_id)
 {
        struct net_device *dev;
        unsigned long ioaddr;
@@ -4267,7 +4268,7 @@ struct net_device * __init wavelan_probe(int unit)
                printk(KERN_DEBUG "%s: <-wavelan_probe()\n", dev->name);
 #endif
        } else { /* Scan all possible addresses of the WaveLAN hardware. */
-               for (i = 0; i < NELS(iobase); i++) {
+               for (i = 0; i < ARRAY_SIZE(iobase); i++) {
                        dev->irq = def_irq;
                        if (wavelan_config(dev, iobase[i]) == 0) {
 #ifdef DEBUG_CALLBACK_TRACE
@@ -4278,7 +4279,7 @@ struct net_device * __init wavelan_probe(int unit)
                                break;
                        }
                }
-               if (i == NELS(iobase))
+               if (i == ARRAY_SIZE(iobase))
                        r = -ENODEV;
        }
        if (r) 
@@ -4306,7 +4307,7 @@ out:
  * Insertion of the module
  * I'm now quite proud of the multi-device support.
  */
-int init_module(void)
+int __init init_module(void)
 {
        int ret = -EIO;         /* Return error if no cards found */
        int i;
@@ -4325,14 +4326,14 @@ int init_module(void)
 #endif
 
                /* Copy the basic set of address to be probed. */
-               for (i = 0; i < NELS(iobase); i++)
+               for (i = 0; i < ARRAY_SIZE(iobase); i++)
                        io[i] = iobase[i];
        }
 
 
        /* Loop on all possible base addresses. */
        i = -1;
-       while ((io[++i] != 0) && (i < NELS(io))) {
+       while ((io[++i] != 0) && (i < ARRAY_SIZE(io))) {
                struct net_device *dev = alloc_etherdev(sizeof(net_local));
                if (!dev)
                        break;