123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- diff -ur a/include/uapi/sound/asound.h b/include/uapi/sound/asound.h
- --- a/include/uapi/sound/asound.h 2019-10-15 12:26:39.634141383 -0400
- +++ b/include/uapi/sound/asound.h 2020-01-30 21:43:56.477450321 -0500
- @@ -35,6 +35,8 @@
- #include <time.h>
- #endif
-
- +#include <asm/byteorder.h>
- +
- /*
- * protocol version
- */
- @@ -154,7 +156,7 @@
- * *
- *****************************************************************************/
-
- -#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 14)
- +#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 15)
-
- typedef unsigned long snd_pcm_uframes_t;
- typedef signed long snd_pcm_sframes_t;
- @@ -301,7 +303,9 @@
- #define SNDRV_PCM_INFO_DRAIN_TRIGGER 0x40000000 /* internal kernel flag - trigger in drain */
- #define SNDRV_PCM_INFO_FIFO_IN_FRAMES 0x80000000 /* internal kernel flag - FIFO size is in frames */
-
- -
- +#if (__BITS_PER_LONG == 32 && defined(__USE_TIME_BITS64)) || defined __KERNEL__
- +#define __SND_STRUCT_TIME64
- +#endif
-
- typedef int __bitwise snd_pcm_state_t;
- #define SNDRV_PCM_STATE_OPEN ((__force snd_pcm_state_t) 0) /* stream is open */
- @@ -317,8 +321,17 @@
-
- enum {
- SNDRV_PCM_MMAP_OFFSET_DATA = 0x00000000,
- - SNDRV_PCM_MMAP_OFFSET_STATUS = 0x80000000,
- - SNDRV_PCM_MMAP_OFFSET_CONTROL = 0x81000000,
- + SNDRV_PCM_MMAP_OFFSET_STATUS_OLD = 0x80000000,
- + SNDRV_PCM_MMAP_OFFSET_CONTROL_OLD = 0x81000000,
- + SNDRV_PCM_MMAP_OFFSET_STATUS_NEW = 0x82000000,
- + SNDRV_PCM_MMAP_OFFSET_CONTROL_NEW = 0x83000000,
- +#ifdef __SND_STRUCT_TIME64
- + SNDRV_PCM_MMAP_OFFSET_STATUS = SNDRV_PCM_MMAP_OFFSET_STATUS_NEW,
- + SNDRV_PCM_MMAP_OFFSET_CONTROL = SNDRV_PCM_MMAP_OFFSET_CONTROL_NEW,
- +#else
- + SNDRV_PCM_MMAP_OFFSET_STATUS = SNDRV_PCM_MMAP_OFFSET_STATUS_OLD,
- + SNDRV_PCM_MMAP_OFFSET_CONTROL = SNDRV_PCM_MMAP_OFFSET_CONTROL_OLD,
- +#endif
- };
-
- union snd_pcm_sync_id {
- @@ -456,8 +469,13 @@
- SNDRV_PCM_AUDIO_TSTAMP_TYPE_LAST = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED
- };
-
- +#ifndef __KERNEL__
- +/* explicit padding avoids incompatibility between i386 and x86-64 */
- +typedef struct { unsigned char pad[sizeof(time_t) - sizeof(int)] } __time_pad;
- +
- struct snd_pcm_status {
- snd_pcm_state_t state; /* stream state */
- + __time_pad pad1; /* align to timespec */
- struct timespec trigger_tstamp; /* time when stream was started/stopped/paused */
- struct timespec tstamp; /* reference timestamp */
- snd_pcm_uframes_t appl_ptr; /* appl ptr */
- @@ -473,17 +491,48 @@
- __u32 audio_tstamp_accuracy; /* in ns units, only valid if indicated in audio_tstamp_data */
- unsigned char reserved[52-2*sizeof(struct timespec)]; /* must be filled with zero */
- };
- +#endif
-
- -struct snd_pcm_mmap_status {
- +/*
- + * For mmap operations, we need the 64-bit layout, both for compat mode,
- + * and for y2038 compatibility. For 64-bit applications, the two definitions
- + * are identical, so we keep the traditional version.
- + */
- +#ifdef __SND_STRUCT_TIME64
- +#define __snd_pcm_mmap_status64 snd_pcm_mmap_status
- +#define __snd_pcm_mmap_control64 snd_pcm_mmap_control
- +#define __snd_pcm_sync_ptr64 snd_pcm_sync_ptr
- +#ifdef __KERNEL__
- +#define __snd_timespec64 __kernel_timespec
- +#else
- +#define __snd_timespec64 timespec
- +#endif
- +struct __snd_timespec {
- + __s32 tv_sec;
- + __s32 tv_nsec;
- +};
- +#else
- +#define __snd_pcm_mmap_status snd_pcm_mmap_status
- +#define __snd_pcm_mmap_control snd_pcm_mmap_control
- +#define __snd_pcm_sync_ptr snd_pcm_sync_ptr
- +#define __snd_timespec timespec
- +struct __snd_timespec64 {
- + __s64 tv_sec;
- + __s64 tv_nsec;
- +};
- +
- +#endif
- +
- +struct __snd_pcm_mmap_status {
- snd_pcm_state_t state; /* RO: state - SNDRV_PCM_STATE_XXXX */
- int pad1; /* Needed for 64 bit alignment */
- snd_pcm_uframes_t hw_ptr; /* RO: hw ptr (0...boundary-1) */
- - struct timespec tstamp; /* Timestamp */
- + struct __snd_timespec tstamp; /* Timestamp */
- snd_pcm_state_t suspended_state; /* RO: suspended stream state */
- - struct timespec audio_tstamp; /* from sample counter or wall clock */
- + struct __snd_timespec audio_tstamp; /* from sample counter or wall clock */
- };
-
- -struct snd_pcm_mmap_control {
- +struct __snd_pcm_mmap_control {
- snd_pcm_uframes_t appl_ptr; /* RW: appl ptr (0...boundary-1) */
- snd_pcm_uframes_t avail_min; /* RW: min available frames for wakeup */
- };
- @@ -492,14 +541,59 @@
- #define SNDRV_PCM_SYNC_PTR_APPL (1<<1) /* get appl_ptr from driver (r/w op) */
- #define SNDRV_PCM_SYNC_PTR_AVAIL_MIN (1<<2) /* get avail_min from driver */
-
- -struct snd_pcm_sync_ptr {
- +struct __snd_pcm_sync_ptr {
- unsigned int flags;
- union {
- - struct snd_pcm_mmap_status status;
- + struct __snd_pcm_mmap_status status;
- unsigned char reserved[64];
- } s;
- union {
- - struct snd_pcm_mmap_control control;
- + struct __snd_pcm_mmap_control control;
- + unsigned char reserved[64];
- + } c;
- +};
- +
- +#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN)
- +typedef char __pad_before_uframe[sizeof(__u64) - sizeof(snd_pcm_uframes_t)];
- +typedef char __pad_after_uframe[0];
- +#endif
- +
- +#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN)
- +typedef char __pad_before_uframe[0];
- +typedef char __pad_after_uframe[sizeof(__u64) - sizeof(snd_pcm_uframes_t)];
- +#endif
- +
- +struct __snd_pcm_mmap_status64 {
- + __s32 state; /* RO: state - SNDRV_PCM_STATE_XXXX */
- + __u32 pad1; /* Needed for 64 bit alignment */
- + __pad_before_uframe __pad1;
- + snd_pcm_uframes_t hw_ptr; /* RO: hw ptr (0...boundary-1) */
- + __pad_after_uframe __pad2;
- + struct __snd_timespec64 tstamp; /* Timestamp */
- + __s32 suspended_state; /* RO: suspended stream state */
- + __u32 pad3; /* Needed for 64 bit alignment */
- + struct __snd_timespec64 audio_tstamp; /* sample counter or wall clock */
- +};
- +
- +struct __snd_pcm_mmap_control64 {
- + __pad_before_uframe __pad1;
- + snd_pcm_uframes_t appl_ptr; /* RW: appl ptr (0...boundary-1) */
- + __pad_before_uframe __pad2;
- +
- + __pad_before_uframe __pad3;
- + snd_pcm_uframes_t avail_min; /* RW: min available frames for wakeup */
- + __pad_after_uframe __pad4;
- +};
- +
- +struct __snd_pcm_sync_ptr64 {
- + __u32 flags;
- + __u32 pad1;
- + union {
- + struct __snd_pcm_mmap_status64 status;
- + unsigned char reserved[64];
- + } s;
- + union {
- + struct __snd_pcm_mmap_control64 control;
- unsigned char reserved[64];
- } c;
- };
- @@ -584,6 +678,8 @@
- #define SNDRV_PCM_IOCTL_STATUS _IOR('A', 0x20, struct snd_pcm_status)
- #define SNDRV_PCM_IOCTL_DELAY _IOR('A', 0x21, snd_pcm_sframes_t)
- #define SNDRV_PCM_IOCTL_HWSYNC _IO('A', 0x22)
- +#define __SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct __snd_pcm_sync_ptr)
- +#define __SNDRV_PCM_IOCTL_SYNC_PTR64 _IOWR('A', 0x23, struct __snd_pcm_sync_ptr64)
- #define SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct snd_pcm_sync_ptr)
- #define SNDRV_PCM_IOCTL_STATUS_EXT _IOWR('A', 0x24, struct snd_pcm_status)
- #define SNDRV_PCM_IOCTL_CHANNEL_INFO _IOR('A', 0x32, struct snd_pcm_channel_info)
- @@ -614,7 +710,7 @@
- * Raw MIDI section - /dev/snd/midi??
- */
-
- -#define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 0)
- +#define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 1)
-
- enum {
- SNDRV_RAWMIDI_STREAM_OUTPUT = 0,
- @@ -648,13 +744,16 @@
- unsigned char reserved[16]; /* reserved for future use */
- };
-
- +#ifndef __KERNEL__
- struct snd_rawmidi_status {
- int stream;
- + __time_pad pad1;
- struct timespec tstamp; /* Timestamp */
- size_t avail; /* available bytes */
- size_t xruns; /* count of overruns since last status (in bytes) */
- unsigned char reserved[16]; /* reserved for future use */
- };
- +#endif
-
- #define SNDRV_RAWMIDI_IOCTL_PVERSION _IOR('W', 0x00, int)
- #define SNDRV_RAWMIDI_IOCTL_INFO _IOR('W', 0x01, struct snd_rawmidi_info)
- @@ -667,7 +766,7 @@
- * Timer section - /dev/snd/timer
- */
-
- -#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 6)
- +#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7)
-
- enum {
- SNDRV_TIMER_CLASS_NONE = -1,
- @@ -761,6 +860,7 @@
- unsigned char reserved[60]; /* reserved */
- };
-
- +#ifndef __KERNEL__
- struct snd_timer_status {
- struct timespec tstamp; /* Timestamp - last update */
- unsigned int resolution; /* current period resolution in ns */
- @@ -769,10 +869,11 @@
- unsigned int queue; /* used queue size */
- unsigned char reserved[64]; /* reserved */
- };
- +#endif
-
- #define SNDRV_TIMER_IOCTL_PVERSION _IOR('T', 0x00, int)
- #define SNDRV_TIMER_IOCTL_NEXT_DEVICE _IOWR('T', 0x01, struct snd_timer_id)
- -#define SNDRV_TIMER_IOCTL_TREAD _IOW('T', 0x02, int)
- +#define SNDRV_TIMER_IOCTL_TREAD_OLD _IOW('T', 0x02, int)
- #define SNDRV_TIMER_IOCTL_GINFO _IOWR('T', 0x03, struct snd_timer_ginfo)
- #define SNDRV_TIMER_IOCTL_GPARAMS _IOW('T', 0x04, struct snd_timer_gparams)
- #define SNDRV_TIMER_IOCTL_GSTATUS _IOWR('T', 0x05, struct snd_timer_gstatus)
- @@ -785,6 +886,15 @@
- #define SNDRV_TIMER_IOCTL_STOP _IO('T', 0xa1)
- #define SNDRV_TIMER_IOCTL_CONTINUE _IO('T', 0xa2)
- #define SNDRV_TIMER_IOCTL_PAUSE _IO('T', 0xa3)
- +#define SNDRV_TIMER_IOCTL_TREAD64 _IOW('T', 0xa4, int)
- +
- +#if __BITS_PER_LONG == 64
- +#define SNDRV_TIMER_IOCTL_TREAD SNDRV_TIMER_IOCTL_TREAD_OLD
- +#else
- +#define SNDRV_TIMER_IOCTL_TREAD ((sizeof(__kernel_long_t) >= sizeof(time_t)) ? \
- + SNDRV_TIMER_IOCTL_TREAD_OLD : \
- + SNDRV_TIMER_IOCTL_TREAD64)
- +#endif
-
- struct snd_timer_read {
- unsigned int resolution;
- @@ -810,11 +920,15 @@
- SNDRV_TIMER_EVENT_MRESUME = SNDRV_TIMER_EVENT_RESUME + 10,
- };
-
- +#ifndef __KERNEL__
- struct snd_timer_tread {
- int event;
- + __time_pad pad1;
- struct timespec tstamp;
- unsigned int val;
- + __time_pad pad2;
- };
- +#endif
-
- /****************************************************************************
- * *
- @@ -955,8 +1069,7 @@
- } bytes;
- struct snd_aes_iec958 iec958;
- } value; /* RO */
- - struct timespec tstamp;
- - unsigned char reserved[128-sizeof(struct timespec)];
- + unsigned char reserved[128];
- };
-
- struct snd_ctl_tlv {
|