sound: Whitespace cleanup

In advance of additional sound(4) work, remove EOL whitespace and mixed
tab/space.

Reviewed by:	christos
Differential Revision: https://reviews.freebsd.org/D60442
This commit is contained in:
Ed Maste committed 2026-10-08 08:19:22 -04:00
1 parent 8eb863097f
commit dd51cef583
59 files changed
+862 -862

No files matched your search

+7 -7
View File
@@ -51,7 +51,7 @@ struct audio_soc_aux_node {
struct audio_soc_channel {
struct audio_soc_softc *sc; /* parent device's softc */
struct pcm_channel *pcm; /* PCM channel */
struct pcm_channel *pcm; /* PCM channel */
struct snd_dbuf *buf; /* PCM buffer */
int dir; /* direction */
};
@@ -69,8 +69,8 @@ struct audio_soc_softc {
device_t codec_dev;
SLIST_HEAD(, audio_soc_aux_node) aux_devs;
unsigned int mclk_fs;
struct audio_soc_channel play_channel;
struct audio_soc_channel rec_channel;
struct audio_soc_channel play_channel;
struct audio_soc_channel rec_channel;
/*
* The format is from the CPU node, for CODEC node clock roles
* need to be reversed.
@@ -268,10 +268,10 @@ audio_soc_chan_getcaps(kobj_t obj, void *data)
}
static kobj_method_t audio_soc_chan_methods[] = {
KOBJMETHOD(channel_init, audio_soc_chan_init),
KOBJMETHOD(channel_free, audio_soc_chan_free),
KOBJMETHOD(channel_setformat, audio_soc_chan_setformat),
KOBJMETHOD(channel_setspeed, audio_soc_chan_setspeed),
KOBJMETHOD(channel_init, audio_soc_chan_init),
KOBJMETHOD(channel_free, audio_soc_chan_free),
KOBJMETHOD(channel_setformat, audio_soc_chan_setformat),
KOBJMETHOD(channel_setspeed, audio_soc_chan_setspeed),
KOBJMETHOD(channel_setblocksize,audio_soc_chan_setblocksize),
KOBJMETHOD(channel_trigger, audio_soc_chan_trigger),
KOBJMETHOD(channel_getptr, audio_soc_chan_getptr),
+38 -38
View File
@@ -54,24 +54,24 @@
#include "mixer_if.h"
struct aoa_dma {
struct mtx mutex;
struct resource *reg; /* DBDMA registers */
dbdma_channel_t *channel; /* DBDMA channel */
bus_dma_tag_t tag; /* bus_dma tag */
struct pcm_channel *pcm; /* PCM channel */
struct snd_dbuf *buf; /* PCM buffer */
unsigned int slots; /* # of slots */
unsigned int slot; /* current slot */
unsigned int bufsz; /* buffer size */
unsigned int blksz; /* block size */
int running;
struct mtx mutex;
struct resource *reg; /* DBDMA registers */
dbdma_channel_t *channel; /* DBDMA channel */
bus_dma_tag_t tag; /* bus_dma tag */
struct pcm_channel *pcm; /* PCM channel */
struct snd_dbuf *buf; /* PCM buffer */
unsigned int slots; /* # of slots */
unsigned int slot; /* current slot */
unsigned int bufsz; /* buffer size */
unsigned int blksz; /* block size */
int running;
};
static void
aoa_dma_set_program(struct aoa_dma *dma)
{
uint32_t addr;
int i;
uint32_t addr;
int i;
addr = (uint32_t)dma->buf->buf_addr;
KASSERT(dma->bufsz == dma->buf->bufsize, ("bad size"));
@@ -79,7 +79,7 @@ aoa_dma_set_program(struct aoa_dma *dma)
dma->slots = dma->bufsz / dma->blksz;
for (i = 0; i < dma->slots; ++i) {
dbdma_insert_command(dma->channel,
dbdma_insert_command(dma->channel,
i, /* slot */
DBDMA_OUTPUT_MORE, /* command */
0, /* stream */
@@ -109,19 +109,19 @@ aoa_dma_set_program(struct aoa_dma *dma)
#define AOA_BUFFER_SIZE 65536
static struct aoa_dma *
static struct aoa_dma *
aoa_dma_create(struct aoa_softc *sc)
{
struct aoa_dma *dma;
bus_dma_tag_t tag;
int err;
bus_dma_tag_t tag;
int err;
device_t self;
self = sc->sc_dev;
err = bus_dma_tag_create(bus_get_dma_tag(self),
4, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
err = bus_dma_tag_create(bus_get_dma_tag(self),
4, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
AOA_BUFFER_SIZE, 1, AOA_BUFFER_SIZE, 0, NULL, NULL, &tag);
if (err != 0)
if (err != 0)
return (NULL);
dma = malloc(sizeof(*dma), M_DEVBUF, M_WAITOK | M_ZERO);
@@ -147,10 +147,10 @@ aoa_dma_delete(struct aoa_dma *dma)
static uint32_t
aoa_chan_setblocksize(kobj_t obj, void *data, uint32_t blocksz)
{
struct aoa_dma *dma = data;
int err, lz;
struct aoa_dma *dma = data;
int err, lz;
DPRINTF(("aoa_chan_setblocksize: blocksz = %u, dma->blksz = %u\n",
DPRINTF(("aoa_chan_setblocksize: blocksz = %u, dma->blksz = %u\n",
blocksz, dma->blksz));
KASSERT(!dma->running, ("dma is running"));
KASSERT(blocksz > 0, ("bad blocksz"));
@@ -209,7 +209,7 @@ aoa_chan_setspeed(kobj_t obj, void *data, uint32_t speed)
static uint32_t
aoa_chan_getptr(kobj_t obj, void *data)
{
struct aoa_dma *dma = data;
struct aoa_dma *dma = data;
if (!dma->running)
return (0);
@@ -218,12 +218,12 @@ aoa_chan_getptr(kobj_t obj, void *data)
}
static void *
aoa_chan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
aoa_chan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
struct pcm_channel *c, int dir)
{
struct aoa_softc *sc = devinfo;
struct aoa_softc *sc = devinfo;
struct aoa_dma *dma;
int max_slots, err;
int max_slots, err;
KASSERT(dir == PCMDIR_PLAY, ("bad dir"));
@@ -257,15 +257,15 @@ aoa_chan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
static int
aoa_chan_trigger(kobj_t obj, void *data, int go)
{
struct aoa_dma *dma = data;
int i;
struct aoa_dma *dma = data;
int i;
switch (go) {
case PCMTRIG_START:
/* Start the DMA. */
dma->running = 1;
dma->slot = 0;
dbdma_set_current_cmd(dma->channel, dma->slot);
@@ -275,7 +275,7 @@ aoa_chan_trigger(kobj_t obj, void *data, int go)
case PCMTRIG_STOP:
case PCMTRIG_ABORT:
mtx_lock(&dma->mutex);
dma->running = 0;
@@ -304,7 +304,7 @@ aoa_chan_trigger(kobj_t obj, void *data, int go)
static int
aoa_chan_free(kobj_t obj, void *data)
{
struct aoa_dma *dma = data;
struct aoa_dma *dma = data;
sndbuf_free(dma->buf);
dbdma_free_channel(dma->channel);
@@ -313,7 +313,7 @@ aoa_chan_free(kobj_t obj, void *data)
return (0);
}
void
void
aoa_interrupt(void *xsc)
{
struct aoa_softc *sc = xsc;
@@ -349,10 +349,10 @@ aoa_chan_getcaps(kobj_t obj, void *data)
}
static kobj_method_t aoa_chan_methods[] = {
KOBJMETHOD(channel_init, aoa_chan_init),
KOBJMETHOD(channel_free, aoa_chan_free),
KOBJMETHOD(channel_setformat, aoa_chan_setformat),
KOBJMETHOD(channel_setspeed, aoa_chan_setspeed),
KOBJMETHOD(channel_init, aoa_chan_init),
KOBJMETHOD(channel_free, aoa_chan_free),
KOBJMETHOD(channel_setformat, aoa_chan_setformat),
KOBJMETHOD(channel_setspeed, aoa_chan_setspeed),
KOBJMETHOD(channel_setblocksize,aoa_chan_setblocksize),
KOBJMETHOD(channel_trigger, aoa_chan_trigger),
KOBJMETHOD(channel_getptr, aoa_chan_getptr),
@@ -384,7 +384,7 @@ aoa_attach(void *xsc, kobj_class_t mixer_class, void *mixer_devinfo)
pcm_addchan(self, PCMDIR_PLAY, &aoa_chan_class, sc);
snprintf(status, sizeof(status), "at %s", ofw_bus_get_name(self));
snprintf(status, sizeof(status), "at %s", ofw_bus_get_name(self));
return (pcm_register(self, status));
}
+1 -1
View File
@@ -35,7 +35,7 @@
#endif
struct aoa_softc {
device_t sc_dev;
device_t sc_dev;
void *sc_intrp;
struct resource *sc_odma;
};
+50 -50
View File
@@ -57,25 +57,25 @@
#include "mixer_if.h"
struct davbus_softc {
struct aoa_softc aoa;
phandle_t node;
phandle_t soundnode;
struct resource *reg;
struct mtx mutex;
int device_id;
unsigned int output_mask;
unsigned int (*read_status)(struct davbus_softc *, unsigned int);
struct aoa_softc aoa;
phandle_t node;
phandle_t soundnode;
struct resource *reg;
struct mtx mutex;
int device_id;
unsigned int output_mask;
unsigned int (*read_status)(struct davbus_softc *, unsigned int);
void (*set_outputs)(struct davbus_softc *, unsigned int);
};
static int davbus_probe(device_t);
static int davbus_attach(device_t);
static int davbus_probe(device_t);
static int davbus_attach(device_t);
static void davbus_cint(void *);
static device_method_t pcm_davbus_methods[] = {
/* Device interface. */
DEVMETHOD(device_probe, davbus_probe),
DEVMETHOD(device_attach, davbus_attach),
DEVMETHOD(device_attach, davbus_attach),
DEVMETHOD_END
};
@@ -94,7 +94,7 @@ MODULE_DEPEND(pcm_davbus, sound, 1, 1, 1);
static int
davbus_probe(device_t self)
{
const char *name;
const char *name;
name = ofw_bus_get_name(self);
if (!name)
@@ -115,7 +115,7 @@ davbus_probe(device_t self)
static int burgundy_init(struct snd_mixer *m);
static int burgundy_uninit(struct snd_mixer *m);
static int burgundy_reinit(struct snd_mixer *m);
static void burgundy_write_locked(struct davbus_softc *, unsigned int, unsigned int);
static void burgundy_write_locked(struct davbus_softc *, unsigned int, unsigned int);
static void burgundy_set_outputs(struct davbus_softc *d, unsigned int mask);
static unsigned int burgundy_read_status(struct davbus_softc *d, unsigned int status);
static int burgundy_set(struct snd_mixer *m, unsigned dev, unsigned left,
@@ -123,10 +123,10 @@ static int burgundy_set(struct snd_mixer *m, unsigned dev, unsigned left,
static uint32_t burgundy_setrecsrc(struct snd_mixer *m, uint32_t src);
static kobj_method_t burgundy_mixer_methods[] = {
KOBJMETHOD(mixer_init, burgundy_init),
KOBJMETHOD(mixer_uninit, burgundy_uninit),
KOBJMETHOD(mixer_reinit, burgundy_reinit),
KOBJMETHOD(mixer_set, burgundy_set),
KOBJMETHOD(mixer_init, burgundy_init),
KOBJMETHOD(mixer_uninit, burgundy_uninit),
KOBJMETHOD(mixer_reinit, burgundy_reinit),
KOBJMETHOD(mixer_set, burgundy_set),
KOBJMETHOD(mixer_setrecsrc, burgundy_setrecsrc),
KOBJMETHOD_END
};
@@ -146,7 +146,7 @@ burgundy_init(struct snd_mixer *m)
/*
* We configure the Burgundy codec as follows:
*
* o Input subframe 0 is connected to input digital
* o Input subframe 0 is connected to input digital
* stream A (ISA).
* o Stream A (ISA) is mixed in mixer 2 (MIX2).
* o Output of mixer 2 (MIX2) is routed to output sources
@@ -157,12 +157,12 @@ burgundy_init(struct snd_mixer *m)
burgundy_write_locked(d, 0x16700, 0x40);
burgundy_write_locked(d, BURGUNDY_MIX0_REG, 0);
burgundy_write_locked(d, BURGUNDY_MIX0_REG, 0);
burgundy_write_locked(d, BURGUNDY_MIX1_REG, 0);
burgundy_write_locked(d, BURGUNDY_MIX2_REG, BURGUNDY_MIX_ISA);
burgundy_write_locked(d, BURGUNDY_MIX3_REG, 0);
burgundy_write_locked(d, BURGUNDY_OS_REG, BURGUNDY_OS0_MIX2 |
burgundy_write_locked(d, BURGUNDY_OS_REG, BURGUNDY_OS0_MIX2 |
BURGUNDY_OS1_MIX2);
burgundy_write_locked(d, BURGUNDY_SDIN_REG, BURGUNDY_ISA_SF0);
@@ -177,7 +177,7 @@ burgundy_init(struct snd_mixer *m)
burgundy_write_locked(d, BURGUNDY_ISSAL_REG, BURGUNDY_ISS_UNITY);
burgundy_write_locked(d, BURGUNDY_ISSAR_REG, BURGUNDY_ISS_UNITY);
burgundy_set_outputs(d, burgundy_read_status(d,
burgundy_set_outputs(d, burgundy_read_status(d,
bus_read_4(d->reg, DAVBUS_CODEC_STATUS)));
mtx_unlock(&d->mutex);
@@ -209,7 +209,7 @@ burgundy_write_locked(struct davbus_softc *d, unsigned int reg, unsigned int val
offset = reg & 0xFF;
for (i = offset; i < offset + size; ++i) {
data = BURGUNDY_CTRL_WRITE | (addr << 12) |
data = BURGUNDY_CTRL_WRITE | (addr << 12) |
((size + offset - 1) << 10) | (i << 8) | (val & 0xFF);
if (i == offset)
data |= BURGUNDY_CTRL_RESET;
@@ -219,9 +219,9 @@ burgundy_write_locked(struct davbus_softc *d, unsigned int reg, unsigned int val
while (bus_read_4(d->reg, DAVBUS_CODEC_CTRL) &
DAVBUS_CODEC_BUSY)
DELAY(1);
val >>= 8; /* next byte. */
}
}
}
/* Must be called with d->mutex held. */
@@ -251,7 +251,7 @@ burgundy_set_outputs(struct davbus_softc *d, unsigned int mask)
}
if (mask & (1 << 1)) {
DPRINTF((" HEADPHONES"));
x |= BURGUNDY_P14L_EN | BURGUNDY_P14R_EN;
x |= BURGUNDY_P14L_EN | BURGUNDY_P14R_EN;
}
DPRINTF(("\n"));
@@ -311,7 +311,7 @@ burgundy_setrecsrc(struct snd_mixer *m, uint32_t src)
static int screamer_init(struct snd_mixer *m);
static int screamer_uninit(struct snd_mixer *m);
static int screamer_reinit(struct snd_mixer *m);
static void screamer_write_locked(struct davbus_softc *, unsigned int, unsigned int);
static void screamer_write_locked(struct davbus_softc *, unsigned int, unsigned int);
static void screamer_set_outputs(struct davbus_softc *d, unsigned int mask);
static unsigned int screamer_read_status(struct davbus_softc *d, unsigned int status);
static int screamer_set(struct snd_mixer *m, unsigned dev, unsigned left,
@@ -319,10 +319,10 @@ static int screamer_set(struct snd_mixer *m, unsigned dev, unsigned left,
static uint32_t screamer_setrecsrc(struct snd_mixer *m, uint32_t src);
static kobj_method_t screamer_mixer_methods[] = {
KOBJMETHOD(mixer_init, screamer_init),
KOBJMETHOD(mixer_uninit, screamer_uninit),
KOBJMETHOD(mixer_reinit, screamer_reinit),
KOBJMETHOD(mixer_set, screamer_set),
KOBJMETHOD(mixer_init, screamer_init),
KOBJMETHOD(mixer_uninit, screamer_uninit),
KOBJMETHOD(mixer_reinit, screamer_reinit),
KOBJMETHOD(mixer_set, screamer_set),
KOBJMETHOD(mixer_setrecsrc, screamer_setrecsrc),
KOBJMETHOD_END
};
@@ -341,10 +341,10 @@ screamer_init(struct snd_mixer *m)
mtx_lock(&d->mutex);
screamer_write_locked(d, SCREAMER_CODEC_ADDR0, SCREAMER_INPUT_CD |
screamer_write_locked(d, SCREAMER_CODEC_ADDR0, SCREAMER_INPUT_CD |
SCREAMER_DEFAULT_CD_GAIN);
screamer_set_outputs(d, screamer_read_status(d,
screamer_set_outputs(d, screamer_read_status(d,
bus_read_4(d->reg, DAVBUS_CODEC_STATUS)));
screamer_write_locked(d, SCREAMER_CODEC_ADDR2, 0);
@@ -374,7 +374,7 @@ screamer_reinit(struct snd_mixer *m)
static void
screamer_write_locked(struct davbus_softc *d, unsigned int reg, unsigned int val)
{
unsigned int x;
unsigned int x;
KASSERT(val == (val & 0xfff), ("bad val"));
@@ -394,7 +394,7 @@ screamer_write_locked(struct davbus_softc *d, unsigned int reg, unsigned int val
static void
screamer_set_outputs(struct davbus_softc *d, unsigned int mask)
{
unsigned int x;
unsigned int x;
if (mask == d->output_mask) {
return;
@@ -433,7 +433,7 @@ screamer_set_outputs(struct davbus_softc *d, unsigned int mask)
static unsigned int
screamer_read_status(struct davbus_softc *d, unsigned int status)
{
int headphones;
int headphones;
switch (d->device_id) {
case 5: /* Sawtooth */
@@ -473,7 +473,7 @@ screamer_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right)
mtx_lock(&d->mutex);
screamer_write_locked(d, SCREAMER_CODEC_ADDR2, (lval << 6) |
rval);
screamer_write_locked(d, SCREAMER_CODEC_ADDR4, (lval << 6) |
screamer_write_locked(d, SCREAMER_CODEC_ADDR4, (lval << 6) |
rval);
mtx_unlock(&d->mutex);
@@ -492,12 +492,12 @@ screamer_setrecsrc(struct snd_mixer *m, uint32_t src)
static int
davbus_attach(device_t self)
{
struct davbus_softc *sc;
struct resource *dbdma_irq, *cintr;
void *cookie;
struct davbus_softc *sc;
struct resource *dbdma_irq, *cintr;
void *cookie;
kobj_class_t mixer_class;
char compat[64];
int rid, oirq, err;
int rid, oirq, err;
sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO);
@@ -508,19 +508,19 @@ davbus_attach(device_t self)
/* Map the controller register space. */
rid = 0;
sc->reg = bus_alloc_resource_any(self, SYS_RES_MEMORY, &rid, RF_ACTIVE);
if (sc->reg == NULL)
if (sc->reg == NULL)
return (ENXIO);
/* Map the DBDMA channel register space. */
rid = 1;
sc->aoa.sc_odma = bus_alloc_resource_any(self, SYS_RES_MEMORY,
sc->aoa.sc_odma = bus_alloc_resource_any(self, SYS_RES_MEMORY,
&rid, RF_ACTIVE);
if (sc->aoa.sc_odma == NULL)
return (ENXIO);
/* Establish the DBDMA channel edge-triggered interrupt. */
rid = 1;
dbdma_irq = bus_alloc_resource_any(self, SYS_RES_IRQ,
dbdma_irq = bus_alloc_resource_any(self, SYS_RES_IRQ,
&rid, RF_SHAREABLE | RF_ACTIVE);
if (dbdma_irq == NULL)
return (ENXIO);
@@ -532,7 +532,7 @@ davbus_attach(device_t self)
err = powerpc_config_intr(oirq, INTR_TRIGGER_EDGE, INTR_POLARITY_LOW);
if (err != 0)
return (err);
snd_setup_intr(self, dbdma_irq, INTR_MPSAFE, aoa_interrupt,
sc, &cookie);
@@ -548,14 +548,14 @@ davbus_attach(device_t self)
/* Setup the control interrupt. */
rid = 0;
cintr = bus_alloc_resource_any(self, SYS_RES_IRQ,
cintr = bus_alloc_resource_any(self, SYS_RES_IRQ,
&rid, RF_SHAREABLE | RF_ACTIVE);
if (cintr != NULL)
if (cintr != NULL)
bus_setup_intr(self, cintr, INTR_TYPE_MISC | INTR_MPSAFE,
NULL, davbus_cint, sc, &cookie);
/* Initialize controller registers. */
bus_write_4(sc->reg, DAVBUS_SOUND_CTRL, DAVBUS_INPUT_SUBFRAME0 |
bus_write_4(sc->reg, DAVBUS_SOUND_CTRL, DAVBUS_INPUT_SUBFRAME0 |
DAVBUS_OUTPUT_SUBFRAME0 | DAVBUS_RATE_44100 | DAVBUS_INTR_PORTCHG);
/* Pick the codec module */
@@ -574,7 +574,7 @@ davbus_attach(device_t self)
return (0);
}
static void
static void
davbus_cint(void *ptr)
{
struct davbus_softc *d = ptr;
@@ -584,9 +584,9 @@ davbus_cint(void *ptr)
reg = bus_read_4(d->reg, DAVBUS_SOUND_CTRL);
if (reg & DAVBUS_PORTCHG) {
status = bus_read_4(d->reg, DAVBUS_CODEC_STATUS);
if (d->read_status && d->set_outputs) {
mask = (*d->read_status)(d, status);
(*d->set_outputs)(d, mask);
+13 -13
View File
@@ -152,7 +152,7 @@
#define BURGUNDY_OS3_MIX2 0x00000080
#define BURGUNDY_OS3_MIX3 0x000000C0
#define BURGUNDY_OSA_MIX0 0x00000000
#define BURGUNDY_OSA_MIX1 0x00010000
#define BURGUNDY_OSA_MIX1 0x00010000
#define BURGUNDY_OSA_MIX2 0x00020000
#define BURGUNDY_OSA_MIX3 0x00030000
#define BURGUNDY_OSB_MIX0 0x00000000
@@ -195,8 +195,8 @@
#define BURGUNDY_OSS3R_REG 0x13103
#define BURGUNDY_OSS_UNITY 0xDF
/* Digital input streams ISA-ISC. A stream may be derived from data coming
from the controller in subframes 0 to 3 as well as from internal
/* Digital input streams ISA-ISC. A stream may be derived from data coming
from the controller in subframes 0 to 3 as well as from internal
output sources OSA-OSD. */
#define BURGUNDY_SDIN_REG 0x17800
#define BURGUNDY_ISA_SF0 0x00
@@ -214,7 +214,7 @@
#define BURGUNDY_ISS_UNITY 0xDF
/*
* Screamer codec control bits
* Screamer codec control bits
* This codec has the following 12-bit control registers:
* cc0 cc1 cc2 cc4 cc5 cc6 cc7
*/
@@ -237,7 +237,7 @@
* Bits 7-4 specify the left ADC input gain;
* bits 3-0 specify the right ADC input gain.
*
* The gain is a 4-bit value expressed in units of 1.5 dB,
* The gain is a 4-bit value expressed in units of 1.5 dB,
* ranging from 0 dB (0) to +22.5 dB (15).
*/
#define SCREAMER_DEFAULT_CD_GAIN 0x000000bb /* +16.5 dB */
@@ -251,8 +251,8 @@
#define SCREAMER_MUTE_SPEAKER 0x00000080
#define SCREAMER_MUTE_HEADPHONES 0x00000200
#define SCREAMER_PARALLEL_OUTPUT 0x00000c00
#define SCREAMER_PROG_OUTPUT0 0x00000400
#define SCREAMER_PROG_OUTPUT1 0x00000800
#define SCREAMER_PROG_OUTPUT0 0x00000400
#define SCREAMER_PROG_OUTPUT1 0x00000800
/* cc2: headphones/external port attenuation */
/* cc4: internal speaker attenuation */
@@ -265,12 +265,12 @@
*/
/* screamer codec status bits. */
#define SCREAMER_STATUS_MASK 0x00FFFFFF
#define SCREAMER_STATUS_SENSEMASK 0x0000000F
#define SCREAMER_STATUS_SENSE0 0x00000008
#define SCREAMER_STATUS_SENSE1 0x00000004
#define SCREAMER_STATUS_SENSE2 0x00000002
#define SCREAMER_STATUS_SENSE3 0x00000001
#define SCREAMER_STATUS_MASK 0x00FFFFFF
#define SCREAMER_STATUS_SENSEMASK 0x0000000F
#define SCREAMER_STATUS_SENSE0 0x00000008
#define SCREAMER_STATUS_SENSE1 0x00000004
#define SCREAMER_STATUS_SENSE2 0x00000002
#define SCREAMER_STATUS_SENSE3 0x00000001
#define SCREAMER_STATUS_PARTMASK 0x00000300
#define SCREAMER_STATUS_PARTSHFT 8
#define SCREAMER_PART_CRYSTAL 0x00000100
+63 -63
View File
@@ -49,8 +49,8 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* NetBSD: snapper.c,v 1.28 2008/05/16 03:49:54 macallan Exp
* Id: snapper.c,v 1.11 2002/10/31 17:42:13 tsubai Exp
* NetBSD: snapper.c,v 1.28 2008/05/16 03:49:54 macallan Exp
* Id: snapper.c,v 1.11 2002/10/31 17:42:13 tsubai Exp
*/
/*
@@ -83,24 +83,24 @@
#include <powerpc/powermac/macgpiovar.h>
struct i2s_softc {
struct aoa_softc aoa;
phandle_t node;
struct aoa_softc aoa;
phandle_t node;
phandle_t soundnode;
struct resource *reg;
unsigned int output_mask;
struct mtx port_mtx;
struct resource *reg;
unsigned int output_mask;
struct mtx port_mtx;
};
static int i2s_probe(device_t);
static int i2s_attach(device_t);
static void i2s_postattach(void *);
static int i2s_setup(struct i2s_softc *, unsigned int, unsigned int, unsigned int);
static int i2s_probe(device_t);
static int i2s_attach(device_t);
static void i2s_postattach(void *);
static int i2s_setup(struct i2s_softc *, unsigned int, unsigned int, unsigned int);
static void i2s_mute_headphone (struct i2s_softc *, int);
static void i2s_mute_lineout (struct i2s_softc *, int);
static void i2s_mute_speaker (struct i2s_softc *, int);
static void i2s_set_outputs(void *, unsigned int);
static void i2s_set_outputs(void *, unsigned int);
static struct intr_config_hook *i2s_delayed_attach = NULL;
static struct intr_config_hook *i2s_delayed_attach = NULL;
kobj_class_t i2s_mixer_class = NULL;
device_t i2s_mixer = NULL;
@@ -108,7 +108,7 @@ device_t i2s_mixer = NULL;
static device_method_t pcm_i2s_methods[] = {
/* Device interface. */
DEVMETHOD(device_probe, i2s_probe),
DEVMETHOD(device_attach, i2s_attach),
DEVMETHOD(device_attach, i2s_attach),
DEVMETHOD_END
};
@@ -122,7 +122,7 @@ DRIVER_MODULE(pcm_i2s, macio, pcm_i2s_driver, 0, 0);
MODULE_DEPEND(pcm_i2s, sound, 1, 1, 1);
static int aoagpio_probe(device_t);
static int aoagpio_attach(device_t);
static int aoagpio_attach(device_t);
static device_method_t aoagpio_methods[] = {
/* Device interface. */
@@ -132,8 +132,8 @@ static device_method_t aoagpio_methods[] = {
};
struct aoagpio_softc {
device_t dev;
int ctrl;
device_t dev;
int ctrl;
int detect_active; /* for extint-gpio */
int level; /* for extint-gpio */
struct i2s_softc *i2s; /* for extint-gpio */
@@ -153,7 +153,7 @@ DRIVER_MODULE(aoagpio, macgpio, aoagpio_driver, 0, 0);
static int
i2s_probe(device_t self)
{
const char *name;
const char *name;
phandle_t subchild;
char subchildname[255];
@@ -184,11 +184,11 @@ static phandle_t of_find_firstchild_byname(phandle_t, const char *);
static int
i2s_attach(device_t self)
{
struct i2s_softc *sc;
struct resource *dbdma_irq;
struct i2s_softc *sc;
struct resource *dbdma_irq;
void *dbdma_ih;
int rid, oirq, err;
phandle_t port;
int rid, oirq, err;
phandle_t port;
sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO);
@@ -212,14 +212,14 @@ i2s_attach(device_t self)
/* Map the DBDMA channel register space. */
rid = 1;
sc->aoa.sc_odma = bus_alloc_resource_any(self, SYS_RES_MEMORY, &rid,
sc->aoa.sc_odma = bus_alloc_resource_any(self, SYS_RES_MEMORY, &rid,
RF_ACTIVE);
if (sc->aoa.sc_odma == NULL)
return ENXIO;
/* Establish the DBDMA channel edge-triggered interrupt. */
rid = 1;
dbdma_irq = bus_alloc_resource_any(self, SYS_RES_IRQ,
dbdma_irq = bus_alloc_resource_any(self, SYS_RES_IRQ,
&rid, RF_SHAREABLE | RF_ACTIVE);
if (dbdma_irq == NULL)
return (ENXIO);
@@ -270,7 +270,7 @@ enum gpio_ctrl {
((1 << HEADPHONE_DETECT) | \
(1 << LINEOUT_DETECT))
static struct aoagpio_softc *gpio_ctrls[GPIO_CTRL_NUM] =
static struct aoagpio_softc *gpio_ctrls[GPIO_CTRL_NUM] =
{NULL, NULL, NULL, NULL, NULL, NULL};
static struct gpio_match {
@@ -279,21 +279,21 @@ static struct gpio_match {
} gpio_controls[] = {
{"headphone-mute", HEADPHONE_MUTE},
{"lineout-mute", LINEOUT_MUTE},
{"amp-mute", AMP_MUTE},
{"amp-mute", AMP_MUTE},
{"headphone-detect", HEADPHONE_DETECT},
{"lineout-detect", LINEOUT_DETECT},
{"line-output-detect", LINEOUT_DETECT},
{"audio-hw-reset", AUDIO_HW_RESET},
{"hw-reset", AUDIO_HW_RESET},
{NULL, GPIO_CTRL_NUM}
{"hw-reset", AUDIO_HW_RESET},
{NULL, GPIO_CTRL_NUM}
};
static void i2s_cint(struct i2s_softc *);
static void i2s_cint(struct i2s_softc *);
static void
aoagpio_int(void *cookie)
{
device_t self = cookie;
device_t self = cookie;
struct aoagpio_softc *sc;
sc = device_get_softc(self);
@@ -310,9 +310,9 @@ aoagpio_int(void *cookie)
static int
aoagpio_probe(device_t gpio)
{
phandle_t node;
phandle_t node;
char bname[32];
const char *name;
const char *name;
struct gpio_match *m;
struct aoagpio_softc *sc;
@@ -337,7 +337,7 @@ aoagpio_probe(device_t gpio)
sc->detect_active = 0;
sc->i2s = NULL;
OF_getprop(node, "audio-gpio-active-state",
OF_getprop(node, "audio-gpio-active-state",
&sc->detect_active, sizeof(sc->detect_active));
if ((1 << m->ctrl) & GPIO_CTRL_EXTINT_SET)
@@ -352,7 +352,7 @@ aoagpio_probe(device_t gpio)
return (ENXIO);
}
static int
static int
aoagpio_attach(device_t gpio)
{
struct aoagpio_softc *sc;
@@ -370,8 +370,8 @@ aoagpio_attach(device_t gpio)
irq = rman_get_start(r);
DPRINTF(("interrupting at irq %d\n", irq));
if (powerpc_config_intr(irq, INTR_TRIGGER_EDGE,
INTR_POLARITY_LOW) != 0)
if (powerpc_config_intr(irq, INTR_TRIGGER_EDGE,
INTR_POLARITY_LOW) != 0)
return (ENXIO);
bus_setup_intr(gpio, r, INTR_TYPE_MISC | INTR_MPSAFE |
@@ -418,7 +418,7 @@ aoagpio_attach(device_t gpio)
#define OUTPUT_16BIT (0 << 0)
#define OUTPUT_24BIT (3 << 0)
/* Master clock, needed by some codecs. We hardcode this
/* Master clock, needed by some codecs. We hardcode this
to 256 * fs as this is valid for most codecs. */
#define MCLK_FS 256
@@ -436,7 +436,7 @@ static const struct i2s_clksrc {
/* Configure the I2S controller for the required settings.
'rate' is the frame rate.
'wordsize' is the sample size (usually 16 bits).
'sclk_fs' is the SCLK/framerate ratio, which needs to be equal
'sclk_fs' is the SCLK/framerate ratio, which needs to be equal
or greater to the number of bits per frame. */
static int
@@ -487,7 +487,7 @@ i2s_setup(struct i2s_softc *sc, unsigned int rate, unsigned int wordsize, unsign
break;
}
reg |= (x << 24) & MCLK_DIV_MASK;
switch (sdiv) {
case 1:
x = 8;
@@ -502,8 +502,8 @@ i2s_setup(struct i2s_softc *sc, unsigned int rate, unsigned int wordsize, unsign
reg |= (x << 20) & SCLK_DIV_MASK;
/*
* XXX use master mode for now. This needs to be
* revisited if we want to add recording from SPDIF some day.
* XXX use master mode for now. This needs to be
* revisited if we want to add recording from SPDIF some day.
*/
reg |= SCLK_MASTER;
@@ -537,8 +537,8 @@ i2s_setup(struct i2s_softc *sc, unsigned int rate, unsigned int wordsize, unsign
x = bus_read_4(sc->reg, I2S_FORMAT);
if (x != reg) {
/*
* XXX to change the format we need to stop the clock
* via the FCR registers. For now, rely on the firmware
* XXX to change the format we need to stop the clock
* via the FCR registers. For now, rely on the firmware
* to set sane defaults (44100).
*/
printf("i2s_setup: changing format not supported yet.\n");
@@ -546,17 +546,17 @@ i2s_setup(struct i2s_softc *sc, unsigned int rate, unsigned int wordsize, unsign
#ifdef notyet
if (obio_fcr_isset(OBIO_FCR1, I2S0CLKEN)) {
bus_space_write_4(sc->sc_tag, sc->sc_bsh, I2S_INT,
bus_space_write_4(sc->sc_tag, sc->sc_bsh, I2S_INT,
I2S_INT_CLKSTOPPEND);
obio_fcr_clear(OBIO_FCR1, I2S0CLKEN);
for (timo = 1000; timo > 0; timo--) {
if (bus_space_read_4(sc->sc_tag, sc->sc_bsh,
I2S_INT) & I2S_INT_CLKSTOPPEND)
break;
DELAY(10);
}
@@ -566,7 +566,7 @@ i2s_setup(struct i2s_softc *sc, unsigned int rate, unsigned int wordsize, unsign
}
bus_space_write_4(sc->sc_tag, sc->sc_bsh, I2S_FORMAT, reg);
obio_fcr_set(OBIO_FCR1, I2S0CLKEN);
#endif
}
@@ -578,8 +578,8 @@ i2s_setup(struct i2s_softc *sc, unsigned int rate, unsigned int wordsize, unsign
static phandle_t
of_find_firstchild_byname(phandle_t node, const char *req_name)
{
char name[32]; /* max name len per OF spec. */
phandle_t n;
char name[32]; /* max name len per OF spec. */
phandle_t n;
for (n = OF_child(node); n != -1; n = OF_peer(n)) {
bzero(name, sizeof(name));
@@ -606,8 +606,8 @@ gpio_read(enum gpio_ctrl ctrl)
static void
gpio_write(enum gpio_ctrl ctrl, unsigned int x)
{
struct aoagpio_softc *sc;
unsigned int reg;
struct aoagpio_softc *sc;
unsigned int reg;
if ((sc = gpio_ctrls[ctrl]) == NULL)
return;
@@ -619,16 +619,16 @@ gpio_write(enum gpio_ctrl ctrl, unsigned int x)
macgpio_write(sc->dev, reg);
}
static void
static void
i2s_cint(struct i2s_softc *sc)
{
unsigned int mask = 0;
if (gpio_ctrls[HEADPHONE_DETECT] &&
if (gpio_ctrls[HEADPHONE_DETECT] &&
gpio_ctrls[HEADPHONE_DETECT]->level)
mask |= 1 << 1;
if (gpio_ctrls[LINEOUT_DETECT] &&
if (gpio_ctrls[LINEOUT_DETECT] &&
gpio_ctrls[LINEOUT_DETECT]->level)
mask |= 1 << 2;
@@ -670,10 +670,10 @@ i2s_audio_hw_reset(struct i2s_softc *sc)
#define LINEOUT_ACTIVE 0 /* XXX OF */
#define MUTE_CONTROL(xxx, yyy) \
static void \
static void \
i2s_mute_##xxx(struct i2s_softc *sc, int mute) \
{ \
int x; \
int x; \
\
if (gpio_ctrls[yyy##_MUTE] == NULL) \
return; \
@@ -693,7 +693,7 @@ MUTE_CONTROL(lineout, LINEOUT)
static void
i2s_set_outputs(void *ptr, unsigned int mask)
{
struct i2s_softc *sc = ptr;
struct i2s_softc *sc = ptr;
if (mask == sc->output_mask)
return;
@@ -709,7 +709,7 @@ i2s_set_outputs(void *ptr, unsigned int mask)
if (mask & (1 << 0)) {
DPRINTF(("SPEAKER "));
i2s_mute_speaker(sc, 0);
}
}
if (mask & (1 << 1)) {
DPRINTF(("HEADPHONE "));
i2s_mute_headphone(sc, 0);
@@ -728,9 +728,9 @@ i2s_set_outputs(void *ptr, unsigned int mask)
static void
i2s_postattach(void *xsc)
{
struct i2s_softc *sc = xsc;
device_t self;
int i;
struct i2s_softc *sc = xsc;
device_t self;
int i;
self = sc->aoa.sc_dev;
@@ -748,7 +748,7 @@ i2s_postattach(void *xsc)
/* Read initial port status. */
i2s_cint(sc);
/* Enable GPIO interrupt callback. */
/* Enable GPIO interrupt callback. */
for (i = 0; i < GPIO_CTRL_NUM; i++)
if (gpio_ctrls[i])
gpio_ctrls[i]->i2s = sc;
+13 -13
View File
@@ -49,8 +49,8 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* NetBSD: snapper.c,v 1.28 2008/05/16 03:49:54 macallan Exp
* Id: snapper.c,v 1.11 2002/10/31 17:42:13 tsubai Exp
* NetBSD: snapper.c,v 1.28 2008/05/16 03:49:54 macallan Exp
* Id: snapper.c,v 1.11 2002/10/31 17:42:13 tsubai Exp
*/
/*
@@ -98,7 +98,7 @@ struct snapper_softc
};
static int snapper_probe(device_t);
static int snapper_attach(device_t);
static int snapper_attach(device_t);
static int snapper_init(struct snd_mixer *m);
static int snapper_uninit(struct snd_mixer *m);
static int snapper_reinit(struct snd_mixer *m);
@@ -124,11 +124,11 @@ MODULE_VERSION(snapper, 1);
MODULE_DEPEND(snapper, iicbus, 1, 1, 1);
static kobj_method_t snapper_mixer_methods[] = {
KOBJMETHOD(mixer_init, snapper_init),
KOBJMETHOD(mixer_uninit, snapper_uninit),
KOBJMETHOD(mixer_reinit, snapper_reinit),
KOBJMETHOD(mixer_set, snapper_set),
KOBJMETHOD(mixer_setrecsrc, snapper_setrecsrc),
KOBJMETHOD(mixer_init, snapper_init),
KOBJMETHOD(mixer_uninit, snapper_uninit),
KOBJMETHOD(mixer_reinit, snapper_reinit),
KOBJMETHOD(mixer_set, snapper_set),
KOBJMETHOD(mixer_setrecsrc, snapper_setrecsrc),
KOBJMETHOD_END
};
@@ -221,8 +221,8 @@ struct snapper_reg {
};
static const struct snapper_reg snapper_initdata = {
{ SNAPPER_MCR1_SC_64 | SNAPPER_MCR1_SM_I2S |
SNAPPER_MCR1_W_16 }, /* MCR1 */
{ SNAPPER_MCR1_SC_64 | SNAPPER_MCR1_SM_I2S |
SNAPPER_MCR1_W_16 }, /* MCR1 */
{ 1, 0, 0, 0, 0, 0 }, /* DRC */
{ 0, 0, 0, 0, 0, 0 }, /* VOLUME */
{ 0x72 }, /* TREBLE */
@@ -293,7 +293,7 @@ static const char snapper_regsize[] = {
};
/* dB = 20 * log (x) table. */
static unsigned int snapper_volume_table[100] = {
static unsigned int snapper_volume_table[100] = {
0x00000148, 0x0000015C, 0x00000171, 0x00000186, // -46.0, -45.5, -45.0, -44.5,
0x0000019E, 0x000001B6, 0x000001D0, 0x000001EB, // -44.0, -43.5, -43.0, -42.5,
0x00000209, 0x00000227, 0x00000248, 0x0000026B, // -42.0, -41.5, -41.0, -40.5,
@@ -330,7 +330,7 @@ snapper_write(struct snapper_softc *sc, uint8_t reg, const void *data)
struct iic_msg msg[] = {
{ sc->sc_addr, IIC_M_WR, 0, buf }
};
KASSERT(reg < sizeof(snapper_regsize), ("bad reg"));
size = snapper_regsize[reg];
msg[0].len = size + 1;
@@ -388,7 +388,7 @@ static int
snapper_attach(device_t dev)
{
struct snapper_softc *sc;
sc = device_get_softc(dev);
sc->sc_dev = dev;
sc->sc_addr = iicbus_get_addr(dev);
+18 -18
View File
@@ -49,8 +49,8 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* NetBSD: tumbler.c,v 1.28 2008/05/16 03:49:54 macallan Exp
* Id: tumbler.c,v 1.11 2002/10/31 17:42:13 tsubai Exp
* NetBSD: tumbler.c,v 1.28 2008/05/16 03:49:54 macallan Exp
* Id: tumbler.c,v 1.11 2002/10/31 17:42:13 tsubai Exp
*/
/*
@@ -98,7 +98,7 @@ struct tumbler_softc
};
static int tumbler_probe(device_t);
static int tumbler_attach(device_t);
static int tumbler_attach(device_t);
static int tumbler_init(struct snd_mixer *m);
static int tumbler_uninit(struct snd_mixer *m);
static int tumbler_reinit(struct snd_mixer *m);
@@ -124,11 +124,11 @@ MODULE_VERSION(tumbler, 1);
MODULE_DEPEND(tumbler, iicbus, 1, 1, 1);
static kobj_method_t tumbler_mixer_methods[] = {
KOBJMETHOD(mixer_init, tumbler_init),
KOBJMETHOD(mixer_uninit, tumbler_uninit),
KOBJMETHOD(mixer_reinit, tumbler_reinit),
KOBJMETHOD(mixer_set, tumbler_set),
KOBJMETHOD(mixer_setrecsrc, tumbler_setrecsrc),
KOBJMETHOD(mixer_init, tumbler_init),
KOBJMETHOD(mixer_uninit, tumbler_uninit),
KOBJMETHOD(mixer_reinit, tumbler_reinit),
KOBJMETHOD(mixer_set, tumbler_set),
KOBJMETHOD(mixer_setrecsrc, tumbler_setrecsrc),
KOBJMETHOD_END
};
@@ -138,7 +138,7 @@ MIXER_DECLARE(tumbler_mixer);
/* Tumbler (Texas Instruments TAS3001) registers. */
#define TUMBLER_MCR 0x01 /* Main control register (1byte) */
#define TUMBLER_DRC 0x02 /* Dynamic Range Compression (2bytes) */
#define TUMBLER_DRC 0x02 /* Dynamic Range Compression (2bytes) */
#define TUMBLER_VOLUME 0x04 /* Volume (6bytes) */
#define TUMBLER_TREBLE 0x05 /* Treble control (1byte) */
#define TUMBLER_BASS 0x06 /* Bass control (1byte) */
@@ -203,14 +203,14 @@ struct tumbler_reg {
};
const struct tumbler_reg tumbler_initdata = {
{ TUMBLER_MCR_SC_64 | TUMBLER_MCR_SM_I2S |
{ TUMBLER_MCR_SC_64 | TUMBLER_MCR_SM_I2S |
TUMBLER_MCR_ISM_I2S | TUMBLER_MCR_W_16 }, /* MCR */
{ TUMBLER_DRC_COMP_31, TUMBLER_DRC_DEFL_TH }, /* DRC */
{ 0, 0, 0, 0, 0, 0 }, /* VOLUME */
{ 0x72 }, /* TREBLE */
{ 0x3e }, /* BASS */
{ 0x10, 0x00, 0x00 }, /* MIXER1 */
{ 0x00, 0x00, 0x00 }, /* MIXER2 */
{ 0x10, 0x00, 0x00 }, /* MIXER1 */
{ 0x00, 0x00, 0x00 }, /* MIXER2 */
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* BIQUAD */
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* BIQUAD */
{ 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* BIQUAD */
@@ -233,7 +233,7 @@ const char tumbler_regsize[] = {
sizeof tumbler_initdata.VOLUME, /* 0x04 */
sizeof tumbler_initdata.TREBLE, /* 0x05 */
sizeof tumbler_initdata.BASS, /* 0x06 */
sizeof tumbler_initdata.MIXER1, /* 0x07 */
sizeof tumbler_initdata.MIXER1, /* 0x07 */
sizeof tumbler_initdata.MIXER2, /* 0x08 */
0, /* 0x09 */
sizeof tumbler_initdata.LB0, /* 0x0a */
@@ -254,7 +254,7 @@ const char tumbler_regsize[] = {
};
/* dB = 20 * log (x) table. */
static unsigned int tumbler_volume_table[100] = {
static unsigned int tumbler_volume_table[100] = {
0x00000148, 0x0000015C, 0x00000171, 0x00000186, // -46.0, -45.5, -45.0, -44.5,
0x0000019E, 0x000001B6, 0x000001D0, 0x000001EB, // -44.0, -43.5, -43.0, -42.5,
0x00000209, 0x00000227, 0x00000248, 0x0000026B, // -42.0, -41.5, -41.0, -40.5,
@@ -291,7 +291,7 @@ tumbler_write(struct tumbler_softc *sc, uint8_t reg, const void *data)
struct iic_msg msg[] = {
{ sc->sc_addr, IIC_M_WR, 0, buf }
};
KASSERT(reg < sizeof(tumbler_regsize), ("bad reg"));
size = tumbler_regsize[reg];
msg[0].len = size + 1;
@@ -330,7 +330,7 @@ tumbler_probe(device_t dev)
if (name == NULL)
return (ENXIO);
if (strcmp(name, "deq") == 0 && iicbus_get_addr(dev) ==
if (strcmp(name, "deq") == 0 && iicbus_get_addr(dev) ==
TUMBLER_IICADDR) {
device_set_desc(dev, "Texas Instruments TAS3001 Audio Codec");
return (0);
@@ -343,7 +343,7 @@ static int
tumbler_attach(device_t dev)
{
struct tumbler_softc *sc;
sc = device_get_softc(dev);
sc->sc_dev = dev;
sc->sc_addr = iicbus_get_addr(dev);
@@ -426,7 +426,7 @@ tumbler_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right)
l = (left == 0 ? 0 : tumbler_volume_table[left - 1]);
r = (right == 0 ? 0 : tumbler_volume_table[right - 1]);
reg[0] = (l & 0xff0000) >> 16;
reg[1] = (l & 0x00ff00) >> 8;
reg[2] = l & 0x0000ff;
+4 -4
View File
@@ -71,11 +71,11 @@ uint16_t gaw_kernel_vect_code[] = {
0x7A80, 0x0063, 0xB811, 0x660A, 0x6209, 0xE304, 0x007A, 0x0C0B, 0x4005,
0x100A, 0xBA01, 0x9012, 0x0C12, 0x4002, 0x7980, 0x00AF, 0x7A80, 0x006B,
0xBE02, 0x620E, 0x660D, 0xBA10, 0xE344, 0x007A, 0x0C10, 0x4005, 0x100E,
0xBA01, 0x9012, 0x0C12, 0x4002, 0x1003, 0xBA02, 0x9012, 0x0C12, 0x4000,
0xBA01, 0x9012, 0x0C12, 0x4002, 0x1003, 0xBA02, 0x9012, 0x0C12, 0x4000,
0x1003, 0xE388, 0x00BA, 0x1004, 0x7980, 0x00BC, 0x1004, 0xBA01, 0x9012,
0x0C12, 0x4001, 0x0C05, 0x4003, 0x0C06, 0x4004, 0x1011, 0xBFB0, 0x01FF,
0x9012, 0x0C12, 0x4006, 0xBC20, 0xEF00, 0xAE26, 0x1028, 0x6970, 0xBFD0,
0x0001, 0x9070, 0xE388, 0x007A, 0xAE28, 0x0000, 0xEF00, 0xAE70, 0x0300,
0x0001, 0x9070, 0xE388, 0x007A, 0xAE28, 0x0000, 0xEF00, 0xAE70, 0x0300,
0x0C70, 0xB00C, 0xAE5A, 0x0000, 0xEF00, 0x7A80, 0x038A, 0x697F, 0xB801,
0x907F, 0x0056, 0x8B88, 0x0CA0, 0xB008, 0xAF71, 0xB000, 0x4E71, 0xE200,
0x00F3, 0xAE56, 0x1057, 0x0056, 0x0CA0, 0xB008, 0x8056, 0x7980, 0x03A1,
@@ -107,7 +107,7 @@ uint16_t gaw_kernel_vect_code[] = {
0x0380, 0x734C, 0x7A80, 0x0380, 0xBC21, 0xAE1C, 0x1090, 0x8B8A, 0xBF0A,
0x0560, 0xE500, 0x7C40, 0x0812, 0xB804, 0x8813, 0x8B8D, 0xBF0D, 0x056C,
0xE500, 0x7C40, 0x0815, 0xB804, 0x8811, 0x7A80, 0x034A, 0x8B8A, 0xBF0A,
0x0560, 0xE500, 0x7C40, 0x731F, 0xB903, 0x8809, 0xBEC6, 0x01F9, 0x548A,
0x0560, 0xE500, 0x7C40, 0x731F, 0xB903, 0x8809, 0xBEC6, 0x01F9, 0x548A,
0xBE03, 0x98A0, 0x7320, 0xB903, 0x8809, 0xBEC6, 0x0201, 0x548A, 0xBE03,
0x98A0, 0x1F20, 0x2F1F, 0x9826, 0xBC20, 0x6935, 0xE388, 0x03A1, 0x6933,
0xB801, 0x9033, 0xBFA0, 0x02EE, 0xE308, 0x03A1, 0x9033, 0xBF00, 0x6951,
@@ -204,7 +204,7 @@ uint16_t gaw_minisrc_code_0400[] = {
0x732E, 0x5415, 0xBE03, 0x9880, 0x692F, 0xE388, 0x054F, 0xBE59, 0xBB07,
0x6180, 0x9880, 0x8BA0, 0x6918, 0xEF08, 0x7325, 0x5416, 0xBE03, 0x98A0,
0x732E, 0x5417, 0xBE03, 0x98A0, 0xEF00, 0x8BA0, 0xBEC6, 0x056B, 0xBE59,
0xBB04, 0xAA90, 0xBE04, 0xBE1E, 0x99E0, 0x8BE0, 0x69A0, 0x90D0, 0x69A0,
0xBB04, 0xAA90, 0xBE04, 0xBE1E, 0x99E0, 0x8BE0, 0x69A0, 0x90D0, 0x69A0,
0x90D0, 0x081F, 0xB805, 0x881F, 0x8B90, 0x69A0, 0x90D0, 0x69A0, 0x9090,
0x8BD0, 0x8BD8, 0xBE1F, 0xEF00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+1 -1
View File
@@ -536,7 +536,7 @@
#define KDATA_ADC1_XFER0 (KDATA_BASE_ADDR + 0x003B)
#define KDATA_ADC1_XFER_ENDMARK (KDATA_BASE_ADDR + 0x003C)
#define KDATA_ADC1_LEFT_VOLUME (KDATA_BASE_ADDR + 0x003D)
#define KDATA_ADC1_RIGHT_VOLUME (KDATA_BASE_ADDR + 0x003E)
#define KDATA_ADC1_RIGHT_VOLUME (KDATA_BASE_ADDR + 0x003E)
#define KDATA_ADC1_LEFT_SUR_VOL (KDATA_BASE_ADDR + 0x003F)
#define KDATA_ADC1_RIGHT_SUR_VOL (KDATA_BASE_ADDR + 0x0040)
+1 -1
View File
@@ -26,7 +26,7 @@
* SUCH DAMAGE.
*/
#define ALS_PCI_ID0 0x40004005
#define ALS_PCI_ID0 0x40004005
#define ALS_PCI_POWERREG 0xe0
#define ALS_CONFIG_SPACE_BYTES 128
+1 -1
View File
@@ -747,7 +747,7 @@ atiixp_chan_trigger(kobj_t obj, void *data, int go)
pollticks = 1;
if (atiixp_chan_active(sc) == 0 ||
pollticks < sc->poll_ticks) {
if (bootverbose) {
if (bootverbose) {
if (atiixp_chan_active(sc) == 0)
device_printf(sc->dev,
"%s: pollticks=%d\n",
+1 -1
View File
@@ -55,7 +55,7 @@
#define ATI_IXP_BASE_RATE 48000
/*
/*
* Register definitions for ATI IXP
*
* References: ALSA snd-atiixp.c , OpenBSD/NetBSD auixp-*.h
+26 -26
View File
@@ -115,12 +115,12 @@ struct sc_info {
bus_dma_tag_t parent_dmat;
struct resource *reg, *irq;
int regid, irqid;
void *ih;
void *ih;
struct mtx lock;
int spdif_enabled;
unsigned int bufsz;
struct sc_chinfo pch, rch;
struct sc_chinfo pch, rch;
struct mpu401 *mpu;
mpu401_intr_t *mpu_intr;
@@ -439,7 +439,7 @@ cmichan_setspeed(kobj_t obj, void *data, uint32_t speed)
}
rsp = cmi_rd(ch->parent, CMPCI_REG_FUNC_1, 4);
rsp >>= CMPCI_REG_DAC_FS_SHIFT;
rsp &= CMPCI_REG_DAC_FS_MASK;
rsp &= CMPCI_REG_DAC_FS_MASK;
} else {
cmi_partial_wr4(ch->parent,
CMPCI_REG_FUNC_1,
@@ -448,7 +448,7 @@ cmichan_setspeed(kobj_t obj, void *data, uint32_t speed)
r);
rsp = cmi_rd(ch->parent, CMPCI_REG_FUNC_1, 4);
rsp >>= CMPCI_REG_ADC_FS_SHIFT;
rsp &= CMPCI_REG_ADC_FS_MASK;
rsp &= CMPCI_REG_ADC_FS_MASK;
}
mtx_unlock(&sc->lock);
ch->spd = cmpci_regvalue_to_rate(r);
@@ -583,13 +583,13 @@ cmichan_getcaps(kobj_t obj, void *data)
}
static kobj_method_t cmichan_methods[] = {
KOBJMETHOD(channel_init, cmichan_init),
KOBJMETHOD(channel_setformat, cmichan_setformat),
KOBJMETHOD(channel_setspeed, cmichan_setspeed),
KOBJMETHOD(channel_setblocksize, cmichan_setblocksize),
KOBJMETHOD(channel_trigger, cmichan_trigger),
KOBJMETHOD(channel_getptr, cmichan_getptr),
KOBJMETHOD(channel_getcaps, cmichan_getcaps),
KOBJMETHOD(channel_init, cmichan_init),
KOBJMETHOD(channel_setformat, cmichan_setformat),
KOBJMETHOD(channel_setspeed, cmichan_setspeed),
KOBJMETHOD(channel_setblocksize, cmichan_setblocksize),
KOBJMETHOD(channel_trigger, cmichan_trigger),
KOBJMETHOD(channel_getptr, cmichan_getptr),
KOBJMETHOD(channel_getcaps, cmichan_getcaps),
KOBJMETHOD_END
};
CHANNEL_DECLARE(cmichan);
@@ -754,10 +754,10 @@ cmi_initsys(struct sc_info* sc)
to a device specific sysctl "dev.pcm.X.yyy" via
device_get_sysctl_*() as discussed on multimedia@ in msg-id
<861wujij2q.fsf@xps.des.no> */
SYSCTL_ADD_INT(device_get_sysctl_ctx(sc->dev),
SYSCTL_ADD_INT(device_get_sysctl_ctx(sc->dev),
SYSCTL_CHILDREN(device_get_sysctl_tree(sc->dev)),
OID_AUTO, "spdif_enabled", CTLFLAG_RW,
&sc->spdif_enabled, 0,
OID_AUTO, "spdif_enabled", CTLFLAG_RW,
&sc->spdif_enabled, 0,
"enable SPDIF output at 44.1 kHz and above");
return 0;
@@ -778,10 +778,10 @@ MIXER_DECLARE(cmi_mixer);
static unsigned char
cmi_mread(struct mpu401 *arg, void *sc, int reg)
{
{
unsigned int d;
d = bus_space_read_1(0,0, 0x330 + reg);
d = bus_space_read_1(0,0, 0x330 + reg);
/* printf("cmi_mread: reg %x %x\n",reg, d);
*/
return d;
@@ -808,9 +808,9 @@ cmi_muninit(struct mpu401 *arg, void *cookie)
}
static kobj_method_t cmi_mpu_methods[] = {
KOBJMETHOD(mpufoi_read, cmi_mread),
KOBJMETHOD(mpufoi_write, cmi_mwrite),
KOBJMETHOD(mpufoi_uninit, cmi_muninit),
KOBJMETHOD(mpufoi_read, cmi_mread),
KOBJMETHOD(mpufoi_write, cmi_mwrite),
KOBJMETHOD(mpufoi_uninit, cmi_muninit),
KOBJMETHOD_END
};
@@ -821,19 +821,19 @@ cmi_midiattach(struct sc_info *sc) {
/*
const struct {
int port,bits;
} *p, ports[] = {
{0x330,0},
{0x320,1},
{0x310,2},
{0x300,3},
} *p, ports[] = {
{0x330,0},
{0x320,1},
{0x310,2},
{0x300,3},
{0,0} } ;
Notes, CMPCI_REG_VMPUSEL sets the io port for the mpu. Does
anyone know how to bus_space tag?
*/
cmi_clr4(sc, CMPCI_REG_FUNC_1, CMPCI_REG_UART_ENABLE);
cmi_clr4(sc, CMPCI_REG_LEGACY_CTRL,
cmi_clr4(sc, CMPCI_REG_LEGACY_CTRL,
CMPCI_REG_VMPUSEL_MASK << CMPCI_REG_VMPUSEL_SHIFT);
cmi_set4(sc, CMPCI_REG_LEGACY_CTRL,
cmi_set4(sc, CMPCI_REG_LEGACY_CTRL,
0 << CMPCI_REG_VMPUSEL_SHIFT );
cmi_set4(sc, CMPCI_REG_FUNC_1, CMPCI_REG_UART_ENABLE);
sc->mpu = mpu401_init(&cmi_mpu_class, sc, cmi_intr, &sc->mpu_intr);
+11 -11
View File
@@ -112,7 +112,7 @@ static int cs4281_init(struct sc_info *);
/* talk to the card */
static uint32_t cs4281_rd(struct sc_info *, int);
static void cs4281_wr(struct sc_info *, int, uint32_t);
static void cs4281_wr(struct sc_info *, int, uint32_t);
/* misc */
static uint8_t cs4281_rate_to_rv(uint32_t);
@@ -449,13 +449,13 @@ cs4281chan_getcaps(kobj_t obj, void *data)
}
static kobj_method_t cs4281chan_methods[] = {
KOBJMETHOD(channel_init, cs4281chan_init),
KOBJMETHOD(channel_setformat, cs4281chan_setformat),
KOBJMETHOD(channel_setspeed, cs4281chan_setspeed),
KOBJMETHOD(channel_setblocksize, cs4281chan_setblocksize),
KOBJMETHOD(channel_trigger, cs4281chan_trigger),
KOBJMETHOD(channel_getptr, cs4281chan_getptr),
KOBJMETHOD(channel_getcaps, cs4281chan_getcaps),
KOBJMETHOD(channel_init, cs4281chan_init),
KOBJMETHOD(channel_setformat, cs4281chan_setformat),
KOBJMETHOD(channel_setspeed, cs4281chan_setspeed),
KOBJMETHOD(channel_setblocksize, cs4281chan_setblocksize),
KOBJMETHOD(channel_trigger, cs4281chan_trigger),
KOBJMETHOD(channel_getptr, cs4281chan_getptr),
KOBJMETHOD(channel_getcaps, cs4281chan_getcaps),
KOBJMETHOD_END
};
CHANNEL_DECLARE(cs4281chan);
@@ -543,9 +543,9 @@ cs4281_power(struct sc_info *sc, int state)
cs4281_clr4(sc, CS4281PCI_EPPMC, CS4281PCI_EPPMC_FPDN);
break;
case 3:
/* Power off card and codec */
cs4281_set4(sc, CS4281PCI_EPPMC, CS4281PCI_EPPMC_FPDN);
cs4281_clr4(sc, CS4281PCI_SPMC, CS4281PCI_SPMC_RSTN);
/* Power off card and codec */
cs4281_set4(sc, CS4281PCI_EPPMC, CS4281PCI_EPPMC_FPDN);
cs4281_clr4(sc, CS4281PCI_SPMC, CS4281PCI_SPMC_RSTN);
break;
}
+2 -2
View File
@@ -29,10 +29,10 @@
#ifndef _CS4281_H_
#define _CS4281_H_
#define CS4281_PCI_ID 0x60051013
#define CS4281_PCI_ID 0x60051013
/* Ball Parks */
#define CS4281PCI_BA0_SIZE 4096
#define CS4281PCI_BA0_SIZE 4096
#define CS4281PCI_BA1_SIZE 65536
/* Register values */
+1 -1
View File
@@ -236,7 +236,7 @@ csa_attach(device_t dev)
scp->binfo.card = scp->card;
printf("csa: card is %s\n", scp->card->name);
resp->io_rid = PCIR_BAR(0);
resp->io = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
resp->io = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
&resp->io_rid, RF_ACTIVE);
if (resp->io == NULL)
return (ENXIO);
+10 -10
View File
@@ -164,8 +164,8 @@ csa_wrcd(kobj_t obj, void *devinfo, int regno, uint32_t data)
}
static kobj_method_t csa_ac97_methods[] = {
KOBJMETHOD(ac97_read, csa_rdcd),
KOBJMETHOD(ac97_write, csa_wrcd),
KOBJMETHOD(ac97_read, csa_rdcd),
KOBJMETHOD(ac97_write, csa_wrcd),
KOBJMETHOD_END
};
AC97_DECLARE(csa_ac97);
@@ -623,13 +623,13 @@ csachan_getcaps(kobj_t obj, void *data)
}
static kobj_method_t csachan_methods[] = {
KOBJMETHOD(channel_init, csachan_init),
KOBJMETHOD(channel_setformat, csachan_setformat),
KOBJMETHOD(channel_setspeed, csachan_setspeed),
KOBJMETHOD(channel_setblocksize, csachan_setblocksize),
KOBJMETHOD(channel_trigger, csachan_trigger),
KOBJMETHOD(channel_getptr, csachan_getptr),
KOBJMETHOD(channel_getcaps, csachan_getcaps),
KOBJMETHOD(channel_init, csachan_init),
KOBJMETHOD(channel_setformat, csachan_setformat),
KOBJMETHOD(channel_setspeed, csachan_setspeed),
KOBJMETHOD(channel_setblocksize, csachan_setblocksize),
KOBJMETHOD(channel_trigger, csachan_trigger),
KOBJMETHOD(channel_getptr, csachan_getptr),
KOBJMETHOD(channel_getcaps, csachan_getcaps),
KOBJMETHOD_END
};
CHANNEL_DECLARE(csachan);
@@ -676,7 +676,7 @@ csa_init(struct csa_info *csa)
/* Power up amplifier */
csa_writeio(resp, BA0_EGPIODR, csa_readio(resp, BA0_EGPIODR) |
EGPIODR_GPOE2);
csa_writeio(resp, BA0_EGPIOPTR, csa_readio(resp, BA0_EGPIOPTR) |
csa_writeio(resp, BA0_EGPIOPTR, csa_readio(resp, BA0_EGPIOPTR) |
EGPIOPTR_GPPT2);
return 0;
+2 -2
View File
@@ -1949,8 +1949,8 @@
#define CS_AC97_POWER_CONTROL_MIXVON_ON 0x0004
#define CS_AC97_POWER_CONTROL_MIXVOFF_ON 0x0008
/*
* this is 3*1024 for parameter, 3.5*1024 for sample and 2*3.5*1024
/*
* this is 3*1024 for parameter, 3.5*1024 for sample and 2*3.5*1024
* for code since each instruction is 40 bits and takes two dwords
*/
+8 -8
View File
@@ -50,8 +50,8 @@
#define EMUPAGESIZE 4096 /* don't change */
#define EMUMAXPAGES (WAVEOUT_MAXBUFSIZE * NUM_G / EMUPAGESIZE)
#define EMU10K1_PCI_ID 0x00021102 /* 1102 => Creative Labs Vendor ID */
#define EMU10K2_PCI_ID 0x00041102
#define EMU10K3_PCI_ID 0x00081102
#define EMU10K2_PCI_ID 0x00041102
#define EMU10K3_PCI_ID 0x00081102
#define EMU_DEFAULT_BUFSZ 4096
#define EMU_MAX_CHANS 8
#define EMU_CHANS 4
@@ -1152,10 +1152,10 @@ CHANNEL_DECLARE(emurchan);
static unsigned char
emu_mread(struct mpu401 *arg, void *sc, int reg)
{
{
unsigned int d;
d = emu_rd((struct sc_info *)sc, 0x18 + reg, 1);
d = emu_rd((struct sc_info *)sc, 0x18 + reg, 1);
return d;
}
@@ -1179,9 +1179,9 @@ emu_muninit(struct mpu401 *arg, void *cookie)
}
static kobj_method_t emu_mpu_methods[] = {
KOBJMETHOD(mpufoi_read, emu_mread),
KOBJMETHOD(mpufoi_write, emu_mwrite),
KOBJMETHOD(mpufoi_uninit, emu_muninit),
KOBJMETHOD(mpufoi_read, emu_mread),
KOBJMETHOD(mpufoi_write, emu_mwrite),
KOBJMETHOD(mpufoi_uninit, emu_muninit),
KOBJMETHOD_END
};
@@ -1957,7 +1957,7 @@ emu_init(struct sc_info *sc)
}
} else {
/* EMU10K1 initialization code */
tmp = EMU_HCFG_AUDIOENABLE | EMU_HCFG_LOCKTANKCACHE_MASK
tmp = EMU_HCFG_AUDIOENABLE | EMU_HCFG_LOCKTANKCACHE_MASK
| EMU_HCFG_AUTOMUTE;
if (sc->rev >= 6)
tmp |= EMU_HCFG_JOYENABLE;
+6 -6
View File
@@ -69,13 +69,13 @@ struct emu_pcm_rchinfo {
int fmt;
unsigned int blksz;
int run;
uint32_t idxreg;
uint32_t idxreg;
uint32_t basereg;
uint32_t sizereg;
uint32_t setupreg;
uint32_t irqmask;
uint32_t iprmask;
int ihandle;
int ihandle;
struct snd_dbuf *buffer;
struct pcm_channel *channel;
struct emu_pcm_info *pcm;
@@ -92,7 +92,7 @@ struct emu_pcm_rchinfo {
struct emu_pcm_info {
struct mtx lock;
device_t dev; /* device information */
struct emu_sc_info *card;
struct emu_sc_info *card;
struct emu_pcm_pchinfo pch[MAX_CHANNELS]; /* hardware channels */
int pnum; /* next free channel number */
struct emu_pcm_rchinfo rch_adc;
@@ -104,7 +104,7 @@ struct emu_pcm_info {
unsigned int bufsz;
int is_emu10k1;
struct ac97_info *codec;
uint32_t ac97_state[0x7F];
uint32_t ac97_state[0x7F];
kobj_class_t ac97_mixerclass;
uint32_t ac97_recdevs;
uint32_t ac97_playdevs;
@@ -1468,7 +1468,7 @@ emu_pcm_attach(device_t dev)
goto bad;
}
/*
/*
* We don't register interrupt handler with snd_setup_intr
* in pcm device. Mark pcm device as MPSAFE manually.
*/
@@ -1511,7 +1511,7 @@ emu_pcm_detach(device_t dev)
r = pcm_unregister(dev);
if (r) return (r);
if (r) return (r);
emu_pcm_uninit(sc);
+33 -33
View File
@@ -112,14 +112,14 @@
#define DSP_CCR DSP_CONST(0x17)
/* Live! Inputs */
#define IN_AC97_L 0x00
#define IN_AC97_R 0x01
#define IN_AC97_L 0x00
#define IN_AC97_R 0x01
#define IN_AC97 IN_AC97_L
#define IN_SPDIF_CD_L 0x02
#define IN_SPDIF_CD_R 0x03
#define IN_SPDIF_CD IN_SPDIF_CD_L
#define IN_ZOOM_L 0x04
#define IN_ZOOM_R 0x05
#define IN_ZOOM_L 0x04
#define IN_ZOOM_R 0x05
#define IN_ZOOM IN_ZOOM_L
#define IN_TOSLINK_L 0x06
#define IN_TOSLINK_R 0x07
@@ -141,8 +141,8 @@
#define OUT_AC97_R 0x01
#define OUT_AC97 OUT_AC97_L
#define OUT_A_FRONT OUT_AC97
#define OUT_TOSLINK_L 0x02
#define OUT_TOSLINK_R 0x03
#define OUT_TOSLINK_L 0x02
#define OUT_TOSLINK_R 0x03
#define OUT_TOSLINK OUT_TOSLINK_L
#define OUT_D_CENTER 0x04
#define OUT_D_SUB 0x05
@@ -152,7 +152,7 @@
#define OUT_REAR_L 0x08
#define OUT_REAR_R 0x09
#define OUT_REAR OUT_REAR_L
#define OUT_ADC_REC_L 0x0a
#define OUT_ADC_REC_L 0x0a
#define OUT_ADC_REC_R 0x0b
#define OUT_ADC_REC OUT_ADC_REC_L
#define OUT_MIC_CAP 0x0c
@@ -295,7 +295,7 @@ struct emu_rm {
signed int allocmap[EMU_MAX_GPR];
int num_gprs;
int last_free_gpr;
int num_used;
int num_used;
};
struct emu_intr_handler {
@@ -328,7 +328,7 @@ struct emu_sc_info {
/* Resources */
struct resource *reg;
struct resource *irq;
void *ih;
void *ih;
/* IRQ handlers */
struct emu_intr_handler ihandler[EMU_MAX_IRQ_CONSUMERS];
@@ -347,22 +347,22 @@ struct emu_sc_info {
unsigned int opcode_shift;
unsigned int high_operand_shift;
unsigned int address_mask;
uint32_t is_emu10k1:1, is_emu10k2, is_ca0102, is_ca0108:1,
uint32_t is_emu10k1:1, is_emu10k2, is_ca0102, is_ca0108:1,
has_ac97:1, has_51:1, has_71:1,
enable_ir:1,
broken_digital:1, is_cardbus:1;
signed int mch_disabled, mch_rec, dbg_level;
signed int num_inputs;
unsigned int num_outputs;
unsigned int num_fxbuses;
unsigned int routing_code_start;
signed int num_inputs;
unsigned int num_outputs;
unsigned int num_fxbuses;
unsigned int routing_code_start;
unsigned int routing_code_end;
/* HW resources */
struct emu_voice voice[NUM_G]; /* Hardware voices */
uint32_t irq_mask[EMU_MAX_IRQ_CONSUMERS]; /* IRQ manager data */
int timer[EMU_MAX_IRQ_CONSUMERS]; /* timer */
int timer[EMU_MAX_IRQ_CONSUMERS]; /* timer */
int timerinterval;
struct emu_rm *rm;
struct emu_mem mem; /* memory */
@@ -426,20 +426,20 @@ static int emu_modevent(module_t mod __unused, int cmd, void *data __unused);
#ifdef SND_EMU10KX_DEBUG
#define EMU_MTX_DEBUG() do { \
#define EMU_MTX_DEBUG() do { \
if (mtx_owned(&sc->rw)) { \
printf("RW owned in %s line %d for %s\n", __func__, \
__LINE__ , device_get_nameunit(sc->dev)); \
printf("rw lock owned: %d\n", mtx_owned(&sc->rw)); \
printf("rw lock: value %x thread %x\n", \
((&sc->rw)->mtx_lock & ~MTX_FLAGMASK), \
((&sc->rw)->mtx_lock & ~MTX_FLAGMASK), \
(uintptr_t)curthread); \
printf("rw lock: recursed %d\n", mtx_recursed(&sc->rw));\
db_show_mtx(&sc->rw); \
} \
} while (0)
#else
#define EMU_MTX_DEBUG() do { \
#define EMU_MTX_DEBUG() do { \
} while (0)
#endif
@@ -1580,7 +1580,7 @@ sysctl_emu_digitalswitch_control(SYSCTL_HANDLER_ARGS)
sc = arg1;
new_val = (sc->mode == MODE_DIGITAL) ? 1 : 0;
new_val = (sc->mode == MODE_DIGITAL) ? 1 : 0;
err = sysctl_handle_int(oidp, &new_val, 0, req);
if (err || req->newptr == NULL)
@@ -1617,20 +1617,20 @@ emu_digitalswitch(struct emu_sc_info *sc)
*/
#define EFX_CACHE(CACHE_IDX) do { \
sc->cache_gpr[CACHE_IDX] = emu_rm_gpr_alloc(sc->rm, 1); \
emu_addefxop(sc, ACC3, \
GPR(sc->cache_gpr[CACHE_IDX]), \
DSP_CONST(0), \
DSP_CONST(0), \
DSP_CONST(0), \
emu_addefxop(sc, ACC3, \
GPR(sc->cache_gpr[CACHE_IDX]), \
DSP_CONST(0), \
DSP_CONST(0), \
DSP_CONST(0), \
&pc); \
} while (0)
/* Allocate GPR for volume control and route sound: OUT = OUT + IN * VOL */
#define EFX_ROUTE(TITLE, INP_NR, IN_GPR_IDX, OUT_CACHE_IDX, DEF) do { \
#define EFX_ROUTE(TITLE, INP_NR, IN_GPR_IDX, OUT_CACHE_IDX, DEF) do { \
sc->mixer_gpr[IN_GPR_IDX] = emu_addefxmixer(sc, TITLE, IN_GPR_IDX, DEF); \
sc->mixer_volcache[IN_GPR_IDX] = DEF; \
emu_addefxop(sc, MACS, \
GPR(sc->cache_gpr[OUT_CACHE_IDX]), \
sc->mixer_volcache[IN_GPR_IDX] = DEF; \
emu_addefxop(sc, MACS, \
GPR(sc->cache_gpr[OUT_CACHE_IDX]), \
GPR(sc->cache_gpr[OUT_CACHE_IDX]), \
INP_NR, \
GPR(sc->mixer_gpr[IN_GPR_IDX]), \
@@ -1754,7 +1754,7 @@ emu_initefx(struct emu_sc_info *sc)
EFX_ROUTE(NULL, INP(IN_SPDIF_CD_R), M_IN1_FRONT_R, C_FRONT_R, 0);
EFX_ROUTE(NULL, INP(IN_SPDIF_CD_L), M_IN1_REC_L, C_REC_L, 0);
EFX_ROUTE(NULL, INP(IN_SPDIF_CD_R), M_IN1_REC_R, C_REC_R, 0);
if (sc->dbg_level > 0) {
/* in2, ZoomVide (???) */
EFX_ROUTE("zoom_front_l", INP(IN_ZOOM_L), M_IN2_FRONT_L, C_FRONT_L, 0);
@@ -2170,11 +2170,11 @@ static d_close_t emu10kx_close;
static d_read_t emu10kx_read;
static struct cdevsw emu10kx_cdevsw = {
.d_open = emu10kx_open,
.d_open = emu10kx_open,
.d_close = emu10kx_close,
.d_read = emu10kx_read,
.d_name = "emu10kx",
.d_version = D_VERSION,
.d_read = emu10kx_read,
.d_name = "emu10kx",
.d_version = D_VERSION,
};
static int
+1 -1
View File
@@ -170,7 +170,7 @@ struct emu_route {
};
struct emu_voice* emu_valloc(struct emu_sc_info *sc);
void emu_vfree(struct emu_sc_info *sc, struct emu_voice *v);
void emu_vfree(struct emu_sc_info *sc, struct emu_voice *v);
int emu_vinit(struct emu_sc_info *sc, struct emu_voice *m, struct emu_voice *s,
uint32_t sz, struct snd_dbuf *b);
void emu_vroute(struct emu_sc_info *sc, struct emu_route *rt, struct emu_voice *v);
+9 -9
View File
@@ -295,8 +295,8 @@ static struct cfg_info cfg_table[] = {
0xc0, 0xff, 0x7f,
0x10, 0x20, 0x01, 0x01, 0x00,
0x00,
&delta_codec,
},
&delta_codec,
},
{
"Envy24 audio (M Audio Audiophile 2496)",
0x1412, 0xd634,
@@ -304,8 +304,8 @@ static struct cfg_info cfg_table[] = {
0x04, 0xfe, 0xfb,
0x08, 0x02, 0x20, 0x00, 0x01,
0x00,
&delta_codec,
},
&delta_codec,
},
{
"Envy24 audio (M Audio Delta 66)",
0x1412, 0xd632,
@@ -1024,7 +1024,7 @@ envy24_delta_ak4524_init(void *codec)
/* 6fire rear input init test, set ptr->num to 1 for test */
if (ptr->parent->cfg->subvendor == 0x153b && \
ptr->parent->cfg->subdevice == 0x1138 && ptr->num == 100) {
ptr->cs = 0x02;
ptr->cs = 0x02;
spicds_init(ptr->info);
device_printf(ptr->parent->dev, "6fire rear input init\n");
i2c_wr(ptr, envy24_gpio_i2c_ctl, \
@@ -2072,7 +2072,7 @@ envy24_intr(void *p)
device_printf(sc->dev, "envy24_intr(): ptr = %d-->", ptr);
#endif
ptr -= ptr % sc->blk[0];
feed = (ptr + dsize - sc->intr[0]) % dsize;
feed = (ptr + dsize - sc->intr[0]) % dsize;
#if(0)
printf("%d intr = %d feed = %d\n", ptr, sc->intr[0], feed);
#endif
@@ -2098,7 +2098,7 @@ envy24_intr(void *p)
dsize = sc->rsize / 4;
ptr = dsize - envy24_rdmt(sc, ENVY24_MT_RCNT, 2) - 1;
ptr -= ptr % sc->blk[1];
feed = (ptr + dsize - sc->intr[1]) % dsize;
feed = (ptr + dsize - sc->intr[1]) % dsize;
for (i = ENVY24_CHAN_REC_ADC1; i <= ENVY24_CHAN_REC_SPDIF; i++) {
ch = &sc->chan[i];
if (ch->run && ch->blk <= feed) {
@@ -2534,8 +2534,8 @@ envy24_alloc_resource(struct sc_info *sc)
static int
envy24_pci_attach(device_t dev)
{
struct sc_info *sc;
char status[SND_STATUSLEN];
struct sc_info *sc;
char status[SND_STATUSLEN];
int err = 0;
int i;
+1 -1
View File
@@ -44,7 +44,7 @@
#define PCIM_LAC_SBDMA0 0x0000 /* SB DMA Channel Select: 0 */
#define PCIM_LAC_SBDMA1 0x0040 /* SB DMA Channel Select: 1 */
#define PCIM_LAC_SBDMA3 0x00c0 /* SB DMA Channel Select: 3 */
#define PCIM_LAC_IOADDR10 0x0020 /* I/O Address Alias Control */
#define PCIM_LAC_IOADDR10 0x0020 /* I/O Address Alias Control */
#define PCIM_LAC_MPU401 0x0008 /* MPU-401 I/O enable */
#define PCIM_LAC_GAME 0x0004 /* Game Port enable (200h) */
#define PCIM_LAC_FM 0x0002 /* FM I/O enable (AdLib 388h base) */
+10 -10
View File
@@ -334,16 +334,16 @@ static struct cfg_info cfg_table[] = {
},
{
"Envy24HT audio (AudioTrak Prodigy 7.1 LT)",
0x3132, 0x4154,
0x3132, 0x4154,
0x4b, 0x80, 0xfc, 0xc3,
0x7ff8ff, 0x7fffff, 0x700,
0x400, 0x200, 0x100, 0x00, 0x02,
0,
&spi_codec,
&spi_codec,
},
{
"Envy24HT audio (AudioTrak Prodigy 7.1 XT)",
0x3136, 0x4154,
0x3136, 0x4154,
0x4b, 0x80, 0xfc, 0xc3,
0x7ff8ff, 0x7fffff, 0x700,
0x400, 0x200, 0x100, 0x00, 0x02,
@@ -826,7 +826,7 @@ AC97_DECLARE(envy24ht_ac97);
static uint32_t
envy24ht_gpiord(struct sc_info *sc)
{
if (sc->cfg->subvendor == 0x153b && sc->cfg->subdevice == 0x1150)
if (sc->cfg->subvendor == 0x153b && sc->cfg->subdevice == 0x1150)
return envy24ht_rdcs(sc, ENVY24HT_CCS_GPIO_LDATA, 2);
else
return (envy24ht_rdcs(sc, ENVY24HT_CCS_GPIO_HDATA, 1) << 16 | envy24ht_rdcs(sc, ENVY24HT_CCS_GPIO_LDATA, 2));
@@ -875,7 +875,7 @@ envy24ht_gpiosetdir(struct sc_info *sc, uint32_t dir)
{
if (sc->cfg->subvendor == 0x153b && sc->cfg->subdevice == 0x1150)
envy24ht_wrcs(sc, ENVY24HT_CCS_GPIO_CTLDIR, dir, 2);
else
else
envy24ht_wrcs(sc, ENVY24HT_CCS_GPIO_CTLDIR, dir, 4);
return;
}
@@ -1224,7 +1224,7 @@ envy24ht_checkintr(struct sc_info *sc, int dir)
if ((rtn = intr & ENVY24HT_MT_INT_PSTAT) != 0) {
mask = ~ENVY24HT_MT_INT_RSTAT;
envy24ht_wrmt(sc, 0x1a, 0x01, 1);
envy24ht_wrmt(sc, ENVY24HT_MT_INT_STAT, (intr & mask) | ENVY24HT_MT_INT_PSTAT | 0x08, 1);
envy24ht_wrmt(sc, ENVY24HT_MT_INT_STAT, (intr & mask) | ENVY24HT_MT_INT_PSTAT | 0x08, 1);
stat = envy24ht_rdmt(sc, ENVY24HT_MT_INT_MASK, 1);
envy24ht_wrmt(sc, ENVY24HT_MT_INT_MASK, stat | ENVY24HT_MT_INT_PMASK, 1);
}
@@ -1986,7 +1986,7 @@ envy24ht_intr(void *p)
device_printf(sc->dev, "envy24ht_intr(): ptr = %d-->", ptr);
#endif
ptr -= ptr % sc->blk[0];
feed = (ptr + dsize - sc->intr[0]) % dsize;
feed = (ptr + dsize - sc->intr[0]) % dsize;
#if(0)
printf("%d intr = %d feed = %d\n", ptr, sc->intr[0], feed);
#endif
@@ -2012,7 +2012,7 @@ envy24ht_intr(void *p)
dsize = sc->rsize / 4;
ptr = dsize - envy24ht_rdmt(sc, ENVY24HT_MT_RCNT, 2) - 1;
ptr -= ptr % sc->blk[1];
feed = (ptr + dsize - sc->intr[1]) % dsize;
feed = (ptr + dsize - sc->intr[1]) % dsize;
for (i = ENVY24HT_CHAN_REC_ADC1; i <= ENVY24HT_CHAN_REC_SPDIF; i++) {
ch = &sc->chan[i];
if (ch->run && ch->blk <= feed) {
@@ -2438,8 +2438,8 @@ envy24ht_alloc_resource(struct sc_info *sc)
static int
envy24ht_pci_attach(device_t dev)
{
struct sc_info *sc;
char status[SND_STATUSLEN];
struct sc_info *sc;
char status[SND_STATUSLEN];
int err = 0;
int i;
+8 -8
View File
@@ -34,7 +34,7 @@
#define PCID_ENVY24HT 0x1724
#define PCIR_CCS 0x10 /* Controller I/O Base Address */
#define ENVY24HT_PCIR_MT 0x14 /* Multi-Track I/O Base Address */
#define ENVY24HT_PCIR_MT 0x14 /* Multi-Track I/O Base Address */
/* Controller Registers */
@@ -44,12 +44,12 @@
#define ENVY24HT_CCS_IMASK 0x01 /* Interrupt Mask Register */
#define ENVY24HT_CCS_IMASK_PMT 0x10 /* Professional Multi-track */
#define ENVY24HT_CCS_I2CDEV 0x10 /* I2C Port Device Address Register */
#define ENVY24HT_CCS_I2CDEV 0x10 /* I2C Port Device Address Register */
#define ENVY24HT_CCS_I2CDEV_ADDR 0xfe /* I2C device address */
#define ENVY24HT_CCS_I2CDEV_ROM 0xa0 /* reserved for the external I2C E2PROM */
#define ENVY24HT_CCS_I2CDEV_WR 0x01 /* write */
#define ENVY24HT_CCS_I2CDEV_RD 0x00 /* read */
#define ENVY24HT_CCS_I2CADDR 0x11 /* I2C Port Byte Address Register */
#define ENVY24HT_CCS_I2CDATA 0x12 /* I2C Port Read/Write Data Register */
@@ -59,9 +59,9 @@
#define ENVY24HT_CCS_SCFG 0x04 /* System Configuration Register */
#define ENVY24HT_CCSM_SCFG_XIN2 0xc0 /* XIN2 Clock Source Configuration */
/* 00: 24.576MHz(96kHz*256) */
/* 01: 49.152MHz(192kHz*256) */
/* 1x: Reserved */
/* 00: 24.576MHz(96kHz*256) */
/* 01: 49.152MHz(192kHz*256) */
/* 1x: Reserved */
#define ENVY24HT_CCSM_SCFG_MPU 0x20 /* 0(not implemented)/1(1) MPU-401 UART */
#define ENVY24HT_CCSM_SCFG_ADC 0x0c /* 1-2 stereo ADC connected, S/PDIF receiver connected */
#define ENVY24HT_CCSM_SCFG_DAC 0x03 /* 1-4 stereo DAC connected */
@@ -90,14 +90,14 @@
/* Professional Multi-Track Control Registers */
#define ENVY24HT_MT_INT_STAT 0x00 /* DMA Interrupt Mask and Status Register */
#define ENVY24HT_MT_INT_STAT 0x00 /* DMA Interrupt Mask and Status Register */
#define ENVY24HT_MT_INT_RSTAT 0x02 /* Multi-track record interrupt status */
#define ENVY24HT_MT_INT_PSTAT 0x01 /* Multi-track playback interrupt status */
#define ENVY24HT_MT_INT_MASK 0x03
#define ENVY24HT_MT_INT_RMASK 0x02 /* Multi-track record interrupt mask */
#define ENVY24HT_MT_INT_PMASK 0x01 /* Multi-track playback interrupt mask */
#define ENVY24HT_MT_RATE 0x01 /* Sampling Rate Select Register */
#define ENVY24HT_MT_RATE 0x01 /* Sampling Rate Select Register */
#define ENVY24HT_MT_RATE_SPDIF 0x10 /* S/PDIF input clock as the master */
#define ENVY24HT_MT_RATE_48000 0x00
#define ENVY24HT_MT_RATE_24000 0x01
+70 -70
View File
@@ -262,7 +262,7 @@ static const struct {
unsigned avail:1;
} mixtable[SOUND_MIXER_NRDEVICES] = {
[SOUND_MIXER_VOLUME] = { 0, 0x0, 0x1, 1, 0x1f7f, 1 },
[SOUND_MIXER_PCM] = { 1, 0x2, 0x3, 1, 0x0400, 1 },
[SOUND_MIXER_PCM] = { 1, 0x2, 0x3, 1, 0x0400, 1 },
[SOUND_MIXER_SYNTH] = { 2, 0x4, 0x5, 1, 0x0060, 1 },
[SOUND_MIXER_CD] = { 3, 0x6, 0x7, 1, 0x0006, 1 },
[SOUND_MIXER_LINE] = { 4, 0x8, 0x9, 1, 0x0018, 1 },
@@ -612,16 +612,16 @@ eschan1370_setspeed(kobj_t obj, void *data, uint32_t speed)
static uint32_t
eschan1371_setspeed(kobj_t obj, void *data, uint32_t speed)
{
struct es_chinfo *ch = data;
struct es_info *es = ch->parent;
struct es_chinfo *ch = data;
struct es_info *es = ch->parent;
uint32_t i;
int delta;
ES_LOCK(es);
if (ch->dir == PCMDIR_PLAY)
i = es1371_dac_rate(es, speed, ch->index); /* play */
i = es1371_dac_rate(es, speed, ch->index); /* play */
else
i = es1371_adc_rate(es, speed, ch->index); /* record */
i = es1371_adc_rate(es, speed, ch->index); /* record */
ES_UNLOCK(es);
delta = (speed > i) ? (speed - i) : (i - speed);
if (delta < 2)
@@ -632,8 +632,8 @@ eschan1371_setspeed(kobj_t obj, void *data, uint32_t speed)
static int
eschan_setfragments(kobj_t obj, void *data, uint32_t blksz, uint32_t blkcnt)
{
struct es_chinfo *ch = data;
struct es_info *es = ch->parent;
struct es_chinfo *ch = data;
struct es_info *es = ch->parent;
blksz &= ES_BLK_ALIGN;
@@ -671,8 +671,8 @@ eschan_setfragments(kobj_t obj, void *data, uint32_t blksz, uint32_t blkcnt)
static uint32_t
eschan_setblocksize(kobj_t obj, void *data, uint32_t blksz)
{
struct es_chinfo *ch = data;
struct es_info *es = ch->parent;
struct es_chinfo *ch = data;
struct es_info *es = ch->parent;
eschan_setfragments(obj, data, blksz, es->blkcnt);
@@ -1113,23 +1113,23 @@ es1371_wrcd(kobj_t obj, void *s, int addr, uint32_t data)
struct es_info *es = (struct es_info*)s;
for (t = 0; t < 0x1000; t++) {
if (!es_rd(es, ES1371_REG_CODEC & CODEC_WIP, 4))
if (!es_rd(es, ES1371_REG_CODEC & CODEC_WIP, 4))
break;
}
/* save the current state for later */
x = orig = es_rd(es, ES1371_REG_SMPRATE, 4);
x = orig = es_rd(es, ES1371_REG_SMPRATE, 4);
/* enable SRC state data in SRC mux */
es_wr(es, ES1371_REG_SMPRATE, (x & (ES1371_DIS_SRC | ES1371_DIS_P1 |
ES1371_DIS_P2 | ES1371_DIS_R1)) | 0x00010000, 4);
/* busy wait */
for (t = 0; t < 0x1000; t++) {
if ((es_rd(es, ES1371_REG_SMPRATE, 4) & 0x00870000) ==
if ((es_rd(es, ES1371_REG_SMPRATE, 4) & 0x00870000) ==
0x00000000)
break;
}
/* wait for a SAFE time to write addr/data and then do it, dammit */
for (t = 0; t < 0x1000; t++) {
if ((es_rd(es, ES1371_REG_SMPRATE, 4) & 0x00870000) ==
if ((es_rd(es, ES1371_REG_SMPRATE, 4) & 0x00870000) ==
0x00010000)
break;
}
@@ -1147,46 +1147,46 @@ es1371_wrcd(kobj_t obj, void *s, int addr, uint32_t data)
static int
es1371_rdcd(kobj_t obj, void *s, int addr)
{
uint32_t t, x, orig;
struct es_info *es = (struct es_info *)s;
uint32_t t, x, orig;
struct es_info *es = (struct es_info *)s;
for (t = 0; t < 0x1000; t++) {
for (t = 0; t < 0x1000; t++) {
if (!(x = es_rd(es, ES1371_REG_CODEC, 4) & CODEC_WIP))
break;
break;
}
/* save the current state for later */
x = orig = es_rd(es, ES1371_REG_SMPRATE, 4);
/* enable SRC state data in SRC mux */
es_wr(es, ES1371_REG_SMPRATE, (x & (ES1371_DIS_SRC | ES1371_DIS_P1 |
/* save the current state for later */
x = orig = es_rd(es, ES1371_REG_SMPRATE, 4);
/* enable SRC state data in SRC mux */
es_wr(es, ES1371_REG_SMPRATE, (x & (ES1371_DIS_SRC | ES1371_DIS_P1 |
ES1371_DIS_P2 | ES1371_DIS_R1)) | 0x00010000, 4);
/* busy wait */
for (t = 0; t < 0x1000; t++) {
for (t = 0; t < 0x1000; t++) {
if ((x = es_rd(es, ES1371_REG_SMPRATE, 4) & 0x00870000) ==
0x00000000)
break;
break;
}
/* wait for a SAFE time to write addr/data and then do it, dammit */
for (t = 0; t < 0x1000; t++) {
/* wait for a SAFE time to write addr/data and then do it, dammit */
for (t = 0; t < 0x1000; t++) {
if ((x = es_rd(es, ES1371_REG_SMPRATE, 4) & 0x00870000) ==
0x00010000)
break;
break;
}
es_wr(es, ES1371_REG_CODEC, ((addr << CODEC_POADD_SHIFT) &
es_wr(es, ES1371_REG_CODEC, ((addr << CODEC_POADD_SHIFT) &
CODEC_POADD_MASK) | CODEC_PORD, 4);
/* restore SRC reg */
es1371_wait_src_ready(s);
es_wr(es, ES1371_REG_SMPRATE, orig, 4);
/* restore SRC reg */
es1371_wait_src_ready(s);
es_wr(es, ES1371_REG_SMPRATE, orig, 4);
/* now wait for the stinkin' data (RDY) */
for (t = 0; t < 0x1000; t++) {
/* now wait for the stinkin' data (RDY) */
for (t = 0; t < 0x1000; t++) {
if ((x = es_rd(es, ES1371_REG_CODEC, 4)) & CODEC_RDY)
break;
break;
}
return ((x & CODEC_PIDAT_MASK) >> CODEC_PIDAT_SHIFT);
return ((x & CODEC_PIDAT_MASK) >> CODEC_PIDAT_SHIFT);
}
static kobj_method_t es1371_ac97_methods[] = {
@@ -1201,13 +1201,13 @@ AC97_DECLARE(es1371_ac97);
static unsigned int
es1371_src_read(struct es_info *es, unsigned short reg)
{
uint32_t r;
uint32_t r;
r = es1371_wait_src_ready(es) & (ES1371_DIS_SRC | ES1371_DIS_P1 |
r = es1371_wait_src_ready(es) & (ES1371_DIS_SRC | ES1371_DIS_P1 |
ES1371_DIS_P2 | ES1371_DIS_R1);
r |= ES1371_SRC_RAM_ADDRO(reg);
es_wr(es, ES1371_REG_SMPRATE, r, 4);
return (ES1371_SRC_RAM_DATAI(es1371_wait_src_ready(es)));
r |= ES1371_SRC_RAM_ADDRO(reg);
es_wr(es, ES1371_REG_SMPRATE, r, 4);
return (ES1371_SRC_RAM_DATAI(es1371_wait_src_ready(es)));
}
static void
@@ -1224,30 +1224,30 @@ es1371_src_write(struct es_info *es, unsigned short reg, unsigned short data)
static unsigned int
es1371_adc_rate(struct es_info *es, unsigned int rate, int set)
{
unsigned int n, truncm, freq, result;
unsigned int n, truncm, freq, result;
ES_LOCK_ASSERT(es);
if (rate > 48000)
if (rate > 48000)
rate = 48000;
if (rate < 4000)
if (rate < 4000)
rate = 4000;
n = rate / 3000;
if ((1 << n) & ((1 << 15) | (1 << 13) | (1 << 11) | (1 << 9)))
n = rate / 3000;
if ((1 << n) & ((1 << 15) | (1 << 13) | (1 << 11) | (1 << 9)))
n--;
truncm = (21 * n - 1) | 1;
freq = ((48000UL << 15) / rate) * n;
result = (48000UL << 15) / (freq / n);
if (set) {
truncm = (21 * n - 1) | 1;
freq = ((48000UL << 15) / rate) * n;
result = (48000UL << 15) / (freq / n);
if (set) {
if (rate >= 24000) {
if (truncm > 239)
if (truncm > 239)
truncm = 239;
es1371_src_write(es, ES_SMPREG_ADC + ES_SMPREG_TRUNC_N,
es1371_src_write(es, ES_SMPREG_ADC + ES_SMPREG_TRUNC_N,
(((239 - truncm) >> 1) << 9) | (n << 4));
} else {
if (truncm > 119)
if (truncm > 119)
truncm = 119;
es1371_src_write(es, ES_SMPREG_ADC + ES_SMPREG_TRUNC_N,
es1371_src_write(es, ES_SMPREG_ADC + ES_SMPREG_TRUNC_N,
0x8000 | (((119 - truncm) >> 1) << 9) | (n << 4));
}
es1371_src_write(es, ES_SMPREG_ADC + ES_SMPREG_INT_REGS,
@@ -1264,16 +1264,16 @@ es1371_adc_rate(struct es_info *es, unsigned int rate, int set)
static unsigned int
es1371_dac_rate(struct es_info *es, unsigned int rate, int set)
{
unsigned int freq, r, result, dac, dis;
unsigned int freq, r, result, dac, dis;
ES_LOCK_ASSERT(es);
if (rate > 48000)
if (rate > 48000)
rate = 48000;
if (rate < 4000)
if (rate < 4000)
rate = 4000;
freq = ((rate << 15) + 1500) / 3000;
result = (freq * 3000) >> 15;
freq = ((rate << 15) + 1500) / 3000;
result = (freq * 3000) >> 15;
dac = (set == ES_DAC1) ? ES_SMPREG_DAC1 : ES_SMPREG_DAC2;
dis = (set == ES_DAC1) ? ES1371_DIS_P2 : ES1371_DIS_P1;
@@ -1287,23 +1287,23 @@ es1371_dac_rate(struct es_info *es, unsigned int rate, int set)
r = (es1371_wait_src_ready(es) &
(ES1371_DIS_SRC | dis | ES1371_DIS_R1));
es_wr(es, ES1371_REG_SMPRATE, r, 4);
return (result);
return (result);
}
static uint32_t
es1371_wait_src_ready(struct es_info *es)
{
uint32_t t, r;
uint32_t t, r;
for (t = 0; t < 0x1000; t++) {
for (t = 0; t < 0x1000; t++) {
if (!((r = es_rd(es, ES1371_REG_SMPRATE, 4)) &
ES1371_SRC_RAM_BUSY))
return (r);
return (r);
DELAY(1);
}
}
device_printf(es->dev, "%s: timed out 0x%x [0x%x]\n", __func__,
ES1371_REG_SMPRATE, r);
return (0);
return (0);
}
/* -------------------------------------------------------------------- */
@@ -1805,25 +1805,25 @@ es_pci_attach(device_t dev)
case CT4730_PCI_ID:
es1371_init(es);
codec = AC97_CREATE(dev, es, es1371_ac97);
if (codec == NULL)
if (codec == NULL)
goto bad;
/* our init routine does everything for us */
/* set to NULL; flag mixer_init not to run the ac97_init */
/* ac97_mixer.init = NULL; */
/* our init routine does everything for us */
/* set to NULL; flag mixer_init not to run the ac97_init */
/* ac97_mixer.init = NULL; */
if (mixer_init(dev, ac97_getmixerclass(), codec))
goto bad;
ct = &eschan1371_class;
break;
case ES1370_PCI_ID:
es1370_init(es);
/*
es1370_init(es);
/*
* Disable fixed rate operation if DAC2 disabled.
* This is a special case for es1370 only, where the
* speed of both ADC and DAC2 locked together.
*/
if (!ES_DAC2_ENABLED(es->escfg))
es->escfg = ES_SET_FIXED_RATE(es->escfg, 0);
if (mixer_init(dev, &es1370_mixer_class, es))
if (mixer_init(dev, &es1370_mixer_class, es))
goto bad;
ct = &eschan1370_class;
break;
+17 -17
View File
@@ -272,8 +272,8 @@ fm801_wrcd(kobj_t obj, void *devinfo, int regno, uint32_t data)
}
static kobj_method_t fm801_ac97_methods[] = {
KOBJMETHOD(ac97_read, fm801_rdcd),
KOBJMETHOD(ac97_write, fm801_wrcd),
KOBJMETHOD(ac97_read, fm801_rdcd),
KOBJMETHOD(ac97_write, fm801_wrcd),
DEVMETHOD_END
};
AC97_DECLARE(fm801_ac97);
@@ -286,8 +286,8 @@ AC97_DECLARE(fm801_ac97);
static void
fm801_intr(void *p)
{
struct fm801_info *fm801 = (struct fm801_info *)p;
uint32_t intsrc = fm801_rd(fm801, FM_INTSTATUS, 2);
struct fm801_info *fm801 = (struct fm801_info *)p;
uint32_t intsrc = fm801_rd(fm801, FM_INTSTATUS, 2);
DPRINT("\nfm801_intr intsrc 0x%x ", intsrc);
@@ -519,13 +519,13 @@ fm801ch_getcaps(kobj_t obj, void *data)
}
static kobj_method_t fm801ch_methods[] = {
KOBJMETHOD(channel_init, fm801ch_init),
KOBJMETHOD(channel_setformat, fm801ch_setformat),
KOBJMETHOD(channel_setspeed, fm801ch_setspeed),
KOBJMETHOD(channel_setblocksize, fm801ch_setblocksize),
KOBJMETHOD(channel_trigger, fm801ch_trigger),
KOBJMETHOD(channel_getptr, fm801ch_getptr),
KOBJMETHOD(channel_getcaps, fm801ch_getcaps),
KOBJMETHOD(channel_init, fm801ch_init),
KOBJMETHOD(channel_setformat, fm801ch_setformat),
KOBJMETHOD(channel_setspeed, fm801ch_setspeed),
KOBJMETHOD(channel_setblocksize, fm801ch_setblocksize),
KOBJMETHOD(channel_trigger, fm801ch_trigger),
KOBJMETHOD(channel_getptr, fm801ch_getptr),
KOBJMETHOD(channel_getcaps, fm801ch_getcaps),
DEVMETHOD_END
};
CHANNEL_DECLARE(fm801ch);
@@ -569,11 +569,11 @@ fm801_init(struct fm801_info *fm801)
static int
fm801_pci_attach(device_t dev)
{
struct ac97_info *codec = NULL;
struct fm801_info *fm801;
int i;
int mapped = 0;
char status[SND_STATUSLEN];
struct ac97_info *codec = NULL;
struct fm801_info *fm801;
int i;
int mapped = 0;
char status[SND_STATUSLEN];
fm801 = malloc(sizeof(*fm801), M_DEVBUF, M_WAITOK | M_ZERO);
fm801->type = pci_get_devid(dev);
@@ -588,7 +588,7 @@ fm801_pci_attach(device_t dev)
if(!fm801->reg)
{
fm801->regtype = SYS_RES_IOPORT;
fm801->reg = bus_alloc_resource_any(dev,
fm801->reg = bus_alloc_resource_any(dev,
fm801->regtype,
&fm801->regid,
RF_ACTIVE);
+11 -11
View File
@@ -351,7 +351,7 @@ ich_resetchan(struct sc_info *sc, int num)
return (0);
#if 0
else if (sc->vendor == NVIDIA_VENDORID) {
sc->flags |= ICH_IGNORE_RESET;
sc->flags |= ICH_IGNORE_RESET;
device_printf(sc->dev, "ignoring reset failure!\n");
return (0);
}
@@ -544,7 +544,7 @@ ichchan_getptr(kobj_t obj, void *data)
{
struct sc_chinfo *ch = data;
struct sc_info *sc = ch->parent;
uint32_t pos;
uint32_t pos;
ICH_DEBUG(
if (!(sc->flags & ICH_CALIBRATE_DONE))
@@ -802,7 +802,7 @@ ich_calibrate(void *arg)
device_printf(sc->dev, "measured ac97 link rate at %d Hz", actual_48k_rate);
if (sc->ac97rate != actual_48k_rate)
printf(", will use %d Hz", sc->ac97rate);
printf("\n");
printf("\n");
}
sc->flags |= ICH_CALIBRATE_DONE;
ICH_UNLOCK(sc);
@@ -884,7 +884,7 @@ ich_pci_attach(device_t dev)
uint32_t subdev;
uint16_t extcaps;
uint16_t devid, vendor;
struct sc_info *sc;
struct sc_info *sc;
int i;
sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO);
@@ -927,7 +927,7 @@ ich_pci_attach(device_t dev)
* read-only. Need to enable "legacy support", by poking into
* pci config space. The driver should use MMBAR and MBBAR,
* but doing so will mess things up here. ich4 has enough new
* features it warrants it's own driver.
* features it warrants it's own driver.
*/
if (vendor == INTEL_VENDORID && (devid == INTEL_82801DB ||
devid == INTEL_82801EB || devid == INTEL_6300ESB ||
@@ -942,9 +942,9 @@ ich_pci_attach(device_t dev)
sc->regtype = SYS_RES_IOPORT;
}
sc->nambar = bus_alloc_resource_any(dev, sc->regtype,
sc->nambar = bus_alloc_resource_any(dev, sc->regtype,
&sc->nambarid, RF_ACTIVE);
sc->nabmbar = bus_alloc_resource_any(dev, sc->regtype,
sc->nabmbar = bus_alloc_resource_any(dev, sc->regtype,
&sc->nabmbarid, RF_ACTIVE);
if (!sc->nambar || !sc->nabmbar) {
@@ -1147,14 +1147,14 @@ ich_pci_codec_reset(struct sc_info *sc)
int i;
uint32_t control;
control = ich_rd(sc, ICH_REG_GLOB_CNT, 4);
control = ich_rd(sc, ICH_REG_GLOB_CNT, 4);
control &= ~(ICH_GLOB_CTL_SHUT);
control |= (control & ICH_GLOB_CTL_COLD) ?
ICH_GLOB_CTL_WARM : ICH_GLOB_CTL_COLD;
ich_wr(sc, ICH_REG_GLOB_CNT, control, 4);
for (i = 500000; i; i--) {
if (ich_rd(sc, ICH_REG_GLOB_STA, 4) & ICH_GLOB_STA_PCR)
if (ich_rd(sc, ICH_REG_GLOB_STA, 4) & ICH_GLOB_STA_PCR)
break; /* or ICH_SCR? */
DELAY(1);
}
@@ -1203,7 +1203,7 @@ ich_pci_resume(device_t dev)
ich_pci_codec_reset(sc);
ICH_UNLOCK(sc);
ac97_setextmode(sc->codec, sc->hasvra | sc->hasvrm);
if (mixer_reinit(dev) == -1) {
if (mixer_reinit(dev) == -1) {
device_printf(dev, "unable to reinitialize the mixer\n");
return (ENXIO);
}
@@ -1224,7 +1224,7 @@ static device_method_t ich_methods[] = {
DEVMETHOD(device_probe, ich_pci_probe),
DEVMETHOD(device_attach, ich_pci_attach),
DEVMETHOD(device_detach, ich_pci_detach),
DEVMETHOD(device_suspend, ich_pci_suspend),
DEVMETHOD(device_suspend, ich_pci_suspend),
DEVMETHOD(device_resume, ich_pci_resume),
DEVMETHOD_END
};
+11 -11
View File
@@ -194,7 +194,7 @@ static int m3_chan_active(struct sc_info *);
/* talk to the codec - called from ac97.c */
static uint32_t m3_initcd(kobj_t, void *);
static int m3_rdcd(kobj_t, void *, int);
static int m3_wrcd(kobj_t, void *, int, uint32_t);
static int m3_wrcd(kobj_t, void *, int, uint32_t);
/* stuff */
static void m3_intr(void *);
@@ -661,9 +661,9 @@ m3_pchan_trigger_locked(kobj_t kobj, void *chdata, int go)
/*[[inc_timer_users]]*/
if (m3_chan_active(sc) == 1) {
m3_wr_assp_data(sc, KDATA_TIMER_COUNT_RELOAD, 240);
m3_wr_assp_data(sc, KDATA_TIMER_COUNT_CURRENT, 240);
m3_wr_assp_data(sc, KDATA_TIMER_COUNT_CURRENT, 240);
data = m3_rd_2(sc, HOST_INT_CTRL);
m3_wr_2(sc, HOST_INT_CTRL, data | CLKRUN_GEN_ENABLE);
m3_wr_2(sc, HOST_INT_CTRL, data | CLKRUN_GEN_ENABLE);
}
m3_wr_assp_data(sc, ch->dac_data + CDATA_INSTANCE_READY, 1);
@@ -683,8 +683,8 @@ m3_pchan_trigger_locked(kobj_t kobj, void *chdata, int go)
/*[[dec_timer_users]]*/
if (m3_chan_active(sc) == 0) {
m3_wr_assp_data(sc, KDATA_TIMER_COUNT_RELOAD, 0);
m3_wr_assp_data(sc, KDATA_TIMER_COUNT_CURRENT, 0);
data = m3_rd_2(sc, HOST_INT_CTRL);
m3_wr_assp_data(sc, KDATA_TIMER_COUNT_CURRENT, 0);
data = m3_rd_2(sc, HOST_INT_CTRL);
m3_wr_2(sc, HOST_INT_CTRL, data & ~CLKRUN_GEN_ENABLE);
}
@@ -755,7 +755,7 @@ m3_rchan_init(kobj_t kobj, void *devinfo, struct snd_dbuf *b, struct pcm_channel
uint32_t bus_addr, i;
int idx, data_bytes, adc_data;
int dsp_in_size, dsp_out_size, dsp_in_buf, dsp_out_buf;
int dsp_in_size, dsp_out_size, dsp_in_buf, dsp_out_buf;
struct data_word {
uint16_t addr, val;
@@ -1017,8 +1017,8 @@ m3_rchan_trigger_locked(kobj_t kobj, void *chdata, int go)
/*[[inc_timer_users]]*/
if (m3_chan_active(sc) == 1) {
m3_wr_assp_data(sc, KDATA_TIMER_COUNT_RELOAD, 240);
m3_wr_assp_data(sc, KDATA_TIMER_COUNT_CURRENT, 240);
data = m3_rd_2(sc, HOST_INT_CTRL);
m3_wr_assp_data(sc, KDATA_TIMER_COUNT_CURRENT, 240);
data = m3_rd_2(sc, HOST_INT_CTRL);
m3_wr_2(sc, HOST_INT_CTRL, data | CLKRUN_GEN_ENABLE);
}
@@ -1036,8 +1036,8 @@ m3_rchan_trigger_locked(kobj_t kobj, void *chdata, int go)
/*[[dec_timer_users]]*/
if (m3_chan_active(sc) == 0) {
m3_wr_assp_data(sc, KDATA_TIMER_COUNT_RELOAD, 0);
m3_wr_assp_data(sc, KDATA_TIMER_COUNT_CURRENT, 0);
data = m3_rd_2(sc, HOST_INT_CTRL);
m3_wr_assp_data(sc, KDATA_TIMER_COUNT_CURRENT, 0);
data = m3_rd_2(sc, HOST_INT_CTRL);
m3_wr_2(sc, HOST_INT_CTRL, data & ~CLKRUN_GEN_ENABLE);
}
@@ -1338,7 +1338,7 @@ m3_pci_attach(device_t dev)
if (resource_int_value(device_get_name(dev), device_get_unit(dev),
"dac", &i) == 0) {
if (i < 1)
if (i < 1)
dacn = 1;
else if (i > M3_PCHANS)
dacn = M3_PCHANS;
+24 -24
View File
@@ -44,8 +44,8 @@
#define NM_BUFFSIZE 16384
#define NM256AV_PCI_ID 0x800510c8
#define NM256ZX_PCI_ID 0x800610c8
#define NM256AV_PCI_ID 0x800510c8
#define NM256ZX_PCI_ID 0x800610c8
struct sc_info;
@@ -61,13 +61,13 @@ struct sc_chinfo {
/* device private data */
struct sc_info {
device_t dev;
uint32_t type;
uint32_t type;
struct resource *reg, *irq, *buf;
int regid, irqid, bufid;
void *ih;
uint32_t ac97_base, ac97_status, ac97_busy;
uint32_t ac97_base, ac97_status, ac97_busy;
uint32_t buftop, pbuf, rbuf, cbuf, acbuf;
uint32_t playint, recint, misc1int, misc2int;
uint32_t irsz, badintr;
@@ -82,16 +82,16 @@ struct sc_info {
*/
/* stuff */
static int nm_loadcoeff(struct sc_info *sc, int dir, int num);
static int nm_loadcoeff(struct sc_info *sc, int dir, int num);
static int nm_setch(struct sc_chinfo *ch);
static int nm_init(struct sc_info *);
static void nm_intr(void *);
/* talk to the card */
static uint32_t nm_rd(struct sc_info *, int, int);
static void nm_wr(struct sc_info *, int, uint32_t, int);
static void nm_wr(struct sc_info *, int, uint32_t, int);
static uint32_t nm_rdbuf(struct sc_info *, int, int);
static void nm_wrbuf(struct sc_info *, int, uint32_t, int);
static void nm_wrbuf(struct sc_info *, int, uint32_t, int);
static uint32_t badcards[] = {
0x0007103c,
@@ -278,9 +278,9 @@ nm_wrcd(kobj_t obj, void *devinfo, int regno, uint32_t data)
}
static kobj_method_t nm_ac97_methods[] = {
KOBJMETHOD(ac97_init, nm_initcd),
KOBJMETHOD(ac97_read, nm_rdcd),
KOBJMETHOD(ac97_write, nm_wrcd),
KOBJMETHOD(ac97_init, nm_initcd),
KOBJMETHOD(ac97_read, nm_rdcd),
KOBJMETHOD(ac97_write, nm_wrcd),
KOBJMETHOD_END
};
AC97_DECLARE(nm_ac97);
@@ -470,14 +470,14 @@ nmchan_getcaps(kobj_t obj, void *data)
}
static kobj_method_t nmchan_methods[] = {
KOBJMETHOD(channel_init, nmchan_init),
KOBJMETHOD(channel_free, nmchan_free),
KOBJMETHOD(channel_setformat, nmchan_setformat),
KOBJMETHOD(channel_setspeed, nmchan_setspeed),
KOBJMETHOD(channel_setblocksize, nmchan_setblocksize),
KOBJMETHOD(channel_trigger, nmchan_trigger),
KOBJMETHOD(channel_getptr, nmchan_getptr),
KOBJMETHOD(channel_getcaps, nmchan_getcaps),
KOBJMETHOD(channel_init, nmchan_init),
KOBJMETHOD(channel_free, nmchan_free),
KOBJMETHOD(channel_setformat, nmchan_setformat),
KOBJMETHOD(channel_setspeed, nmchan_setspeed),
KOBJMETHOD(channel_setblocksize, nmchan_setblocksize),
KOBJMETHOD(channel_trigger, nmchan_trigger),
KOBJMETHOD(channel_getptr, nmchan_getptr),
KOBJMETHOD(channel_getcaps, nmchan_getcaps),
KOBJMETHOD_END
};
CHANNEL_DECLARE(nmchan);
@@ -516,18 +516,18 @@ nm_intr(void *p)
nm_ackint(sc, sc->misc1int);
x = nm_rd(sc, 0x400, 1);
nm_wr(sc, 0x400, x | 2, 1);
device_printf(sc->dev, "misc int 1\n");
device_printf(sc->dev, "misc int 1\n");
}
if (status & sc->misc2int) {
status &= ~sc->misc2int;
nm_ackint(sc, sc->misc2int);
x = nm_rd(sc, 0x400, 1);
nm_wr(sc, 0x400, x & ~2, 1);
device_printf(sc->dev, "misc int 2\n");
device_printf(sc->dev, "misc int 2\n");
}
if (status) {
nm_ackint(sc, status);
device_printf(sc->dev, "unknown int\n");
device_printf(sc->dev, "unknown int\n");
}
}
@@ -573,7 +573,7 @@ nm_init(struct sc_info *sc)
if (bootverbose)
device_printf(sc->dev, "buftop is 0x%08x\n", sc->buftop);
if ((nm_rdbuf(sc, ofs, 4) & NM_SIG_MASK) == NM_SIGNATURE) {
if ((nm_rdbuf(sc, ofs, 4) & NM_SIG_MASK) == NM_SIGNATURE) {
i = nm_rdbuf(sc, ofs + 4, 4);
if (i != 0 && i != 0xffffffff) {
if (bootverbose)
@@ -665,7 +665,7 @@ nm_pci_attach(device_t dev)
{
struct sc_info *sc;
struct ac97_info *codec = NULL;
char status[SND_STATUSLEN];
char status[SND_STATUSLEN];
sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO);
sc->dev = dev;
@@ -783,7 +783,7 @@ nm_pci_resume(device_t dev)
nm_wr(sc, 0x214, 0, 2);
/* Reinit mixer */
if (mixer_reinit(dev) == -1) {
if (mixer_reinit(dev) == -1) {
device_printf(dev, "unable to reinitialize the mixer\n");
return ENXIO;
}
+100 -100
View File
@@ -87,16 +87,16 @@ struct ess_chinfo {
};
struct ess_info {
struct resource *io, *sb, *vc, *mpu, *gp; /* I/O address for the board */
struct resource *irq;
struct resource *io, *sb, *vc, *mpu, *gp; /* I/O address for the board */
struct resource *irq;
void *ih;
bus_dma_tag_t parent_dmat;
bus_dma_tag_t parent_dmat;
int simplex_dir, type, dmasz[2];
int simplex_dir, type, dmasz[2];
unsigned int duplex:1, newspeed:1;
unsigned int bufsz;
struct ess_chinfo pch, rch;
struct ess_chinfo pch, rch;
struct mtx lock;
};
@@ -196,106 +196,106 @@ ess_dspready(struct ess_info *sc)
static int
ess_dspwr(struct ess_info *sc, uint8_t val)
{
int i;
int i;
for (i = 0; i < 1000; i++) {
for (i = 0; i < 1000; i++) {
if (ess_dspready(sc)) {
ess_wr(sc, SBDSP_CMD, val);
return 1;
ess_wr(sc, SBDSP_CMD, val);
return 1;
}
if (i > 10) DELAY((i > 100)? 1000 : 10);
}
printf("ess_dspwr(0x%02x) timed out.\n", val);
return 0;
}
printf("ess_dspwr(0x%02x) timed out.\n", val);
return 0;
}
static int
ess_cmd(struct ess_info *sc, uint8_t val)
{
DEB(printf("ess_cmd: %x\n", val));
return ess_dspwr(sc, val);
return ess_dspwr(sc, val);
}
static int
ess_cmd1(struct ess_info *sc, uint8_t cmd, int val)
{
DEB(printf("ess_cmd1: %x, %x\n", cmd, val));
if (ess_dspwr(sc, cmd)) {
DEB(printf("ess_cmd1: %x, %x\n", cmd, val));
if (ess_dspwr(sc, cmd)) {
return ess_dspwr(sc, val & 0xff);
} else return 0;
} else return 0;
}
static void
ess_setmixer(struct ess_info *sc, unsigned int port, unsigned int value)
{
DEB(printf("ess_setmixer: reg=%x, val=%x\n", port, value);)
ess_wr(sc, SB_MIX_ADDR, (uint8_t) (port & 0xff)); /* Select register */
DELAY(10);
ess_wr(sc, SB_MIX_DATA, (uint8_t) (value & 0xff));
DELAY(10);
ess_wr(sc, SB_MIX_ADDR, (uint8_t) (port & 0xff)); /* Select register */
DELAY(10);
ess_wr(sc, SB_MIX_DATA, (uint8_t) (value & 0xff));
DELAY(10);
}
static int
ess_getmixer(struct ess_info *sc, unsigned int port)
{
int val;
int val;
ess_wr(sc, SB_MIX_ADDR, (uint8_t) (port & 0xff)); /* Select register */
DELAY(10);
val = ess_rd(sc, SB_MIX_DATA);
DELAY(10);
ess_wr(sc, SB_MIX_ADDR, (uint8_t) (port & 0xff)); /* Select register */
DELAY(10);
val = ess_rd(sc, SB_MIX_DATA);
DELAY(10);
return val;
return val;
}
static int
ess_get_byte(struct ess_info *sc)
{
int i;
int i;
for (i = 1000; i > 0; i--) {
for (i = 1000; i > 0; i--) {
if (ess_rd(sc, 0xc) & 0x40)
return ess_rd(sc, DSP_READ);
else
DELAY(20);
}
return -1;
}
return -1;
}
static int
ess_write(struct ess_info *sc, uint8_t reg, int val)
{
return ess_cmd1(sc, reg, val);
return ess_cmd1(sc, reg, val);
}
static int
ess_read(struct ess_info *sc, uint8_t reg)
{
return (ess_cmd(sc, 0xc0) && ess_cmd(sc, reg))? ess_get_byte(sc) : -1;
return (ess_cmd(sc, 0xc0) && ess_cmd(sc, reg))? ess_get_byte(sc) : -1;
}
static int
ess_reset_dsp(struct ess_info *sc)
{
DEB(printf("ess_reset_dsp\n"));
ess_wr(sc, SBDSP_RST, 3);
DELAY(100);
ess_wr(sc, SBDSP_RST, 0);
if (ess_get_byte(sc) != 0xAA) {
DEB(printf("ess_reset_dsp failed\n"));
ess_wr(sc, SBDSP_RST, 3);
DELAY(100);
ess_wr(sc, SBDSP_RST, 0);
if (ess_get_byte(sc) != 0xAA) {
DEB(printf("ess_reset_dsp failed\n"));
/*
rman_get_start(d->io_base)));
*/
return ENXIO; /* Sorry */
}
ess_cmd(sc, 0xc6);
return 0;
}
ess_cmd(sc, 0xc6);
return 0;
}
static void
ess_intr(void *arg)
{
struct ess_info *sc = (struct ess_info *)arg;
struct ess_info *sc = (struct ess_info *)arg;
int src, pirq = 0, rirq = 0;
ess_lock(sc);
@@ -353,7 +353,7 @@ ess_intr(void *arg)
if (src & 2)
ess_setmixer(sc, 0x7a, ess_getmixer(sc, 0x7a) & ~0x80);
if (src & 1)
ess_rd(sc, DSP_DATA_AVAIL);
ess_rd(sc, DSP_DATA_AVAIL);
ess_unlock(sc);
}
@@ -439,7 +439,7 @@ ess_setupch(struct ess_info *sc, int ch, int dir, int spd, uint32_t fmt, int len
/* demand mode, 4 bytes/xfer */
ess_write(sc, 0xb9, 0x02);
/* sample rate */
ess_write(sc, 0xa1, spdval);
ess_write(sc, 0xa1, spdval);
/* filter cutoff */
ess_write(sc, 0xa2, ess_calcfilter(spd));
/* setup dac/adc */
@@ -622,13 +622,13 @@ esschan_getcaps(kobj_t obj, void *data)
}
static kobj_method_t esschan_methods[] = {
KOBJMETHOD(channel_init, esschan_init),
KOBJMETHOD(channel_setformat, esschan_setformat),
KOBJMETHOD(channel_setspeed, esschan_setspeed),
KOBJMETHOD(channel_setblocksize, esschan_setblocksize),
KOBJMETHOD(channel_trigger, esschan_trigger),
KOBJMETHOD(channel_getptr, esschan_getptr),
KOBJMETHOD(channel_getcaps, esschan_getcaps),
KOBJMETHOD(channel_init, esschan_init),
KOBJMETHOD(channel_setformat, esschan_setformat),
KOBJMETHOD(channel_setspeed, esschan_setspeed),
KOBJMETHOD(channel_setblocksize, esschan_setblocksize),
KOBJMETHOD(channel_trigger, esschan_trigger),
KOBJMETHOD(channel_getptr, esschan_getptr),
KOBJMETHOD(channel_getcaps, esschan_getcaps),
KOBJMETHOD_END
};
CHANNEL_DECLARE(esschan);
@@ -638,7 +638,7 @@ CHANNEL_DECLARE(esschan);
static int
essmix_init(struct snd_mixer *m)
{
struct ess_info *sc = mix_getdevinfo(m);
struct ess_info *sc = mix_getdevinfo(m);
mix_setrecdevs(m, SOUND_MASK_CD | SOUND_MASK_MIC | SOUND_MASK_LINE |
SOUND_MASK_IMIX);
@@ -655,8 +655,8 @@ essmix_init(struct snd_mixer *m)
static int
essmix_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right)
{
struct ess_info *sc = mix_getdevinfo(m);
int preg = 0, rreg = 0, l, r;
struct ess_info *sc = mix_getdevinfo(m);
int preg = 0, rreg = 0, l, r;
l = (left * 15) / 100;
r = (right * 15) / 100;
@@ -698,7 +698,7 @@ essmix_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right)
ess_setmixer(sc, 0x62, r);
left = (l == 64)? 0 : (l * 100) / 63;
right = (r == 64)? 0 : (r * 100) / 63;
return left | (right << 8);
return left | (right << 8);
}
if (preg)
@@ -709,16 +709,16 @@ essmix_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right)
left = (l * 100) / 15;
right = (r * 100) / 15;
return left | (right << 8);
return left | (right << 8);
}
static uint32_t
essmix_setrecsrc(struct snd_mixer *m, uint32_t src)
{
struct ess_info *sc = mix_getdevinfo(m);
uint8_t recdev;
struct ess_info *sc = mix_getdevinfo(m);
uint8_t recdev;
switch (src) {
switch (src) {
case SOUND_MASK_CD:
recdev = 0x02;
break;
@@ -744,9 +744,9 @@ essmix_setrecsrc(struct snd_mixer *m, uint32_t src)
}
static kobj_method_t solomixer_methods[] = {
KOBJMETHOD(mixer_init, essmix_init),
KOBJMETHOD(mixer_set, essmix_set),
KOBJMETHOD(mixer_setrecsrc, essmix_setrecsrc),
KOBJMETHOD(mixer_init, essmix_init),
KOBJMETHOD(mixer_set, essmix_set),
KOBJMETHOD(mixer_setrecsrc, essmix_setrecsrc),
KOBJMETHOD_END
};
MIXER_DECLARE(solomixer);
@@ -819,45 +819,45 @@ ess_dmatrigger(struct ess_info *sc, int ch, int go)
static void
ess_release_resources(struct ess_info *sc, device_t dev)
{
if (sc->irq) {
if (sc->irq) {
if (sc->ih)
bus_teardown_intr(dev, sc->irq, sc->ih);
bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq);
sc->irq = NULL;
}
if (sc->io) {
}
if (sc->io) {
bus_release_resource(dev, SYS_RES_IOPORT, PCIR_BAR(0), sc->io);
sc->io = NULL;
}
}
if (sc->sb) {
if (sc->sb) {
bus_release_resource(dev, SYS_RES_IOPORT, PCIR_BAR(1), sc->sb);
sc->sb = NULL;
}
}
if (sc->vc) {
if (sc->vc) {
bus_release_resource(dev, SYS_RES_IOPORT, PCIR_BAR(2), sc->vc);
sc->vc = NULL;
}
}
if (sc->mpu) {
if (sc->mpu) {
bus_release_resource(dev, SYS_RES_IOPORT, PCIR_BAR(3), sc->mpu);
sc->mpu = NULL;
}
}
if (sc->gp) {
if (sc->gp) {
bus_release_resource(dev, SYS_RES_IOPORT, PCIR_BAR(4), sc->gp);
sc->gp = NULL;
}
}
if (sc->parent_dmat) {
bus_dma_tag_destroy(sc->parent_dmat);
sc->parent_dmat = 0;
}
}
mtx_destroy(&sc->lock);
free(sc, M_DEVBUF);
free(sc, M_DEVBUF);
}
static int
@@ -866,19 +866,19 @@ ess_alloc_resources(struct ess_info *sc, device_t dev)
int rid;
rid = PCIR_BAR(0);
sc->io = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
sc->io = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
rid = PCIR_BAR(1);
sc->sb = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
sc->sb = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
rid = PCIR_BAR(2);
sc->vc = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
sc->vc = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
rid = PCIR_BAR(3);
sc->mpu = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
sc->mpu = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
rid = PCIR_BAR(4);
sc->gp = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
sc->gp = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
rid = 0;
sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
@@ -916,15 +916,15 @@ ess_probe(device_t dev)
#define ESS_PCI_LEGACYCONTROL 0x40
#define ESS_PCI_CONFIG 0x50
#define ESS_PCI_DDMACONTROL 0x60
#define ESS_PCI_DDMACONTROL 0x60
static int
static int
ess_suspend(device_t dev)
{
return 0;
}
static int
static int
ess_resume(device_t dev)
{
uint16_t ddma;
@@ -936,12 +936,12 @@ ess_resume(device_t dev)
pci_write_config(dev, ESS_PCI_DDMACONTROL, ddma, 2);
pci_write_config(dev, ESS_PCI_CONFIG, 0, 2);
if (ess_reset_dsp(sc)) {
if (ess_reset_dsp(sc)) {
ess_unlock(sc);
goto no;
}
ess_unlock(sc);
if (mixer_reinit(dev))
if (mixer_reinit(dev))
goto no;
ess_lock(sc);
if (sc->newspeed)
@@ -958,14 +958,14 @@ ess_resume(device_t dev)
static int
ess_attach(device_t dev)
{
struct ess_info *sc;
char status[SND_STATUSLEN];
struct ess_info *sc;
char status[SND_STATUSLEN];
uint16_t ddma;
sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO);
pci_enable_busmaster(dev);
if (ess_alloc_resources(sc, dev))
if (ess_alloc_resources(sc, dev))
goto no;
sc->bufsz = pcm_getbuffersize(dev, 4096, SOLO_DEFAULT_BUFSZ, 65536);
@@ -992,13 +992,13 @@ ess_attach(device_t dev)
goto no;
}
if (!sc->duplex)
if (!sc->duplex)
pcm_setflags(dev, pcm_getflags(dev) | SD_F_SIMPLEX);
#if 0
if (bus_dma_tag_create(/*parent*/bus_get_dma_tag(dev), /*alignment*/65536, /*boundary*/0,
if (bus_dma_tag_create(/*parent*/bus_get_dma_tag(dev), /*alignment*/65536, /*boundary*/0,
#endif
if (bus_dma_tag_create(/*parent*/bus_get_dma_tag(dev), /*alignment*/2, /*boundary*/0,
if (bus_dma_tag_create(/*parent*/bus_get_dma_tag(dev), /*alignment*/2, /*boundary*/0,
/*lowaddr*/BUS_SPACE_MAXADDR_24BIT,
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
@@ -1009,9 +1009,9 @@ ess_attach(device_t dev)
&sc->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto no;
}
}
if (ess_reset_dsp(sc))
if (ess_reset_dsp(sc))
goto no;
if (sc->newspeed)
@@ -1019,24 +1019,24 @@ ess_attach(device_t dev)
pcm_init(dev, sc);
if (mixer_init(dev, &solomixer_class, sc))
if (mixer_init(dev, &solomixer_class, sc))
goto no;
snprintf(status, SND_STATUSLEN, "port 0x%jx,0x%jx,0x%jx irq %jd on %s",
rman_get_start(sc->io), rman_get_start(sc->sb), rman_get_start(sc->vc),
rman_get_start(sc->io), rman_get_start(sc->sb), rman_get_start(sc->vc),
rman_get_start(sc->irq),
device_get_nameunit(device_get_parent(dev)));
pcm_addchan(dev, PCMDIR_REC, &esschan_class, sc);
pcm_addchan(dev, PCMDIR_REC, &esschan_class, sc);
pcm_addchan(dev, PCMDIR_PLAY, &esschan_class, sc);
if (pcm_register(dev, status))
goto no;
return 0;
return 0;
no:
ess_release_resources(sc, dev);
return ENXIO;
ess_release_resources(sc, dev);
return ENXIO;
}
static int
@@ -1050,7 +1050,7 @@ ess_detach(device_t dev)
return r;
sc = pcm_getdevinfo(dev);
ess_release_resources(sc, dev);
ess_release_resources(sc, dev);
return 0;
}
+1 -1
View File
@@ -95,7 +95,7 @@
/* AK4358 control registers */
#define AK4358_LO1ATT 0x04
#define AK4358_RO1ATT 0x05
#define AK4358_RO1ATT 0x05
#define AK4358_OATT_ENABLE 0x80
/* AK4381 control registers */
+29 -29
View File
@@ -39,12 +39,12 @@
/* -------------------------------------------------------------------- */
#define TDX_PCI_ID 0x20001023
#define TNX_PCI_ID 0x20011023
#define TDX_PCI_ID 0x20001023
#define TNX_PCI_ID 0x20011023
#define ALI_PCI_ID 0x545110b9
#define SPA_PCI_ID 0x70181039
#define TR_DEFAULT_BUFSZ 0x1000
#define TR_DEFAULT_BUFSZ 0x1000
/* For ALi M5451 the DMA transfer size appears to be fixed to 64k. */
#define ALI_BUFSZ 0x10000
#define TR_BUFALGN 0x8
@@ -227,7 +227,7 @@ tr_rdcd(kobj_t obj, void *devinfo, int regno)
tr_wr(tr, treg, regno | trw, 4);
j=trw;
for (i=TR_TIMEOUT_CDC; (i > 0) && (j & trw); i--)
j=tr_rd(tr, treg, 4);
j=tr_rd(tr, treg, 4);
}
mtx_unlock(&tr->lock);
if (i == 0) printf("codec timeout during read of register %x\n", regno);
@@ -284,7 +284,7 @@ tr_wrcd(kobj_t obj, void *devinfo, int regno, uint32_t data)
for (i=TR_TIMEOUT_CDC; (i>0) && (j & trw); i--)
j=tr_rd(tr, treg, 4);
if (tr->type == ALI_PCI_ID && tr->rev > 0x01)
trw |= 0x0100;
trw |= 0x0100;
tr_wr(tr, treg, (data << TR_CDC_DATA) | regno | trw, 4);
}
#if 0
@@ -296,8 +296,8 @@ tr_wrcd(kobj_t obj, void *devinfo, int regno, uint32_t data)
}
static kobj_method_t tr_ac97_methods[] = {
KOBJMETHOD(ac97_read, tr_rdcd),
KOBJMETHOD(ac97_write, tr_wrcd),
KOBJMETHOD(ac97_read, tr_rdcd),
KOBJMETHOD(ac97_write, tr_wrcd),
KOBJMETHOD_END
};
AC97_DECLARE(tr_ac97);
@@ -333,7 +333,7 @@ static void
tr_enaint(struct tr_chinfo *ch, int enable)
{
struct tr_info *tr = ch->parent;
uint32_t i, reg;
uint32_t i, reg;
int bank, chan;
mtx_lock(&tr->lock);
@@ -392,13 +392,13 @@ tr_wrch(struct tr_chinfo *ch)
struct tr_info *tr = ch->parent;
uint32_t cr[TR_CHN_REGS], i;
ch->gvsel &= 0x00000001;
ch->gvsel &= 0x00000001;
ch->fmc &= 0x00000003;
ch->fms &= 0x0000000f;
ch->ctrl &= 0x0000000f;
ch->pan &= 0x0000007f;
ch->pan &= 0x0000007f;
ch->rvol &= 0x0000007f;
ch->cvol &= 0x0000007f;
ch->cvol &= 0x0000007f;
ch->vol &= 0x000000ff;
ch->ec &= 0x00000fff;
ch->alpha &= 0x00000fff;
@@ -563,7 +563,7 @@ trpchan_trigger(kobj_t obj, void *data, int go)
ch->pan = 0;
ch->vol = 0;
ch->bufhalf = 0;
tr_wrch(ch);
tr_wrch(ch);
tr_enaint(ch, 1);
tr_startch(ch);
ch->active = 1;
@@ -591,13 +591,13 @@ trpchan_getcaps(kobj_t obj, void *data)
}
static kobj_method_t trpchan_methods[] = {
KOBJMETHOD(channel_init, trpchan_init),
KOBJMETHOD(channel_setformat, trpchan_setformat),
KOBJMETHOD(channel_setspeed, trpchan_setspeed),
KOBJMETHOD(channel_setblocksize, trpchan_setblocksize),
KOBJMETHOD(channel_trigger, trpchan_trigger),
KOBJMETHOD(channel_getptr, trpchan_getptr),
KOBJMETHOD(channel_getcaps, trpchan_getcaps),
KOBJMETHOD(channel_init, trpchan_init),
KOBJMETHOD(channel_setformat, trpchan_setformat),
KOBJMETHOD(channel_setspeed, trpchan_setspeed),
KOBJMETHOD(channel_setblocksize, trpchan_setblocksize),
KOBJMETHOD(channel_trigger, trpchan_trigger),
KOBJMETHOD(channel_getptr, trpchan_getptr),
KOBJMETHOD(channel_getcaps, trpchan_getcaps),
KOBJMETHOD_END
};
CHANNEL_DECLARE(trpchan);
@@ -699,7 +699,7 @@ trrchan_trigger(kobj_t obj, void *data, int go)
static uint32_t
trrchan_getptr(kobj_t obj, void *data)
{
struct tr_rchinfo *ch = data;
struct tr_rchinfo *ch = data;
struct tr_info *tr = ch->parent;
/* return current byte offset of channel */
@@ -713,13 +713,13 @@ trrchan_getcaps(kobj_t obj, void *data)
}
static kobj_method_t trrchan_methods[] = {
KOBJMETHOD(channel_init, trrchan_init),
KOBJMETHOD(channel_setformat, trrchan_setformat),
KOBJMETHOD(channel_setspeed, trrchan_setspeed),
KOBJMETHOD(channel_setblocksize, trrchan_setblocksize),
KOBJMETHOD(channel_trigger, trrchan_trigger),
KOBJMETHOD(channel_getptr, trrchan_getptr),
KOBJMETHOD(channel_getcaps, trrchan_getcaps),
KOBJMETHOD(channel_init, trrchan_init),
KOBJMETHOD(channel_setformat, trrchan_setformat),
KOBJMETHOD(channel_setspeed, trrchan_setspeed),
KOBJMETHOD(channel_setblocksize, trrchan_setblocksize),
KOBJMETHOD(channel_trigger, trrchan_trigger),
KOBJMETHOD(channel_getptr, trrchan_getptr),
KOBJMETHOD(channel_getcaps, trrchan_getcaps),
KOBJMETHOD_END
};
CHANNEL_DECLARE(trrchan);
@@ -825,7 +825,7 @@ tr_pci_attach(device_t dev)
struct ac97_info *codec = NULL;
bus_addr_t lowaddr;
int i, dacn;
char status[SND_STATUSLEN];
char status[SND_STATUSLEN];
tr = malloc(sizeof(*tr), M_DEVBUF, M_WAITOK | M_ZERO);
tr->type = pci_get_devid(dev);
@@ -835,7 +835,7 @@ tr_pci_attach(device_t dev)
if (resource_int_value(device_get_name(dev), device_get_unit(dev),
"dac", &i) == 0) {
if (i < 1)
if (i < 1)
dacn = 1;
else if (i > TR_MAXPLAYCH)
dacn = TR_MAXPLAYCH;
+4 -4
View File
@@ -30,7 +30,7 @@
#define _T4DWAVE_REG_H
#define TR_REG_CIR 0xa0
#define TR_CIR_MASK 0x0000003f
#define TR_CIR_MASK 0x0000003f
#define TR_CIR_ADDRENA 0x00001000
#define TR_CIR_MIDENA 0x00002000
#define TR_REG_MISCINT 0xb0
@@ -43,7 +43,7 @@
#define TR_REG_DMAR15 0x0f
#define TR_REG_SBR4 0x14
#define TR_REG_SBR5 0x15
#define TR_SB_INTSTATUS 0x82
#define TR_SB_INTSTATUS 0x82
#define TR_REG_SBR9 0x1e
#define TR_REG_SBR10 0x1f
#define TR_REG_SBBL 0xc0
@@ -53,7 +53,7 @@
#define TR_CDC_DATA 16
#define TDX_REG_CODECWR 0x40
#define TDX_REG_CODECRD 0x44
#define TDX_CDC_RWSTAT 0x00008000
#define TDX_CDC_RWSTAT 0x00008000
#define TDX_REG_CODECST 0x48
#define TDX_CDC_SBCTRL 0x40
#define TDX_CDC_ACTIVE 0x20
@@ -73,7 +73,7 @@
#define TNX_REG_CODECWR 0x44
#define TNX_REG_CODEC1RD 0x48
#define TNX_REG_CODEC2RD 0x4c
#define TNX_CDC_RWSTAT 0x00000c00
#define TNX_CDC_RWSTAT 0x00000c00
#define TNX_CDC_SEC 0x00000100
#define TNX_REG_CODECST 0x40
#define TNX_CDC_READY2 0x40
+2 -2
View File
@@ -3,7 +3,7 @@
*
* Copyright (c) 2002 Orion Hodson <orion@freebsd.org>
* Portions of this code derived from via82c686.c:
* Copyright (c) 2000 David Jones <dej@ox.org>
* Copyright (c) 2000 David Jones <dej@ox.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -907,7 +907,7 @@ via8233chan_trigger(kobj_t obj, void* data, int go)
pollticks = 1;
if (via_chan_active(via) == 0 ||
pollticks < via->poll_ticks) {
if (bootverbose) {
if (bootverbose) {
if (via_chan_active(via) == 0)
printf("%s: pollticks=%d\n",
__func__, pollticks);
+4 -4
View File
@@ -51,10 +51,10 @@
#define VIA8233_RP_DXS_LVOL 0x02
#define VIA8233_RP_DXS_RVOL 0x03
#define VIA8233_DXS_MUTE 0x3f
#define VIA8233_DXS_MUTE 0x3f
#define VIA8233_RP_DXS_RATEFMT 0x08
#define VIA8233_DXS_STOP_INDEX 0xff000000
#define VIA8233_DXS_RATEFMT_48K 0x000fffff
#define VIA8233_DXS_RATEFMT_48K 0x000fffff
#define VIA8233_DXS_RATEFMT_STEREO 0x00100000
#define VIA8233_DXS_RATEFMT_16BIT 0x00200000
@@ -72,9 +72,9 @@
# define VIA_PCI_ACLINK_SERIAL 0x10
# define VIA_PCI_ACLINK_VRATE 0x08
# define VIA_PCI_ACLINK_SGD 0x04
# define VIA_PCI_ACLINK_DESIRED (VIA_PCI_ACLINK_EN | \
# define VIA_PCI_ACLINK_DESIRED (VIA_PCI_ACLINK_EN | \
VIA_PCI_ACLINK_NRST | \
VIA_PCI_ACLINK_VRATE | \
VIA_PCI_ACLINK_VRATE | \
VIA_PCI_ACLINK_SGD)
#define VIA_MC_SGD_STATUS 0x40
+13 -13
View File
@@ -205,8 +205,8 @@ via_read_codec(kobj_t obj, void *addr, int reg)
}
static kobj_method_t via_ac97_methods[] = {
KOBJMETHOD(ac97_read, via_read_codec),
KOBJMETHOD(ac97_write, via_write_codec),
KOBJMETHOD(ac97_read, via_read_codec),
KOBJMETHOD(ac97_write, via_write_codec),
KOBJMETHOD_END
};
AC97_DECLARE(via_ac97);
@@ -371,7 +371,7 @@ viachan_getptr(kobj_t obj, void *data)
base1 = via_rd(via, ch->base, 4);
len = via_rd(via, ch->count, 4);
base = via_rd(via, ch->base, 4);
if (base != base1) /* Avoid race hazard */
if (base != base1) /* Avoid race hazard */
len = via_rd(via, ch->count, 4);
mtx_unlock(&via->lock);
@@ -406,13 +406,13 @@ viachan_getcaps(kobj_t obj, void *data)
}
static kobj_method_t viachan_methods[] = {
KOBJMETHOD(channel_init, viachan_init),
KOBJMETHOD(channel_setformat, viachan_setformat),
KOBJMETHOD(channel_setspeed, viachan_setspeed),
KOBJMETHOD(channel_setblocksize, viachan_setblocksize),
KOBJMETHOD(channel_trigger, viachan_trigger),
KOBJMETHOD(channel_getptr, viachan_getptr),
KOBJMETHOD(channel_getcaps, viachan_getcaps),
KOBJMETHOD(channel_init, viachan_init),
KOBJMETHOD(channel_setformat, viachan_setformat),
KOBJMETHOD(channel_setspeed, viachan_setspeed),
KOBJMETHOD(channel_setblocksize, viachan_setblocksize),
KOBJMETHOD(channel_trigger, viachan_trigger),
KOBJMETHOD(channel_getptr, viachan_getptr),
KOBJMETHOD(channel_getcaps, viachan_getcaps),
KOBJMETHOD_END
};
CHANNEL_DECLARE(viachan);
@@ -498,12 +498,12 @@ via_attach(device_t dev)
}
/* Power everything up */
pci_write_config(dev, VIA_ACLINKCTRL, VIA_ACLINK_DESIRED, 1);
pci_write_config(dev, VIA_ACLINKCTRL, VIA_ACLINK_DESIRED, 1);
/* Wait for codec to become ready (largest reported delay here 310ms) */
for (cnt = 0; cnt < 2000; cnt++) {
data = pci_read_config(dev, VIA_AC97STATUS, 1);
if (data & VIA_AC97STATUS_RDY)
if (data & VIA_AC97STATUS_RDY)
break;
DELAY(5000);
}
@@ -540,7 +540,7 @@ via_attach(device_t dev)
goto bad;
via->codec_caps = ac97_getextcaps(via->codec);
ac97_setextmode(via->codec,
ac97_setextmode(via->codec,
via->codec_caps & (AC97_EXTCAP_VRA | AC97_EXTCAP_VRM));
/* DMA tag for buffers */
+6 -6
View File
@@ -77,7 +77,7 @@ struct sc_info {
bus_dma_tag_t parent_dmat;
/* Enhanced register resources */
struct resource *enh_reg;
struct resource *enh_reg;
bus_space_tag_t enh_st;
bus_space_handle_t enh_sh;
int enh_type;
@@ -91,7 +91,7 @@ struct sc_info {
int dmaa_rid, dmac_rid;
/* Interrupt resources */
struct resource *irq;
struct resource *irq;
int irqid;
void *ih;
@@ -313,7 +313,7 @@ static int
svrchan_trigger(kobj_t obj, void *data, int go)
{
struct sc_chinfo *ch = data;
struct sc_info *sc = ch->parent;
struct sc_info *sc = ch->parent;
uint32_t count, enable;
uint8_t v;
@@ -357,7 +357,7 @@ static uint32_t
svrchan_getptr(kobj_t obj, void *data)
{
struct sc_chinfo *ch = data;
struct sc_info *sc = ch->parent;
struct sc_info *sc = ch->parent;
uint32_t sz, remain;
sz = ch->buffer->bufsize;
@@ -434,7 +434,7 @@ static uint32_t
svpchan_getptr(kobj_t obj, void *data)
{
struct sc_chinfo *ch = data;
struct sc_info *sc = ch->parent;
struct sc_info *sc = ch->parent;
uint32_t sz, remain;
sz = ch->buffer->bufsize;
@@ -520,7 +520,7 @@ sv_mix_mute_all(struct sc_info *sc)
static int
sv_mix_init(struct snd_mixer *m)
{
uint32_t i, v;
uint32_t i, v;
for(i = v = 0; i < SOUND_MIXER_NRDEVICES; i++) {
if (mt[i].max) v |= (1 << i);
+11 -11
View File
@@ -54,7 +54,7 @@
#define SV_DMA_COUNT 0x04
#define SV_DMA_MODE 0x0B
#define SV_DMA_MODE_AUTO 0x10
#define SV_DMA_MODE_AUTO 0x10
#define SV_DMA_MODE_RD 0x04
#define SV_DMA_MODE_WR 0x08
@@ -91,17 +91,17 @@
#define SV_CM_DATA 0x05
/* ------------------------------------------------------------------------- */
/* Indexed Codec/Mixer Registers (left channels were applicable) */
/* Indexed Codec/Mixer Registers (left channels were applicable) */
#define SV_REG_ADC_INPUT 0x00
#define SV_INPUT_GAIN_MASK 0x0f
#define SV_INPUT_GAIN_MASK 0x0f
#define SV_INPUT_MICGAIN 0x10
#define SV_INPUT_CD 0x20
#define SV_INPUT_DAC 0x40
#define SV_INPUT_AUX2 0x60
#define SV_INPUT_LINE 0x80
#define SV_INPUT_AUX1 0xa0
#define SV_INPUT_MIC 0xc0
#define SV_INPUT_DAC 0x40
#define SV_INPUT_AUX2 0x60
#define SV_INPUT_LINE 0x80
#define SV_INPUT_AUX1 0xa0
#define SV_INPUT_MIC 0xc0
#define SV_INPUT_MIXOUT 0xe0
#define SV_REG_AUX1 0x02
@@ -152,7 +152,7 @@
#define SV_REG_SYN_SAMPLING_HI 0x21
#define SV_REG_CLOCK_SOURCE 0x22
#define SV_CLOCK_ALTERNATE 0x10
#define SV_CLOCK_ALTERNATE 0x10
#define SV_REG_ALT_RATE 0x23
#define SV_REG_ADC_PLLM 0x24
@@ -192,12 +192,12 @@
#define SV_REG_DIGITAL_PWR 0x31
#define SV_DIGITAL_OFF_SYN 0x01
#define SV_DIGITAL_OFF_MU 0x02
#define SV_DIGITAL_OFF_GP 0x04
#define SV_DIGITAL_OFF_GP 0x04
#define SV_DIGITAL_OFF_BI 0x08
#define SV_DIGITAL_OFF 0x0f
/* ------------------------------------------------------------------------- */
/* ADC PLL constants */
/* ADC PLL constants */
#define SV_F_SCALE 512
#define SV_F_REF 24576000
+33 -33
View File
@@ -77,28 +77,28 @@ struct ac97_codecid {
uint32_t id;
uint8_t stepmask;
uint8_t noext:1;
char *name;
char *name;
ac97_patch patch;
};
static const struct ac97mixtable_entry ac97mixtable_default[AC97_MIXER_SIZE] = {
/* [offset] reg bits of st mu re mk en */
[SOUND_MIXER_VOLUME] = { AC97_MIX_MASTER, 5, 0, 1, 1, 6, 0, 1 },
[SOUND_MIXER_OGAIN] = { AC97_MIX_AUXOUT, 5, 0, 1, 1, 0, 0, 0 },
[SOUND_MIXER_PHONEOUT] = { AC97_MIX_MONO, 5, 0, 0, 1, 7, 0, 0 },
[SOUND_MIXER_BASS] = { AC97_MIX_TONE, 4, 8, 0, 0, 0, 1, 0 },
[SOUND_MIXER_TREBLE] = { AC97_MIX_TONE, 4, 0, 0, 0, 0, 1, 0 },
[SOUND_MIXER_PCM] = { AC97_MIX_PCM, 5, 0, 1, 1, 0, 0, 1 },
[SOUND_MIXER_SPEAKER] = { AC97_MIX_BEEP, 4, 1, 0, 1, 0, 0, 0 },
[SOUND_MIXER_LINE] = { AC97_MIX_LINE, 5, 0, 1, 1, 5, 0, 1 },
[SOUND_MIXER_PHONEIN] = { AC97_MIX_PHONE, 5, 0, 0, 1, 8, 0, 0 },
[SOUND_MIXER_MIC] = { AC97_MIX_MIC, 5, 0, 0, 1, 1, 1, 1 },
[SOUND_MIXER_VOLUME] = { AC97_MIX_MASTER, 5, 0, 1, 1, 6, 0, 1 },
[SOUND_MIXER_OGAIN] = { AC97_MIX_AUXOUT, 5, 0, 1, 1, 0, 0, 0 },
[SOUND_MIXER_PHONEOUT] = { AC97_MIX_MONO, 5, 0, 0, 1, 7, 0, 0 },
[SOUND_MIXER_BASS] = { AC97_MIX_TONE, 4, 8, 0, 0, 0, 1, 0 },
[SOUND_MIXER_TREBLE] = { AC97_MIX_TONE, 4, 0, 0, 0, 0, 1, 0 },
[SOUND_MIXER_PCM] = { AC97_MIX_PCM, 5, 0, 1, 1, 0, 0, 1 },
[SOUND_MIXER_SPEAKER] = { AC97_MIX_BEEP, 4, 1, 0, 1, 0, 0, 0 },
[SOUND_MIXER_LINE] = { AC97_MIX_LINE, 5, 0, 1, 1, 5, 0, 1 },
[SOUND_MIXER_PHONEIN] = { AC97_MIX_PHONE, 5, 0, 0, 1, 8, 0, 0 },
[SOUND_MIXER_MIC] = { AC97_MIX_MIC, 5, 0, 0, 1, 1, 1, 1 },
/* use igain for the mic 20dB boost */
[SOUND_MIXER_IGAIN] = { -AC97_MIX_MIC, 1, 6, 0, 0, 0, 1, 1 },
[SOUND_MIXER_CD] = { AC97_MIX_CD, 5, 0, 1, 1, 2, 0, 1 },
[SOUND_MIXER_LINE1] = { AC97_MIX_AUX, 5, 0, 1, 1, 4, 0, 0 },
[SOUND_MIXER_VIDEO] = { AC97_MIX_VIDEO, 5, 0, 1, 1, 3, 0, 0 },
[SOUND_MIXER_RECLEV] = { -AC97_MIX_RGAIN, 4, 0, 1, 1, 0, 0, 1 }
[SOUND_MIXER_IGAIN] = { -AC97_MIX_MIC, 1, 6, 0, 0, 0, 1, 1 },
[SOUND_MIXER_CD] = { AC97_MIX_CD, 5, 0, 1, 1, 2, 0, 1 },
[SOUND_MIXER_LINE1] = { AC97_MIX_AUX, 5, 0, 1, 1, 4, 0, 0 },
[SOUND_MIXER_VIDEO] = { AC97_MIX_VIDEO, 5, 0, 1, 1, 3, 0, 0 },
[SOUND_MIXER_RECLEV] = { -AC97_MIX_RGAIN, 4, 0, 1, 1, 0, 0, 1 }
};
static const struct ac97_vendorid ac97vendorid[] = {
@@ -140,32 +140,32 @@ static struct ac97_codecid ac97codecid[] = {
{ 0x41445340, 0x00, 0, "AD1881", 0 },
{ 0x41445348, 0x00, 0, "AD1881A", 0 },
{ 0x41445360, 0x00, 0, "AD1885", 0 },
{ 0x41445361, 0x00, 0, "AD1886", ad1886_patch },
{ 0x41445362, 0x00, 0, "AD1887", 0 },
{ 0x41445363, 0x00, 0, "AD1886A", 0 },
{ 0x41445368, 0x00, 0, "AD1888", ad198x_patch },
{ 0x41445361, 0x00, 0, "AD1886", ad1886_patch },
{ 0x41445362, 0x00, 0, "AD1887", 0 },
{ 0x41445363, 0x00, 0, "AD1886A", 0 },
{ 0x41445368, 0x00, 0, "AD1888", ad198x_patch },
{ 0x41445370, 0x00, 0, "AD1980", ad198x_patch },
{ 0x41445372, 0x00, 0, "AD1981A", 0 },
{ 0x41445374, 0x00, 0, "AD1981B", ad1981b_patch },
{ 0x41445375, 0x00, 0, "AD1985", ad198x_patch },
{ 0x41445378, 0x00, 0, "AD1986", ad198x_patch },
{ 0x414b4d00, 0x00, 1, "AK4540", 0 },
{ 0x414b4d01, 0x00, 1, "AK4542", 0 },
{ 0x414b4d02, 0x00, 1, "AK4543", 0 },
{ 0x414b4d00, 0x00, 1, "AK4540", 0 },
{ 0x414b4d01, 0x00, 1, "AK4542", 0 },
{ 0x414b4d02, 0x00, 1, "AK4543", 0 },
{ 0x414b4d06, 0x00, 0, "AK4544A", 0 },
{ 0x454b4d07, 0x00, 0, "AK4545", 0 },
{ 0x414c4320, 0x0f, 0, "ALC100", 0 },
{ 0x414c4730, 0x0f, 0, "ALC101", 0 },
{ 0x414c4710, 0x0f, 0, "ALC200", 0 },
{ 0x414c4740, 0x0f, 0, "ALC202", 0 },
{ 0x414c4720, 0x0f, 0, "ALC650", 0 },
{ 0x414c4710, 0x0f, 0, "ALC200", 0 },
{ 0x414c4740, 0x0f, 0, "ALC202", 0 },
{ 0x414c4720, 0x0f, 0, "ALC650", 0 },
{ 0x414c4752, 0x0f, 0, "ALC250", 0 },
{ 0x414c4760, 0x0f, 0, "ALC655", alc655_patch },
{ 0x414c4770, 0x0f, 0, "ALC203", 0 },
{ 0x414c4780, 0x0f, 0, "ALC658", 0 },
{ 0x414c4790, 0x0f, 0, "ALC850", 0 },
{ 0x43525900, 0x07, 0, "CS4297", 0 },
{ 0x43525910, 0x07, 0, "CS4297A", 0 },
{ 0x43525900, 0x07, 0, "CS4297", 0 },
{ 0x43525910, 0x07, 0, "CS4297A", 0 },
{ 0x43525920, 0x07, 0, "CS4294/98", 0 },
{ 0x4352592d, 0x07, 0, "CS4294", 0 },
{ 0x43525930, 0x07, 0, "CS4299", 0 },
@@ -1132,11 +1132,11 @@ ac97mix_setrecsrc(struct snd_mixer *m, uint32_t src)
}
static kobj_method_t ac97mixer_methods[] = {
KOBJMETHOD(mixer_init, ac97mix_init),
KOBJMETHOD(mixer_uninit, ac97mix_uninit),
KOBJMETHOD(mixer_reinit, ac97mix_reinit),
KOBJMETHOD(mixer_set, ac97mix_set),
KOBJMETHOD(mixer_setrecsrc, ac97mix_setrecsrc),
KOBJMETHOD(mixer_init, ac97mix_init),
KOBJMETHOD(mixer_uninit, ac97mix_uninit),
KOBJMETHOD(mixer_reinit, ac97mix_reinit),
KOBJMETHOD(mixer_set, ac97mix_set),
KOBJMETHOD(mixer_setrecsrc, ac97mix_setrecsrc),
KOBJMETHOD_END
};
MIXER_DECLARE(ac97mixer);
+4 -4
View File
@@ -40,7 +40,7 @@
#define AC97_CAP_ADC_20 (1 << 9)
#define AC97_MIX_MASTER 0x02
#define AC97_MIX_AUXOUT 0x04
#define AC97_MIX_MONO 0x06
#define AC97_MIX_MONO 0x06
#define AC97_MIX_TONE 0x08
#define AC97_MIX_BEEP 0x0a
#define AC97_MIX_PHONE 0x0c
@@ -63,9 +63,9 @@
#define AC97_POWER_STATUS (AC97_POWER_ADC | AC97_POWER_DAC | \
AC97_POWER_REF | AC97_POWER_ANL )
#define AC97_REGEXT_ID 0x28
#define AC97_EXTCAP_VRA (1 << 0)
#define AC97_EXTCAP_DRA (1 << 1)
#define AC97_EXTCAP_VRM (1 << 3)
#define AC97_EXTCAP_VRA (1 << 0)
#define AC97_EXTCAP_DRA (1 << 1)
#define AC97_EXTCAP_VRM (1 << 3)
#define AC97_EXTCAPS (AC97_EXTCAP_VRA | AC97_EXTCAP_DRA | AC97_EXTCAP_VRM)
#define AC97_EXTCAP_SDAC (1 << 7)
+1 -1
View File
@@ -509,7 +509,7 @@ sndbuf_acquire(struct snd_dbuf *b, uint8_t *from, unsigned int count)
* @brief Dispose samples from channel buffer, increasing size of ready area
*
* This function discards samples from the supplied buffer by advancing the
* ready area start pointer and decrementing the ready area length. If
* ready area start pointer and decrementing the ready area length. If
* @c to is not NULL, then the discard samples will be copied to the location
* it points to.
*
+32 -32
View File
@@ -393,8 +393,8 @@ chn_dmaupdate(struct pcm_channel *c)
static void
chn_wrfeed(struct pcm_channel *c)
{
struct snd_dbuf *b = c->bufhard;
struct snd_dbuf *bs = c->bufsoft;
struct snd_dbuf *b = c->bufhard;
struct snd_dbuf *bs = c->bufsoft;
unsigned int amt, want, wasfree;
CHN_LOCKASSERT(c);
@@ -471,17 +471,17 @@ chn_write(struct pcm_channel *c, struct uio *buf)
} else if (c->flags & (CHN_F_NBIO | CHN_F_NOTRIGGER)) {
/**
* @todo Evaluate whether EAGAIN is truly desirable.
* 4Front drivers behave like this, but I'm
* not sure if it at all violates the "write
* should be allowed to block" model.
* 4Front drivers behave like this, but I'm
* not sure if it at all violates the "write
* should be allowed to block" model.
*
* The idea is that, while set with CHN_F_NOTRIGGER,
* a channel isn't playing, *but* without this we
* end up with interrupt timeout.
* The idea is that, while set with CHN_F_NOTRIGGER,
* a channel isn't playing, *but* without this we
* end up with interrupt timeout.
*/
ret = EAGAIN;
} else {
ret = chn_sleep(c, timeout);
ret = chn_sleep(c, timeout);
if (ret == ERESTART || ret == EINTR)
c->flags |= CHN_F_ABORTING;
}
@@ -496,8 +496,8 @@ chn_write(struct pcm_channel *c, struct uio *buf)
static void
chn_rdfeed(struct pcm_channel *c)
{
struct snd_dbuf *b = c->bufhard;
struct snd_dbuf *bs = c->bufsoft;
struct snd_dbuf *b = c->bufhard;
struct snd_dbuf *bs = c->bufsoft;
unsigned int amt;
CHN_LOCKASSERT(c);
@@ -575,7 +575,7 @@ chn_read(struct pcm_channel *c, struct uio *buf)
} else if (c->flags & (CHN_F_NBIO | CHN_F_NOTRIGGER))
ret = EAGAIN;
else {
ret = chn_sleep(c, timeout);
ret = chn_sleep(c, timeout);
if (ret == ERESTART || ret == EINTR)
c->flags |= CHN_F_ABORTING;
}
@@ -691,7 +691,7 @@ chn_resetbuf(struct pcm_channel *c)
int
chn_sync(struct pcm_channel *c, int threshold)
{
struct snd_dbuf *b, *bs;
struct snd_dbuf *b, *bs;
int ret, count, hcount, minflush, resid, residp, syncdelay, blksz;
uint32_t cflag;
@@ -769,7 +769,7 @@ chn_sync(struct pcm_channel *c, int threshold)
c->flags |= CHN_F_CLOSING;
while (count > 0 && (resid > 0 || minflush > 0)) {
ret = chn_sleep(c, c->timeout);
if (ret == ERESTART || ret == EINTR) {
if (ret == ERESTART || ret == EINTR) {
c->flags |= CHN_F_ABORTING;
break;
} else if (ret == 0 || ret == EAGAIN) {
@@ -815,7 +815,7 @@ chn_sync(struct pcm_channel *c, int threshold)
__func__, c->timeout, count, hcount, resid, residp,
minflush, ret);
return (0);
return (0);
}
/* called externally, handle locking */
@@ -827,7 +827,7 @@ chn_poll(struct pcm_channel *c, int ev, struct thread *td)
CHN_LOCKASSERT(c);
if (!(c->flags & (CHN_F_MMAP | CHN_F_TRIGGERED))) {
if (!(c->flags & (CHN_F_MMAP | CHN_F_TRIGGERED))) {
ret = chn_start(c, 1);
if (ret != 0)
return (0);
@@ -852,9 +852,9 @@ chn_poll(struct pcm_channel *c, int ev, struct thread *td)
int
chn_abort(struct pcm_channel *c)
{
int missing = 0;
struct snd_dbuf *b = c->bufhard;
struct snd_dbuf *bs = c->bufsoft;
int missing = 0;
struct snd_dbuf *b = c->bufhard;
struct snd_dbuf *bs = c->bufsoft;
CHN_LOCKASSERT(c);
if (CHN_STOPPED(c))
@@ -867,7 +867,7 @@ chn_abort(struct pcm_channel *c)
sndbuf_setrun(b, 0);
if (!(c->flags & CHN_F_VIRTUAL))
chn_dmaupdate(c);
missing = sndbuf_getready(bs);
missing = sndbuf_getready(bs);
c->flags &= ~CHN_F_ABORTING;
return missing;
@@ -887,11 +887,11 @@ chn_abort(struct pcm_channel *c)
int
chn_flush(struct pcm_channel *c)
{
struct snd_dbuf *b = c->bufhard;
struct snd_dbuf *b = c->bufhard;
CHN_LOCKASSERT(c);
KASSERT(c->direction == PCMDIR_PLAY, ("chn_flush on bad channel"));
DEB(printf("chn_flush: c->flags 0x%08x\n", c->flags));
DEB(printf("chn_flush: c->flags 0x%08x\n", c->flags));
c->flags |= CHN_F_CLOSING;
chn_sync(c, 0);
@@ -900,8 +900,8 @@ chn_flush(struct pcm_channel *c)
chn_trigger(c, PCMTRIG_ABORT);
sndbuf_setrun(b, 0);
c->flags &= ~CHN_F_CLOSING;
return 0;
c->flags &= ~CHN_F_CLOSING;
return 0;
}
int
@@ -1024,7 +1024,7 @@ snd_str2afmt(const char *req)
}
}
/* found a match */
return (SND_FORMAT(afmt_tab[i].afmt, ch + ext, ext));
return (SND_FORMAT(afmt_tab[i].afmt, ch + ext, ext));
}
/* not a valid format */
return (0);
@@ -1250,8 +1250,8 @@ chn_init(struct snddev_info *d, struct pcm_channel *parent, kobj_class_t cls,
/**
* @todo Should this be moved somewhere else? The primary buffer
* is allocated by the driver or via DMA map setup, and tmpbuf
* seems to only come into existence in sndbuf_resize().
* is allocated by the driver or via DMA map setup, and tmpbuf
* seems to only come into existence in sndbuf_resize().
*/
if (c->direction == PCMDIR_PLAY) {
bs->sl = bs->maxsize;
@@ -2309,8 +2309,8 @@ chn_trigger(struct pcm_channel *c, int go)
* running in 16 bit stereo mode would require 4 bytes per sample, so a
* hwptr value ranging from 32-35 would be returned as 32.)
*
* @param c PCM channel context
* @returns sample-aligned hardware buffer pointer index
* @param c PCM channel context
* @returns sample-aligned hardware buffer pointer index
*/
int
chn_getptr(struct pcm_channel *c)
@@ -2564,9 +2564,9 @@ chn_getrates(struct pcm_channel *c, int **rates)
*
* @param c channel device to be started or closed
* @returns If this channel was the only member of a group, the group ID
* is returned to the caller so that the caller can release it
* via free_unr() after giving up the syncgroup lock. Else it
* returns 0.
* is returned to the caller so that the caller can release it
* via free_unr() after giving up the syncgroup lock. Else it
* returns 0.
*/
int
chn_syncdestroy(struct pcm_channel *c)
+6 -6
View File
@@ -172,10 +172,10 @@ struct pcm_channel {
} channels;
struct pcmchan_matrix matrix;
struct pcmchan_matrix matrix_scratch;
struct pcmchan_matrix matrix_scratch;
int16_t volume[SND_VOL_C_MAX][SND_CHN_T_VOL_MAX];
int8_t muted[SND_VOL_C_MAX][SND_CHN_T_VOL_MAX];
int8_t muted[SND_VOL_C_MAX][SND_CHN_T_VOL_MAX];
};
#define CHN_HEAD(x, y) &(x)->y.head
@@ -202,7 +202,7 @@ struct pcm_channel {
CHN_FOREACH(t, x, z) { \
if (t == y) \
break; \
} \
} \
if (t != y) \
CHN_INSERT_HEAD(x, y, z); \
} while (0)
@@ -212,7 +212,7 @@ struct pcm_channel {
CHN_FOREACH(t, w, z) { \
if (t == y) \
break; \
} \
} \
if (t != y) \
CHN_INSERT_AFTER(x, y, z); \
} while (0)
@@ -358,7 +358,7 @@ enum {
#define CHN_F_NBIO 0x00000040 /* do non-blocking i/o */
#define CHN_F_MMAP 0x00000080 /* has been mmap()ed */
#define CHN_F_BUSY 0x00000100 /* has been opened */
#define CHN_F_BUSY 0x00000100 /* has been opened */
#define CHN_F_DIRTY 0x00000200 /* need re-config */
#define CHN_F_DEAD 0x00000400 /* too many errors, dead, mdk */
/* unused 0x00000800 */
@@ -404,7 +404,7 @@ enum {
#define CHN_F_MMAP_INVALID (CHN_F_DEAD | CHN_F_RUNNING)
#define CHN_N_BLOCKSIZE 0x00000001
#define CHN_N_TRIGGER 0x00000002
+116 -116
View File
@@ -704,7 +704,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
struct thread *td)
{
struct dsp_cdevpriv *priv;
struct pcm_channel *chn, *rdch, *wrch;
struct pcm_channel *chn, *rdch, *wrch;
struct snddev_info *d;
unsigned long xcmd;
int *arg_i, ret, tmp, err;
@@ -795,8 +795,8 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
return (EINVAL);
}
switch(cmd) {
case AIONWRITE: /* how many bytes can write ? */
switch(cmd) {
case AIONWRITE: /* how many bytes can write ? */
if (wrch) {
CHN_LOCK(wrch);
*arg_i = sndbuf_getfree(wrch->bufsoft);
@@ -807,20 +807,20 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case AIOSSIZE: /* set the current blocksize */
case AIOSSIZE: /* set the current blocksize */
{
struct snd_size *p = (struct snd_size *)arg;
struct snd_size *p = (struct snd_size *)arg;
p->play_size = 0;
p->rec_size = 0;
PCM_ACQUIRE_QUICK(d);
if (wrch) {
if (wrch) {
CHN_LOCK(wrch);
chn_setblocksize(wrch, 2, p->play_size);
p->play_size = wrch->bufsoft->blksz;
CHN_UNLOCK(wrch);
}
if (rdch) {
if (rdch) {
CHN_LOCK(rdch);
chn_setblocksize(rdch, 2, p->rec_size);
p->rec_size = rdch->bufsoft->blksz;
@@ -829,16 +829,16 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
PCM_RELEASE_QUICK(d);
}
break;
case AIOGSIZE: /* get the current blocksize */
case AIOGSIZE: /* get the current blocksize */
{
struct snd_size *p = (struct snd_size *)arg;
struct snd_size *p = (struct snd_size *)arg;
if (wrch) {
if (wrch) {
CHN_LOCK(wrch);
p->play_size = wrch->bufsoft->blksz;
CHN_UNLOCK(wrch);
}
if (rdch) {
if (rdch) {
CHN_LOCK(rdch);
p->rec_size = rdch->bufsoft->blksz;
CHN_UNLOCK(rdch);
@@ -846,14 +846,14 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case AIOSFMT:
case AIOGFMT:
case AIOSFMT:
case AIOGFMT:
#ifdef COMPAT_FREEBSD32
case AIOSFMT32:
case AIOGFMT32:
#endif
{
snd_chan_param *p = (snd_chan_param *)arg;
snd_chan_param *p = (snd_chan_param *)arg;
#ifdef COMPAT_FREEBSD32
snd_chan_param32 *p32 = (snd_chan_param32 *)arg;
@@ -874,7 +874,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
break;
}
PCM_ACQUIRE_QUICK(d);
if (wrch) {
if (wrch) {
CHN_LOCK(wrch);
if (cmd == AIOSFMT && p->play_format != 0) {
chn_setformat(wrch,
@@ -883,14 +883,14 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
AFMT_EXTCHANNEL(wrch->format)));
chn_setspeed(wrch, p->play_rate);
}
p->play_rate = wrch->speed;
p->play_format = AFMT_ENCODING(wrch->format);
p->play_rate = wrch->speed;
p->play_format = AFMT_ENCODING(wrch->format);
CHN_UNLOCK(wrch);
} else {
p->play_rate = 0;
p->play_format = 0;
}
if (rdch) {
p->play_rate = 0;
p->play_format = 0;
}
if (rdch) {
CHN_LOCK(rdch);
if (cmd == AIOSFMT && p->rec_format != 0) {
chn_setformat(rdch,
@@ -903,9 +903,9 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
p->rec_format = AFMT_ENCODING(rdch->format);
CHN_UNLOCK(rdch);
} else {
p->rec_rate = 0;
p->rec_format = 0;
}
p->rec_rate = 0;
p->rec_format = 0;
}
PCM_RELEASE_QUICK(d);
#ifdef COMPAT_FREEBSD32
if (cmd == AIOSFMT32 || cmd == AIOGFMT32) {
@@ -918,12 +918,12 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case AIOGCAP: /* get capabilities */
case AIOGCAP: /* get capabilities */
#ifdef COMPAT_FREEBSD32
case AIOGCAP32:
#endif
{
snd_capabilities *p = (snd_capabilities *)arg;
snd_capabilities *p = (snd_capabilities *)arg;
struct pcmchan_caps *pcaps = NULL, *rcaps = NULL;
#ifdef COMPAT_FREEBSD32
snd_capabilities32 *p32 = (snd_capabilities32 *)arg;
@@ -950,23 +950,23 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
CHN_LOCK(wrch);
pcaps = chn_getcaps(wrch);
}
p->rate_min = max(rcaps? rcaps->minspeed : 0,
pcaps? pcaps->minspeed : 0);
p->rate_max = min(rcaps? rcaps->maxspeed : 1000000,
pcaps? pcaps->maxspeed : 1000000);
p->rate_min = max(rcaps? rcaps->minspeed : 0,
pcaps? pcaps->minspeed : 0);
p->rate_max = min(rcaps? rcaps->maxspeed : 1000000,
pcaps? pcaps->maxspeed : 1000000);
p->bufsize = min(rdch? rdch->bufsoft->bufsize : 1000000,
wrch? wrch->bufsoft->bufsize : 1000000);
/* XXX bad on sb16 */
p->formats = (rdch? chn_getformats(rdch) : 0xffffffff) &
(wrch? chn_getformats(wrch) : 0xffffffff);
p->formats = (rdch? chn_getformats(rdch) : 0xffffffff) &
(wrch? chn_getformats(wrch) : 0xffffffff);
if (rdch && wrch) {
p->formats |=
(pcm_getflags(d->dev) & SD_F_SIMPLEX) ? 0 :
AFMT_FULLDUPLEX;
}
p->mixers = 1; /* default: one mixer */
p->mixers = 1; /* default: one mixer */
p->inputs = d->mixer ? mix_getdevs(d->mixer) : 0;
p->left = p->right = 100;
p->left = p->right = 100;
if (wrch)
CHN_UNLOCK(wrch);
if (rdch)
@@ -987,7 +987,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case AIOSTOP:
case AIOSTOP:
if (*arg_i == AIOSYNC_PLAY && wrch) {
CHN_LOCK(wrch);
*arg_i = chn_abort(wrch);
@@ -997,16 +997,16 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
*arg_i = chn_abort(rdch);
CHN_UNLOCK(rdch);
} else {
printf("AIOSTOP: bad channel 0x%x\n", *arg_i);
*arg_i = 0;
printf("AIOSTOP: bad channel 0x%x\n", *arg_i);
*arg_i = 0;
}
break;
case AIOSYNC:
case AIOSYNC:
printf("AIOSYNC chan 0x%03lx pos %lu unimplemented\n",
((snd_sync_parm *)arg)->chan, ((snd_sync_parm *)arg)->pos);
((snd_sync_parm *)arg)->chan, ((snd_sync_parm *)arg)->pos);
break;
case FIONREAD: /* get # bytes to read */
case FIONREAD: /* get # bytes to read */
if (rdch) {
CHN_LOCK(rdch);
*arg_i = sndbuf_getready(rdch->bufsoft);
@@ -1017,12 +1017,12 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case FIOASYNC: /*set/clear async i/o */
case FIOASYNC: /*set/clear async i/o */
DEB( printf("FIOASYNC\n") ; )
break;
case SNDCTL_DSP_NONBLOCK: /* set non-blocking i/o */
case FIONBIO: /* set/clear non-blocking i/o */
case SNDCTL_DSP_NONBLOCK: /* set non-blocking i/o */
case FIONBIO: /* set/clear non-blocking i/o */
if (rdch) {
CHN_LOCK(rdch);
if (cmd == SNDCTL_DSP_NONBLOCK || *arg_i)
@@ -1041,7 +1041,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case SNDCTL_DSP_GETBLKSIZE:
case SNDCTL_DSP_GETBLKSIZE:
chn = wrch ? wrch : rdch;
if (chn) {
CHN_LOCK(chn);
@@ -1053,7 +1053,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case SNDCTL_DSP_SETBLKSIZE:
case SNDCTL_DSP_SETBLKSIZE:
RANGE(*arg_i, 16, 65536);
PCM_ACQUIRE_QUICK(d);
if (wrch) {
@@ -1069,7 +1069,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
PCM_RELEASE_QUICK(d);
break;
case SNDCTL_DSP_RESET:
case SNDCTL_DSP_RESET:
DEB(printf("dsp reset\n"));
if (wrch) {
CHN_LOCK(wrch);
@@ -1085,7 +1085,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case SNDCTL_DSP_SYNC:
case SNDCTL_DSP_SYNC:
DEB(printf("dsp sync\n"));
/* chn_sync may sleep */
if (wrch) {
@@ -1095,7 +1095,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case SNDCTL_DSP_SPEED:
case SNDCTL_DSP_SPEED:
/* chn_setspeed may sleep */
tmp = 0;
PCM_ACQUIRE_QUICK(d);
@@ -1116,7 +1116,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
*arg_i = tmp;
break;
case SOUND_PCM_READ_RATE:
case SOUND_PCM_READ_RATE:
chn = wrch ? wrch : rdch;
if (chn) {
CHN_LOCK(chn);
@@ -1128,7 +1128,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case SNDCTL_DSP_STEREO:
case SNDCTL_DSP_STEREO:
tmp = -1;
*arg_i = (*arg_i)? 2 : 1;
PCM_ACQUIRE_QUICK(d);
@@ -1151,7 +1151,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
*arg_i = tmp;
break;
case SOUND_PCM_WRITE_CHANNELS:
case SOUND_PCM_WRITE_CHANNELS:
/* case SNDCTL_DSP_CHANNELS: ( == SOUND_PCM_WRITE_CHANNELS) */
if (*arg_i < 0 || *arg_i > AFMT_CHANNEL_MAX) {
*arg_i = 0;
@@ -1180,7 +1180,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
PCM_ACQUIRE_QUICK(d);
if (wrch) {
if (wrch) {
CHN_LOCK(wrch);
ret = chn_setformat(wrch,
SND_FORMAT(wrch->format, *arg_i, ext));
@@ -1205,7 +1205,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case SOUND_PCM_READ_CHANNELS:
case SOUND_PCM_READ_CHANNELS:
chn = wrch ? wrch : rdch;
if (chn) {
CHN_LOCK(chn);
@@ -1217,7 +1217,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case SNDCTL_DSP_GETFMTS: /* returns a mask of supported fmts */
case SNDCTL_DSP_GETFMTS: /* returns a mask of supported fmts */
chn = wrch ? wrch : rdch;
if (chn) {
CHN_LOCK(chn);
@@ -1229,7 +1229,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case SNDCTL_DSP_SETFMT: /* sets _one_ format */
case SNDCTL_DSP_SETFMT: /* sets _one_ format */
if (*arg_i != AFMT_QUERY) {
tmp = 0;
PCM_ACQUIRE_QUICK(d);
@@ -1260,7 +1260,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case SNDCTL_DSP_SETFRAGMENT:
case SNDCTL_DSP_SETFRAGMENT:
DEB(printf("SNDCTL_DSP_SETFRAGMENT 0x%08x\n", *(int *)arg));
{
uint32_t fragln = (*arg_i) & 0x0000ffff;
@@ -1273,7 +1273,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
DEB(printf("SNDCTL_DSP_SETFRAGMENT %d frags, %d sz\n", maxfrags, fragsz));
PCM_ACQUIRE_QUICK(d);
if (rdch) {
if (rdch) {
CHN_LOCK(rdch);
ret = chn_setblocksize(rdch,
dsp_clamp_fragments(maxfrags, fragsz,
@@ -1285,7 +1285,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
r_maxfrags = maxfrags;
r_fragsz = fragsz;
}
if (wrch && ret == 0) {
if (wrch && ret == 0) {
CHN_LOCK(wrch);
ret = chn_setblocksize(wrch,
dsp_clamp_fragments(maxfrags, fragsz,
@@ -1304,16 +1304,16 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
fragln++;
fragsz >>= 1;
}
*arg_i = (maxfrags << 16) | fragln;
*arg_i = (maxfrags << 16) | fragln;
}
break;
case SNDCTL_DSP_GETISPACE:
case SNDCTL_DSP_GETISPACE:
/* return the size of data available in the input queue */
{
audio_buf_info *a = (audio_buf_info *)arg;
if (rdch) {
struct snd_dbuf *bs = rdch->bufsoft;
audio_buf_info *a = (audio_buf_info *)arg;
if (rdch) {
struct snd_dbuf *bs = rdch->bufsoft;
CHN_LOCK(rdch);
a->bytes = sndbuf_getready(bs);
@@ -1321,17 +1321,17 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
a->fragstotal = bs->blkcnt;
a->fragsize = bs->blksz;
CHN_UNLOCK(rdch);
} else
} else
ret = EINVAL;
}
break;
case SNDCTL_DSP_GETOSPACE:
case SNDCTL_DSP_GETOSPACE:
/* return space available in the output queue */
{
audio_buf_info *a = (audio_buf_info *)arg;
if (wrch) {
struct snd_dbuf *bs = wrch->bufsoft;
audio_buf_info *a = (audio_buf_info *)arg;
if (wrch) {
struct snd_dbuf *bs = wrch->bufsoft;
CHN_LOCK(wrch);
a->bytes = sndbuf_getfree(bs);
@@ -1339,16 +1339,16 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
a->fragstotal = bs->blkcnt;
a->fragsize = bs->blksz;
CHN_UNLOCK(wrch);
} else
} else
ret = EINVAL;
}
break;
case SNDCTL_DSP_GETIPTR:
case SNDCTL_DSP_GETIPTR:
{
count_info *a = (count_info *)arg;
if (rdch) {
struct snd_dbuf *bs = rdch->bufsoft;
count_info *a = (count_info *)arg;
if (rdch) {
struct snd_dbuf *bs = rdch->bufsoft;
CHN_LOCK(rdch);
a->bytes = bs->total;
@@ -1356,16 +1356,16 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
a->ptr = sndbuf_getfreeptr(bs);
rdch->blocks = sndbuf_getblocks(bs);
CHN_UNLOCK(rdch);
} else
} else
ret = EINVAL;
}
break;
case SNDCTL_DSP_GETOPTR:
case SNDCTL_DSP_GETOPTR:
{
count_info *a = (count_info *)arg;
if (wrch) {
struct snd_dbuf *bs = wrch->bufsoft;
count_info *a = (count_info *)arg;
if (wrch) {
struct snd_dbuf *bs = wrch->bufsoft;
CHN_LOCK(wrch);
a->bytes = bs->total;
@@ -1373,12 +1373,12 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
a->ptr = sndbuf_getreadyptr(bs);
wrch->blocks = sndbuf_getblocks(bs);
CHN_UNLOCK(wrch);
} else
} else
ret = EINVAL;
}
break;
case SNDCTL_DSP_GETCAPS:
case SNDCTL_DSP_GETCAPS:
PCM_LOCK(d);
*arg_i = PCM_CAP_REALTIME | PCM_CAP_MMAP | PCM_CAP_TRIGGER;
if (rdch && wrch && !(pcm_getflags(d->dev) & SD_F_SIMPLEX))
@@ -1390,7 +1390,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
PCM_UNLOCK(d);
break;
case SOUND_PCM_READ_BITS:
case SOUND_PCM_READ_BITS:
chn = wrch ? wrch : rdch;
if (chn) {
CHN_LOCK(chn);
@@ -1411,11 +1411,11 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case SNDCTL_DSP_SETTRIGGER:
case SNDCTL_DSP_SETTRIGGER:
if (rdch) {
CHN_LOCK(rdch);
rdch->flags &= ~CHN_F_NOTRIGGER;
if (*arg_i & PCM_ENABLE_INPUT)
if (*arg_i & PCM_ENABLE_INPUT)
chn_start(rdch, 1);
else {
chn_abort(rdch);
@@ -1427,7 +1427,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
if (wrch) {
CHN_LOCK(wrch);
wrch->flags &= ~CHN_F_NOTRIGGER;
if (*arg_i & PCM_ENABLE_OUTPUT)
if (*arg_i & PCM_ENABLE_OUTPUT)
chn_start(wrch, 1);
else {
chn_abort(wrch);
@@ -1438,7 +1438,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
}
break;
case SNDCTL_DSP_GETTRIGGER:
case SNDCTL_DSP_GETTRIGGER:
*arg_i = 0;
if (wrch) {
CHN_LOCK(wrch);
@@ -1456,7 +1456,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
case SNDCTL_DSP_GETODELAY:
if (wrch) {
struct snd_dbuf *bs = wrch->bufsoft;
struct snd_dbuf *bs = wrch->bufsoft;
CHN_LOCK(wrch);
*arg_i = sndbuf_getready(bs);
@@ -1465,7 +1465,7 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
ret = EINVAL;
break;
case SNDCTL_DSP_POST:
case SNDCTL_DSP_POST:
if (wrch) {
CHN_LOCK(wrch);
wrch->flags &= ~CHN_F_NOTRIGGER;
@@ -1632,18 +1632,18 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
case SNDCTL_DSP_CURRENT_IPTR:
/**
* @note Changing formats resets the buffer counters, which differs
* from the 4Front drivers. However, I don't expect this to be
* much of a problem.
* from the 4Front drivers. However, I don't expect this to be
* much of a problem.
*
* @note In a test where @c CURRENT_OPTR is called immediately after write
* returns, this driver is about 32K samples behind whereas
* 4Front's is about 8K samples behind. Should determine source
* of discrepancy, even if only out of curiosity.
* returns, this driver is about 32K samples behind whereas
* 4Front's is about 8K samples behind. Should determine source
* of discrepancy, even if only out of curiosity.
*
* @todo Actually test SNDCTL_DSP_CURRENT_IPTR.
*/
chn = (cmd == SNDCTL_DSP_CURRENT_OPTR) ? wrch : rdch;
if (chn == NULL)
if (chn == NULL)
ret = EINVAL;
else {
struct snd_dbuf *bs;
@@ -1829,25 +1829,25 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
ret = dsp_oss_setname(wrch, rdch, (oss_longname_t *)arg);
break;
#endif /* !OSSV4_EXPERIMENT */
case SNDCTL_DSP_MAPINBUF:
case SNDCTL_DSP_MAPOUTBUF:
case SNDCTL_DSP_SETSYNCRO:
case SNDCTL_DSP_MAPINBUF:
case SNDCTL_DSP_MAPOUTBUF:
case SNDCTL_DSP_SETSYNCRO:
/* undocumented */
case SNDCTL_DSP_SUBDIVIDE:
case SOUND_PCM_WRITE_FILTER:
case SOUND_PCM_READ_FILTER:
case SNDCTL_DSP_SUBDIVIDE:
case SOUND_PCM_WRITE_FILTER:
case SOUND_PCM_READ_FILTER:
/* dunno what these do, don't sound important */
default:
default:
DEB(printf("default ioctl fn 0x%08lx fail\n", cmd));
ret = EINVAL;
break;
}
}
PCM_GIANT_LEAVE(d);
return (ret);
return (ret);
}
static int
@@ -2313,7 +2313,7 @@ dsp_oss_engineinfo_cb(void *data, void *arg)
*
* @note
* Calling threads must not hold any snddev_info or pcm_channel locks.
*
*
* @param dev device on which the ioctl was issued
* @param ai ioctl request data container
*
@@ -2343,7 +2343,7 @@ dsp_oss_engineinfo(struct cdev *i_dev, oss_audioinfo *ai)
/*
* Search for the requested audio device (channel). Start by
* iterating over pcm devices.
*/
*/
bus_topo_lock();
for (unit = 0; pcm_devclass != NULL &&
unit < devclass_get_maxunit(pcm_devclass); unit++) {
@@ -2518,8 +2518,8 @@ dsp_oss_engineinfo(struct cdev *i_dev, oss_audioinfo *ai)
* the group specified.
*
* @todo As far as memory allocation, should we assume that things are
* okay and allocate with M_WAITOK before acquiring channel locks,
* freeing later if not?
* okay and allocate with M_WAITOK before acquiring channel locks,
* freeing later if not?
*
* @param wrch output channel associated w/ device (if any)
* @param rdch input channel associated w/ device (if any)
@@ -2551,7 +2551,7 @@ dsp_oss_syncgroup(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_syncgr
/*
* - Insert channel(s) into group's member list.
* - Set CHN_F_NOTRIGGER on channel(s).
* - Stop channel(s).
* - Stop channel(s).
*/
/*
@@ -2720,7 +2720,7 @@ dsp_oss_syncstart(int sg_id)
*/
SLIST_FOREACH(sm, &sg->members, link) {
if (CHN_TRYLOCK(sm->ch) == 0) {
int timo = hz * 5/1000;
int timo = hz * 5/1000;
if (timo < 1)
timo = 1;
@@ -2806,7 +2806,7 @@ dsp_oss_syncstart(int sg_id)
* more information.
*
* @todo When SNDCTL_DSP_COOKEDMODE is supported, it'll be necessary to
* work with hardware drivers directly.
* work with hardware drivers directly.
*
* @note PCM channel arguments must not be locked by caller.
*
@@ -2913,7 +2913,7 @@ dsp_oss_cookedmode(struct pcm_channel *wrch, struct pcm_channel *rdch, int enabl
* for more details.
*
* @note As the ioctl definition is still under construction, FreeBSD
* does not currently support SNDCTL_DSP_GET_CHNORDER.
* does not currently support SNDCTL_DSP_GET_CHNORDER.
*
* @param wrch playback channel (optional; may be NULL)
* @param rdch recording channel (optional; may be NULL)
@@ -2944,7 +2944,7 @@ dsp_oss_getchnorder(struct pcm_channel *wrch, struct pcm_channel *rdch, unsigned
* This is the handler for @c SNDCTL_DSP_SET_CHNORDER.
*
* @note As the ioctl definition is still under construction, FreeBSD
* does not currently support @c SNDCTL_DSP_SET_CHNORDER.
* does not currently support @c SNDCTL_DSP_SET_CHNORDER.
*
* @param wrch playback channel (optional; may be NULL)
* @param rdch recording channel (optional; may be NULL)
@@ -3115,7 +3115,7 @@ dsp_kqfilter(struct cdev *dev, struct knote *kn)
* applications may change the labels themselves."
*
* @note As the ioctl definition is still under construction, FreeBSD
* does not currently support @c SNDCTL_GETLABEL.
* does not currently support @c SNDCTL_GETLABEL.
*
* @param wrch playback channel (optional; may be NULL)
* @param rdch recording channel (optional; may be NULL)
@@ -3139,7 +3139,7 @@ dsp_oss_getlabel(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_label_t
* for more details.
*
* @note As the ioctl definition is still under construction, FreeBSD
* does not currently support SNDCTL_SETLABEL.
* does not currently support SNDCTL_SETLABEL.
*
* @param wrch playback channel (optional; may be NULL)
* @param rdch recording channel (optional; may be NULL)
@@ -3164,7 +3164,7 @@ dsp_oss_setlabel(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_label_t
* for more details.
*
* @note As the ioctl definition is still under construction, FreeBSD
* does not currently support SNDCTL_GETSONG.
* does not currently support SNDCTL_GETSONG.
*
* @param wrch playback channel (optional; may be NULL)
* @param rdch recording channel (optional; may be NULL)
@@ -3189,7 +3189,7 @@ dsp_oss_getsong(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname
* for more details.
*
* @note As the ioctl definition is still under construction, FreeBSD
* does not currently support SNDCTL_SETSONG.
* does not currently support SNDCTL_SETSONG.
*
* @param wrch playback channel (optional; may be NULL)
* @param rdch recording channel (optional; may be NULL)
@@ -3218,7 +3218,7 @@ dsp_oss_setsong(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname
* synth' or 'VoIP link to London')."
*
* @note As the ioctl definition is still under construction, FreeBSD
* does not currently support SNDCTL_SETNAME.
* does not currently support SNDCTL_SETNAME.
*
* @param wrch playback channel (optional; may be NULL)
* @param rdch recording channel (optional; may be NULL)
+1 -1
View File
@@ -353,7 +353,7 @@ feed_root(struct pcm_feeder *feeder, struct pcm_channel *ch, uint8_t *buffer, ui
}
static kobj_method_t feeder_root_methods[] = {
KOBJMETHOD(feeder_feed, feed_root),
KOBJMETHOD(feeder_feed, feed_root),
KOBJMETHOD_END
};
static struct feeder_class feeder_root_class = {
+1 -1
View File
@@ -53,7 +53,7 @@ struct feeder_class {
};
struct pcm_feeder {
KOBJ_FIELDS;
KOBJ_FIELDS;
struct pcm_feederdesc desc;
void *data;
struct feeder_class *class;
+1 -1
View File
@@ -650,7 +650,7 @@ feeder_chain(struct pcm_channel *c)
softmatrix = feeder_matrix_format_map(softfmt);
if (softmatrix == NULL) {
/* setup a default matrix */
softmatrix = &c->matrix;
softmatrix = &c->matrix;
feeder_default_matrix(softmatrix, softfmt,
SND_CHN_MATRIX_PCMCHANNEL);
} else {
+1 -1
View File
@@ -568,7 +568,7 @@ feeder_matrix_compare(struct pcmchan_matrix *m_in, struct pcmchan_matrix *m_out)
/*
* XXX 4front interpretation of "surround" is ambigous and sort of
* conflicting with "rear"/"back". Map it to "side". Well..
* conflicting with "rear"/"back". Map it to "side". Well..
* who cares?
*/
static int snd_chn_to_oss[SND_CHN_T_MAX] = {
+3 -3
View File
@@ -504,7 +504,7 @@ z_feed_linear_##SIGN##BIT##ENDIAN(struct z_info *info, uint8_t *dst) \
z += info->z_dy; \
p adv##= info->channels * PCM_##BIT##_BPS
/*
/*
* XXX GCC4 optimization is such a !@#$%, need manual unrolling.
*/
#if defined(__GNUC__) && __GNUC__ >= 4
@@ -544,13 +544,13 @@ z_feed_sinc_##SIGN##BIT##ENDIAN(struct z_info *info, uint8_t *dst) \
c = 0; \
p = info->z_delay + (z_next(info, center, 1) * \
info->channels * PCM_##BIT##_BPS) + ch; \
for (i = info->z_size; i != 0; i -= Z_SINC_ACCUMULATE_DECR) \
for (i = info->z_size; i != 0; i -= Z_SINC_ACCUMULATE_DECR) \
Z_SINC_ACCUMULATE(SIGN, BIT, ENDIAN, +); \
z = info->z_dy - (info->z_alpha * info->z_dx); \
c = 0; \
p = info->z_delay + (center * info->channels * \
PCM_##BIT##_BPS) + ch; \
for (i = info->z_size; i != 0; i -= Z_SINC_ACCUMULATE_DECR) \
for (i = info->z_size; i != 0; i -= Z_SINC_ACCUMULATE_DECR) \
Z_SINC_ACCUMULATE(SIGN, BIT, ENDIAN, -); \
if (info->z_scale != Z_ONE) \
v = Z_SCALE_##BIT(v, info->z_scale); \
+1 -1
View File
@@ -122,7 +122,7 @@
/* 2 @ Stereo 2.0 */
#define SND_CHN_MATRIX_2_0 1
#define SND_CHN_MATRIX_2 SND_CHN_MATRIX_2_0
#define SND_CHN_MATRIX_2 SND_CHN_MATRIX_2_0
/* 3 @ 2.1 (lfe), 3.0 (rear center, DEFAULT) */
#define SND_CHN_MATRIX_2_1 2
+4 -4
View File
@@ -49,7 +49,7 @@ static uint16_t snd_mixerdefaults[SOUND_MIXER_NRDEVICES] = {
[SOUND_MIXER_PCM] = 75,
[SOUND_MIXER_SPEAKER] = 75,
[SOUND_MIXER_LINE] = 75,
[SOUND_MIXER_MIC] = 25,
[SOUND_MIXER_MIC] = 25,
[SOUND_MIXER_CD] = 75,
[SOUND_MIXER_IGAIN] = 0,
[SOUND_MIXER_LINE1] = 75,
@@ -334,7 +334,7 @@ mixer_get_recroute(struct snd_mixer *m, int *route)
*
* This function sets a recording source based on a recording device's
* routing number. Said number is translated to an old school recdev
* mask and passed over mixer_setrecsrc.
* mask and passed over mixer_setrecsrc.
*
* @param m mixer context container thing
*
@@ -925,10 +925,10 @@ mixer_ioctl_cmd(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode,
return (0);
case SNDCTL_CARDINFO:
return (sound_oss_card_info((oss_card_info *)arg));
case SNDCTL_AUDIOINFO:
case SNDCTL_AUDIOINFO:
return (dsp_oss_audioinfo(i_dev, (oss_audioinfo *)arg,
false));
case SNDCTL_AUDIOINFO_EX:
case SNDCTL_AUDIOINFO_EX:
return (dsp_oss_audioinfo(i_dev, (oss_audioinfo *)arg,
true));
case SNDCTL_ENGINEINFO:
+1 -1
View File
@@ -515,7 +515,7 @@ pcm_unregister(device_t dev)
* @brief Handle OSSv4 SNDCTL_SYSINFO ioctl.
*
* @param si Pointer to oss_sysinfo struct where information about the
* sound subsystem will be written/copied.
* sound subsystem will be written/copied.
*
* This routine returns information about the sound system, such as the
* current OSS version, number of audio, MIDI, and mixer drivers, etc.
+2 -2
View File
@@ -207,7 +207,7 @@ vchan_getcaps(kobj_t obj, void *data)
}
if (c->format & AFMT_PASSTHROUGH)
info->caps.minspeed = c->speed;
else
else
info->caps.minspeed = pspeed;
info->caps.maxspeed = info->caps.minspeed;
} else {
@@ -393,7 +393,7 @@ sysctl_dev_pcm_vchanmode(SYSCTL_HANDLER_ARGS)
return (ret);
}
/*
/*
* On the fly vchan rate/format settings
*/
+4 -4
View File
@@ -102,7 +102,7 @@ struct sndstat_file {
size_t devs_nbytes; /* (l) */
TAILQ_HEAD(, sndstat_userdev) userdev_list; /* (l) */
int out_offset;
int in_offset;
int in_offset;
int fflags;
};
@@ -884,7 +884,7 @@ sndstat_dsp_nvlist_is_sane(const nvlist_t *nvlist)
nvlist_exists_number(nvlist, "rfmts")))
return (false);
}
return (true);
}
@@ -1368,7 +1368,7 @@ sndstat_prepare(struct sndstat_file *pf_self)
struct sndstat_entry *ent;
struct snddev_info *d;
struct sndstat_file *pf;
int k;
int k;
/* make sure buffer is reset */
sbuf_clear(s);
@@ -1429,7 +1429,7 @@ sndstat_prepare(struct sndstat_file *pf_self)
sbuf_printf(s, "No devices installed from userspace.\n");
sbuf_finish(s);
return (sbuf_len(s));
return (sbuf_len(s));
}
static void
+8 -8
View File
@@ -725,7 +725,7 @@ static const STRUCT_USB_HOST_ID uaudio_vendor_audio[] = {
{ USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UA33, 0) },
};
/* The following table is derived from Linux's quirks-table.h */
/* The following table is derived from Linux's quirks-table.h */
static const STRUCT_USB_HOST_ID uaudio_vendor_midi[] = {
{ USB_VPI(USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_UX256, 0) },
{ USB_VPI(USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_MU1000, 0) },
@@ -1492,7 +1492,7 @@ uaudio_configure_msg_sub(struct uaudio_softc *sc,
/* FALLTHROUGH */
} else if (sc->sc_audio_rev >= UAUDIO_VERSION_20) {
unsigned int x;
for (x = 0; x != 256; x++) {
if (dir == PCMDIR_PLAY) {
if (!(sc->sc_mixer_clocks.bit_output[x / 8] &
@@ -2520,7 +2520,7 @@ tr_setup:
/* reset receive jitter counters */
ch_rec->jitter_curr = 0;
ch_rec->jitter_rem = 0;
/* compute exact number of transmit jitter samples */
rx_rate = ch_rec->usb_alt[rec_alt].sample_rate;
ch->jitter_curr += tx_jitter / rx_rate;
@@ -3589,7 +3589,7 @@ uaudio_mixer_check_selectors(struct uaudio_softc *sc)
uint16_t j;
uint16_t k;
/* remove existing selector types from the reserve */
/* remove existing selector types from the reserve */
for (i = 0; i < MIX(sc).maxval; i++) {
if (MIX(sc).slctrtype[i] == SOUND_MIXER_NRDEVICES)
continue;
@@ -3930,7 +3930,7 @@ uaudio20_mixer_add_feature(struct uaudio_softc *sc,
MIX(sc).name = "mute";
what = MUTE_CONTROL;
break;
case (3 << 2):
case (3 << 2):
MIX(sc).type = MIX_SIGNED_16;
MIX(sc).ctl = mixernumber;
MIX(sc).name = "vol";
@@ -5600,7 +5600,7 @@ uaudio_mixer_init_sub(struct uaudio_softc *sc, struct snd_mixer *m)
int
uaudio_mixer_uninit_sub(struct uaudio_softc *sc, struct snd_mixer *m)
{
unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m));
unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m));
DPRINTF("child=%u\n", index);
@@ -5616,7 +5616,7 @@ void
uaudio_mixer_set(struct uaudio_softc *sc, struct snd_mixer *m,
unsigned type, unsigned left, unsigned right)
{
unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m));
unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m));
struct uaudio_mixer_node *mc;
int chan;
@@ -5635,7 +5635,7 @@ uaudio_mixer_set(struct uaudio_softc *sc, struct snd_mixer *m,
uint32_t
uaudio_mixer_setrecsrc(struct uaudio_softc *sc, struct snd_mixer *m, uint32_t src)
{
unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m));
unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m));
struct uaudio_mixer_node *mc;
uint32_t mask;
uint32_t temp;
+1 -1
View File
@@ -781,7 +781,7 @@ struct usb_audio20_cluster {
#define UA20_TF_OTHER 0xFF
#define UA20_CS_SAM_FREQ_CONTROL 0x01
#define UA20_CS_CLOCK_VALID_CONTROL 0x02
#define UA20_CS_CLOCK_VALID_CONTROL 0x02
#define UA20_TE_COPY_PROTECT_CONTROL 0x01
#define UA20_TE_CONNECTOR_CONTROL 0x02