diff options
author | Rohit kumar <rohitkr@codeaurora.org> | 2020-08-19 15:19:33 +0530 |
---|---|---|
committer | Rohit kumar <rohitkr@codeaurora.org> | 2020-09-03 11:29:44 +0530 |
commit | f29b8df6261e72d9a426d6d8c175a896931654e2 (patch) | |
tree | 41736e3bae1b2dd1f3ad6aa126b8889833ece97f /src/pcm_plugin.c | |
parent | 1ef2d458f56d6583de5d35da6d8ca0dc8ec2a146 (diff) |
tinyalsa: add plugin support for mmap/poll ops
Diffstat (limited to 'src/pcm_plugin.c')
-rw-r--r-- | src/pcm_plugin.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/pcm_plugin.c b/src/pcm_plugin.c index 5d5f79c..8b633aa 100644 --- a/src/pcm_plugin.c +++ b/src/pcm_plugin.c @@ -672,6 +672,38 @@ static int pcm_plug_ioctl(void *data, unsigned int cmd, ...) return ret; } +static int pcm_plug_poll(void *data, struct pollfd *pfd, nfds_t nfds, + int timeout) +{ + struct pcm_plug_data *plug_data = data; + struct pcm_plugin *plugin = plug_data->plugin; + + return plug_data->ops->poll(plugin, pfd, nfds, timeout); +} + +static void *pcm_plug_mmap(void *data, void *addr, size_t length, int prot, + int flags, off_t offset) +{ + struct pcm_plug_data *plug_data = data; + struct pcm_plugin *plugin = plug_data->plugin; + + if (plugin->state != PCM_PLUG_STATE_SETUP) + return NULL; + + return plug_data->ops->mmap(plugin, addr, length, prot, flags, offset); +} + +static int pcm_plug_munmap(void *data, void *addr, size_t length) +{ + struct pcm_plug_data *plug_data = data; + struct pcm_plugin *plugin = plug_data->plugin; + + if (plugin->state != PCM_PLUG_STATE_SETUP) + return -EBADFD; + + return plug_data->ops->munmap(plugin, addr, length); +} + static int pcm_plug_open(unsigned int card, unsigned int device, unsigned int flags, void **data, struct snd_node *pcm_node) { @@ -740,4 +772,7 @@ const struct pcm_ops plug_ops = { .open = pcm_plug_open, .close = pcm_plug_close, .ioctl = pcm_plug_ioctl, + .mmap = pcm_plug_mmap, + .munmap = pcm_plug_munmap, + .poll = pcm_plug_poll, }; |