The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

[FreeBSD] es1370 patch wanted (patch sound freebsd)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: patch, sound, freebsd,  (найти похожие документы)
_ RU.UNIX.BSD (2:5077/15.22) _____________________________________ RU.UNIX.BSD _ From : Sergey Osokin 2:5020/758.5 11 Aug 99 12:05:00 Subj : [FreeBSD] es1370 patch wanted ________________________________________________________________________________ Hello Andrey! Вторник Август 10 1999, Andrey Lavrentyev writes to All: AL> Hi Serge, AL> я пропустил ответ про патч или ответа небыло? AL> PS. "Сказал "A", говори и "B""! говоpю "Б" :-))) === Cut === Index: es1370.c
RCS file: /usr/CVS-Repository/src/sys/pci/es1370.c,v retrieving revision 1.4 diff -u -r1.4 es1370.c --- es1370.c 1999/05/09 17:06:45 1.4 +++ es1370.c 1999/05/29 18:59:01 @@ -77,6 +77,9 @@ #define DMA_ALIGN_MASK (~(DMA_ALIGN_THRESHOLD - 1)) #define DMA_READ_THRESHOLD 0x200 +#define ES_TYPE 0 +#define ES_TYPE_DAC1 1 + #define MEM_MAP_REG 0x14 #define UNIT(minor) ((minor) >> 4) @@ -103,11 +106,11 @@ bus_space_handle_t sh; bus_dma_tag_t parent_dmat; - bus_dmamap_t dmam_in, dmam_out; /* Contents of board's registers */ u_long ctrl; u_long sctrl; + u_long init_total[2], init_at[2]; }; @@ -131,6 +134,7 @@ static void es_rd_map(void *, bus_dma_segment_t *, int, int); static int es_wrabort(snddev_info *); static void es_wr_map(void *, bus_dma_segment_t *, int, int); +static void es1_wr_map(void *, bus_dma_segment_t *, int, int); static const char *es_pci_probe __P((pcici_t, pcidi_t)); static void es_pci_attach __P((pcici_t, int)); static int es_rd_dmaupdate(snddev_info *); @@ -159,7 +163,7 @@ static snddev_info es_op_desc = { "ENSONIQ AudioPCI", - 0, /* type, apparently unused */ + ES_TYPE, NULL, /* ISA probe */ NULL, /* ISA attach */ @@ -178,7 +182,28 @@ AFMT_FULLDUPLEX | AFMT_STEREO | AFMT_U8 | AFMT_S16_LE, /* brag :-) */ }; +static snddev_info es1_op_desc = { + "ENSONIQ AudioPCI DAC1", + ES_TYPE_DAC1, + NULL, /* ISA probe */ + NULL, /* ISA attach */ + + es_dsp_open, + es_dsp_close, + es_dsp_read, + es_dsp_write, + es_dsp_ioctl, + es_select, + + NULL, /* Interrupt Service Routine */ + es_callback, + + ES_BUFFSIZE, + + AFMT_STEREO | AFMT_U8 | AFMT_S16_LE, +}; + /* -------------------------------------------------------------------- */ /* @@ -186,23 +211,22 @@ */ static const struct { - unsigned volidx:4; unsigned left:4; unsigned right:4; unsigned stereo:1; unsigned recmask:13; unsigned avail:1; -} mixtable[SOUND_MIXER_NRDEVICES] = { - [SOUND_MIXER_VOLUME] = { 0, 0x0, 0x1, 1, 0x0000, 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 }, - [SOUND_MIXER_LINE1] = { 5, 0xa, 0xb, 1, 0x1800, 1 }, - [SOUND_MIXER_LINE2] = { 6, 0xc, 0x0, 0, 0x0100, 1 }, - [SOUND_MIXER_LINE3] = { 7, 0xd, 0x0, 0, 0x0200, 1 }, - [SOUND_MIXER_MIC] = { 8, 0xe, 0x0, 0, 0x0001, 1 }, - [SOUND_MIXER_OGAIN] = { 9, 0xf, 0x0, 0, 0x0000, 1 } }; +} mixtable[SOUND_MIXER_NRDEVICES] = { + [SOUND_MIXER_VOLUME] = { 0x0, 0x1, 1, 0x0000, 1 }, + [SOUND_MIXER_PCM] = { 0x2, 0x3, 1, 0x0400, 1 }, + [SOUND_MIXER_SYNTH] = { 0x4, 0x5, 1, 0x0060, 1 }, + [SOUND_MIXER_CD] = { 0x6, 0x7, 1, 0x0006, 1 }, + [SOUND_MIXER_LINE] = { 0x8, 0x9, 1, 0x0018, 1 }, + [SOUND_MIXER_LINE1] = { 0xa, 0xb, 1, 0x1800, 1 }, + [SOUND_MIXER_LINE2] = { 0xc, 0x0, 0, 0x0100, 1 }, + [SOUND_MIXER_LINE3] = { 0xd, 0x0, 0, 0x0200, 1 }, + [SOUND_MIXER_MIC] = { 0xe, 0x0, 0, 0x0001, 1 }, + [SOUND_MIXER_OGAIN] = { 0xf, 0x0, 0, 0x0000, 1 } }; static int mixer_ioctl(snddev_info *d, u_long cmd, caddr_t data, int fflag, struct proc *p) @@ -216,6 +240,10 @@ case IOC_IN | IOC_OUT: /* _IOWR */ switch (i) { case SOUND_MIXER_RECSRC: + if (d->type == ES_TYPE_DAC1) { + ret = ENODEV; + break; + } for (i = j = 0; i != SOUND_MIXER_NRDEVICES; i++) if ((*val & (1 << i)) != 0) { if (!mixtable[i].recmask) @@ -231,7 +259,7 @@ write_codec(d, CODEC_OMIX1, 0x7f); write_codec(d, CODEC_OMIX2, 0x3f); break; - + default: if (i >= SOUND_MIXER_NRDEVICES || !mixtable[i].avail) ret = EINVAL; @@ -317,7 +345,7 @@ if ((oflags & FREAD) == 0) d->rec_fmt = 0; - else if ((oflags & FWRITE) == 0) + if ((oflags & FWRITE) == 0) d->play_fmt = 0; d->play_speed = d->rec_speed = DSP_DEFAULT_SPEED; @@ -339,7 +367,8 @@ d->flags &= ~SND_F_BUSY; - es_rdabort(d); + if (d->type != ES_TYPE_DAC1) + es_rdabort(d); return (0); } @@ -352,6 +381,8 @@ snddev_info *d = &pcm_info[unit]; snd_dbuf *b = &d->dbuf_in; + if (d->type == ES_TYPE_DAC1) + return (ENODEV); if (d->flags & SND_F_READING) { /* This shouldn't happen and is actually silly */ tsleep(&s, PZERO, "sndar", hz); @@ -359,10 +390,11 @@ } d->flags |= SND_F_READING; - /* - * XXX Check for SND_F_INIT. If set, wait for DMA to run empty and - * re-initialize the board - */ + if (d->flags & SND_F_INIT) { + es_rdabort(d); + d->callback(d, SND_CB_INIT); + d->flags &= ~SND_F_INIT; + } if (buf->uio_resid - d->rec_blocksize > 0) limit = buf->uio_resid - d->rec_blocksize; @@ -432,6 +464,7 @@ int l, l1, ret = 0, unit = UNIT(minor(dev)); long s; snddev_info *d = &pcm_info[unit]; + struct es_info *es = (struct es_info *)d->device_data; snd_dbuf *b = &d->dbuf_out; if (d->flags & SND_F_WRITING) { @@ -441,10 +474,10 @@ } d->flags |= SND_F_WRITING; - /* - * XXX Check for SND_F_INIT. If set, wait for DMA to run empty and - * re-initialize the board - */ + if (d->flags & SND_F_INIT) { + es->init_at[d->type] = es->init_total[d->type] + d->dbuf_out.rl; + d->flags &= ~SND_F_INIT; + } while ((l = buf->uio_resid) != 0) { s = spltty(); @@ -558,7 +591,7 @@ splx(s); } a->bytes = b->fl; - a->fragments = b->fl / d->rec_blocksize; + a->fragments = b->fl / d->play_blocksize; a->fragstotal = b->bufsize / d->play_blocksize; a->fragsize = d->play_blocksize; } @@ -646,6 +679,8 @@ bus_space_write_4(es->st, es->sh, ES1370_REG_SERIAL_CONTROL, sctrl); bus_space_write_4(es->st, es->sh, ES1370_REG_SERIAL_CONTROL, es->sctrl); + if (intsrc & STAT_DAC1) + dma_wrintr(d + 1); if (intsrc & STAT_DAC2) dma_wrintr(d); if (intsrc & STAT_ADC) @@ -660,16 +695,18 @@ */ static int -alloc_dmabuf(snddev_info *d, int rd) +alloc_dmabuf(snddev_info *d, int wr) { struct es_info *es = (struct es_info *)d->device_data; - snd_dbuf *b = rd ? &d->dbuf_in : &d->dbuf_out; - bus_dmamap_t *dmam = rd ? &es->dmam_in : &es->dmam_out; + snd_dbuf *b = wr ? &d->dbuf_out : &d->dbuf_in; + bus_dmamap_t dmam; + void (*map_fnc[])(void *, bus_dma_segment_t *, int, int) = + { es_rd_map, es_wr_map, es1_wr_map }; if (bus_dmamem_alloc(es->parent_dmat, (void **)&b->buf, BUS_DMA_NOWAIT, - dmam) != 0 || - bus_dmamap_load(es->parent_dmat, *dmam, b->buf, d->bufsize, - rd ? es_rd_map : es_wr_map, es, 0) != 0) + &dmam) != 0 || + bus_dmamap_load(es->parent_dmat, dmam, b->buf, d->bufsize, + map_fnc[wr], es, 0) != 0) return -1; b->rp = b->fp = b->dl = b->rl = 0; @@ -681,19 +718,32 @@ es_wr_dmaupdate(snddev_info *d) { struct es_info *es = (struct es_info *)d->device_data; - unsigned hwptr, delta; + unsigned hwptr, delta, reg; - bus_space_write_4(es->st, es->sh, ES1370_REG_MEMPAGE, - ES1370_REG_DAC2_FRAMECNT >> 8); - hwptr = (bus_space_read_4(es->st, es->sh, - ES1370_REG_DAC2_FRAMECNT & 0xff) >> 14) & 0x3fffc; + if (d->type == ES_TYPE_DAC1) + reg = ES1370_REG_DAC1_FRAMECNT; + else + reg = ES1370_REG_DAC2_FRAMECNT; + bus_space_write_4(es->st, es->sh, ES1370_REG_MEMPAGE, reg >> 8); + hwptr = (bus_space_read_4(es->st, es->sh, reg & 0xff) >> 14) & 0x3fffc; delta = (d->dbuf_out.bufsize + hwptr - d->dbuf_out.rp) % d->dbuf_out.bufsize; + if (delta > d->dbuf_out.rl) { + delta = d->dbuf_out.rl; + d->dbuf_out.fp = hwptr; + } d->dbuf_out.rp = hwptr; d->dbuf_out.rl -= delta; d->dbuf_out.fl += delta; d->dbuf_out.total += delta; + es->init_total[d->type] += delta; + if (es->init_at[d->type] != 0 && + es->init_total[d->type] >= es->init_at[d->type]) { + d->callback(d, SND_CB_INIT); + es->init_at[d->type] = 0; + } + return delta; } @@ -709,10 +759,15 @@ ES1370_REG_ADC_FRAMECNT & 0xff) >> 14) & 0x3fffc; delta = (d->dbuf_in.bufsize + hwptr - d->dbuf_in.fp) % d->dbuf_in.bufsize; + if (delta > d->dbuf_in.fl) { + delta = d->dbuf_in.fl; + d->dbuf_in.rp = hwptr; + } d->dbuf_in.fp = hwptr; d->dbuf_in.rl += delta; d->dbuf_in.fl -= delta; d->dbuf_in.total += delta; + return delta; } @@ -731,11 +786,20 @@ switch(reason & SND_CB_REASON_MASK) { case SND_CB_INIT: - es->ctrl = (es->ctrl & ~CTRL_PCLKDIV) | - (DAC2_SRTODIV(d->play_speed) << CTRL_SH_PCLKDIV); + if (d->type == ES_TYPE_DAC1) { + es->sctrl &= ~SCTRL_P1FMT; + es->ctrl = (es->ctrl & ~CTRL_WTSRSEL) | + (DAC1_SRTODIV(d->play_speed) << CTRL_SH_WTSRSEL); + if (d->flags & SND_F_STEREO) + es->sctrl |= SCTRL_P1SMB; + } else { + es->sctrl &= ~(SCTRL_R1FMT | SCTRL_P2FMT); + es->ctrl = (es->ctrl & ~CTRL_PCLKDIV) | + (DAC2_SRTODIV(d->play_speed) << CTRL_SH_PCLKDIV); + if (d->flags & SND_F_STEREO) + es->sctrl |= SCTRL_P2SMB | SCTRL_R1SMB; + } snd_set_blocksize(d); - - es->sctrl &= ~(SCTRL_R1FMT | SCTRL_P2FMT); d->flags &= ~SND_F_XLAT8; switch(d->play_fmt) { case 0: @@ -743,7 +807,10 @@ break; case AFMT_S16_LE: - es->sctrl |= SCTRL_P2SEB; + if (d->type == ES_TYPE_DAC1) + es->sctrl |= SCTRL_P1SEB; + else + es->sctrl |= SCTRL_P2SEB; break; case AFMT_MU_LAW: @@ -760,7 +827,8 @@ break; case AFMT_S16_LE: - es->sctrl |= SCTRL_R1SEB; + if (d->type != ES_TYPE_DAC1) + es->sctrl |= SCTRL_R1SEB; break; case AFMT_MU_LAW: @@ -771,9 +839,6 @@ return (-1); } - if (d->flags & SND_F_STEREO) - es->sctrl |= SCTRL_P2SMB | SCTRL_R1SMB; - bus_space_write_4(es->st, es->sh, ES1370_REG_CONTROL, es->ctrl); bus_space_write_4(es->st, es->sh, ES1370_REG_SERIAL_CONTROL, @@ -781,22 +846,37 @@ break; case SND_CB_START: - if (rd) { - es->ctrl |= CTRL_ADC_EN; - es->sctrl = (es->sctrl & ~SCTRL_R1LOOPSEL) | - SCTRL_R1INTEN; - bus_space_write_4(es->st, es->sh, ES1370_REG_ADC_SCOUNT, - d->dbuf_in.dl / d->dbuf_in.sample_size - 1); - } else { - es->ctrl |= CTRL_DAC2_EN; - es->sctrl = (es->sctrl & ~(SCTRL_P2ENDINC | - SCTRL_P2STINC | SCTRL_P2LOOPSEL | SCTRL_P2PAUSE | - SCTRL_P2DACSEN)) | SCTRL_P2INTEN | - (((d->play_fmt == AFMT_S16_LE) ? 2 : 1) - << SCTRL_SH_P2ENDINC); + if (d->type == ES_TYPE_DAC1) { + es->ctrl |= CTRL_DAC1_EN; + es->sctrl = (es->sctrl & ~(SCTRL_P1LOOPSEL | + SCTRL_P1PAUSE | SCTRL_P1SCTRLD)) | SCTRL_P1INTEN; + if (d->dbuf_out.dl == d->dbuf_out.rl) + es->sctrl |= SCTRL_P1LOOPSEL; bus_space_write_4(es->st, es->sh, - ES1370_REG_DAC2_SCOUNT, + ES1370_REG_DAC1_SCOUNT, d->dbuf_out.dl / d->dbuf_out.sample_size - 1); + } else { + if (rd) { + es->ctrl |= CTRL_ADC_EN; + es->sctrl = (es->sctrl & ~SCTRL_R1LOOPSEL) | + SCTRL_R1INTEN; + bus_space_write_4(es->st, es->sh, + ES1370_REG_ADC_SCOUNT, + d->dbuf_in.dl / d->dbuf_in.sample_size - 1); + } else { + es->ctrl |= CTRL_DAC2_EN; + es->sctrl = (es->sctrl & ~(SCTRL_P2ENDINC | + SCTRL_P2STINC | SCTRL_P2LOOPSEL | + SCTRL_P2PAUSE | SCTRL_P2DACSEN)) | + SCTRL_P2INTEN | + (((d->play_fmt == AFMT_S16_LE) ? 2 : 1) + << SCTRL_SH_P2ENDINC); + if (d->dbuf_out.dl == d->dbuf_out.rl) + es->sctrl |= SCTRL_P2LOOPSEL; + bus_space_write_4(es->st, es->sh, + ES1370_REG_DAC2_SCOUNT, + d->dbuf_out.dl / d->dbuf_out.sample_size - 1); + } } bus_space_write_4(es->st, es->sh, ES1370_REG_SERIAL_CONTROL, es->sctrl); @@ -805,10 +885,14 @@ case SND_CB_ABORT: case SND_CB_STOP: - if (rd) - es->ctrl &= ~CTRL_ADC_EN; - else - es->ctrl &= ~CTRL_DAC2_EN; + if (d->type == ES_TYPE_DAC1) + es->ctrl &= ~CTRL_DAC1_EN; + else { + if (rd) + es->ctrl &= ~CTRL_ADC_EN; + else + es->ctrl &= ~CTRL_DAC2_EN; + } bus_space_write_4(es->st, es->sh, ES1370_REG_CONTROL, es->ctrl); break; @@ -852,6 +936,19 @@ } static void +es1_wr_map(void *arg, bus_dma_segment_t *segs, int nseg, int error) +{ + struct es_info *es = (struct es_info *)arg; + + bus_space_write_1(es->st, es->sh, ES1370_REG_MEMPAGE, + ES1370_REG_DAC1_FRAMEADR >> 8); + bus_space_write_4(es->st, es->sh, ES1370_REG_DAC1_FRAMEADR & 0xff, + segs->ds_addr); + bus_space_write_4(es->st, es->sh, ES1370_REG_DAC1_FRAMECNT & 0xff, + (segs->ds_len >> 2) - 1); +} + +static void es_rd_map(void *arg, bus_dma_segment_t *segs, int nseg, int error) { struct es_info *es = (struct es_info *)arg; @@ -867,39 +964,36 @@ static void dma_wrintr(snddev_info *d) { + int l, loop; snd_dbuf *b = &d->dbuf_out; - - /* - * According to Linux driver: - * dmaupdate() - * Bei underrun error++ - * wake_up(dac2.wait) - */ + struct es_info *es = (struct es_info *)d->device_data; if (b->dl != 0) { es_wr_dmaupdate(d); wakeup(b); } - if (b->rl >= DMA_ALIGN_THRESHOLD && - !(d->flags & SND_F_ABORTING)) { - int l = min(b->rl, d->play_blocksize); - l &= DMA_ALIGN_MASK; + if (d->flags & SND_F_ABORTING) + l = 0; + else + l = min(b->rl, d->play_blocksize) & DMA_ALIGN_MASK; - if (l != b->dl) { - if (b->dl != 0) { - d->callback(d, SND_CB_WR | SND_CB_STOP); - es_wr_dmaupdate(d); - l = min(b->rl, d->play_blocksize); - l &= DMA_ALIGN_MASK; - } - b->dl = l; + if (d->type == ES_TYPE_DAC1) + loop = es->sctrl & SCTRL_P1LOOPSEL; + else + loop = es->sctrl & SCTRL_P2LOOPSEL; + + if (l != b->dl || loop) { + if (b->dl != 0) { + d->callback(d, SND_CB_WR | SND_CB_STOP); + es_wr_dmaupdate(d); + l = min(b->rl, d->play_blocksize) & DMA_ALIGN_MASK; + } + b->dl = l; + if (b->dl != 0) { + DELAY(50); d->callback(d, SND_CB_WR | SND_CB_START); } - } else if (b->dl != 0) { - b->dl = 0; - d->callback(d, SND_CB_WR | SND_CB_STOP); - es_wr_dmaupdate(d); } } @@ -995,6 +1089,7 @@ u_int i; es->ctrl = CTRL_CDC_EN | CTRL_SERR_DIS | + (DAC1_SRTODIV(DSP_DEFAULT_SPEED) << CTRL_SH_WTSRSEL) | (DAC2_SRTODIV(DSP_DEFAULT_SPEED) << CTRL_SH_PCLKDIV); bus_space_write_4(es->st, es->sh, ES1370_REG_CONTROL, es->ctrl); es->sctrl = 0; @@ -1044,14 +1139,21 @@ if (unit > NPCM_MAX) return; - d = &pcm_info[unit]; - *d = es_op_desc; + for (i = 1; i != NPCM_MAX; i++) + if (pcm_info[i - 1].io_base == 0 && + pcm_info[i].io_base == 0) + break; + if (i == NPCM_MAX) + return; + d = &pcm_info[i - 1]; + d[0] = es_op_desc; + d[1] = es1_op_desc; if ((es = malloc(sizeof(*es), M_DEVBUF, M_NOWAIT)) == NULL) { printf("pcm%d: cannot allocate softc\n", unit); return; } bzero(es, sizeof(*es)); - d->device_data = es; + d[0].device_data = d[1].device_data = es; vaddr = paddr = NULL; mapped = 0; @@ -1078,26 +1180,26 @@ printf("pcm%d: using %s space register mapping at %#x\n", unit, es->st == IO_SPACE_MAPPING ? "I/O" : "Memory", es->sh); - d->io_base = es->sh; - d->mix_devs = 0; + d[0].io_base = d[1].io_base = es->sh; + d[0].mix_devs = d[1].mix_devs = 0; for (i = 0; i != SOUND_MIXER_NRDEVICES; i++) if (mixtable[i].avail) - d->mix_devs |= (1 << i); - d->mix_rec_devs = 0; + d[0].mix_devs = d[1].mix_devs |= (1 << i); + d[0].mix_rec_devs = d[1].mix_rec_devs = 0; for (i = 0; i != SOUND_MIXER_NRDEVICES; i++) if (mixtable[i].recmask) - d->mix_rec_devs |= (1 << i); + d[0].mix_rec_devs |= (1 << i); if (es_init(d) == -1) { printf("pcm%d: unable to initialize the card\n", unit); free(es, M_DEVBUF); - d->io_base = 0; + d[0].io_base = d[1].io_base = 0; return; } if (pci_map_int(config_id, es_intr, d, &tty_imask) == 0) { printf("pcm%d: unable to map interrupt\n", unit); free(es, M_DEVBUF); - d->io_base = 0; + d[0].io_base = d[1].io_base = 0; return; } if (bus_dma_tag_create(/*parent*/NULL, /*alignment*/2, /*boundary*/0, @@ -1108,19 +1210,21 @@ /*flags*/0, &es->parent_dmat) != 0) { printf("pcm%d: unable to create dma tag\n", unit); free(es, M_DEVBUF); - d->io_base = 0; + d[0].io_base = d[1].io_base = 0; return; } if (alloc_dmabuf(d, 0) == -1 || - alloc_dmabuf(d, 1) == -1) { + alloc_dmabuf(d, 1) == -1 || + alloc_dmabuf(d + 1, 2) == -1) { printf("pcm%d: unable to allocate dma buffers\n", unit); free(es, M_DEVBUF); - d->io_base = 0; + d[0].io_base = d[1].io_base = 0; return; } pcminit(d, unit); + pcminit(d + 1, unit + 1); return; } Index: es1370_reg.h
RCS file: /usr/CVS-Repository/src/sys/pci/es1370_reg.h,v retrieving revision 1.1 diff -u -r1.1 es1370_reg.h --- es1370_reg.h 1998/12/31 08:14:27 1.1 +++ es1370_reg.h 1999/03/19 11:29:09 @@ -48,6 +48,9 @@ #define DAC2_SRTODIV(x) (((1411200 + (x) / 2) / (x) - 2) & 0x1fff) #define DAC2_DIVTOSR(x) (1411200 / ((x) + 2)) +#define DAC1_SRTODIV(x) ((x) > 33075 ? 3 : (x) / 11025) +#define DAC1_DIVTOSR(x) ((11025 << (x)) / 2) + #define CTRL_ADC_STOP 0x80000000 /* 1 = ADC stopped */ #define CTRL_XCTL1 0x40000000 /* SERR pin if enabled */ #define CTRL_OPEN 0x20000000 /* no function, can be read and @@ -118,6 +121,15 @@ #define STAT_DAC2 0x00000002 /* DAC2 int pending */ #define STAT_ADC 0x00000001 /* ADC int pending */ +#define UCTRL_RXINTEN 0x80 +#define UCTRL_TXINTEN 0x20 +#define UCTRL_SWR 0x03 + +#define USTAT_RXINT 0x80 +#define USTAT_TXINT 0x04 +#define USTAT_TXRDY 0x02 +#define USTAT_RXRDY 0x01 + #define CODEC_OMIX1 0x10 #define CODEC_OMIX2 0x11 #define CODEC_LIMIX1 0x12 @@ -129,6 +141,7 @@ #define CODEC_ADSEL 0x18 #define CODEC_MGAIN 0x19 -#define ES_BUFFSIZE 0x20000 /* We're PCI! Use a large buffer */ +#define ES_BUFFSIZE 0x20000 /* We're PCI! Use a large buffer */ +#define ES_MIDIBUFFSIZE 0x2000 #endif === Cut === До свидания, oZZ --- * Origin: (2:5020/758.5)

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру