Author: colin Date: 2009-12-02 03:34:27 +0100 (Wed, 02 Dec 2009) New Revision: 34435 Changeset: http://dev.haiku-os.org/changeset/34435/haiku Added: haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c Modified: haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/Jamfile Log: 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. Modified: haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/Jamfile =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/Jamfile 2009-12-01 23:49:10 UTC (rev 34434) +++ haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/Jamfile 2009-12-02 02:34:27 UTC (rev 34435) @@ -21,6 +21,7 @@ bwimac.c bwiphy.c bwirf.c + glue.c : libfreebsd_wlan.a libfreebsd_network.a Added: haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c (rev 0) +++ haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c 2009-12-02 02:34:27 UTC (rev 34435) @@ -0,0 +1,56 @@ +/* + * Copyright 2009, Colin Günther, coling@xxxxxxx + * 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); +}