aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorLiam Girdwood <lrg@ti.com>2011-10-13 12:59:51 -0700
committerSimon Wilson <simonwilson@google.com>2011-10-13 13:46:50 -0700
commit6be28f1b16d3f48340069b93b5db42fead60bfa2 (patch)
treef0e43999a8be7363aea8ca27a84dfb450a78fbdb /include
parentfa0697e887b383a970d726513ae804bccb7630c0 (diff)
pcm: add mmap playback and no periodic IRQ support.
Add mmap playback and no period IRQ support to pcm core.
Diffstat (limited to 'include')
-rw-r--r--include/tinyalsa/asoundlib.h25
1 files changed, 24 insertions, 1 deletions
diff --git a/include/tinyalsa/asoundlib.h b/include/tinyalsa/asoundlib.h
index 2e8c3e0..3c86c84 100644
--- a/include/tinyalsa/asoundlib.h
+++ b/include/tinyalsa/asoundlib.h
@@ -43,6 +43,19 @@ struct pcm;
#define PCM_OUT 0x00000000
#define PCM_IN 0x10000000
+#define PCM_MMAP 0x00000001
+#define PCM_NOIRQ 0x00000002
+
+/* PCM runtime states */
+#define PCM_STATE_OPEN 0
+#define PCM_STATE_SETUP 1
+#define PCM_STATE_PREPARED 2
+#define PCM_STATE_RUNNING 3
+#define PCM_STATE_XRUN 4
+#define PCM_STATE_DRAINING 5
+#define PCM_STATE_PAUSED 6
+#define PCM_STATE_SUSPENDED 7
+#define PCM_STATE_DISCONNECTED 8
/* Bit formats */
enum pcm_format {
@@ -99,10 +112,12 @@ int pcm_set_config(struct pcm *pcm, struct pcm_config *config);
/* Returns a human readable reason for the last error */
const char *pcm_get_error(struct pcm *pcm);
-/* Returns the buffer size (int bytes) that should be used for pcm_write.
+/* Returns the buffer size (int frames) that should be used for pcm_write.
* This will be 1/2 of the actual fifo size.
*/
unsigned int pcm_get_buffer_size(struct pcm *pcm);
+unsigned int pcm_frames_to_bytes(struct pcm *pcm, unsigned int frames);
+unsigned int pcm_bytes_to_frames(struct pcm *pcm, unsigned int frames);
/* Returns the pcm latency in ms */
unsigned int pcm_get_latency(struct pcm *pcm);
@@ -123,6 +138,14 @@ int pcm_get_htimestamp(struct pcm *pcm, unsigned int *avail,
int pcm_write(struct pcm *pcm, void *data, unsigned int count);
int pcm_read(struct pcm *pcm, void *data, unsigned int count);
+/*
+ * mmap() support.
+ */
+int pcm_mmap_write(struct pcm *pcm, void *data, unsigned int count);
+int pcm_mmap_begin(struct pcm *pcm, void **areas, unsigned int *offset,
+ unsigned int *frames);
+int pcm_mmap_commit(struct pcm *pcm, unsigned int offset, unsigned int frames);
+
/* Start and stop a PCM channel that doesn't transfer data */
int pcm_start(struct pcm *pcm);
int pcm_stop(struct pcm *pcm);