1fb7df12dSIngo Molnar /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ 2a215684eSArnaldo Carvalho de Melo /* 3a215684eSArnaldo Carvalho de Melo * Advanced Linux Sound Architecture - ALSA - Driver 4a215684eSArnaldo Carvalho de Melo * Copyright (c) 1994-2003 by Jaroslav Kysela <perex@perex.cz>, 5a215684eSArnaldo Carvalho de Melo * Abramo Bagnara <abramo@alsa-project.org> 6a215684eSArnaldo Carvalho de Melo */ 7a215684eSArnaldo Carvalho de Melo 8a215684eSArnaldo Carvalho de Melo #ifndef _UAPI__SOUND_ASOUND_H 9a215684eSArnaldo Carvalho de Melo #define _UAPI__SOUND_ASOUND_H 10a215684eSArnaldo Carvalho de Melo 11a215684eSArnaldo Carvalho de Melo #if defined(__KERNEL__) || defined(__linux__) 12a215684eSArnaldo Carvalho de Melo #include <linux/types.h> 138c65582fSArnaldo Carvalho de Melo #include <asm/byteorder.h> 14a215684eSArnaldo Carvalho de Melo #else 158c65582fSArnaldo Carvalho de Melo #include <endian.h> 16a215684eSArnaldo Carvalho de Melo #include <sys/ioctl.h> 17a215684eSArnaldo Carvalho de Melo #endif 18a215684eSArnaldo Carvalho de Melo 19a215684eSArnaldo Carvalho de Melo #ifndef __KERNEL__ 20a215684eSArnaldo Carvalho de Melo #include <stdlib.h> 2130e4c574SArnaldo Carvalho de Melo #include <time.h> 22a215684eSArnaldo Carvalho de Melo #endif 23a215684eSArnaldo Carvalho de Melo 24a215684eSArnaldo Carvalho de Melo /* 25a215684eSArnaldo Carvalho de Melo * protocol version 26a215684eSArnaldo Carvalho de Melo */ 27a215684eSArnaldo Carvalho de Melo 28a215684eSArnaldo Carvalho de Melo #define SNDRV_PROTOCOL_VERSION(major, minor, subminor) (((major)<<16)|((minor)<<8)|(subminor)) 29a215684eSArnaldo Carvalho de Melo #define SNDRV_PROTOCOL_MAJOR(version) (((version)>>16)&0xffff) 30a215684eSArnaldo Carvalho de Melo #define SNDRV_PROTOCOL_MINOR(version) (((version)>>8)&0xff) 31a215684eSArnaldo Carvalho de Melo #define SNDRV_PROTOCOL_MICRO(version) ((version)&0xff) 32a215684eSArnaldo Carvalho de Melo #define SNDRV_PROTOCOL_INCOMPATIBLE(kversion, uversion) \ 33a215684eSArnaldo Carvalho de Melo (SNDRV_PROTOCOL_MAJOR(kversion) != SNDRV_PROTOCOL_MAJOR(uversion) || \ 34a215684eSArnaldo Carvalho de Melo (SNDRV_PROTOCOL_MAJOR(kversion) == SNDRV_PROTOCOL_MAJOR(uversion) && \ 35a215684eSArnaldo Carvalho de Melo SNDRV_PROTOCOL_MINOR(kversion) != SNDRV_PROTOCOL_MINOR(uversion))) 36a215684eSArnaldo Carvalho de Melo 37a215684eSArnaldo Carvalho de Melo /**************************************************************************** 38a215684eSArnaldo Carvalho de Melo * * 39a215684eSArnaldo Carvalho de Melo * Digital audio interface * 40a215684eSArnaldo Carvalho de Melo * * 41a215684eSArnaldo Carvalho de Melo ****************************************************************************/ 42a215684eSArnaldo Carvalho de Melo 434f249273SArnaldo Carvalho de Melo #define AES_IEC958_STATUS_SIZE 24 444f249273SArnaldo Carvalho de Melo 45a215684eSArnaldo Carvalho de Melo struct snd_aes_iec958 { 464f249273SArnaldo Carvalho de Melo unsigned char status[AES_IEC958_STATUS_SIZE]; /* AES/IEC958 channel status bits */ 47a215684eSArnaldo Carvalho de Melo unsigned char subcode[147]; /* AES/IEC958 subcode bits */ 48a215684eSArnaldo Carvalho de Melo unsigned char pad; /* nothing */ 49a215684eSArnaldo Carvalho de Melo unsigned char dig_subframe[4]; /* AES/IEC958 subframe bits */ 50a215684eSArnaldo Carvalho de Melo }; 51a215684eSArnaldo Carvalho de Melo 52a215684eSArnaldo Carvalho de Melo /**************************************************************************** 53a215684eSArnaldo Carvalho de Melo * * 54a215684eSArnaldo Carvalho de Melo * CEA-861 Audio InfoFrame. Used in HDMI and DisplayPort * 55a215684eSArnaldo Carvalho de Melo * * 56a215684eSArnaldo Carvalho de Melo ****************************************************************************/ 57a215684eSArnaldo Carvalho de Melo 58a215684eSArnaldo Carvalho de Melo struct snd_cea_861_aud_if { 59a215684eSArnaldo Carvalho de Melo unsigned char db1_ct_cc; /* coding type and channel count */ 60a215684eSArnaldo Carvalho de Melo unsigned char db2_sf_ss; /* sample frequency and size */ 61a215684eSArnaldo Carvalho de Melo unsigned char db3; /* not used, all zeros */ 62a215684eSArnaldo Carvalho de Melo unsigned char db4_ca; /* channel allocation code */ 63a215684eSArnaldo Carvalho de Melo unsigned char db5_dminh_lsv; /* downmix inhibit & level-shit values */ 64a215684eSArnaldo Carvalho de Melo }; 65a215684eSArnaldo Carvalho de Melo 66a215684eSArnaldo Carvalho de Melo /**************************************************************************** 67a215684eSArnaldo Carvalho de Melo * * 68a215684eSArnaldo Carvalho de Melo * Section for driver hardware dependent interface - /dev/snd/hw? * 69a215684eSArnaldo Carvalho de Melo * * 70a215684eSArnaldo Carvalho de Melo ****************************************************************************/ 71a215684eSArnaldo Carvalho de Melo 72a215684eSArnaldo Carvalho de Melo #define SNDRV_HWDEP_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 1) 73a215684eSArnaldo Carvalho de Melo 74a215684eSArnaldo Carvalho de Melo enum { 75a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_OPL2 = 0, 76a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_OPL3, 77a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_OPL4, 78a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_SB16CSP, /* Creative Signal Processor */ 79a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_EMU10K1, /* FX8010 processor in EMU10K1 chip */ 80a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_YSS225, /* Yamaha FX processor */ 81a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_ICS2115, /* Wavetable synth */ 82a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_SSCAPE, /* Ensoniq SoundScape ISA card (MC68EC000) */ 83a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_VX, /* Digigram VX cards */ 84a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_MIXART, /* Digigram miXart cards */ 85a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_USX2Y, /* Tascam US122, US224 & US428 usb */ 86a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_EMUX_WAVETABLE, /* EmuX wavetable */ 87a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_BLUETOOTH, /* Bluetooth audio */ 88a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_USX2Y_PCM, /* Tascam US122, US224 & US428 rawusb pcm */ 89a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_PCXHR, /* Digigram PCXHR */ 90a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_SB_RC, /* SB Extigy/Audigy2NX remote control */ 91a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_HDA, /* HD-audio */ 92a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_USB_STREAM, /* direct access to usb stream */ 93a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_FW_DICE, /* TC DICE FireWire device */ 94a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_FW_FIREWORKS, /* Echo Audio Fireworks based device */ 95a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_FW_BEBOB, /* BridgeCo BeBoB based device */ 96a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_FW_OXFW, /* Oxford OXFW970/971 based device */ 97a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_FW_DIGI00X, /* Digidesign Digi 002/003 family */ 98a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_FW_TASCAM, /* TASCAM FireWire series */ 99a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_LINE6, /* Line6 USB processors */ 100a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_FW_MOTU, /* MOTU FireWire series */ 101a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_FW_FIREFACE, /* RME Fireface series */ 102a215684eSArnaldo Carvalho de Melo 103a215684eSArnaldo Carvalho de Melo /* Don't forget to change the following: */ 104a215684eSArnaldo Carvalho de Melo SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_FW_FIREFACE 105a215684eSArnaldo Carvalho de Melo }; 106a215684eSArnaldo Carvalho de Melo 107a215684eSArnaldo Carvalho de Melo struct snd_hwdep_info { 108a215684eSArnaldo Carvalho de Melo unsigned int device; /* WR: device number */ 109a215684eSArnaldo Carvalho de Melo int card; /* R: card number */ 110a215684eSArnaldo Carvalho de Melo unsigned char id[64]; /* ID (user selectable) */ 111a215684eSArnaldo Carvalho de Melo unsigned char name[80]; /* hwdep name */ 112a215684eSArnaldo Carvalho de Melo int iface; /* hwdep interface */ 113a215684eSArnaldo Carvalho de Melo unsigned char reserved[64]; /* reserved for future */ 114a215684eSArnaldo Carvalho de Melo }; 115a215684eSArnaldo Carvalho de Melo 116a215684eSArnaldo Carvalho de Melo /* generic DSP loader */ 117a215684eSArnaldo Carvalho de Melo struct snd_hwdep_dsp_status { 118a215684eSArnaldo Carvalho de Melo unsigned int version; /* R: driver-specific version */ 119a215684eSArnaldo Carvalho de Melo unsigned char id[32]; /* R: driver-specific ID string */ 120a215684eSArnaldo Carvalho de Melo unsigned int num_dsps; /* R: number of DSP images to transfer */ 121a215684eSArnaldo Carvalho de Melo unsigned int dsp_loaded; /* R: bit flags indicating the loaded DSPs */ 122a215684eSArnaldo Carvalho de Melo unsigned int chip_ready; /* R: 1 = initialization finished */ 123a215684eSArnaldo Carvalho de Melo unsigned char reserved[16]; /* reserved for future use */ 124a215684eSArnaldo Carvalho de Melo }; 125a215684eSArnaldo Carvalho de Melo 126a215684eSArnaldo Carvalho de Melo struct snd_hwdep_dsp_image { 127a215684eSArnaldo Carvalho de Melo unsigned int index; /* W: DSP index */ 128a215684eSArnaldo Carvalho de Melo unsigned char name[64]; /* W: ID (e.g. file name) */ 129a215684eSArnaldo Carvalho de Melo unsigned char __user *image; /* W: binary image */ 130a215684eSArnaldo Carvalho de Melo size_t length; /* W: size of image in bytes */ 131a215684eSArnaldo Carvalho de Melo unsigned long driver_data; /* W: driver-specific data */ 132a215684eSArnaldo Carvalho de Melo }; 133a215684eSArnaldo Carvalho de Melo 134a215684eSArnaldo Carvalho de Melo #define SNDRV_HWDEP_IOCTL_PVERSION _IOR ('H', 0x00, int) 135a215684eSArnaldo Carvalho de Melo #define SNDRV_HWDEP_IOCTL_INFO _IOR ('H', 0x01, struct snd_hwdep_info) 136a215684eSArnaldo Carvalho de Melo #define SNDRV_HWDEP_IOCTL_DSP_STATUS _IOR('H', 0x02, struct snd_hwdep_dsp_status) 137a215684eSArnaldo Carvalho de Melo #define SNDRV_HWDEP_IOCTL_DSP_LOAD _IOW('H', 0x03, struct snd_hwdep_dsp_image) 138a215684eSArnaldo Carvalho de Melo 139a215684eSArnaldo Carvalho de Melo /***************************************************************************** 140a215684eSArnaldo Carvalho de Melo * * 141a215684eSArnaldo Carvalho de Melo * Digital Audio (PCM) interface - /dev/snd/pcm?? * 142a215684eSArnaldo Carvalho de Melo * * 143a215684eSArnaldo Carvalho de Melo *****************************************************************************/ 144a215684eSArnaldo Carvalho de Melo 1458c65582fSArnaldo Carvalho de Melo #define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 15) 146a215684eSArnaldo Carvalho de Melo 147a215684eSArnaldo Carvalho de Melo typedef unsigned long snd_pcm_uframes_t; 148a215684eSArnaldo Carvalho de Melo typedef signed long snd_pcm_sframes_t; 149a215684eSArnaldo Carvalho de Melo 150a215684eSArnaldo Carvalho de Melo enum { 151a215684eSArnaldo Carvalho de Melo SNDRV_PCM_CLASS_GENERIC = 0, /* standard mono or stereo device */ 152a215684eSArnaldo Carvalho de Melo SNDRV_PCM_CLASS_MULTI, /* multichannel device */ 153a215684eSArnaldo Carvalho de Melo SNDRV_PCM_CLASS_MODEM, /* software modem class */ 154a215684eSArnaldo Carvalho de Melo SNDRV_PCM_CLASS_DIGITIZER, /* digitizer class */ 155a215684eSArnaldo Carvalho de Melo /* Don't forget to change the following: */ 156a215684eSArnaldo Carvalho de Melo SNDRV_PCM_CLASS_LAST = SNDRV_PCM_CLASS_DIGITIZER, 157a215684eSArnaldo Carvalho de Melo }; 158a215684eSArnaldo Carvalho de Melo 159a215684eSArnaldo Carvalho de Melo enum { 160a215684eSArnaldo Carvalho de Melo SNDRV_PCM_SUBCLASS_GENERIC_MIX = 0, /* mono or stereo subdevices are mixed together */ 161a215684eSArnaldo Carvalho de Melo SNDRV_PCM_SUBCLASS_MULTI_MIX, /* multichannel subdevices are mixed together */ 162a215684eSArnaldo Carvalho de Melo /* Don't forget to change the following: */ 163a215684eSArnaldo Carvalho de Melo SNDRV_PCM_SUBCLASS_LAST = SNDRV_PCM_SUBCLASS_MULTI_MIX, 164a215684eSArnaldo Carvalho de Melo }; 165a215684eSArnaldo Carvalho de Melo 166a215684eSArnaldo Carvalho de Melo enum { 167a215684eSArnaldo Carvalho de Melo SNDRV_PCM_STREAM_PLAYBACK = 0, 168a215684eSArnaldo Carvalho de Melo SNDRV_PCM_STREAM_CAPTURE, 169a215684eSArnaldo Carvalho de Melo SNDRV_PCM_STREAM_LAST = SNDRV_PCM_STREAM_CAPTURE, 170a215684eSArnaldo Carvalho de Melo }; 171a215684eSArnaldo Carvalho de Melo 172a215684eSArnaldo Carvalho de Melo typedef int __bitwise snd_pcm_access_t; 173a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_ACCESS_MMAP_INTERLEAVED ((__force snd_pcm_access_t) 0) /* interleaved mmap */ 174a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED ((__force snd_pcm_access_t) 1) /* noninterleaved mmap */ 175a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_ACCESS_MMAP_COMPLEX ((__force snd_pcm_access_t) 2) /* complex mmap */ 176a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_ACCESS_RW_INTERLEAVED ((__force snd_pcm_access_t) 3) /* readi/writei */ 177a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_ACCESS_RW_NONINTERLEAVED ((__force snd_pcm_access_t) 4) /* readn/writen */ 178a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_ACCESS_LAST SNDRV_PCM_ACCESS_RW_NONINTERLEAVED 179a215684eSArnaldo Carvalho de Melo 180a215684eSArnaldo Carvalho de Melo typedef int __bitwise snd_pcm_format_t; 181a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S8 ((__force snd_pcm_format_t) 0) 182a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U8 ((__force snd_pcm_format_t) 1) 183a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S16_LE ((__force snd_pcm_format_t) 2) 184a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S16_BE ((__force snd_pcm_format_t) 3) 185a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U16_LE ((__force snd_pcm_format_t) 4) 186a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U16_BE ((__force snd_pcm_format_t) 5) 187a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S24_LE ((__force snd_pcm_format_t) 6) /* low three bytes */ 188a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S24_BE ((__force snd_pcm_format_t) 7) /* low three bytes */ 189a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U24_LE ((__force snd_pcm_format_t) 8) /* low three bytes */ 190a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U24_BE ((__force snd_pcm_format_t) 9) /* low three bytes */ 191e9cc5d48SArnaldo Carvalho de Melo /* 192e9cc5d48SArnaldo Carvalho de Melo * For S32/U32 formats, 'msbits' hardware parameter is often used to deliver information about the 193e9cc5d48SArnaldo Carvalho de Melo * available bit count in most significant bit. It's for the case of so-called 'left-justified' or 194e9cc5d48SArnaldo Carvalho de Melo * `right-padding` sample which has less width than 32 bit. 195e9cc5d48SArnaldo Carvalho de Melo */ 196a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S32_LE ((__force snd_pcm_format_t) 10) 197a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S32_BE ((__force snd_pcm_format_t) 11) 198a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U32_LE ((__force snd_pcm_format_t) 12) 199a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U32_BE ((__force snd_pcm_format_t) 13) 200a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_FLOAT_LE ((__force snd_pcm_format_t) 14) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */ 201a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_FLOAT_BE ((__force snd_pcm_format_t) 15) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */ 202a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_FLOAT64_LE ((__force snd_pcm_format_t) 16) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */ 203a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_FLOAT64_BE ((__force snd_pcm_format_t) 17) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */ 204a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE ((__force snd_pcm_format_t) 18) /* IEC-958 subframe, Little Endian */ 205a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE ((__force snd_pcm_format_t) 19) /* IEC-958 subframe, Big Endian */ 206a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_MU_LAW ((__force snd_pcm_format_t) 20) 207a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_A_LAW ((__force snd_pcm_format_t) 21) 208a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_IMA_ADPCM ((__force snd_pcm_format_t) 22) 209a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_MPEG ((__force snd_pcm_format_t) 23) 210a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_GSM ((__force snd_pcm_format_t) 24) 2116bc7626cSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S20_LE ((__force snd_pcm_format_t) 25) /* in four bytes, LSB justified */ 2126bc7626cSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S20_BE ((__force snd_pcm_format_t) 26) /* in four bytes, LSB justified */ 2136bc7626cSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U20_LE ((__force snd_pcm_format_t) 27) /* in four bytes, LSB justified */ 2146bc7626cSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U20_BE ((__force snd_pcm_format_t) 28) /* in four bytes, LSB justified */ 2156bc7626cSArnaldo Carvalho de Melo /* gap in the numbering for a future standard linear format */ 216a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_SPECIAL ((__force snd_pcm_format_t) 31) 217a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S24_3LE ((__force snd_pcm_format_t) 32) /* in three bytes */ 218a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S24_3BE ((__force snd_pcm_format_t) 33) /* in three bytes */ 219a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U24_3LE ((__force snd_pcm_format_t) 34) /* in three bytes */ 220a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U24_3BE ((__force snd_pcm_format_t) 35) /* in three bytes */ 221a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S20_3LE ((__force snd_pcm_format_t) 36) /* in three bytes */ 222a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S20_3BE ((__force snd_pcm_format_t) 37) /* in three bytes */ 223a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U20_3LE ((__force snd_pcm_format_t) 38) /* in three bytes */ 224a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U20_3BE ((__force snd_pcm_format_t) 39) /* in three bytes */ 225a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S18_3LE ((__force snd_pcm_format_t) 40) /* in three bytes */ 226a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S18_3BE ((__force snd_pcm_format_t) 41) /* in three bytes */ 227a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U18_3LE ((__force snd_pcm_format_t) 42) /* in three bytes */ 228a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U18_3BE ((__force snd_pcm_format_t) 43) /* in three bytes */ 229a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_G723_24 ((__force snd_pcm_format_t) 44) /* 8 samples in 3 bytes */ 230a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_G723_24_1B ((__force snd_pcm_format_t) 45) /* 1 sample in 1 byte */ 231a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_G723_40 ((__force snd_pcm_format_t) 46) /* 8 Samples in 5 bytes */ 232a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_G723_40_1B ((__force snd_pcm_format_t) 47) /* 1 sample in 1 byte */ 233a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */ 234a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */ 235a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_DSD_U32_LE ((__force snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */ 236a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_DSD_U16_BE ((__force snd_pcm_format_t) 51) /* DSD, 2-byte samples DSD (x16), big endian */ 237a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_DSD_U32_BE ((__force snd_pcm_format_t) 52) /* DSD, 4-byte samples DSD (x32), big endian */ 238a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_BE 239e2f73a18SIngo Molnar #define SNDRV_PCM_FORMAT_FIRST SNDRV_PCM_FORMAT_S8 240a215684eSArnaldo Carvalho de Melo 241a215684eSArnaldo Carvalho de Melo #ifdef SNDRV_LITTLE_ENDIAN 242a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE 243a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_LE 244a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S24 SNDRV_PCM_FORMAT_S24_LE 245a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U24 SNDRV_PCM_FORMAT_U24_LE 246a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S32 SNDRV_PCM_FORMAT_S32_LE 247a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U32 SNDRV_PCM_FORMAT_U32_LE 248a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_LE 249a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_LE 250a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE 2516bc7626cSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S20 SNDRV_PCM_FORMAT_S20_LE 2526bc7626cSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U20 SNDRV_PCM_FORMAT_U20_LE 253a215684eSArnaldo Carvalho de Melo #endif 254a215684eSArnaldo Carvalho de Melo #ifdef SNDRV_BIG_ENDIAN 255a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_BE 256a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_BE 257a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S24 SNDRV_PCM_FORMAT_S24_BE 258a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U24 SNDRV_PCM_FORMAT_U24_BE 259a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S32 SNDRV_PCM_FORMAT_S32_BE 260a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U32 SNDRV_PCM_FORMAT_U32_BE 261a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_BE 262a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_BE 263a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE 2646bc7626cSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_S20 SNDRV_PCM_FORMAT_S20_BE 2656bc7626cSArnaldo Carvalho de Melo #define SNDRV_PCM_FORMAT_U20 SNDRV_PCM_FORMAT_U20_BE 266a215684eSArnaldo Carvalho de Melo #endif 267a215684eSArnaldo Carvalho de Melo 268a215684eSArnaldo Carvalho de Melo typedef int __bitwise snd_pcm_subformat_t; 269a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_SUBFORMAT_STD ((__force snd_pcm_subformat_t) 0) 270a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_SUBFORMAT_LAST SNDRV_PCM_SUBFORMAT_STD 271a215684eSArnaldo Carvalho de Melo 272a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_MMAP 0x00000001 /* hardware supports mmap */ 273a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_MMAP_VALID 0x00000002 /* period data are valid during transfer */ 274a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_DOUBLE 0x00000004 /* Double buffering needed for PCM start/stop */ 275a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_BATCH 0x00000010 /* double buffering */ 276a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_SYNC_APPLPTR 0x00000020 /* need the explicit sync of appl_ptr update */ 277*28e898ffSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_PERFECT_DRAIN 0x00000040 /* silencing at the end of stream is not required */ 278a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_INTERLEAVED 0x00000100 /* channels are interleaved */ 279a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_NONINTERLEAVED 0x00000200 /* channels are not interleaved */ 280a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_COMPLEX 0x00000400 /* complex frame organization (mmap only) */ 281a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_BLOCK_TRANSFER 0x00010000 /* hardware transfer block of samples */ 282a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_OVERRANGE 0x00020000 /* hardware supports ADC (capture) overrange detection */ 283a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_RESUME 0x00040000 /* hardware supports stream resume after suspend */ 284a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_PAUSE 0x00080000 /* pause ioctl is supported */ 285a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_HALF_DUPLEX 0x00100000 /* only half duplex */ 286a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_JOINT_DUPLEX 0x00200000 /* playback and capture stream are somewhat correlated */ 287a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_SYNC_START 0x00400000 /* pcm support some kind of sync go */ 288a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_NO_PERIOD_WAKEUP 0x00800000 /* period wakeup can be disabled */ 289a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_HAS_WALL_CLOCK 0x01000000 /* (Deprecated)has audio wall clock for audio/system time sync */ 290a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_HAS_LINK_ATIME 0x01000000 /* report hardware link audio time, reset on startup */ 291a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_HAS_LINK_ABSOLUTE_ATIME 0x02000000 /* report absolute hardware link audio time, not reset on startup */ 292a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_HAS_LINK_ESTIMATED_ATIME 0x04000000 /* report estimated link audio time */ 293a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME 0x08000000 /* report synchronized audio/system time */ 294f9f018e4SArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_EXPLICIT_SYNC 0x10000000 /* needs explicit sync of pointers and data */ 295e9cc5d48SArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_NO_REWINDS 0x20000000 /* hardware can only support monotonic changes of appl_ptr */ 296a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_DRAIN_TRIGGER 0x40000000 /* internal kernel flag - trigger in drain */ 297a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_INFO_FIFO_IN_FRAMES 0x80000000 /* internal kernel flag - FIFO size is in frames */ 298a215684eSArnaldo Carvalho de Melo 2998c65582fSArnaldo Carvalho de Melo #if (__BITS_PER_LONG == 32 && defined(__USE_TIME_BITS64)) || defined __KERNEL__ 3008c65582fSArnaldo Carvalho de Melo #define __SND_STRUCT_TIME64 3018c65582fSArnaldo Carvalho de Melo #endif 302a215684eSArnaldo Carvalho de Melo 303a215684eSArnaldo Carvalho de Melo typedef int __bitwise snd_pcm_state_t; 304a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_STATE_OPEN ((__force snd_pcm_state_t) 0) /* stream is open */ 305a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_STATE_SETUP ((__force snd_pcm_state_t) 1) /* stream has a setup */ 306a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_STATE_PREPARED ((__force snd_pcm_state_t) 2) /* stream is ready to start */ 307a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_STATE_RUNNING ((__force snd_pcm_state_t) 3) /* stream is running */ 308a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_STATE_XRUN ((__force snd_pcm_state_t) 4) /* stream reached an xrun */ 309a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_STATE_DRAINING ((__force snd_pcm_state_t) 5) /* stream is draining */ 310a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_STATE_PAUSED ((__force snd_pcm_state_t) 6) /* stream is paused */ 311a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_STATE_SUSPENDED ((__force snd_pcm_state_t) 7) /* hardware is suspended */ 312a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_STATE_DISCONNECTED ((__force snd_pcm_state_t) 8) /* hardware is disconnected */ 313a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_STATE_LAST SNDRV_PCM_STATE_DISCONNECTED 314a215684eSArnaldo Carvalho de Melo 315a215684eSArnaldo Carvalho de Melo enum { 316a215684eSArnaldo Carvalho de Melo SNDRV_PCM_MMAP_OFFSET_DATA = 0x00000000, 3178c65582fSArnaldo Carvalho de Melo SNDRV_PCM_MMAP_OFFSET_STATUS_OLD = 0x80000000, 3188c65582fSArnaldo Carvalho de Melo SNDRV_PCM_MMAP_OFFSET_CONTROL_OLD = 0x81000000, 3198c65582fSArnaldo Carvalho de Melo SNDRV_PCM_MMAP_OFFSET_STATUS_NEW = 0x82000000, 3208c65582fSArnaldo Carvalho de Melo SNDRV_PCM_MMAP_OFFSET_CONTROL_NEW = 0x83000000, 3218c65582fSArnaldo Carvalho de Melo #ifdef __SND_STRUCT_TIME64 3228c65582fSArnaldo Carvalho de Melo SNDRV_PCM_MMAP_OFFSET_STATUS = SNDRV_PCM_MMAP_OFFSET_STATUS_NEW, 3238c65582fSArnaldo Carvalho de Melo SNDRV_PCM_MMAP_OFFSET_CONTROL = SNDRV_PCM_MMAP_OFFSET_CONTROL_NEW, 3248c65582fSArnaldo Carvalho de Melo #else 3258c65582fSArnaldo Carvalho de Melo SNDRV_PCM_MMAP_OFFSET_STATUS = SNDRV_PCM_MMAP_OFFSET_STATUS_OLD, 3268c65582fSArnaldo Carvalho de Melo SNDRV_PCM_MMAP_OFFSET_CONTROL = SNDRV_PCM_MMAP_OFFSET_CONTROL_OLD, 3278c65582fSArnaldo Carvalho de Melo #endif 328a215684eSArnaldo Carvalho de Melo }; 329a215684eSArnaldo Carvalho de Melo 330a215684eSArnaldo Carvalho de Melo union snd_pcm_sync_id { 331a215684eSArnaldo Carvalho de Melo unsigned char id[16]; 332a215684eSArnaldo Carvalho de Melo unsigned short id16[8]; 333a215684eSArnaldo Carvalho de Melo unsigned int id32[4]; 334a215684eSArnaldo Carvalho de Melo }; 335a215684eSArnaldo Carvalho de Melo 336a215684eSArnaldo Carvalho de Melo struct snd_pcm_info { 337a215684eSArnaldo Carvalho de Melo unsigned int device; /* RO/WR (control): device number */ 338a215684eSArnaldo Carvalho de Melo unsigned int subdevice; /* RO/WR (control): subdevice number */ 339a215684eSArnaldo Carvalho de Melo int stream; /* RO/WR (control): stream direction */ 340a215684eSArnaldo Carvalho de Melo int card; /* R: card number */ 341a215684eSArnaldo Carvalho de Melo unsigned char id[64]; /* ID (user selectable) */ 342a215684eSArnaldo Carvalho de Melo unsigned char name[80]; /* name of this device */ 343a215684eSArnaldo Carvalho de Melo unsigned char subname[32]; /* subdevice name */ 344a215684eSArnaldo Carvalho de Melo int dev_class; /* SNDRV_PCM_CLASS_* */ 345a215684eSArnaldo Carvalho de Melo int dev_subclass; /* SNDRV_PCM_SUBCLASS_* */ 346a215684eSArnaldo Carvalho de Melo unsigned int subdevices_count; 347a215684eSArnaldo Carvalho de Melo unsigned int subdevices_avail; 348a215684eSArnaldo Carvalho de Melo union snd_pcm_sync_id sync; /* hardware synchronization ID */ 349a215684eSArnaldo Carvalho de Melo unsigned char reserved[64]; /* reserved for future... */ 350a215684eSArnaldo Carvalho de Melo }; 351a215684eSArnaldo Carvalho de Melo 352a215684eSArnaldo Carvalho de Melo typedef int snd_pcm_hw_param_t; 353a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_ACCESS 0 /* Access type */ 354a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_FORMAT 1 /* Format */ 355a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_SUBFORMAT 2 /* Subformat */ 356a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_FIRST_MASK SNDRV_PCM_HW_PARAM_ACCESS 357a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_LAST_MASK SNDRV_PCM_HW_PARAM_SUBFORMAT 358a215684eSArnaldo Carvalho de Melo 359a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_SAMPLE_BITS 8 /* Bits per sample */ 360a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_FRAME_BITS 9 /* Bits per frame */ 361a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_CHANNELS 10 /* Channels */ 362a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_RATE 11 /* Approx rate */ 363a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_PERIOD_TIME 12 /* Approx distance between 364a215684eSArnaldo Carvalho de Melo * interrupts in us 365a215684eSArnaldo Carvalho de Melo */ 366a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_PERIOD_SIZE 13 /* Approx frames between 367a215684eSArnaldo Carvalho de Melo * interrupts 368a215684eSArnaldo Carvalho de Melo */ 369a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_PERIOD_BYTES 14 /* Approx bytes between 370a215684eSArnaldo Carvalho de Melo * interrupts 371a215684eSArnaldo Carvalho de Melo */ 372a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_PERIODS 15 /* Approx interrupts per 373a215684eSArnaldo Carvalho de Melo * buffer 374a215684eSArnaldo Carvalho de Melo */ 375a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_BUFFER_TIME 16 /* Approx duration of buffer 376a215684eSArnaldo Carvalho de Melo * in us 377a215684eSArnaldo Carvalho de Melo */ 378a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_BUFFER_SIZE 17 /* Size of buffer in frames */ 379a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_BUFFER_BYTES 18 /* Size of buffer in bytes */ 380a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_TICK_TIME 19 /* Approx tick duration in us */ 381a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_FIRST_INTERVAL SNDRV_PCM_HW_PARAM_SAMPLE_BITS 382a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAM_LAST_INTERVAL SNDRV_PCM_HW_PARAM_TICK_TIME 383a215684eSArnaldo Carvalho de Melo 384a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAMS_NORESAMPLE (1<<0) /* avoid rate resampling */ 385a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAMS_EXPORT_BUFFER (1<<1) /* export buffer */ 386a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP (1<<2) /* disable period wakeups */ 387*28e898ffSArnaldo Carvalho de Melo #define SNDRV_PCM_HW_PARAMS_NO_DRAIN_SILENCE (1<<3) /* suppress drain with the filling 388*28e898ffSArnaldo Carvalho de Melo * of the silence samples 389*28e898ffSArnaldo Carvalho de Melo */ 390a215684eSArnaldo Carvalho de Melo 391a215684eSArnaldo Carvalho de Melo struct snd_interval { 392a215684eSArnaldo Carvalho de Melo unsigned int min, max; 393a215684eSArnaldo Carvalho de Melo unsigned int openmin:1, 394a215684eSArnaldo Carvalho de Melo openmax:1, 395a215684eSArnaldo Carvalho de Melo integer:1, 396a215684eSArnaldo Carvalho de Melo empty:1; 397a215684eSArnaldo Carvalho de Melo }; 398a215684eSArnaldo Carvalho de Melo 399a215684eSArnaldo Carvalho de Melo #define SNDRV_MASK_MAX 256 400a215684eSArnaldo Carvalho de Melo 401a215684eSArnaldo Carvalho de Melo struct snd_mask { 402a215684eSArnaldo Carvalho de Melo __u32 bits[(SNDRV_MASK_MAX+31)/32]; 403a215684eSArnaldo Carvalho de Melo }; 404a215684eSArnaldo Carvalho de Melo 405a215684eSArnaldo Carvalho de Melo struct snd_pcm_hw_params { 406a215684eSArnaldo Carvalho de Melo unsigned int flags; 407a215684eSArnaldo Carvalho de Melo struct snd_mask masks[SNDRV_PCM_HW_PARAM_LAST_MASK - 408a215684eSArnaldo Carvalho de Melo SNDRV_PCM_HW_PARAM_FIRST_MASK + 1]; 409a215684eSArnaldo Carvalho de Melo struct snd_mask mres[5]; /* reserved masks */ 410a215684eSArnaldo Carvalho de Melo struct snd_interval intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL - 411a215684eSArnaldo Carvalho de Melo SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1]; 412a215684eSArnaldo Carvalho de Melo struct snd_interval ires[9]; /* reserved intervals */ 413a215684eSArnaldo Carvalho de Melo unsigned int rmask; /* W: requested masks */ 414a215684eSArnaldo Carvalho de Melo unsigned int cmask; /* R: changed masks */ 415a215684eSArnaldo Carvalho de Melo unsigned int info; /* R: Info flags for returned setup */ 416a215684eSArnaldo Carvalho de Melo unsigned int msbits; /* R: used most significant bits */ 417a215684eSArnaldo Carvalho de Melo unsigned int rate_num; /* R: rate numerator */ 418a215684eSArnaldo Carvalho de Melo unsigned int rate_den; /* R: rate denominator */ 419a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t fifo_size; /* R: chip FIFO size in frames */ 420a215684eSArnaldo Carvalho de Melo unsigned char reserved[64]; /* reserved for future */ 421a215684eSArnaldo Carvalho de Melo }; 422a215684eSArnaldo Carvalho de Melo 423a215684eSArnaldo Carvalho de Melo enum { 424a215684eSArnaldo Carvalho de Melo SNDRV_PCM_TSTAMP_NONE = 0, 425a215684eSArnaldo Carvalho de Melo SNDRV_PCM_TSTAMP_ENABLE, 426a215684eSArnaldo Carvalho de Melo SNDRV_PCM_TSTAMP_LAST = SNDRV_PCM_TSTAMP_ENABLE, 427a215684eSArnaldo Carvalho de Melo }; 428a215684eSArnaldo Carvalho de Melo 429a215684eSArnaldo Carvalho de Melo struct snd_pcm_sw_params { 430a215684eSArnaldo Carvalho de Melo int tstamp_mode; /* timestamp mode */ 431a215684eSArnaldo Carvalho de Melo unsigned int period_step; 432a215684eSArnaldo Carvalho de Melo unsigned int sleep_min; /* min ticks to sleep */ 433a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t avail_min; /* min avail frames for wakeup */ 434a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t xfer_align; /* obsolete: xfer size need to be a multiple */ 435a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t start_threshold; /* min hw_avail frames for automatic start */ 4368d6a41c8SYanteng Si /* 4378d6a41c8SYanteng Si * The following two thresholds alleviate playback buffer underruns; when 4388d6a41c8SYanteng Si * hw_avail drops below the threshold, the respective action is triggered: 4398d6a41c8SYanteng Si */ 4408d6a41c8SYanteng Si snd_pcm_uframes_t stop_threshold; /* - stop playback */ 4418d6a41c8SYanteng Si snd_pcm_uframes_t silence_threshold; /* - pre-fill buffer with silence */ 4428d6a41c8SYanteng Si snd_pcm_uframes_t silence_size; /* max size of silence pre-fill; when >= boundary, 4438d6a41c8SYanteng Si * fill played area with silence immediately */ 444a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t boundary; /* pointers wrap point */ 445a215684eSArnaldo Carvalho de Melo unsigned int proto; /* protocol version */ 446a215684eSArnaldo Carvalho de Melo unsigned int tstamp_type; /* timestamp type (req. proto >= 2.0.12) */ 447a215684eSArnaldo Carvalho de Melo unsigned char reserved[56]; /* reserved for future */ 448a215684eSArnaldo Carvalho de Melo }; 449a215684eSArnaldo Carvalho de Melo 450a215684eSArnaldo Carvalho de Melo struct snd_pcm_channel_info { 451a215684eSArnaldo Carvalho de Melo unsigned int channel; 452a215684eSArnaldo Carvalho de Melo __kernel_off_t offset; /* mmap offset */ 453a215684eSArnaldo Carvalho de Melo unsigned int first; /* offset to first sample in bits */ 454a215684eSArnaldo Carvalho de Melo unsigned int step; /* samples distance in bits */ 455a215684eSArnaldo Carvalho de Melo }; 456a215684eSArnaldo Carvalho de Melo 457a215684eSArnaldo Carvalho de Melo enum { 458a215684eSArnaldo Carvalho de Melo /* 459a215684eSArnaldo Carvalho de Melo * first definition for backwards compatibility only, 460a215684eSArnaldo Carvalho de Melo * maps to wallclock/link time for HDAudio playback and DEFAULT/DMA time for everything else 461a215684eSArnaldo Carvalho de Melo */ 462a215684eSArnaldo Carvalho de Melo SNDRV_PCM_AUDIO_TSTAMP_TYPE_COMPAT = 0, 463a215684eSArnaldo Carvalho de Melo 464a215684eSArnaldo Carvalho de Melo /* timestamp definitions */ 465a215684eSArnaldo Carvalho de Melo SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT = 1, /* DMA time, reported as per hw_ptr */ 466a215684eSArnaldo Carvalho de Melo SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK = 2, /* link time reported by sample or wallclock counter, reset on startup */ 467a215684eSArnaldo Carvalho de Melo SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ABSOLUTE = 3, /* link time reported by sample or wallclock counter, not reset on startup */ 468a215684eSArnaldo Carvalho de Melo SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ESTIMATED = 4, /* link time estimated indirectly */ 469a215684eSArnaldo Carvalho de Melo SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED = 5, /* link time synchronized with system time */ 470a215684eSArnaldo Carvalho de Melo SNDRV_PCM_AUDIO_TSTAMP_TYPE_LAST = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED 471a215684eSArnaldo Carvalho de Melo }; 472a215684eSArnaldo Carvalho de Melo 4738c65582fSArnaldo Carvalho de Melo #ifndef __KERNEL__ 4748c65582fSArnaldo Carvalho de Melo /* explicit padding avoids incompatibility between i386 and x86-64 */ 4758c65582fSArnaldo Carvalho de Melo typedef struct { unsigned char pad[sizeof(time_t) - sizeof(int)]; } __time_pad; 4768c65582fSArnaldo Carvalho de Melo 477a215684eSArnaldo Carvalho de Melo struct snd_pcm_status { 478a215684eSArnaldo Carvalho de Melo snd_pcm_state_t state; /* stream state */ 4798c65582fSArnaldo Carvalho de Melo __time_pad pad1; /* align to timespec */ 480a215684eSArnaldo Carvalho de Melo struct timespec trigger_tstamp; /* time when stream was started/stopped/paused */ 481a215684eSArnaldo Carvalho de Melo struct timespec tstamp; /* reference timestamp */ 482a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t appl_ptr; /* appl ptr */ 483a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t hw_ptr; /* hw ptr */ 484a215684eSArnaldo Carvalho de Melo snd_pcm_sframes_t delay; /* current delay in frames */ 485a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t avail; /* number of frames available */ 486a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t avail_max; /* max frames available on hw since last status */ 487a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t overrange; /* count of ADC (capture) overrange detections from last status */ 488a215684eSArnaldo Carvalho de Melo snd_pcm_state_t suspended_state; /* suspended stream state */ 489a215684eSArnaldo Carvalho de Melo __u32 audio_tstamp_data; /* needed for 64-bit alignment, used for configs/report to/from userspace */ 490a215684eSArnaldo Carvalho de Melo struct timespec audio_tstamp; /* sample counter, wall clock, PHC or on-demand sync'ed */ 491a215684eSArnaldo Carvalho de Melo struct timespec driver_tstamp; /* useful in case reference system tstamp is reported with delay */ 492a215684eSArnaldo Carvalho de Melo __u32 audio_tstamp_accuracy; /* in ns units, only valid if indicated in audio_tstamp_data */ 493a215684eSArnaldo Carvalho de Melo unsigned char reserved[52-2*sizeof(struct timespec)]; /* must be filled with zero */ 494a215684eSArnaldo Carvalho de Melo }; 4958c65582fSArnaldo Carvalho de Melo #endif 496a215684eSArnaldo Carvalho de Melo 4978c65582fSArnaldo Carvalho de Melo /* 4988c65582fSArnaldo Carvalho de Melo * For mmap operations, we need the 64-bit layout, both for compat mode, 4998c65582fSArnaldo Carvalho de Melo * and for y2038 compatibility. For 64-bit applications, the two definitions 5008c65582fSArnaldo Carvalho de Melo * are identical, so we keep the traditional version. 5018c65582fSArnaldo Carvalho de Melo */ 5028c65582fSArnaldo Carvalho de Melo #ifdef __SND_STRUCT_TIME64 5038c65582fSArnaldo Carvalho de Melo #define __snd_pcm_mmap_status64 snd_pcm_mmap_status 5048c65582fSArnaldo Carvalho de Melo #define __snd_pcm_mmap_control64 snd_pcm_mmap_control 5058c65582fSArnaldo Carvalho de Melo #define __snd_pcm_sync_ptr64 snd_pcm_sync_ptr 5068c65582fSArnaldo Carvalho de Melo #ifdef __KERNEL__ 5078c65582fSArnaldo Carvalho de Melo #define __snd_timespec64 __kernel_timespec 5088c65582fSArnaldo Carvalho de Melo #else 5098c65582fSArnaldo Carvalho de Melo #define __snd_timespec64 timespec 5108c65582fSArnaldo Carvalho de Melo #endif 5118c65582fSArnaldo Carvalho de Melo struct __snd_timespec { 5128c65582fSArnaldo Carvalho de Melo __s32 tv_sec; 5138c65582fSArnaldo Carvalho de Melo __s32 tv_nsec; 5148c65582fSArnaldo Carvalho de Melo }; 5158c65582fSArnaldo Carvalho de Melo #else 5168c65582fSArnaldo Carvalho de Melo #define __snd_pcm_mmap_status snd_pcm_mmap_status 5178c65582fSArnaldo Carvalho de Melo #define __snd_pcm_mmap_control snd_pcm_mmap_control 5188c65582fSArnaldo Carvalho de Melo #define __snd_pcm_sync_ptr snd_pcm_sync_ptr 5198c65582fSArnaldo Carvalho de Melo #define __snd_timespec timespec 5208c65582fSArnaldo Carvalho de Melo struct __snd_timespec64 { 5218c65582fSArnaldo Carvalho de Melo __s64 tv_sec; 5228c65582fSArnaldo Carvalho de Melo __s64 tv_nsec; 5238c65582fSArnaldo Carvalho de Melo }; 5248c65582fSArnaldo Carvalho de Melo 5258c65582fSArnaldo Carvalho de Melo #endif 5268c65582fSArnaldo Carvalho de Melo 5278c65582fSArnaldo Carvalho de Melo struct __snd_pcm_mmap_status { 528a215684eSArnaldo Carvalho de Melo snd_pcm_state_t state; /* RO: state - SNDRV_PCM_STATE_XXXX */ 529a215684eSArnaldo Carvalho de Melo int pad1; /* Needed for 64 bit alignment */ 530a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t hw_ptr; /* RO: hw ptr (0...boundary-1) */ 5318c65582fSArnaldo Carvalho de Melo struct __snd_timespec tstamp; /* Timestamp */ 532a215684eSArnaldo Carvalho de Melo snd_pcm_state_t suspended_state; /* RO: suspended stream state */ 5338c65582fSArnaldo Carvalho de Melo struct __snd_timespec audio_tstamp; /* from sample counter or wall clock */ 534a215684eSArnaldo Carvalho de Melo }; 535a215684eSArnaldo Carvalho de Melo 5368c65582fSArnaldo Carvalho de Melo struct __snd_pcm_mmap_control { 537a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t appl_ptr; /* RW: appl ptr (0...boundary-1) */ 538a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t avail_min; /* RW: min available frames for wakeup */ 539a215684eSArnaldo Carvalho de Melo }; 540a215684eSArnaldo Carvalho de Melo 541a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_SYNC_PTR_HWSYNC (1<<0) /* execute hwsync */ 542a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_SYNC_PTR_APPL (1<<1) /* get appl_ptr from driver (r/w op) */ 543a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_SYNC_PTR_AVAIL_MIN (1<<2) /* get avail_min from driver */ 544a215684eSArnaldo Carvalho de Melo 5458c65582fSArnaldo Carvalho de Melo struct __snd_pcm_sync_ptr { 546a215684eSArnaldo Carvalho de Melo unsigned int flags; 547a215684eSArnaldo Carvalho de Melo union { 5488c65582fSArnaldo Carvalho de Melo struct __snd_pcm_mmap_status status; 549a215684eSArnaldo Carvalho de Melo unsigned char reserved[64]; 550a215684eSArnaldo Carvalho de Melo } s; 551a215684eSArnaldo Carvalho de Melo union { 5528c65582fSArnaldo Carvalho de Melo struct __snd_pcm_mmap_control control; 5538c65582fSArnaldo Carvalho de Melo unsigned char reserved[64]; 5548c65582fSArnaldo Carvalho de Melo } c; 5558c65582fSArnaldo Carvalho de Melo }; 5568c65582fSArnaldo Carvalho de Melo 5578c65582fSArnaldo Carvalho de Melo #if defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN) 5588c65582fSArnaldo Carvalho de Melo typedef char __pad_before_uframe[sizeof(__u64) - sizeof(snd_pcm_uframes_t)]; 5598c65582fSArnaldo Carvalho de Melo typedef char __pad_after_uframe[0]; 5608c65582fSArnaldo Carvalho de Melo #endif 5618c65582fSArnaldo Carvalho de Melo 5628c65582fSArnaldo Carvalho de Melo #if defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN) 5638c65582fSArnaldo Carvalho de Melo typedef char __pad_before_uframe[0]; 5648c65582fSArnaldo Carvalho de Melo typedef char __pad_after_uframe[sizeof(__u64) - sizeof(snd_pcm_uframes_t)]; 5658c65582fSArnaldo Carvalho de Melo #endif 5668c65582fSArnaldo Carvalho de Melo 5678c65582fSArnaldo Carvalho de Melo struct __snd_pcm_mmap_status64 { 5688c65582fSArnaldo Carvalho de Melo snd_pcm_state_t state; /* RO: state - SNDRV_PCM_STATE_XXXX */ 5698c65582fSArnaldo Carvalho de Melo __u32 pad1; /* Needed for 64 bit alignment */ 5708c65582fSArnaldo Carvalho de Melo __pad_before_uframe __pad1; 5718c65582fSArnaldo Carvalho de Melo snd_pcm_uframes_t hw_ptr; /* RO: hw ptr (0...boundary-1) */ 5728c65582fSArnaldo Carvalho de Melo __pad_after_uframe __pad2; 5738c65582fSArnaldo Carvalho de Melo struct __snd_timespec64 tstamp; /* Timestamp */ 5748c65582fSArnaldo Carvalho de Melo snd_pcm_state_t suspended_state;/* RO: suspended stream state */ 5758c65582fSArnaldo Carvalho de Melo __u32 pad3; /* Needed for 64 bit alignment */ 5768c65582fSArnaldo Carvalho de Melo struct __snd_timespec64 audio_tstamp; /* sample counter or wall clock */ 5778c65582fSArnaldo Carvalho de Melo }; 5788c65582fSArnaldo Carvalho de Melo 5798c65582fSArnaldo Carvalho de Melo struct __snd_pcm_mmap_control64 { 5808c65582fSArnaldo Carvalho de Melo __pad_before_uframe __pad1; 5818c65582fSArnaldo Carvalho de Melo snd_pcm_uframes_t appl_ptr; /* RW: appl ptr (0...boundary-1) */ 5828d6a41c8SYanteng Si __pad_before_uframe __pad2; // This should be __pad_after_uframe, but binary 5838d6a41c8SYanteng Si // backwards compatibility constraints prevent a fix. 5848c65582fSArnaldo Carvalho de Melo 5858c65582fSArnaldo Carvalho de Melo __pad_before_uframe __pad3; 5868c65582fSArnaldo Carvalho de Melo snd_pcm_uframes_t avail_min; /* RW: min available frames for wakeup */ 5878c65582fSArnaldo Carvalho de Melo __pad_after_uframe __pad4; 5888c65582fSArnaldo Carvalho de Melo }; 5898c65582fSArnaldo Carvalho de Melo 5908c65582fSArnaldo Carvalho de Melo struct __snd_pcm_sync_ptr64 { 5918c65582fSArnaldo Carvalho de Melo __u32 flags; 5928c65582fSArnaldo Carvalho de Melo __u32 pad1; 5938c65582fSArnaldo Carvalho de Melo union { 5948c65582fSArnaldo Carvalho de Melo struct __snd_pcm_mmap_status64 status; 5958c65582fSArnaldo Carvalho de Melo unsigned char reserved[64]; 5968c65582fSArnaldo Carvalho de Melo } s; 5978c65582fSArnaldo Carvalho de Melo union { 5988c65582fSArnaldo Carvalho de Melo struct __snd_pcm_mmap_control64 control; 599a215684eSArnaldo Carvalho de Melo unsigned char reserved[64]; 600a215684eSArnaldo Carvalho de Melo } c; 601a215684eSArnaldo Carvalho de Melo }; 602a215684eSArnaldo Carvalho de Melo 603a215684eSArnaldo Carvalho de Melo struct snd_xferi { 604a215684eSArnaldo Carvalho de Melo snd_pcm_sframes_t result; 605a215684eSArnaldo Carvalho de Melo void __user *buf; 606a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t frames; 607a215684eSArnaldo Carvalho de Melo }; 608a215684eSArnaldo Carvalho de Melo 609a215684eSArnaldo Carvalho de Melo struct snd_xfern { 610a215684eSArnaldo Carvalho de Melo snd_pcm_sframes_t result; 611a215684eSArnaldo Carvalho de Melo void __user * __user *bufs; 612a215684eSArnaldo Carvalho de Melo snd_pcm_uframes_t frames; 613a215684eSArnaldo Carvalho de Melo }; 614a215684eSArnaldo Carvalho de Melo 615a215684eSArnaldo Carvalho de Melo enum { 616a215684eSArnaldo Carvalho de Melo SNDRV_PCM_TSTAMP_TYPE_GETTIMEOFDAY = 0, /* gettimeofday equivalent */ 617a215684eSArnaldo Carvalho de Melo SNDRV_PCM_TSTAMP_TYPE_MONOTONIC, /* posix_clock_monotonic equivalent */ 618a215684eSArnaldo Carvalho de Melo SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW, /* monotonic_raw (no NTP) */ 619a215684eSArnaldo Carvalho de Melo SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW, 620a215684eSArnaldo Carvalho de Melo }; 621a215684eSArnaldo Carvalho de Melo 622a215684eSArnaldo Carvalho de Melo /* channel positions */ 623a215684eSArnaldo Carvalho de Melo enum { 624a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_UNKNOWN = 0, 625a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_NA, /* N/A, silent */ 626a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_MONO, /* mono stream */ 627a215684eSArnaldo Carvalho de Melo /* this follows the alsa-lib mixer channel value + 3 */ 628a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_FL, /* front left */ 629a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_FR, /* front right */ 630a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_RL, /* rear left */ 631a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_RR, /* rear right */ 632a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_FC, /* front center */ 633a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_LFE, /* LFE */ 634a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_SL, /* side left */ 635a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_SR, /* side right */ 636a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_RC, /* rear center */ 637a215684eSArnaldo Carvalho de Melo /* new definitions */ 638a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_FLC, /* front left center */ 639a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_FRC, /* front right center */ 640a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_RLC, /* rear left center */ 641a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_RRC, /* rear right center */ 642a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_FLW, /* front left wide */ 643a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_FRW, /* front right wide */ 644a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_FLH, /* front left high */ 645a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_FCH, /* front center high */ 646a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_FRH, /* front right high */ 647a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_TC, /* top center */ 648a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_TFL, /* top front left */ 649a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_TFR, /* top front right */ 650a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_TFC, /* top front center */ 651a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_TRL, /* top rear left */ 652a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_TRR, /* top rear right */ 653a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_TRC, /* top rear center */ 654a215684eSArnaldo Carvalho de Melo /* new definitions for UAC2 */ 655a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_TFLC, /* top front left center */ 656a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_TFRC, /* top front right center */ 657a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_TSL, /* top side left */ 658a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_TSR, /* top side right */ 659a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_LLFE, /* left LFE */ 660a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_RLFE, /* right LFE */ 661a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_BC, /* bottom center */ 662a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_BLC, /* bottom left center */ 663a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_BRC, /* bottom right center */ 664a215684eSArnaldo Carvalho de Melo SNDRV_CHMAP_LAST = SNDRV_CHMAP_BRC, 665a215684eSArnaldo Carvalho de Melo }; 666a215684eSArnaldo Carvalho de Melo 667a215684eSArnaldo Carvalho de Melo #define SNDRV_CHMAP_POSITION_MASK 0xffff 668a215684eSArnaldo Carvalho de Melo #define SNDRV_CHMAP_PHASE_INVERSE (0x01 << 16) 669a215684eSArnaldo Carvalho de Melo #define SNDRV_CHMAP_DRIVER_SPEC (0x02 << 16) 670a215684eSArnaldo Carvalho de Melo 671a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_PVERSION _IOR('A', 0x00, int) 672a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_INFO _IOR('A', 0x01, struct snd_pcm_info) 673a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_TSTAMP _IOW('A', 0x02, int) 674a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_TTSTAMP _IOW('A', 0x03, int) 675a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_USER_PVERSION _IOW('A', 0x04, int) 676a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_HW_REFINE _IOWR('A', 0x10, struct snd_pcm_hw_params) 677a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_HW_PARAMS _IOWR('A', 0x11, struct snd_pcm_hw_params) 678a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_HW_FREE _IO('A', 0x12) 679a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_SW_PARAMS _IOWR('A', 0x13, struct snd_pcm_sw_params) 680a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_STATUS _IOR('A', 0x20, struct snd_pcm_status) 681a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_DELAY _IOR('A', 0x21, snd_pcm_sframes_t) 682a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_HWSYNC _IO('A', 0x22) 6838c65582fSArnaldo Carvalho de Melo #define __SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct __snd_pcm_sync_ptr) 6848c65582fSArnaldo Carvalho de Melo #define __SNDRV_PCM_IOCTL_SYNC_PTR64 _IOWR('A', 0x23, struct __snd_pcm_sync_ptr64) 685a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct snd_pcm_sync_ptr) 686a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_STATUS_EXT _IOWR('A', 0x24, struct snd_pcm_status) 687a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_CHANNEL_INFO _IOR('A', 0x32, struct snd_pcm_channel_info) 688a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_PREPARE _IO('A', 0x40) 689a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_RESET _IO('A', 0x41) 690a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_START _IO('A', 0x42) 691a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_DROP _IO('A', 0x43) 692a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_DRAIN _IO('A', 0x44) 693a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_PAUSE _IOW('A', 0x45, int) 694a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_REWIND _IOW('A', 0x46, snd_pcm_uframes_t) 695a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_RESUME _IO('A', 0x47) 696a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_XRUN _IO('A', 0x48) 697a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_FORWARD _IOW('A', 0x49, snd_pcm_uframes_t) 698a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_WRITEI_FRAMES _IOW('A', 0x50, struct snd_xferi) 699a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_READI_FRAMES _IOR('A', 0x51, struct snd_xferi) 700a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_WRITEN_FRAMES _IOW('A', 0x52, struct snd_xfern) 701a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_READN_FRAMES _IOR('A', 0x53, struct snd_xfern) 702a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_LINK _IOW('A', 0x60, int) 703a215684eSArnaldo Carvalho de Melo #define SNDRV_PCM_IOCTL_UNLINK _IO('A', 0x61) 704a215684eSArnaldo Carvalho de Melo 705a215684eSArnaldo Carvalho de Melo /***************************************************************************** 706a215684eSArnaldo Carvalho de Melo * * 707a215684eSArnaldo Carvalho de Melo * MIDI v1.0 interface * 708a215684eSArnaldo Carvalho de Melo * * 709a215684eSArnaldo Carvalho de Melo *****************************************************************************/ 710a215684eSArnaldo Carvalho de Melo 711a215684eSArnaldo Carvalho de Melo /* 712a215684eSArnaldo Carvalho de Melo * Raw MIDI section - /dev/snd/midi?? 713a215684eSArnaldo Carvalho de Melo */ 714a215684eSArnaldo Carvalho de Melo 715*28e898ffSArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 4) 716a215684eSArnaldo Carvalho de Melo 717a215684eSArnaldo Carvalho de Melo enum { 718a215684eSArnaldo Carvalho de Melo SNDRV_RAWMIDI_STREAM_OUTPUT = 0, 719a215684eSArnaldo Carvalho de Melo SNDRV_RAWMIDI_STREAM_INPUT, 720a215684eSArnaldo Carvalho de Melo SNDRV_RAWMIDI_STREAM_LAST = SNDRV_RAWMIDI_STREAM_INPUT, 721a215684eSArnaldo Carvalho de Melo }; 722a215684eSArnaldo Carvalho de Melo 723a215684eSArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_INFO_OUTPUT 0x00000001 724a215684eSArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_INFO_INPUT 0x00000002 725a215684eSArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_INFO_DUPLEX 0x00000004 726*28e898ffSArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_INFO_UMP 0x00000008 727a215684eSArnaldo Carvalho de Melo 728a215684eSArnaldo Carvalho de Melo struct snd_rawmidi_info { 729a215684eSArnaldo Carvalho de Melo unsigned int device; /* RO/WR (control): device number */ 730a215684eSArnaldo Carvalho de Melo unsigned int subdevice; /* RO/WR (control): subdevice number */ 731a215684eSArnaldo Carvalho de Melo int stream; /* WR: stream */ 732a215684eSArnaldo Carvalho de Melo int card; /* R: card number */ 733a215684eSArnaldo Carvalho de Melo unsigned int flags; /* SNDRV_RAWMIDI_INFO_XXXX */ 734a215684eSArnaldo Carvalho de Melo unsigned char id[64]; /* ID (user selectable) */ 735a215684eSArnaldo Carvalho de Melo unsigned char name[80]; /* name of device */ 736a215684eSArnaldo Carvalho de Melo unsigned char subname[32]; /* name of active or selected subdevice */ 737a215684eSArnaldo Carvalho de Melo unsigned int subdevices_count; 738a215684eSArnaldo Carvalho de Melo unsigned int subdevices_avail; 739a215684eSArnaldo Carvalho de Melo unsigned char reserved[64]; /* reserved for future use */ 740a215684eSArnaldo Carvalho de Melo }; 741a215684eSArnaldo Carvalho de Melo 742688ef3e3SArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_MODE_FRAMING_MASK (7<<0) 743688ef3e3SArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_MODE_FRAMING_SHIFT 0 744688ef3e3SArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_MODE_FRAMING_NONE (0<<0) 745688ef3e3SArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_MODE_FRAMING_TSTAMP (1<<0) 746688ef3e3SArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_MODE_CLOCK_MASK (7<<3) 747688ef3e3SArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_MODE_CLOCK_SHIFT 3 748688ef3e3SArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_MODE_CLOCK_NONE (0<<3) 749688ef3e3SArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_MODE_CLOCK_REALTIME (1<<3) 750688ef3e3SArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_MODE_CLOCK_MONOTONIC (2<<3) 751688ef3e3SArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_MODE_CLOCK_MONOTONIC_RAW (3<<3) 752688ef3e3SArnaldo Carvalho de Melo 753688ef3e3SArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_FRAMING_DATA_LENGTH 16 754688ef3e3SArnaldo Carvalho de Melo 755688ef3e3SArnaldo Carvalho de Melo struct snd_rawmidi_framing_tstamp { 756688ef3e3SArnaldo Carvalho de Melo /* For now, frame_type is always 0. Midi 2.0 is expected to add new 757688ef3e3SArnaldo Carvalho de Melo * types here. Applications are expected to skip unknown frame types. 758688ef3e3SArnaldo Carvalho de Melo */ 759688ef3e3SArnaldo Carvalho de Melo __u8 frame_type; 760688ef3e3SArnaldo Carvalho de Melo __u8 length; /* number of valid bytes in data field */ 761688ef3e3SArnaldo Carvalho de Melo __u8 reserved[2]; 762688ef3e3SArnaldo Carvalho de Melo __u32 tv_nsec; /* nanoseconds */ 763688ef3e3SArnaldo Carvalho de Melo __u64 tv_sec; /* seconds */ 764688ef3e3SArnaldo Carvalho de Melo __u8 data[SNDRV_RAWMIDI_FRAMING_DATA_LENGTH]; 765688ef3e3SArnaldo Carvalho de Melo } __packed; 766688ef3e3SArnaldo Carvalho de Melo 767a215684eSArnaldo Carvalho de Melo struct snd_rawmidi_params { 768a215684eSArnaldo Carvalho de Melo int stream; 769a215684eSArnaldo Carvalho de Melo size_t buffer_size; /* queue size in bytes */ 770a215684eSArnaldo Carvalho de Melo size_t avail_min; /* minimum avail bytes for wakeup */ 771a215684eSArnaldo Carvalho de Melo unsigned int no_active_sensing: 1; /* do not send active sensing byte in close() */ 772688ef3e3SArnaldo Carvalho de Melo unsigned int mode; /* For input data only, frame incoming data */ 773688ef3e3SArnaldo Carvalho de Melo unsigned char reserved[12]; /* reserved for future use */ 774a215684eSArnaldo Carvalho de Melo }; 775a215684eSArnaldo Carvalho de Melo 7768c65582fSArnaldo Carvalho de Melo #ifndef __KERNEL__ 777a215684eSArnaldo Carvalho de Melo struct snd_rawmidi_status { 778a215684eSArnaldo Carvalho de Melo int stream; 7798c65582fSArnaldo Carvalho de Melo __time_pad pad1; 780a215684eSArnaldo Carvalho de Melo struct timespec tstamp; /* Timestamp */ 781a215684eSArnaldo Carvalho de Melo size_t avail; /* available bytes */ 782a215684eSArnaldo Carvalho de Melo size_t xruns; /* count of overruns since last status (in bytes) */ 783a215684eSArnaldo Carvalho de Melo unsigned char reserved[16]; /* reserved for future use */ 784a215684eSArnaldo Carvalho de Melo }; 7858c65582fSArnaldo Carvalho de Melo #endif 786a215684eSArnaldo Carvalho de Melo 787*28e898ffSArnaldo Carvalho de Melo /* UMP EP info flags */ 788*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_EP_INFO_STATIC_BLOCKS 0x01 789*28e898ffSArnaldo Carvalho de Melo 790*28e898ffSArnaldo Carvalho de Melo /* UMP EP Protocol / JRTS capability bits */ 791*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_EP_INFO_PROTO_MIDI_MASK 0x0300 792*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_EP_INFO_PROTO_MIDI1 0x0100 /* MIDI 1.0 */ 793*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_EP_INFO_PROTO_MIDI2 0x0200 /* MIDI 2.0 */ 794*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_EP_INFO_PROTO_JRTS_MASK 0x0003 795*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_EP_INFO_PROTO_JRTS_TX 0x0001 /* JRTS Transmit */ 796*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_EP_INFO_PROTO_JRTS_RX 0x0002 /* JRTS Receive */ 797*28e898ffSArnaldo Carvalho de Melo 798*28e898ffSArnaldo Carvalho de Melo /* UMP Endpoint information */ 799*28e898ffSArnaldo Carvalho de Melo struct snd_ump_endpoint_info { 800*28e898ffSArnaldo Carvalho de Melo int card; /* card number */ 801*28e898ffSArnaldo Carvalho de Melo int device; /* device number */ 802*28e898ffSArnaldo Carvalho de Melo unsigned int flags; /* additional info */ 803*28e898ffSArnaldo Carvalho de Melo unsigned int protocol_caps; /* protocol capabilities */ 804*28e898ffSArnaldo Carvalho de Melo unsigned int protocol; /* current protocol */ 805*28e898ffSArnaldo Carvalho de Melo unsigned int num_blocks; /* # of function blocks */ 806*28e898ffSArnaldo Carvalho de Melo unsigned short version; /* UMP major/minor version */ 807*28e898ffSArnaldo Carvalho de Melo unsigned short family_id; /* MIDI device family ID */ 808*28e898ffSArnaldo Carvalho de Melo unsigned short model_id; /* MIDI family model ID */ 809*28e898ffSArnaldo Carvalho de Melo unsigned int manufacturer_id; /* MIDI manufacturer ID */ 810*28e898ffSArnaldo Carvalho de Melo unsigned char sw_revision[4]; /* software revision */ 811*28e898ffSArnaldo Carvalho de Melo unsigned short padding; 812*28e898ffSArnaldo Carvalho de Melo unsigned char name[128]; /* endpoint name string */ 813*28e898ffSArnaldo Carvalho de Melo unsigned char product_id[128]; /* unique product id string */ 814*28e898ffSArnaldo Carvalho de Melo unsigned char reserved[32]; 815*28e898ffSArnaldo Carvalho de Melo } __packed; 816*28e898ffSArnaldo Carvalho de Melo 817*28e898ffSArnaldo Carvalho de Melo /* UMP direction */ 818*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_DIR_INPUT 0x01 819*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_DIR_OUTPUT 0x02 820*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_DIR_BIDIRECTION 0x03 821*28e898ffSArnaldo Carvalho de Melo 822*28e898ffSArnaldo Carvalho de Melo /* UMP block info flags */ 823*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_BLOCK_IS_MIDI1 (1U << 0) /* MIDI 1.0 port w/o restrict */ 824*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_BLOCK_IS_LOWSPEED (1U << 1) /* 31.25Kbps B/W MIDI1 port */ 825*28e898ffSArnaldo Carvalho de Melo 826*28e898ffSArnaldo Carvalho de Melo /* UMP block user-interface hint */ 827*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_BLOCK_UI_HINT_UNKNOWN 0x00 828*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_BLOCK_UI_HINT_RECEIVER 0x01 829*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_BLOCK_UI_HINT_SENDER 0x02 830*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_BLOCK_UI_HINT_BOTH 0x03 831*28e898ffSArnaldo Carvalho de Melo 832*28e898ffSArnaldo Carvalho de Melo /* UMP groups and blocks */ 833*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_MAX_GROUPS 16 834*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_MAX_BLOCKS 32 835*28e898ffSArnaldo Carvalho de Melo 836*28e898ffSArnaldo Carvalho de Melo /* UMP Block information */ 837*28e898ffSArnaldo Carvalho de Melo struct snd_ump_block_info { 838*28e898ffSArnaldo Carvalho de Melo int card; /* card number */ 839*28e898ffSArnaldo Carvalho de Melo int device; /* device number */ 840*28e898ffSArnaldo Carvalho de Melo unsigned char block_id; /* block ID (R/W) */ 841*28e898ffSArnaldo Carvalho de Melo unsigned char direction; /* UMP direction */ 842*28e898ffSArnaldo Carvalho de Melo unsigned char active; /* Activeness */ 843*28e898ffSArnaldo Carvalho de Melo unsigned char first_group; /* first group ID */ 844*28e898ffSArnaldo Carvalho de Melo unsigned char num_groups; /* number of groups */ 845*28e898ffSArnaldo Carvalho de Melo unsigned char midi_ci_version; /* MIDI-CI support version */ 846*28e898ffSArnaldo Carvalho de Melo unsigned char sysex8_streams; /* max number of sysex8 streams */ 847*28e898ffSArnaldo Carvalho de Melo unsigned char ui_hint; /* user interface hint */ 848*28e898ffSArnaldo Carvalho de Melo unsigned int flags; /* various info flags */ 849*28e898ffSArnaldo Carvalho de Melo unsigned char name[128]; /* block name string */ 850*28e898ffSArnaldo Carvalho de Melo unsigned char reserved[32]; 851*28e898ffSArnaldo Carvalho de Melo } __packed; 852*28e898ffSArnaldo Carvalho de Melo 853a215684eSArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_IOCTL_PVERSION _IOR('W', 0x00, int) 854a215684eSArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_IOCTL_INFO _IOR('W', 0x01, struct snd_rawmidi_info) 8559fce636eSArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_IOCTL_USER_PVERSION _IOW('W', 0x02, int) 856a215684eSArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_IOCTL_PARAMS _IOWR('W', 0x10, struct snd_rawmidi_params) 857a215684eSArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_IOCTL_STATUS _IOWR('W', 0x20, struct snd_rawmidi_status) 858a215684eSArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_IOCTL_DROP _IOW('W', 0x30, int) 859a215684eSArnaldo Carvalho de Melo #define SNDRV_RAWMIDI_IOCTL_DRAIN _IOW('W', 0x31, int) 860*28e898ffSArnaldo Carvalho de Melo /* Additional ioctls for UMP rawmidi devices */ 861*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_IOCTL_ENDPOINT_INFO _IOR('W', 0x40, struct snd_ump_endpoint_info) 862*28e898ffSArnaldo Carvalho de Melo #define SNDRV_UMP_IOCTL_BLOCK_INFO _IOR('W', 0x41, struct snd_ump_block_info) 863a215684eSArnaldo Carvalho de Melo 864a215684eSArnaldo Carvalho de Melo /* 865a215684eSArnaldo Carvalho de Melo * Timer section - /dev/snd/timer 866a215684eSArnaldo Carvalho de Melo */ 867a215684eSArnaldo Carvalho de Melo 8688c65582fSArnaldo Carvalho de Melo #define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7) 869a215684eSArnaldo Carvalho de Melo 870a215684eSArnaldo Carvalho de Melo enum { 871a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_CLASS_NONE = -1, 872a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_CLASS_SLAVE = 0, 873a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_CLASS_GLOBAL, 874a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_CLASS_CARD, 875a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_CLASS_PCM, 876a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_CLASS_LAST = SNDRV_TIMER_CLASS_PCM, 877a215684eSArnaldo Carvalho de Melo }; 878a215684eSArnaldo Carvalho de Melo 879a215684eSArnaldo Carvalho de Melo /* slave timer classes */ 880a215684eSArnaldo Carvalho de Melo enum { 881a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_SCLASS_NONE = 0, 882a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_SCLASS_APPLICATION, 883a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_SCLASS_SEQUENCER, /* alias */ 884a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_SCLASS_OSS_SEQUENCER, /* alias */ 885a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_SCLASS_LAST = SNDRV_TIMER_SCLASS_OSS_SEQUENCER, 886a215684eSArnaldo Carvalho de Melo }; 887a215684eSArnaldo Carvalho de Melo 888a215684eSArnaldo Carvalho de Melo /* global timers (device member) */ 889a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_GLOBAL_SYSTEM 0 890a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_GLOBAL_RTC 1 /* unused */ 891a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_GLOBAL_HPET 2 892a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_GLOBAL_HRTIMER 3 893a215684eSArnaldo Carvalho de Melo 894a215684eSArnaldo Carvalho de Melo /* info flags */ 895a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_FLG_SLAVE (1<<0) /* cannot be controlled */ 896a215684eSArnaldo Carvalho de Melo 897a215684eSArnaldo Carvalho de Melo struct snd_timer_id { 898a215684eSArnaldo Carvalho de Melo int dev_class; 899a215684eSArnaldo Carvalho de Melo int dev_sclass; 900a215684eSArnaldo Carvalho de Melo int card; 901a215684eSArnaldo Carvalho de Melo int device; 902a215684eSArnaldo Carvalho de Melo int subdevice; 903a215684eSArnaldo Carvalho de Melo }; 904a215684eSArnaldo Carvalho de Melo 905a215684eSArnaldo Carvalho de Melo struct snd_timer_ginfo { 906a215684eSArnaldo Carvalho de Melo struct snd_timer_id tid; /* requested timer ID */ 907a215684eSArnaldo Carvalho de Melo unsigned int flags; /* timer flags - SNDRV_TIMER_FLG_* */ 908a215684eSArnaldo Carvalho de Melo int card; /* card number */ 909a215684eSArnaldo Carvalho de Melo unsigned char id[64]; /* timer identification */ 910a215684eSArnaldo Carvalho de Melo unsigned char name[80]; /* timer name */ 911a215684eSArnaldo Carvalho de Melo unsigned long reserved0; /* reserved for future use */ 912a215684eSArnaldo Carvalho de Melo unsigned long resolution; /* average period resolution in ns */ 913a215684eSArnaldo Carvalho de Melo unsigned long resolution_min; /* minimal period resolution in ns */ 914a215684eSArnaldo Carvalho de Melo unsigned long resolution_max; /* maximal period resolution in ns */ 915a215684eSArnaldo Carvalho de Melo unsigned int clients; /* active timer clients */ 916a215684eSArnaldo Carvalho de Melo unsigned char reserved[32]; 917a215684eSArnaldo Carvalho de Melo }; 918a215684eSArnaldo Carvalho de Melo 919a215684eSArnaldo Carvalho de Melo struct snd_timer_gparams { 920a215684eSArnaldo Carvalho de Melo struct snd_timer_id tid; /* requested timer ID */ 921a215684eSArnaldo Carvalho de Melo unsigned long period_num; /* requested precise period duration (in seconds) - numerator */ 922a215684eSArnaldo Carvalho de Melo unsigned long period_den; /* requested precise period duration (in seconds) - denominator */ 923a215684eSArnaldo Carvalho de Melo unsigned char reserved[32]; 924a215684eSArnaldo Carvalho de Melo }; 925a215684eSArnaldo Carvalho de Melo 926a215684eSArnaldo Carvalho de Melo struct snd_timer_gstatus { 927a215684eSArnaldo Carvalho de Melo struct snd_timer_id tid; /* requested timer ID */ 928a215684eSArnaldo Carvalho de Melo unsigned long resolution; /* current period resolution in ns */ 929a215684eSArnaldo Carvalho de Melo unsigned long resolution_num; /* precise current period resolution (in seconds) - numerator */ 930a215684eSArnaldo Carvalho de Melo unsigned long resolution_den; /* precise current period resolution (in seconds) - denominator */ 931a215684eSArnaldo Carvalho de Melo unsigned char reserved[32]; 932a215684eSArnaldo Carvalho de Melo }; 933a215684eSArnaldo Carvalho de Melo 934a215684eSArnaldo Carvalho de Melo struct snd_timer_select { 935a215684eSArnaldo Carvalho de Melo struct snd_timer_id id; /* bind to timer ID */ 936a215684eSArnaldo Carvalho de Melo unsigned char reserved[32]; /* reserved */ 937a215684eSArnaldo Carvalho de Melo }; 938a215684eSArnaldo Carvalho de Melo 939a215684eSArnaldo Carvalho de Melo struct snd_timer_info { 940a215684eSArnaldo Carvalho de Melo unsigned int flags; /* timer flags - SNDRV_TIMER_FLG_* */ 941a215684eSArnaldo Carvalho de Melo int card; /* card number */ 942a215684eSArnaldo Carvalho de Melo unsigned char id[64]; /* timer identificator */ 943a215684eSArnaldo Carvalho de Melo unsigned char name[80]; /* timer name */ 944a215684eSArnaldo Carvalho de Melo unsigned long reserved0; /* reserved for future use */ 945a215684eSArnaldo Carvalho de Melo unsigned long resolution; /* average period resolution in ns */ 946a215684eSArnaldo Carvalho de Melo unsigned char reserved[64]; /* reserved */ 947a215684eSArnaldo Carvalho de Melo }; 948a215684eSArnaldo Carvalho de Melo 949a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_PSFLG_AUTO (1<<0) /* auto start, otherwise one-shot */ 950a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_PSFLG_EXCLUSIVE (1<<1) /* exclusive use, precise start/stop/pause/continue */ 951a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_PSFLG_EARLY_EVENT (1<<2) /* write early event to the poll queue */ 952a215684eSArnaldo Carvalho de Melo 953a215684eSArnaldo Carvalho de Melo struct snd_timer_params { 95489eb1f3bSArnaldo Carvalho de Melo unsigned int flags; /* flags - SNDRV_TIMER_PSFLG_* */ 955a215684eSArnaldo Carvalho de Melo unsigned int ticks; /* requested resolution in ticks */ 956a215684eSArnaldo Carvalho de Melo unsigned int queue_size; /* total size of queue (32-1024) */ 957a215684eSArnaldo Carvalho de Melo unsigned int reserved0; /* reserved, was: failure locations */ 958a215684eSArnaldo Carvalho de Melo unsigned int filter; /* event filter (bitmask of SNDRV_TIMER_EVENT_*) */ 959a215684eSArnaldo Carvalho de Melo unsigned char reserved[60]; /* reserved */ 960a215684eSArnaldo Carvalho de Melo }; 961a215684eSArnaldo Carvalho de Melo 9628c65582fSArnaldo Carvalho de Melo #ifndef __KERNEL__ 963a215684eSArnaldo Carvalho de Melo struct snd_timer_status { 964a215684eSArnaldo Carvalho de Melo struct timespec tstamp; /* Timestamp - last update */ 965a215684eSArnaldo Carvalho de Melo unsigned int resolution; /* current period resolution in ns */ 966a215684eSArnaldo Carvalho de Melo unsigned int lost; /* counter of master tick lost */ 967a215684eSArnaldo Carvalho de Melo unsigned int overrun; /* count of read queue overruns */ 968a215684eSArnaldo Carvalho de Melo unsigned int queue; /* used queue size */ 969a215684eSArnaldo Carvalho de Melo unsigned char reserved[64]; /* reserved */ 970a215684eSArnaldo Carvalho de Melo }; 9718c65582fSArnaldo Carvalho de Melo #endif 972a215684eSArnaldo Carvalho de Melo 973a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_PVERSION _IOR('T', 0x00, int) 974a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_NEXT_DEVICE _IOWR('T', 0x01, struct snd_timer_id) 9758c65582fSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_TREAD_OLD _IOW('T', 0x02, int) 976a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_GINFO _IOWR('T', 0x03, struct snd_timer_ginfo) 977a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_GPARAMS _IOW('T', 0x04, struct snd_timer_gparams) 978a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_GSTATUS _IOWR('T', 0x05, struct snd_timer_gstatus) 979a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_SELECT _IOW('T', 0x10, struct snd_timer_select) 980a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_INFO _IOR('T', 0x11, struct snd_timer_info) 981a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_PARAMS _IOW('T', 0x12, struct snd_timer_params) 982a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_STATUS _IOR('T', 0x14, struct snd_timer_status) 983a215684eSArnaldo Carvalho de Melo /* The following four ioctls are changed since 1.0.9 due to confliction */ 984a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_START _IO('T', 0xa0) 985a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_STOP _IO('T', 0xa1) 986a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_CONTINUE _IO('T', 0xa2) 987a215684eSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_PAUSE _IO('T', 0xa3) 9888c65582fSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_TREAD64 _IOW('T', 0xa4, int) 9898c65582fSArnaldo Carvalho de Melo 9908c65582fSArnaldo Carvalho de Melo #if __BITS_PER_LONG == 64 9918c65582fSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_TREAD SNDRV_TIMER_IOCTL_TREAD_OLD 9928c65582fSArnaldo Carvalho de Melo #else 9938c65582fSArnaldo Carvalho de Melo #define SNDRV_TIMER_IOCTL_TREAD ((sizeof(__kernel_long_t) >= sizeof(time_t)) ? \ 9948c65582fSArnaldo Carvalho de Melo SNDRV_TIMER_IOCTL_TREAD_OLD : \ 9958c65582fSArnaldo Carvalho de Melo SNDRV_TIMER_IOCTL_TREAD64) 9968c65582fSArnaldo Carvalho de Melo #endif 997a215684eSArnaldo Carvalho de Melo 998a215684eSArnaldo Carvalho de Melo struct snd_timer_read { 999a215684eSArnaldo Carvalho de Melo unsigned int resolution; 1000a215684eSArnaldo Carvalho de Melo unsigned int ticks; 1001a215684eSArnaldo Carvalho de Melo }; 1002a215684eSArnaldo Carvalho de Melo 1003a215684eSArnaldo Carvalho de Melo enum { 1004a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_RESOLUTION = 0, /* val = resolution in ns */ 1005a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_TICK, /* val = ticks */ 1006a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_START, /* val = resolution in ns */ 1007a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_STOP, /* val = 0 */ 1008a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_CONTINUE, /* val = resolution in ns */ 1009a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_PAUSE, /* val = 0 */ 1010a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_EARLY, /* val = 0, early event */ 1011a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_SUSPEND, /* val = 0 */ 1012a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_RESUME, /* val = resolution in ns */ 1013a215684eSArnaldo Carvalho de Melo /* master timer events for slave timer instances */ 1014a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_MSTART = SNDRV_TIMER_EVENT_START + 10, 1015a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_MSTOP = SNDRV_TIMER_EVENT_STOP + 10, 1016a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_MCONTINUE = SNDRV_TIMER_EVENT_CONTINUE + 10, 1017a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_MPAUSE = SNDRV_TIMER_EVENT_PAUSE + 10, 1018a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_MSUSPEND = SNDRV_TIMER_EVENT_SUSPEND + 10, 1019a215684eSArnaldo Carvalho de Melo SNDRV_TIMER_EVENT_MRESUME = SNDRV_TIMER_EVENT_RESUME + 10, 1020a215684eSArnaldo Carvalho de Melo }; 1021a215684eSArnaldo Carvalho de Melo 10228c65582fSArnaldo Carvalho de Melo #ifndef __KERNEL__ 1023a215684eSArnaldo Carvalho de Melo struct snd_timer_tread { 1024a215684eSArnaldo Carvalho de Melo int event; 10258c65582fSArnaldo Carvalho de Melo __time_pad pad1; 1026a215684eSArnaldo Carvalho de Melo struct timespec tstamp; 1027a215684eSArnaldo Carvalho de Melo unsigned int val; 10288c65582fSArnaldo Carvalho de Melo __time_pad pad2; 1029a215684eSArnaldo Carvalho de Melo }; 10308c65582fSArnaldo Carvalho de Melo #endif 1031a215684eSArnaldo Carvalho de Melo 1032a215684eSArnaldo Carvalho de Melo /**************************************************************************** 1033a215684eSArnaldo Carvalho de Melo * * 1034a215684eSArnaldo Carvalho de Melo * Section for driver control interface - /dev/snd/control? * 1035a215684eSArnaldo Carvalho de Melo * * 1036a215684eSArnaldo Carvalho de Melo ****************************************************************************/ 1037a215684eSArnaldo Carvalho de Melo 1038*28e898ffSArnaldo Carvalho de Melo #define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 9) 1039a215684eSArnaldo Carvalho de Melo 1040a215684eSArnaldo Carvalho de Melo struct snd_ctl_card_info { 1041a215684eSArnaldo Carvalho de Melo int card; /* card number */ 1042a215684eSArnaldo Carvalho de Melo int pad; /* reserved for future (was type) */ 1043a215684eSArnaldo Carvalho de Melo unsigned char id[16]; /* ID of card (user selectable) */ 1044a215684eSArnaldo Carvalho de Melo unsigned char driver[16]; /* Driver name */ 1045a215684eSArnaldo Carvalho de Melo unsigned char name[32]; /* Short name of soundcard */ 1046a215684eSArnaldo Carvalho de Melo unsigned char longname[80]; /* name + info text about soundcard */ 1047a215684eSArnaldo Carvalho de Melo unsigned char reserved_[16]; /* reserved for future (was ID of mixer) */ 1048a215684eSArnaldo Carvalho de Melo unsigned char mixername[80]; /* visual mixer identification */ 1049a215684eSArnaldo Carvalho de Melo unsigned char components[128]; /* card components / fine identification, delimited with one space (AC97 etc..) */ 1050a215684eSArnaldo Carvalho de Melo }; 1051a215684eSArnaldo Carvalho de Melo 1052a215684eSArnaldo Carvalho de Melo typedef int __bitwise snd_ctl_elem_type_t; 1053a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_TYPE_NONE ((__force snd_ctl_elem_type_t) 0) /* invalid */ 1054a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_TYPE_BOOLEAN ((__force snd_ctl_elem_type_t) 1) /* boolean type */ 1055a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_TYPE_INTEGER ((__force snd_ctl_elem_type_t) 2) /* integer type */ 1056a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_TYPE_ENUMERATED ((__force snd_ctl_elem_type_t) 3) /* enumerated type */ 1057a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_TYPE_BYTES ((__force snd_ctl_elem_type_t) 4) /* byte array */ 1058a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_TYPE_IEC958 ((__force snd_ctl_elem_type_t) 5) /* IEC958 (S/PDIF) setup */ 1059a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_TYPE_INTEGER64 ((__force snd_ctl_elem_type_t) 6) /* 64-bit integer type */ 1060a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_TYPE_LAST SNDRV_CTL_ELEM_TYPE_INTEGER64 1061a215684eSArnaldo Carvalho de Melo 1062a215684eSArnaldo Carvalho de Melo typedef int __bitwise snd_ctl_elem_iface_t; 1063a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_IFACE_CARD ((__force snd_ctl_elem_iface_t) 0) /* global control */ 1064a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_IFACE_HWDEP ((__force snd_ctl_elem_iface_t) 1) /* hardware dependent device */ 1065a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_IFACE_MIXER ((__force snd_ctl_elem_iface_t) 2) /* virtual mixer device */ 1066a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_IFACE_PCM ((__force snd_ctl_elem_iface_t) 3) /* PCM device */ 1067a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_IFACE_RAWMIDI ((__force snd_ctl_elem_iface_t) 4) /* RawMidi device */ 1068a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_IFACE_TIMER ((__force snd_ctl_elem_iface_t) 5) /* timer device */ 1069a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_IFACE_SEQUENCER ((__force snd_ctl_elem_iface_t) 6) /* sequencer client */ 1070a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_IFACE_LAST SNDRV_CTL_ELEM_IFACE_SEQUENCER 1071a215684eSArnaldo Carvalho de Melo 1072a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_ACCESS_READ (1<<0) 1073a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_ACCESS_WRITE (1<<1) 1074a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_ACCESS_READWRITE (SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE) 1075a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_ACCESS_VOLATILE (1<<2) /* control value may be changed without a notification */ 107637057e74SArnaldo Carvalho de Melo /* (1 << 3) is unused. */ 1077a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_ACCESS_TLV_READ (1<<4) /* TLV read is possible */ 1078a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE (1<<5) /* TLV write is possible */ 1079a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE (SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE) 1080a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND (1<<6) /* TLV command is possible */ 1081a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_ACCESS_INACTIVE (1<<8) /* control does actually nothing, but may be updated */ 1082a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_ACCESS_LOCK (1<<9) /* write lock */ 1083a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_ACCESS_OWNER (1<<10) /* write lock owner */ 1084a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK (1<<28) /* kernel use a TLV callback */ 1085a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_ACCESS_USER (1<<29) /* user space element */ 1086a215684eSArnaldo Carvalho de Melo /* bits 30 and 31 are obsoleted (for indirect access) */ 1087a215684eSArnaldo Carvalho de Melo 1088a215684eSArnaldo Carvalho de Melo /* for further details see the ACPI and PCI power management specification */ 1089a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_POWER_D0 0x0000 /* full On */ 1090a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_POWER_D1 0x0100 /* partial On */ 1091a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_POWER_D2 0x0200 /* partial On */ 1092a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_POWER_D3 0x0300 /* Off */ 1093a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_POWER_D3hot (SNDRV_CTL_POWER_D3|0x0000) /* Off, with power */ 1094a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_POWER_D3cold (SNDRV_CTL_POWER_D3|0x0001) /* Off, without power */ 1095a215684eSArnaldo Carvalho de Melo 1096a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_ELEM_ID_NAME_MAXLEN 44 1097a215684eSArnaldo Carvalho de Melo 1098a215684eSArnaldo Carvalho de Melo struct snd_ctl_elem_id { 1099a215684eSArnaldo Carvalho de Melo unsigned int numid; /* numeric identifier, zero = invalid */ 1100a215684eSArnaldo Carvalho de Melo snd_ctl_elem_iface_t iface; /* interface identifier */ 1101a215684eSArnaldo Carvalho de Melo unsigned int device; /* device/client number */ 1102a215684eSArnaldo Carvalho de Melo unsigned int subdevice; /* subdevice (substream) number */ 1103a215684eSArnaldo Carvalho de Melo unsigned char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* ASCII name of item */ 1104a215684eSArnaldo Carvalho de Melo unsigned int index; /* index of item */ 1105a215684eSArnaldo Carvalho de Melo }; 1106a215684eSArnaldo Carvalho de Melo 1107a215684eSArnaldo Carvalho de Melo struct snd_ctl_elem_list { 1108a215684eSArnaldo Carvalho de Melo unsigned int offset; /* W: first element ID to get */ 1109a215684eSArnaldo Carvalho de Melo unsigned int space; /* W: count of element IDs to get */ 1110a215684eSArnaldo Carvalho de Melo unsigned int used; /* R: count of element IDs set */ 1111a215684eSArnaldo Carvalho de Melo unsigned int count; /* R: count of all elements */ 1112a215684eSArnaldo Carvalho de Melo struct snd_ctl_elem_id __user *pids; /* R: IDs */ 1113a215684eSArnaldo Carvalho de Melo unsigned char reserved[50]; 1114a215684eSArnaldo Carvalho de Melo }; 1115a215684eSArnaldo Carvalho de Melo 1116a215684eSArnaldo Carvalho de Melo struct snd_ctl_elem_info { 1117a215684eSArnaldo Carvalho de Melo struct snd_ctl_elem_id id; /* W: element ID */ 1118a215684eSArnaldo Carvalho de Melo snd_ctl_elem_type_t type; /* R: value type - SNDRV_CTL_ELEM_TYPE_* */ 1119a215684eSArnaldo Carvalho de Melo unsigned int access; /* R: value access (bitmask) - SNDRV_CTL_ELEM_ACCESS_* */ 1120a215684eSArnaldo Carvalho de Melo unsigned int count; /* count of values */ 1121a215684eSArnaldo Carvalho de Melo __kernel_pid_t owner; /* owner's PID of this control */ 1122a215684eSArnaldo Carvalho de Melo union { 1123a215684eSArnaldo Carvalho de Melo struct { 1124a215684eSArnaldo Carvalho de Melo long min; /* R: minimum value */ 1125a215684eSArnaldo Carvalho de Melo long max; /* R: maximum value */ 1126a215684eSArnaldo Carvalho de Melo long step; /* R: step (0 variable) */ 1127a215684eSArnaldo Carvalho de Melo } integer; 1128a215684eSArnaldo Carvalho de Melo struct { 1129a215684eSArnaldo Carvalho de Melo long long min; /* R: minimum value */ 1130a215684eSArnaldo Carvalho de Melo long long max; /* R: maximum value */ 1131a215684eSArnaldo Carvalho de Melo long long step; /* R: step (0 variable) */ 1132a215684eSArnaldo Carvalho de Melo } integer64; 1133a215684eSArnaldo Carvalho de Melo struct { 1134a215684eSArnaldo Carvalho de Melo unsigned int items; /* R: number of items */ 1135a215684eSArnaldo Carvalho de Melo unsigned int item; /* W: item number */ 1136a215684eSArnaldo Carvalho de Melo char name[64]; /* R: value name */ 1137a215684eSArnaldo Carvalho de Melo __u64 names_ptr; /* W: names list (ELEM_ADD only) */ 1138a215684eSArnaldo Carvalho de Melo unsigned int names_length; 1139a215684eSArnaldo Carvalho de Melo } enumerated; 1140a215684eSArnaldo Carvalho de Melo unsigned char reserved[128]; 1141a215684eSArnaldo Carvalho de Melo } value; 11428c65582fSArnaldo Carvalho de Melo unsigned char reserved[64]; 1143a215684eSArnaldo Carvalho de Melo }; 1144a215684eSArnaldo Carvalho de Melo 1145a215684eSArnaldo Carvalho de Melo struct snd_ctl_elem_value { 1146a215684eSArnaldo Carvalho de Melo struct snd_ctl_elem_id id; /* W: element ID */ 1147a215684eSArnaldo Carvalho de Melo unsigned int indirect: 1; /* W: indirect access - obsoleted */ 1148a215684eSArnaldo Carvalho de Melo union { 1149a215684eSArnaldo Carvalho de Melo union { 1150a215684eSArnaldo Carvalho de Melo long value[128]; 1151a215684eSArnaldo Carvalho de Melo long *value_ptr; /* obsoleted */ 1152a215684eSArnaldo Carvalho de Melo } integer; 1153a215684eSArnaldo Carvalho de Melo union { 1154a215684eSArnaldo Carvalho de Melo long long value[64]; 1155a215684eSArnaldo Carvalho de Melo long long *value_ptr; /* obsoleted */ 1156a215684eSArnaldo Carvalho de Melo } integer64; 1157a215684eSArnaldo Carvalho de Melo union { 1158a215684eSArnaldo Carvalho de Melo unsigned int item[128]; 1159a215684eSArnaldo Carvalho de Melo unsigned int *item_ptr; /* obsoleted */ 1160a215684eSArnaldo Carvalho de Melo } enumerated; 1161a215684eSArnaldo Carvalho de Melo union { 1162a215684eSArnaldo Carvalho de Melo unsigned char data[512]; 1163a215684eSArnaldo Carvalho de Melo unsigned char *data_ptr; /* obsoleted */ 1164a215684eSArnaldo Carvalho de Melo } bytes; 1165a215684eSArnaldo Carvalho de Melo struct snd_aes_iec958 iec958; 1166a215684eSArnaldo Carvalho de Melo } value; /* RO */ 11678c65582fSArnaldo Carvalho de Melo unsigned char reserved[128]; 1168a215684eSArnaldo Carvalho de Melo }; 1169a215684eSArnaldo Carvalho de Melo 1170a215684eSArnaldo Carvalho de Melo struct snd_ctl_tlv { 1171a215684eSArnaldo Carvalho de Melo unsigned int numid; /* control element numeric identification */ 1172a215684eSArnaldo Carvalho de Melo unsigned int length; /* in bytes aligned to 4 */ 117394dfc73eSGustavo A. R. Silva unsigned int tlv[]; /* first TLV */ 1174a215684eSArnaldo Carvalho de Melo }; 1175a215684eSArnaldo Carvalho de Melo 1176a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_PVERSION _IOR('U', 0x00, int) 1177a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_CARD_INFO _IOR('U', 0x01, struct snd_ctl_card_info) 1178a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_ELEM_LIST _IOWR('U', 0x10, struct snd_ctl_elem_list) 1179a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_ELEM_INFO _IOWR('U', 0x11, struct snd_ctl_elem_info) 1180a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_ELEM_READ _IOWR('U', 0x12, struct snd_ctl_elem_value) 1181a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_ELEM_WRITE _IOWR('U', 0x13, struct snd_ctl_elem_value) 1182a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_ELEM_LOCK _IOW('U', 0x14, struct snd_ctl_elem_id) 1183a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_ELEM_UNLOCK _IOW('U', 0x15, struct snd_ctl_elem_id) 1184a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS _IOWR('U', 0x16, int) 1185a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_ELEM_ADD _IOWR('U', 0x17, struct snd_ctl_elem_info) 1186a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_ELEM_REPLACE _IOWR('U', 0x18, struct snd_ctl_elem_info) 1187a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_ELEM_REMOVE _IOWR('U', 0x19, struct snd_ctl_elem_id) 1188a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_TLV_READ _IOWR('U', 0x1a, struct snd_ctl_tlv) 1189a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_TLV_WRITE _IOWR('U', 0x1b, struct snd_ctl_tlv) 1190a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_TLV_COMMAND _IOWR('U', 0x1c, struct snd_ctl_tlv) 1191a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE _IOWR('U', 0x20, int) 1192a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_HWDEP_INFO _IOR('U', 0x21, struct snd_hwdep_info) 1193a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE _IOR('U', 0x30, int) 1194a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_PCM_INFO _IOWR('U', 0x31, struct snd_pcm_info) 1195a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE _IOW('U', 0x32, int) 1196a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE _IOWR('U', 0x40, int) 1197a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_RAWMIDI_INFO _IOWR('U', 0x41, struct snd_rawmidi_info) 1198a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE _IOW('U', 0x42, int) 1199*28e898ffSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_UMP_NEXT_DEVICE _IOWR('U', 0x43, int) 1200*28e898ffSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_UMP_ENDPOINT_INFO _IOWR('U', 0x44, struct snd_ump_endpoint_info) 1201*28e898ffSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_UMP_BLOCK_INFO _IOWR('U', 0x45, struct snd_ump_block_info) 1202a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_POWER _IOWR('U', 0xd0, int) 1203a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_IOCTL_POWER_STATE _IOR('U', 0xd1, int) 1204a215684eSArnaldo Carvalho de Melo 1205a215684eSArnaldo Carvalho de Melo /* 1206a215684eSArnaldo Carvalho de Melo * Read interface. 1207a215684eSArnaldo Carvalho de Melo */ 1208a215684eSArnaldo Carvalho de Melo 1209a215684eSArnaldo Carvalho de Melo enum sndrv_ctl_event_type { 1210a215684eSArnaldo Carvalho de Melo SNDRV_CTL_EVENT_ELEM = 0, 1211a215684eSArnaldo Carvalho de Melo SNDRV_CTL_EVENT_LAST = SNDRV_CTL_EVENT_ELEM, 1212a215684eSArnaldo Carvalho de Melo }; 1213a215684eSArnaldo Carvalho de Melo 1214a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_EVENT_MASK_VALUE (1<<0) /* element value was changed */ 1215a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_EVENT_MASK_INFO (1<<1) /* element info was changed */ 1216a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_EVENT_MASK_ADD (1<<2) /* element was added */ 1217a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_EVENT_MASK_TLV (1<<3) /* element TLV tree was changed */ 1218a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_EVENT_MASK_REMOVE (~0U) /* element was removed */ 1219a215684eSArnaldo Carvalho de Melo 1220a215684eSArnaldo Carvalho de Melo struct snd_ctl_event { 1221a215684eSArnaldo Carvalho de Melo int type; /* event type - SNDRV_CTL_EVENT_* */ 1222a215684eSArnaldo Carvalho de Melo union { 1223a215684eSArnaldo Carvalho de Melo struct { 1224a215684eSArnaldo Carvalho de Melo unsigned int mask; 1225a215684eSArnaldo Carvalho de Melo struct snd_ctl_elem_id id; 1226a215684eSArnaldo Carvalho de Melo } elem; 1227a215684eSArnaldo Carvalho de Melo unsigned char data8[60]; 1228a215684eSArnaldo Carvalho de Melo } data; 1229a215684eSArnaldo Carvalho de Melo }; 1230a215684eSArnaldo Carvalho de Melo 1231a215684eSArnaldo Carvalho de Melo /* 1232a215684eSArnaldo Carvalho de Melo * Control names 1233a215684eSArnaldo Carvalho de Melo */ 1234a215684eSArnaldo Carvalho de Melo 1235a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_NAME_NONE "" 1236a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_NAME_PLAYBACK "Playback " 1237a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_NAME_CAPTURE "Capture " 1238a215684eSArnaldo Carvalho de Melo 1239a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_NAME_IEC958_NONE "" 1240a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_NAME_IEC958_SWITCH "Switch" 1241a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_NAME_IEC958_VOLUME "Volume" 1242a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_NAME_IEC958_DEFAULT "Default" 1243a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_NAME_IEC958_MASK "Mask" 1244a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_NAME_IEC958_CON_MASK "Con Mask" 1245a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_NAME_IEC958_PRO_MASK "Pro Mask" 1246a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_NAME_IEC958_PCM_STREAM "PCM Stream" 1247a215684eSArnaldo Carvalho de Melo #define SNDRV_CTL_NAME_IEC958(expl,direction,what) "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what 1248a215684eSArnaldo Carvalho de Melo 1249a215684eSArnaldo Carvalho de Melo #endif /* _UAPI__SOUND_ASOUND_H */ 1250