[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 11/12] linux-user: Add support for getting/setting selected a
From: |
Laurent Vivier |
Subject: |
Re: [PATCH 11/12] linux-user: Add support for getting/setting selected alsa timer parameters using ioctls |
Date: |
Tue, 14 Jan 2020 14:09:46 +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_INFO - Getting information about selected timer
>
> Read information about the selected timer. The information is returned in
> the following structure:
>
> struct snd_timer_info {
> unsigned int flags; /* timer flags - SNDRV_TIMER_FLG_* */
> int card; /* card number */
> unsigned char id[64]; /* timer identificator */
> unsigned char name[80]; /* timer name */
> unsigned long reserved0; /* reserved for future use */
> unsigned long resolution; /* average period resolution in ns */
> unsigned char reserved[64]; /* reserved for future use */
> };
>
> A pointer to this structure should be passed as the third ioctl's
> argument.
> Before calling this ioctl, the ioctl "SNDRV_TIMER_IOCTL_SELECT" should be
> called first to select the timer which information is to be obtained. If
> no
> timer is selected, the error EBADFD ("File descriptor in bad shape") is
> returned.
>
> SNDRV_TIMER_IOCTL_PARAMS - Setting parameters for selected timer
>
> Sets parameters for the selected timer. The paramaters are set in the
> following structure:
>
> struct snd_timer_params {
> unsigned int flags; /* flags - SNDRV_TIMER_PSFLG_* */
> unsigned int ticks; /* requested resolution in ticks */
> unsigned int queue_size; /* total size of queue (32-1024) */
> unsigned int reserved0; /* reserved, was: failure locations */
> unsigned int filter; /* event filter */
> unsigned char reserved[60]; /* reserved */
> };
>
> A pointer to this structure should be passed as the third ioctl's
> argument.
> Before calling this ioctl, the ioctl "SNDRV_TIMER_IOCTL_SELECT" should be
> called first to select the timer which parameters are to be set. If no
> timer is selected, the error EBADFD ("File descriptor in bad shape") is
> returned.
>
> SNDRV_TIMER_IOCTL_STATUS - Getting status of selected timer
>
> Read status of the selected timer. The status of the timer is returned in
> the following structure:
>
> struct snd_timer_status {
> struct timespec tstamp; /* Timestamp - last update */
> unsigned int resolution; /* current period resolution in ns */
> unsigned int lost; /* counter of master tick lost */
> unsigned int overrun; /* count of read queue overruns */
> unsigned int queue; /* used queue size */
> unsigned char reserved[64]; /* reserved */
> };
>
> A pointer to this structure should be passed as the third ioctl's
> argument.
> Before calling this ioctl, the ioctl "SNDRV_TIMER_IOCTL_SELECT" should be
> called first to select the timer which status is to be obtained. If no
> timer is selected, the error EBADFD ("File descriptor in bad shape") is
> returned.
>
> Implementation notes:
>
> All ioctls in this patch have pointer to some kind of a structure
> as their third argument. That is the reason why corresponding
> definitions were added in 'linux-user/syscall_types.h'. Structure
> 'snd_timer_status' has field of type 'struct timespec' which is why
> a corresponding definition of that structure was also added in
> 'linux-user/syscall_types.h'. All of these strucutures have some
> fields that are of type 'unsigned long'. That is the reason why
> separate target structures were defined in 'linux-user/syscall_defs.h'.
> Structure 'struct timespec' already had a separate target definition
> so that definition was used to define a target structure for
> 'snd_timer_status'. The rest of the implementation was straightforward.
>
> Signed-off-by: Filip Bozuta <address@hidden>
> ---
> linux-user/ioctls.h | 5 +++++
> linux-user/syscall_defs.h | 25 +++++++++++++++++++++++++
> linux-user/syscall_types.h | 29 +++++++++++++++++++++++++++++
> 3 files changed, 59 insertions(+)
>
> diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
> index 7652117..43e7e5d 100644
> --- a/linux-user/ioctls.h
> +++ b/linux-user/ioctls.h
> @@ -461,6 +461,11 @@
> MK_PTR(MK_STRUCT(STRUCT_snd_timer_gstatus)))
> IOCTL(SNDRV_TIMER_IOCTL_SELECT, IOC_W,
> MK_PTR(MK_STRUCT(STRUCT_snd_timer_select)))
> + IOCTL(SNDRV_TIMER_IOCTL_INFO, IOC_R,
> MK_PTR(MK_STRUCT(STRUCT_snd_timer_info)))
> + IOCTL(SNDRV_TIMER_IOCTL_PARAMS, IOC_W,
> + MK_PTR(MK_STRUCT(STRUCT_snd_timer_params)))
> + IOCTL(SNDRV_TIMER_IOCTL_STATUS, IOC_R,
> + MK_PTR(MK_STRUCT(STRUCT_snd_timer_status)))
>
> IOCTL(HDIO_GETGEO, IOC_R, MK_PTR(MK_STRUCT(STRUCT_hd_geometry)))
> IOCTL(HDIO_GET_UNMASKINTR, IOC_R, MK_PTR(TYPE_INT))
> diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
> index 9a33b71..d76124d 100644
> --- a/linux-user/syscall_defs.h
> +++ b/linux-user/syscall_defs.h
> @@ -2467,6 +2467,25 @@ struct target_snd_timer_select {
> unsigned char reserved[32];
> };
>
> +struct target_snd_timer_info {
> + unsigned int flags;
> + int card;
> + unsigned char id[64];
> + unsigned char name[80];
> + abi_ulong reserved0;
> + abi_ulong resolution;
> + unsigned char reserved[64];
> +};
> +
> +struct target_snd_timer_status {
> + struct target_timespec tstamp;
> + unsigned int resolution;
> + unsigned int lost;
> + unsigned int overrun;
> + unsigned int queue;
> + unsigned char reserved[64];
> +};
> +
> /* 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,
> \
> @@ -2480,6 +2499,12 @@ struct target_snd_timer_select {
> struct
> target_snd_timer_gstatus)
> #define TARGET_SNDRV_TIMER_IOCTL_SELECT TARGET_IOW('T', 0x10,
> \
> struct
> target_snd_timer_select)
> +#define TARGET_SNDRV_TIMER_IOCTL_INFO TARGET_IOR('T', 0x11,
> \
> + struct
> target_snd_timer_info)
> +#define TARGET_SNDRV_TIMER_IOCTL_PARAMS TARGET_IOW('T', 0x12,
> \
> + struct
> snd_timer_params)
> +#define TARGET_SNDRV_TIMER_IOCTL_STATUS TARGET_IOR('T', 0x14,
> \
> + struct
> target_snd_timer_status)
>
> /* vfat ioctls */
> #define TARGET_VFAT_IOCTL_READDIR_BOTH TARGET_IORU('r', 1)
> diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
> index 767632d..fbc4be7 100644
> --- a/linux-user/syscall_types.h
> +++ b/linux-user/syscall_types.h
> @@ -120,6 +120,35 @@ STRUCT(snd_timer_select,
> MK_STRUCT(STRUCT_snd_timer_id), /* id */
> MK_ARRAY(TYPE_CHAR, 32)) /* reserved */
>
> +STRUCT(snd_timer_info,
> + TYPE_INT, /* flags */
> + TYPE_INT, /* card */
> + MK_ARRAY(TYPE_CHAR, 64), /* id */
> + MK_ARRAY(TYPE_CHAR, 80), /* name */
> + TYPE_ULONG, /* reserved0 */
> + TYPE_ULONG, /* resolution */
> + MK_ARRAY(TYPE_CHAR, 64)) /* reserved */
> +
> +STRUCT(snd_timer_params,
> + TYPE_INT, /* flags */
> + TYPE_INT, /* ticks */
> + TYPE_INT, /* queue_size */
> + TYPE_INT, /* reserved0 */
> + TYPE_INT, /* filter */
> + MK_ARRAY(TYPE_CHAR, 60)) /* reserved */
> +
> +STRUCT(timespec,
> + TYPE_LONG, /* tv_sec */
> + TYPE_LONG) /* tv_nsec */
> +
> +STRUCT(snd_timer_status,
> + MK_STRUCT(STRUCT_timespec), /* tstamp */
> + TYPE_INT, /* resolution */
> + TYPE_INT, /* lost */
> + TYPE_INT, /* overrun */
> + TYPE_INT, /* queue */
> + MK_ARRAY(TYPE_CHAR, 64)) /* reserved */
> +
> /* loop device ioctls */
> STRUCT(loop_info,
> TYPE_INT, /* lo_number */
>
Reviewed-by: Laurent Vivier <address@hidden>
- Re: [PATCH 08/12] linux-user: Add support for setting alsa timer enhanced read using ioctl, (continued)
- [PATCH 09/12] linux-user: Add support for getting/setting specified alsa timer parameters using ioctls, Filip Bozuta, 2020/01/09
- [PATCH 10/12] linux-user: Add support for selecting alsa timer using ioctl, Filip Bozuta, 2020/01/09
- [PATCH 05/12] linux-user: Add support for getting/setting RTC PLL correction using ioctls, Filip Bozuta, 2020/01/09
- [PATCH 12/12] linux-user: Add support for selected alsa timer instructions using ioctls, Filip Bozuta, 2020/01/09
- [PATCH 11/12] linux-user: Add support for getting/setting selected alsa timer parameters using ioctls, Filip Bozuta, 2020/01/09
- Re: [PATCH 11/12] linux-user: Add support for getting/setting selected alsa timer parameters using ioctls,
Laurent Vivier <=
- Re: [PATCH 00/12] linux-user: Add support for real time clock and, Philippe Mathieu-Daudé, 2020/01/14
- [PATCH 00/12] linux-user: Add support for real time clock and, Filip Bozuta, 2020/01/15