Module Name: src
Committed By: martin
Date: Mon Apr 16 14:11:44 UTC 2018
Modified Files:
src/sys/dev [netbsd-8]: auconv.c audio.c audiovar.h aurateconv.c
Log Message:
Pull up following revision(s) (requested by nat in ticket #759):
sys/dev/audio.c: revision 1.367
sys/dev/audio.c: revision 1.369
sys/dev/audio.c: revision 1.376 (patch)
sys/dev/audio.c: revision 1.377 (patch)
sys/dev/audio.c: revision 1.378
sys/dev/audio.c: revision 1.382 (patch)
sys/dev/audio.c: revision 1.383 (patch)
sys/dev/audio.c: revision 1.384
sys/dev/audio.c: revision 1.388
sys/dev/audio.c: revision 1.389
sys/dev/audio.c: revision 1.395
sys/dev/audio.c: revision 1.396 (patch)
sys/dev/audio.c: revision 1.397
sys/dev/audio.c: revision 1.403
sys/dev/audio.c: revision 1.451
sys/dev/audio.c: revision 1.452
sys/dev/audiovar.h: revision 1.59 (patch)
sys/dev/aurateconv.c: revision 1.21 (patch)
sys/dev/auconv.c: revision 1.31 (patch)
sys/dev/audiovar.h: revision 1.60 (patch)
Broadcast all conditional variables if in being deactivated so no readers
or writers get stuck.
Fix a panic caused by opening pad(4)'s mixer before the corresponding
audio device has attached.
Addresses PR kern/52424.
Improve audio_set_vchan_defaults().
- Correct confused input/output parameters.
- Remove sc->{sc_channels, sc_precision, sc_frequency}. They are
the same as sc->sc_vchan_params.{channels, precision, sample_rate}.
The input parameter of audio_set_vchan_defaults() is now only
sc->sc_vchan_params.
Fix PR kern/52437
const-ify.
0 -> NULL in audioattach()
"bits" sounds better than "name" for argument name.
I feel expression (name / NBBY) a little strange.
The audio module will now compile with WARNS=5.
Typo in debug message.
Remove a duplicated line.
Add missing initialization of sc_rfilters in audioattach().
Remove dead codes.
sc->sc_opens never changes in this loop and as a result of
previous sc_audiochan cleanup "sc_opens == 0" is the same as
"sc_audiochan is empty".
Clean up audio_allocbufs().
As a result of sc_audiochan cleanup, it is easy to access sc_hwvc.
Clean up audio_open().
As a result of sc_audiochan cleanup, this loop is the same as last + 1.
hw_if->set_params is mandatory, so it will never be NULL.
CID-1427745: kill possible buffer overflows.
Revert my wrong r1.380 and add a comment instead.
To generate a diff of this commit:
cvs rdiff -u -r1.26.2.4 -r1.26.2.5 src/sys/dev/auconv.c
cvs rdiff -u -r1.357.2.10 -r1.357.2.11 src/sys/dev/audio.c
cvs rdiff -u -r1.55.2.5 -r1.55.2.6 src/sys/dev/audiovar.h
cvs rdiff -u -r1.19.42.1 -r1.19.42.2 src/sys/dev/aurateconv.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/dev/auconv.c
diff -u src/sys/dev/auconv.c:1.26.2.4 src/sys/dev/auconv.c:1.26.2.5
--- src/sys/dev/auconv.c:1.26.2.4 Tue Jan 9 19:35:03 2018
+++ src/sys/dev/auconv.c Mon Apr 16 14:11:44 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: auconv.c,v 1.26.2.4 2018/01/09 19:35:03 snj Exp $ */
+/* $NetBSD: auconv.c,v 1.26.2.5 2018/04/16 14:11:44 martin Exp $ */
/*
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: auconv.c,v 1.26.2.4 2018/01/09 19:35:03 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: auconv.c,v 1.26.2.5 2018/04/16 14:11:44 martin Exp $");
#include <sys/types.h>
#include <sys/audioio.h>
@@ -2115,7 +2115,7 @@ auconv_rateconv_check_rates(const struct
if (formats[i].frequency[1] > maxrate)
maxrate = formats[i].frequency[1];
} else {
- for (j = 0; j < formats[i].frequency_type; j++) {
+ for (j = 0; j < (int)formats[i].frequency_type; j++) {
if (formats[i].frequency[j] < minrate)
minrate = formats[i].frequency[j];
if (formats[i].frequency[j] > maxrate)
Index: src/sys/dev/audio.c
diff -u src/sys/dev/audio.c:1.357.2.10 src/sys/dev/audio.c:1.357.2.11
--- src/sys/dev/audio.c:1.357.2.10 Mon Jan 15 00:08:55 2018
+++ src/sys/dev/audio.c Mon Apr 16 14:11:44 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: audio.c,v 1.357.2.10 2018/01/15 00:08:55 snj Exp $ */
+/* $NetBSD: audio.c,v 1.357.2.11 2018/04/16 14:11:44 martin Exp $ */
/*-
* Copyright (c) 2016 Nathanial Sloss <[email protected]>
@@ -148,7 +148,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.357.2.10 2018/01/15 00:08:55 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.357.2.11 2018/04/16 14:11:44 martin Exp $");
#ifdef _KERNEL_OPT
#include "audio.h"
@@ -209,7 +209,7 @@ int audiodebug = AUDIO_DEBUG;
#define PREFILL_BLOCKS 3 /* no. audioblocks required to start stream */
#define ROUNDSIZE(x) (x) &= -16 /* round to nice boundary */
-#define SPECIFIED(x) ((x) != ~0)
+#define SPECIFIED(x) ((int)(x) != ~0)
#define SPECIFIED_CH(x) ((x) != (u_char)~0)
/* #define AUDIO_PM_IDLE */
@@ -282,10 +282,10 @@ static void audio_calc_latency(struct au
static void audio_setblksize(struct audio_softc *,
struct virtual_channel *, int, int);
int audio_calc_blksize(struct audio_softc *, const audio_params_t *);
-void audio_fill_silence(struct audio_params *, uint8_t *, int);
+void audio_fill_silence(const struct audio_params *, uint8_t *, int);
int audio_silence_copyout(struct audio_softc *, int, struct uio *);
-static int audio_allocbufs(struct audio_softc *, struct virtual_channel *);
+static int audio_allocbufs(struct audio_softc *);
void audio_init_ringbuffer(struct audio_softc *,
struct audio_ringbuffer *, int);
int audio_initbufs(struct audio_softc *, struct virtual_channel *);
@@ -396,7 +396,7 @@ static int
static int audio_set_params (struct audio_softc *, int, int,
audio_params_t *, audio_params_t *,
stream_filter_list_t *, stream_filter_list_t *,
- struct virtual_channel *);
+ const struct virtual_channel *);
static int
audio_query_encoding(struct audio_softc *, struct audio_encoding *);
static int audio_set_vchan_defaults(struct audio_softc *, u_int);
@@ -527,8 +527,9 @@ audioattach(device_t parent, device_t se
vc->sc_open = 0;
vc->sc_mode = 0;
vc->sc_npfilters = 0;
- memset(vc->sc_pfilters, 0,
- sizeof(vc->sc_pfilters));
+ vc->sc_nrfilters = 0;
+ memset(vc->sc_pfilters, 0, sizeof(vc->sc_pfilters));
+ memset(vc->sc_rfilters, 0, sizeof(vc->sc_rfilters));
vc->sc_lastinfovalid = false;
vc->sc_swvol = 255;
vc->sc_recswvol = 255;
@@ -545,7 +546,7 @@ audioattach(device_t parent, device_t se
cv_init(&sc->sc_condvar,"play");
cv_init(&sc->sc_rcondvar,"record");
- if (hwp == 0 || hwp->get_locks == 0) {
+ if (hwp == NULL || hwp->get_locks == NULL) {
aprint_error(": missing method\n");
panic("audioattach");
}
@@ -553,17 +554,17 @@ audioattach(device_t parent, device_t se
hwp->get_locks(hdlp, &sc->sc_intr_lock, &sc->sc_lock);
#ifdef DIAGNOSTIC
- if (hwp->query_encoding == 0 ||
- hwp->set_params == 0 ||
- (hwp->start_output == 0 && hwp->trigger_output == 0) ||
- (hwp->start_input == 0 && hwp->trigger_input == 0) ||
- hwp->halt_output == 0 ||
- hwp->halt_input == 0 ||
- hwp->getdev == 0 ||
- hwp->set_port == 0 ||
- hwp->get_port == 0 ||
- hwp->query_devinfo == 0 ||
- hwp->get_props == 0) {
+ if (hwp->query_encoding == NULL ||
+ hwp->set_params == NULL ||
+ (hwp->start_output == NULL && hwp->trigger_output == NULL) ||
+ (hwp->start_input == NULL && hwp->trigger_input == NULL) ||
+ hwp->halt_output == NULL ||
+ hwp->halt_input == NULL ||
+ hwp->getdev == NULL ||
+ hwp->set_port == NULL ||
+ hwp->get_port == NULL ||
+ hwp->query_devinfo == NULL ||
+ hwp->get_props == NULL) {
aprint_error(": missing method\n");
return;
}
@@ -595,7 +596,7 @@ audioattach(device_t parent, device_t se
aprint_normal("\n");
mutex_enter(sc->sc_lock);
- if (audio_allocbufs(sc, vc) != 0) {
+ if (audio_allocbufs(sc) != 0) {
aprint_error_dev(sc->sc_dev,
"could not allocate ring buffer\n");
mutex_exit(sc->sc_lock);
@@ -869,6 +870,10 @@ audioactivate(device_t self, enum devact
sc->sc_dying = true;
mutex_enter(sc->sc_intr_lock);
cv_broadcast(&sc->sc_condvar);
+ cv_broadcast(&sc->sc_rcondvar);
+ cv_broadcast(&sc->sc_wchan);
+ cv_broadcast(&sc->sc_rchan);
+ cv_broadcast(&sc->sc_lchan);
mutex_exit(sc->sc_intr_lock);
mutex_exit(sc->sc_lock);
return 0;
@@ -1125,10 +1130,13 @@ audio_print_params(const char *s, struct
/* Allocate all ring buffers. called from audioattach() */
static int
-audio_allocbufs(struct audio_softc *sc, struct virtual_channel *vc)
+audio_allocbufs(struct audio_softc *sc)
{
+ struct virtual_channel *vc;
int error;
+ vc = sc->sc_hwvc;
+
sc->sc_mixring.sc_mpr.s.start = NULL;
vc->sc_mpr.s.start = NULL;
sc->sc_mixring.sc_mrr.s.start = NULL;
@@ -1224,7 +1232,7 @@ audio_alloc_ring(struct audio_softc *sc,
false, 0);
if (error) {
uvm_unmap(kernel_map, vstart, vstart + vsize);
- uao_detach(r->uobj);
+ /* uvm_unmap also detach uobj */
r->uobj = NULL; /* paranoia */
return error;
}
@@ -1420,7 +1428,7 @@ audio_setup_rfilters(struct audio_softc
#ifdef AUDIO_DEBUG
if (audiodebug) {
- printf("%s: HW-buffer=%p pustream=%p\n",
+ printf("%s: HW-buffer=%p rustream=%p\n",
__func__, &vc->sc_mrr.s, vc->sc_rustream);
audio_print_params("[HW]", &vc->sc_mrr.s.param);
for (i = 0; i < rfilters->req_size; i++) {
@@ -1834,7 +1842,6 @@ audioioctl(struct file *fp, u_long cmd,
if ((error = audio_enter(dev, rw, &sc)) != 0)
return error;
- chan = fp->f_audioctx;
switch (AUDIODEV(dev)) {
case SOUND_DEVICE:
@@ -2005,7 +2012,7 @@ audio_init_ringbuffer(struct audio_softc
blksize = rp->blksize;
if (blksize < AUMINBLK)
blksize = AUMINBLK;
- if (blksize > rp->s.bufsize / AUMINNOBLK)
+ if (blksize > (int)(rp->s.bufsize / AUMINNOBLK))
blksize = rp->s.bufsize / AUMINNOBLK;
ROUNDSIZE(blksize);
DPRINTF(("audio_init_ringbuffer: MI blksize=%d\n", blksize));
@@ -2154,12 +2161,11 @@ audio_open(dev_t dev, struct audio_softc
hw = sc->hw_if;
if (hw == NULL)
return ENXIO;
+
n = 1;
- SIMPLEQ_FOREACH(chan, &sc->sc_audiochan, entries) {
+ chan = SIMPLEQ_LAST(&sc->sc_audiochan, audio_chan, entries);
+ if (chan != NULL)
n = chan->chan + 1;
- }
- if (n < 0)
- return ENOMEM;
chan = kmem_zalloc(sizeof(struct audio_chan), KM_SLEEP);
if (sc->sc_usemixer)
@@ -2377,8 +2383,8 @@ int
audio_drain(struct audio_softc *sc, struct virtual_channel *vc)
{
struct audio_ringbuffer *cb;
- int error, drops;
- int cc, i, used;
+ int error, cc, i, used;
+ uint drops;
bool hw = false;
KASSERT(mutex_owned(sc->sc_lock));
@@ -2569,7 +2575,8 @@ audio_read(struct audio_softc *sc, struc
struct audio_ringbuffer *cb;
const uint8_t *outp;
uint8_t *inp;
- int error, used, cc, n;
+ int error, used, n;
+ uint cc;
KASSERT(mutex_owned(sc->sc_lock));
@@ -2750,7 +2757,7 @@ audio_calc_blksize(struct audio_softc *s
}
void
-audio_fill_silence(struct audio_params *params, uint8_t *p, int n)
+audio_fill_silence(const struct audio_params *params, uint8_t *p, int n)
{
uint8_t auzero0, auzero1;
int nfill;
@@ -3498,7 +3505,7 @@ audio_mmap(struct audio_softc *sc, off_t
cb = &vc->sc_mpr;
#endif
- if (len > cb->s.bufsize || *offp > cb->s.bufsize - len)
+ if (len > cb->s.bufsize || *offp > (uint)(cb->s.bufsize - len))
return EOVERFLOW;
if (!cb->mmapped) {
@@ -3735,9 +3742,6 @@ audio_mix(void *v)
blksize = sc->sc_mixring.sc_mpr.blksize;
SIMPLEQ_FOREACH(chan, &sc->sc_audiochan, entries) {
- if (!sc->sc_opens)
- break; /* ignore interrupt if not open */
-
vc = chan->vc;
if (!vc->sc_open)
@@ -3953,9 +3957,6 @@ audio_upmix(void *v)
blksize = sc->sc_mixring.sc_mrr.blksize;
SIMPLEQ_FOREACH(chan, &sc->sc_audiochan, entries) {
- if (!sc->sc_opens)
- break; /* ignore interrupt if not open */
-
vc = chan->vc;
if (!(vc->sc_open & AUOPEN_READ))
@@ -4172,12 +4173,12 @@ audio_set_vchan_defaults(struct audio_so
ai.play.pause = false;
ai.mode = mode;
- sc->sc_format->encoding = sc->sc_vchan_params.encoding;
- sc->sc_format->channels = sc->sc_vchan_params.channels;
- sc->sc_format->precision = sc->sc_vchan_params.precision;
- sc->sc_format->validbits = sc->sc_vchan_params.precision;
- sc->sc_format->frequency_type = 1;
- sc->sc_format->frequency[0] = sc->sc_vchan_params.sample_rate;
+ sc->sc_format[0].encoding = sc->sc_vchan_params.encoding;
+ sc->sc_format[0].channels = sc->sc_vchan_params.channels;
+ sc->sc_format[0].precision = sc->sc_vchan_params.precision;
+ sc->sc_format[0].validbits = sc->sc_vchan_params.precision;
+ sc->sc_format[0].frequency_type = 1;
+ sc->sc_format[0].frequency[0] = sc->sc_vchan_params.sample_rate;
auconv_delete_encodings(sc->sc_encodings);
error = auconv_create_encodings(sc->sc_format, VAUDIO_NFORMATS,
@@ -4523,7 +4524,7 @@ audiosetinfo(struct audio_softc *sc, str
int setmode;
int error;
int np, nr;
- unsigned int blks;
+ int blks;
u_int gain;
bool rbus, pbus;
bool cleared, modechange, pausechange;
@@ -5577,9 +5578,9 @@ mix_write(void *arg)
return error;
}
-#define DEF_MIX_FUNC(name, type, bigger_type, MINVAL, MAXVAL) \
+#define DEF_MIX_FUNC(bits, type, bigger_type, MINVAL, MAXVAL) \
static void \
- mix_func##name(struct audio_softc *sc, struct audio_ringbuffer *cb, \
+ mix_func##bits(struct audio_softc *sc, struct audio_ringbuffer *cb, \
struct virtual_channel *vc) \
{ \
int blksize, cc, cc1, cc2, m, resid; \
@@ -5603,7 +5604,7 @@ mix_write(void *arg)
if (cc > cc2) \
cc = cc2; \
\
- for (m = 0; m < (cc / (name / NBBY)); m++) { \
+ for (m = 0; m < (cc / (bits / NBBY)); m++) { \
if (vc->sc_swvol == 255) \
goto vol_done; \
tomix[m] = (bigger_type)tomix[m] * \
@@ -5656,9 +5657,9 @@ mix_func(struct audio_softc *sc, struct
}
}
-#define DEF_RECSWVOL_FUNC(name, type, bigger_type) \
+#define DEF_RECSWVOL_FUNC(bits, type, bigger_type) \
static void \
- recswvol_func##name(struct audio_softc *sc, \
+ recswvol_func##bits(struct audio_softc *sc, \
struct audio_ringbuffer *cb, size_t blksize, \
struct virtual_channel *vc) \
{ \
@@ -5674,7 +5675,7 @@ mix_func(struct audio_softc *sc, struct
if (cc > cc1) \
cc = cc1; \
\
- for (m = 0; m < (cc / (name / 8)); m++) { \
+ for (m = 0; m < (cc / (bits / 8)); m++) { \
orig[m] = (bigger_type)(orig[m] * \
(bigger_type)(vc->sc_recswvol) / 256);\
} \
@@ -5765,45 +5766,52 @@ audio_get_port(struct audio_softc *sc, m
}
+static void
+unitscopy(mixer_devinfo_t *di, const char *name)
+{
+ strlcpy(di->un.v.units.name, name, sizeof(di->un.v.units.name));
+}
+
static int
audio_query_devinfo(struct audio_softc *sc, mixer_devinfo_t *di)
{
- char mixLabel[255];
-
KASSERT(mutex_owned(sc->sc_lock));
+ if (sc->sc_static_nmixer_states == 0 || sc->sc_nmixer_states == 0)
+ goto hardware;
+
if (di->index >= sc->sc_static_nmixer_states - 1 &&
di->index < sc->sc_nmixer_states) {
if (di->index == sc->sc_static_nmixer_states - 1) {
di->mixer_class = sc->sc_static_nmixer_states -1;
di->next = di->prev = AUDIO_MIXER_LAST;
- strcpy(di->label.name, AudioCvirtchan);
+ strlcpy(di->label.name, AudioCvirtchan,
+ sizeof(di->label.name));
di->type = AUDIO_MIXER_CLASS;
} else if ((di->index - sc->sc_static_nmixer_states) % 2 == 0) {
di->mixer_class = sc->sc_static_nmixer_states -1;
- snprintf(mixLabel, sizeof(mixLabel), AudioNdac"%d",
+ snprintf(di->label.name, sizeof(di->label.name),
+ AudioNdac"%d",
(di->index - sc->sc_static_nmixer_states) / 2);
- strcpy(di->label.name, mixLabel);
di->type = AUDIO_MIXER_VALUE;
di->next = di->prev = AUDIO_MIXER_LAST;
di->un.v.num_channels = 1;
- strcpy(di->un.v.units.name, AudioNvolume);
+ unitscopy(di, AudioNvolume);
} else {
di->mixer_class = sc->sc_static_nmixer_states -1;
- snprintf(mixLabel, sizeof(mixLabel),
+ snprintf(di->label.name, sizeof(di->label.name),
AudioNmicrophone "%d",
(di->index - sc->sc_static_nmixer_states) / 2);
- strcpy(di->label.name, mixLabel);
di->type = AUDIO_MIXER_VALUE;
di->next = di->prev = AUDIO_MIXER_LAST;
di->un.v.num_channels = 1;
- strcpy(di->un.v.units.name, AudioNvolume);
+ unitscopy(di, AudioNvolume);
}
return 0;
}
-
+hardware:
return sc->hw_if->query_devinfo(sc->hw_hdl, di);
}
@@ -5811,13 +5819,13 @@ static int
audio_set_params(struct audio_softc *sc, int setmode, int usemode,
audio_params_t *play, audio_params_t *rec,
stream_filter_list_t *pfil, stream_filter_list_t *rfil,
- struct virtual_channel *vc)
+ const struct virtual_channel *vc)
{
int error = 0;
KASSERT(mutex_owned(sc->sc_lock));
- if (vc == sc->sc_hwvc && sc->hw_if->set_params != NULL) {
+ if (vc == sc->sc_hwvc) {
sc->sc_ready = true;
if (sc->sc_usemixer && sc->sc_vchan_params.precision == 8)
play->encoding = rec->encoding = AUDIO_ENCODING_SLINEAR;
@@ -6148,7 +6156,8 @@ static int
vchan_autoconfig(struct audio_softc *sc)
{
struct virtual_channel *vc;
- int error, i, j, k;
+ uint i, j, k;
+ int error;
vc = sc->sc_hwvc;
error = 0;
@@ -6161,25 +6170,25 @@ vchan_autoconfig(struct audio_softc *sc)
sc->sc_vchan_params.encoding = AUDIO_ENCODING_SLINEAR_BE;
#endif
- for (i = 0; i < __arraycount(auto_config_precision); i++) {
+ for (i = 0; i < __arraycount(auto_config_precision); i++) {
sc->sc_vchan_params.precision = auto_config_precision[i];
sc->sc_vchan_params.validbits = auto_config_precision[i];
- for (j = 0; j < __arraycount(auto_config_channels); j++) {
+ for (j = 0; j < __arraycount(auto_config_channels); j++) {
sc->sc_vchan_params.channels = auto_config_channels[j];
- for (k = 0; k < __arraycount(auto_config_freq); k++) {
+ for (k = 0; k < __arraycount(auto_config_freq); k++) {
sc->sc_vchan_params.sample_rate =
auto_config_freq[k];
- error = audio_set_vchan_defaults(sc,
- AUMODE_PLAY | AUMODE_PLAY_ALL |
+ error = audio_set_vchan_defaults(sc,
+ AUMODE_PLAY | AUMODE_PLAY_ALL |
AUMODE_RECORD);
- if (vc->sc_npfilters > 0 &&
+ if (vc->sc_npfilters > 0 &&
(vc->sc_mpr.s.param.sample_rate !=
sc->sc_vchan_params.sample_rate ||
vc->sc_mpr.s.param.channels !=
sc->sc_vchan_params.channels))
- error = EINVAL;
-
- if (error == 0) {
+ error = EINVAL;
+
+ if (error == 0) {
aprint_normal_dev(sc->sc_dev,
"Virtual format configured - "
"Format SLINEAR, precision %d, "
Index: src/sys/dev/audiovar.h
diff -u src/sys/dev/audiovar.h:1.55.2.5 src/sys/dev/audiovar.h:1.55.2.6
--- src/sys/dev/audiovar.h:1.55.2.5 Mon Jan 15 00:08:55 2018
+++ src/sys/dev/audiovar.h Mon Apr 16 14:11:44 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: audiovar.h,v 1.55.2.5 2018/01/15 00:08:55 snj Exp $ */
+/* $NetBSD: audiovar.h,v 1.55.2.6 2018/04/16 14:11:44 martin Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -162,8 +162,8 @@ struct au_mixer_ports {
bool isenum; /* selector is enum type */
u_int allports; /* all aumasks or'd */
u_int aumask[AUDIO_N_PORTS]; /* exposed value of "ports" */
- u_int misel [AUDIO_N_PORTS]; /* ord of port, for selector */
- u_int miport[AUDIO_N_PORTS]; /* index of port's mixerctl */
+ int misel [AUDIO_N_PORTS]; /* ord of port, for selector */
+ int miport[AUDIO_N_PORTS]; /* index of port's mixerctl */
bool isdual; /* has working mixerout */
int mixerout; /* ord of mixerout, for dual case */
int cur_port; /* the port that gain actually controls when
Index: src/sys/dev/aurateconv.c
diff -u src/sys/dev/aurateconv.c:1.19.42.1 src/sys/dev/aurateconv.c:1.19.42.2
--- src/sys/dev/aurateconv.c:1.19.42.1 Fri Jun 30 06:34:20 2017
+++ src/sys/dev/aurateconv.c Mon Apr 16 14:11:44 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: aurateconv.c,v 1.19.42.1 2017/06/30 06:34:20 snj Exp $ */
+/* $NetBSD: aurateconv.c,v 1.19.42.2 2018/04/16 14:11:44 martin Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: aurateconv.c,v 1.19.42.1 2017/06/30 06:34:20 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: aurateconv.c,v 1.19.42.2 2018/04/16 14:11:44 martin Exp $");
#include <sys/systm.h>
#include <sys/types.h>
@@ -293,7 +293,7 @@ aurateconv_fetch_to(struct audio_softc *
#define READ_Sn(BITS, EN, V, STREAM, RP, PAR) \
do { \
int j; \
- for (j = 0; j < (PAR)->channels; j++) { \
+ for (j = 0; j < (int)(PAR)->channels; j++) { \
(V)[j] = READ_S##BITS##EN(RP); \
RP = audio_stream_add_outp(STREAM, RP, (BITS) / NBBY); \
} \
@@ -305,7 +305,7 @@ aurateconv_fetch_to(struct audio_softc *
WP = audio_stream_add_inp(STREAM, WP, (BITS) / NBBY); \
} else if (from->channels <= to->channels) { \
int j; \
- for (j = 0; j < (FROM)->channels; j++) { \
+ for (j = 0; j < (int)(FROM)->channels; j++) { \
WRITE_S##BITS##EN(WP, (V)[j]); \
WP = audio_stream_add_inp(STREAM, WP, (BITS) / NBBY); \
} \
@@ -314,13 +314,13 @@ aurateconv_fetch_to(struct audio_softc *
WP = audio_stream_add_inp(STREAM, WP, (BITS) / NBBY); \
j++; \
} \
- for (; j < (TO)->channels; j++) { \
+ for (; j < (int)(TO)->channels; j++) { \
WRITE_S##BITS##EN(WP, 0); \
WP = audio_stream_add_inp(STREAM, WP, (BITS) / NBBY); \
} \
} else { /* from->channels < to->channels */ \
int j; \
- for (j = 0; j < (TO)->channels; j++) { \
+ for (j = 0; j < (int)(TO)->channels; j++) { \
WRITE_S##BITS##EN(WP, (V)[j]); \
WP = audio_stream_add_inp(STREAM, WP, (BITS) / NBBY); \
} \
@@ -381,7 +381,7 @@ aurateconv_slinear##BITS##_##EN (auratec
READ_Sn(BITS, EN, next, src, r, from); \
} \
c256 = this->count * 256 / to->sample_rate; \
- for (i = 0; i < from->channels; i++) \
+ for (i = 0; i < (int)from->channels; i++) \
v[i] = (c256 * next[i] + (256 - c256) * prev[i]) >> 8; \
WRITE_Sn(BITS, EN, v, dst, w, from, to); \
this->count += from->sample_rate; \
@@ -452,7 +452,7 @@ aurateconv_slinear32_##EN (aurateconv_t
used_src -= frame_src; \
} \
c256 = this->count * 256 / to->sample_rate; \
- for (i = 0; i < from->channels; i++) \
+ for (i = 0; i < (int)from->channels; i++) \
v[i] = (int32_t)((c256 * next[i] + (INT64_C(256) - c256) * prev[i]) >> 8) & mask; \
WRITE_Sn(32, EN, v, dst, w, from, to); \
used_dst += frame_dst; \