WLAN driver broadcom43xx links now. Needs to be tested as I don't own the

required hardware (many current Macbooks). 
This driver needs a firmware. The retrieval of this firmware requires 
following steps:
 a) Download the linux firmware from http://downloads.openwrt.org/sources/wl_apsta-3.130.20.0.o
 b) Download and compile b43-fwcutter from http://bu3sch.de/b43/fwcutter/b43-fwcutter-011.tar.bz2
 c) Use b43-fwcutter to cut the linux firmware in pieces.
 d) Copy those pieces into /system/data/firmware/broadcom43xx/
 e) Prepend them with bwi_v3_ and remove the .fw ending.
 f) You also need to create an empty file called bwi_v3_ucode in this directory.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34435 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Colin Günther
2009-12-02 02:34:27 +00:00
parent 7dbb668dca
commit abc6c938fd
2 changed files with 57 additions and 0 deletions
@@ -21,6 +21,7 @@ KernelAddon broadcom43xx :
bwimac.c
bwiphy.c
bwirf.c
glue.c
:
libfreebsd_wlan.a
libfreebsd_network.a
@@ -0,0 +1,56 @@
/*
* Copyright 2009, Colin Günther, [email protected].
* All Rights Reserved. Distributed under the terms of the MIT License.
*/
#include <sys/bus.h>
#include <sys/kernel.h>
#include <machine/bus.h>
#include <net/if.h>
#include <net/if_media.h>
#include <net80211/ieee80211_var.h>
#include <net80211/ieee80211_amrr.h>
#include <dev/bwi/bitops.h>
#include <dev/bwi/if_bwireg.h>
#include <dev/bwi/if_bwivar.h>
HAIKU_FBSD_WLAN_DRIVER_GLUE(broadcom43xx, bwi, pci)
NO_HAIKU_FBSD_MII_DRIVER();
HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES|FBSD_WLAN);
HAIKU_FIRMWARE_VERSION(0);
int
HAIKU_CHECK_DISABLE_INTERRUPTS(device_t dev)
{
struct bwi_softc* sc = (struct bwi_softc*)device_get_softc(dev);
HAIKU_INTR_REGISTER_STATE;
HAIKU_INTR_REGISTER_ENTER();
if (CSR_READ_4(sc, BWI_MAC_INTR_STATUS) == 0xffffffff) {
/* Not for us */
HAIKU_INTR_REGISTER_LEAVE();
return 0;
}
/* Disable all interrupts */
CSR_CLRBITS_4(sc, BWI_MAC_INTR_MASK, BWI_ALL_INTRS);
HAIKU_INTR_REGISTER_LEAVE();
return 1;
}
void
HAIKU_REENABLE_INTERRUPTS(device_t dev)
{
struct bwi_softc* sc = (struct bwi_softc*)device_get_softc(dev);
/* enable interrupts */
CSR_SETBITS_4(sc, BWI_MAC_INTR_MASK, BWI_INIT_INTRS);
}