* Ensuring that reading interrupt status register and disabling interrupts
is done only once. * Coding style cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34814 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
0e39b0b7ce
commit
2d939304db
|
@ -1070,7 +1070,7 @@ ipw_rx_newstate_intr(struct ipw_softc *sc, struct ipw_soft_buf *sbuf)
|
||||||
|
|
||||||
case IPW_STATE_DISABLED:
|
case IPW_STATE_DISABLED:
|
||||||
/* XXX? is this right? */
|
/* XXX? is this right? */
|
||||||
sc->flags &= ~(IPW_FLAG_HACK | IPW_FLAG_SCANNING |
|
sc->flags &= ~(IPW_FLAG_HACK | IPW_FLAG_SCANNING |
|
||||||
IPW_FLAG_ASSOCIATING | IPW_FLAG_ASSOCIATED);
|
IPW_FLAG_ASSOCIATING | IPW_FLAG_ASSOCIATED);
|
||||||
DPRINTFN(2, ("Firmware disabled (%s flags 0x%x)\n",
|
DPRINTFN(2, ("Firmware disabled (%s flags 0x%x)\n",
|
||||||
IEEESTATE(vap), sc->flags));
|
IEEESTATE(vap), sc->flags));
|
||||||
|
@ -1392,12 +1392,16 @@ ipw_intr(void *arg)
|
||||||
|
|
||||||
IPW_LOCK(sc);
|
IPW_LOCK(sc);
|
||||||
|
|
||||||
|
#if !defined(__HAIKU__)
|
||||||
r = CSR_READ_4(sc, IPW_CSR_INTR);
|
r = CSR_READ_4(sc, IPW_CSR_INTR);
|
||||||
if (r == 0 || r == 0xffffffff)
|
if (r == 0 || r == 0xffffffff)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
/* disable interrupts */
|
/* disable interrupts */
|
||||||
CSR_WRITE_4(sc, IPW_CSR_INTR_MASK, 0);
|
CSR_WRITE_4(sc, IPW_CSR_INTR_MASK, 0);
|
||||||
|
#else
|
||||||
|
r = atomic_get((int32 *)&sc->sc_intr_status);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* acknowledge all interrupts */
|
/* acknowledge all interrupts */
|
||||||
CSR_WRITE_4(sc, IPW_CSR_INTR, r);
|
CSR_WRITE_4(sc, IPW_CSR_INTR, r);
|
||||||
|
|
|
@ -158,6 +158,10 @@ struct ipw_softc {
|
||||||
|
|
||||||
struct ipw_rx_radiotap_header sc_rxtap;
|
struct ipw_rx_radiotap_header sc_rxtap;
|
||||||
struct ipw_tx_radiotap_header sc_txtap;
|
struct ipw_tx_radiotap_header sc_txtap;
|
||||||
|
|
||||||
|
#if defined(__HAIKU__)
|
||||||
|
uint32_t sc_intr_status;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
HAIKU_FBSD_WLAN_DRIVER_GLUE(iprowifi2100, ipw, pci)
|
HAIKU_FBSD_WLAN_DRIVER_GLUE(iprowifi2100, ipw, pci)
|
||||||
NO_HAIKU_FBSD_MII_DRIVER();
|
NO_HAIKU_FBSD_MII_DRIVER();
|
||||||
|
NO_HAIKU_REENABLE_INTERRUPTS();
|
||||||
HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES | FBSD_SWI_TASKQUEUE | FBSD_WLAN);
|
HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES | FBSD_SWI_TASKQUEUE | FBSD_WLAN);
|
||||||
HAIKU_FIRMWARE_VERSION(130);
|
HAIKU_FIRMWARE_VERSION(130);
|
||||||
|
|
||||||
|
@ -29,28 +30,14 @@ HAIKU_CHECK_DISABLE_INTERRUPTS(device_t dev)
|
||||||
{
|
{
|
||||||
struct ipw_softc* sc = (struct ipw_softc*)device_get_softc(dev);
|
struct ipw_softc* sc = (struct ipw_softc*)device_get_softc(dev);
|
||||||
uint32 r;
|
uint32 r;
|
||||||
HAIKU_INTR_REGISTER_STATE;
|
|
||||||
|
|
||||||
HAIKU_INTR_REGISTER_ENTER();
|
r = CSR_READ_4(sc, IPW_CSR_INTR);
|
||||||
if ((r = CSR_READ_4(sc, IPW_CSR_INTR)) == 0 || r == 0xffffffff) {
|
if (r == 0 || r == 0xffffffff)
|
||||||
HAIKU_INTR_REGISTER_LEAVE();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
|
||||||
/* disable interrupts */
|
atomic_set((int32*)&sc->sc_intr_status, r);
|
||||||
|
|
||||||
CSR_WRITE_4(sc, IPW_CSR_INTR_MASK, 0);
|
CSR_WRITE_4(sc, IPW_CSR_INTR_MASK, 0);
|
||||||
|
// disable interrupts
|
||||||
HAIKU_INTR_REGISTER_LEAVE();
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
HAIKU_REENABLE_INTERRUPTS(device_t dev)
|
|
||||||
{
|
|
||||||
struct ipw_softc* sc = (struct ipw_softc*)device_get_softc(dev);
|
|
||||||
|
|
||||||
/* enable interrupts */
|
|
||||||
CSR_WRITE_4(sc, IPW_CSR_INTR_MASK, IPW_INTR_MASK);
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue