14d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 24d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Advanced Linux Sound Architecture - ALSA - Driver 34d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Copyright (c) 1994-2003 by Jaroslav Kysela <perex@perex.cz>, 44d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Abramo Bagnara <abramo@alsa-project.org> 54d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 64d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 74d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * This program is free software; you can redistribute it and/or modify 84d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * it under the terms of the GNU General Public License as published by 94d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * the Free Software Foundation; either version 2 of the License, or 104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * (at your option) any later version. 114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * This program is distributed in the hope that it will be useful, 134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * but WITHOUT ANY WARRANTY; without even the implied warranty of 144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * GNU General Public License for more details. 164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * You should have received a copy of the GNU General Public License 184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * along with this program; if not, write to the Free Software 194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * 214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#ifndef _UAPI__SOUND_ASOUND_H 244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define _UAPI__SOUND_ASOUND_H 254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#include <linux/types.h> 274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * protocol version 314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PROTOCOL_VERSION(major, minor, subminor) (((major)<<16)|((minor)<<8)|(subminor)) 344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PROTOCOL_MAJOR(version) (((version)>>16)&0xffff) 354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PROTOCOL_MINOR(version) (((version)>>8)&0xff) 364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PROTOCOL_MICRO(version) ((version)&0xff) 374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PROTOCOL_INCOMPATIBLE(kversion, uversion) \ 384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin (SNDRV_PROTOCOL_MAJOR(kversion) != SNDRV_PROTOCOL_MAJOR(uversion) || \ 394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin (SNDRV_PROTOCOL_MAJOR(kversion) == SNDRV_PROTOCOL_MAJOR(uversion) && \ 404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PROTOCOL_MINOR(kversion) != SNDRV_PROTOCOL_MINOR(uversion))) 414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/**************************************************************************** 434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * * 444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Digital audio interface * 454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * * 464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin ****************************************************************************/ 474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_aes_iec958 { 494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char status[24]; /* AES/IEC958 channel status bits */ 504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char subcode[147]; /* AES/IEC958 subcode bits */ 514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char pad; /* nothing */ 524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char dig_subframe[4]; /* AES/IEC958 subframe bits */ 534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/**************************************************************************** 564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * * 574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * CEA-861 Audio InfoFrame. Used in HDMI and DisplayPort * 584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * * 594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin ****************************************************************************/ 604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_cea_861_aud_if { 624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char db1_ct_cc; /* coding type and channel count */ 634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char db2_sf_ss; /* sample frequency and size */ 644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char db3; /* not used, all zeros */ 654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char db4_ca; /* channel allocation code */ 664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char db5_dminh_lsv; /* downmix inhibit & level-shit values */ 674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/**************************************************************************** 704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * * 714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Section for driver hardware dependent interface - /dev/snd/hw? * 724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * * 734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin ****************************************************************************/ 744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_HWDEP_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 1) 764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum { 784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_OPL2 = 0, 794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_OPL3, 804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_OPL4, 814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_SB16CSP, /* Creative Signal Processor */ 824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_EMU10K1, /* FX8010 processor in EMU10K1 chip */ 834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_YSS225, /* Yamaha FX processor */ 844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_ICS2115, /* Wavetable synth */ 854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_SSCAPE, /* Ensoniq SoundScape ISA card (MC68EC000) */ 864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_VX, /* Digigram VX cards */ 874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_MIXART, /* Digigram miXart cards */ 884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_USX2Y, /* Tascam US122, US224 & US428 usb */ 894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_EMUX_WAVETABLE, /* EmuX wavetable */ 904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_BLUETOOTH, /* Bluetooth audio */ 914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_USX2Y_PCM, /* Tascam US122, US224 & US428 rawusb pcm */ 924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_PCXHR, /* Digigram PCXHR */ 934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_SB_RC, /* SB Extigy/Audigy2NX remote control */ 944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_HDA, /* HD-audio */ 954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_USB_STREAM, /* direct access to usb stream */ 964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_AUDIO_BE, /* Backend Audio Control */ 974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_AUDIO_CODEC, /* codec Audio Control */ 984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin /* Don't forget to change the following: */ 1004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_AUDIO_CODEC 1014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 1024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_hwdep_info { 1044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int device; /* WR: device number */ 1054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int card; /* R: card number */ 1064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char id[64]; /* ID (user selectable) */ 1074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char name[80]; /* hwdep name */ 1084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int iface; /* hwdep interface */ 1094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[64]; /* reserved for future */ 1104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 1114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* generic DSP loader */ 1134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_hwdep_dsp_status { 1144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int version; /* R: driver-specific version */ 1154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char id[32]; /* R: driver-specific ID string */ 1164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int num_dsps; /* R: number of DSP images to transfer */ 1174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int dsp_loaded; /* R: bit flags indicating the loaded DSPs */ 1184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int chip_ready; /* R: 1 = initialization finished */ 1194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[16]; /* reserved for future use */ 1204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 1214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_hwdep_dsp_image { 1234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int index; /* W: DSP index */ 1244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char name[64]; /* W: ID (e.g. file name) */ 1254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char __user *image; /* W: binary image */ 1264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t length; /* W: size of image in bytes */ 1274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long driver_data; /* W: driver-specific data */ 1284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 1294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_HWDEP_IOCTL_PVERSION _IOR ('H', 0x00, int) 1314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_HWDEP_IOCTL_INFO _IOR ('H', 0x01, struct snd_hwdep_info) 1324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_HWDEP_IOCTL_DSP_STATUS _IOR('H', 0x02, struct snd_hwdep_dsp_status) 1334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_HWDEP_IOCTL_DSP_LOAD _IOW('H', 0x03, struct snd_hwdep_dsp_image) 1344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/***************************************************************************** 1364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * * 1374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Digital Audio (PCM) interface - /dev/snd/pcm?? * 1384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * * 1394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin *****************************************************************************/ 1404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 11) 1424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjintypedef unsigned long snd_pcm_uframes_t; 1444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjintypedef signed long snd_pcm_sframes_t; 1454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum { 1474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_CLASS_GENERIC = 0, /* standard mono or stereo device */ 1484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_CLASS_MULTI, /* multichannel device */ 1494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_CLASS_MODEM, /* software modem class */ 1504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_CLASS_DIGITIZER, /* digitizer class */ 1514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin /* Don't forget to change the following: */ 1524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_CLASS_LAST = SNDRV_PCM_CLASS_DIGITIZER, 1534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 1544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum { 1564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_SUBCLASS_GENERIC_MIX = 0, /* mono or stereo subdevices are mixed together */ 1574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_SUBCLASS_MULTI_MIX, /* multichannel subdevices are mixed together */ 1584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin /* Don't forget to change the following: */ 1594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_SUBCLASS_LAST = SNDRV_PCM_SUBCLASS_MULTI_MIX, 1604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 1614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum { 1634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_STREAM_PLAYBACK = 0, 1644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_STREAM_CAPTURE, 1654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_STREAM_LAST = SNDRV_PCM_STREAM_CAPTURE, 1664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 1674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjintypedef int __bitwise snd_pcm_access_t; 1694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_ACCESS_MMAP_INTERLEAVED ((__force snd_pcm_access_t) 0) /* interleaved mmap */ 1704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED ((__force snd_pcm_access_t) 1) /* noninterleaved mmap */ 1714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_ACCESS_MMAP_COMPLEX ((__force snd_pcm_access_t) 2) /* complex mmap */ 1724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_ACCESS_RW_INTERLEAVED ((__force snd_pcm_access_t) 3) /* readi/writei */ 1734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_ACCESS_RW_NONINTERLEAVED ((__force snd_pcm_access_t) 4) /* readn/writen */ 1744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_ACCESS_LAST SNDRV_PCM_ACCESS_RW_NONINTERLEAVED 1754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 1764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjintypedef int __bitwise snd_pcm_format_t; 1774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S8 ((__force snd_pcm_format_t) 0) 1784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U8 ((__force snd_pcm_format_t) 1) 1794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S16_LE ((__force snd_pcm_format_t) 2) 1804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S16_BE ((__force snd_pcm_format_t) 3) 1814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U16_LE ((__force snd_pcm_format_t) 4) 1824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U16_BE ((__force snd_pcm_format_t) 5) 1834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S24_LE ((__force snd_pcm_format_t) 6) /* low three bytes */ 1844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S24_BE ((__force snd_pcm_format_t) 7) /* low three bytes */ 1854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U24_LE ((__force snd_pcm_format_t) 8) /* low three bytes */ 1864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U24_BE ((__force snd_pcm_format_t) 9) /* low three bytes */ 1874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S32_LE ((__force snd_pcm_format_t) 10) 1884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S32_BE ((__force snd_pcm_format_t) 11) 1894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U32_LE ((__force snd_pcm_format_t) 12) 1904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U32_BE ((__force snd_pcm_format_t) 13) 1914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#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 */ 1924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#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 */ 1934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#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 */ 1944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#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 */ 1954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE ((__force snd_pcm_format_t) 18) /* IEC-958 subframe, Little Endian */ 1964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE ((__force snd_pcm_format_t) 19) /* IEC-958 subframe, Big Endian */ 1974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_MU_LAW ((__force snd_pcm_format_t) 20) 1984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_A_LAW ((__force snd_pcm_format_t) 21) 1994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_IMA_ADPCM ((__force snd_pcm_format_t) 22) 2004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_MPEG ((__force snd_pcm_format_t) 23) 2014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_GSM ((__force snd_pcm_format_t) 24) 2024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_SPECIAL ((__force snd_pcm_format_t) 31) 2034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S24_3LE ((__force snd_pcm_format_t) 32) /* in three bytes */ 2044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S24_3BE ((__force snd_pcm_format_t) 33) /* in three bytes */ 2054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U24_3LE ((__force snd_pcm_format_t) 34) /* in three bytes */ 2064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U24_3BE ((__force snd_pcm_format_t) 35) /* in three bytes */ 2074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S20_3LE ((__force snd_pcm_format_t) 36) /* in three bytes */ 2084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S20_3BE ((__force snd_pcm_format_t) 37) /* in three bytes */ 2094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U20_3LE ((__force snd_pcm_format_t) 38) /* in three bytes */ 2104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U20_3BE ((__force snd_pcm_format_t) 39) /* in three bytes */ 2114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S18_3LE ((__force snd_pcm_format_t) 40) /* in three bytes */ 2124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S18_3BE ((__force snd_pcm_format_t) 41) /* in three bytes */ 2134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U18_3LE ((__force snd_pcm_format_t) 42) /* in three bytes */ 2144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U18_3BE ((__force snd_pcm_format_t) 43) /* in three bytes */ 2154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_G723_24 ((__force snd_pcm_format_t) 44) /* 8 samples in 3 bytes */ 2164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_G723_24_1B ((__force snd_pcm_format_t) 45) /* 1 sample in 1 byte */ 2174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_G723_40 ((__force snd_pcm_format_t) 46) /* 8 Samples in 5 bytes */ 2184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_G723_40_1B ((__force snd_pcm_format_t) 47) /* 1 sample in 1 byte */ 2194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */ 2204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */ 2214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U16_LE 2224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#ifdef SNDRV_LITTLE_ENDIAN 2244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE 2254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_LE 2264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S24 SNDRV_PCM_FORMAT_S24_LE 2274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U24 SNDRV_PCM_FORMAT_U24_LE 2284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S32 SNDRV_PCM_FORMAT_S32_LE 2294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U32 SNDRV_PCM_FORMAT_U32_LE 2304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_LE 2314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_LE 2324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE 2334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#endif 2344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#ifdef SNDRV_BIG_ENDIAN 2354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_BE 2364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_BE 2374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S24 SNDRV_PCM_FORMAT_S24_BE 2384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U24 SNDRV_PCM_FORMAT_U24_BE 2394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_S32 SNDRV_PCM_FORMAT_S32_BE 2404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_U32 SNDRV_PCM_FORMAT_U32_BE 2414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_BE 2424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_BE 2434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE 2444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#endif 2454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjintypedef int __bitwise snd_pcm_subformat_t; 2474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_SUBFORMAT_STD ((__force snd_pcm_subformat_t) 0) 2484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_SUBFORMAT_LAST SNDRV_PCM_SUBFORMAT_STD 2494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_MMAP 0x00000001 /* hardware supports mmap */ 2514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_MMAP_VALID 0x00000002 /* period data are valid during transfer */ 2524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_DOUBLE 0x00000004 /* Double buffering needed for PCM start/stop */ 2534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_BATCH 0x00000010 /* double buffering */ 2544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_INTERLEAVED 0x00000100 /* channels are interleaved */ 2554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_NONINTERLEAVED 0x00000200 /* channels are not interleaved */ 2564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_COMPLEX 0x00000400 /* complex frame organization (mmap only) */ 2574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_BLOCK_TRANSFER 0x00010000 /* hardware transfer block of samples */ 2584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_OVERRANGE 0x00020000 /* hardware supports ADC (capture) overrange detection */ 2594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_RESUME 0x00040000 /* hardware supports stream resume after suspend */ 2604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_PAUSE 0x00080000 /* pause ioctl is supported */ 2614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_HALF_DUPLEX 0x00100000 /* only half duplex */ 2624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_JOINT_DUPLEX 0x00200000 /* playback and capture stream are somewhat correlated */ 2634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_SYNC_START 0x00400000 /* pcm support some kind of sync go */ 2644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_NO_PERIOD_WAKEUP 0x00800000 /* period wakeup can be disabled */ 2654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_HAS_WALL_CLOCK 0x01000000 /* has audio wall clock for audio/system time sync */ 2664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_INFO_FIFO_IN_FRAMES 0x80000000 /* internal kernel flag - FIFO size is in frames */ 2674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjintypedef int __bitwise snd_pcm_state_t; 2694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_STATE_OPEN ((__force snd_pcm_state_t) 0) /* stream is open */ 2704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_STATE_SETUP ((__force snd_pcm_state_t) 1) /* stream has a setup */ 2714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_STATE_PREPARED ((__force snd_pcm_state_t) 2) /* stream is ready to start */ 2724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_STATE_RUNNING ((__force snd_pcm_state_t) 3) /* stream is running */ 2734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_STATE_XRUN ((__force snd_pcm_state_t) 4) /* stream reached an xrun */ 2744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_STATE_DRAINING ((__force snd_pcm_state_t) 5) /* stream is draining */ 2754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_STATE_PAUSED ((__force snd_pcm_state_t) 6) /* stream is paused */ 2764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_STATE_SUSPENDED ((__force snd_pcm_state_t) 7) /* hardware is suspended */ 2774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_STATE_DISCONNECTED ((__force snd_pcm_state_t) 8) /* hardware is disconnected */ 2784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_STATE_LAST SNDRV_PCM_STATE_DISCONNECTED 2794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum { 2814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_MMAP_OFFSET_DATA = 0x00000000, 2824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_MMAP_OFFSET_STATUS = 0x80000000, 2834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_MMAP_OFFSET_CONTROL = 0x81000000, 2844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 2854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinunion snd_pcm_sync_id { 2874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char id[16]; 2884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned short id16[8]; 2894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int id32[4]; 2904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 2914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 2924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_pcm_info { 2934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int device; /* RO/WR (control): device number */ 2944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int subdevice; /* RO/WR (control): subdevice number */ 2954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int stream; /* RO/WR (control): stream direction */ 2964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int card; /* R: card number */ 2974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char id[64]; /* ID (user selectable) */ 2984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char name[80]; /* name of this device */ 2994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char subname[32]; /* subdevice name */ 3004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int dev_class; /* SNDRV_PCM_CLASS_* */ 3014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int dev_subclass; /* SNDRV_PCM_SUBCLASS_* */ 3024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int subdevices_count; 3034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int subdevices_avail; 3044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin union snd_pcm_sync_id sync; /* hardware synchronization ID */ 3054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[64]; /* reserved for future... */ 3064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 3074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjintypedef int snd_pcm_hw_param_t; 3094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_ACCESS 0 /* Access type */ 3104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_FORMAT 1 /* Format */ 3114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_SUBFORMAT 2 /* Subformat */ 3124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_FIRST_MASK SNDRV_PCM_HW_PARAM_ACCESS 3134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_LAST_MASK SNDRV_PCM_HW_PARAM_SUBFORMAT 3144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_SAMPLE_BITS 8 /* Bits per sample */ 3164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_FRAME_BITS 9 /* Bits per frame */ 3174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_CHANNELS 10 /* Channels */ 3184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_RATE 11 /* Approx rate */ 3194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_PERIOD_TIME 12 /* Approx distance between 3204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * interrupts in us 3214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 3224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_PERIOD_SIZE 13 /* Approx frames between 3234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * interrupts 3244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 3254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_PERIOD_BYTES 14 /* Approx bytes between 3264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * interrupts 3274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 3284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_PERIODS 15 /* Approx interrupts per 3294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * buffer 3304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 3314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_BUFFER_TIME 16 /* Approx duration of buffer 3324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * in us 3334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 3344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_BUFFER_SIZE 17 /* Size of buffer in frames */ 3354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_BUFFER_BYTES 18 /* Size of buffer in bytes */ 3364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_TICK_TIME 19 /* Approx tick duration in us */ 3374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_FIRST_INTERVAL SNDRV_PCM_HW_PARAM_SAMPLE_BITS 3384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAM_LAST_INTERVAL SNDRV_PCM_HW_PARAM_TICK_TIME 3394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAMS_NORESAMPLE (1<<0) /* avoid rate resampling */ 3414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAMS_EXPORT_BUFFER (1<<1) /* export buffer */ 3424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP (1<<2) /* disable period wakeups */ 3434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_interval { 3454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int min, max; 3464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int openmin:1, 3474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin openmax:1, 3484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin integer:1, 3494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin empty:1; 3504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 3514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_MASK_MAX 256 3534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_mask { 3554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin __u32 bits[(SNDRV_MASK_MAX+31)/32]; 3564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 3574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_pcm_hw_params { 3594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; 3604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_mask masks[SNDRV_PCM_HW_PARAM_LAST_MASK - 3614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_HW_PARAM_FIRST_MASK + 1]; 3624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_mask mres[5]; /* reserved masks */ 3634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_interval intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL - 3644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1]; 3654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_interval ires[9]; /* reserved intervals */ 3664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int rmask; /* W: requested masks */ 3674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int cmask; /* R: changed masks */ 3684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int info; /* R: Info flags for returned setup */ 3694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int msbits; /* R: used most significant bits */ 3704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int rate_num; /* R: rate numerator */ 3714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int rate_den; /* R: rate denominator */ 3724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t fifo_size; /* R: chip FIFO size in frames */ 3734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[64]; /* reserved for future */ 3744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 3754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum { 3774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_TSTAMP_NONE = 0, 3784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_TSTAMP_ENABLE, 3794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_TSTAMP_LAST = SNDRV_PCM_TSTAMP_ENABLE, 3804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 3814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_pcm_sw_params { 3834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int tstamp_mode; /* timestamp mode */ 3844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int period_step; 3854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int sleep_min; /* min ticks to sleep */ 3864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t avail_min; /* min avail frames for wakeup */ 3874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t xfer_align; /* obsolete: xfer size need to be a multiple */ 3884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t start_threshold; /* min hw_avail frames for automatic start */ 3894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t stop_threshold; /* min avail frames for automatic stop */ 3904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t silence_threshold; /* min distance from noise for silence filling */ 3914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t silence_size; /* silence block size */ 3924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t boundary; /* pointers wrap point */ 3934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[64]; /* reserved for future */ 3944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 3954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 3964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_pcm_channel_info { 3974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int channel; 3984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin __kernel_off_t offset; /* mmap offset */ 3994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int first; /* offset to first sample in bits */ 4004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int step; /* samples distance in bits */ 4014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_pcm_status { 4044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_state_t state; /* stream state */ 4054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct timespec trigger_tstamp; /* time when stream was started/stopped/paused */ 4064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct timespec tstamp; /* reference timestamp */ 4074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t appl_ptr; /* appl ptr */ 4084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t hw_ptr; /* hw ptr */ 4094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_sframes_t delay; /* current delay in frames */ 4104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t avail; /* number of frames available */ 4114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t avail_max; /* max frames available on hw since last status */ 4124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t overrange; /* count of ADC (capture) overrange detections from last status */ 4134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_state_t suspended_state; /* suspended stream state */ 4144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin __u32 reserved_alignment; /* must be filled with zero */ 4154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct timespec audio_tstamp; /* from sample counter or wall clock */ 4164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[56-sizeof(struct timespec)]; /* must be filled with zero */ 4174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_pcm_mmap_status { 4204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_state_t state; /* RO: state - SNDRV_PCM_STATE_XXXX */ 4214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int pad1; /* Needed for 64 bit alignment */ 4224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t hw_ptr; /* RO: hw ptr (0...boundary-1) */ 4234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct timespec tstamp; /* Timestamp */ 4244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_state_t suspended_state; /* RO: suspended stream state */ 4254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct timespec audio_tstamp; /* from sample counter or wall clock */ 4264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_pcm_mmap_control { 4294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t appl_ptr; /* RW: appl ptr (0...boundary-1) */ 4304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t avail_min; /* RW: min available frames for wakeup */ 4314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_SYNC_PTR_HWSYNC (1<<0) /* execute hwsync */ 4344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_SYNC_PTR_APPL (1<<1) /* get appl_ptr from driver (r/w op) */ 4354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_SYNC_PTR_AVAIL_MIN (1<<2) /* get avail_min from driver */ 4364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_pcm_sync_ptr { 4384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; 4394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin union { 4404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_pcm_mmap_status status; 4414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[64]; 4424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin } s; 4434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin union { 4444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_pcm_mmap_control control; 4454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[64]; 4464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin } c; 4474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_xferi { 4504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_sframes_t result; 4514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin void __user *buf; 4524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t frames; 4534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_xfern { 4564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_sframes_t result; 4574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin void __user * __user *bufs; 4584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_pcm_uframes_t frames; 4594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum { 4624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_TSTAMP_TYPE_GETTIMEOFDAY = 0, /* gettimeofday equivalent */ 4634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_TSTAMP_TYPE_MONOTONIC, /* posix_clock_monotonic equivalent */ 4644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC, 4654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 4664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 4674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* channel positions */ 4684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum { 4694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_UNKNOWN = 0, 4704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_NA, /* N/A, silent */ 4714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_MONO, /* mono stream */ 4724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin /* this follows the alsa-lib mixer channel value + 3 */ 4734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_FL, /* front left */ 4744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_FR, /* front right */ 4754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_RL, /* rear left */ 4764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_RR, /* rear right */ 4774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_FC, /* front center */ 4784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_LFE, /* LFE */ 4794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_SL, /* side left */ 4804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_SR, /* side right */ 4814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_RC, /* rear center */ 4824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin /* new definitions */ 4834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_FLC, /* front left center */ 4844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_FRC, /* front right center */ 4854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_RLC, /* rear left center */ 4864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_RRC, /* rear right center */ 4874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_FLW, /* front left wide */ 4884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_FRW, /* front right wide */ 4894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_FLH, /* front left high */ 4904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_FCH, /* front center high */ 4914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_FRH, /* front right high */ 4924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_TC, /* top center */ 4934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_TFL, /* top front left */ 4944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_TFR, /* top front right */ 4954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_TFC, /* top front center */ 4964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_TRL, /* top rear left */ 4974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_TRR, /* top rear right */ 4984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_TRC, /* top rear center */ 4994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin /* new definitions for UAC2 */ 5004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_TFLC, /* top front left center */ 5014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_TFRC, /* top front right center */ 5024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_TSL, /* top side left */ 5034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_TSR, /* top side right */ 5044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_LLFE, /* left LFE */ 5054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_RLFE, /* right LFE */ 5064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_BC, /* bottom center */ 5074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_BLC, /* bottom left center */ 5084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_BRC, /* bottom right center */ 5094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CHMAP_LAST = SNDRV_CHMAP_BRC, 5104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 5114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CHMAP_POSITION_MASK 0xffff 5134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CHMAP_PHASE_INVERSE (0x01 << 16) 5144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CHMAP_DRIVER_SPEC (0x02 << 16) 5154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_PVERSION _IOR('A', 0x00, int) 5174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_INFO _IOR('A', 0x01, struct snd_pcm_info) 5184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_TSTAMP _IOW('A', 0x02, int) 5194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_TTSTAMP _IOW('A', 0x03, int) 5204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_HW_REFINE _IOWR('A', 0x10, struct snd_pcm_hw_params) 5214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_HW_PARAMS _IOWR('A', 0x11, struct snd_pcm_hw_params) 5224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_HW_FREE _IO('A', 0x12) 5234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_SW_PARAMS _IOWR('A', 0x13, struct snd_pcm_sw_params) 5244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_STATUS _IOR('A', 0x20, struct snd_pcm_status) 5254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_DELAY _IOR('A', 0x21, snd_pcm_sframes_t) 5264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_HWSYNC _IO('A', 0x22) 5274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct snd_pcm_sync_ptr) 5284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_CHANNEL_INFO _IOR('A', 0x32, struct snd_pcm_channel_info) 5294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_PREPARE _IO('A', 0x40) 5304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_RESET _IO('A', 0x41) 5314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_START _IO('A', 0x42) 5324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_DROP _IO('A', 0x43) 5334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_DRAIN _IO('A', 0x44) 5344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_PAUSE _IOW('A', 0x45, int) 5354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_REWIND _IOW('A', 0x46, snd_pcm_uframes_t) 5364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_RESUME _IO('A', 0x47) 5374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_XRUN _IO('A', 0x48) 5384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_FORWARD _IOW('A', 0x49, snd_pcm_uframes_t) 5394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_WRITEI_FRAMES _IOW('A', 0x50, struct snd_xferi) 5404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_READI_FRAMES _IOR('A', 0x51, struct snd_xferi) 5414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_WRITEN_FRAMES _IOW('A', 0x52, struct snd_xfern) 5424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_READN_FRAMES _IOR('A', 0x53, struct snd_xfern) 5434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_LINK _IOW('A', 0x60, int) 5444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_PCM_IOCTL_UNLINK _IO('A', 0x61) 5454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/***************************************************************************** 5474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * * 5484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * MIDI v1.0 interface * 5494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * * 5504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin *****************************************************************************/ 5514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 5534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Raw MIDI section - /dev/snd/midi?? 5544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 5554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 0) 5574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum { 5594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_RAWMIDI_STREAM_OUTPUT = 0, 5604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_RAWMIDI_STREAM_INPUT, 5614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_RAWMIDI_STREAM_LAST = SNDRV_RAWMIDI_STREAM_INPUT, 5624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 5634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_RAWMIDI_INFO_OUTPUT 0x00000001 5654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_RAWMIDI_INFO_INPUT 0x00000002 5664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_RAWMIDI_INFO_DUPLEX 0x00000004 5674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_rawmidi_info { 5694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int device; /* RO/WR (control): device number */ 5704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int subdevice; /* RO/WR (control): subdevice number */ 5714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int stream; /* WR: stream */ 5724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int card; /* R: card number */ 5734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; /* SNDRV_RAWMIDI_INFO_XXXX */ 5744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char id[64]; /* ID (user selectable) */ 5754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char name[80]; /* name of device */ 5764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char subname[32]; /* name of active or selected subdevice */ 5774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int subdevices_count; 5784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int subdevices_avail; 5794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[64]; /* reserved for future use */ 5804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 5814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_rawmidi_params { 5834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int stream; 5844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t buffer_size; /* queue size in bytes */ 5854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t avail_min; /* minimum avail bytes for wakeup */ 5864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int no_active_sensing: 1; /* do not send active sensing byte in close() */ 5874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[16]; /* reserved for future use */ 5884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 5894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_rawmidi_status { 5914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int stream; 5924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct timespec tstamp; /* Timestamp */ 5934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t avail; /* available bytes */ 5944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin size_t xruns; /* count of overruns since last status (in bytes) */ 5954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[16]; /* reserved for future use */ 5964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 5974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 5984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_RAWMIDI_IOCTL_PVERSION _IOR('W', 0x00, int) 5994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_RAWMIDI_IOCTL_INFO _IOR('W', 0x01, struct snd_rawmidi_info) 6004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_RAWMIDI_IOCTL_PARAMS _IOWR('W', 0x10, struct snd_rawmidi_params) 6014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_RAWMIDI_IOCTL_STATUS _IOWR('W', 0x20, struct snd_rawmidi_status) 6024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_RAWMIDI_IOCTL_DROP _IOW('W', 0x30, int) 6034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_RAWMIDI_IOCTL_DRAIN _IOW('W', 0x31, int) 6044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 6064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Timer section - /dev/snd/timer 6074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 6084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 6) 6104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum { 6124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_CLASS_NONE = -1, 6134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_CLASS_SLAVE = 0, 6144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_CLASS_GLOBAL, 6154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_CLASS_CARD, 6164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_CLASS_PCM, 6174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_CLASS_LAST = SNDRV_TIMER_CLASS_PCM, 6184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* slave timer classes */ 6214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum { 6224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_SCLASS_NONE = 0, 6234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_SCLASS_APPLICATION, 6244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_SCLASS_SEQUENCER, /* alias */ 6254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_SCLASS_OSS_SEQUENCER, /* alias */ 6264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_SCLASS_LAST = SNDRV_TIMER_SCLASS_OSS_SEQUENCER, 6274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* global timers (device member) */ 6304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_GLOBAL_SYSTEM 0 6314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_GLOBAL_RTC 1 6324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_GLOBAL_HPET 2 6334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_GLOBAL_HRTIMER 3 6344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* info flags */ 6364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_FLG_SLAVE (1<<0) /* cannot be controlled */ 6374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_timer_id { 6394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int dev_class; 6404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int dev_sclass; 6414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int card; 6424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int device; 6434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int subdevice; 6444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_timer_ginfo { 6474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_timer_id tid; /* requested timer ID */ 6484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; /* timer flags - SNDRV_TIMER_FLG_* */ 6494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int card; /* card number */ 6504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char id[64]; /* timer identification */ 6514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char name[80]; /* timer name */ 6524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long reserved0; /* reserved for future use */ 6534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long resolution; /* average period resolution in ns */ 6544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long resolution_min; /* minimal period resolution in ns */ 6554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long resolution_max; /* maximal period resolution in ns */ 6564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int clients; /* active timer clients */ 6574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[32]; 6584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_timer_gparams { 6614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_timer_id tid; /* requested timer ID */ 6624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long period_num; /* requested precise period duration (in seconds) - numerator */ 6634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long period_den; /* requested precise period duration (in seconds) - denominator */ 6644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[32]; 6654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_timer_gstatus { 6684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_timer_id tid; /* requested timer ID */ 6694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long resolution; /* current period resolution in ns */ 6704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long resolution_num; /* precise current period resolution (in seconds) - numerator */ 6714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long resolution_den; /* precise current period resolution (in seconds) - denominator */ 6724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[32]; 6734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_timer_select { 6764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_timer_id id; /* bind to timer ID */ 6774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[32]; /* reserved */ 6784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_timer_info { 6814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; /* timer flags - SNDRV_TIMER_FLG_* */ 6824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int card; /* card number */ 6834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char id[64]; /* timer identificator */ 6844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char name[80]; /* timer name */ 6854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long reserved0; /* reserved for future use */ 6864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned long resolution; /* average period resolution in ns */ 6874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[64]; /* reserved */ 6884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 6894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_PSFLG_AUTO (1<<0) /* auto start, otherwise one-shot */ 6914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_PSFLG_EXCLUSIVE (1<<1) /* exclusive use, precise start/stop/pause/continue */ 6924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_PSFLG_EARLY_EVENT (1<<2) /* write early event to the poll queue */ 6934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 6944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_timer_params { 6954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int flags; /* flags - SNDRV_MIXER_PSFLG_* */ 6964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int ticks; /* requested resolution in ticks */ 6974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int queue_size; /* total size of queue (32-1024) */ 6984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int reserved0; /* reserved, was: failure locations */ 6994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int filter; /* event filter (bitmask of SNDRV_TIMER_EVENT_*) */ 7004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[60]; /* reserved */ 7014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 7024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_timer_status { 7044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct timespec tstamp; /* Timestamp - last update */ 7054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int resolution; /* current period resolution in ns */ 7064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int lost; /* counter of master tick lost */ 7074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int overrun; /* count of read queue overruns */ 7084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int queue; /* used queue size */ 7094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[64]; /* reserved */ 7104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 7114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_IOCTL_PVERSION _IOR('T', 0x00, int) 7134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_IOCTL_NEXT_DEVICE _IOWR('T', 0x01, struct snd_timer_id) 7144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_IOCTL_TREAD _IOW('T', 0x02, int) 7154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_IOCTL_GINFO _IOWR('T', 0x03, struct snd_timer_ginfo) 7164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_IOCTL_GPARAMS _IOW('T', 0x04, struct snd_timer_gparams) 7174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_IOCTL_GSTATUS _IOWR('T', 0x05, struct snd_timer_gstatus) 7184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_IOCTL_SELECT _IOW('T', 0x10, struct snd_timer_select) 7194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_IOCTL_INFO _IOR('T', 0x11, struct snd_timer_info) 7204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_IOCTL_PARAMS _IOW('T', 0x12, struct snd_timer_params) 7214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_IOCTL_STATUS _IOR('T', 0x14, struct snd_timer_status) 7224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* The following four ioctls are changed since 1.0.9 due to confliction */ 7234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_IOCTL_START _IO('T', 0xa0) 7244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_IOCTL_STOP _IO('T', 0xa1) 7254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_IOCTL_CONTINUE _IO('T', 0xa2) 7264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_TIMER_IOCTL_PAUSE _IO('T', 0xa3) 7274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_timer_read { 7294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int resolution; 7304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int ticks; 7314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 7324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum { 7344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_RESOLUTION = 0, /* val = resolution in ns */ 7354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_TICK, /* val = ticks */ 7364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_START, /* val = resolution in ns */ 7374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_STOP, /* val = 0 */ 7384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_CONTINUE, /* val = resolution in ns */ 7394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_PAUSE, /* val = 0 */ 7404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_EARLY, /* val = 0, early event */ 7414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_SUSPEND, /* val = 0 */ 7424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_RESUME, /* val = resolution in ns */ 7434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin /* master timer events for slave timer instances */ 7444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_MSTART = SNDRV_TIMER_EVENT_START + 10, 7454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_MSTOP = SNDRV_TIMER_EVENT_STOP + 10, 7464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_MCONTINUE = SNDRV_TIMER_EVENT_CONTINUE + 10, 7474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_MPAUSE = SNDRV_TIMER_EVENT_PAUSE + 10, 7484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_MSUSPEND = SNDRV_TIMER_EVENT_SUSPEND + 10, 7494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_TIMER_EVENT_MRESUME = SNDRV_TIMER_EVENT_RESUME + 10, 7504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 7514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_timer_tread { 7534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int event; 7544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct timespec tstamp; 7554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int val; 7564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 7574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/**************************************************************************** 7594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * * 7604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Section for driver control interface - /dev/snd/control? * 7614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * * 7624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin ****************************************************************************/ 7634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7) 7654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_ctl_card_info { 7674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int card; /* card number */ 7684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int pad; /* reserved for future (was type) */ 7694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char id[16]; /* ID of card (user selectable) */ 7704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char driver[16]; /* Driver name */ 7714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char name[32]; /* Short name of soundcard */ 7724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char longname[80]; /* name + info text about soundcard */ 7734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved_[16]; /* reserved for future (was ID of mixer) */ 7744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char mixername[80]; /* visual mixer identification */ 7754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char components[128]; /* card components / fine identification, delimited with one space (AC97 etc..) */ 7764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 7774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjintypedef int __bitwise snd_ctl_elem_type_t; 7794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_TYPE_NONE ((__force snd_ctl_elem_type_t) 0) /* invalid */ 7804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_TYPE_BOOLEAN ((__force snd_ctl_elem_type_t) 1) /* boolean type */ 7814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_TYPE_INTEGER ((__force snd_ctl_elem_type_t) 2) /* integer type */ 7824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_TYPE_ENUMERATED ((__force snd_ctl_elem_type_t) 3) /* enumerated type */ 7834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_TYPE_BYTES ((__force snd_ctl_elem_type_t) 4) /* byte array */ 7844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_TYPE_IEC958 ((__force snd_ctl_elem_type_t) 5) /* IEC958 (S/PDIF) setup */ 7854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_TYPE_INTEGER64 ((__force snd_ctl_elem_type_t) 6) /* 64-bit integer type */ 7864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_TYPE_LAST SNDRV_CTL_ELEM_TYPE_INTEGER64 7874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjintypedef int __bitwise snd_ctl_elem_iface_t; 7894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_IFACE_CARD ((__force snd_ctl_elem_iface_t) 0) /* global control */ 7904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_IFACE_HWDEP ((__force snd_ctl_elem_iface_t) 1) /* hardware dependent device */ 7914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_IFACE_MIXER ((__force snd_ctl_elem_iface_t) 2) /* virtual mixer device */ 7924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_IFACE_PCM ((__force snd_ctl_elem_iface_t) 3) /* PCM device */ 7934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_IFACE_RAWMIDI ((__force snd_ctl_elem_iface_t) 4) /* RawMidi device */ 7944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_IFACE_TIMER ((__force snd_ctl_elem_iface_t) 5) /* timer device */ 7954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_IFACE_SEQUENCER ((__force snd_ctl_elem_iface_t) 6) /* sequencer client */ 7964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_IFACE_LAST SNDRV_CTL_ELEM_IFACE_SEQUENCER 7974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 7984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_ACCESS_READ (1<<0) 7994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_ACCESS_WRITE (1<<1) 8004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_ACCESS_READWRITE (SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE) 8014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_ACCESS_VOLATILE (1<<2) /* control value may be changed without a notification */ 8024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_ACCESS_TIMESTAMP (1<<3) /* when was control changed */ 8034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_ACCESS_TLV_READ (1<<4) /* TLV read is possible */ 8044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE (1<<5) /* TLV write is possible */ 8054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE (SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE) 8064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND (1<<6) /* TLV command is possible */ 8074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_ACCESS_INACTIVE (1<<8) /* control does actually nothing, but may be updated */ 8084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_ACCESS_LOCK (1<<9) /* write lock */ 8094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_ACCESS_OWNER (1<<10) /* write lock owner */ 8104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK (1<<28) /* kernel use a TLV callback */ 8114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_ELEM_ACCESS_USER (1<<29) /* user space element */ 8124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* bits 30 and 31 are obsoleted (for indirect access) */ 8134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* for further details see the ACPI and PCI power management specification */ 8154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_POWER_D0 0x0000 /* full On */ 8164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_POWER_D1 0x0100 /* partial On */ 8174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_POWER_D2 0x0200 /* partial On */ 8184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_POWER_D3 0x0300 /* Off */ 8194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_POWER_D3hot (SNDRV_CTL_POWER_D3|0x0000) /* Off, with power */ 8204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_POWER_D3cold (SNDRV_CTL_POWER_D3|0x0001) /* Off, without power */ 8214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_ctl_elem_id { 8234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int numid; /* numeric identifier, zero = invalid */ 8244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_ctl_elem_iface_t iface; /* interface identifier */ 8254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int device; /* device/client number */ 8264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int subdevice; /* subdevice (substream) number */ 8274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char name[44]; /* ASCII name of item */ 8284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int index; /* index of item */ 8294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 8304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_ctl_elem_list { 8324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int offset; /* W: first element ID to get */ 8334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int space; /* W: count of element IDs to get */ 8344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int used; /* R: count of element IDs set */ 8354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int count; /* R: count of all elements */ 8364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_ctl_elem_id __user *pids; /* R: IDs */ 8374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[50]; 8384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 8394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_ctl_elem_info { 8414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_ctl_elem_id id; /* W: element ID */ 8424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin snd_ctl_elem_type_t type; /* R: value type - SNDRV_CTL_ELEM_TYPE_* */ 8434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int access; /* R: value access (bitmask) - SNDRV_CTL_ELEM_ACCESS_* */ 8444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int count; /* count of values */ 8454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin __kernel_pid_t owner; /* owner's PID of this control */ 8464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin union { 8474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct { 8484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin long min; /* R: minimum value */ 8494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin long max; /* R: maximum value */ 8504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin long step; /* R: step (0 variable) */ 8514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin } integer; 8524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct { 8534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin long long min; /* R: minimum value */ 8544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin long long max; /* R: maximum value */ 8554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin long long step; /* R: step (0 variable) */ 8564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin } integer64; 8574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct { 8584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int items; /* R: number of items */ 8594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int item; /* W: item number */ 8604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin char name[64]; /* R: value name */ 8614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin __u64 names_ptr; /* W: names list (ELEM_ADD only) */ 8624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int names_length; 8634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin } enumerated; 8644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[128]; 8654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin } value; 8664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin union { 8674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned short d[4]; /* dimensions */ 8684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned short *d_ptr; /* indirect - obsoleted */ 8694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin } dimen; 8704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[64-4*sizeof(unsigned short)]; 8714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 8724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_ctl_elem_value { 8744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_ctl_elem_id id; /* W: element ID */ 8754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int indirect: 1; /* W: indirect access - obsoleted */ 8764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin union { 8774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin union { 8784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin long value[128]; 8794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin long *value_ptr; /* obsoleted */ 8804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin } integer; 8814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin union { 8824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin long long value[64]; 8834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin long long *value_ptr; /* obsoleted */ 8844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin } integer64; 8854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin union { 8864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int item[128]; 8874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int *item_ptr; /* obsoleted */ 8884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin } enumerated; 8894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin union { 8904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char data[512]; 8914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char *data_ptr; /* obsoleted */ 8924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin } bytes; 8934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_aes_iec958 iec958; 8944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin } value; /* RO */ 8954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct timespec tstamp; 8964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char reserved[128-sizeof(struct timespec)]; 8974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 8984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 8994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_ctl_tlv { 9004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int numid; /* control element numeric identification */ 9014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int length; /* in bytes aligned to 4 */ 9024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int tlv[0]; /* first TLV */ 9034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 9044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_PVERSION _IOR('U', 0x00, int) 9064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_CARD_INFO _IOR('U', 0x01, struct snd_ctl_card_info) 9074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_ELEM_LIST _IOWR('U', 0x10, struct snd_ctl_elem_list) 9084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_ELEM_INFO _IOWR('U', 0x11, struct snd_ctl_elem_info) 9094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_ELEM_READ _IOWR('U', 0x12, struct snd_ctl_elem_value) 9104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_ELEM_WRITE _IOWR('U', 0x13, struct snd_ctl_elem_value) 9114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_ELEM_LOCK _IOW('U', 0x14, struct snd_ctl_elem_id) 9124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_ELEM_UNLOCK _IOW('U', 0x15, struct snd_ctl_elem_id) 9134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS _IOWR('U', 0x16, int) 9144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_ELEM_ADD _IOWR('U', 0x17, struct snd_ctl_elem_info) 9154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_ELEM_REPLACE _IOWR('U', 0x18, struct snd_ctl_elem_info) 9164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_ELEM_REMOVE _IOWR('U', 0x19, struct snd_ctl_elem_id) 9174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_TLV_READ _IOWR('U', 0x1a, struct snd_ctl_tlv) 9184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_TLV_WRITE _IOWR('U', 0x1b, struct snd_ctl_tlv) 9194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_TLV_COMMAND _IOWR('U', 0x1c, struct snd_ctl_tlv) 9204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE _IOWR('U', 0x20, int) 9214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_HWDEP_INFO _IOR('U', 0x21, struct snd_hwdep_info) 9224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE _IOR('U', 0x30, int) 9234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_PCM_INFO _IOWR('U', 0x31, struct snd_pcm_info) 9244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE _IOW('U', 0x32, int) 9254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE _IOWR('U', 0x40, int) 9264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_RAWMIDI_INFO _IOWR('U', 0x41, struct snd_rawmidi_info) 9274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE _IOW('U', 0x42, int) 9284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_POWER _IOWR('U', 0xd0, int) 9294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_IOCTL_POWER_STATE _IOR('U', 0xd1, int) 9304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 9324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Read interface. 9334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 9344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum sndrv_ctl_event_type { 9364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CTL_EVENT_ELEM = 0, 9374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin SNDRV_CTL_EVENT_LAST = SNDRV_CTL_EVENT_ELEM, 9384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 9394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_EVENT_MASK_VALUE (1<<0) /* element value was changed */ 9414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_EVENT_MASK_INFO (1<<1) /* element info was changed */ 9424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_EVENT_MASK_ADD (1<<2) /* element was added */ 9434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_EVENT_MASK_TLV (1<<3) /* element TLV tree was changed */ 9444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_EVENT_MASK_REMOVE (~0U) /* element was removed */ 9454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct snd_ctl_event { 9474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin int type; /* event type - SNDRV_CTL_EVENT_* */ 9484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin union { 9494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct { 9504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned int mask; 9514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin struct snd_ctl_elem_id id; 9524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin } elem; 9534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin unsigned char data8[60]; 9544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin } data; 9554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin}; 9564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* 9584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Control names 9594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin */ 9604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_NAME_NONE "" 9624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_NAME_PLAYBACK "Playback " 9634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_NAME_CAPTURE "Capture " 9644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_NAME_IEC958_NONE "" 9664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_NAME_IEC958_SWITCH "Switch" 9674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_NAME_IEC958_VOLUME "Volume" 9684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_NAME_IEC958_DEFAULT "Default" 9694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_NAME_IEC958_MASK "Mask" 9704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_NAME_IEC958_CON_MASK "Con Mask" 9714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_NAME_IEC958_PRO_MASK "Pro Mask" 9724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_NAME_IEC958_PCM_STREAM "PCM Stream" 9734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define SNDRV_CTL_NAME_IEC958(expl,direction,what) "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what 9744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin 9754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#endif /* _UAPI__SOUND_ASOUND_H */ 976