Update of /cvsroot/alsa/alsa-kernel/pci In directory sc8-pr-cvs1:/tmp/cvs-serv22165
Modified Files: es1968.c Log Message: - use the new buffer-preservation API. Index: es1968.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/es1968.c,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- es1968.c 28 Feb 2003 14:29:24 -0000 1.36 +++ es1968.c 3 Mar 2003 16:46:34 -0000 1.37 @@ -555,9 +555,8 @@ unsigned int clock; /* clock */ /* buffer */ - void *dma_buf; - dma_addr_t dma_buf_addr; - size_t dma_buf_size; + struct snd_dma_device dma_dev; + struct snd_dma_buffer dma; /* Resources... */ int irq; @@ -1076,7 +1075,7 @@ /* Offset to PCMBAR */ pa = es->memory->addr; - pa -= chip->dma_buf_addr; + pa -= chip->dma.addr; pa >>= 1; /* words */ pa |= 0x00400000; /* System RAM (Bit 22) */ @@ -1222,7 +1221,7 @@ snd_es1968_program_wavecache(chip, es, channel, pa, 1); /* Offset to PCMBAR */ - pa -= chip->dma_buf_addr; + pa -= chip->dma.addr; pa >>= 1; /* words */ /* base offset of dma calcs when reading the pointer @@ -1499,9 +1498,9 @@ { struct list_head *p; - if (! chip->dma_buf) + if (! chip->dma.area) return; - snd_free_pci_pages(chip->pci, chip->dma_buf_size, chip->dma_buf, chip->dma_buf_addr); + snd_dma_free_reserved(&chip->dma_dev); while ((p = chip->buf_list.next) != &chip->buf_list) { esm_memory_t *chunk = list_entry(p, esm_memory_t, list); list_del(p); @@ -1513,18 +1512,22 @@ snd_es1968_init_dmabuf(es1968_t *chip) { esm_memory_t *chunk; - chip->dma_buf = snd_malloc_pci_pages_fallback(chip->pci, chip->total_bufsize, - &chip->dma_buf_addr, &chip->dma_buf_size); - //snd_printd("es1968: allocated buffer size %ld at %p\n", chip->dma_buf_size, chip->dma_buf); - if (chip->dma_buf == NULL) { - snd_printk("es1968: can't allocate dma pages for size %d\n", - chip->total_bufsize); - return -ENOMEM; - } - if ((chip->dma_buf_addr + chip->dma_buf_size - 1) & ~((1 << 28) - 1)) { - snd_es1968_free_dmabuf(chip); - snd_printk("es1968: DMA buffer beyond 256MB.\n"); - return -ENOMEM; + + snd_dma_device_pci(&chip->dma_dev, chip->pci, 0); + if (! snd_dma_get_reserved(&chip->dma_dev, &chip->dma)) { + chip->dma.area = snd_malloc_pci_pages_fallback(chip->pci, chip->total_bufsize, + &chip->dma.addr, &chip->dma.bytes); + if (chip->dma.area == NULL) { + snd_printk("es1968: can't allocate dma pages for size %d\n", + chip->total_bufsize); + return -ENOMEM; + } + if ((chip->dma.addr + chip->dma.bytes - 1) & ~((1 << 28) - 1)) { + snd_dma_free_pages(&chip->dma_dev, &chip->dma); + snd_printk("es1968: DMA buffer beyond 256MB.\n"); + return -ENOMEM; + } + snd_dma_set_reserved(&chip->dma_dev, &chip->dma); } INIT_LIST_HEAD(&chip->buf_list); @@ -1534,10 +1537,10 @@ snd_es1968_free_dmabuf(chip); return -ENOMEM; } - memset(chip->dma_buf, 0, 512); - chunk->buf = chip->dma_buf + 512; - chunk->addr = chip->dma_buf_addr + 512; - chunk->size = chip->dma_buf_size - 512; + memset(chip->dma.area, 0, 512); + chunk->buf = chip->dma.area + 512; + chunk->addr = chip->dma.addr + 512; + chunk->size = chip->dma.bytes - 512; chunk->empty = 1; list_add(&chunk->list, &chip->buf_list); @@ -1812,7 +1815,7 @@ wave_set_register(chip, apu << 3, (memory->addr - 0x10) & 0xfff8); - pa = (unsigned int)((memory->addr - chip->dma_buf_addr) >> 1); + pa = (unsigned int)((memory->addr - chip->dma.addr) >> 1); pa |= 0x00400000; /* System RAM (Bit 22) */ /* initialize apu */ @@ -1902,10 +1905,10 @@ return err; /* set PCMBAR */ - wave_set_register(chip, 0x01FC, chip->dma_buf_addr >> 12); - wave_set_register(chip, 0x01FD, chip->dma_buf_addr >> 12); - wave_set_register(chip, 0x01FE, chip->dma_buf_addr >> 12); - wave_set_register(chip, 0x01FF, chip->dma_buf_addr >> 12); + wave_set_register(chip, 0x01FC, chip->dma.addr >> 12); + wave_set_register(chip, 0x01FD, chip->dma.addr >> 12); + wave_set_register(chip, 0x01FE, chip->dma.addr >> 12); + wave_set_register(chip, 0x01FF, chip->dma.addr >> 12); if ((err = snd_pcm_new(chip->card, "ESS Maestro", device, chip->playback_streams, @@ -2443,9 +2446,9 @@ snd_es1968_chip_init(chip); /* need to restore the base pointers.. */ - if (chip->dma_buf_addr) { + if (chip->dma.addr) { /* set PCMBAR */ - wave_set_register(chip, 0x01FC, chip->dma_buf_addr >> 12); + wave_set_register(chip, 0x01FC, chip->dma.addr >> 12); } /* restore ac97 state */ ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ Alsa-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-cvslog