Module Name:    src
Committed By:   jmcneill
Date:           Sun Nov 20 15:00:35 UTC 2011

Modified Files:
        src/sys/arch/dreamcast/dev/g2 [jmcneill-audiomp3]: aica.c

Log Message:
adapt to audiomp api changes


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.21.4.1 src/sys/arch/dreamcast/dev/g2/aica.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/dreamcast/dev/g2/aica.c
diff -u src/sys/arch/dreamcast/dev/g2/aica.c:1.21 src/sys/arch/dreamcast/dev/g2/aica.c:1.21.4.1
--- src/sys/arch/dreamcast/dev/g2/aica.c:1.21	Tue Jul 19 15:52:29 2011
+++ src/sys/arch/dreamcast/dev/g2/aica.c	Sun Nov 20 15:00:35 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: aica.c,v 1.21 2011/07/19 15:52:29 dyoung Exp $	*/
+/*	$NetBSD: aica.c,v 1.21.4.1 2011/11/20 15:00:35 jmcneill Exp $	*/
 
 /*
  * Copyright (c) 2003 SHIMIZU Ryo <[email protected]>
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: aica.c,v 1.21 2011/07/19 15:52:29 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: aica.c,v 1.21.4.1 2011/11/20 15:00:35 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -57,6 +57,8 @@ __KERNEL_RCSID(0, "$NetBSD: aica.c,v 1.2
 
 struct aica_softc {
 	device_t		sc_dev;		/* base device */
+	kmutex_t		sc_lock;
+	kmutex_t		sc_intr_lock;
 	bus_space_tag_t		sc_memt;
 	bus_space_handle_t	sc_aica_regh;
 	bus_space_handle_t	sc_aica_memh;
@@ -160,6 +162,7 @@ int aica_get_port(void *, mixer_ctrl_t *
 int aica_query_devinfo(void *, mixer_devinfo_t *);
 void aica_encode(int, int, int, int, u_char *, u_short **);
 int aica_get_props(void *);
+void aica_get_locks(void *, kmutex_t **, kmutex_t **);
 
 const struct audio_hw_if aica_hw_if = {
 	aica_open,
@@ -191,6 +194,8 @@ const struct audio_hw_if aica_hw_if = {
 	aica_trigger_output,
 	aica_trigger_input,
 	NULL,				/* aica_dev_ioctl */
+	NULL,				/* aica_powerstate */
+	aica_get_locks,
 };
 
 int
@@ -217,6 +222,9 @@ aica_attach(device_t parent, device_t se
 	sc->sc_dev = self;
 	sc->sc_memt = ga->ga_memt;
 
+	mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_NONE);
+	mutex_init(&sc->sc_intr_lock, MUTEX_DEFAULT, IPL_SCHED);
+
 	if (bus_space_map(sc->sc_memt, AICA_REG_ADDR, 0x3000, 0,
 	    &sc->sc_aica_regh) != 0) {
 		aprint_error(": can't map AICA register space\n");
@@ -597,6 +605,9 @@ aica_intr(void *arg)
 	struct aica_softc *sc;
 
 	sc = arg;
+
+	mutex_spin_enter(&sc->sc_intr_lock);
+
 	aica_fillbuffer(sc);
 
 	/* call audio interrupt handler (audio_pint()) */
@@ -606,6 +617,9 @@ aica_intr(void *arg)
 
 	/* clear SPU interrupt */
 	bus_space_write_4(sc->sc_memt, sc->sc_aica_regh, 0x28bc, 0x20);
+
+	mutex_spin_exit(&sc->sc_intr_lock);
+
 	return 1;
 }
 
@@ -763,3 +777,13 @@ aica_get_props(void *addr)
 
 	return 0;
 }
+
+void
+aica_get_locks(void *addr, kmutex_t **intr, kmutex_t **thread)
+{
+	struct aica_softc *sc;
+
+	sc = addr;
+	*intr = &sc->sc_intr_lock;
+	*thread = &sc->sc_lock;
+}

Reply via email to