• Ivan Orlov's avatar
    ALSA: timer: Introduce virtual userspace-driven timers · 37745918
    Ivan Orlov authored
    Implement two ioctl calls in order to support virtual userspace-driven
    ALSA timers.
    
    The first ioctl is SNDRV_TIMER_IOCTL_CREATE, which gets the
    snd_timer_uinfo struct as a parameter and puts a file descriptor of a
    virtual timer into the `fd` field of the snd_timer_unfo structure. It
    also updates the `id` field of the snd_timer_uinfo struct, which
    provides a unique identifier for the timer (basically, the subdevice
    number which can be used when creating timer instances).
    
    This patch also introduces a tiny id allocator for the userspace-driven
    timers, which guarantees that we don't have more than 128 of them in the
    system.
    
    Another ioctl is SNDRV_TIMER_IOCTL_TRIGGER, which allows us to trigger
    the virtual timer (and calls snd_timer_interrupt for the timer under
    the hood), causing all of the timer instances binded to this timer to
    execute their callbacks.
    
    The maximum amount of ticks available for the timer is 1 for the sake of
    simplicity of the userspace API. 'start', 'stop', 'open' and 'close'
    callbacks for the userspace-driven timers are empty since we don't
    really do any hardware initialization here.
    Suggested-by: default avatarAxel Holzinger <aholzinger@gmx.de>
    Signed-off-by: default avatarIvan Orlov <ivan.orlov0322@gmail.com>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/20240813120701.171743-4-ivan.orlov0322@gmail.com
    37745918
asound.h 54.7 KB