From 15755741cea54b62d743da0ce7280d6ed2bbd4e4 Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Wed, 13 Jan 2010 22:24:18 +0000 Subject: [PATCH] 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). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35060 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../drivers/network/wlan/broadcom43xx/dev/bwi/if_bwi.c | 6 +++--- src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/dev/bwi/if_bwi.c b/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/dev/bwi/if_bwi.c index 2c442c0d2d..fefc55b931 100644 --- a/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/dev/bwi/if_bwi.c +++ b/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/dev/bwi/if_bwi.c @@ -1581,9 +1581,6 @@ bwi_intr(void *xsc) 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_intr(void *xsc) 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)); diff --git a/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c b/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c index fb14b3cd39..e71e0174e5 100644 --- a/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c +++ b/src/add-ons/kernel/drivers/network/wlan/broadcom43xx/glue.c @@ -44,6 +44,12 @@ HAIKU_CHECK_DISABLE_INTERRUPTS(device_t dev) 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);