From a57a200337807e7dae39f7a3d3ad9d069ada7aed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Thu, 16 Feb 2012 21:00:26 +0100 Subject: [PATCH] marvell_yukon: implement HAIKU_CHECK_DISABLE_INTERRUPTS() * hrev43729 switched the interrupt handler to a threaded handler, thus requiring to implement HAIKU_CHECK_DISABLE_INTERRUPTS() * should help fixing #8327 --- .../network/marvell_yukon/dev/msk/glue.c | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/drivers/network/marvell_yukon/dev/msk/glue.c b/src/add-ons/kernel/drivers/network/marvell_yukon/dev/msk/glue.c index f89bfd65a1..8cc45a6350 100644 --- a/src/add-ons/kernel/drivers/network/marvell_yukon/dev/msk/glue.c +++ b/src/add-ons/kernel/drivers/network/marvell_yukon/dev/msk/glue.c @@ -6,6 +6,15 @@ #include +#include +#include + +#include + +#include +#include + +#include HAIKU_FBSD_DRIVER_GLUE(marvell_yukon, mskc, pci) @@ -26,7 +35,26 @@ __haiku_select_miibus_driver(device_t dev) return __haiku_probe_miibus(dev, drivers); } -NO_HAIKU_CHECK_DISABLE_INTERRUPTS(); + +int +HAIKU_CHECK_DISABLE_INTERRUPTS(device_t dev) +{ + struct msk_softc *sc = device_get_softc(dev); + u_int16_t status; + + /* Reading B0_Y2_SP_ISRC2 masks further interrupts. */ + status = CSR_READ_4(sc, B0_Y2_SP_ISRC2); + if (status == 0 || status == 0xffffffff || + (sc->msk_pflags & MSK_FLAG_SUSPEND) != 0 || + (status & sc->msk_intrmask) == 0) { + CSR_WRITE_4(sc, B0_Y2_SP_ICR, 2); + return 0; + } + + return 1; +} + + NO_HAIKU_REENABLE_INTERRUPTS(); HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES | FBSD_FAST_TASKQUEUE | FBSD_SWI_TASKQUEUE);