From 6be28f1b16d3f48340069b93b5db42fead60bfa2 Mon Sep 17 00:00:00 2001 From: Liam Girdwood Date: Thu, 13 Oct 2011 12:59:51 -0700 Subject: pcm: add mmap playback and no periodic IRQ support. Add mmap playback and no period IRQ support to pcm core. --- include/tinyalsa/asoundlib.h | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'include') 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); -- cgit v1.2.3