Возможно вы искали: 'Battle of the Youstrass'

May 15 2025 18:18:17
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » [FreeBSD] es1370 patch wanted (patch sound freebsd)

[FreeBSD] es1370 patch wanted (patch sound freebsd)

Ключевые слова: 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 softcn", 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 %#xn", 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 cardn", 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 interruptn", 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 tagn", 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 buffersn", 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)
1303 Прочтений •  [[FreeBSD] es1370 patch wanted (patch sound freebsd)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• [FreeBSD] es1370 patch wanted (patc... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка