290 lines
9.7 KiB
Diff
290 lines
9.7 KiB
Diff
diff -ur a/generic/include/sound/asound.h b/generic/include/sound/asound.h
|
|
--- a/generic/include/sound/asound.h 2019-10-15 12:26:39.634141383 -0400
|
|
+++ b/generic/include/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 {
|