Module Name:    src
Committed By:   isaki
Date:           Sun Apr 21 09:54:00 UTC 2019

Modified Files:
        src/sys/arch/hpcmips/vr [isaki-audio2]: vraiu.c

Log Message:
Adapt to audio2.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.16.2.1 src/sys/arch/hpcmips/vr/vraiu.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/hpcmips/vr/vraiu.c
diff -u src/sys/arch/hpcmips/vr/vraiu.c:1.16 src/sys/arch/hpcmips/vr/vraiu.c:1.16.2.1
--- src/sys/arch/hpcmips/vr/vraiu.c:1.16	Sat Mar 16 12:09:56 2019
+++ src/sys/arch/hpcmips/vr/vraiu.c	Sun Apr 21 09:54:00 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: vraiu.c,v 1.16 2019/03/16 12:09:56 isaki Exp $	*/
+/*	$NetBSD: vraiu.c,v 1.16.2.1 2019/04/21 09:54:00 isaki Exp $	*/
 
 /*
  * Copyright (c) 2001 HAMAJIMA Katsuomi. All rights reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vraiu.c,v 1.16 2019/03/16 12:09:56 isaki Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vraiu.c,v 1.16.2.1 2019/04/21 09:54:00 isaki Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -74,12 +74,7 @@ struct vraiu_softc {
 	u_short	*sc_buf;	/* DMA buffer pointer */
 	int	sc_status;	/* status */
 	u_int	sc_rate;	/* sampling rate */
-	u_int	sc_channels;	/* # of channels used */
-	u_int	sc_encoding;	/* encoding type */
-	int	sc_precision;	/* 8 or 16 bits */
-				/* pointer to format conversion routine */
 	u_char	sc_volume;	/* volume */
-	void	(*sc_decodefunc)(struct vraiu_softc *, u_short *, void *, int);
 	void	(*sc_intr)(void *);	/* interrupt routine */
 	void	*sc_intrdata;		/* interrupt data */
 };
@@ -97,12 +92,23 @@ struct audio_device aiu_device = {
 	"aiu"
 };
 
+const struct audio_format vraiu_formats = {
+	.mode		= AUMODE_PLAY,
+	.encoding	= AUDIO_ENCODING_SLINEAR_NE,
+	.validbits	= 10,
+	.precision	= 16,
+	.channels	= 1,
+	.channel_mask	= AUFMT_MONAURAL,
+	.frequency_type	= 4,
+	.frequency	= { 8000, 11025, 22050, 44100 },
+};
+
 /*
  * Define our interface to the higher level audio driver.
  */
 int vraiu_open(void *, int);
 void vraiu_close(void *);
-int vraiu_query_encoding(void *, struct audio_encoding *);
+int vraiu_query_format(void *, audio_format_query_t *);
 int vraiu_round_blocksize(void *, int, int, const audio_params_t *);
 int vraiu_commit_settings(void *);
 int vraiu_init_output(void *, void*, int);
@@ -114,16 +120,17 @@ int vraiu_getdev(void *, struct audio_de
 int vraiu_set_port(void *, mixer_ctrl_t *);
 int vraiu_get_port(void *, mixer_ctrl_t *);
 int vraiu_query_devinfo(void *, mixer_devinfo_t *);
-int vraiu_set_params(void *, int, int, audio_params_t *, audio_params_t *,
-		     stream_filter_list_t *, stream_filter_list_t *);
+int vraiu_set_format(void *, int,
+    const audio_params_t *, const audio_params_t *,
+    audio_filter_reg_t *, audio_filter_reg_t *);
 int vraiu_get_props(void *);
 void vraiu_get_locks(void *, kmutex_t **, kmutex_t **);
 
 const struct audio_hw_if vraiu_hw_if = {
 	.open			= vraiu_open,
 	.close			= vraiu_close,
-	.query_encoding		= vraiu_query_encoding,
-	.set_params		= vraiu_set_params,
+	.query_format		= vraiu_query_format,
+	.set_format		= vraiu_set_format,
 	.round_blocksize	= vraiu_round_blocksize,
 	.commit_settings	= vraiu_commit_settings,
 	.init_output		= vraiu_init_output,
@@ -143,20 +150,7 @@ const struct audio_hw_if vraiu_hw_if = {
 /*
  * convert to 1ch 10bit unsigned PCM data.
  */
-static void vraiu_slinear8_1(struct vraiu_softc *, u_short *, void *, int);
-static void vraiu_slinear8_2(struct vraiu_softc *, u_short *, void *, int);
-static void vraiu_ulinear8_1(struct vraiu_softc *, u_short *, void *, int);
-static void vraiu_ulinear8_2(struct vraiu_softc *, u_short *, void *, int);
-static void vraiu_mulaw_1(struct vraiu_softc *, u_short *, void *, int);
-static void vraiu_mulaw_2(struct vraiu_softc *, u_short *, void *, int);
 static void vraiu_slinear16_1(struct vraiu_softc *, u_short *, void *, int);
-static void vraiu_slinear16_2(struct vraiu_softc *, u_short *, void *, int);
-static void vraiu_slinear16sw_1(struct vraiu_softc *, u_short *, void *, int);
-static void vraiu_slinear16sw_2(struct vraiu_softc *, u_short *, void *, int);
-/*
- * software volume control
- */
-static void vraiu_volume(struct vraiu_softc *, u_short *, void *, int);
 
 int
 vraiu_match(device_t parent, cfdata_t cf, void *aux)
@@ -261,10 +255,6 @@ vraiu_attach(device_t parent, device_t s
 
 	sc->sc_status = 0;
 	sc->sc_rate = SPS8000;
-	sc->sc_channels = 1;
-	sc->sc_precision = 8;
-	sc->sc_encoding = AUDIO_ENCODING_ULAW;
-	sc->sc_decodefunc = vraiu_mulaw_1;
 	DPRINTFN(1, ("vraiu_attach: reset AIU\n"))
 	bus_space_write_2(sc->sc_iot, sc->sc_ioh, SEQ_REG_W, AIURST);
 	/* attach audio subsystem */
@@ -293,89 +283,28 @@ vraiu_close(void *self)
 
 	DPRINTFN(1, ("vraiu_close\n"));
 	sc = self;
-	vraiu_halt_output(self);
 	sc->sc_status = 0;
 }
 
 int
-vraiu_query_encoding(void *self, struct audio_encoding *ae)
+vraiu_query_format(void *self, audio_format_query_t *afp)
 {
-	DPRINTFN(3, ("vraiu_query_encoding\n"));
 
-	switch (ae->index) {
-	case 0:
-		strcpy(ae->name, AudioEslinear);
-		ae->encoding = AUDIO_ENCODING_SLINEAR;
-		ae->precision = 8;
-		ae->flags = AUDIO_ENCODINGFLAG_EMULATED;
-		break;
-	case 1:
-		strcpy(ae->name, AudioEmulaw);
-		ae->encoding = AUDIO_ENCODING_ULAW;
-		ae->precision = 8;
-		ae->flags = AUDIO_ENCODINGFLAG_EMULATED;
-		break;
-	case 2:
-		strcpy(ae->name, AudioEulinear);
-		ae->encoding = AUDIO_ENCODING_ULINEAR;
-		ae->precision = 8;
-		ae->flags = AUDIO_ENCODINGFLAG_EMULATED;
-		break;
-	case 3:
-		strcpy(ae->name, AudioEslinear);
-		ae->encoding = AUDIO_ENCODING_SLINEAR;
-		ae->precision = 16;
-		ae->flags = AUDIO_ENCODINGFLAG_EMULATED;
-		break;
-	case 4:
-		strcpy(ae->name, AudioEslinear_be);
-		ae->encoding = AUDIO_ENCODING_SLINEAR_BE;
-		ae->precision = 16;
-		ae->flags = AUDIO_ENCODINGFLAG_EMULATED;
-		break;
-	case 5:
-		strcpy(ae->name, AudioEslinear_le);
-		ae->encoding = AUDIO_ENCODING_SLINEAR_LE;
-		ae->precision = 16;
-		ae->flags = AUDIO_ENCODINGFLAG_EMULATED;
-		break;
-	case 6:
-		strcpy(ae->name, AudioEslinear);
-		ae->encoding = AUDIO_ENCODING_ULINEAR;
-		ae->precision = 16;
-		ae->flags = AUDIO_ENCODINGFLAG_EMULATED;
-		break;
-	case 7:
-		strcpy(ae->name, AudioEslinear_be);
-		ae->encoding = AUDIO_ENCODING_ULINEAR_BE;
-		ae->precision = 16;
-		ae->flags = AUDIO_ENCODINGFLAG_EMULATED;
-		break;
-	case 8:
-		strcpy(ae->name, AudioEslinear_le);
-		ae->encoding = AUDIO_ENCODING_ULINEAR_LE;
-		ae->precision = 16;
-		ae->flags = AUDIO_ENCODINGFLAG_EMULATED;
-		break;
-	default:
-		DPRINTFN(0, ("vraiu_query_encoding: param error"
-			     " (%d)\n", ae->index));
-		return EINVAL;
-	}
-	return 0;
+	return audio_query_format(&vraiu_formats, 1, afp);
 }
 
 int
-vraiu_set_params(void *self, int setmode, int usemode,
-		 audio_params_t *play, audio_params_t *rec,
-		 stream_filter_list_t *pfil, stream_filter_list_t *rfil)
+vraiu_set_format(void *self, int setmode,
+		 const audio_params_t *play, const audio_params_t *rec,
+		 audio_filter_reg_t *pfil, audio_filter_reg_t *rfil)
 {
 	struct vraiu_softc *sc;
 
-	DPRINTFN(1, ("vraiu_set_params: %ubit, %uch, %uHz, encoding %u\n",
+	DPRINTFN(1, ("%s: %ubit, %uch, %uHz, encoding %u\n", __func__,
 		     play->precision, play->channels, play->sample_rate,
 		     play->encoding));
 	sc = self;
+
 	switch (play->sample_rate) {
 	case 8000:
 		sc->sc_rate = SPS8000;
@@ -390,152 +319,17 @@ vraiu_set_params(void *self, int setmode
 		sc->sc_rate = SPS44100;
 		break;
 	default:
-		DPRINTFN(0, ("vraiu_set_params: rate error (%ld)\n",
-			     play->sample_rate));
-		return EINVAL;
+		/* NOTREACHED */
+		panic("%s: rate error (%d)\n", __func__, play->sample_rate);
 	}
 
-	switch (play->precision) {
-	case 8:
-		switch (play->encoding) {
-		case AUDIO_ENCODING_ULAW:
-			switch (play->channels) {
-			case 1:
-				sc->sc_decodefunc = vraiu_mulaw_1;
-				break;
-			case 2:
-				sc->sc_decodefunc = vraiu_mulaw_2;
-				break;
-			default:
-				DPRINTFN(0, ("vraiu_set_params: channel error"
-					     " (%d)\n", play->channels));
-				return EINVAL;
-			}
-			break;
-		case AUDIO_ENCODING_SLINEAR:
-		case AUDIO_ENCODING_SLINEAR_BE:
-		case AUDIO_ENCODING_SLINEAR_LE:
-			switch (play->channels) {
-			case 1:
-				sc->sc_decodefunc = vraiu_slinear8_1;
-				break;
-			case 2:
-				sc->sc_decodefunc = vraiu_slinear8_2;
-				break;
-			default:
-				DPRINTFN(0, ("vraiu_set_params: channel error"
-					     " (%d)\n", play->channels));
-				return EINVAL;
-			}
-			break;
-		case AUDIO_ENCODING_ULINEAR:
-		case AUDIO_ENCODING_ULINEAR_BE:
-		case AUDIO_ENCODING_ULINEAR_LE:
-			switch (play->channels) {
-			case 1:
-				sc->sc_decodefunc = vraiu_ulinear8_1;
-				break;
-			case 2:
-				sc->sc_decodefunc = vraiu_ulinear8_2;
-				break;
-			default:
-				DPRINTFN(0, ("vraiu_set_params: channel error"
-					     " (%d)\n", play->channels));
-				return EINVAL;
-			}
-			break;
-		default:
-			DPRINTFN(0, ("vraiu_set_params: encoding error"
-				     " (%d)\n", play->encoding));
-			return EINVAL;
-		}
-		break;
-	case 16:
-		switch (play->encoding) {
-#if BYTE_ORDER == BIG_ENDIAN
-		case AUDIO_ENCODING_SLINEAR:
-#endif
-		case AUDIO_ENCODING_SLINEAR_BE:
-			switch (play->channels) {
-			case 1:
-#if BYTE_ORDER == BIG_ENDIAN
-				sc->sc_decodefunc = vraiu_slinear16_1;
-#else
-				sc->sc_decodefunc = vraiu_slinear16sw_1;
-#endif
-				break;
-			case 2:
-#if BYTE_ORDER == BIG_ENDIAN
-				sc->sc_decodefunc = vraiu_slinear16_2;
-#else
-				sc->sc_decodefunc = vraiu_slinear16sw_2;
-#endif
-				break;
-			default:
-				DPRINTFN(0, ("vraiu_set_params: channel error"
-					     " (%d)\n", play->channels));
-				return EINVAL;
-			}
-			break;
-#if BYTE_ORDER == LITTLE_ENDIAN
-		case AUDIO_ENCODING_SLINEAR:
-#endif
-		case AUDIO_ENCODING_SLINEAR_LE:
-			switch (play->channels) {
-			case 1:
-#if BYTE_ORDER == LITTLE_ENDIAN
-				sc->sc_decodefunc = vraiu_slinear16_1;
-#else
-				sc->sc_decodefunc = vraiu_slinear16sw_1;
-#endif
-				break;
-			case 2:
-#if BYTE_ORDER == LITTLE_ENDIAN
-				sc->sc_decodefunc = vraiu_slinear16_2;
-#else
-				sc->sc_decodefunc = vraiu_slinear16sw_2;
-#endif
-				break;
-			default:
-				DPRINTFN(0, ("vraiu_set_params: channel error"
-					     " (%d)\n", play->channels));
-				return EINVAL;
-			}
-			break;
-		default:
-			DPRINTFN(0, ("vraiu_set_params: encoding error"
-				     " (%d)\n", play->encoding));
-			return EINVAL;
-		}
-		break;
-	default:
-		DPRINTFN(0, ("vraiu_set_params: precision error (%d)\n",
-			     play->precision));
-		return EINVAL;
-	}
-
-	sc->sc_encoding = play->encoding;
-	sc->sc_precision = play->precision;
-	sc->sc_channels = play->channels;
 	return 0;
 }
 
 int
 vraiu_round_blocksize(void *self, int bs, int mode, const audio_params_t *param)
 {
-	struct vraiu_softc *sc;
-	int n;
-
-	sc = self;
-	n = AUDIO_BUF_SIZE;
-	if (sc->sc_precision == 8)
-		n /= 2;
-	n *= sc->sc_channels;
-
-	DPRINTFN(1, ("vraiu_round_blocksize: upper %d, lower %d\n",
-		     bs, n));
-
-	return n;
+	return AUDIO_BUF_SIZE;
 }
 
 int
@@ -593,8 +387,7 @@ vraiu_start_output(void *self, void *blo
 	DPRINTFN(2, ("vraiu_start_output: block %p, bsize %d\n",
 		     block, bsize));
 	sc = self;
-	sc->sc_decodefunc(sc, sc->sc_buf, block, bsize);
-	vraiu_volume(sc, sc->sc_buf, block, bsize);
+	vraiu_slinear16_1(sc, sc->sc_buf, block, bsize);
 	bus_dmamap_sync(sc->sc_dmat, sc->sc_dmap, 0, AUDIO_BUF_SIZE,
 			BUS_DMASYNC_PREWRITE);
 	sc->sc_intr = intr;
@@ -774,167 +567,7 @@ vraiu_get_locks(void *self, kmutex_t **i
 	*thread = &sc->sc_lock;
 }
 
-unsigned char mulaw_to_lin[] = {
-	0x02, 0x06, 0x0a, 0x0e, 0x12, 0x16, 0x1a, 0x1e,
-	0x22, 0x26, 0x2a, 0x2e, 0x32, 0x36, 0x3a, 0x3e,
-	0x41, 0x43, 0x45, 0x47, 0x49, 0x4b, 0x4d, 0x4f,
-	0x51, 0x53, 0x55, 0x57, 0x59, 0x5b, 0x5d, 0x5f,
-	0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
-	0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
-	0x70, 0x71, 0x71, 0x72, 0x72, 0x73, 0x73, 0x74,
-	0x74, 0x75, 0x75, 0x76, 0x76, 0x77, 0x77, 0x78,
-	0x78, 0x78, 0x79, 0x79, 0x79, 0x79, 0x7a, 0x7a,
-	0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c,
-	0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d,
-	0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e,
-	0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e,
-	0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-	0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-	0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80,
-	0xfd, 0xf9, 0xf5, 0xf1, 0xed, 0xe9, 0xe5, 0xe1,
-	0xdd, 0xd9, 0xd5, 0xd1, 0xcd, 0xc9, 0xc5, 0xc1,
-	0xbe, 0xbc, 0xba, 0xb8, 0xb6, 0xb4, 0xb2, 0xb0,
-	0xae, 0xac, 0xaa, 0xa8, 0xa6, 0xa4, 0xa2, 0xa0,
-	0x9e, 0x9d, 0x9c, 0x9b, 0x9a, 0x99, 0x98, 0x97,
-	0x96, 0x95, 0x94, 0x93, 0x92, 0x91, 0x90, 0x8f,
-	0x8f, 0x8e, 0x8e, 0x8d, 0x8d, 0x8c, 0x8c, 0x8b,
-	0x8b, 0x8a, 0x8a, 0x89, 0x89, 0x88, 0x88, 0x87,
-	0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85,
-	0x85, 0x85, 0x84, 0x84, 0x84, 0x84, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-};
-
-static void
-vraiu_slinear8_1(struct vraiu_softc *sc, u_short *dmap, void *p, int n)
-{
-	char *q;
-
-	DPRINTFN(3, ("vraiu_slinear8_1\n"));
-	q = p;
-#ifdef DIAGNOSTIC
-	if (n > AUDIO_BUF_SIZE/2) {
-		printf("%s: output data too large (%d > %d)\n",
-		       device_xname(sc->sc_dev), n, AUDIO_BUF_SIZE/2);
-		n = AUDIO_BUF_SIZE/2;
-	}
-#endif
-	while (n--) {
-		short i = *q++;
-		*dmap++ = (i << 2) + 0x200;
-	}
-}
-
-static void
-vraiu_slinear8_2(struct vraiu_softc *sc, u_short *dmap, void *p, int n)
-{
-	char *q;
-
-	DPRINTFN(3, ("vraiu_slinear8_2\n"));
-	q = p;
-#ifdef DIAGNOSTIC
-	if (n > AUDIO_BUF_SIZE) {
-		printf("%s: output data too large (%d > %d)\n",
-		       device_xname(sc->sc_dev), n, AUDIO_BUF_SIZE);
-		n = AUDIO_BUF_SIZE;
-	}
-#endif
-	n /= 2;
-	while (n--) {
-		short i = *q++;
-		short j = *q++;
-		*dmap++ = ((i + j) << 1) + 0x200;
-	}
-}
-
-static void
-vraiu_ulinear8_1(struct vraiu_softc *sc, u_short *dmap, void *p, int n)
-{
-	u_char *q;
-
-	DPRINTFN(3, ("vraiu_ulinear8_1\n"));
-	q = p;
-#ifdef DIAGNOSTIC
-	if (n > AUDIO_BUF_SIZE/2) {
-		printf("%s: output data too large (%d > %d)\n",
-		       device_xname(sc->sc_dev), n, AUDIO_BUF_SIZE/2);
-		n = AUDIO_BUF_SIZE/2;
-	}
-#endif
-	while (n--) {
-		short i = *q++;
-		*dmap++ = i << 2;
-	}
-}
-
-static void
-vraiu_ulinear8_2(struct vraiu_softc *sc, u_short *dmap, void *p, int n)
-{
-	u_char *q;
-
-	DPRINTFN(3, ("vraiu_ulinear8_2\n"));
-	q = p;
-#ifdef DIAGNOSTIC
-	if (n > AUDIO_BUF_SIZE) {
-		printf("%s: output data too large (%d > %d)\n",
-		       device_xname(sc->sc_dev), n, AUDIO_BUF_SIZE);
-		n = AUDIO_BUF_SIZE;
-	}
-#endif
-	n /= 2;
-	while (n--) {
-		short i = *q++;
-		short j = *q++;
-		*dmap++ = (i + j) << 1;
-	}
-}
-
-static void
-vraiu_mulaw_1(struct vraiu_softc *sc, u_short *dmap, void *p, int n)
-{
-	u_char *q;
-
-	DPRINTFN(3, ("vraiu_mulaw_1\n"));
-	q = p;
-#ifdef DIAGNOSTIC
-	if (n > AUDIO_BUF_SIZE/2) {
-		printf("%s: output data too large (%d > %d)\n",
-		       device_xname(sc->sc_dev), n, AUDIO_BUF_SIZE/2);
-		n = AUDIO_BUF_SIZE/2;
-	}
-#endif
-	while (n--) {
-		short i = mulaw_to_lin[*q++];
-		*dmap++ = i << 2;
-	}
-}
-
-static void
-vraiu_mulaw_2(struct vraiu_softc *sc, u_short *dmap, void *p, int n)
-{
-	u_char *q;
-
-	DPRINTFN(3, ("vraiu_mulaw_2\n"));
-	q = p;
-#ifdef DIAGNOSTIC
-	if (n > AUDIO_BUF_SIZE) {
-		printf("%s: output data too large (%d > %d)\n",
-		       device_xname(sc->sc_dev), n, AUDIO_BUF_SIZE);
-		n = AUDIO_BUF_SIZE;
-	}
-#endif
-	n /= 2;
-	while (n--) {
-		short i = mulaw_to_lin[*q++];
-		short j = mulaw_to_lin[*q++];
-		*dmap++ = (i + j) << 1;
-	}
-}
-
+/* slinear16/mono -> ulinear10/mono with volume */
 static void
 vraiu_slinear16_1(struct vraiu_softc *sc, u_short *dmap, void *p, int n)
 {
@@ -951,90 +584,8 @@ vraiu_slinear16_1(struct vraiu_softc *sc
 #endif
 	n /= 2;
 	while (n--) {
-		short i = *q++;
-		*dmap++ = (i >> 6) + 0x200;
-	}
-}
-
-static void
-vraiu_slinear16_2(struct vraiu_softc *sc, u_short *dmap, void *p, int n)
-{
-	short *q;
-
-	DPRINTFN(3, ("vraiu_slinear16_2\n"));
-	q = p;
-#ifdef DIAGNOSTIC
-	if (n > AUDIO_BUF_SIZE*2) {
-		printf("%s: output data too large (%d > %d)\n",
-		       device_xname(sc->sc_dev), n, AUDIO_BUF_SIZE*2);
-		n = AUDIO_BUF_SIZE*2;
-	}
-#endif
-	n /= 4;
-	while (n--) {
-		short i = *q++;
-		short j = *q++;
-		*dmap++ = (i >> 7) + (j >> 7) + 0x200;
-	}
-}
-
-static void
-vraiu_slinear16sw_1(struct vraiu_softc *sc, u_short *dmap, void *p, int n)
-{
-	short *q;
-
-	DPRINTFN(3, ("vraiu_slinear16sw_1\n"));
-	q = p;
-#ifdef DIAGNOSTIC
-	if (n > AUDIO_BUF_SIZE) {
-		printf("%s: output data too large (%d > %d)\n",
-		       device_xname(sc->sc_dev), n, AUDIO_BUF_SIZE);
-		n = AUDIO_BUF_SIZE;
-	}
-#endif
-	n /= 2;
-	while (n--) {
-		short i = bswap16(*q++);
+		int i = *q++;
+		i = i * sc->sc_volume / 255;
 		*dmap++ = (i >> 6) + 0x200;
 	}
 }
-
-static void
-vraiu_slinear16sw_2(struct vraiu_softc *sc, u_short *dmap, void *p, int n)
-{
-	short *q;
-
-	DPRINTFN(3, ("vraiu_slinear16sw_2\n"));
-	q = p;
-#ifdef DIAGNOSTIC
-	if (n > AUDIO_BUF_SIZE*2) {
-		printf("%s: output data too large (%d > %d)\n",
-		       device_xname(sc->sc_dev), n, AUDIO_BUF_SIZE*2);
-		n = AUDIO_BUF_SIZE*2;
-	}
-#endif
-	n /= 4;
-	while (n--) {
-		short i = bswap16(*q++);
-		short j = bswap16(*q++);
-		*dmap++ = (i >> 7) + (j >> 7) + 0x200;
-	}
-}
-
-static void
-vraiu_volume(struct vraiu_softc *sc, u_short *dmap, void *p, int n)
-{
-	int16_t *x;
-	int i;
-	short j;
-	int vol;
-
-	x = (int16_t *)dmap;
-	vol = sc->sc_volume;
-	for (i = 0; i < n / 2; i++) {
-		j = x[i] - 512;
-		x[i] = ((j * vol) / 255) + 512;
-	}
-
-	return;
-}

Reply via email to