mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
Sync UAPI asound.h and asequencer.h with 6.12 kernel
The recent upstream kernel received a few features and extended / cleaned up the asound.h and asequencer.h uapi files: - ALSA: pcm: Introduce MSBITS subformat interface - ALSA: pcm: clarify and fix default msbits value for all formats - ALSA: pcm: reinvent the stream synchronization ID API - ALSA: timer: Introduce virtual userspace-driven timers Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
b154d9145f
commit
f81236cf7e
2 changed files with 49 additions and 52 deletions
|
|
@ -3,22 +3,6 @@
|
|||
* Main header file for the ALSA sequencer
|
||||
* Copyright (c) 1998-1999 by Frank van de Pol <fvdpol@coil.demon.nl>
|
||||
* (c) 1998-1999 by Jaroslav Kysela <perex@perex.cz>
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
#ifndef __SOUND_ASEQUENCER_H
|
||||
#define __SOUND_ASEQUENCER_H
|
||||
|
|
@ -619,7 +603,7 @@ struct snd_seq_client_ump_info {
|
|||
int client; /* client number to inquire/set */
|
||||
int type; /* type to inquire/set */
|
||||
unsigned char info[512]; /* info (either UMP ep or block info) */
|
||||
} __packed;
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* IOCTL commands
|
||||
|
|
|
|||
|
|
@ -3,22 +3,6 @@
|
|||
* Advanced Linux Sound Architecture - ALSA - Driver
|
||||
* Copyright (c) 1994-2003 by Jaroslav Kysela <perex@perex.cz>,
|
||||
* Abramo Bagnara <abramo@alsa-project.org>
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __SOUND_ASOUND_H
|
||||
|
|
@ -28,7 +12,7 @@
|
|||
#include <linux/types.h>
|
||||
#include <asm/byteorder.h>
|
||||
#else
|
||||
#include <sys/endian.h>
|
||||
#include <endian.h>
|
||||
#include <sys/ioctl.h>
|
||||
#endif
|
||||
|
||||
|
|
@ -54,8 +38,10 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
|
||||
#define AES_IEC958_STATUS_SIZE 24
|
||||
|
||||
struct snd_aes_iec958 {
|
||||
unsigned char status[24]; /* AES/IEC958 channel status bits */
|
||||
unsigned char status[AES_IEC958_STATUS_SIZE]; /* AES/IEC958 channel status bits */
|
||||
unsigned char subcode[147]; /* AES/IEC958 subcode bits */
|
||||
unsigned char pad; /* nothing */
|
||||
unsigned char dig_subframe[4]; /* AES/IEC958 subframe bits */
|
||||
|
|
@ -154,7 +140,7 @@ struct snd_hwdep_dsp_image {
|
|||
* *
|
||||
*****************************************************************************/
|
||||
|
||||
#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 15)
|
||||
#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 18)
|
||||
|
||||
typedef unsigned long snd_pcm_uframes_t;
|
||||
typedef signed long snd_pcm_sframes_t;
|
||||
|
|
@ -200,6 +186,11 @@ typedef int __bitwise snd_pcm_format_t;
|
|||
#define SNDRV_PCM_FORMAT_S24_BE ((snd_pcm_format_t) 7) /* low three bytes */
|
||||
#define SNDRV_PCM_FORMAT_U24_LE ((snd_pcm_format_t) 8) /* low three bytes */
|
||||
#define SNDRV_PCM_FORMAT_U24_BE ((snd_pcm_format_t) 9) /* low three bytes */
|
||||
/*
|
||||
* For S32/U32 formats, 'msbits' hardware parameter is often used to deliver information about the
|
||||
* available bit count in most significant bit. It's for the case of so-called 'left-justified' or
|
||||
* `right-padding` sample which has less width than 32 bit.
|
||||
*/
|
||||
#define SNDRV_PCM_FORMAT_S32_LE ((snd_pcm_format_t) 10)
|
||||
#define SNDRV_PCM_FORMAT_S32_BE ((snd_pcm_format_t) 11)
|
||||
#define SNDRV_PCM_FORMAT_U32_LE ((snd_pcm_format_t) 12)
|
||||
|
|
@ -301,7 +292,8 @@ typedef int __bitwise snd_pcm_subformat_t;
|
|||
#define SNDRV_PCM_INFO_HAS_LINK_ABSOLUTE_ATIME 0x02000000 /* report absolute hardware link audio time, not reset on startup */
|
||||
#define SNDRV_PCM_INFO_HAS_LINK_ESTIMATED_ATIME 0x04000000 /* report estimated link audio time */
|
||||
#define SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME 0x08000000 /* report synchronized audio/system time */
|
||||
|
||||
#define SNDRV_PCM_INFO_EXPLICIT_SYNC 0x10000000 /* needs explicit sync of pointers and data */
|
||||
#define SNDRV_PCM_INFO_NO_REWINDS 0x20000000 /* hardware can only support monotonic changes of appl_ptr */
|
||||
#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 */
|
||||
|
||||
|
|
@ -340,7 +332,7 @@ union snd_pcm_sync_id {
|
|||
unsigned char id[16];
|
||||
unsigned short id16[8];
|
||||
unsigned int id32[4];
|
||||
};
|
||||
} __attribute__((deprecated));
|
||||
|
||||
struct snd_pcm_info {
|
||||
unsigned int device; /* RO/WR (control): device number */
|
||||
|
|
@ -354,7 +346,7 @@ struct snd_pcm_info {
|
|||
int dev_subclass; /* SNDRV_PCM_SUBCLASS_* */
|
||||
unsigned int subdevices_count;
|
||||
unsigned int subdevices_avail;
|
||||
union snd_pcm_sync_id sync; /* hardware synchronization ID */
|
||||
unsigned char pad1[16]; /* was: hardware synchronization ID */
|
||||
unsigned char reserved[64]; /* reserved for future... */
|
||||
};
|
||||
|
||||
|
|
@ -393,8 +385,8 @@ typedef int snd_pcm_hw_param_t;
|
|||
#define SNDRV_PCM_HW_PARAMS_NORESAMPLE (1<<0) /* avoid rate resampling */
|
||||
#define SNDRV_PCM_HW_PARAMS_EXPORT_BUFFER (1<<1) /* export buffer */
|
||||
#define SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP (1<<2) /* disable period wakeups */
|
||||
#define SNDRV_PCM_HW_PARAMS_NO_DRAIN_SILENCE (1<<3) /* suppress the silence fill
|
||||
* for draining
|
||||
#define SNDRV_PCM_HW_PARAMS_NO_DRAIN_SILENCE (1<<3) /* suppress drain with the filling
|
||||
* of the silence samples
|
||||
*/
|
||||
|
||||
struct snd_interval {
|
||||
|
|
@ -422,7 +414,7 @@ struct snd_pcm_hw_params {
|
|||
unsigned int rmask; /* W: requested masks */
|
||||
unsigned int cmask; /* R: changed masks */
|
||||
unsigned int info; /* R: Info flags for returned setup */
|
||||
unsigned int msbits; /* R: used most significant bits */
|
||||
unsigned int msbits; /* R: used most significant bits (in sample bit-width) */
|
||||
unsigned int rate_num; /* R: rate numerator */
|
||||
unsigned int rate_den; /* R: rate denominator */
|
||||
snd_pcm_uframes_t fifo_size; /* R: chip FIFO size in frames */
|
||||
|
|
@ -443,9 +435,14 @@ struct snd_pcm_sw_params {
|
|||
snd_pcm_uframes_t avail_min; /* min avail frames for wakeup */
|
||||
snd_pcm_uframes_t xfer_align; /* obsolete: xfer size need to be a multiple */
|
||||
snd_pcm_uframes_t start_threshold; /* min hw_avail frames for automatic start */
|
||||
snd_pcm_uframes_t stop_threshold; /* min avail frames for automatic stop */
|
||||
snd_pcm_uframes_t silence_threshold; /* min distance from noise for silence filling */
|
||||
snd_pcm_uframes_t silence_size; /* silence block size */
|
||||
/*
|
||||
* The following two thresholds alleviate playback buffer underruns; when
|
||||
* hw_avail drops below the threshold, the respective action is triggered:
|
||||
*/
|
||||
snd_pcm_uframes_t stop_threshold; /* - stop playback */
|
||||
snd_pcm_uframes_t silence_threshold; /* - pre-fill buffer with silence */
|
||||
snd_pcm_uframes_t silence_size; /* max size of silence pre-fill; when >= boundary,
|
||||
* fill played area with silence immediately */
|
||||
snd_pcm_uframes_t boundary; /* pointers wrap point */
|
||||
unsigned int proto; /* protocol version */
|
||||
unsigned int tstamp_type; /* timestamp type (req. proto >= 2.0.12) */
|
||||
|
|
@ -578,7 +575,8 @@ struct __snd_pcm_mmap_status64 {
|
|||
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 __pad2; // This should be __pad_after_uframe, but binary
|
||||
// backwards compatibility constraints prevent a fix.
|
||||
|
||||
__pad_before_uframe __pad3;
|
||||
snd_pcm_uframes_t avail_min; /* RW: min available frames for wakeup */
|
||||
|
|
@ -760,7 +758,7 @@ struct snd_rawmidi_framing_tstamp {
|
|||
__u32 tv_nsec; /* nanoseconds */
|
||||
__u64 tv_sec; /* seconds */
|
||||
__u8 data[SNDRV_RAWMIDI_FRAMING_DATA_LENGTH];
|
||||
} __packed;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct snd_rawmidi_params {
|
||||
int stream;
|
||||
|
|
@ -808,7 +806,7 @@ struct snd_ump_endpoint_info {
|
|||
unsigned char name[128]; /* endpoint name string */
|
||||
unsigned char product_id[128]; /* unique product id string */
|
||||
unsigned char reserved[32];
|
||||
} __packed;
|
||||
} __attribute__((packed));
|
||||
|
||||
/* UMP direction */
|
||||
#define SNDRV_UMP_DIR_INPUT 0x01
|
||||
|
|
@ -844,7 +842,7 @@ struct snd_ump_block_info {
|
|||
unsigned int flags; /* various info flags */
|
||||
unsigned char name[128]; /* block name string */
|
||||
unsigned char reserved[32];
|
||||
} __packed;
|
||||
} __attribute__((packed));
|
||||
|
||||
#define SNDRV_RAWMIDI_IOCTL_PVERSION _IOR('W', 0x00, int)
|
||||
#define SNDRV_RAWMIDI_IOCTL_INFO _IOR('W', 0x01, struct snd_rawmidi_info)
|
||||
|
|
@ -861,7 +859,7 @@ struct snd_ump_block_info {
|
|||
* Timer section - /dev/snd/timer
|
||||
*/
|
||||
|
||||
#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7)
|
||||
#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 8)
|
||||
|
||||
enum {
|
||||
SNDRV_TIMER_CLASS_NONE = -1,
|
||||
|
|
@ -886,6 +884,7 @@ enum {
|
|||
#define SNDRV_TIMER_GLOBAL_RTC 1 /* unused */
|
||||
#define SNDRV_TIMER_GLOBAL_HPET 2
|
||||
#define SNDRV_TIMER_GLOBAL_HRTIMER 3
|
||||
#define SNDRV_TIMER_GLOBAL_UDRIVEN 4
|
||||
|
||||
/* info flags */
|
||||
#define SNDRV_TIMER_FLG_SLAVE (1<<0) /* cannot be controlled */
|
||||
|
|
@ -964,6 +963,18 @@ struct snd_timer_status {
|
|||
unsigned char reserved[64]; /* reserved */
|
||||
};
|
||||
|
||||
/*
|
||||
* This structure describes the userspace-driven timer. Such timers are purely virtual,
|
||||
* and can only be triggered from software (for instance, by userspace application).
|
||||
*/
|
||||
struct snd_timer_uinfo {
|
||||
/* To pretend being a normal timer, we need to know the resolution in ns. */
|
||||
__u64 resolution;
|
||||
int fd;
|
||||
unsigned int id;
|
||||
unsigned char reserved[16];
|
||||
};
|
||||
|
||||
#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_OLD _IOW('T', 0x02, int)
|
||||
|
|
@ -980,6 +991,8 @@ struct snd_timer_status {
|
|||
#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)
|
||||
#define SNDRV_TIMER_IOCTL_CREATE _IOWR('T', 0xa5, struct snd_timer_uinfo)
|
||||
#define SNDRV_TIMER_IOCTL_TRIGGER _IO('T', 0xa6)
|
||||
|
||||
#if __BITS_PER_LONG == 64
|
||||
#define SNDRV_TIMER_IOCTL_TREAD SNDRV_TIMER_IOCTL_TREAD_OLD
|
||||
|
|
@ -1065,7 +1078,7 @@ typedef int __bitwise snd_ctl_elem_iface_t;
|
|||
#define SNDRV_CTL_ELEM_ACCESS_WRITE (1<<1)
|
||||
#define SNDRV_CTL_ELEM_ACCESS_READWRITE (SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE)
|
||||
#define SNDRV_CTL_ELEM_ACCESS_VOLATILE (1<<2) /* control value may be changed without a notification */
|
||||
// (1 << 3) is unused.
|
||||
/* (1 << 3) is unused. */
|
||||
#define SNDRV_CTL_ELEM_ACCESS_TLV_READ (1<<4) /* TLV read is possible */
|
||||
#define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE (1<<5) /* TLV write is possible */
|
||||
#define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE (SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)
|
||||
|
|
@ -1162,7 +1175,7 @@ struct snd_ctl_elem_value {
|
|||
struct snd_ctl_tlv {
|
||||
unsigned int numid; /* control element numeric identification */
|
||||
unsigned int length; /* in bytes aligned to 4 */
|
||||
unsigned int tlv[0]; /* first TLV */
|
||||
unsigned int tlv[]; /* first TLV */
|
||||
};
|
||||
|
||||
#define SNDRV_CTL_IOCTL_PVERSION _IOR('U', 0x00, int)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue