This if file 4 of 10 of the port of the bcm43xx driver from softmac
to mac80211.

Signed-off-by: Larry Finger <[EMAIL PROTECTED]>
---

Index: linux-2.6/drivers/net/wireless/bcm43xx/bcm43xx_ilt.c
===================================================================
--- linux-2.6.orig/drivers/net/wireless/bcm43xx/bcm43xx_ilt.c
+++ linux-2.6/drivers/net/wireless/bcm43xx/bcm43xx_ilt.c
@@ -312,41 +312,24 @@ const u16 bcm43xx_ilt_sigmasqr2[BCM43xx_
 
 /**** Helper functions to access the device Internal Lookup Tables ****/
 
-void bcm43xx_ilt_write(struct bcm43xx_private *bcm, u16 offset, u16 val)
+void bcm43xx_ilt_write(struct bcm43xx_wldev *dev, u16 offset, u16 val)
 {
-       if (bcm43xx_current_phy(bcm)->type == BCM43xx_PHYTYPE_A) {
-               bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_A_CTRL, offset);
-               mmiowb();
-               bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_A_DATA1, val);
-       } else {
-               bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_G_CTRL, offset);
-               mmiowb();
-               bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_G_DATA1, val);
-       }
+       bcm43xx_phy_write(dev, BCM43xx_PHY_ILT_G_CTRL, offset);
+       mmiowb();
+       bcm43xx_phy_write(dev, BCM43xx_PHY_ILT_G_DATA1, val);
 }
 
-void bcm43xx_ilt_write32(struct bcm43xx_private *bcm, u16 offset, u32 val)
+void bcm43xx_ilt_write32(struct bcm43xx_wldev *dev, u16 offset, u32 val)
 {
-       if (bcm43xx_current_phy(bcm)->type == BCM43xx_PHYTYPE_A) {
-               bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_A_CTRL, offset);
-               mmiowb();
-               bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_A_DATA2, (val & 
0xFFFF0000) >> 16);
-               bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_A_DATA1, val & 
0x0000FFFF);
-       } else {
-               bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_G_CTRL, offset);
-               mmiowb();
-               bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_G_DATA2, (val & 
0xFFFF0000) >> 16);
-               bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_G_DATA1, val & 
0x0000FFFF);
-       }
+       bcm43xx_phy_write(dev, BCM43xx_PHY_ILT_G_CTRL, offset);
+       mmiowb();
+       bcm43xx_phy_write(dev, BCM43xx_PHY_ILT_G_DATA2, (val & 0xFFFF0000) >>
+                         16);
+       bcm43xx_phy_write(dev, BCM43xx_PHY_ILT_G_DATA1, val & 0x0000FFFF);
 }
 
-u16 bcm43xx_ilt_read(struct bcm43xx_private *bcm, u16 offset)
+u16 bcm43xx_ilt_read(struct bcm43xx_wldev *dev, u16 offset)
 {
-       if (bcm43xx_current_phy(bcm)->type == BCM43xx_PHYTYPE_A) {
-               bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_A_CTRL, offset);
-               return bcm43xx_phy_read(bcm, BCM43xx_PHY_ILT_A_DATA1);
-       } else {
-               bcm43xx_phy_write(bcm, BCM43xx_PHY_ILT_G_CTRL, offset);
-               return bcm43xx_phy_read(bcm, BCM43xx_PHY_ILT_G_DATA1);
-       }
+       bcm43xx_phy_write(dev, BCM43xx_PHY_ILT_G_CTRL, offset);
+       return bcm43xx_phy_read(dev, BCM43xx_PHY_ILT_G_DATA1);
 }
Index: linux-2.6/drivers/net/wireless/bcm43xx/bcm43xx_ilt.h
===================================================================
--- linux-2.6.orig/drivers/net/wireless/bcm43xx/bcm43xx_ilt.h
+++ linux-2.6/drivers/net/wireless/bcm43xx/bcm43xx_ilt.h
@@ -26,8 +26,8 @@ extern const u16 bcm43xx_ilt_sigmasqr1[B
 extern const u16 bcm43xx_ilt_sigmasqr2[BCM43xx_ILT_SIGMASQR_SIZE];
 
 
-void bcm43xx_ilt_write(struct bcm43xx_private *bcm, u16 offset, u16 val);
-void bcm43xx_ilt_write32(struct bcm43xx_private *bcm, u16 offset, u32 val);
-u16 bcm43xx_ilt_read(struct bcm43xx_private *bcm, u16 offset);
+void bcm43xx_ilt_write(struct bcm43xx_wldev *dev, u16 offset, u16 val);
+void bcm43xx_ilt_write32(struct bcm43xx_wldev *dev, u16 offset, u32 val);
+u16 bcm43xx_ilt_read(struct bcm43xx_wldev *dev, u16 offset);
 
 #endif /* BCM43xx_ILT_H_ */
Index: linux-2.6/drivers/net/wireless/bcm43xx/bcm43xx_leds.c
===================================================================
--- linux-2.6.orig/drivers/net/wireless/bcm43xx/bcm43xx_leds.c
+++ linux-2.6/drivers/net/wireless/bcm43xx/bcm43xx_leds.c
@@ -3,10 +3,11 @@
   Broadcom BCM43xx wireless driver
 
   Copyright (c) 2005 Martin Langer <[EMAIL PROTECTED]>,
-                     Stefano Brivio <[EMAIL PROTECTED]>
-                     Michael Buesch <[EMAIL PROTECTED]>
-                     Danny van Dyk <[EMAIL PROTECTED]>
-                     Andreas Jaggi <[EMAIL PROTECTED]>
+                    Stefano Brivio <[EMAIL PROTECTED]>
+                    Michael Buesch <[EMAIL PROTECTED]>
+                    Danny van Dyk <[EMAIL PROTECTED]>
+                    Andreas Jaggi <[EMAIL PROTECTED]>
+  Copyright (c) 2007 Larry Finger <[EMAIL PROTECTED]>
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -26,38 +27,35 @@
 */
 
 #include "bcm43xx_leds.h"
-#include "bcm43xx_radio.h"
 #include "bcm43xx.h"
-
-#include <asm/bitops.h>
-
+#include "bcm43xx_main.h"
 
 static void bcm43xx_led_changestate(struct bcm43xx_led *led)
 {
-       struct bcm43xx_private *bcm = led->bcm;
+       struct bcm43xx_wldev *dev = led->dev;
        const int index = bcm43xx_led_index(led);
        const u16 mask = (1 << index);
        u16 ledctl;
 
-       assert(index >= 0 && index < BCM43xx_NR_LEDS);
-       assert(led->blink_interval);
-       ledctl = bcm43xx_read16(bcm, BCM43xx_MMIO_GPIO_CONTROL);
+       BCM43xx_WARN_ON(!(index >= 0 && index < BCM43xx_NR_LEDS));
+       BCM43xx_WARN_ON(!led->blink_interval);
+       ledctl = bcm43xx_read16(dev, BCM43xx_MMIO_GPIO_CONTROL);
        ledctl = (ledctl & mask) ? (ledctl & ~mask) : (ledctl | mask);
-       bcm43xx_write16(bcm, BCM43xx_MMIO_GPIO_CONTROL, ledctl);
+       bcm43xx_write16(dev, BCM43xx_MMIO_GPIO_CONTROL, ledctl);
 }
 
 static void bcm43xx_led_blink(unsigned long d)
 {
        struct bcm43xx_led *led = (struct bcm43xx_led *)d;
-       struct bcm43xx_private *bcm = led->bcm;
+       struct bcm43xx_wldev *dev = led->dev;
        unsigned long flags;
 
-       spin_lock_irqsave(&bcm->leds_lock, flags);
+       spin_lock_irqsave(&dev->wl->leds_lock, flags);
        if (led->blink_interval) {
                bcm43xx_led_changestate(led);
                mod_timer(&led->blink_timer, jiffies + led->blink_interval);
        }
-       spin_unlock_irqrestore(&bcm->leds_lock, flags);
+       spin_unlock_irqrestore(&dev->wl->leds_lock, flags);
 }
 
 static void bcm43xx_led_blink_start(struct bcm43xx_led *led,
@@ -73,7 +71,7 @@ static void bcm43xx_led_blink_start(stru
 
 static void bcm43xx_led_blink_stop(struct bcm43xx_led *led, int sync)
 {
-       struct bcm43xx_private *bcm = led->bcm;
+       struct bcm43xx_wldev *dev = led->dev;
        const int index = bcm43xx_led_index(led);
        u16 ledctl;
 
@@ -86,19 +84,21 @@ static void bcm43xx_led_blink_stop(struc
        led->blink_interval = 0;
 
        /* Make sure the LED is turned off. */
-       assert(index >= 0 && index < BCM43xx_NR_LEDS);
-       ledctl = bcm43xx_read16(bcm, BCM43xx_MMIO_GPIO_CONTROL);
+       BCM43xx_WARN_ON(!(index >= 0 && index < BCM43xx_NR_LEDS));
+       ledctl = bcm43xx_read16(dev, BCM43xx_MMIO_GPIO_CONTROL);
        if (led->activelow)
                ledctl |= (1 << index);
        else
                ledctl &= ~(1 << index);
-       bcm43xx_write16(bcm, BCM43xx_MMIO_GPIO_CONTROL, ledctl);
+       bcm43xx_write16(dev, BCM43xx_MMIO_GPIO_CONTROL, ledctl);
 }
 
-static void bcm43xx_led_init_hardcoded(struct bcm43xx_private *bcm,
+static void bcm43xx_led_init_hardcoded(struct bcm43xx_wldev *dev,
                                       struct bcm43xx_led *led,
                                       int led_index)
 {
+       struct ssb_bus *bus = dev->dev->bus;
+
        /* This function is called, if the behaviour (and activelow)
         * information for a LED is missing in the SPROM.
         * We hardcode the behaviour values for various devices here.
@@ -110,12 +110,12 @@ static void bcm43xx_led_init_hardcoded(s
        case 0:
                led->behaviour = BCM43xx_LED_ACTIVITY;
                led->activelow = 1;
-               if (bcm->board_vendor == PCI_VENDOR_ID_COMPAQ)
+               if (bus->boardinfo.vendor == PCI_VENDOR_ID_COMPAQ)
                        led->behaviour = BCM43xx_LED_RADIO_ALL;
                break;
        case 1:
                led->behaviour = BCM43xx_LED_RADIO_B;
-               if (bcm->board_vendor == PCI_VENDOR_ID_ASUSTEK)
+               if (bus->boardinfo.vendor == PCI_VENDOR_ID_ASUSTEK)
                        led->behaviour = BCM43xx_LED_ASSOC;
                break;
        case 2:
@@ -125,30 +125,30 @@ static void bcm43xx_led_init_hardcoded(s
                led->behaviour = BCM43xx_LED_OFF;
                break;
        default:
-               assert(0);
+               BCM43xx_BUG_ON(1);
        }
 }
 
-int bcm43xx_leds_init(struct bcm43xx_private *bcm)
+int bcm43xx_leds_init(struct bcm43xx_wldev *dev)
 {
        struct bcm43xx_led *led;
        u8 sprom[4];
        int i;
 
-       sprom[0] = bcm->sprom.wl0gpio0;
-       sprom[1] = bcm->sprom.wl0gpio1;
-       sprom[2] = bcm->sprom.wl0gpio2;
-       sprom[3] = bcm->sprom.wl0gpio3;
+       sprom[0] = dev->dev->bus->sprom.r1.gpio0;
+       sprom[1] = dev->dev->bus->sprom.r1.gpio1;
+       sprom[2] = dev->dev->bus->sprom.r1.gpio2;
+       sprom[3] = dev->dev->bus->sprom.r1.gpio3;
 
        for (i = 0; i < BCM43xx_NR_LEDS; i++) {
-               led = &(bcm->leds[i]);
-               led->bcm = bcm;
+               led = &(dev->leds[i]);
+               led->dev = dev;
                setup_timer(&led->blink_timer,
                            bcm43xx_led_blink,
                            (unsigned long)led);
 
                if (sprom[i] == 0xFF) {
-                       bcm43xx_led_init_hardcoded(bcm, led, i);
+                       bcm43xx_led_init_hardcoded(dev, led, i);
                } else {
                        led->behaviour = sprom[i] & BCM43xx_LED_BEHAVIOUR;
                        led->activelow = !!(sprom[i] & BCM43xx_LED_ACTIVELOW);
@@ -158,84 +158,79 @@ int bcm43xx_leds_init(struct bcm43xx_pri
        return 0;
 }
 
-void bcm43xx_leds_exit(struct bcm43xx_private *bcm)
+void bcm43xx_leds_exit(struct bcm43xx_wldev *dev)
 {
        struct bcm43xx_led *led;
        int i;
 
        for (i = 0; i < BCM43xx_NR_LEDS; i++) {
-               led = &(bcm->leds[i]);
+               led = &(dev->leds[i]);
                bcm43xx_led_blink_stop(led, 1);
        }
-       bcm43xx_leds_switch_all(bcm, 0);
+       bcm43xx_leds_switch_all(dev, 0);
 }
 
-void bcm43xx_leds_update(struct bcm43xx_private *bcm, int activity)
+void bcm43xx_leds_update(struct bcm43xx_wldev *dev, int activity)
 {
        struct bcm43xx_led *led;
-       struct bcm43xx_radioinfo *radio = bcm43xx_current_radio(bcm);
-       struct bcm43xx_phyinfo *phy = bcm43xx_current_phy(bcm);
-       const int transferring = (jiffies - bcm->stats.last_tx) < 
BCM43xx_LED_XFER_THRES;
+       struct bcm43xx_phy *phy = &dev->phy;
+       const int transferring = (jiffies - dev->stats.last_tx)
+                                 < BCM43xx_LED_XFER_THRES;
        int i, turn_on;
        unsigned long interval = 0;
        u16 ledctl;
        unsigned long flags;
 
-       spin_lock_irqsave(&bcm->leds_lock, flags);
-       ledctl = bcm43xx_read16(bcm, BCM43xx_MMIO_GPIO_CONTROL);
+       spin_lock_irqsave(&dev->wl->leds_lock, flags);
+       ledctl = bcm43xx_read16(dev, BCM43xx_MMIO_GPIO_CONTROL);
        for (i = 0; i < BCM43xx_NR_LEDS; i++) {
-               led = &(bcm->leds[i]);
+               led = &(dev->leds[i]);
 
                turn_on = 0;
                switch (led->behaviour) {
                case BCM43xx_LED_INACTIVE:
                        continue;
                case BCM43xx_LED_OFF:
-               case BCM43xx_LED_BCM4303_3:
                        break;
                case BCM43xx_LED_ON:
                        turn_on = 1;
                        break;
                case BCM43xx_LED_ACTIVITY:
-               case BCM43xx_LED_BCM4303_0:
                        turn_on = activity;
                        break;
                case BCM43xx_LED_RADIO_ALL:
-                       turn_on = radio->enabled && 
bcm43xx_is_hw_radio_enabled(bcm);
+                       turn_on = phy->radio_on &&
+                                 bcm43xx_is_hw_radio_enabled(dev);
                        break;
                case BCM43xx_LED_RADIO_A:
-               case BCM43xx_LED_BCM4303_2:
-                       turn_on = (radio->enabled && 
bcm43xx_is_hw_radio_enabled(bcm) &&
-                                  phy->type == BCM43xx_PHYTYPE_A);
                        break;
                case BCM43xx_LED_RADIO_B:
-               case BCM43xx_LED_BCM4303_1:
-                       turn_on = (radio->enabled && 
bcm43xx_is_hw_radio_enabled(bcm) &&
+                       turn_on = (phy->radio_on &&
+                                  bcm43xx_is_hw_radio_enabled(dev) &&
                                   (phy->type == BCM43xx_PHYTYPE_B ||
                                    phy->type == BCM43xx_PHYTYPE_G));
                        break;
                case BCM43xx_LED_MODE_BG:
-                       if (phy->type == BCM43xx_PHYTYPE_G && 
bcm43xx_is_hw_radio_enabled(bcm) &&
-                           1/*FIXME: using G rates.*/)
+                       if (phy->type == BCM43xx_PHYTYPE_G &&
+                           bcm43xx_is_hw_radio_enabled(dev))
                                turn_on = 1;
                        break;
                case BCM43xx_LED_TRANSFER:
                        if (transferring)
-                               bcm43xx_led_blink_start(led, 
BCM43xx_LEDBLINK_MEDIUM);
+                               bcm43xx_led_blink_start(led,
+                                               BCM43xx_LEDBLINK_MEDIUM);
                        else
                                bcm43xx_led_blink_stop(led, 0);
                        continue;
                case BCM43xx_LED_APTRANSFER:
-                       if (bcm->ieee->iw_mode == IW_MODE_MASTER) {
+                       if (bcm43xx_is_mode(dev->wl, IEEE80211_IF_TYPE_AP)) {
                                if (transferring) {
                                        interval = BCM43xx_LEDBLINK_FAST;
                                        turn_on = 1;
                                }
                        } else {
                                turn_on = 1;
-                               if (0/*TODO: not assoc*/)
-                                       interval = BCM43xx_LEDBLINK_SLOW;
-                               else if (transferring)
+                               if (transferring)
                                        interval = BCM43xx_LEDBLINK_FAST;
                                else
                                        turn_on = 0;
@@ -246,12 +241,9 @@ void bcm43xx_leds_update(struct bcm43xx_
                                bcm43xx_led_blink_stop(led, 0);
                        continue;
                case BCM43xx_LED_WEIRD:
-                       //TODO
                        break;
                case BCM43xx_LED_ASSOC:
-                       if (bcm->softmac->associnfo.associated)
-                               turn_on = 1;
-                       break;
+                       turn_on = 1;
 #ifdef CONFIG_BCM43XX_DEBUG
                case BCM43xx_LED_TEST_BLINKSLOW:
                        bcm43xx_led_blink_start(led, BCM43xx_LEDBLINK_SLOW);
@@ -264,8 +256,7 @@ void bcm43xx_leds_update(struct bcm43xx_
                        continue;
 #endif /* CONFIG_BCM43XX_DEBUG */
                default:
-                       dprintkl(KERN_INFO PFX "Bad value in leds_update,"
-                               " led->behaviour: 0x%x\n", led->behaviour);
+                       BCM43xx_BUG_ON(1);
                };
 
                if (led->activelow)
@@ -275,11 +266,11 @@ void bcm43xx_leds_update(struct bcm43xx_
                else
                        ledctl &= ~(1 << i);
        }
-       bcm43xx_write16(bcm, BCM43xx_MMIO_GPIO_CONTROL, ledctl);
-       spin_unlock_irqrestore(&bcm->leds_lock, flags);
+       bcm43xx_write16(dev, BCM43xx_MMIO_GPIO_CONTROL, ledctl);
+       spin_unlock_irqrestore(&dev->wl->leds_lock, flags);
 }
 
-void bcm43xx_leds_switch_all(struct bcm43xx_private *bcm, int on)
+void bcm43xx_leds_switch_all(struct bcm43xx_wldev *dev, int on)
 {
        struct bcm43xx_led *led;
        u16 ledctl;
@@ -287,10 +278,10 @@ void bcm43xx_leds_switch_all(struct bcm4
        int bit_on;
        unsigned long flags;
 
-       spin_lock_irqsave(&bcm->leds_lock, flags);
-       ledctl = bcm43xx_read16(bcm, BCM43xx_MMIO_GPIO_CONTROL);
+       spin_lock_irqsave(&dev->wl->leds_lock, flags);
+       ledctl = bcm43xx_read16(dev, BCM43xx_MMIO_GPIO_CONTROL);
        for (i = 0; i < BCM43xx_NR_LEDS; i++) {
-               led = &(bcm->leds[i]);
+               led = &(dev->leds[i]);
                if (led->behaviour == BCM43xx_LED_INACTIVE)
                        continue;
                if (on)
@@ -302,6 +293,6 @@ void bcm43xx_leds_switch_all(struct bcm4
                else
                        ledctl &= ~(1 << i);
        }
-       bcm43xx_write16(bcm, BCM43xx_MMIO_GPIO_CONTROL, ledctl);
-       spin_unlock_irqrestore(&bcm->leds_lock, flags);
+       bcm43xx_write16(dev, BCM43xx_MMIO_GPIO_CONTROL, ledctl);
+       spin_unlock_irqrestore(&dev->wl->leds_lock, flags);
 }
Index: linux-2.6/drivers/net/wireless/bcm43xx/bcm43xx_leds.h
===================================================================
--- linux-2.6.orig/drivers/net/wireless/bcm43xx/bcm43xx_leds.h
+++ linux-2.6/drivers/net/wireless/bcm43xx/bcm43xx_leds.h
@@ -9,11 +9,11 @@ struct bcm43xx_led {
        u8 behaviour:7;
        u8 activelow:1;
 
-       struct bcm43xx_private *bcm;
+       struct bcm43xx_wldev *dev;
        struct timer_list blink_timer;
        unsigned long blink_interval;
 };
-#define bcm43xx_led_index(led) ((int)((led) - (led)->bcm->leds))
+#define bcm43xx_led_index(led) ((int)((led) - (led)->dev->leds))
 
 /* Delay between state changes when blinking in jiffies */
 #define BCM43xx_LEDBLINK_SLOW          (HZ / 1)
@@ -34,7 +34,7 @@ enum { /* LED behaviour values */
        BCM43xx_LED_MODE_BG,
        BCM43xx_LED_TRANSFER,
        BCM43xx_LED_APTRANSFER,
-       BCM43xx_LED_WEIRD,//FIXME
+       BCM43xx_LED_WEIRD,
        BCM43xx_LED_ASSOC,
        BCM43xx_LED_INACTIVE,
 
@@ -46,17 +46,11 @@ enum { /* LED behaviour values */
        BCM43xx_LED_TEST_BLINKSLOW,
        BCM43xx_LED_TEST_BLINKMEDIUM,
        BCM43xx_LED_TEST_BLINKFAST,
-
-       /* Misc values for BCM4303 */
-       BCM43xx_LED_BCM4303_0 = 0x2B,
-       BCM43xx_LED_BCM4303_1 = 0x78,
-       BCM43xx_LED_BCM4303_2 = 0x2E,
-       BCM43xx_LED_BCM4303_3 = 0x19,
 };
 
-int bcm43xx_leds_init(struct bcm43xx_private *bcm);
-void bcm43xx_leds_exit(struct bcm43xx_private *bcm);
-void bcm43xx_leds_update(struct bcm43xx_private *bcm, int activity);
-void bcm43xx_leds_switch_all(struct bcm43xx_private *bcm, int on);
+int bcm43xx_leds_init(struct bcm43xx_wldev *dev);
+void bcm43xx_leds_exit(struct bcm43xx_wldev *dev);
+void bcm43xx_leds_update(struct bcm43xx_wldev *dev, int activity);
+void bcm43xx_leds_switch_all(struct bcm43xx_wldev *dev, int on);
 
 #endif /* BCM43xx_LEDS_H_ */

_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev

Reply via email to