diff --git a/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/Jamfile b/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/Jamfile index db1b923b28..2ed9c7d1a5 100644 --- a/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/Jamfile +++ b/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/Jamfile @@ -21,6 +21,7 @@ KernelAddon broadcom43xx : bwimac.c bwiphy.c bwirf.c + glue.c : libfreebsd_wlan.a libfreebsd_network.a diff --git a/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c b/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c new file mode 100644 index 0000000000..aff69ea3a0 --- /dev/null +++ b/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c @@ -0,0 +1,56 @@ +/* + * Copyright 2009, Colin Günther, coling@gmx.de. + * All Rights Reserved. Distributed under the terms of the MIT License. + */ + +#include +#include + +#include + +#include +#include + +#include +#include + +#include +#include +#include + + +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); +}