fix whitespace bogons
This commit is contained in:
parent
2da5df67a7
commit
26799605fc
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=74797
@ -191,18 +191,18 @@ mixer_ent mix_devices[32][2] = {
|
||||
MIX_NONE(SOUND_MIXER_VOLUME),
|
||||
MIX_NONE(SOUND_MIXER_BASS),
|
||||
MIX_NONE(SOUND_MIXER_TREBLE),
|
||||
#ifdef PC98 /* PC98's synth is assigned to AUX#2 */
|
||||
#ifdef PC98 /* PC98's synth is assigned to AUX#2 */
|
||||
MIX_ENT(SOUND_MIXER_SYNTH, 4, 1, 0, 5, 5, 1, 0, 5),
|
||||
#else /* AT386's synth is assigned to AUX#1 */
|
||||
#else /* AT386's synth is assigned to AUX#1 */
|
||||
MIX_ENT(SOUND_MIXER_SYNTH, 2, 1, 0, 5, 3, 1, 0, 5),
|
||||
#endif
|
||||
MIX_ENT(SOUND_MIXER_PCM, 6, 1, 0, 6, 7, 1, 0, 6),
|
||||
MIX_ENT(SOUND_MIXER_SPEAKER, 26, 1, 0, 4, 0, 0, 0, 0),
|
||||
MIX_ENT(SOUND_MIXER_LINE, 18, 1, 0, 5, 19, 1, 0, 5),
|
||||
MIX_ENT(SOUND_MIXER_MIC, 0, 0, 5, 1, 1, 0, 5, 1),
|
||||
#ifdef PC98 /* PC98's cd-audio is assigned to AUX#1 */
|
||||
#ifdef PC98 /* PC98's cd-audio is assigned to AUX#1 */
|
||||
MIX_ENT(SOUND_MIXER_CD, 2, 1, 0, 5, 3, 1, 0, 5),
|
||||
#else /* AT386's cd-audio is assigned to AUX#2 */
|
||||
#else /* AT386's cd-audio is assigned to AUX#2 */
|
||||
MIX_ENT(SOUND_MIXER_CD, 4, 1, 0, 5, 5, 1, 0, 5),
|
||||
#endif
|
||||
MIX_ENT(SOUND_MIXER_IMIX, 13, 1, 2, 6, 0, 0, 0, 0),
|
||||
|
@ -154,7 +154,7 @@ sb_dspwr(struct sb_info *sb, u_char val)
|
||||
}
|
||||
}
|
||||
if (curproc->p_intr_nesting_level == 0)
|
||||
printf("sb_dspwr(0x%02x) timed out.\n", val);
|
||||
printf("sb_dspwr(0x%02x) timed out.\n", val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -49,9 +49,9 @@
|
||||
*
|
||||
* Taku YAMAMOTO for his Maestro-1/2 FreeBSD driver and sanity reference.
|
||||
* <taku@cent.saitama-u.ac.jp>
|
||||
*
|
||||
*
|
||||
* ESS docs explained a few magic registers and numbers.
|
||||
* http://virgo.caltech.edu/~dmoore/maestro3.pdf.gz
|
||||
* http://virgo.caltech.edu/~dmoore/maestro3.pdf.gz
|
||||
*/
|
||||
|
||||
#include <dev/sound/pcm/sound.h>
|
||||
@ -264,7 +264,7 @@ m3_rd_assp(struct sc_info *sc, u_int16_t region, u_int16_t index)
|
||||
}
|
||||
|
||||
static __inline void
|
||||
m3_wr_assp(struct sc_info *sc, u_int16_t region, u_int16_t index,
|
||||
m3_wr_assp(struct sc_info *sc, u_int16_t region, u_int16_t index,
|
||||
u_int16_t data)
|
||||
{
|
||||
m3_wr_2(sc, DSP_PORT_MEMORY_TYPE, region & MEMTYPE_MASK);
|
||||
@ -395,13 +395,13 @@ m3_pchan_init(kobj_t kobj, void *devinfo, struct snd_dbuf *b, struct pcm_channel
|
||||
}
|
||||
m3_wr_assp_data(sc, ch->dac_data + CDATA_HOST_SRC_ADDRL, LO(bus_addr));
|
||||
m3_wr_assp_data(sc, ch->dac_data + CDATA_HOST_SRC_ADDRH, HI(bus_addr));
|
||||
m3_wr_assp_data(sc, ch->dac_data + CDATA_HOST_SRC_END_PLUS_1L,
|
||||
m3_wr_assp_data(sc, ch->dac_data + CDATA_HOST_SRC_END_PLUS_1L,
|
||||
LO(bus_addr + ch->bufsize));
|
||||
m3_wr_assp_data(sc, ch->dac_data + CDATA_HOST_SRC_END_PLUS_1H,
|
||||
m3_wr_assp_data(sc, ch->dac_data + CDATA_HOST_SRC_END_PLUS_1H,
|
||||
HI(bus_addr + ch->bufsize));
|
||||
m3_wr_assp_data(sc, ch->dac_data + CDATA_HOST_SRC_CURRENTL,
|
||||
m3_wr_assp_data(sc, ch->dac_data + CDATA_HOST_SRC_CURRENTL,
|
||||
LO(bus_addr));
|
||||
m3_wr_assp_data(sc, ch->dac_data + CDATA_HOST_SRC_CURRENTH,
|
||||
m3_wr_assp_data(sc, ch->dac_data + CDATA_HOST_SRC_CURRENTH,
|
||||
HI(bus_addr));
|
||||
|
||||
/* dsp buffers */
|
||||
@ -417,7 +417,7 @@ m3_pchan_init(kobj_t kobj, void *devinfo, struct snd_dbuf *b, struct pcm_channel
|
||||
m3_wr_assp_data(sc, ch->dac_data + CDATA_OUT_BUF_TAIL, dsp_out_buf);
|
||||
|
||||
/* some per client initializers */
|
||||
m3_wr_assp_data(sc, ch->dac_data + SRC3_DIRECTION_OFFSET + 12,
|
||||
m3_wr_assp_data(sc, ch->dac_data + SRC3_DIRECTION_OFFSET + 12,
|
||||
ch->dac_data + 40 + 8);
|
||||
m3_wr_assp_data(sc, ch->dac_data + SRC3_DIRECTION_OFFSET + 19,
|
||||
0x400 + MINISRC_COEF_LOC);
|
||||
@ -425,7 +425,7 @@ m3_pchan_init(kobj_t kobj, void *devinfo, struct snd_dbuf *b, struct pcm_channel
|
||||
m3_wr_assp_data(sc, ch->dac_data + SRC3_DIRECTION_OFFSET + 22, 0);
|
||||
/* tell it which way dma is going? */
|
||||
m3_wr_assp_data(sc, ch->dac_data + CDATA_DMA_CONTROL,
|
||||
DMACONTROL_AUTOREPEAT + DMAC_PAGE3_SELECTOR +
|
||||
DMACONTROL_AUTOREPEAT + DMAC_PAGE3_SELECTOR +
|
||||
DMAC_BLOCKF_SELECTOR);
|
||||
|
||||
/* set an armload of static initializers */
|
||||
@ -434,12 +434,12 @@ m3_pchan_init(kobj_t kobj, void *devinfo, struct snd_dbuf *b, struct pcm_channel
|
||||
}
|
||||
|
||||
/* put us in the packed task lists */
|
||||
m3_wr_assp_data(sc, KDATA_INSTANCE0_MINISRC +
|
||||
(sc->pch_cnt + sc->rch_cnt),
|
||||
m3_wr_assp_data(sc, KDATA_INSTANCE0_MINISRC +
|
||||
(sc->pch_cnt + sc->rch_cnt),
|
||||
ch->dac_data >> DP_SHIFT_COUNT);
|
||||
m3_wr_assp_data(sc, KDATA_DMA_XFER0 + (sc->pch_cnt + sc->rch_cnt),
|
||||
m3_wr_assp_data(sc, KDATA_DMA_XFER0 + (sc->pch_cnt + sc->rch_cnt),
|
||||
ch->dac_data >> DP_SHIFT_COUNT);
|
||||
m3_wr_assp_data(sc, KDATA_MIXER_XFER0 + sc->pch_cnt,
|
||||
m3_wr_assp_data(sc, KDATA_MIXER_XFER0 + sc->pch_cnt,
|
||||
ch->dac_data >> DP_SHIFT_COUNT);
|
||||
|
||||
m3_pchan_trigger(NULL, ch, PCMTRIG_START); /* gotta start before stop */
|
||||
@ -461,9 +461,9 @@ m3_pchan_free(kobj_t kobj, void *chdata)
|
||||
* should remove this exact instance from the packed lists, but all
|
||||
* are released at once (and in a stopped state) so this is ok.
|
||||
*/
|
||||
m3_wr_assp_data(sc, KDATA_INSTANCE0_MINISRC +
|
||||
m3_wr_assp_data(sc, KDATA_INSTANCE0_MINISRC +
|
||||
(sc->pch_cnt - 1) + sc->rch_cnt, 0);
|
||||
m3_wr_assp_data(sc, KDATA_DMA_XFER0 +
|
||||
m3_wr_assp_data(sc, KDATA_DMA_XFER0 +
|
||||
(sc->pch_cnt - 1) + sc->rch_cnt, 0);
|
||||
m3_wr_assp_data(sc, KDATA_MIXER_XFER0 + (sc->pch_cnt-1), 0);
|
||||
|
||||
@ -477,21 +477,21 @@ m3_pchan_setformat(kobj_t kobj, void *chdata, u_int32_t format)
|
||||
struct sc_pchinfo *ch = chdata;
|
||||
struct sc_info *sc = ch->parent;
|
||||
u_int32_t data;
|
||||
|
||||
M3_DEBUG(CHANGE,
|
||||
("m3_pchan_setformat(dac=%d, format=0x%x{%s-%s})\n",
|
||||
|
||||
M3_DEBUG(CHANGE,
|
||||
("m3_pchan_setformat(dac=%d, format=0x%x{%s-%s})\n",
|
||||
ch->dac_idx, format,
|
||||
format & (AFMT_U8|AFMT_S8) ? "8bit":"16bit",
|
||||
format & AFMT_STEREO ? "STEREO":"MONO"));
|
||||
|
||||
|
||||
/* mono word */
|
||||
data = (format & AFMT_STEREO) ? 0 : 1;
|
||||
m3_wr_assp_data(sc, ch->dac_data + SRC3_MODE_OFFSET, data);
|
||||
|
||||
|
||||
/* 8bit word */
|
||||
data = ((format & AFMT_U8) || (format & AFMT_S8)) ? 1 : 0;
|
||||
m3_wr_assp_data(sc, ch->dac_data + SRC3_WORD_LENGTH_OFFSET, data);
|
||||
|
||||
|
||||
ch->fmt = format;
|
||||
return format;
|
||||
}
|
||||
@ -503,7 +503,7 @@ m3_pchan_setspeed(kobj_t kobj, void *chdata, u_int32_t speed)
|
||||
struct sc_info *sc = ch->parent;
|
||||
u_int32_t freq;
|
||||
|
||||
M3_DEBUG(CHANGE, ("m3_pchan_setspeed(dac=%d, speed=%d)\n",
|
||||
M3_DEBUG(CHANGE, ("m3_pchan_setspeed(dac=%d, speed=%d)\n",
|
||||
ch->dac_idx, speed));
|
||||
|
||||
if ((freq = ((speed << 15) + 24000) / 48000) != 0) {
|
||||
@ -521,7 +521,7 @@ m3_pchan_setblocksize(kobj_t kobj, void *chdata, u_int32_t blocksize)
|
||||
{
|
||||
struct sc_pchinfo *ch = chdata;
|
||||
|
||||
M3_DEBUG(CHANGE, ("m3_pchan_setblocksize(dac=%d, blocksize=%d)\n",
|
||||
M3_DEBUG(CHANGE, ("m3_pchan_setblocksize(dac=%d, blocksize=%d)\n",
|
||||
ch->dac_idx, blocksize));
|
||||
|
||||
return blocksize;
|
||||
@ -533,7 +533,7 @@ m3_pchan_trigger(kobj_t kobj, void *chdata, int go)
|
||||
struct sc_pchinfo *ch = chdata;
|
||||
struct sc_info *sc = ch->parent;
|
||||
u_int32_t data;
|
||||
|
||||
|
||||
M3_DEBUG(go == PCMTRIG_START ? CHANGE :
|
||||
go == PCMTRIG_STOP ? CHANGE :
|
||||
go == PCMTRIG_ABORT ? CHANGE :
|
||||
@ -550,15 +550,15 @@ m3_pchan_trigger(kobj_t kobj, void *chdata, int go)
|
||||
}
|
||||
ch->active = 1;
|
||||
sc->pch_active_cnt++;
|
||||
|
||||
|
||||
/*[[inc_timer_users]]*/
|
||||
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_2(sc, HOST_INT_CTRL, data | CLKRUN_GEN_ENABLE);
|
||||
|
||||
|
||||
m3_wr_assp_data(sc, ch->dac_data + CDATA_INSTANCE_READY, 1);
|
||||
m3_wr_assp_data(sc, KDATA_MIXER_TASK_NUMBER,
|
||||
m3_wr_assp_data(sc, KDATA_MIXER_TASK_NUMBER,
|
||||
sc->pch_active_cnt);
|
||||
break;
|
||||
|
||||
@ -576,9 +576,9 @@ m3_pchan_trigger(kobj_t kobj, void *chdata, int go)
|
||||
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);
|
||||
|
||||
|
||||
m3_wr_assp_data(sc, ch->dac_data + CDATA_INSTANCE_READY, 0);
|
||||
m3_wr_assp_data(sc, KDATA_MIXER_TASK_NUMBER,
|
||||
m3_wr_assp_data(sc, KDATA_MIXER_TASK_NUMBER,
|
||||
sc->pch_active_cnt);
|
||||
break;
|
||||
|
||||
@ -604,7 +604,7 @@ m3_pchan_getptr(kobj_t kobj, void *chdata)
|
||||
lo = m3_rd_assp_data(sc, ch->dac_data + CDATA_HOST_SRC_CURRENTL);
|
||||
bus_crnt = lo | (hi << 16);
|
||||
|
||||
M3_DEBUG(CALL, ("m3_pchan_getptr(dac=%d) result=%d\n",
|
||||
M3_DEBUG(CALL, ("m3_pchan_getptr(dac=%d) result=%d\n",
|
||||
ch->dac_idx, bus_crnt - bus_base));
|
||||
|
||||
return (bus_crnt - bus_base); /* current byte offset of channel */
|
||||
@ -666,7 +666,7 @@ m3_rchan_init(kobj_t kobj, void *devinfo, struct snd_dbuf *b, struct pcm_channel
|
||||
return NULL;
|
||||
}
|
||||
ch->bufsize = sndbuf_getsize(ch->buffer);
|
||||
|
||||
|
||||
/* host dma buffer pointers */
|
||||
bus_addr = vtophys(sndbuf_getbuf(ch->buffer));
|
||||
if (bus_addr & 3) {
|
||||
@ -675,13 +675,13 @@ m3_rchan_init(kobj_t kobj, void *devinfo, struct snd_dbuf *b, struct pcm_channel
|
||||
}
|
||||
m3_wr_assp_data(sc, ch->adc_data + CDATA_HOST_SRC_ADDRL, LO(bus_addr));
|
||||
m3_wr_assp_data(sc, ch->adc_data + CDATA_HOST_SRC_ADDRH, HI(bus_addr));
|
||||
m3_wr_assp_data(sc, ch->adc_data + CDATA_HOST_SRC_END_PLUS_1L,
|
||||
m3_wr_assp_data(sc, ch->adc_data + CDATA_HOST_SRC_END_PLUS_1L,
|
||||
LO(bus_addr + ch->bufsize));
|
||||
m3_wr_assp_data(sc, ch->adc_data + CDATA_HOST_SRC_END_PLUS_1H,
|
||||
m3_wr_assp_data(sc, ch->adc_data + CDATA_HOST_SRC_END_PLUS_1H,
|
||||
HI(bus_addr + ch->bufsize));
|
||||
m3_wr_assp_data(sc, ch->adc_data + CDATA_HOST_SRC_CURRENTL,
|
||||
m3_wr_assp_data(sc, ch->adc_data + CDATA_HOST_SRC_CURRENTL,
|
||||
LO(bus_addr));
|
||||
m3_wr_assp_data(sc, ch->adc_data + CDATA_HOST_SRC_CURRENTH,
|
||||
m3_wr_assp_data(sc, ch->adc_data + CDATA_HOST_SRC_CURRENTH,
|
||||
HI(bus_addr));
|
||||
|
||||
/* dsp buffers */
|
||||
@ -697,10 +697,10 @@ m3_rchan_init(kobj_t kobj, void *devinfo, struct snd_dbuf *b, struct pcm_channel
|
||||
m3_wr_assp_data(sc, ch->adc_data + CDATA_OUT_BUF_TAIL, dsp_out_buf);
|
||||
|
||||
/* some per client initializers */
|
||||
m3_wr_assp_data(sc, ch->adc_data + SRC3_DIRECTION_OFFSET + 12,
|
||||
m3_wr_assp_data(sc, ch->adc_data + SRC3_DIRECTION_OFFSET + 12,
|
||||
ch->adc_data + 40 + 8);
|
||||
m3_wr_assp_data(sc, ch->adc_data + CDATA_DMA_CONTROL,
|
||||
DMACONTROL_DIRECTION + DMACONTROL_AUTOREPEAT +
|
||||
DMACONTROL_DIRECTION + DMACONTROL_AUTOREPEAT +
|
||||
DMAC_PAGE3_SELECTOR + DMAC_BLOCKF_SELECTOR);
|
||||
|
||||
/* set an armload of static initializers */
|
||||
@ -709,17 +709,17 @@ m3_rchan_init(kobj_t kobj, void *devinfo, struct snd_dbuf *b, struct pcm_channel
|
||||
}
|
||||
|
||||
/* put us in the packed task lists */
|
||||
m3_wr_assp_data(sc, KDATA_INSTANCE0_MINISRC +
|
||||
(sc->pch_cnt + sc->rch_cnt),
|
||||
m3_wr_assp_data(sc, KDATA_INSTANCE0_MINISRC +
|
||||
(sc->pch_cnt + sc->rch_cnt),
|
||||
ch->adc_data >> DP_SHIFT_COUNT);
|
||||
m3_wr_assp_data(sc, KDATA_DMA_XFER0 + (sc->pch_cnt + sc->rch_cnt),
|
||||
ch->adc_data >> DP_SHIFT_COUNT);
|
||||
m3_wr_assp_data(sc, KDATA_ADC1_XFER0 + sc->rch_cnt,
|
||||
m3_wr_assp_data(sc, KDATA_ADC1_XFER0 + sc->rch_cnt,
|
||||
ch->adc_data >> DP_SHIFT_COUNT);
|
||||
|
||||
m3_rchan_trigger(NULL, ch, PCMTRIG_START); /* gotta start before stop */
|
||||
m3_rchan_trigger(NULL, ch, PCMTRIG_STOP); /* stop on init */
|
||||
|
||||
|
||||
sc->rch_cnt++;
|
||||
return ch;
|
||||
}
|
||||
@ -736,9 +736,9 @@ m3_rchan_free(kobj_t kobj, void *chdata)
|
||||
* should remove this exact instance from the packed lists, but all
|
||||
* are released at once (and in a stopped state) so this is ok.
|
||||
*/
|
||||
m3_wr_assp_data(sc, KDATA_INSTANCE0_MINISRC +
|
||||
m3_wr_assp_data(sc, KDATA_INSTANCE0_MINISRC +
|
||||
(sc->rch_cnt - 1) + sc->pch_cnt, 0);
|
||||
m3_wr_assp_data(sc, KDATA_DMA_XFER0 +
|
||||
m3_wr_assp_data(sc, KDATA_DMA_XFER0 +
|
||||
(sc->rch_cnt - 1) + sc->pch_cnt, 0);
|
||||
m3_wr_assp_data(sc, KDATA_ADC1_XFER0 + (sc->rch_cnt - 1), 0);
|
||||
|
||||
@ -752,21 +752,21 @@ m3_rchan_setformat(kobj_t kobj, void *chdata, u_int32_t format)
|
||||
struct sc_rchinfo *ch = chdata;
|
||||
struct sc_info *sc = ch->parent;
|
||||
u_int32_t data;
|
||||
|
||||
M3_DEBUG(CHANGE,
|
||||
("m3_rchan_setformat(dac=%d, format=0x%x{%s-%s})\n",
|
||||
|
||||
M3_DEBUG(CHANGE,
|
||||
("m3_rchan_setformat(dac=%d, format=0x%x{%s-%s})\n",
|
||||
ch->adc_idx, format,
|
||||
format & (AFMT_U8|AFMT_S8) ? "8bit":"16bit",
|
||||
format & AFMT_STEREO ? "STEREO":"MONO"));
|
||||
|
||||
|
||||
/* mono word */
|
||||
data = (format & AFMT_STEREO) ? 0 : 1;
|
||||
m3_wr_assp_data(sc, ch->adc_data + SRC3_MODE_OFFSET, data);
|
||||
|
||||
|
||||
/* 8bit word */
|
||||
data = ((format & AFMT_U8) || (format & AFMT_S8)) ? 1 : 0;
|
||||
m3_wr_assp_data(sc, ch->adc_data + SRC3_WORD_LENGTH_OFFSET, data);
|
||||
|
||||
|
||||
ch->fmt = format;
|
||||
return format;
|
||||
}
|
||||
@ -777,8 +777,8 @@ m3_rchan_setspeed(kobj_t kobj, void *chdata, u_int32_t speed)
|
||||
struct sc_rchinfo *ch = chdata;
|
||||
struct sc_info *sc = ch->parent;
|
||||
u_int32_t freq;
|
||||
|
||||
M3_DEBUG(CHANGE, ("m3_rchan_setspeed(adc=%d, speed=%d)\n",
|
||||
|
||||
M3_DEBUG(CHANGE, ("m3_rchan_setspeed(adc=%d, speed=%d)\n",
|
||||
ch->adc_idx, speed));
|
||||
|
||||
if ((freq = ((speed << 15) + 24000) / 48000) != 0) {
|
||||
@ -796,7 +796,7 @@ m3_rchan_setblocksize(kobj_t kobj, void *chdata, u_int32_t blocksize)
|
||||
{
|
||||
struct sc_rchinfo *ch = chdata;
|
||||
|
||||
M3_DEBUG(CHANGE, ("m3_rchan_setblocksize(adc=%d, blocksize=%d)\n",
|
||||
M3_DEBUG(CHANGE, ("m3_rchan_setblocksize(adc=%d, blocksize=%d)\n",
|
||||
ch->adc_idx, blocksize));
|
||||
|
||||
return blocksize;
|
||||
@ -824,13 +824,13 @@ m3_rchan_trigger(kobj_t kobj, void *chdata, int go)
|
||||
return 0;
|
||||
}
|
||||
ch->active = 1;
|
||||
|
||||
|
||||
/*[[inc_timer_users]]*/
|
||||
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_2(sc, HOST_INT_CTRL, data | CLKRUN_GEN_ENABLE);
|
||||
|
||||
|
||||
m3_wr_assp_data(sc, KDATA_ADC1_REQUEST, 1);
|
||||
m3_wr_assp_data(sc, ch->adc_data + CDATA_INSTANCE_READY, 1);
|
||||
break;
|
||||
@ -847,7 +847,7 @@ m3_rchan_trigger(kobj_t kobj, void *chdata, int go)
|
||||
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);
|
||||
|
||||
|
||||
m3_wr_assp_data(sc, ch->adc_data + CDATA_INSTANCE_READY, 0);
|
||||
m3_wr_assp_data(sc, KDATA_ADC1_REQUEST, 0);
|
||||
break;
|
||||
@ -874,7 +874,7 @@ m3_rchan_getptr(kobj_t kobj, void *chdata)
|
||||
lo = m3_rd_assp_data(sc, ch->adc_data + CDATA_HOST_SRC_CURRENTL);
|
||||
bus_crnt = lo | (hi << 16);
|
||||
|
||||
M3_DEBUG(CALL, ("m3_rchan_getptr(adc=%d) result=%d\n",
|
||||
M3_DEBUG(CALL, ("m3_rchan_getptr(adc=%d) result=%d\n",
|
||||
ch->adc_idx, bus_crnt - bus_base));
|
||||
|
||||
return (bus_crnt - bus_base); /* current byte offset of channel */
|
||||
@ -898,7 +898,7 @@ m3_intr(void *p)
|
||||
{
|
||||
struct sc_info *sc = (struct sc_info *)p;
|
||||
u_int32_t status, ctl, i;
|
||||
|
||||
|
||||
M3_DEBUG(INTR, ("m3_intr\n"));
|
||||
|
||||
status = m3_rd_1(sc, HOST_INT_STATUS);
|
||||
@ -928,7 +928,7 @@ m3_intr(void *p)
|
||||
device_printf(sc->dev, "Unknown HWVOL event\n");
|
||||
}
|
||||
m3_wr_1(sc, HW_VOL_COUNTER_MASTER, 0x88);
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (status & ASSP_INT_PENDING) {
|
||||
@ -936,13 +936,13 @@ m3_intr(void *p)
|
||||
if (!(ctl & STOP_ASSP_CLOCK)) {
|
||||
ctl = m3_rd_1(sc, ASSP_HOST_INT_STATUS);
|
||||
if (ctl & DSP2HOST_REQ_TIMER) {
|
||||
m3_wr_1(sc, ASSP_HOST_INT_STATUS,
|
||||
m3_wr_1(sc, ASSP_HOST_INT_STATUS,
|
||||
DSP2HOST_REQ_TIMER);
|
||||
/*[[ess_update_ptr]]*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (i=0 ; i<sc->pch_cnt ; i++) {
|
||||
if (sc->pch[i].active) {
|
||||
chn_intr(sc->pch[i].channel);
|
||||
@ -987,7 +987,7 @@ m3_init(struct sc_info *sc)
|
||||
pci_write_config(sc->dev, PCI_LEGACY_AUDIO_CTRL, data, 2);
|
||||
|
||||
m3_config(sc);
|
||||
|
||||
|
||||
reset_state = m3_assp_halt(sc);
|
||||
|
||||
m3_codec_reset(sc);
|
||||
@ -1004,12 +1004,12 @@ m3_init(struct sc_info *sc)
|
||||
m3_wr_assp_data(sc, KDATA_BASE_ADDR2 + i, 0);
|
||||
}
|
||||
/* init dma pointer */
|
||||
m3_wr_assp_data(sc, KDATA_CURRENT_DMA,
|
||||
m3_wr_assp_data(sc, KDATA_CURRENT_DMA,
|
||||
KDATA_DMA_XFER0);
|
||||
/* write kernel into code memory */
|
||||
size = sizeof(assp_kernel_image);
|
||||
for(i = 0 ; i < size / 2; i++) {
|
||||
m3_wr_assp_code(sc, REV_B_CODE_MEMORY_BEGIN + i,
|
||||
m3_wr_assp_code(sc, REV_B_CODE_MEMORY_BEGIN + i,
|
||||
assp_kernel_image[i]);
|
||||
}
|
||||
/*
|
||||
@ -1024,7 +1024,7 @@ m3_init(struct sc_info *sc)
|
||||
/* write the coefficients for the low pass filter? */
|
||||
size = sizeof(minisrc_lpf_image);
|
||||
for(i = 0; i < size / 2 ; i++) {
|
||||
m3_wr_assp_code(sc,0x400 + MINISRC_COEF_LOC + i,
|
||||
m3_wr_assp_code(sc,0x400 + MINISRC_COEF_LOC + i,
|
||||
minisrc_lpf_image[i]);
|
||||
}
|
||||
m3_wr_assp_code(sc, 0x400 + MINISRC_COEF_LOC + size, 0x8000);
|
||||
@ -1037,7 +1037,7 @@ m3_init(struct sc_info *sc)
|
||||
m3_wr_assp_data(sc, KDATA_DAC_RIGHT_VOLUME, ARB_VOLUME);
|
||||
|
||||
m3_amp_enable(sc);
|
||||
|
||||
|
||||
/* [m3_assp_client_init] (only one client at index 0) */
|
||||
for (i=0x1100 ; i<0x1c00 ; i++) {
|
||||
m3_wr_assp_data(sc, i, 0); /* zero entire dac/adc area */
|
||||
@ -1065,7 +1065,7 @@ static int
|
||||
m3_pci_probe(device_t dev)
|
||||
{
|
||||
struct m3_card_type *card;
|
||||
|
||||
|
||||
M3_DEBUG(CALL, ("m3_pci_probe(0x%x)\n", pci_get_devid(dev)));
|
||||
|
||||
for (card = m3_card_types ; card->pci_id ; card++) {
|
||||
@ -1086,7 +1086,7 @@ m3_pci_attach(device_t dev)
|
||||
char status[SND_STATUSLEN];
|
||||
struct m3_card_type *card;
|
||||
int len;
|
||||
|
||||
|
||||
M3_DEBUG(CALL, ("m3_pci_attach\n"));
|
||||
|
||||
if ((sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT | M_ZERO)) == NULL) {
|
||||
@ -1143,7 +1143,7 @@ m3_pci_attach(device_t dev)
|
||||
/*lowaddr*/BUS_SPACE_MAXADDR_32BIT,
|
||||
/*highaddr*/BUS_SPACE_MAXADDR,
|
||||
/*filter*/NULL, /*filterarg*/NULL,
|
||||
/*maxsize*/M3_BUFSIZE, /*nsegments*/1,
|
||||
/*maxsize*/M3_BUFSIZE, /*nsegments*/1,
|
||||
/*maxsegz*/0x3ffff,
|
||||
/*flags*/0, &sc->parent_dmat) != 0) {
|
||||
device_printf(dev, "unable to create dma tag\n");
|
||||
@ -1195,7 +1195,7 @@ m3_pci_attach(device_t dev)
|
||||
mixer_hwvol_init(dev);
|
||||
|
||||
/* Create the buffer for saving the card state during suspend */
|
||||
len = sizeof(u_int16_t) * (REV_B_CODE_MEMORY_LENGTH +
|
||||
len = sizeof(u_int16_t) * (REV_B_CODE_MEMORY_LENGTH +
|
||||
REV_B_DATA_MEMORY_LENGTH);
|
||||
sc->savemem = (u_int16_t*)malloc(len, M_DEVBUF, M_NOWAIT | M_ZERO);
|
||||
if (sc->savemem == NULL) {
|
||||
@ -1300,7 +1300,7 @@ m3_pci_resume(device_t dev)
|
||||
m3_power(sc, 0);
|
||||
|
||||
m3_config(sc);
|
||||
|
||||
|
||||
reset_state = m3_assp_halt(sc);
|
||||
|
||||
/* Restore the ASSP state */
|
||||
@ -1338,7 +1338,7 @@ static int
|
||||
m3_pci_shutdown(device_t dev)
|
||||
{
|
||||
struct sc_info *sc = pcm_getdevinfo(dev);
|
||||
|
||||
|
||||
M3_DEBUG(CALL, ("m3_pci_shutdown\n"));
|
||||
|
||||
m3_power(sc, 3); /* power off */
|
||||
@ -1450,10 +1450,10 @@ m3_codec_reset(struct sc_info *sc)
|
||||
m3_wr_2(sc, SDO_OUT_DEST_CTRL, data & ~COMMAND_ADDR_OUT);
|
||||
data = m3_rd_2(sc, SDO_IN_DEST_CTRL);
|
||||
m3_wr_2(sc, SDO_IN_DEST_CTRL, data & ~STATUS_ADDR_IN);
|
||||
|
||||
|
||||
m3_wr_2(sc, RING_BUS_CTRL_A, IO_SRAM_ENABLE);
|
||||
DELAY(20);
|
||||
|
||||
|
||||
m3_wr_2(sc, GPIO_DIRECTION, dir & ~GPO_PRIMARY_AC97);
|
||||
m3_wr_2(sc, GPIO_MASK, ~GPO_PRIMARY_AC97);
|
||||
m3_wr_2(sc, GPIO_DATA, 0);
|
||||
@ -1461,11 +1461,11 @@ m3_codec_reset(struct sc_info *sc)
|
||||
DELAY(sc->delay1 * 1000); /*delay1 (ALLEGRO:50, MAESTRO3:20)*/
|
||||
m3_wr_2(sc, GPIO_DATA, GPO_PRIMARY_AC97);
|
||||
DELAY(5);
|
||||
m3_wr_2(sc, RING_BUS_CTRL_A, IO_SRAM_ENABLE |
|
||||
m3_wr_2(sc, RING_BUS_CTRL_A, IO_SRAM_ENABLE |
|
||||
SERIAL_AC_LINK_ENABLE);
|
||||
m3_wr_2(sc, GPIO_MASK, ~0);
|
||||
DELAY(sc->delay2 * 1000); /*delay2 (ALLEGRO:800, MAESTRO3:500)*/
|
||||
|
||||
|
||||
/* [[try read vendor]] */
|
||||
data = m3_rdcd(NULL, sc, 0x7c);
|
||||
if ((data == 0) || (data == 0xffff)) {
|
||||
|
@ -70,8 +70,8 @@ struct via_chinfo {
|
||||
struct via_info {
|
||||
bus_space_tag_t st;
|
||||
bus_space_handle_t sh;
|
||||
bus_dma_tag_t parent_dmat;
|
||||
bus_dma_tag_t sgd_dmat;
|
||||
bus_dma_tag_t parent_dmat;
|
||||
bus_dma_tag_t sgd_dmat;
|
||||
bus_dmamap_t sgd_dmamap;
|
||||
|
||||
struct resource *reg, *irq;
|
||||
@ -81,7 +81,7 @@ struct via_info {
|
||||
|
||||
struct via_chinfo pch, rch;
|
||||
struct via_dma_op *sgd_table;
|
||||
u_int16_t codec_caps;
|
||||
u_int16_t codec_caps;
|
||||
};
|
||||
|
||||
static u_int32_t via_fmt[] = {
|
||||
@ -267,7 +267,7 @@ viachan_setformat(kobj_t obj, void *data, u_int32_t format)
|
||||
{
|
||||
struct via_chinfo *ch = data;
|
||||
struct via_info *via = ch->parent;
|
||||
int mode, mode_set;
|
||||
int mode, mode_set;
|
||||
|
||||
mode_set = 0;
|
||||
if (format & AFMT_STEREO)
|
||||
@ -277,8 +277,8 @@ viachan_setformat(kobj_t obj, void *data, u_int32_t format)
|
||||
|
||||
DEB(printf("set format: dir = %d, format=%x\n", ch->dir, format));
|
||||
mode = via_rd(via, ch->mode, 1);
|
||||
mode &= ~(VIA_RPMODE_16BIT | VIA_RPMODE_STEREO);
|
||||
mode |= mode_set;
|
||||
mode &= ~(VIA_RPMODE_16BIT | VIA_RPMODE_STEREO);
|
||||
mode |= mode_set;
|
||||
via_wr(via, ch->mode, mode, 1);
|
||||
|
||||
return 0;
|
||||
@ -329,9 +329,9 @@ viachan_trigger(kobj_t obj, void *data, int go)
|
||||
return 0;
|
||||
|
||||
ado = ch->sgd_table;
|
||||
DEB(printf("ado located at va=%p pa=%x\n", ado, vtophys(ado)));
|
||||
DEB(printf("ado located at va=%p pa=%x\n", ado, vtophys(ado)));
|
||||
|
||||
if (go == PCMTRIG_START) {
|
||||
if (go == PCMTRIG_START) {
|
||||
via_buildsgdt(ch);
|
||||
via_wr(via, ch->base, vtophys(ado), 4);
|
||||
via_wr(via, ch->ctrl, VIA_RPCTRL_START, 1);
|
||||
@ -357,16 +357,16 @@ viachan_getptr(kobj_t obj, void *data)
|
||||
if (base != base1) /* Avoid race hazard */
|
||||
len = via_rd(via, ch->count, 4);
|
||||
|
||||
DEB(printf("viachan_getptr: len / base = %x / %x\n", len, base));
|
||||
DEB(printf("viachan_getptr: len / base = %x / %x\n", len, base));
|
||||
|
||||
/* Base points to SGD segment to do, one past current */
|
||||
|
||||
/* Determine how many segments have been done */
|
||||
seg = (base - vtophys(ado)) / sizeof(struct via_dma_op);
|
||||
/* Determine how many segments have been done */
|
||||
seg = (base - vtophys(ado)) / sizeof(struct via_dma_op);
|
||||
if (seg == 0)
|
||||
seg = SEGS_PER_CHAN;
|
||||
|
||||
/* Now work out offset: seg less count */
|
||||
/* Now work out offset: seg less count */
|
||||
ptr = (seg * sndbuf_getsize(ch->buffer) / SEGS_PER_CHAN) - len;
|
||||
if (ch->dir == PCMDIR_REC) {
|
||||
/* DMA appears to operate on memory 'lines' of 32 bytes */
|
||||
@ -374,8 +374,8 @@ viachan_getptr(kobj_t obj, void *data)
|
||||
ptr = ptr & ~0x1f;
|
||||
}
|
||||
|
||||
DEB(printf("return ptr=%d\n", ptr));
|
||||
return ptr;
|
||||
DEB(printf("return ptr=%d\n", ptr));
|
||||
return ptr;
|
||||
}
|
||||
|
||||
static struct pcmchan_caps *
|
||||
@ -447,8 +447,8 @@ static int
|
||||
via_attach(device_t dev)
|
||||
{
|
||||
struct via_info *via = 0;
|
||||
char status[SND_STATUSLEN];
|
||||
u_int32_t data;
|
||||
char status[SND_STATUSLEN];
|
||||
u_int32_t data;
|
||||
|
||||
if ((via = malloc(sizeof *via, M_DEVBUF, M_NOWAIT)) == NULL) {
|
||||
device_printf(dev, "cannot allocate softc\n");
|
||||
|
@ -108,13 +108,13 @@ static struct pcmchan_caps sc_caps = {8000, 48000, sc_fmt, 0};
|
||||
#define sv_direct_set(x, y, z) _sv_direct_set(x, y, z, __LINE__)
|
||||
|
||||
static u_int8_t
|
||||
sv_direct_get(struct sc_info *sc, u_int8_t reg)
|
||||
sv_direct_get(struct sc_info *sc, u_int8_t reg)
|
||||
{
|
||||
return bus_space_read_1(sc->enh_st, sc->enh_sh, reg);
|
||||
}
|
||||
|
||||
static void
|
||||
_sv_direct_set(struct sc_info *sc, u_int8_t reg, u_int8_t val, int line)
|
||||
_sv_direct_set(struct sc_info *sc, u_int8_t reg, u_int8_t val, int line)
|
||||
{
|
||||
u_int8_t n;
|
||||
bus_space_write_1(sc->enh_st, sc->enh_sh, reg, val);
|
||||
@ -126,9 +126,9 @@ _sv_direct_set(struct sc_info *sc, u_int8_t reg, u_int8_t val, int line)
|
||||
}
|
||||
|
||||
static u_int8_t
|
||||
sv_indirect_get(struct sc_info *sc, u_int8_t reg)
|
||||
sv_indirect_get(struct sc_info *sc, u_int8_t reg)
|
||||
{
|
||||
if (reg == SV_REG_FORMAT || reg == SV_REG_ANALOG_PWR)
|
||||
if (reg == SV_REG_FORMAT || reg == SV_REG_ANALOG_PWR)
|
||||
reg |= SV_CM_INDEX_MCE;
|
||||
|
||||
bus_space_write_1(sc->enh_st, sc->enh_sh, SV_CM_INDEX, reg);
|
||||
@ -138,9 +138,9 @@ sv_indirect_get(struct sc_info *sc, u_int8_t reg)
|
||||
#define sv_indirect_set(x, y, z) _sv_indirect_set(x, y, z, __LINE__)
|
||||
|
||||
static void
|
||||
_sv_indirect_set(struct sc_info *sc, u_int8_t reg, u_int8_t val, int line)
|
||||
_sv_indirect_set(struct sc_info *sc, u_int8_t reg, u_int8_t val, int line)
|
||||
{
|
||||
if (reg == SV_REG_FORMAT || reg == SV_REG_ANALOG_PWR)
|
||||
if (reg == SV_REG_FORMAT || reg == SV_REG_ANALOG_PWR)
|
||||
reg |= SV_CM_INDEX_MCE;
|
||||
|
||||
bus_space_write_1(sc->enh_st, sc->enh_sh, SV_CM_INDEX, reg);
|
||||
@ -156,8 +156,8 @@ _sv_indirect_set(struct sc_info *sc, u_int8_t reg, u_int8_t val, int line)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
sv_dma_set_config(bus_space_tag_t st, bus_space_handle_t sh,
|
||||
static void
|
||||
sv_dma_set_config(bus_space_tag_t st, bus_space_handle_t sh,
|
||||
u_int32_t base, u_int32_t count, u_int8_t mode)
|
||||
{
|
||||
bus_space_write_4(st, sh, SV_DMA_ADDR, base);
|
||||
@ -182,7 +182,7 @@ svchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *c
|
||||
{
|
||||
struct sc_info *sc = devinfo;
|
||||
struct sc_chinfo *ch;
|
||||
ch = (dir == PCMDIR_PLAY) ? &sc->pch : &sc->rch;
|
||||
ch = (dir == PCMDIR_PLAY) ? &sc->pch : &sc->rch;
|
||||
|
||||
ch->parent = sc;
|
||||
ch->channel = c;
|
||||
@ -206,7 +206,7 @@ svchan_getcaps(kobj_t obj, void *data)
|
||||
return &sc_caps;
|
||||
}
|
||||
|
||||
static int
|
||||
static int
|
||||
svchan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize)
|
||||
{
|
||||
struct sc_chinfo *ch = data;
|
||||
@ -229,7 +229,7 @@ svchan_setformat(kobj_t obj, void *data, u_int32_t format)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
static int
|
||||
svchan_setspeed(kobj_t obj, void *data, u_int32_t speed)
|
||||
{
|
||||
struct sc_chinfo *ch = data;
|
||||
@ -241,7 +241,7 @@ svchan_setspeed(kobj_t obj, void *data, u_int32_t speed)
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Recording interface */
|
||||
|
||||
static int
|
||||
static int
|
||||
sv_set_recspeed(struct sc_info *sc, u_int32_t speed)
|
||||
{
|
||||
u_int32_t f_out, f_actual;
|
||||
@ -266,12 +266,12 @@ sv_set_recspeed(struct sc_info *sc, u_int32_t speed)
|
||||
/* Search over r, n, m */
|
||||
for (r = rs; r <= re; r++) {
|
||||
r2 = (1 << r);
|
||||
for (n = 3; n < 34; n++) {
|
||||
for (n = 3; n < 34; n++) {
|
||||
m = f_out * n / (SV_F_REF / r2);
|
||||
ms = (m > 3) ? (m - 1) : 3;
|
||||
me = (m < 129) ? (m + 1) : 129;
|
||||
for (m = ms; m <= me; m++) {
|
||||
f_actual = m * SV_F_REF / (n * r2);
|
||||
f_actual = m * SV_F_REF / (n * r2);
|
||||
if (f_actual > f_out) {
|
||||
err = f_actual - f_out;
|
||||
} else {
|
||||
@ -289,7 +289,7 @@ sv_set_recspeed(struct sc_info *sc, u_int32_t speed)
|
||||
}
|
||||
|
||||
sv_indirect_set(sc, SV_REG_ADC_PLLM, best_m);
|
||||
sv_indirect_set(sc, SV_REG_ADC_PLLN,
|
||||
sv_indirect_set(sc, SV_REG_ADC_PLLN,
|
||||
SV_ADC_PLLN(best_n) | SV_ADC_PLLR(best_r));
|
||||
DEB(printf("svrchan_setspeed: %d -> PLLM 0x%02x PLLNR 0x%08x\n",
|
||||
speed,
|
||||
@ -298,7 +298,7 @@ sv_set_recspeed(struct sc_info *sc, u_int32_t speed)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
static int
|
||||
svrchan_trigger(kobj_t obj, void *data, int go)
|
||||
{
|
||||
struct sc_chinfo *ch = data;
|
||||
@ -341,7 +341,7 @@ svrchan_trigger(kobj_t obj, void *data, int go)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
static int
|
||||
svrchan_getptr(kobj_t obj, void *data)
|
||||
{
|
||||
struct sc_chinfo *ch = data;
|
||||
@ -350,7 +350,7 @@ svrchan_getptr(kobj_t obj, void *data)
|
||||
|
||||
sz = sndbuf_getsize(ch->buffer);
|
||||
/* DMAC uses words */
|
||||
remain = (sv_dma_get_count(sc->dmac_st, sc->dmac_sh) + 1) * 2;
|
||||
remain = (sv_dma_get_count(sc->dmac_st, sc->dmac_sh) + 1) * 2;
|
||||
return sz - remain;
|
||||
}
|
||||
|
||||
@ -369,7 +369,7 @@ CHANNEL_DECLARE(svrchan);
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Playback interface */
|
||||
|
||||
static int
|
||||
static int
|
||||
svpchan_trigger(kobj_t obj, void *data, int go)
|
||||
{
|
||||
struct sc_chinfo *ch = data;
|
||||
@ -381,7 +381,7 @@ svpchan_trigger(kobj_t obj, void *data, int go)
|
||||
case PCMTRIG_START:
|
||||
/* Set speed */
|
||||
speed = (ch->spd * 65536) / 48000;
|
||||
if (speed > 65535)
|
||||
if (speed > 65535)
|
||||
speed = 65535;
|
||||
sv_indirect_set(sc, SV_REG_PCM_SAMPLING_HI, speed >> 8);
|
||||
sv_indirect_set(sc, SV_REG_PCM_SAMPLING_LO, speed & 0xff);
|
||||
@ -417,14 +417,14 @@ svpchan_trigger(kobj_t obj, void *data, int go)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
static int
|
||||
svpchan_getptr(kobj_t obj, void *data)
|
||||
{
|
||||
struct sc_chinfo *ch = data;
|
||||
struct sc_info *sc = ch->parent;
|
||||
u_int32_t sz, remain;
|
||||
|
||||
sz = sndbuf_getsize(ch->buffer);
|
||||
sz = sndbuf_getsize(ch->buffer);
|
||||
/* DMAA uses bytes */
|
||||
remain = sv_dma_get_count(sc->dmaa_st, sc->dmaa_sh) + 1;
|
||||
return (sz - remain);
|
||||
@ -469,7 +469,7 @@ sv_channel_gain(struct sc_info *sc, u_int32_t dev, u_int32_t gain, u_int32_t cha
|
||||
{
|
||||
u_int8_t v;
|
||||
int32_t g;
|
||||
|
||||
|
||||
g = mt[dev].max * gain / 100;
|
||||
if (mt[dev].neg)
|
||||
g = mt[dev].max - g;
|
||||
@ -484,25 +484,25 @@ sv_channel_gain(struct sc_info *sc, u_int32_t dev, u_int32_t gain, u_int32_t cha
|
||||
}
|
||||
}
|
||||
sv_indirect_set(sc, mt[dev].reg + channel, v);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
sv_gain(struct sc_info *sc, u_int32_t dev, u_int32_t left, u_int32_t right)
|
||||
{
|
||||
sv_channel_gain(sc, dev, left, 0);
|
||||
if (mt[dev].stereo)
|
||||
if (mt[dev].stereo)
|
||||
sv_channel_gain(sc, dev, right, 1);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
sv_mix_mute_all(struct sc_info *sc)
|
||||
sv_mix_mute_all(struct sc_info *sc)
|
||||
{
|
||||
int32_t i;
|
||||
for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
|
||||
if (mt[i].reg) sv_gain(sc, i, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
sv_mix_init(struct snd_mixer *m)
|
||||
@ -560,9 +560,9 @@ static void
|
||||
sv_power(struct sc_info *sc, int state)
|
||||
{
|
||||
u_int8_t v;
|
||||
|
||||
|
||||
switch (state) {
|
||||
case 0:
|
||||
case 0:
|
||||
/* power on */
|
||||
v = sv_indirect_get(sc, SV_REG_ANALOG_PWR) &~ SV_ANALOG_OFF;
|
||||
v |= SV_ANALOG_OFF_SRS | SV_ANALOG_OFF_SPLL;
|
||||
@ -571,7 +571,7 @@ sv_power(struct sc_info *sc, int state)
|
||||
v |= SV_DIGITAL_OFF_SYN | SV_DIGITAL_OFF_MU | SV_DIGITAL_OFF_GP;
|
||||
sv_indirect_set(sc, SV_REG_DIGITAL_PWR, v);
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
/* power off */
|
||||
v = sv_indirect_get(sc, SV_REG_ANALOG_PWR) | SV_ANALOG_OFF;
|
||||
sv_indirect_set(sc, SV_REG_ANALOG_PWR, v);
|
||||
@ -579,7 +579,7 @@ sv_power(struct sc_info *sc, int state)
|
||||
sv_indirect_set(sc, SV_REG_DIGITAL_PWR, SV_DIGITAL_OFF);
|
||||
break;
|
||||
}
|
||||
DEB(printf("Power state %d\n", state));
|
||||
DEB(printf("Power state %d\n", state));
|
||||
}
|
||||
|
||||
static int
|
||||
@ -596,7 +596,7 @@ sv_init(struct sc_info *sc)
|
||||
v = sv_direct_get(sc, SV_CM_CONTROL) & ~SV_CM_CONTROL_RESET;
|
||||
sv_direct_set(sc, SV_CM_CONTROL, v);
|
||||
DELAY(50);
|
||||
|
||||
|
||||
/* Set in enhanced mode */
|
||||
v = sv_direct_get(sc, SV_CM_CONTROL);
|
||||
v |= SV_CM_CONTROL_ENHANCED;
|
||||
@ -613,11 +613,11 @@ sv_init(struct sc_info *sc)
|
||||
|
||||
/* Disable loopback - binds ADC and DAC rates */
|
||||
v = sv_indirect_get(sc, SV_REG_LOOPBACK) & ~SV_LOOPBACK_ENABLE;
|
||||
sv_indirect_set(sc, SV_REG_LOOPBACK, v);
|
||||
sv_indirect_set(sc, SV_REG_LOOPBACK, v);
|
||||
|
||||
/* Disable SRS */
|
||||
v = sv_indirect_get(sc, SV_REG_SRS_SPACE) | SV_SRS_DISABLED;
|
||||
sv_indirect_set(sc, SV_REG_SRS_SPACE, v);
|
||||
sv_indirect_set(sc, SV_REG_SRS_SPACE, v);
|
||||
|
||||
/* Get revision */
|
||||
sc->rev = sv_indirect_get(sc, SV_REG_REVISION);
|
||||
@ -660,11 +660,11 @@ sv_resume(device_t dev)
|
||||
}
|
||||
|
||||
if (sc->rch.dma_was_active) {
|
||||
svrchan_trigger(0, &sc->rch, PCMTRIG_START);
|
||||
svrchan_trigger(0, &sc->rch, PCMTRIG_START);
|
||||
}
|
||||
|
||||
if (sc->pch.dma_was_active) {
|
||||
svpchan_trigger(0, &sc->pch, PCMTRIG_START);
|
||||
svpchan_trigger(0, &sc->pch, PCMTRIG_START);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -680,13 +680,13 @@ sv_intr(void *data)
|
||||
u_int8_t status;
|
||||
|
||||
status = sv_direct_get(sc, SV_CM_STATUS);
|
||||
if (status & SV_CM_STATUS_AINT)
|
||||
if (status & SV_CM_STATUS_AINT)
|
||||
chn_intr(sc->pch.channel);
|
||||
|
||||
if (status & SV_CM_STATUS_CINT)
|
||||
if (status & SV_CM_STATUS_CINT)
|
||||
chn_intr(sc->rch.channel);
|
||||
|
||||
status &= ~(SV_CM_STATUS_AINT|SV_CM_STATUS_CINT);
|
||||
status &= ~(SV_CM_STATUS_AINT|SV_CM_STATUS_CINT);
|
||||
DEB(if (status) printf("intr 0x%02x ?\n", status));
|
||||
|
||||
return;
|
||||
@ -733,10 +733,10 @@ sv_attach(device_t dev) {
|
||||
"-- setting to D0\n", pci_get_powerstate(dev));
|
||||
pci_set_powerstate(dev, PCI_POWERSTATE_D0);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
sc->enh_rid = SV_PCI_ENHANCED;
|
||||
sc->enh_type = SYS_RES_IOPORT;
|
||||
sc->enh_reg = bus_alloc_resource(dev, sc->enh_type,
|
||||
sc->enh_reg = bus_alloc_resource(dev, sc->enh_type,
|
||||
&sc->enh_rid, 0, ~0,
|
||||
SV_PCI_ENHANCED_SIZE, RF_ACTIVE);
|
||||
if (sc->enh_reg == NULL) {
|
||||
@ -759,7 +759,7 @@ sv_attach(device_t dev) {
|
||||
sc->irqid = 0;
|
||||
sc->irq = bus_alloc_resource(dev, SYS_RES_IRQ, &sc->irqid,
|
||||
0, ~0, 1, RF_ACTIVE | RF_SHAREABLE);
|
||||
if (!sc->irq ||
|
||||
if (!sc->irq ||
|
||||
bus_setup_intr(dev, sc->irq, INTR_TYPE_TTY, sv_intr, sc, &sc->ih)) {
|
||||
device_printf(dev, "sv_attach: Unable to map interrupt\n");
|
||||
goto fail;
|
||||
@ -769,8 +769,8 @@ sv_attach(device_t dev) {
|
||||
/*lowaddr*/BUS_SPACE_MAXADDR_24BIT,
|
||||
/*highaddr*/BUS_SPACE_MAXADDR,
|
||||
/*filter*/NULL, /*filterarg*/NULL,
|
||||
/*maxsize*/SV_MAX_BUFFER, /*nsegments*/1,
|
||||
/*maxsegz*/0x3ffff, /*flags*/0,
|
||||
/*maxsize*/SV_MAX_BUFFER, /*nsegments*/1,
|
||||
/*maxsegz*/0x3ffff, /*flags*/0,
|
||||
&sc->parent_dmat) != 0) {
|
||||
device_printf(dev, "sv_attach: Unable to create dma tag\n");
|
||||
goto fail;
|
||||
@ -784,7 +784,7 @@ sv_attach(device_t dev) {
|
||||
if (mixer_init(dev, &sv_mixer_class, sc) != 0) {
|
||||
device_printf(dev, "sv_attach: Mixer failed to initialize\n");
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
/* XXX This is a hack, and it's ugly. Okay, the deal is this
|
||||
* card has two more io regions that available for automatic
|
||||
@ -792,7 +792,7 @@ sv_attach(device_t dev) {
|
||||
* to used as control registers for the DMA engines.
|
||||
* Unfortunately FBSD has no bus_space_foo() functions so we
|
||||
* have to grab port space in region of existing resources. Go
|
||||
* for space between midi and game ports.
|
||||
* for space between midi and game ports.
|
||||
*/
|
||||
bus_get_resource(dev, SYS_RES_IOPORT, SV_PCI_MIDI, &midi_start, &count);
|
||||
bus_get_resource(dev, SYS_RES_IOPORT, SV_PCI_GAMES, &games_start, &count);
|
||||
@ -805,7 +805,7 @@ sv_attach(device_t dev) {
|
||||
|
||||
sdmaa = games_start + 0x40;
|
||||
sdmac = sdmaa + 0x40;
|
||||
|
||||
|
||||
/* Add resources to list of pci resources for this device - from here on
|
||||
* they look like normal pci resources. */
|
||||
bus_set_resource(dev, SYS_RES_IOPORT, SV_PCI_DMAA, sdmaa, SV_PCI_DMAA_SIZE);
|
||||
@ -814,7 +814,7 @@ sv_attach(device_t dev) {
|
||||
/* Cache resource short-cuts for dma_a */
|
||||
sc->dmaa_rid = SV_PCI_DMAA;
|
||||
sc->dmaa_type = SYS_RES_IOPORT;
|
||||
sc->dmaa_reg = bus_alloc_resource(dev, sc->dmaa_type,
|
||||
sc->dmaa_reg = bus_alloc_resource(dev, sc->dmaa_type,
|
||||
&sc->dmaa_rid, 0, ~0,
|
||||
SV_PCI_ENHANCED_SIZE, RF_ACTIVE);
|
||||
if (sc->dmaa_reg == NULL) {
|
||||
@ -830,10 +830,10 @@ sv_attach(device_t dev) {
|
||||
pci_write_config(dev, SV_PCI_DMAA, data, 4);
|
||||
DEB(printf("dmaa: 0x%x 0x%x\n", data, pci_read_config(dev, SV_PCI_DMAA, 4)));
|
||||
|
||||
/* Cache resource short-cuts for dma_c */
|
||||
/* Cache resource short-cuts for dma_c */
|
||||
sc->dmac_rid = SV_PCI_DMAC;
|
||||
sc->dmac_type = SYS_RES_IOPORT;
|
||||
sc->dmac_reg = bus_alloc_resource(dev, sc->dmac_type,
|
||||
sc->dmac_reg = bus_alloc_resource(dev, sc->dmac_type,
|
||||
&sc->dmac_rid, 0, ~0,
|
||||
SV_PCI_ENHANCED_SIZE, RF_ACTIVE);
|
||||
if (sc->dmac_reg == NULL) {
|
||||
@ -868,12 +868,12 @@ sv_attach(device_t dev) {
|
||||
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
if (sc->parent_dmat)
|
||||
fail:
|
||||
if (sc->parent_dmat)
|
||||
bus_dma_tag_destroy(sc->parent_dmat);
|
||||
if (sc->ih)
|
||||
if (sc->ih)
|
||||
bus_teardown_intr(dev, sc->irq, sc->ih);
|
||||
if (sc->irq)
|
||||
if (sc->irq)
|
||||
bus_release_resource(dev, SYS_RES_IRQ, sc->irqid, sc->irq);
|
||||
if (sc->enh_reg)
|
||||
bus_release_resource(dev, sc->enh_type, sc->enh_rid, sc->enh_reg);
|
||||
|
@ -115,10 +115,10 @@ sndbuf_free(struct snd_dbuf *b)
|
||||
b->tmpbuf = NULL;
|
||||
|
||||
if (b->dmamap)
|
||||
bus_dmamap_unload(b->dmatag, b->dmamap);
|
||||
bus_dmamap_unload(b->dmatag, b->dmamap);
|
||||
|
||||
if (b->dmamap && b->buf)
|
||||
bus_dmamem_free(b->dmatag, b->buf, b->dmamap);
|
||||
bus_dmamem_free(b->dmatag, b->buf, b->dmamap);
|
||||
}
|
||||
|
||||
int
|
||||
@ -616,7 +616,7 @@ sndbuf_isadmaptr(struct snd_dbuf *b)
|
||||
return 0;
|
||||
i = isa_dmastatus(b->isadmachan);
|
||||
KASSERT(i >= 0, ("isa_dmastatus returned %d", i));
|
||||
return b->bufsize - i;
|
||||
return b->bufsize - i;
|
||||
}
|
||||
|
||||
void
|
||||
@ -625,6 +625,6 @@ sndbuf_isadmabounce(struct snd_dbuf *b)
|
||||
KASSERT(b, ("sndbuf_isadmabounce called with b == NULL"));
|
||||
KASSERT(sndbuf_getflags(b) & SNDBUF_F_ISADMA, ("sndbuf_isadmabounce called on non-ISA buffer"));
|
||||
|
||||
/* tell isa_dma to bounce data in/out */
|
||||
/* tell isa_dma to bounce data in/out */
|
||||
}
|
||||
|
||||
|
@ -66,7 +66,7 @@ chn_polltrigger(struct pcm_channel *c)
|
||||
if (c->flags & CHN_F_MAPPED) {
|
||||
if (sndbuf_getprevblocks(bs) == 0)
|
||||
return 1;
|
||||
else
|
||||
else
|
||||
return (sndbuf_getblocks(bs) > sndbuf_getprevblocks(bs))? 1 : 0;
|
||||
} else {
|
||||
amt = (c->direction == PCMDIR_PLAY)? sndbuf_getfree(bs) : sndbuf_getready(bs);
|
||||
@ -201,11 +201,11 @@ chn_wrintr(struct pcm_channel *c)
|
||||
CHN_LOCKASSERT(c);
|
||||
irqc++;
|
||||
/* update pointers in primary buffer */
|
||||
chn_dmaupdate(c);
|
||||
chn_dmaupdate(c);
|
||||
/* ...and feed from secondary to primary */
|
||||
ret = chn_wrfeed(c);
|
||||
/* tell the driver we've updated the primary buffer */
|
||||
chn_trigger(c, PCMTRIG_EMLDMAWR);
|
||||
chn_trigger(c, PCMTRIG_EMLDMAWR);
|
||||
DEB(if (ret)
|
||||
printf("chn_wrintr: chn_wrfeed returned %d\n", ret);)
|
||||
}
|
||||
@ -241,7 +241,7 @@ chn_write(struct pcm_channel *c, struct uio *buf)
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
count = hz;
|
||||
count = hz;
|
||||
while (!ret && (buf->uio_resid > 0) && (count > 0)) {
|
||||
sz = sndbuf_getfree(bs);
|
||||
if (sz == 0) {
|
||||
@ -256,8 +256,8 @@ chn_write(struct pcm_channel *c, struct uio *buf)
|
||||
count -= timeout;
|
||||
ret = 0;
|
||||
} else if (ret == 0)
|
||||
count = hz;
|
||||
}
|
||||
count = hz;
|
||||
}
|
||||
} else {
|
||||
sz = MIN(sz, buf->uio_resid);
|
||||
KASSERT(sz > 0, ("confusion in chn_write"));
|
||||
@ -270,9 +270,9 @@ chn_write(struct pcm_channel *c, struct uio *buf)
|
||||
/* printf("ret: %d left: %d\n", ret, buf->uio_resid); */
|
||||
|
||||
if (count <= 0) {
|
||||
c->flags |= CHN_F_DEAD;
|
||||
device_printf(c->parent->dev, "play interrupt timeout, channel dead\n");
|
||||
}
|
||||
c->flags |= CHN_F_DEAD;
|
||||
device_printf(c->parent->dev, "play interrupt timeout, channel dead\n");
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -340,9 +340,9 @@ chn_rdintr(struct pcm_channel *c)
|
||||
|
||||
CHN_LOCKASSERT(c);
|
||||
/* tell the driver to update the primary bufhard if non-dma */
|
||||
chn_trigger(c, PCMTRIG_EMLDMARD);
|
||||
chn_trigger(c, PCMTRIG_EMLDMARD);
|
||||
/* update pointers in primary bufhard */
|
||||
chn_dmaupdate(c);
|
||||
chn_dmaupdate(c);
|
||||
/* ...and feed from primary to secondary */
|
||||
ret = chn_rdfeed(c);
|
||||
if (ret)
|
||||
@ -367,7 +367,7 @@ chn_read(struct pcm_channel *c, struct uio *buf)
|
||||
chn_start(c, 0);
|
||||
|
||||
ret = 0;
|
||||
count = hz;
|
||||
count = hz;
|
||||
while (!ret && (buf->uio_resid > 0) && (count > 0)) {
|
||||
sz = MIN(buf->uio_resid, sndbuf_getblksz(bs));
|
||||
|
||||
@ -392,9 +392,9 @@ chn_read(struct pcm_channel *c, struct uio *buf)
|
||||
}
|
||||
|
||||
if (count <= 0) {
|
||||
c->flags |= CHN_F_DEAD;
|
||||
device_printf(c->parent->dev, "record interrupt timeout, channel dead\n");
|
||||
}
|
||||
c->flags |= CHN_F_DEAD;
|
||||
device_printf(c->parent->dev, "record interrupt timeout, channel dead\n");
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -483,7 +483,7 @@ chn_poll(struct pcm_channel *c, int ev, struct proc *p)
|
||||
|
||||
CHN_LOCK(c);
|
||||
if (!(c->flags & CHN_F_MAPPED) && !(c->flags & CHN_F_TRIGGERED))
|
||||
chn_start(c, 1);
|
||||
chn_start(c, 1);
|
||||
ret = 0;
|
||||
if (chn_polltrigger(c) && chn_pollreset(c))
|
||||
ret = ev;
|
||||
@ -525,7 +525,7 @@ chn_abort(struct pcm_channel *c)
|
||||
missing = sndbuf_getready(bs) + sndbuf_getready(b);
|
||||
|
||||
c->flags &= ~CHN_F_ABORTING;
|
||||
return missing;
|
||||
return missing;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -549,13 +549,13 @@ chn_flush(struct pcm_channel *c)
|
||||
if (!(c->flags & CHN_F_TRIGGERED))
|
||||
return 0;
|
||||
|
||||
c->flags |= CHN_F_CLOSING;
|
||||
c->flags |= CHN_F_CLOSING;
|
||||
resid = sndbuf_getready(bs) + sndbuf_getready(b);
|
||||
resid_p = resid;
|
||||
count = 10;
|
||||
resid_p = resid;
|
||||
count = 10;
|
||||
ret = 0;
|
||||
while ((count > 0) && (resid > sndbuf_getsize(b)) && (ret == 0)) {
|
||||
/* still pending output data. */
|
||||
/* still pending output data. */
|
||||
ret = chn_sleep(c, "pcmflu", hz / 10);
|
||||
if (ret == EWOULDBLOCK)
|
||||
ret = 0;
|
||||
@ -564,8 +564,8 @@ chn_flush(struct pcm_channel *c)
|
||||
if (resid >= resid_p)
|
||||
count--;
|
||||
resid_p = resid;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (count == 0)
|
||||
DEB(printf("chn_flush: timeout\n"));
|
||||
|
||||
@ -610,8 +610,8 @@ chn_reset(struct pcm_channel *c, u_int32_t fmt)
|
||||
}
|
||||
r = chn_setblocksize(c, 0, 0);
|
||||
if (r == 0) {
|
||||
chn_resetbuf(c);
|
||||
CHANNEL_RESETDONE(c->methods, c->devinfo);
|
||||
chn_resetbuf(c);
|
||||
CHANNEL_RESETDONE(c->methods, c->devinfo);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
@ -703,8 +703,8 @@ chn_setvolume(struct pcm_channel *c, int left, int right)
|
||||
{
|
||||
CHN_LOCKASSERT(c);
|
||||
/* could add a feeder for volume changing if channel returns -1 */
|
||||
c->volume = (left << 8) | right;
|
||||
return 0;
|
||||
c->volume = (left << 8) | right;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
@ -765,7 +765,7 @@ chn_tryspeed(struct pcm_channel *c, int speed)
|
||||
r = FEEDER_SET(f, FEEDRATE_DST, sndbuf_getspd(b));
|
||||
DEB(printf("feeder_set(FEEDRATE_DST, %d) = %d\n", sndbuf_getspd(b), r));
|
||||
out:
|
||||
return r;
|
||||
return r;
|
||||
} else
|
||||
return EINVAL;
|
||||
}
|
||||
@ -801,13 +801,13 @@ chn_tryformat(struct pcm_channel *c, u_int32_t fmt)
|
||||
c->feederflags |= 1 << FEEDER_FMT;
|
||||
r = chn_buildfeeder(c);
|
||||
if (r == 0) {
|
||||
hwfmt = c->feeder->desc->out;
|
||||
sndbuf_setfmt(b, hwfmt);
|
||||
hwfmt = c->feeder->desc->out;
|
||||
sndbuf_setfmt(b, hwfmt);
|
||||
sndbuf_setfmt(bs, fmt);
|
||||
chn_resetbuf(c);
|
||||
CHANNEL_SETFORMAT(c->methods, c->devinfo, hwfmt);
|
||||
chn_resetbuf(c);
|
||||
CHANNEL_SETFORMAT(c->methods, c->devinfo, hwfmt);
|
||||
r = chn_tryspeed(c, c->speed);
|
||||
}
|
||||
}
|
||||
return r;
|
||||
} else
|
||||
return EINVAL;
|
||||
|
Loading…
Reference in New Issue
Block a user