diff options
Diffstat (limited to 'sys/arch/sparc/dev/amd7930.c')
| -rw-r--r-- | sys/arch/sparc/dev/amd7930.c | 38 |
1 files changed, 10 insertions, 28 deletions
diff --git a/sys/arch/sparc/dev/amd7930.c b/sys/arch/sparc/dev/amd7930.c index 5930c16a292..9c84d7fa035 100644 --- a/sys/arch/sparc/dev/amd7930.c +++ b/sys/arch/sparc/dev/amd7930.c @@ -1,4 +1,4 @@ -/* $OpenBSD: amd7930.c,v 1.31 2008/04/21 00:32:42 jakemsr Exp $ */ +/* $OpenBSD: amd7930.c,v 1.32 2009/04/10 20:53:51 miod Exp $ */ /* $NetBSD: amd7930.c,v 1.37 1998/03/30 14:23:40 pk Exp $ */ /* @@ -66,7 +66,6 @@ int amd7930debug = 0; */ struct amd7930_softc { struct device sc_dev; /* base device */ - struct intrhand sc_swih; /* software interrupt vector */ int sc_open; /* single use device */ int sc_locked; /* true when transferring data */ @@ -86,25 +85,14 @@ struct amd7930_softc { /* sc_au is special in that the hardware interrupt handler uses it */ struct auio sc_au; /* recv and xmit buffers, etc */ #define sc_hwih sc_au.au_ih /* hardware interrupt vector */ +#define sc_swih sc_au.au_swih /* software interrupt cookie */ }; -/* interrupt interfaces */ -#if defined(SUN4M) -#define AUDIO_SET_SWINTR do { \ - if (CPU_ISSUN4M) \ - raise(0, 4); \ - else \ - ienab_bis(IE_L4); \ -} while(0); -#else -#define AUDIO_SET_SWINTR ienab_bis(IE_L4) -#endif /* defined(SUN4M) */ - #ifndef AUDIO_C_HANDLER struct auio *auiop; #endif /* AUDIO_C_HANDLER */ int amd7930hwintr(void *); -int amd7930swintr(void *); +void amd7930swintr(void *); /* forward declarations */ void audio_setmap(volatile struct amd7930 *, struct mapreg *); @@ -325,10 +313,7 @@ amd7930attach(parent, self, args) intr_establish(pri, &sc->sc_hwih, IPL_AUHARD, sc->sc_dev.dv_xname); } - sc->sc_swih.ih_fun = amd7930swintr; - sc->sc_swih.ih_arg = sc; - intr_establish(IPL_AUSOFT, &sc->sc_swih, IPL_AUSOFT, - sc->sc_dev.dv_xname); + sc->sc_swih = softintr_establish(IPL_AUSOFT, amd7930swintr, sc); audio_attach_mi(&sa_hw_if, sc, &sc->sc_dev); amd7930_commit_settings(sc); @@ -809,7 +794,7 @@ amd7930hwintr(au0) if (amd7930debug > 1) printf("amd7930hwintr: swintr(r) requested"); #endif - AUDIO_SET_SWINTR; + softintr_schedule(au->au_swih); } } @@ -824,20 +809,20 @@ amd7930hwintr(au0) if (amd7930debug > 1) printf("amd7930hwintr: swintr(p) requested"); #endif - AUDIO_SET_SWINTR; + softintr_schedule(au->au_swih); } } return (-1); } -int +void amd7930swintr(sc0) void *sc0; { - register struct amd7930_softc *sc = sc0; - register struct auio *au; - register int s, ret = 0; + struct amd7930_softc *sc = sc0; + struct auio *au; + int s; #ifdef AUDIO_DEBUG if (amd7930debug > 1) @@ -848,17 +833,14 @@ amd7930swintr(sc0) s = splaudio(); if (au->au_rdata > au->au_rend && sc->sc_rintr != NULL) { splx(s); - ret = 1; (*sc->sc_rintr)(sc->sc_rarg); s = splaudio(); } if (au->au_pdata > au->au_pend && sc->sc_pintr != NULL) { splx(s); - ret = 1; (*sc->sc_pintr)(sc->sc_parg); } else splx(s); - return (ret); } #ifndef AUDIO_C_HANDLER |
