summaryrefslogtreecommitdiffstats
path: root/sys/arch/sparc/dev/amd7930.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/sparc/dev/amd7930.c')
-rw-r--r--sys/arch/sparc/dev/amd7930.c38
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