Module Name: src
Committed By: jmcneill
Date: Sun Nov 20 13:47:07 UTC 2011
Modified Files:
src/sys/arch/arm/xscale [jmcneill-audiomp3]: pxa2x0_ac97.c
pxa2x0_dmac.c pxa2x0_dmac.h pxa2x0_i2s.c pxa2x0_i2s.h pxa2x0_mci.c
src/sys/arch/zaurus/dev [jmcneill-audiomp3]: zaudio.c
Log Message:
port zaudio to audiomp api changes for real this time
To generate a diff of this commit:
cvs rdiff -u -r1.9.4.1 -r1.9.4.2 src/sys/arch/arm/xscale/pxa2x0_ac97.c
cvs rdiff -u -r1.8 -r1.8.4.1 src/sys/arch/arm/xscale/pxa2x0_dmac.c
cvs rdiff -u -r1.3 -r1.3.84.1 src/sys/arch/arm/xscale/pxa2x0_dmac.h
cvs rdiff -u -r1.9 -r1.9.4.1 src/sys/arch/arm/xscale/pxa2x0_i2s.c
cvs rdiff -u -r1.2 -r1.2.4.1 src/sys/arch/arm/xscale/pxa2x0_i2s.h
cvs rdiff -u -r1.8 -r1.8.6.1 src/sys/arch/arm/xscale/pxa2x0_mci.c
cvs rdiff -u -r1.15.4.1 -r1.15.4.2 src/sys/arch/zaurus/dev/zaudio.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/arm/xscale/pxa2x0_ac97.c
diff -u src/sys/arch/arm/xscale/pxa2x0_ac97.c:1.9.4.1 src/sys/arch/arm/xscale/pxa2x0_ac97.c:1.9.4.2
--- src/sys/arch/arm/xscale/pxa2x0_ac97.c:1.9.4.1 Sun Nov 20 13:13:43 2011
+++ src/sys/arch/arm/xscale/pxa2x0_ac97.c Sun Nov 20 13:47:07 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: pxa2x0_ac97.c,v 1.9.4.1 2011/11/20 13:13:43 mrg Exp $ */
+/* $NetBSD: pxa2x0_ac97.c,v 1.9.4.2 2011/11/20 13:47:07 jmcneill Exp $ */
/*
* Copyright (c) 2003, 2005 Wasabi Systems, Inc.
@@ -679,28 +679,28 @@ acu_malloc(void *arg, int direction, siz
return (NULL);
/* XXX */
- if ((ad->ad_dx = pxa2x0_dmac_allocate_xfer(M_NOWAIT)) == NULL)
+ if ((ad->ad_dx = pxa2x0_dmac_allocate_xfer()) == NULL)
goto error;
ad->ad_size = size;
error = bus_dmamem_alloc(sc->sc_dmat, size, 16, 0, ad->ad_segs,
- ACU_N_SEGS, &ad->ad_nsegs, BUS_DMA_NOWAIT);
+ ACU_N_SEGS, &ad->ad_nsegs, BUS_DMA_WAITOK);
if (error)
goto free_xfer;
error = bus_dmamem_map(sc->sc_dmat, ad->ad_segs, ad->ad_nsegs, size,
- &ad->ad_addr, BUS_DMA_NOWAIT | BUS_DMA_COHERENT | BUS_DMA_NOCACHE);
+ &ad->ad_addr, BUS_DMA_WAITOK | BUS_DMA_COHERENT | BUS_DMA_NOCACHE);
if (error)
goto free_dmamem;
error = bus_dmamap_create(sc->sc_dmat, size, 1, size, 0,
- BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW, &ad->ad_map);
+ BUS_DMA_WAITOK | BUS_DMA_ALLOCNOW, &ad->ad_map);
if (error)
goto unmap_dmamem;
error = bus_dmamap_load(sc->sc_dmat, ad->ad_map, ad->ad_addr, size,
- NULL, BUS_DMA_NOWAIT);
+ NULL, BUS_DMA_WAITOK);
if (error) {
bus_dmamap_destroy(sc->sc_dmat, ad->ad_map);
unmap_dmamem: bus_dmamem_unmap(sc->sc_dmat, ad->ad_addr, size);
Index: src/sys/arch/arm/xscale/pxa2x0_dmac.c
diff -u src/sys/arch/arm/xscale/pxa2x0_dmac.c:1.8 src/sys/arch/arm/xscale/pxa2x0_dmac.c:1.8.4.1
--- src/sys/arch/arm/xscale/pxa2x0_dmac.c:1.8 Fri Jul 1 20:32:51 2011
+++ src/sys/arch/arm/xscale/pxa2x0_dmac.c Sun Nov 20 13:47:07 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: pxa2x0_dmac.c,v 1.8 2011/07/01 20:32:51 dyoung Exp $ */
+/* $NetBSD: pxa2x0_dmac.c,v 1.8.4.1 2011/11/20 13:47:07 jmcneill Exp $ */
/*
* Copyright (c) 2003, 2005 Wasabi Systems, Inc.
@@ -41,7 +41,7 @@
#include <sys/systm.h>
#include <sys/device.h>
#include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
#include <sys/queue.h>
#include <uvm/uvm_param.h> /* For PAGE_SIZE */
@@ -741,11 +741,11 @@ dmac_dmover_done(struct dmac_xfer *dx, i
#endif
struct dmac_xfer *
-pxa2x0_dmac_allocate_xfer(int flags)
+pxa2x0_dmac_allocate_xfer(void)
{
struct dmac_xfer_state *dxs;
- dxs = malloc(sizeof(struct dmac_xfer_state), M_DEVBUF, flags);
+ dxs = kmem_alloc(sizeof(*dxs), KM_SLEEP);
return ((struct dmac_xfer *)dxs);
}
@@ -753,12 +753,13 @@ pxa2x0_dmac_allocate_xfer(int flags)
void
pxa2x0_dmac_free_xfer(struct dmac_xfer *dx)
{
+ struct dmac_xfer_state *dxs = (struct dmac_xfer_state *)dx;
/*
* XXX: Should verify the DMAC is not actively using this
* structure before freeing...
*/
- free(dx, M_DEVBUF);
+ kmem_free(dxs, sizeof(*dxs));
}
static inline int
Index: src/sys/arch/arm/xscale/pxa2x0_dmac.h
diff -u src/sys/arch/arm/xscale/pxa2x0_dmac.h:1.3 src/sys/arch/arm/xscale/pxa2x0_dmac.h:1.3.84.1
--- src/sys/arch/arm/xscale/pxa2x0_dmac.h:1.3 Wed Feb 21 22:59:39 2007
+++ src/sys/arch/arm/xscale/pxa2x0_dmac.h Sun Nov 20 13:47:07 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: pxa2x0_dmac.h,v 1.3 2007/02/21 22:59:39 thorpej Exp $ */
+/* $NetBSD: pxa2x0_dmac.h,v 1.3.84.1 2011/11/20 13:47:07 jmcneill Exp $ */
/*
* Copyright (c) 2003, 2005 Wasabi Systems, Inc.
@@ -147,7 +147,7 @@ struct dmac_xfer {
#define DMAC_DESC_DST 1
};
-extern struct dmac_xfer *pxa2x0_dmac_allocate_xfer(int);
+extern struct dmac_xfer *pxa2x0_dmac_allocate_xfer(void);
extern void pxa2x0_dmac_free_xfer(struct dmac_xfer *);
extern int pxa2x0_dmac_start_xfer(struct dmac_xfer *);
extern void pxa2x0_dmac_abort_xfer(struct dmac_xfer *);
Index: src/sys/arch/arm/xscale/pxa2x0_i2s.c
diff -u src/sys/arch/arm/xscale/pxa2x0_i2s.c:1.9 src/sys/arch/arm/xscale/pxa2x0_i2s.c:1.9.4.1
--- src/sys/arch/arm/xscale/pxa2x0_i2s.c:1.9 Fri Jul 1 20:32:51 2011
+++ src/sys/arch/arm/xscale/pxa2x0_i2s.c Sun Nov 20 13:47:07 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: pxa2x0_i2s.c,v 1.9 2011/07/01 20:32:51 dyoung Exp $ */
+/* $NetBSD: pxa2x0_i2s.c,v 1.9.4.1 2011/11/20 13:47:07 jmcneill Exp $ */
/* $OpenBSD: pxa2x0_i2s.c,v 1.7 2006/04/04 11:45:40 pascoe Exp $ */
/*
@@ -18,13 +18,12 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pxa2x0_i2s.c,v 1.9 2011/07/01 20:32:51 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pxa2x0_i2s.c,v 1.9.4.1 2011/11/20 13:47:07 jmcneill Exp $");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/device.h>
-#include <sys/malloc.h>
-
+#include <sys/kmem.h>
#include <sys/bus.h>
#include <arm/xscale/pxa2x0reg.h>
@@ -67,6 +66,8 @@ pxa2x0_i2s_attach_sub(struct pxa2x0_i2s_
{
int rv;
+ KASSERT(sc->sc_intr_lock != NULL);
+
rv = bus_space_map(sc->sc_iot, PXA2X0_I2S_BASE, PXA2X0_I2S_SIZE, 0,
&sc->sc_ioh);
if (rv) {
@@ -191,19 +192,18 @@ pxa2x0_i2s_setspeed(struct pxa2x0_i2s_so
}
void *
-pxa2x0_i2s_allocm(void *hdl, int direction, size_t size,
- struct malloc_type *type, int flags)
+pxa2x0_i2s_allocm(void *hdl, int direction, size_t size)
{
struct pxa2x0_i2s_softc *sc = hdl;
struct pxa2x0_i2s_dma *p;
struct dmac_xfer *dx;
int error;
- p = malloc(sizeof(*p), type, flags);
+ p = kmem_alloc(sizeof(*p), KM_SLEEP);
if (p == NULL)
return NULL;
- dx = pxa2x0_dmac_allocate_xfer(M_NOWAIT);
+ dx = pxa2x0_dmac_allocate_xfer();
if (dx == NULL) {
goto fail_alloc;
}
@@ -211,22 +211,22 @@ pxa2x0_i2s_allocm(void *hdl, int directi
p->size = size;
if ((error = bus_dmamem_alloc(sc->sc_dmat, size, NBPG, 0, p->segs,
- I2S_N_SEGS, &p->nsegs, BUS_DMA_NOWAIT)) != 0) {
+ I2S_N_SEGS, &p->nsegs, BUS_DMA_WAITOK)) != 0) {
goto fail_xfer;
}
if ((error = bus_dmamem_map(sc->sc_dmat, p->segs, p->nsegs, size,
- &p->addr, BUS_DMA_NOWAIT | BUS_DMA_COHERENT)) != 0) {
+ &p->addr, BUS_DMA_WAITOK | BUS_DMA_COHERENT)) != 0) {
goto fail_map;
}
if ((error = bus_dmamap_create(sc->sc_dmat, size, 1, size, 0,
- BUS_DMA_NOWAIT, &p->map)) != 0) {
+ BUS_DMA_WAITOK, &p->map)) != 0) {
goto fail_create;
}
if ((error = bus_dmamap_load(sc->sc_dmat, p->map, p->addr, size, NULL,
- BUS_DMA_NOWAIT)) != 0) {
+ BUS_DMA_WAITOK)) != 0) {
goto fail_load;
}
@@ -249,12 +249,12 @@ fail_map:
fail_xfer:
pxa2x0_dmac_free_xfer(dx);
fail_alloc:
- free(p, type);
+ kmem_free(p, sizeof(*p));
return NULL;
}
void
-pxa2x0_i2s_freem(void *hdl, void *ptr, struct malloc_type *type)
+pxa2x0_i2s_freem(void *hdl, void *ptr, size_t size)
{
struct pxa2x0_i2s_softc *sc = hdl;
struct pxa2x0_i2s_dma **pp, *p;
@@ -270,7 +270,7 @@ pxa2x0_i2s_freem(void *hdl, void *ptr, s
bus_dmamem_free(sc->sc_dmat, p->segs, p->nsegs);
*pp = p->next;
- free(p, type);
+ kmem_free(p, sizeof(*p));
return;
}
}
@@ -321,14 +321,13 @@ int
pxa2x0_i2s_halt_output(void *hdl)
{
struct pxa2x0_i2s_softc *sc = hdl;
- int s;
- s = splaudio();
+ mutex_spin_enter(sc->sc_intr_lock);
if (sc->sc_txdma) {
pxa2x0_dmac_abort_xfer(sc->sc_txdma->dx);
sc->sc_txdma = NULL;
}
- splx(s);
+ mutex_spin_exit(sc->sc_intr_lock);
return 0;
}
@@ -337,14 +336,13 @@ int
pxa2x0_i2s_halt_input(void *hdl)
{
struct pxa2x0_i2s_softc *sc = hdl;
- int s;
- s = splaudio();
+ mutex_spin_enter(sc->sc_intr_lock);
if (sc->sc_rxdma) {
pxa2x0_dmac_abort_xfer(sc->sc_rxdma->dx);
sc->sc_rxdma = NULL;
}
- splx(s);
+ mutex_spin_exit(sc->sc_intr_lock);
return 0;
}
@@ -453,7 +451,6 @@ static void
pxa2x0_i2s_dmac_ointr(struct dmac_xfer *dx, int status)
{
struct pxa2x0_i2s_softc *sc = dx->dx_cookie;
- int s;
if (sc->sc_txdma == NULL) {
panic("pxa2x_i2s_dmac_ointr: bad TX DMA descriptor!");
@@ -468,16 +465,15 @@ pxa2x0_i2s_dmac_ointr(struct dmac_xfer *
"non-zero completion status %d\n", status);
}
- s = splaudio();
+ mutex_spin_enter(sc->sc_intr_lock);
(sc->sc_txfunc)(sc->sc_txarg);
- splx(s);
+ mutex_spin_exit(sc->sc_intr_lock);
}
static void
pxa2x0_i2s_dmac_iintr(struct dmac_xfer *dx, int status)
{
struct pxa2x0_i2s_softc *sc = dx->dx_cookie;
- int s;
if (sc->sc_rxdma == NULL) {
panic("pxa2x_i2s_dmac_iintr: bad RX DMA descriptor!");
@@ -493,7 +489,7 @@ pxa2x0_i2s_dmac_iintr(struct dmac_xfer *
}
- s = splaudio();
+ mutex_spin_enter(sc->sc_intr_lock);
(sc->sc_rxfunc)(sc->sc_rxarg);
- splx(s);
+ mutex_spin_exit(sc->sc_intr_lock);
}
Index: src/sys/arch/arm/xscale/pxa2x0_i2s.h
diff -u src/sys/arch/arm/xscale/pxa2x0_i2s.h:1.2 src/sys/arch/arm/xscale/pxa2x0_i2s.h:1.2.4.1
--- src/sys/arch/arm/xscale/pxa2x0_i2s.h:1.2 Fri Jul 1 20:32:51 2011
+++ src/sys/arch/arm/xscale/pxa2x0_i2s.h Sun Nov 20 13:47:07 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: pxa2x0_i2s.h,v 1.2 2011/07/01 20:32:51 dyoung Exp $ */
+/* $NetBSD: pxa2x0_i2s.h,v 1.2.4.1 2011/11/20 13:47:07 jmcneill Exp $ */
/* $OpenBSD: pxa2x0_i2s.h,v 1.3 2006/04/04 11:45:40 pascoe Exp $ */
/*
@@ -27,6 +27,7 @@ struct audio_params;
struct pxa2x0_i2s_softc {
struct device sc_dev;
+ kmutex_t *sc_intr_lock;
bus_space_tag_t sc_iot;
bus_space_handle_t sc_ioh;
@@ -61,8 +62,8 @@ void pxa2x0_i2s_write(struct pxa2x0_i2s_
void pxa2x0_i2s_setspeed(struct pxa2x0_i2s_softc *, u_int *);
-void * pxa2x0_i2s_allocm(void *, int, size_t, struct malloc_type *, int);
-void pxa2x0_i2s_freem(void *, void *, struct malloc_type *);
+void * pxa2x0_i2s_allocm(void *, int, size_t);
+void pxa2x0_i2s_freem(void *, void *, size_t);
paddr_t pxa2x0_i2s_mappage(void *, void *, off_t, int);
int pxa2x0_i2s_round_blocksize(void *, int, int, const struct audio_params *);
size_t pxa2x0_i2s_round_buffersize(void *, int, size_t);
Index: src/sys/arch/arm/xscale/pxa2x0_mci.c
diff -u src/sys/arch/arm/xscale/pxa2x0_mci.c:1.8 src/sys/arch/arm/xscale/pxa2x0_mci.c:1.8.6.1
--- src/sys/arch/arm/xscale/pxa2x0_mci.c:1.8 Sat Feb 5 15:29:16 2011
+++ src/sys/arch/arm/xscale/pxa2x0_mci.c Sun Nov 20 13:47:07 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: pxa2x0_mci.c,v 1.8 2011/02/05 15:29:16 nonaka Exp $ */
+/* $NetBSD: pxa2x0_mci.c,v 1.8.6.1 2011/11/20 13:47:07 jmcneill Exp $ */
/* $OpenBSD: pxa2x0_mmc.c,v 1.5 2009/02/23 18:09:55 miod Exp $ */
/*
@@ -54,7 +54,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pxa2x0_mci.c,v 1.8 2011/02/05 15:29:16 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pxa2x0_mci.c,v 1.8.6.1 2011/11/20 13:47:07 jmcneill Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -253,7 +253,7 @@ pxamci_attach_sub(device_t self, struct
sc->sc_rxdr.ds_addr = PXA2X0_MMC_BASE + MMC_RXFIFO;
sc->sc_rxdr.ds_len = 1;
- sc->sc_rxdx = pxa2x0_dmac_allocate_xfer(M_NOWAIT);
+ sc->sc_rxdx = pxa2x0_dmac_allocate_xfer();
if (sc->sc_rxdx == NULL) {
aprint_error_dev(sc->sc_dev,
"couldn't alloc rx dma xfer\n");
@@ -274,7 +274,7 @@ pxamci_attach_sub(device_t self, struct
sc->sc_txdr.ds_addr = PXA2X0_MMC_BASE + MMC_TXFIFO;
sc->sc_txdr.ds_len = 1;
- sc->sc_txdx = pxa2x0_dmac_allocate_xfer(M_NOWAIT);
+ sc->sc_txdx = pxa2x0_dmac_allocate_xfer();
if (sc->sc_txdx == NULL) {
aprint_error_dev(sc->sc_dev,
"couldn't alloc tx dma xfer\n");
Index: src/sys/arch/zaurus/dev/zaudio.c
diff -u src/sys/arch/zaurus/dev/zaudio.c:1.15.4.1 src/sys/arch/zaurus/dev/zaudio.c:1.15.4.2
--- src/sys/arch/zaurus/dev/zaudio.c:1.15.4.1 Sun Nov 20 13:30:46 2011
+++ src/sys/arch/zaurus/dev/zaudio.c Sun Nov 20 13:47:07 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: zaudio.c,v 1.15.4.1 2011/11/20 13:30:46 jmcneill Exp $ */
+/* $NetBSD: zaudio.c,v 1.15.4.2 2011/11/20 13:47:07 jmcneill Exp $ */
/* $OpenBSD: zaurus_audio.c,v 1.8 2005/08/18 13:23:02 robert Exp $ */
/*
@@ -51,7 +51,7 @@
#include "opt_zaudio.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zaudio.c,v 1.15.4.1 2011/11/20 13:30:46 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zaudio.c,v 1.15.4.2 2011/11/20 13:47:07 jmcneill Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -215,8 +215,8 @@ static int zaudio_getdev(void *, struct
static int zaudio_set_port(void *, struct mixer_ctrl *);
static int zaudio_get_port(void *, struct mixer_ctrl *);
static int zaudio_query_devinfo(void *, struct mixer_devinfo *);
-static void *zaudio_allocm(void *, int, size_t, struct malloc_type *, int);
-static void zaudio_freem(void *, void *, struct malloc_type *);
+static void *zaudio_allocm(void *, int, size_t);
+static void zaudio_freem(void *, void *, size_t);
static size_t zaudio_round_buffersize(void *, int, size_t);
static paddr_t zaudio_mappage(void *, void *, off_t, int);
static int zaudio_get_props(void *);
@@ -351,6 +351,7 @@ zaudio_attach(device_t parent, device_t
sc->sc_i2s.sc_iot = &pxa2x0_bs_tag;
sc->sc_i2s.sc_dmat = &pxa2x0_bus_dma_tag;
sc->sc_i2s.sc_size = PXA2X0_I2S_SIZE;
+ sc->sc_i2s.sc_intr_lock = &sc->sc_intr_lock;
if (pxa2x0_i2s_attach_sub(&sc->sc_i2s)) {
aprint_error_dev(self, "unable to attach I2S\n");
goto fail_i2s;
@@ -894,9 +895,7 @@ zaudio_halt_output(void *hdl)
struct zaudio_softc *sc = hdl;
int rv;
- mutex_spin_enter(&sc->sc_intr_lock);
rv = pxa2x0_i2s_halt_output(&sc->sc_i2s);
- mutex_spin_exit(&sc->sc_intr_lock);
if (!sc->sc_recording)
zaudio_standby(sc);
sc->sc_playing = 0;
@@ -910,9 +909,7 @@ zaudio_halt_input(void *hdl)
struct zaudio_softc *sc = hdl;
int rv;
- mutex_spin_enter(&sc->sc_intr_lock);
rv = pxa2x0_i2s_halt_input(&sc->sc_i2s);
- mutex_spin_exit(&sc->sc_intr_lock);
if (!sc->sc_playing)
zaudio_standby(sc);
sc->sc_recording = 0;
@@ -1227,20 +1224,19 @@ mute:
}
static void *
-zaudio_allocm(void *hdl, int direction, size_t size, struct malloc_type *type,
- int flags)
+zaudio_allocm(void *hdl, int direction, size_t size)
{
struct zaudio_softc *sc = hdl;
- return pxa2x0_i2s_allocm(&sc->sc_i2s, direction, size, type, flags);
+ return pxa2x0_i2s_allocm(&sc->sc_i2s, direction, size);
}
static void
-zaudio_freem(void *hdl, void *ptr, struct malloc_type *type)
+zaudio_freem(void *hdl, void *ptr, size_t size)
{
struct zaudio_softc *sc = hdl;
- return pxa2x0_i2s_freem(&sc->sc_i2s, ptr, type);
+ return pxa2x0_i2s_freem(&sc->sc_i2s, ptr, size);
}
static size_t
@@ -1280,10 +1276,7 @@ zaudio_start_output(void *hdl, void *blo
}
/* Start DMA via I2S */
- mutex_spin_enter(&sc->sc_intr_lock);
rv = pxa2x0_i2s_start_output(&sc->sc_i2s, block, bsize, intr, intrarg);
- mutex_spin_exit(&sc->sc_intr_lock);
-
if (rv) {
if (!sc->sc_recording)
zaudio_standby(sc);
@@ -1307,10 +1300,7 @@ zaudio_start_input(void *hdl, void *bloc
}
/* Start DMA via I2S */
- mutex_spin_enter(&sc->sc_intr_lock);
rv = pxa2x0_i2s_start_input(&sc->sc_i2s, block, bsize, intr, intrarg);
- mutex_spin_exit(&sc->sc_intr_lock);
-
if (rv) {
if (!sc->sc_playing)
zaudio_standby(sc);