mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 23:39:18 +00:00
ALSA: hda - moved alloc/free stream pages function to controller library
Moved azx_alloc_stream_pages and azx_free_stream_pages to controller library. Signed-off-by: Jeeja KP <jeeja.kp@intel.com> Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
8f3f600b52
commit
304dad3038
@ -314,6 +314,9 @@ void snd_hdac_bus_handle_stream_irq(struct hdac_bus *bus, unsigned int status,
|
|||||||
void (*ack)(struct hdac_bus *,
|
void (*ack)(struct hdac_bus *,
|
||||||
struct hdac_stream *));
|
struct hdac_stream *));
|
||||||
|
|
||||||
|
int snd_hdac_bus_alloc_stream_pages(struct hdac_bus *bus);
|
||||||
|
void snd_hdac_bus_free_stream_pages(struct hdac_bus *bus);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* macros for easy use
|
* macros for easy use
|
||||||
*/
|
*/
|
||||||
|
@ -447,3 +447,61 @@ void snd_hdac_bus_handle_stream_irq(struct hdac_bus *bus, unsigned int status,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(snd_hdac_bus_handle_stream_irq);
|
EXPORT_SYMBOL_GPL(snd_hdac_bus_handle_stream_irq);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* snd_hdac_bus_alloc_stream_pages - allocate BDL and other buffers
|
||||||
|
* @bus: HD-audio core bus
|
||||||
|
*
|
||||||
|
* Call this after assigning the all streams.
|
||||||
|
* Returns zero for success, or a negative error code.
|
||||||
|
*/
|
||||||
|
int snd_hdac_bus_alloc_stream_pages(struct hdac_bus *bus)
|
||||||
|
{
|
||||||
|
struct hdac_stream *s;
|
||||||
|
int num_streams = 0;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
list_for_each_entry(s, &bus->stream_list, list) {
|
||||||
|
/* allocate memory for the BDL for each stream */
|
||||||
|
err = bus->io_ops->dma_alloc_pages(bus, SNDRV_DMA_TYPE_DEV,
|
||||||
|
BDL_SIZE, &s->bdl);
|
||||||
|
num_streams++;
|
||||||
|
if (err < 0)
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (WARN_ON(!num_streams))
|
||||||
|
return -EINVAL;
|
||||||
|
/* allocate memory for the position buffer */
|
||||||
|
err = bus->io_ops->dma_alloc_pages(bus, SNDRV_DMA_TYPE_DEV,
|
||||||
|
num_streams * 8, &bus->posbuf);
|
||||||
|
if (err < 0)
|
||||||
|
return -ENOMEM;
|
||||||
|
list_for_each_entry(s, &bus->stream_list, list)
|
||||||
|
s->posbuf = (__le32 *)(bus->posbuf.area + s->index * 8);
|
||||||
|
|
||||||
|
/* single page (at least 4096 bytes) must suffice for both ringbuffes */
|
||||||
|
return bus->io_ops->dma_alloc_pages(bus, SNDRV_DMA_TYPE_DEV,
|
||||||
|
PAGE_SIZE, &bus->rb);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(snd_hdac_bus_alloc_stream_pages);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* snd_hdac_bus_free_stream_pages - release BDL and other buffers
|
||||||
|
* @bus: HD-audio core bus
|
||||||
|
*/
|
||||||
|
void snd_hdac_bus_free_stream_pages(struct hdac_bus *bus)
|
||||||
|
{
|
||||||
|
struct hdac_stream *s;
|
||||||
|
|
||||||
|
list_for_each_entry(s, &bus->stream_list, list) {
|
||||||
|
if (s->bdl.area)
|
||||||
|
bus->io_ops->dma_free_pages(bus, &s->bdl);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bus->rb.area)
|
||||||
|
bus->io_ops->dma_free_pages(bus, &bus->rb);
|
||||||
|
if (bus->posbuf.area)
|
||||||
|
bus->io_ops->dma_free_pages(bus, &bus->posbuf);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(snd_hdac_bus_free_stream_pages);
|
||||||
|
@ -24,8 +24,6 @@ void snd_hdac_stream_init(struct hdac_bus *bus, struct hdac_stream *azx_dev,
|
|||||||
int idx, int direction, int tag)
|
int idx, int direction, int tag)
|
||||||
{
|
{
|
||||||
azx_dev->bus = bus;
|
azx_dev->bus = bus;
|
||||||
if (bus->posbuf.area)
|
|
||||||
azx_dev->posbuf = (__le32 *)(bus->posbuf.area + idx * 8);
|
|
||||||
/* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
|
/* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
|
||||||
azx_dev->sd_addr = bus->remap_addr + (0x20 * idx + 0x80);
|
azx_dev->sd_addr = bus->remap_addr + (0x20 * idx + 0x80);
|
||||||
/* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */
|
/* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user