Author: mmlr Date: 2010-01-13 23:24:18 +0100 (Wed, 13 Jan 2010) New Revision: 35060 Changeset: http://dev.haiku-os.org/changeset/35060/haiku Modified: haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/dev/bwi/if_bwi.c haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c Log: Move just a bit more of the interrupt code to the glue code. It does an and with the enabled interrupts to check if there's anything of interest. This obviously couldn't really work when clearing the enabled interrupts in the glue code. This gets broadcom43xx working for me, tested with a Linksys WMP54GS-EU (PCI). Modified: haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/dev/bwi/if_bwi.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/dev/bwi/if_bwi.c 2010-01-13 22:02:21 UTC (rev 35059) +++ haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/dev/bwi/if_bwi.c 2010-01-13 22:24:18 UTC (rev 35060) @@ -1581,9 +1581,6 @@ BWI_UNLOCK(sc); return; } -#else - intr_status = atomic_get((int32 *)&sc->sc_intr_status); -#endif DPRINTF(sc, BWI_DBG_INTR, "intr status 0x%08x\n", intr_status); @@ -1592,6 +1589,9 @@ BWI_UNLOCK(sc); return; } +#else + intr_status = atomic_get((int32 *)&sc->sc_intr_status); +#endif KASSERT(sc->sc_cur_regwin->rw_type == BWI_REGWIN_T_MAC, ("current regwin type %d", sc->sc_cur_regwin->rw_type)); Modified: haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c 2010-01-13 22:02:21 UTC (rev 35059) +++ haiku/trunk/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c 2010-01-13 22:24:18 UTC (rev 35060) @@ -44,6 +44,12 @@ return 0; } + intr_status &= CSR_READ_4(sc, BWI_MAC_INTR_MASK); + if (intr_status == 0) { + // nothing interesting + return 0; + } + atomic_set((int32*)&sc->sc_intr_status, intr_status); CSR_CLRBITS_4(sc, BWI_MAC_INTR_MASK, BWI_ALL_INTRS);