From: Takashi Iwai <tiwai@suse.de>
To: alsa-devel@alsa-project.org
Subject: [PATCH 04/21] ALSA: hda - moved alloc/free stream pages function to controller library
Date: Fri, 24 Apr 2015 14:38:36 +0200 [thread overview]
Message-ID: <1429879133-32293-5-git-send-email-tiwai@suse.de> (raw)
In-Reply-To: <1429879133-32293-1-git-send-email-tiwai@suse.de>
From: Jeeja KP <jeeja.kp@intel.com>
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>
---
include/sound/hdaudio.h | 3 +++
sound/hda/hdac_controller.c | 58 +++++++++++++++++++++++++++++++++++++++++++++
sound/hda/hdac_stream.c | 2 --
3 files changed, 61 insertions(+), 2 deletions(-)
diff --git a/include/sound/hdaudio.h b/include/sound/hdaudio.h
index 69f27bc49eb4..59d21848a472 100644
--- a/include/sound/hdaudio.h
+++ b/include/sound/hdaudio.h
@@ -314,6 +314,9 @@ void snd_hdac_bus_handle_stream_irq(struct hdac_bus *bus, unsigned int status,
void (*ack)(struct hdac_bus *,
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
*/
diff --git a/sound/hda/hdac_controller.c b/sound/hda/hdac_controller.c
index c0069d0b7875..b5a17cb510a0 100644
--- a/sound/hda/hdac_controller.c
+++ b/sound/hda/hdac_controller.c
@@ -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);
+
+/**
+ * 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);
diff --git a/sound/hda/hdac_stream.c b/sound/hda/hdac_stream.c
index 7f6b845d90eb..8bd67a824b5e 100644
--- a/sound/hda/hdac_stream.c
+++ b/sound/hda/hdac_stream.c
@@ -24,8 +24,6 @@ void snd_hdac_stream_init(struct hdac_bus *bus, struct hdac_stream *azx_dev,
int idx, int direction, int tag)
{
azx_dev->bus = bus;
- if (bus->posbuf.area)
- azx_dev->posbuf = (__le32 *)(bus->posbuf.area + idx * 8);
/* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
azx_dev->sd_addr = bus->remap_addr + (0x20 * idx + 0x80);
/* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */
--
2.3.5
next prev parent reply other threads:[~2015-04-24 12:39 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-24 12:38 [PATCH 00/21] HD-audio controller driver split Takashi Iwai
2015-04-24 12:38 ` [PATCH 01/21] ALSA: hda - Handle error from get_response bus ops directly Takashi Iwai
2015-04-24 12:38 ` [PATCH 02/21] ALSA: hda - Add the controller helper codes to hda-core module Takashi Iwai
2015-04-24 12:38 ` [PATCH 03/21] ALSA: hda - Add DSP loader to core library code Takashi Iwai
2015-04-24 12:38 ` Takashi Iwai [this message]
2015-04-24 12:38 ` [PATCH 05/21] ALSA: hda - Merge codec and controller helpers Takashi Iwai
2015-04-24 12:38 ` [PATCH 06/21] ALSA: hda - Move send_cmd / get_response to hdac_bus_ops Takashi Iwai
2015-04-24 12:38 ` [PATCH 07/21] ALSA: hda - Pass bus io_ops directly from the top-level driver Takashi Iwai
2015-04-24 12:38 ` [PATCH 08/21] ALSA: hda - Migrate hdac_stream into legacy driver Takashi Iwai
2015-04-24 12:38 ` [PATCH 09/21] ALSA: hda - Migrate more hdac_stream codes Takashi Iwai
2015-04-24 12:38 ` [PATCH 10/21] ALSA: hda - Embed bus into controller object Takashi Iwai
2015-04-24 12:38 ` [PATCH 11/21] ALSA: hda - Minor refactoring Takashi Iwai
2015-04-24 12:38 ` [PATCH 12/21] ALSA: hda - Move PCM format and rate handling code to core library Takashi Iwai
2015-04-24 12:38 ` [PATCH 13/21] ALSA: hda - Add missing inclusion of <linux/clocksource.h> Takashi Iwai
2015-04-24 12:38 ` [PATCH 14/21] ALSA: hda - Reenable tracepoints for controller Takashi Iwai
2015-04-24 12:38 ` [PATCH 15/21] ALSA: hda/tegra - Fix build error and warning Takashi Iwai
2015-04-24 12:38 ` [PATCH 16/21] ALSA: hda - Drop azx_sd_read*/write*() macros Takashi Iwai
2015-04-24 12:38 ` [PATCH 17/21] ALSA: hda - Replace hda_bus_ops with static binding Takashi Iwai
2015-04-24 12:38 ` [PATCH 18/21] ALSA: hda - Move prepared flag into struct hdac_stream Takashi Iwai
2015-04-24 12:38 ` [PATCH 19/21] ALSA: hda - add ASoC device type for hda core Takashi Iwai
2015-04-24 12:38 ` [PATCH 20/21] ALSA: hda - add generic functions to set hdac stream params Takashi Iwai
2015-04-24 12:38 ` [PATCH 21/21] ALSA: hda - Replace open codes with snd_hdac_stream_set_params() Takashi Iwai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1429879133-32293-5-git-send-email-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=alsa-devel@alsa-project.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox