[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 09/13] linux-user: Add support for getting alsa timer version and
From: |
Laurent Vivier |
Subject: |
[PULL 09/13] linux-user: Add support for getting alsa timer version and id |
Date: |
Thu, 20 Feb 2020 10:20:49 +0100 |
From: Filip Bozuta <address@hidden>
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,
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 was 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.
Reviewed-by: Laurent Vivier <address@hidden>
Signed-off-by: Filip Bozuta <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Laurent Vivier <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 73dcc761e642..950e99617dcc 100644
--- a/linux-user/ioctls.h
+++ b/linux-user/ioctls.h
@@ -461,6 +461,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 274e10e0ee6b..8d27d1080752 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -111,6 +111,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 9b61ae8547dd..eb00358b5437 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -2437,6 +2437,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 5ba4155047ba..4c3a65cfc030 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 */
--
2.24.1
- [PULL 00/13] Linux user for 5.0 patches, Laurent Vivier, 2020/02/20
- [PULL 03/13] configure: linux-user doesn't need neither fdt nor slirp, Laurent Vivier, 2020/02/20
- [PULL 09/13] linux-user: Add support for getting alsa timer version and id,
Laurent Vivier <=
- [PULL 05/13] configure: Avoid compiling system tools on user build by default, Laurent Vivier, 2020/02/20
- [PULL 02/13] linux-user: implement getsockopt SO_RCVTIMEO and SO_SNDTIMEO, Laurent Vivier, 2020/02/20
- [PULL 01/13] linux-user: Implement membarrier syscall, Laurent Vivier, 2020/02/20
- [PULL 12/13] linux-user: Add support for getting/setting selected alsa timer parameters using ioctls, Laurent Vivier, 2020/02/20
- [PULL 08/13] linux-user: remove gemu_log from the linux-user tree, Laurent Vivier, 2020/02/20
- [PULL 04/13] linux-user/strace: Improve output of various syscalls, Laurent Vivier, 2020/02/20
- [PULL 10/13] linux-user: Add support for getting/setting specified alsa timer parameters using ioctls, Laurent Vivier, 2020/02/20
- [PULL 06/13] linux-user: Use `qemu_log' for non-strace logging, Laurent Vivier, 2020/02/20
- [PULL 11/13] linux-user: Add support for selecting alsa timer using ioctl, Laurent Vivier, 2020/02/20
- [PULL 13/13] linux-user: Add support for selected alsa timer instructions using ioctls, Laurent Vivier, 2020/02/20