qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 07/12] linux-user: Add support for getting alsa timer version


From: Laurent Vivier
Subject: Re: [PATCH 07/12] linux-user: Add support for getting alsa timer version and id
Date: Tue, 14 Jan 2020 13:42:57 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1

Le 09/01/2020 à 13:59, Filip Bozuta a écrit :
> This patch implements functionalities of following ioctls:
> 
> SNDRV_TIMER_IOCTL_PVERSION - Getting the sound timer version
> 
>     Read the sound timer version. The third ioctl's argument is
>     a pointer to an int in which the specified timers version
>     is returned.
> 
> SNDRV_TIMER_IOCTL_NEXT_DEVICE - Getting id information about next timer
> 
>     Read id information about the next timer device from the sound timer
>     device list. The id infomration is returned in the following structure:
> 
>         struct snd_timer_id {
>             int dev_class;    /* timer device class number */
>             int dev_sclass;   /* slave device class number (unused) */
>             int card;         /* card number */
>             int device;       /* device number */
>             int subdevice;    /* sub-device number */
>         };
> 
>     The devices in the sound timer device list are arranged by the fields
>     of this structure respectively (first by dev_class number, then by
>     card number, ...). A pointer to this structure should be passed as
>     the third ioctl's argument. Before calling the ioctl, the parameters
>     of this structure should be initialized in relation to the next timer
>     device which information is to be obtained. For example, if a wanted
>     timer device has the device class number equal to or bigger then 2,
>     the field dev_class should be initialized to 2. After the ioctl call,
>     the structure fields are filled with values from the next device in
>     the sound timer device list. If there is no next device in the list,
>     then the structure is filled with "zero" id values (in that case all
>     fields are filled with value -1).
> 
> Implementation notes:
> 
>     The ioctl 'SNDRV_TIMER_IOCTL_NEXT_DEVICE' has a pointer to a
>     'struct snd_timer_id' as its third argument. That is the reason why
>     corresponding definition is added in 'linux-user/syscall_types.h'.
>     Since all elements of this structure are of type 'int', the rest of
>     the implementation is straightforward.
> 
>     The line '#include <linux/rtc.h>' was added to recognize
>     preprocessor definitions for these ioctls. This needs to be
>     done only once in this series of commits. Also, the content
>     of this file (with respect to ioctl definitions) remained
>     unchanged for a long time, therefore there is no need to
>     worry about supporting older Linux kernel version.
> 
> Signed-off-by: Filip Bozuta <address@hidden>
> ---
>  linux-user/ioctls.h        | 4 ++++
>  linux-user/syscall.c       | 1 +
>  linux-user/syscall_defs.h  | 5 +++++
>  linux-user/syscall_types.h | 7 +++++++
>  4 files changed, 17 insertions(+)
> 
> diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
> index 1f1f3e6..ed1bd4c 100644
> --- a/linux-user/ioctls.h
> +++ b/linux-user/ioctls.h
> @@ -449,6 +449,10 @@
>    IOCTL(SOUND_MIXER_WRITE_LOUD, IOC_W, MK_PTR(TYPE_INT))
>    IOCTL(SOUND_MIXER_WRITE_RECSRC, IOC_W, MK_PTR(TYPE_INT))
>  
> +  IOCTL(SNDRV_TIMER_IOCTL_PVERSION, IOC_R, MK_PTR(TYPE_INT))
> +  IOCTL(SNDRV_TIMER_IOCTL_NEXT_DEVICE, IOC_RW,
> +        MK_PTR(MK_STRUCT(STRUCT_snd_timer_id)))
> +
>    IOCTL(HDIO_GETGEO, IOC_R, MK_PTR(MK_STRUCT(STRUCT_hd_geometry)))
>    IOCTL(HDIO_GET_UNMASKINTR, IOC_R, MK_PTR(TYPE_INT))
>    IOCTL(HDIO_GET_MULTCOUNT, IOC_R, MK_PTR(TYPE_INT))
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 74c3c08..a3993a2 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -108,6 +108,7 @@
>  #include <linux/netlink.h>
>  #include <linux/if_alg.h>
>  #include <linux/rtc.h>
> +#include <sound/asound.h>
>  #include "linux_loop.h"
>  #include "uname.h"
>  
> diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
> index af4f366..7409021 100644
> --- a/linux-user/syscall_defs.h
> +++ b/linux-user/syscall_defs.h
> @@ -2425,6 +2425,11 @@ struct target_statfs64 {
>  
>  #define TARGET_SOUND_MIXER_WRITE_RECSRC      
> TARGET_MIXER_WRITE(SOUND_MIXER_RECSRC)
>  
> +/* alsa timer ioctls */
> +#define TARGET_SNDRV_TIMER_IOCTL_PVERSION     TARGET_IOR('T', 0x00, int)
> +#define TARGET_SNDRV_TIMER_IOCTL_NEXT_DEVICE  TARGET_IOWR('T', 0x01,         
>             \
> +                                                          struct 
> snd_timer_id)
> +
>  /* vfat ioctls */
>  #define TARGET_VFAT_IOCTL_READDIR_BOTH    TARGET_IORU('r', 1)
>  #define TARGET_VFAT_IOCTL_READDIR_SHORT   TARGET_IORU('r', 2)
> diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
> index 4027272..2f4cd78 100644
> --- a/linux-user/syscall_types.h
> +++ b/linux-user/syscall_types.h
> @@ -83,6 +83,13 @@ STRUCT(buffmem_desc,
>  STRUCT(mixer_info,
>         MK_ARRAY(TYPE_CHAR, 16), MK_ARRAY(TYPE_CHAR, 32), TYPE_INT, 
> MK_ARRAY(TYPE_INT, 10))
>  
> +STRUCT(snd_timer_id,
> +       TYPE_INT, /* dev_class */
> +       TYPE_INT, /* dev_sclass */
> +       TYPE_INT, /* card */
> +       TYPE_INT, /* device */
> +       TYPE_INT) /* subdevice */
> +
>  /* loop device ioctls */
>  STRUCT(loop_info,
>         TYPE_INT,                 /* lo_number */
> 

Reviewed-by: Laurent Vivier <address@hidden>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]