Re: [PATCH] b43: Add Soft-MAC SDIO device support

2009-09-11 Thread Michael Buesch
On Thursday 10 September 2009 23:23:19 Gábor Stefanik wrote:
 On Thu, Sep 10, 2009 at 7:34 PM, Michael Buesch m...@bu3sch.de wrote:
  From: Albert Herranz albert_herr...@yahoo.es
 
  This adds support for Soft-MAC SDIO devices to b43.
  The driver still lacks some fixes for SDIO devices, so it's currently
  marked as BROKEN.
 
 Is it actually completely broken; or already testable, just incomplete?

incomplete

-- 
Greetings, Michael.
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


[PATCH] b43: Add Soft-MAC SDIO device support

2009-09-10 Thread Michael Buesch
From: Albert Herranz albert_herr...@yahoo.es

This adds support for Soft-MAC SDIO devices to b43.
The driver still lacks some fixes for SDIO devices, so it's currently
marked as BROKEN.

Signed-off-by: Albert Herranz albert_herr...@yahoo.es
Signed-off-by: Michael Buesch m...@bu3sch.de

---

Depends on the SSB SDIO patch.


Index: wireless-testing/drivers/net/wireless/b43/Kconfig
===
--- wireless-testing.orig/drivers/net/wireless/b43/Kconfig  2009-09-10 
19:23:09.0 +0200
+++ wireless-testing/drivers/net/wireless/b43/Kconfig   2009-09-10 
19:33:24.0 +0200
@@ -61,11 +61,28 @@ config B43_PCMCIA
 
  If unsure, say N.
 
+config B43_SDIO
+   bool Broadcom 43xx SDIO device support (EXPERIMENTAL)
+   depends on B43  SSB_SDIOHOST_POSSIBLE  EXPERIMENTAL  BROKEN
+   select SSB_SDIOHOST
+   ---help---
+ Broadcom 43xx device support for Soft-MAC SDIO devices.
+
+ With this config option you can drive Soft-MAC b43 cards with a
+ Secure Digital I/O interface.
+ This includes the WLAN daughter card found on the Nintendo Wii
+ video game console.
+ Note that this does not support Broadcom 43xx Full-MAC devices.
+
+ It's safe to select Y here, even if you don't have a B43 SDIO device.
+
+ If unsure, say N.
+
 # Data transfers to the device via PIO
-# This is only needed on PCMCIA devices. All others can do DMA properly.
+# This is only needed on PCMCIA and SDIO devices. All others can do DMA 
properly.
 config B43_PIO
bool
-   depends on B43  (B43_PCMCIA || B43_FORCE_PIO)
+   depends on B43  (B43_SDIO || B43_PCMCIA || B43_FORCE_PIO)
select SSB_BLOCKIO
default y
 
Index: wireless-testing/drivers/net/wireless/b43/Makefile
===
--- wireless-testing.orig/drivers/net/wireless/b43/Makefile 2009-09-10 
19:23:09.0 +0200
+++ wireless-testing/drivers/net/wireless/b43/Makefile  2009-09-10 
19:23:20.0 +0200
@@ -16,6 +16,7 @@ b43-$(CONFIG_B43_PIO) += pio.o
 b43-y  += rfkill.o
 b43-$(CONFIG_B43_LEDS) += leds.o
 b43-$(CONFIG_B43_PCMCIA)   += pcmcia.o
+b43-$(CONFIG_B43_SDIO) += sdio.o
 b43-$(CONFIG_B43_DEBUG)+= debugfs.o
 
 obj-$(CONFIG_B43)  += b43.o
Index: wireless-testing/drivers/net/wireless/b43/main.c
===
--- wireless-testing.orig/drivers/net/wireless/b43/main.c   2009-09-10 
19:23:09.0 +0200
+++ wireless-testing/drivers/net/wireless/b43/main.c2009-09-10 
19:23:20.0 +0200
@@ -8,6 +8,9 @@
   Copyright (c) 2005 Danny van Dyk kugelf...@gentoo.org
   Copyright (c) 2005 Andreas Jaggi andreas.ja...@waterwave.ch
 
+  SDIO support
+  Copyright (c) 2009 Albert Herranz albert_herr...@yahoo.es
+
   Some parts of the code in this file are derived from the ipw2200
   driver  Copyright(c) 2003 - 2004 Intel Corporation.
 
@@ -53,6 +56,8 @@
 #include xmit.h
 #include lo.h
 #include pcmcia.h
+#include sdio.h
+#include linux/mmc/sdio_func.h
 
 MODULE_DESCRIPTION(Broadcom B43 wireless driver);
 MODULE_AUTHOR(Martin Langer);
@@ -1587,7 +1592,7 @@ static void b43_beacon_update_trigger_wo
mutex_lock(wl-mutex);
dev = wl-current_dev;
if (likely(dev  (b43_status(dev) = B43_STAT_INITIALIZED))) {
-   if (0 /*FIXME dev-dev-bus-bustype == SSB_BUSTYPE_SDIO*/) {
+   if (dev-dev-bus-bustype == SSB_BUSTYPE_SDIO) {
/* wl-mutex is enough. */
b43_do_beacon_update_trigger_work(dev);
mmiowb();
@@ -1905,6 +1910,27 @@ static irqreturn_t b43_interrupt_handler
return ret;
 }
 
+/* SDIO interrupt handler. This runs in process context. */
+static void b43_sdio_interrupt_handler(struct b43_wldev *dev)
+{
+   struct b43_wl *wl = dev-wl;
+   struct sdio_func *func = dev-dev-bus-host_sdio;
+   irqreturn_t ret;
+
+   if (unlikely(b43_status(dev)  B43_STAT_STARTED))
+   return;
+
+   mutex_lock(wl-mutex);
+   sdio_release_host(func);
+
+   ret = b43_do_interrupt(dev);
+   if (ret == IRQ_WAKE_THREAD)
+   b43_do_interrupt_thread(dev);
+
+   sdio_claim_host(func);
+   mutex_unlock(wl-mutex);
+}
+
 void b43_do_release_fw(struct b43_firmware_file *fw)
 {
release_firmware(fw-data);
@@ -3828,7 +3854,7 @@ redo:
 
/* Disable interrupts on the device. */
b43_set_status(dev, B43_STAT_INITIALIZED);
-   if (0 /*FIXME dev-dev-bus-bustype == SSB_BUSTYPE_SDIO*/) {
+   if (dev-dev-bus-bustype == SSB_BUSTYPE_SDIO) {
/* wl-mutex is locked. That is enough. */
b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, 0);
b43_read32(dev, B43_MMIO_GEN_IRQ_MASK); /* Flush */
@@ -3858,7 +3884,10 @@ redo:
 

Re: [PATCH] b43: Add Soft-MAC SDIO device support

2009-09-10 Thread Gábor Stefanik
On Thu, Sep 10, 2009 at 7:34 PM, Michael Buesch m...@bu3sch.de wrote:
 From: Albert Herranz albert_herr...@yahoo.es

 This adds support for Soft-MAC SDIO devices to b43.
 The driver still lacks some fixes for SDIO devices, so it's currently
 marked as BROKEN.

Is it actually completely broken; or already testable, just incomplete?


 Signed-off-by: Albert Herranz albert_herr...@yahoo.es
 Signed-off-by: Michael Buesch m...@bu3sch.de

 ---

 Depends on the SSB SDIO patch.


 Index: wireless-testing/drivers/net/wireless/b43/Kconfig
 ===
 --- wireless-testing.orig/drivers/net/wireless/b43/Kconfig      2009-09-10 
 19:23:09.0 +0200
 +++ wireless-testing/drivers/net/wireless/b43/Kconfig   2009-09-10 
 19:33:24.0 +0200
 @@ -61,11 +61,28 @@ config B43_PCMCIA

          If unsure, say N.

 +config B43_SDIO
 +       bool Broadcom 43xx SDIO device support (EXPERIMENTAL)
 +       depends on B43  SSB_SDIOHOST_POSSIBLE  EXPERIMENTAL  BROKEN
 +       select SSB_SDIOHOST
 +       ---help---
 +         Broadcom 43xx device support for Soft-MAC SDIO devices.
 +
 +         With this config option you can drive Soft-MAC b43 cards with a
 +         Secure Digital I/O interface.
 +         This includes the WLAN daughter card found on the Nintendo Wii
 +         video game console.
 +         Note that this does not support Broadcom 43xx Full-MAC devices.
 +
 +         It's safe to select Y here, even if you don't have a B43 SDIO 
 device.
 +
 +         If unsure, say N.
 +
  # Data transfers to the device via PIO
 -# This is only needed on PCMCIA devices. All others can do DMA properly.
 +# This is only needed on PCMCIA and SDIO devices. All others can do DMA 
 properly.
  config B43_PIO
        bool
 -       depends on B43  (B43_PCMCIA || B43_FORCE_PIO)
 +       depends on B43  (B43_SDIO || B43_PCMCIA || B43_FORCE_PIO)
        select SSB_BLOCKIO
        default y

 Index: wireless-testing/drivers/net/wireless/b43/Makefile
 ===
 --- wireless-testing.orig/drivers/net/wireless/b43/Makefile     2009-09-10 
 19:23:09.0 +0200
 +++ wireless-testing/drivers/net/wireless/b43/Makefile  2009-09-10 
 19:23:20.0 +0200
 @@ -16,6 +16,7 @@ b43-$(CONFIG_B43_PIO)         += pio.o
  b43-y                          += rfkill.o
  b43-$(CONFIG_B43_LEDS)         += leds.o
  b43-$(CONFIG_B43_PCMCIA)       += pcmcia.o
 +b43-$(CONFIG_B43_SDIO)         += sdio.o
  b43-$(CONFIG_B43_DEBUG)                += debugfs.o

  obj-$(CONFIG_B43)              += b43.o
 Index: wireless-testing/drivers/net/wireless/b43/main.c
 ===
 --- wireless-testing.orig/drivers/net/wireless/b43/main.c       2009-09-10 
 19:23:09.0 +0200
 +++ wireless-testing/drivers/net/wireless/b43/main.c    2009-09-10 
 19:23:20.0 +0200
 @@ -8,6 +8,9 @@
   Copyright (c) 2005 Danny van Dyk kugelf...@gentoo.org
   Copyright (c) 2005 Andreas Jaggi andreas.ja...@waterwave.ch

 +  SDIO support
 +  Copyright (c) 2009 Albert Herranz albert_herr...@yahoo.es
 +
   Some parts of the code in this file are derived from the ipw2200
   driver  Copyright(c) 2003 - 2004 Intel Corporation.

 @@ -53,6 +56,8 @@
  #include xmit.h
  #include lo.h
  #include pcmcia.h
 +#include sdio.h
 +#include linux/mmc/sdio_func.h

  MODULE_DESCRIPTION(Broadcom B43 wireless driver);
  MODULE_AUTHOR(Martin Langer);
 @@ -1587,7 +1592,7 @@ static void b43_beacon_update_trigger_wo
        mutex_lock(wl-mutex);
        dev = wl-current_dev;
        if (likely(dev  (b43_status(dev) = B43_STAT_INITIALIZED))) {
 -               if (0 /*FIXME dev-dev-bus-bustype == SSB_BUSTYPE_SDIO*/) {
 +               if (dev-dev-bus-bustype == SSB_BUSTYPE_SDIO) {
                        /* wl-mutex is enough. */
                        b43_do_beacon_update_trigger_work(dev);
                        mmiowb();
 @@ -1905,6 +1910,27 @@ static irqreturn_t b43_interrupt_handler
        return ret;
  }

 +/* SDIO interrupt handler. This runs in process context. */
 +static void b43_sdio_interrupt_handler(struct b43_wldev *dev)
 +{
 +       struct b43_wl *wl = dev-wl;
 +       struct sdio_func *func = dev-dev-bus-host_sdio;
 +       irqreturn_t ret;
 +
 +       if (unlikely(b43_status(dev)  B43_STAT_STARTED))
 +               return;
 +
 +       mutex_lock(wl-mutex);
 +       sdio_release_host(func);
 +
 +       ret = b43_do_interrupt(dev);
 +       if (ret == IRQ_WAKE_THREAD)
 +               b43_do_interrupt_thread(dev);
 +
 +       sdio_claim_host(func);
 +       mutex_unlock(wl-mutex);
 +}
 +
  void b43_do_release_fw(struct b43_firmware_file *fw)
  {
        release_firmware(fw-data);
 @@ -3828,7 +3854,7 @@ redo:

        /* Disable interrupts on the device. */
        b43_set_status(dev, B43_STAT_INITIALIZED);
 -       if (0 /*FIXME dev-dev-bus-bustype == SSB_BUSTYPE_SDIO*/) {
 +       if (dev-dev-bus-bustype ==