From 597482a455e6f1ea260a029e3f1b882024994a77 Mon Sep 17 00:00:00 2001 From: Wang Mingyu Date: Thu, 28 May 2020 14:01:11 +0800 Subject: alsa-lib: upgrade 1.2.1.2 -> 1.2.2 0001-Fix-alsa-sound-.h-for-external-programs.patch 0001-configure.ac-remove-an-unnecessary-libtool-fix.patch 0001-uapi-Move-typedefs-from-uapi-to-sound.patch 0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch 0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch 0003-namehint-correct-the-args-check.patch 0004-namehint-improve-the-previous-patch-check-the-return.patch 0005-ucm-Do-not-fail-to-parse-configs-on-cards-with-an-em.patch removed since they are included in 1.2.2 Signed-off-by: Wang Mingyu Signed-off-by: Richard Purdie --- ...1-Fix-alsa-sound-.h-for-external-programs.patch | 7104 -------------------- ...gure.ac-remove-an-unnecessary-libtool-fix.patch | 50 - ...001-uapi-Move-typedefs-from-uapi-to-sound.patch | 137 - ...e-strncmp-to-avoid-access-out-of-boundary.patch | 41 - ...always-at-least-NULL-if-no-list-is-availa.patch | 45 - .../0003-namehint-correct-the-args-check.patch | 34 - ...prove-the-previous-patch-check-the-return.patch | 31 - ...fail-to-parse-configs-on-cards-with-an-em.patch | 86 - meta/recipes-multimedia/alsa/alsa-lib_1.2.1.2.bb | 52 - meta/recipes-multimedia/alsa/alsa-lib_1.2.2.bb | 43 + 10 files changed, 43 insertions(+), 7580 deletions(-) delete mode 100644 meta/recipes-multimedia/alsa/alsa-lib/0001-Fix-alsa-sound-.h-for-external-programs.patch delete mode 100644 meta/recipes-multimedia/alsa/alsa-lib/0001-configure.ac-remove-an-unnecessary-libtool-fix.patch delete mode 100644 meta/recipes-multimedia/alsa/alsa-lib/0001-uapi-Move-typedefs-from-uapi-to-sound.patch delete mode 100644 meta/recipes-multimedia/alsa/alsa-lib/0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch delete mode 100644 meta/recipes-multimedia/alsa/alsa-lib/0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch delete mode 100644 meta/recipes-multimedia/alsa/alsa-lib/0003-namehint-correct-the-args-check.patch delete mode 100644 meta/recipes-multimedia/alsa/alsa-lib/0004-namehint-improve-the-previous-patch-check-the-return.patch delete mode 100644 meta/recipes-multimedia/alsa/alsa-lib/0005-ucm-Do-not-fail-to-parse-configs-on-cards-with-an-em.patch delete mode 100644 meta/recipes-multimedia/alsa/alsa-lib_1.2.1.2.bb create mode 100644 meta/recipes-multimedia/alsa/alsa-lib_1.2.2.bb (limited to 'meta/recipes-multimedia/alsa') diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0001-Fix-alsa-sound-.h-for-external-programs.patch b/meta/recipes-multimedia/alsa/alsa-lib/0001-Fix-alsa-sound-.h-for-external-programs.patch deleted file mode 100644 index 890650a772..0000000000 --- a/meta/recipes-multimedia/alsa/alsa-lib/0001-Fix-alsa-sound-.h-for-external-programs.patch +++ /dev/null @@ -1,7104 +0,0 @@ -From ae564665ec261cf104de499b1cdda3564070fc65 Mon Sep 17 00:00:00 2001 -From: Takashi Iwai -Date: Fri, 20 Dec 2019 15:46:48 +0100 -Subject: [PATCH] Fix alsa/sound/*.h for external programs - -The recent update of sound/*.h to sync with the latest Linus uapi -files broke the build of alsa-tools programs. These files used to be -a modified version of Linux sound/* header files, so that they could -be built without Linux headers. The special prefix like __user and -other things were worked around there. - -We may do that again, but a better approach is to fix those things in -Linux kernel uapi side, while we keep the minimal workaround in -alsa-lib such as the __u16 and co type definitions. - -This patch is such an attempt, namely: -- Keep the original $LINUX/uapi/sound/*.h in include/sound/uapi - directory -- The "fixes" are applied to some uapi headers, so that they don't - contain Linux-specific prefix and use of opaque struct like - snd_ctl_elem_id -- The uapi headers are included indirectly from include/sound/*.h -- Some headers have inclusion of type_compat.h for the Linux variable - types and prefixes -- type_compat.h tries to use when __linux__ is - defined, instead of the own conflicting definitions - -The last type might need a bit more adjustment depending on the -compiler, but it can be fixed locally without disturbing else. - -Signed-off-by: Takashi Iwai - -Upstream-Status: Backport - -Signed-off-by: Tanu Kaskinen - ---- - configure.ac | 3 +- - include/sound/Makefile.am | 6 +- - include/sound/asequencer.h | 613 +---------------- - include/sound/asoc.h | 634 +----------------- - include/sound/asound.h | 1039 +---------------------------- - include/sound/asound_fm.h | 136 +--- - include/sound/emu10k1.h | 383 +---------- - include/sound/hdsp.h | 113 +--- - include/sound/hdspm.h | 234 +------ - include/sound/sb16_csp.h | 124 +--- - include/sound/sscape_ioctl.h | 22 +- - include/sound/tlv.h | 118 +--- - include/sound/type_compat.h | 13 + - include/sound/uapi/Makefile.am | 6 + - include/sound/uapi/asequencer.h | 612 +++++++++++++++++ - include/sound/uapi/asoc.h | 633 ++++++++++++++++++ - include/sound/uapi/asound.h | 1038 ++++++++++++++++++++++++++++ - include/sound/uapi/asound_fm.h | 135 ++++ - include/sound/uapi/emu10k1.h | 395 +++++++++++ - include/sound/uapi/hdsp.h | 109 +++ - include/sound/uapi/hdspm.h | 230 +++++++ - include/sound/uapi/sb16_csp.h | 123 ++++ - include/sound/uapi/sscape_ioctl.h | 21 + - include/sound/uapi/tlv.h | 117 ++++ - src/topology/tplg_local.h | 3 +- - 25 files changed, 3452 insertions(+), 3408 deletions(-) - create mode 100644 include/sound/uapi/Makefile.am - create mode 100644 include/sound/uapi/asequencer.h - create mode 100644 include/sound/uapi/asoc.h - create mode 100644 include/sound/uapi/asound.h - create mode 100644 include/sound/uapi/asound_fm.h - create mode 100644 include/sound/uapi/emu10k1.h - create mode 100644 include/sound/uapi/hdsp.h - create mode 100644 include/sound/uapi/hdspm.h - create mode 100644 include/sound/uapi/sb16_csp.h - create mode 100644 include/sound/uapi/sscape_ioctl.h - create mode 100644 include/sound/uapi/tlv.h - -diff --git a/configure.ac b/configure.ac -index 119ef600..886f87bc 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -707,7 +707,8 @@ if test ! -L "$srcdir"/include/alsa ; then - fi - - AC_OUTPUT(Makefile doc/Makefile doc/pictures/Makefile doc/doxygen.cfg \ -- include/Makefile include/sound/Makefile src/Versions src/Makefile \ -+ include/Makefile include/sound/Makefile include/sound/uapi/Makefile \ -+ src/Versions src/Makefile \ - src/control/Makefile src/mixer/Makefile \ - src/pcm/Makefile src/pcm/scopes/Makefile \ - src/rawmidi/Makefile src/timer/Makefile \ -diff --git a/include/sound/Makefile.am b/include/sound/Makefile.am -index 99c42211..ccc7d273 100644 ---- a/include/sound/Makefile.am -+++ b/include/sound/Makefile.am -@@ -1,7 +1,9 @@ -+SUBDIRS = uapi -+ - alsasoundincludedir = ${includedir}/alsa/sound - - alsasoundinclude_HEADERS = asound_fm.h hdsp.h hdspm.h sb16_csp.h \ -- sscape_ioctl.h emu10k1.h type_compat.h \ -- asoc.h tlv.h -+ sscape_ioctl.h emu10k1.h asoc.h tlv.h \ -+ type_compat.h - - noinst_HEADERS = asound.h asequencer.h -diff --git a/include/sound/asequencer.h b/include/sound/asequencer.h -index a75e14ed..e539a77e 100644 ---- a/include/sound/asequencer.h -+++ b/include/sound/asequencer.h -@@ -1,612 +1 @@ --/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ --/* -- * Main header file for the ALSA sequencer -- * Copyright (c) 1998-1999 by Frank van de Pol -- * (c) 1998-1999 by Jaroslav Kysela -- * -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -- * -- */ --#ifndef _UAPI__SOUND_ASEQUENCER_H --#define _UAPI__SOUND_ASEQUENCER_H -- --#include -- --/** version of the sequencer */ --#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 2) -- --/** -- * definition of sequencer event types -- */ -- --/** system messages -- * event data type = #snd_seq_result -- */ --#define SNDRV_SEQ_EVENT_SYSTEM 0 --#define SNDRV_SEQ_EVENT_RESULT 1 -- --/** note messages (channel specific) -- * event data type = #snd_seq_ev_note -- */ --#define SNDRV_SEQ_EVENT_NOTE 5 --#define SNDRV_SEQ_EVENT_NOTEON 6 --#define SNDRV_SEQ_EVENT_NOTEOFF 7 --#define SNDRV_SEQ_EVENT_KEYPRESS 8 -- --/** control messages (channel specific) -- * event data type = #snd_seq_ev_ctrl -- */ --#define SNDRV_SEQ_EVENT_CONTROLLER 10 --#define SNDRV_SEQ_EVENT_PGMCHANGE 11 --#define SNDRV_SEQ_EVENT_CHANPRESS 12 --#define SNDRV_SEQ_EVENT_PITCHBEND 13 /**< from -8192 to 8191 */ --#define SNDRV_SEQ_EVENT_CONTROL14 14 /**< 14 bit controller value */ --#define SNDRV_SEQ_EVENT_NONREGPARAM 15 /**< 14 bit NRPN address + 14 bit unsigned value */ --#define SNDRV_SEQ_EVENT_REGPARAM 16 /**< 14 bit RPN address + 14 bit unsigned value */ -- --/** synchronisation messages -- * event data type = #snd_seq_ev_ctrl -- */ --#define SNDRV_SEQ_EVENT_SONGPOS 20 /* Song Position Pointer with LSB and MSB values */ --#define SNDRV_SEQ_EVENT_SONGSEL 21 /* Song Select with song ID number */ --#define SNDRV_SEQ_EVENT_QFRAME 22 /* midi time code quarter frame */ --#define SNDRV_SEQ_EVENT_TIMESIGN 23 /* SMF Time Signature event */ --#define SNDRV_SEQ_EVENT_KEYSIGN 24 /* SMF Key Signature event */ -- --/** timer messages -- * event data type = snd_seq_ev_queue_control -- */ --#define SNDRV_SEQ_EVENT_START 30 /* midi Real Time Start message */ --#define SNDRV_SEQ_EVENT_CONTINUE 31 /* midi Real Time Continue message */ --#define SNDRV_SEQ_EVENT_STOP 32 /* midi Real Time Stop message */ --#define SNDRV_SEQ_EVENT_SETPOS_TICK 33 /* set tick queue position */ --#define SNDRV_SEQ_EVENT_SETPOS_TIME 34 /* set realtime queue position */ --#define SNDRV_SEQ_EVENT_TEMPO 35 /* (SMF) Tempo event */ --#define SNDRV_SEQ_EVENT_CLOCK 36 /* midi Real Time Clock message */ --#define SNDRV_SEQ_EVENT_TICK 37 /* midi Real Time Tick message */ --#define SNDRV_SEQ_EVENT_QUEUE_SKEW 38 /* skew queue tempo */ -- --/** others -- * event data type = none -- */ --#define SNDRV_SEQ_EVENT_TUNE_REQUEST 40 /* tune request */ --#define SNDRV_SEQ_EVENT_RESET 41 /* reset to power-on state */ --#define SNDRV_SEQ_EVENT_SENSING 42 /* "active sensing" event */ -- --/** echo back, kernel private messages -- * event data type = any type -- */ --#define SNDRV_SEQ_EVENT_ECHO 50 /* echo event */ --#define SNDRV_SEQ_EVENT_OSS 51 /* OSS raw event */ -- --/** system status messages (broadcast for subscribers) -- * event data type = snd_seq_addr -- */ --#define SNDRV_SEQ_EVENT_CLIENT_START 60 /* new client has connected */ --#define SNDRV_SEQ_EVENT_CLIENT_EXIT 61 /* client has left the system */ --#define SNDRV_SEQ_EVENT_CLIENT_CHANGE 62 /* client status/info has changed */ --#define SNDRV_SEQ_EVENT_PORT_START 63 /* new port was created */ --#define SNDRV_SEQ_EVENT_PORT_EXIT 64 /* port was deleted from system */ --#define SNDRV_SEQ_EVENT_PORT_CHANGE 65 /* port status/info has changed */ -- --/** port connection changes -- * event data type = snd_seq_connect -- */ --#define SNDRV_SEQ_EVENT_PORT_SUBSCRIBED 66 /* ports connected */ --#define SNDRV_SEQ_EVENT_PORT_UNSUBSCRIBED 67 /* ports disconnected */ -- --/* 70-89: synthesizer events - obsoleted */ -- --/** user-defined events with fixed length -- * event data type = any -- */ --#define SNDRV_SEQ_EVENT_USR0 90 --#define SNDRV_SEQ_EVENT_USR1 91 --#define SNDRV_SEQ_EVENT_USR2 92 --#define SNDRV_SEQ_EVENT_USR3 93 --#define SNDRV_SEQ_EVENT_USR4 94 --#define SNDRV_SEQ_EVENT_USR5 95 --#define SNDRV_SEQ_EVENT_USR6 96 --#define SNDRV_SEQ_EVENT_USR7 97 --#define SNDRV_SEQ_EVENT_USR8 98 --#define SNDRV_SEQ_EVENT_USR9 99 -- --/* 100-118: instrument layer - obsoleted */ --/* 119-129: reserved */ -- --/* 130-139: variable length events -- * event data type = snd_seq_ev_ext -- * (SNDRV_SEQ_EVENT_LENGTH_VARIABLE must be set) -- */ --#define SNDRV_SEQ_EVENT_SYSEX 130 /* system exclusive data (variable length) */ --#define SNDRV_SEQ_EVENT_BOUNCE 131 /* error event */ --/* 132-134: reserved */ --#define SNDRV_SEQ_EVENT_USR_VAR0 135 --#define SNDRV_SEQ_EVENT_USR_VAR1 136 --#define SNDRV_SEQ_EVENT_USR_VAR2 137 --#define SNDRV_SEQ_EVENT_USR_VAR3 138 --#define SNDRV_SEQ_EVENT_USR_VAR4 139 -- --/* 150-151: kernel events with quote - DO NOT use in user clients */ --#define SNDRV_SEQ_EVENT_KERNEL_ERROR 150 --#define SNDRV_SEQ_EVENT_KERNEL_QUOTE 151 /* obsolete */ -- --/* 152-191: reserved */ -- --/* 192-254: hardware specific events */ -- --/* 255: special event */ --#define SNDRV_SEQ_EVENT_NONE 255 -- -- --typedef unsigned char snd_seq_event_type_t; -- --/** event address */ --struct snd_seq_addr { -- unsigned char client; /**< Client number: 0..255, 255 = broadcast to all clients */ -- unsigned char port; /**< Port within client: 0..255, 255 = broadcast to all ports */ --}; -- --/** port connection */ --struct snd_seq_connect { -- struct snd_seq_addr sender; -- struct snd_seq_addr dest; --}; -- -- --#define SNDRV_SEQ_ADDRESS_UNKNOWN 253 /* unknown source */ --#define SNDRV_SEQ_ADDRESS_SUBSCRIBERS 254 /* send event to all subscribed ports */ --#define SNDRV_SEQ_ADDRESS_BROADCAST 255 /* send event to all queues/clients/ports/channels */ --#define SNDRV_SEQ_QUEUE_DIRECT 253 /* direct dispatch */ -- -- /* event mode flag - NOTE: only 8 bits available! */ --#define SNDRV_SEQ_TIME_STAMP_TICK (0<<0) /* timestamp in clock ticks */ --#define SNDRV_SEQ_TIME_STAMP_REAL (1<<0) /* timestamp in real time */ --#define SNDRV_SEQ_TIME_STAMP_MASK (1<<0) -- --#define SNDRV_SEQ_TIME_MODE_ABS (0<<1) /* absolute timestamp */ --#define SNDRV_SEQ_TIME_MODE_REL (1<<1) /* relative to current time */ --#define SNDRV_SEQ_TIME_MODE_MASK (1<<1) -- --#define SNDRV_SEQ_EVENT_LENGTH_FIXED (0<<2) /* fixed event size */ --#define SNDRV_SEQ_EVENT_LENGTH_VARIABLE (1<<2) /* variable event size */ --#define SNDRV_SEQ_EVENT_LENGTH_VARUSR (2<<2) /* variable event size - user memory space */ --#define SNDRV_SEQ_EVENT_LENGTH_MASK (3<<2) -- --#define SNDRV_SEQ_PRIORITY_NORMAL (0<<4) /* normal priority */ --#define SNDRV_SEQ_PRIORITY_HIGH (1<<4) /* event should be processed before others */ --#define SNDRV_SEQ_PRIORITY_MASK (1<<4) -- -- -- /* note event */ --struct snd_seq_ev_note { -- unsigned char channel; -- unsigned char note; -- unsigned char velocity; -- unsigned char off_velocity; /* only for SNDRV_SEQ_EVENT_NOTE */ -- unsigned int duration; /* only for SNDRV_SEQ_EVENT_NOTE */ --}; -- -- /* controller event */ --struct snd_seq_ev_ctrl { -- unsigned char channel; -- unsigned char unused1, unused2, unused3; /* pad */ -- unsigned int param; -- signed int value; --}; -- -- /* generic set of bytes (12x8 bit) */ --struct snd_seq_ev_raw8 { -- unsigned char d[12]; /* 8 bit value */ --}; -- -- /* generic set of integers (3x32 bit) */ --struct snd_seq_ev_raw32 { -- unsigned int d[3]; /* 32 bit value */ --}; -- -- /* external stored data */ --struct snd_seq_ev_ext { -- unsigned int len; /* length of data */ -- void *ptr; /* pointer to data (note: maybe 64-bit) */ --} __attribute__((packed)); -- --struct snd_seq_result { -- int event; /* processed event type */ -- int result; --}; -- -- --struct snd_seq_real_time { -- unsigned int tv_sec; /* seconds */ -- unsigned int tv_nsec; /* nanoseconds */ --}; -- --typedef unsigned int snd_seq_tick_time_t; /* midi ticks */ -- --union snd_seq_timestamp { -- snd_seq_tick_time_t tick; -- struct snd_seq_real_time time; --}; -- --struct snd_seq_queue_skew { -- unsigned int value; -- unsigned int base; --}; -- -- /* queue timer control */ --struct snd_seq_ev_queue_control { -- unsigned char queue; /* affected queue */ -- unsigned char pad[3]; /* reserved */ -- union { -- signed int value; /* affected value (e.g. tempo) */ -- union snd_seq_timestamp time; /* time */ -- unsigned int position; /* sync position */ -- struct snd_seq_queue_skew skew; -- unsigned int d32[2]; -- unsigned char d8[8]; -- } param; --}; -- -- /* quoted event - inside the kernel only */ --struct snd_seq_ev_quote { -- struct snd_seq_addr origin; /* original sender */ -- unsigned short value; /* optional data */ -- struct snd_seq_event *event; /* quoted event */ --} __attribute__((packed)); -- -- -- /* sequencer event */ --struct snd_seq_event { -- snd_seq_event_type_t type; /* event type */ -- unsigned char flags; /* event flags */ -- char tag; -- -- unsigned char queue; /* schedule queue */ -- union snd_seq_timestamp time; /* schedule time */ -- -- -- struct snd_seq_addr source; /* source address */ -- struct snd_seq_addr dest; /* destination address */ -- -- union { /* event data... */ -- struct snd_seq_ev_note note; -- struct snd_seq_ev_ctrl control; -- struct snd_seq_ev_raw8 raw8; -- struct snd_seq_ev_raw32 raw32; -- struct snd_seq_ev_ext ext; -- struct snd_seq_ev_queue_control queue; -- union snd_seq_timestamp time; -- struct snd_seq_addr addr; -- struct snd_seq_connect connect; -- struct snd_seq_result result; -- struct snd_seq_ev_quote quote; -- } data; --}; -- -- --/* -- * bounce event - stored as variable size data -- */ --struct snd_seq_event_bounce { -- int err; -- struct snd_seq_event event; -- /* external data follows here. */ --}; -- -- -- /* system information */ --struct snd_seq_system_info { -- int queues; /* maximum queues count */ -- int clients; /* maximum clients count */ -- int ports; /* maximum ports per client */ -- int channels; /* maximum channels per port */ -- int cur_clients; /* current clients */ -- int cur_queues; /* current queues */ -- char reserved[24]; --}; -- -- -- /* system running information */ --struct snd_seq_running_info { -- unsigned char client; /* client id */ -- unsigned char big_endian; /* 1 = big-endian */ -- unsigned char cpu_mode; /* 4 = 32bit, 8 = 64bit */ -- unsigned char pad; /* reserved */ -- unsigned char reserved[12]; --}; -- -- -- /* known client numbers */ --#define SNDRV_SEQ_CLIENT_SYSTEM 0 -- /* internal client numbers */ --#define SNDRV_SEQ_CLIENT_DUMMY 14 /* midi through */ --#define SNDRV_SEQ_CLIENT_OSS 15 /* oss sequencer emulator */ -- -- -- /* client types */ --typedef int __bitwise snd_seq_client_type_t; --#define NO_CLIENT ((__force snd_seq_client_type_t) 0) --#define USER_CLIENT ((__force snd_seq_client_type_t) 1) --#define KERNEL_CLIENT ((__force snd_seq_client_type_t) 2) -- -- /* event filter flags */ --#define SNDRV_SEQ_FILTER_BROADCAST (1<<0) /* accept broadcast messages */ --#define SNDRV_SEQ_FILTER_MULTICAST (1<<1) /* accept multicast messages */ --#define SNDRV_SEQ_FILTER_BOUNCE (1<<2) /* accept bounce event in error */ --#define SNDRV_SEQ_FILTER_USE_EVENT (1<<31) /* use event filter */ -- --struct snd_seq_client_info { -- int client; /* client number to inquire */ -- snd_seq_client_type_t type; /* client type */ -- char name[64]; /* client name */ -- unsigned int filter; /* filter flags */ -- unsigned char multicast_filter[8]; /* multicast filter bitmap */ -- unsigned char event_filter[32]; /* event filter bitmap */ -- int num_ports; /* RO: number of ports */ -- int event_lost; /* number of lost events */ -- int card; /* RO: card number[kernel] */ -- int pid; /* RO: pid[user] */ -- char reserved[56]; /* for future use */ --}; -- -- --/* client pool size */ --struct snd_seq_client_pool { -- int client; /* client number to inquire */ -- int output_pool; /* outgoing (write) pool size */ -- int input_pool; /* incoming (read) pool size */ -- int output_room; /* minimum free pool size for select/blocking mode */ -- int output_free; /* unused size */ -- int input_free; /* unused size */ -- char reserved[64]; --}; -- -- --/* Remove events by specified criteria */ -- --#define SNDRV_SEQ_REMOVE_INPUT (1<<0) /* Flush input queues */ --#define SNDRV_SEQ_REMOVE_OUTPUT (1<<1) /* Flush output queues */ --#define SNDRV_SEQ_REMOVE_DEST (1<<2) /* Restrict by destination q:client:port */ --#define SNDRV_SEQ_REMOVE_DEST_CHANNEL (1<<3) /* Restrict by channel */ --#define SNDRV_SEQ_REMOVE_TIME_BEFORE (1<<4) /* Restrict to before time */ --#define SNDRV_SEQ_REMOVE_TIME_AFTER (1<<5) /* Restrict to time or after */ --#define SNDRV_SEQ_REMOVE_TIME_TICK (1<<6) /* Time is in ticks */ --#define SNDRV_SEQ_REMOVE_EVENT_TYPE (1<<7) /* Restrict to event type */ --#define SNDRV_SEQ_REMOVE_IGNORE_OFF (1<<8) /* Do not flush off events */ --#define SNDRV_SEQ_REMOVE_TAG_MATCH (1<<9) /* Restrict to events with given tag */ -- --struct snd_seq_remove_events { -- unsigned int remove_mode; /* Flags that determine what gets removed */ -- -- union snd_seq_timestamp time; -- -- unsigned char queue; /* Queue for REMOVE_DEST */ -- struct snd_seq_addr dest; /* Address for REMOVE_DEST */ -- unsigned char channel; /* Channel for REMOVE_DEST */ -- -- int type; /* For REMOVE_EVENT_TYPE */ -- char tag; /* Tag for REMOVE_TAG */ -- -- int reserved[10]; /* To allow for future binary compatibility */ -- --}; -- -- -- /* known port numbers */ --#define SNDRV_SEQ_PORT_SYSTEM_TIMER 0 --#define SNDRV_SEQ_PORT_SYSTEM_ANNOUNCE 1 -- -- /* port capabilities (32 bits) */ --#define SNDRV_SEQ_PORT_CAP_READ (1<<0) /* readable from this port */ --#define SNDRV_SEQ_PORT_CAP_WRITE (1<<1) /* writable to this port */ -- --#define SNDRV_SEQ_PORT_CAP_SYNC_READ (1<<2) --#define SNDRV_SEQ_PORT_CAP_SYNC_WRITE (1<<3) -- --#define SNDRV_SEQ_PORT_CAP_DUPLEX (1<<4) -- --#define SNDRV_SEQ_PORT_CAP_SUBS_READ (1<<5) /* allow read subscription */ --#define SNDRV_SEQ_PORT_CAP_SUBS_WRITE (1<<6) /* allow write subscription */ --#define SNDRV_SEQ_PORT_CAP_NO_EXPORT (1<<7) /* routing not allowed */ -- -- /* port type */ --#define SNDRV_SEQ_PORT_TYPE_SPECIFIC (1<<0) /* hardware specific */ --#define SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC (1<<1) /* generic MIDI device */ --#define SNDRV_SEQ_PORT_TYPE_MIDI_GM (1<<2) /* General MIDI compatible device */ --#define SNDRV_SEQ_PORT_TYPE_MIDI_GS (1<<3) /* GS compatible device */ --#define SNDRV_SEQ_PORT_TYPE_MIDI_XG (1<<4) /* XG compatible device */ --#define SNDRV_SEQ_PORT_TYPE_MIDI_MT32 (1<<5) /* MT-32 compatible device */ --#define SNDRV_SEQ_PORT_TYPE_MIDI_GM2 (1<<6) /* General MIDI 2 compatible device */ -- --/* other standards...*/ --#define SNDRV_SEQ_PORT_TYPE_SYNTH (1<<10) /* Synth device (no MIDI compatible - direct wavetable) */ --#define SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE (1<<11) /* Sampling device (support sample download) */ --#define SNDRV_SEQ_PORT_TYPE_SAMPLE (1<<12) /* Sampling device (sample can be downloaded at any time) */ --/*...*/ --#define SNDRV_SEQ_PORT_TYPE_HARDWARE (1<<16) /* driver for a hardware device */ --#define SNDRV_SEQ_PORT_TYPE_SOFTWARE (1<<17) /* implemented in software */ --#define SNDRV_SEQ_PORT_TYPE_SYNTHESIZER (1<<18) /* generates sound */ --#define SNDRV_SEQ_PORT_TYPE_PORT (1<<19) /* connects to other device(s) */ --#define SNDRV_SEQ_PORT_TYPE_APPLICATION (1<<20) /* application (sequencer/editor) */ -- --/* misc. conditioning flags */ --#define SNDRV_SEQ_PORT_FLG_GIVEN_PORT (1<<0) --#define SNDRV_SEQ_PORT_FLG_TIMESTAMP (1<<1) --#define SNDRV_SEQ_PORT_FLG_TIME_REAL (1<<2) -- --struct snd_seq_port_info { -- struct snd_seq_addr addr; /* client/port numbers */ -- char name[64]; /* port name */ -- -- unsigned int capability; /* port capability bits */ -- unsigned int type; /* port type bits */ -- int midi_channels; /* channels per MIDI port */ -- int midi_voices; /* voices per MIDI port */ -- int synth_voices; /* voices per SYNTH port */ -- -- int read_use; /* R/O: subscribers for output (from this port) */ -- int write_use; /* R/O: subscribers for input (to this port) */ -- -- void *kernel; /* reserved for kernel use (must be NULL) */ -- unsigned int flags; /* misc. conditioning */ -- unsigned char time_queue; /* queue # for timestamping */ -- char reserved[59]; /* for future use */ --}; -- -- --/* queue flags */ --#define SNDRV_SEQ_QUEUE_FLG_SYNC (1<<0) /* sync enabled */ -- --/* queue information */ --struct snd_seq_queue_info { -- int queue; /* queue id */ -- -- /* -- * security settings, only owner of this queue can start/stop timer -- * etc. if the queue is locked for other clients -- */ -- int owner; /* client id for owner of the queue */ -- unsigned locked:1; /* timing queue locked for other queues */ -- char name[64]; /* name of this queue */ -- unsigned int flags; /* flags */ -- char reserved[60]; /* for future use */ -- --}; -- --/* queue info/status */ --struct snd_seq_queue_status { -- int queue; /* queue id */ -- int events; /* read-only - queue size */ -- snd_seq_tick_time_t tick; /* current tick */ -- struct snd_seq_real_time time; /* current time */ -- int running; /* running state of queue */ -- int flags; /* various flags */ -- char reserved[64]; /* for the future */ --}; -- -- --/* queue tempo */ --struct snd_seq_queue_tempo { -- int queue; /* sequencer queue */ -- unsigned int tempo; /* current tempo, us/tick */ -- int ppq; /* time resolution, ticks/quarter */ -- unsigned int skew_value; /* queue skew */ -- unsigned int skew_base; /* queue skew base */ -- char reserved[24]; /* for the future */ --}; -- -- --/* sequencer timer sources */ --#define SNDRV_SEQ_TIMER_ALSA 0 /* ALSA timer */ --#define SNDRV_SEQ_TIMER_MIDI_CLOCK 1 /* Midi Clock (CLOCK event) */ --#define SNDRV_SEQ_TIMER_MIDI_TICK 2 /* Midi Timer Tick (TICK event) */ -- --/* queue timer info */ --struct snd_seq_queue_timer { -- int queue; /* sequencer queue */ -- int type; /* source timer type */ -- union { -- struct { -- struct snd_timer_id id; /* ALSA's timer ID */ -- unsigned int resolution; /* resolution in Hz */ -- } alsa; -- } u; -- char reserved[64]; /* for the future use */ --}; -- -- --struct snd_seq_queue_client { -- int queue; /* sequencer queue */ -- int client; /* sequencer client */ -- int used; /* queue is used with this client -- (must be set for accepting events) */ -- /* per client watermarks */ -- char reserved[64]; /* for future use */ --}; -- -- --#define SNDRV_SEQ_PORT_SUBS_EXCLUSIVE (1<<0) /* exclusive connection */ --#define SNDRV_SEQ_PORT_SUBS_TIMESTAMP (1<<1) --#define SNDRV_SEQ_PORT_SUBS_TIME_REAL (1<<2) -- --struct snd_seq_port_subscribe { -- struct snd_seq_addr sender; /* sender address */ -- struct snd_seq_addr dest; /* destination address */ -- unsigned int voices; /* number of voices to be allocated (0 = don't care) */ -- unsigned int flags; /* modes */ -- unsigned char queue; /* input time-stamp queue (optional) */ -- unsigned char pad[3]; /* reserved */ -- char reserved[64]; --}; -- --/* type of query subscription */ --#define SNDRV_SEQ_QUERY_SUBS_READ 0 --#define SNDRV_SEQ_QUERY_SUBS_WRITE 1 -- --struct snd_seq_query_subs { -- struct snd_seq_addr root; /* client/port id to be searched */ -- int type; /* READ or WRITE */ -- int index; /* 0..N-1 */ -- int num_subs; /* R/O: number of subscriptions on this port */ -- struct snd_seq_addr addr; /* R/O: result */ -- unsigned char queue; /* R/O: result */ -- unsigned int flags; /* R/O: result */ -- char reserved[64]; /* for future use */ --}; -- -- --/* -- * IOCTL commands -- */ -- --#define SNDRV_SEQ_IOCTL_PVERSION _IOR ('S', 0x00, int) --#define SNDRV_SEQ_IOCTL_CLIENT_ID _IOR ('S', 0x01, int) --#define SNDRV_SEQ_IOCTL_SYSTEM_INFO _IOWR('S', 0x02, struct snd_seq_system_info) --#define SNDRV_SEQ_IOCTL_RUNNING_MODE _IOWR('S', 0x03, struct snd_seq_running_info) -- --#define SNDRV_SEQ_IOCTL_GET_CLIENT_INFO _IOWR('S', 0x10, struct snd_seq_client_info) --#define SNDRV_SEQ_IOCTL_SET_CLIENT_INFO _IOW ('S', 0x11, struct snd_seq_client_info) -- --#define SNDRV_SEQ_IOCTL_CREATE_PORT _IOWR('S', 0x20, struct snd_seq_port_info) --#define SNDRV_SEQ_IOCTL_DELETE_PORT _IOW ('S', 0x21, struct snd_seq_port_info) --#define SNDRV_SEQ_IOCTL_GET_PORT_INFO _IOWR('S', 0x22, struct snd_seq_port_info) --#define SNDRV_SEQ_IOCTL_SET_PORT_INFO _IOW ('S', 0x23, struct snd_seq_port_info) -- --#define SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT _IOW ('S', 0x30, struct snd_seq_port_subscribe) --#define SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT _IOW ('S', 0x31, struct snd_seq_port_subscribe) -- --#define SNDRV_SEQ_IOCTL_CREATE_QUEUE _IOWR('S', 0x32, struct snd_seq_queue_info) --#define SNDRV_SEQ_IOCTL_DELETE_QUEUE _IOW ('S', 0x33, struct snd_seq_queue_info) --#define SNDRV_SEQ_IOCTL_GET_QUEUE_INFO _IOWR('S', 0x34, struct snd_seq_queue_info) --#define SNDRV_SEQ_IOCTL_SET_QUEUE_INFO _IOWR('S', 0x35, struct snd_seq_queue_info) --#define SNDRV_SEQ_IOCTL_GET_NAMED_QUEUE _IOWR('S', 0x36, struct snd_seq_queue_info) --#define SNDRV_SEQ_IOCTL_GET_QUEUE_STATUS _IOWR('S', 0x40, struct snd_seq_queue_status) --#define SNDRV_SEQ_IOCTL_GET_QUEUE_TEMPO _IOWR('S', 0x41, struct snd_seq_queue_tempo) --#define SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO _IOW ('S', 0x42, struct snd_seq_queue_tempo) --#define SNDRV_SEQ_IOCTL_GET_QUEUE_TIMER _IOWR('S', 0x45, struct snd_seq_queue_timer) --#define SNDRV_SEQ_IOCTL_SET_QUEUE_TIMER _IOW ('S', 0x46, struct snd_seq_queue_timer) --#define SNDRV_SEQ_IOCTL_GET_QUEUE_CLIENT _IOWR('S', 0x49, struct snd_seq_queue_client) --#define SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT _IOW ('S', 0x4a, struct snd_seq_queue_client) --#define SNDRV_SEQ_IOCTL_GET_CLIENT_POOL _IOWR('S', 0x4b, struct snd_seq_client_pool) --#define SNDRV_SEQ_IOCTL_SET_CLIENT_POOL _IOW ('S', 0x4c, struct snd_seq_client_pool) --#define SNDRV_SEQ_IOCTL_REMOVE_EVENTS _IOW ('S', 0x4e, struct snd_seq_remove_events) --#define SNDRV_SEQ_IOCTL_QUERY_SUBS _IOWR('S', 0x4f, struct snd_seq_query_subs) --#define SNDRV_SEQ_IOCTL_GET_SUBSCRIPTION _IOWR('S', 0x50, struct snd_seq_port_subscribe) --#define SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT _IOWR('S', 0x51, struct snd_seq_client_info) --#define SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT _IOWR('S', 0x52, struct snd_seq_port_info) -- --#endif /* _UAPI__SOUND_ASEQUENCER_H */ -+#include -diff --git a/include/sound/asoc.h b/include/sound/asoc.h -index a74ca232..185bba81 100644 ---- a/include/sound/asoc.h -+++ b/include/sound/asoc.h -@@ -1,633 +1 @@ --/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ --/* -- * uapi/sound/asoc.h -- ALSA SoC Firmware Controls and DAPM -- * -- * Copyright (C) 2012 Texas Instruments Inc. -- * Copyright (C) 2015 Intel Corporation. -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * Simple file API to load FW that includes mixers, coefficients, DAPM graphs, -- * algorithms, equalisers, DAIs, widgets etc. --*/ -- --#ifndef __LINUX_UAPI_SND_ASOC_H --#define __LINUX_UAPI_SND_ASOC_H -- --#include --#include -- --/* -- * Maximum number of channels topology kcontrol can represent. -- */ --#define SND_SOC_TPLG_MAX_CHAN 8 -- --/* -- * Maximum number of PCM formats capability -- */ --#define SND_SOC_TPLG_MAX_FORMATS 16 -- --/* -- * Maximum number of PCM stream configs -- */ --#define SND_SOC_TPLG_STREAM_CONFIG_MAX 8 -- --/* -- * Maximum number of physical link's hardware configs -- */ --#define SND_SOC_TPLG_HW_CONFIG_MAX 8 -- --/* individual kcontrol info types - can be mixed with other types */ --#define SND_SOC_TPLG_CTL_VOLSW 1 --#define SND_SOC_TPLG_CTL_VOLSW_SX 2 --#define SND_SOC_TPLG_CTL_VOLSW_XR_SX 3 --#define SND_SOC_TPLG_CTL_ENUM 4 --#define SND_SOC_TPLG_CTL_BYTES 5 --#define SND_SOC_TPLG_CTL_ENUM_VALUE 6 --#define SND_SOC_TPLG_CTL_RANGE 7 --#define SND_SOC_TPLG_CTL_STROBE 8 -- -- --/* individual widget kcontrol info types - can be mixed with other types */ --#define SND_SOC_TPLG_DAPM_CTL_VOLSW 64 --#define SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE 65 --#define SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT 66 --#define SND_SOC_TPLG_DAPM_CTL_ENUM_VALUE 67 --#define SND_SOC_TPLG_DAPM_CTL_PIN 68 -- --/* DAPM widget types - add new items to the end */ --#define SND_SOC_TPLG_DAPM_INPUT 0 --#define SND_SOC_TPLG_DAPM_OUTPUT 1 --#define SND_SOC_TPLG_DAPM_MUX 2 --#define SND_SOC_TPLG_DAPM_MIXER 3 --#define SND_SOC_TPLG_DAPM_PGA 4 --#define SND_SOC_TPLG_DAPM_OUT_DRV 5 --#define SND_SOC_TPLG_DAPM_ADC 6 --#define SND_SOC_TPLG_DAPM_DAC 7 --#define SND_SOC_TPLG_DAPM_SWITCH 8 --#define SND_SOC_TPLG_DAPM_PRE 9 --#define SND_SOC_TPLG_DAPM_POST 10 --#define SND_SOC_TPLG_DAPM_AIF_IN 11 --#define SND_SOC_TPLG_DAPM_AIF_OUT 12 --#define SND_SOC_TPLG_DAPM_DAI_IN 13 --#define SND_SOC_TPLG_DAPM_DAI_OUT 14 --#define SND_SOC_TPLG_DAPM_DAI_LINK 15 --#define SND_SOC_TPLG_DAPM_BUFFER 16 --#define SND_SOC_TPLG_DAPM_SCHEDULER 17 --#define SND_SOC_TPLG_DAPM_EFFECT 18 --#define SND_SOC_TPLG_DAPM_SIGGEN 19 --#define SND_SOC_TPLG_DAPM_SRC 20 --#define SND_SOC_TPLG_DAPM_ASRC 21 --#define SND_SOC_TPLG_DAPM_ENCODER 22 --#define SND_SOC_TPLG_DAPM_DECODER 23 --#define SND_SOC_TPLG_DAPM_LAST SND_SOC_TPLG_DAPM_DECODER -- --/* Header magic number and string sizes */ --#define SND_SOC_TPLG_MAGIC 0x41536F43 /* ASoC */ -- --/* string sizes */ --#define SND_SOC_TPLG_NUM_TEXTS 16 -- --/* ABI version */ --#define SND_SOC_TPLG_ABI_VERSION 0x5 /* current version */ --#define SND_SOC_TPLG_ABI_VERSION_MIN 0x4 /* oldest version supported */ -- --/* Max size of TLV data */ --#define SND_SOC_TPLG_TLV_SIZE 32 -- --/* -- * File and Block header data types. -- * Add new generic and vendor types to end of list. -- * Generic types are handled by the core whilst vendors types are passed -- * to the component drivers for handling. -- */ --#define SND_SOC_TPLG_TYPE_MIXER 1 --#define SND_SOC_TPLG_TYPE_BYTES 2 --#define SND_SOC_TPLG_TYPE_ENUM 3 --#define SND_SOC_TPLG_TYPE_DAPM_GRAPH 4 --#define SND_SOC_TPLG_TYPE_DAPM_WIDGET 5 --#define SND_SOC_TPLG_TYPE_DAI_LINK 6 --#define SND_SOC_TPLG_TYPE_PCM 7 --#define SND_SOC_TPLG_TYPE_MANIFEST 8 --#define SND_SOC_TPLG_TYPE_CODEC_LINK 9 --#define SND_SOC_TPLG_TYPE_BACKEND_LINK 10 --#define SND_SOC_TPLG_TYPE_PDATA 11 --#define SND_SOC_TPLG_TYPE_DAI 12 --#define SND_SOC_TPLG_TYPE_MAX SND_SOC_TPLG_TYPE_DAI -- --/* vendor block IDs - please add new vendor types to end */ --#define SND_SOC_TPLG_TYPE_VENDOR_FW 1000 --#define SND_SOC_TPLG_TYPE_VENDOR_CONFIG 1001 --#define SND_SOC_TPLG_TYPE_VENDOR_COEFF 1002 --#define SND_SOC_TPLG_TYPEVENDOR_CODEC 1003 -- --#define SND_SOC_TPLG_STREAM_PLAYBACK 0 --#define SND_SOC_TPLG_STREAM_CAPTURE 1 -- --/* vendor tuple types */ --#define SND_SOC_TPLG_TUPLE_TYPE_UUID 0 --#define SND_SOC_TPLG_TUPLE_TYPE_STRING 1 --#define SND_SOC_TPLG_TUPLE_TYPE_BOOL 2 --#define SND_SOC_TPLG_TUPLE_TYPE_BYTE 3 --#define SND_SOC_TPLG_TUPLE_TYPE_WORD 4 --#define SND_SOC_TPLG_TUPLE_TYPE_SHORT 5 -- --/* DAI flags */ --#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_RATES (1 << 0) --#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_CHANNELS (1 << 1) --#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2) -- --/* DAI clock gating */ --#define SND_SOC_TPLG_DAI_CLK_GATE_UNDEFINED 0 --#define SND_SOC_TPLG_DAI_CLK_GATE_GATED 1 --#define SND_SOC_TPLG_DAI_CLK_GATE_CONT 2 -- --/* DAI mclk_direction */ --#define SND_SOC_TPLG_MCLK_CO 0 /* for codec, mclk is output */ --#define SND_SOC_TPLG_MCLK_CI 1 /* for codec, mclk is input */ -- --/* DAI physical PCM data formats. -- * Add new formats to the end of the list. -- */ --#define SND_SOC_DAI_FORMAT_I2S 1 /* I2S mode */ --#define SND_SOC_DAI_FORMAT_RIGHT_J 2 /* Right Justified mode */ --#define SND_SOC_DAI_FORMAT_LEFT_J 3 /* Left Justified mode */ --#define SND_SOC_DAI_FORMAT_DSP_A 4 /* L data MSB after FRM LRC */ --#define SND_SOC_DAI_FORMAT_DSP_B 5 /* L data MSB during FRM LRC */ --#define SND_SOC_DAI_FORMAT_AC97 6 /* AC97 */ --#define SND_SOC_DAI_FORMAT_PDM 7 /* Pulse density modulation */ -- --/* left and right justified also known as MSB and LSB respectively */ --#define SND_SOC_DAI_FORMAT_MSB SND_SOC_DAI_FORMAT_LEFT_J --#define SND_SOC_DAI_FORMAT_LSB SND_SOC_DAI_FORMAT_RIGHT_J -- --/* DAI link flags */ --#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_RATES (1 << 0) --#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_CHANNELS (1 << 1) --#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2) --#define SND_SOC_TPLG_LNK_FLGBIT_VOICE_WAKEUP (1 << 3) -- --/* DAI topology BCLK parameter -- * For the backwards capability, by default codec is bclk master -- */ --#define SND_SOC_TPLG_BCLK_CM 0 /* codec is bclk master */ --#define SND_SOC_TPLG_BCLK_CS 1 /* codec is bclk slave */ -- --/* DAI topology FSYNC parameter -- * For the backwards capability, by default codec is fsync master -- */ --#define SND_SOC_TPLG_FSYNC_CM 0 /* codec is fsync master */ --#define SND_SOC_TPLG_FSYNC_CS 1 /* codec is fsync slave */ -- --/* -- * Block Header. -- * This header precedes all object and object arrays below. -- */ --struct snd_soc_tplg_hdr { -- __le32 magic; /* magic number */ -- __le32 abi; /* ABI version */ -- __le32 version; /* optional vendor specific version details */ -- __le32 type; /* SND_SOC_TPLG_TYPE_ */ -- __le32 size; /* size of this structure */ -- __le32 vendor_type; /* optional vendor specific type info */ -- __le32 payload_size; /* data bytes, excluding this header */ -- __le32 index; /* identifier for block */ -- __le32 count; /* number of elements in block */ --} __attribute__((packed)); -- --/* vendor tuple for uuid */ --struct snd_soc_tplg_vendor_uuid_elem { -- __le32 token; -- char uuid[16]; --} __attribute__((packed)); -- --/* vendor tuple for a bool/byte/short/word value */ --struct snd_soc_tplg_vendor_value_elem { -- __le32 token; -- __le32 value; --} __attribute__((packed)); -- --/* vendor tuple for string */ --struct snd_soc_tplg_vendor_string_elem { -- __le32 token; -- char string[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; --} __attribute__((packed)); -- --struct snd_soc_tplg_vendor_array { -- __le32 size; /* size in bytes of the array, including all elements */ -- __le32 type; /* SND_SOC_TPLG_TUPLE_TYPE_ */ -- __le32 num_elems; /* number of elements in array */ -- union { -- struct snd_soc_tplg_vendor_uuid_elem uuid[0]; -- struct snd_soc_tplg_vendor_value_elem value[0]; -- struct snd_soc_tplg_vendor_string_elem string[0]; -- }; --} __attribute__((packed)); -- --/* -- * Private data. -- * All topology objects may have private data that can be used by the driver or -- * firmware. Core will ignore this data. -- */ --struct snd_soc_tplg_private { -- __le32 size; /* in bytes of private data */ -- union { -- char data[0]; -- struct snd_soc_tplg_vendor_array array[0]; -- }; --} __attribute__((packed)); -- --/* -- * Kcontrol TLV data. -- */ --struct snd_soc_tplg_tlv_dbscale { -- __le32 min; -- __le32 step; -- __le32 mute; --} __attribute__((packed)); -- --struct snd_soc_tplg_ctl_tlv { -- __le32 size; /* in bytes of this structure */ -- __le32 type; /* SNDRV_CTL_TLVT_*, type of TLV */ -- union { -- __le32 data[SND_SOC_TPLG_TLV_SIZE]; -- struct snd_soc_tplg_tlv_dbscale scale; -- }; --} __attribute__((packed)); -- --/* -- * Kcontrol channel data -- */ --struct snd_soc_tplg_channel { -- __le32 size; /* in bytes of this structure */ -- __le32 reg; -- __le32 shift; -- __le32 id; /* ID maps to Left, Right, LFE etc */ --} __attribute__((packed)); -- --/* -- * Genericl Operations IDs, for binding Kcontrol or Bytes ext ops -- * Kcontrol ops need get/put/info. -- * Bytes ext ops need get/put. -- */ --struct snd_soc_tplg_io_ops { -- __le32 get; -- __le32 put; -- __le32 info; --} __attribute__((packed)); -- --/* -- * kcontrol header -- */ --struct snd_soc_tplg_ctl_hdr { -- __le32 size; /* in bytes of this structure */ -- __le32 type; -- char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -- __le32 access; -- struct snd_soc_tplg_io_ops ops; -- struct snd_soc_tplg_ctl_tlv tlv; --} __attribute__((packed)); -- --/* -- * Stream Capabilities -- */ --struct snd_soc_tplg_stream_caps { -- __le32 size; /* in bytes of this structure */ -- char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -- __le64 formats; /* supported formats SNDRV_PCM_FMTBIT_* */ -- __le32 rates; /* supported rates SNDRV_PCM_RATE_* */ -- __le32 rate_min; /* min rate */ -- __le32 rate_max; /* max rate */ -- __le32 channels_min; /* min channels */ -- __le32 channels_max; /* max channels */ -- __le32 periods_min; /* min number of periods */ -- __le32 periods_max; /* max number of periods */ -- __le32 period_size_min; /* min period size bytes */ -- __le32 period_size_max; /* max period size bytes */ -- __le32 buffer_size_min; /* min buffer size bytes */ -- __le32 buffer_size_max; /* max buffer size bytes */ -- __le32 sig_bits; /* number of bits of content */ --} __attribute__((packed)); -- --/* -- * FE or BE Stream configuration supported by SW/FW -- */ --struct snd_soc_tplg_stream { -- __le32 size; /* in bytes of this structure */ -- char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* Name of the stream */ -- __le64 format; /* SNDRV_PCM_FMTBIT_* */ -- __le32 rate; /* SNDRV_PCM_RATE_* */ -- __le32 period_bytes; /* size of period in bytes */ -- __le32 buffer_bytes; /* size of buffer in bytes */ -- __le32 channels; /* channels */ --} __attribute__((packed)); -- -- --/* -- * Describes a physical link's runtime supported hardware config, -- * i.e. hardware audio formats. -- */ --struct snd_soc_tplg_hw_config { -- __le32 size; /* in bytes of this structure */ -- __le32 id; /* unique ID - - used to match */ -- __le32 fmt; /* SND_SOC_DAI_FORMAT_ format value */ -- __u8 clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */ -- __u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */ -- __u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */ -- __u8 bclk_master; /* SND_SOC_TPLG_BCLK_ value */ -- __u8 fsync_master; /* SND_SOC_TPLG_FSYNC_ value */ -- __u8 mclk_direction; /* SND_SOC_TPLG_MCLK_ value */ -- __le16 reserved; /* for 32bit alignment */ -- __le32 mclk_rate; /* MCLK or SYSCLK freqency in Hz */ -- __le32 bclk_rate; /* BCLK freqency in Hz */ -- __le32 fsync_rate; /* frame clock in Hz */ -- __le32 tdm_slots; /* number of TDM slots in use */ -- __le32 tdm_slot_width; /* width in bits for each slot */ -- __le32 tx_slots; /* bit mask for active Tx slots */ -- __le32 rx_slots; /* bit mask for active Rx slots */ -- __le32 tx_channels; /* number of Tx channels */ -- __le32 tx_chanmap[SND_SOC_TPLG_MAX_CHAN]; /* array of slot number */ -- __le32 rx_channels; /* number of Rx channels */ -- __le32 rx_chanmap[SND_SOC_TPLG_MAX_CHAN]; /* array of slot number */ --} __attribute__((packed)); -- --/* -- * Manifest. List totals for each payload type. Not used in parsing, but will -- * be passed to the component driver before any other objects in order for any -- * global component resource allocations. -- * -- * File block representation for manifest :- -- * +-----------------------------------+----+ -- * | struct snd_soc_tplg_hdr | 1 | -- * +-----------------------------------+----+ -- * | struct snd_soc_tplg_manifest | 1 | -- * +-----------------------------------+----+ -- */ --struct snd_soc_tplg_manifest { -- __le32 size; /* in bytes of this structure */ -- __le32 control_elems; /* number of control elements */ -- __le32 widget_elems; /* number of widget elements */ -- __le32 graph_elems; /* number of graph elements */ -- __le32 pcm_elems; /* number of PCM elements */ -- __le32 dai_link_elems; /* number of DAI link elements */ -- __le32 dai_elems; /* number of physical DAI elements */ -- __le32 reserved[20]; /* reserved for new ABI element types */ -- struct snd_soc_tplg_private priv; --} __attribute__((packed)); -- --/* -- * Mixer kcontrol. -- * -- * File block representation for mixer kcontrol :- -- * +-----------------------------------+----+ -- * | struct snd_soc_tplg_hdr | 1 | -- * +-----------------------------------+----+ -- * | struct snd_soc_tplg_mixer_control | N | -- * +-----------------------------------+----+ -- */ --struct snd_soc_tplg_mixer_control { -- struct snd_soc_tplg_ctl_hdr hdr; -- __le32 size; /* in bytes of this structure */ -- __le32 min; -- __le32 max; -- __le32 platform_max; -- __le32 invert; -- __le32 num_channels; -- struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN]; -- struct snd_soc_tplg_private priv; --} __attribute__((packed)); -- --/* -- * Enumerated kcontrol -- * -- * File block representation for enum kcontrol :- -- * +-----------------------------------+----+ -- * | struct snd_soc_tplg_hdr | 1 | -- * +-----------------------------------+----+ -- * | struct snd_soc_tplg_enum_control | N | -- * +-----------------------------------+----+ -- */ --struct snd_soc_tplg_enum_control { -- struct snd_soc_tplg_ctl_hdr hdr; -- __le32 size; /* in bytes of this structure */ -- __le32 num_channels; -- struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN]; -- __le32 items; -- __le32 mask; -- __le32 count; -- char texts[SND_SOC_TPLG_NUM_TEXTS][SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -- __le32 values[SND_SOC_TPLG_NUM_TEXTS * SNDRV_CTL_ELEM_ID_NAME_MAXLEN / 4]; -- struct snd_soc_tplg_private priv; --} __attribute__((packed)); -- --/* -- * Bytes kcontrol -- * -- * File block representation for bytes kcontrol :- -- * +-----------------------------------+----+ -- * | struct snd_soc_tplg_hdr | 1 | -- * +-----------------------------------+----+ -- * | struct snd_soc_tplg_bytes_control | N | -- * +-----------------------------------+----+ -- */ --struct snd_soc_tplg_bytes_control { -- struct snd_soc_tplg_ctl_hdr hdr; -- __le32 size; /* in bytes of this structure */ -- __le32 max; -- __le32 mask; -- __le32 base; -- __le32 num_regs; -- struct snd_soc_tplg_io_ops ext_ops; -- struct snd_soc_tplg_private priv; --} __attribute__((packed)); -- --/* -- * DAPM Graph Element -- * -- * File block representation for DAPM graph elements :- -- * +-------------------------------------+----+ -- * | struct snd_soc_tplg_hdr | 1 | -- * +-------------------------------------+----+ -- * | struct snd_soc_tplg_dapm_graph_elem | N | -- * +-------------------------------------+----+ -- */ --struct snd_soc_tplg_dapm_graph_elem { -- char sink[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -- char control[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -- char source[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; --} __attribute__((packed)); -- --/* -- * DAPM Widget. -- * -- * File block representation for DAPM widget :- -- * +-------------------------------------+-----+ -- * | struct snd_soc_tplg_hdr | 1 | -- * +-------------------------------------+-----+ -- * | struct snd_soc_tplg_dapm_widget | N | -- * +-------------------------------------+-----+ -- * | struct snd_soc_tplg_enum_control | 0|1 | -- * | struct snd_soc_tplg_mixer_control | 0|N | -- * +-------------------------------------+-----+ -- * -- * Optional enum or mixer control can be appended to the end of each widget -- * in the block. -- */ --struct snd_soc_tplg_dapm_widget { -- __le32 size; /* in bytes of this structure */ -- __le32 id; /* SND_SOC_DAPM_CTL */ -- char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -- char sname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -- -- __le32 reg; /* negative reg = no direct dapm */ -- __le32 shift; /* bits to shift */ -- __le32 mask; /* non-shifted mask */ -- __le32 subseq; /* sort within widget type */ -- __le32 invert; /* invert the power bit */ -- __le32 ignore_suspend; /* kept enabled over suspend */ -- __le16 event_flags; -- __le16 event_type; -- __le32 num_kcontrols; -- struct snd_soc_tplg_private priv; -- /* -- * kcontrols that relate to this widget -- * follow here after widget private data -- */ --} __attribute__((packed)); -- -- --/* -- * Describes SW/FW specific features of PCM (FE DAI & DAI link). -- * -- * File block representation for PCM :- -- * +-----------------------------------+-----+ -- * | struct snd_soc_tplg_hdr | 1 | -- * +-----------------------------------+-----+ -- * | struct snd_soc_tplg_pcm | N | -- * +-----------------------------------+-----+ -- */ --struct snd_soc_tplg_pcm { -- __le32 size; /* in bytes of this structure */ -- char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -- char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -- __le32 pcm_id; /* unique ID - used to match with DAI link */ -- __le32 dai_id; /* unique ID - used to match */ -- __le32 playback; /* supports playback mode */ -- __le32 capture; /* supports capture mode */ -- __le32 compress; /* 1 = compressed; 0 = PCM */ -- struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */ -- __le32 num_streams; /* number of streams */ -- struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */ -- __le32 flag_mask; /* bitmask of flags to configure */ -- __le32 flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */ -- struct snd_soc_tplg_private priv; --} __attribute__((packed)); -- -- --/* -- * Describes the physical link runtime supported configs or params -- * -- * File block representation for physical link config :- -- * +-----------------------------------+-----+ -- * | struct snd_soc_tplg_hdr | 1 | -- * +-----------------------------------+-----+ -- * | struct snd_soc_tplg_link_config | N | -- * +-----------------------------------+-----+ -- */ --struct snd_soc_tplg_link_config { -- __le32 size; /* in bytes of this structure */ -- __le32 id; /* unique ID - used to match */ -- char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* name - used to match */ -- char stream_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* stream name - used to match */ -- struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* supported configs playback and captrure */ -- __le32 num_streams; /* number of streams */ -- struct snd_soc_tplg_hw_config hw_config[SND_SOC_TPLG_HW_CONFIG_MAX]; /* hw configs */ -- __le32 num_hw_configs; /* number of hw configs */ -- __le32 default_hw_config_id; /* default hw config ID for init */ -- __le32 flag_mask; /* bitmask of flags to configure */ -- __le32 flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */ -- struct snd_soc_tplg_private priv; --} __attribute__((packed)); -- --/* -- * Describes SW/FW specific features of physical DAI. -- * It can be used to configure backend DAIs for DPCM. -- * -- * File block representation for physical DAI :- -- * +-----------------------------------+-----+ -- * | struct snd_soc_tplg_hdr | 1 | -- * +-----------------------------------+-----+ -- * | struct snd_soc_tplg_dai | N | -- * +-----------------------------------+-----+ -- */ --struct snd_soc_tplg_dai { -- __le32 size; /* in bytes of this structure */ -- char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* name - used to match */ -- __le32 dai_id; /* unique ID - used to match */ -- __le32 playback; /* supports playback mode */ -- __le32 capture; /* supports capture mode */ -- struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */ -- __le32 flag_mask; /* bitmask of flags to configure */ -- __le32 flags; /* SND_SOC_TPLG_DAI_FLGBIT_* */ -- struct snd_soc_tplg_private priv; --} __attribute__((packed)); -- --/* -- * Old version of ABI structs, supported for backward compatibility. -- */ -- --/* Manifest v4 */ --struct snd_soc_tplg_manifest_v4 { -- __le32 size; /* in bytes of this structure */ -- __le32 control_elems; /* number of control elements */ -- __le32 widget_elems; /* number of widget elements */ -- __le32 graph_elems; /* number of graph elements */ -- __le32 pcm_elems; /* number of PCM elements */ -- __le32 dai_link_elems; /* number of DAI link elements */ -- struct snd_soc_tplg_private priv; --} __packed; -- --/* Stream Capabilities v4 */ --struct snd_soc_tplg_stream_caps_v4 { -- __le32 size; /* in bytes of this structure */ -- char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -- __le64 formats; /* supported formats SNDRV_PCM_FMTBIT_* */ -- __le32 rates; /* supported rates SNDRV_PCM_RATE_* */ -- __le32 rate_min; /* min rate */ -- __le32 rate_max; /* max rate */ -- __le32 channels_min; /* min channels */ -- __le32 channels_max; /* max channels */ -- __le32 periods_min; /* min number of periods */ -- __le32 periods_max; /* max number of periods */ -- __le32 period_size_min; /* min period size bytes */ -- __le32 period_size_max; /* max period size bytes */ -- __le32 buffer_size_min; /* min buffer size bytes */ -- __le32 buffer_size_max; /* max buffer size bytes */ --} __packed; -- --/* PCM v4 */ --struct snd_soc_tplg_pcm_v4 { -- __le32 size; /* in bytes of this structure */ -- char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -- char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -- __le32 pcm_id; /* unique ID - used to match with DAI link */ -- __le32 dai_id; /* unique ID - used to match */ -- __le32 playback; /* supports playback mode */ -- __le32 capture; /* supports capture mode */ -- __le32 compress; /* 1 = compressed; 0 = PCM */ -- struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */ -- __le32 num_streams; /* number of streams */ -- struct snd_soc_tplg_stream_caps_v4 caps[2]; /* playback and capture for DAI */ --} __packed; -- --/* Physical link config v4 */ --struct snd_soc_tplg_link_config_v4 { -- __le32 size; /* in bytes of this structure */ -- __le32 id; /* unique ID - used to match */ -- struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* supported configs playback and captrure */ -- __le32 num_streams; /* number of streams */ --} __packed; -- --#endif -+#include -diff --git a/include/sound/asound.h b/include/sound/asound.h -index df1153ce..3be4d850 100644 ---- a/include/sound/asound.h -+++ b/include/sound/asound.h -@@ -1,1038 +1 @@ --/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ --/* -- * Advanced Linux Sound Architecture - ALSA - Driver -- * Copyright (c) 1994-2003 by Jaroslav Kysela , -- * Abramo Bagnara -- * -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -- * -- */ -- --#ifndef _UAPI__SOUND_ASOUND_H --#define _UAPI__SOUND_ASOUND_H -- --#if defined(__KERNEL__) || defined(__linux__) --#include --#else --#include --#endif -- --#ifndef __KERNEL__ --#include --#include --#endif -- --/* -- * protocol version -- */ -- --#define SNDRV_PROTOCOL_VERSION(major, minor, subminor) (((major)<<16)|((minor)<<8)|(subminor)) --#define SNDRV_PROTOCOL_MAJOR(version) (((version)>>16)&0xffff) --#define SNDRV_PROTOCOL_MINOR(version) (((version)>>8)&0xff) --#define SNDRV_PROTOCOL_MICRO(version) ((version)&0xff) --#define SNDRV_PROTOCOL_INCOMPATIBLE(kversion, uversion) \ -- (SNDRV_PROTOCOL_MAJOR(kversion) != SNDRV_PROTOCOL_MAJOR(uversion) || \ -- (SNDRV_PROTOCOL_MAJOR(kversion) == SNDRV_PROTOCOL_MAJOR(uversion) && \ -- SNDRV_PROTOCOL_MINOR(kversion) != SNDRV_PROTOCOL_MINOR(uversion))) -- --/**************************************************************************** -- * * -- * Digital audio interface * -- * * -- ****************************************************************************/ -- --struct snd_aes_iec958 { -- unsigned char status[24]; /* AES/IEC958 channel status bits */ -- unsigned char subcode[147]; /* AES/IEC958 subcode bits */ -- unsigned char pad; /* nothing */ -- unsigned char dig_subframe[4]; /* AES/IEC958 subframe bits */ --}; -- --/**************************************************************************** -- * * -- * CEA-861 Audio InfoFrame. Used in HDMI and DisplayPort * -- * * -- ****************************************************************************/ -- --struct snd_cea_861_aud_if { -- unsigned char db1_ct_cc; /* coding type and channel count */ -- unsigned char db2_sf_ss; /* sample frequency and size */ -- unsigned char db3; /* not used, all zeros */ -- unsigned char db4_ca; /* channel allocation code */ -- unsigned char db5_dminh_lsv; /* downmix inhibit & level-shit values */ --}; -- --/**************************************************************************** -- * * -- * Section for driver hardware dependent interface - /dev/snd/hw? * -- * * -- ****************************************************************************/ -- --#define SNDRV_HWDEP_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 1) -- --enum { -- SNDRV_HWDEP_IFACE_OPL2 = 0, -- SNDRV_HWDEP_IFACE_OPL3, -- SNDRV_HWDEP_IFACE_OPL4, -- SNDRV_HWDEP_IFACE_SB16CSP, /* Creative Signal Processor */ -- SNDRV_HWDEP_IFACE_EMU10K1, /* FX8010 processor in EMU10K1 chip */ -- SNDRV_HWDEP_IFACE_YSS225, /* Yamaha FX processor */ -- SNDRV_HWDEP_IFACE_ICS2115, /* Wavetable synth */ -- SNDRV_HWDEP_IFACE_SSCAPE, /* Ensoniq SoundScape ISA card (MC68EC000) */ -- SNDRV_HWDEP_IFACE_VX, /* Digigram VX cards */ -- SNDRV_HWDEP_IFACE_MIXART, /* Digigram miXart cards */ -- SNDRV_HWDEP_IFACE_USX2Y, /* Tascam US122, US224 & US428 usb */ -- SNDRV_HWDEP_IFACE_EMUX_WAVETABLE, /* EmuX wavetable */ -- SNDRV_HWDEP_IFACE_BLUETOOTH, /* Bluetooth audio */ -- SNDRV_HWDEP_IFACE_USX2Y_PCM, /* Tascam US122, US224 & US428 rawusb pcm */ -- SNDRV_HWDEP_IFACE_PCXHR, /* Digigram PCXHR */ -- SNDRV_HWDEP_IFACE_SB_RC, /* SB Extigy/Audigy2NX remote control */ -- SNDRV_HWDEP_IFACE_HDA, /* HD-audio */ -- SNDRV_HWDEP_IFACE_USB_STREAM, /* direct access to usb stream */ -- SNDRV_HWDEP_IFACE_FW_DICE, /* TC DICE FireWire device */ -- SNDRV_HWDEP_IFACE_FW_FIREWORKS, /* Echo Audio Fireworks based device */ -- SNDRV_HWDEP_IFACE_FW_BEBOB, /* BridgeCo BeBoB based device */ -- SNDRV_HWDEP_IFACE_FW_OXFW, /* Oxford OXFW970/971 based device */ -- SNDRV_HWDEP_IFACE_FW_DIGI00X, /* Digidesign Digi 002/003 family */ -- SNDRV_HWDEP_IFACE_FW_TASCAM, /* TASCAM FireWire series */ -- SNDRV_HWDEP_IFACE_LINE6, /* Line6 USB processors */ -- SNDRV_HWDEP_IFACE_FW_MOTU, /* MOTU FireWire series */ -- SNDRV_HWDEP_IFACE_FW_FIREFACE, /* RME Fireface series */ -- -- /* Don't forget to change the following: */ -- SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_FW_FIREFACE --}; -- --struct snd_hwdep_info { -- unsigned int device; /* WR: device number */ -- int card; /* R: card number */ -- unsigned char id[64]; /* ID (user selectable) */ -- unsigned char name[80]; /* hwdep name */ -- int iface; /* hwdep interface */ -- unsigned char reserved[64]; /* reserved for future */ --}; -- --/* generic DSP loader */ --struct snd_hwdep_dsp_status { -- unsigned int version; /* R: driver-specific version */ -- unsigned char id[32]; /* R: driver-specific ID string */ -- unsigned int num_dsps; /* R: number of DSP images to transfer */ -- unsigned int dsp_loaded; /* R: bit flags indicating the loaded DSPs */ -- unsigned int chip_ready; /* R: 1 = initialization finished */ -- unsigned char reserved[16]; /* reserved for future use */ --}; -- --struct snd_hwdep_dsp_image { -- unsigned int index; /* W: DSP index */ -- unsigned char name[64]; /* W: ID (e.g. file name) */ -- unsigned char __user *image; /* W: binary image */ -- size_t length; /* W: size of image in bytes */ -- unsigned long driver_data; /* W: driver-specific data */ --}; -- --#define SNDRV_HWDEP_IOCTL_PVERSION _IOR ('H', 0x00, int) --#define SNDRV_HWDEP_IOCTL_INFO _IOR ('H', 0x01, struct snd_hwdep_info) --#define SNDRV_HWDEP_IOCTL_DSP_STATUS _IOR('H', 0x02, struct snd_hwdep_dsp_status) --#define SNDRV_HWDEP_IOCTL_DSP_LOAD _IOW('H', 0x03, struct snd_hwdep_dsp_image) -- --/***************************************************************************** -- * * -- * Digital Audio (PCM) interface - /dev/snd/pcm?? * -- * * -- *****************************************************************************/ -- --#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 14) -- --typedef unsigned long snd_pcm_uframes_t; --typedef signed long snd_pcm_sframes_t; -- --enum { -- SNDRV_PCM_CLASS_GENERIC = 0, /* standard mono or stereo device */ -- SNDRV_PCM_CLASS_MULTI, /* multichannel device */ -- SNDRV_PCM_CLASS_MODEM, /* software modem class */ -- SNDRV_PCM_CLASS_DIGITIZER, /* digitizer class */ -- /* Don't forget to change the following: */ -- SNDRV_PCM_CLASS_LAST = SNDRV_PCM_CLASS_DIGITIZER, --}; -- --enum { -- SNDRV_PCM_SUBCLASS_GENERIC_MIX = 0, /* mono or stereo subdevices are mixed together */ -- SNDRV_PCM_SUBCLASS_MULTI_MIX, /* multichannel subdevices are mixed together */ -- /* Don't forget to change the following: */ -- SNDRV_PCM_SUBCLASS_LAST = SNDRV_PCM_SUBCLASS_MULTI_MIX, --}; -- --enum { -- SNDRV_PCM_STREAM_PLAYBACK = 0, -- SNDRV_PCM_STREAM_CAPTURE, -- SNDRV_PCM_STREAM_LAST = SNDRV_PCM_STREAM_CAPTURE, --}; -- --typedef int __bitwise snd_pcm_access_t; --#define SNDRV_PCM_ACCESS_MMAP_INTERLEAVED ((__force snd_pcm_access_t) 0) /* interleaved mmap */ --#define SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED ((__force snd_pcm_access_t) 1) /* noninterleaved mmap */ --#define SNDRV_PCM_ACCESS_MMAP_COMPLEX ((__force snd_pcm_access_t) 2) /* complex mmap */ --#define SNDRV_PCM_ACCESS_RW_INTERLEAVED ((__force snd_pcm_access_t) 3) /* readi/writei */ --#define SNDRV_PCM_ACCESS_RW_NONINTERLEAVED ((__force snd_pcm_access_t) 4) /* readn/writen */ --#define SNDRV_PCM_ACCESS_LAST SNDRV_PCM_ACCESS_RW_NONINTERLEAVED -- --typedef int __bitwise snd_pcm_format_t; --#define SNDRV_PCM_FORMAT_S8 ((__force snd_pcm_format_t) 0) --#define SNDRV_PCM_FORMAT_U8 ((__force snd_pcm_format_t) 1) --#define SNDRV_PCM_FORMAT_S16_LE ((__force snd_pcm_format_t) 2) --#define SNDRV_PCM_FORMAT_S16_BE ((__force snd_pcm_format_t) 3) --#define SNDRV_PCM_FORMAT_U16_LE ((__force snd_pcm_format_t) 4) --#define SNDRV_PCM_FORMAT_U16_BE ((__force snd_pcm_format_t) 5) --#define SNDRV_PCM_FORMAT_S24_LE ((__force snd_pcm_format_t) 6) /* low three bytes */ --#define SNDRV_PCM_FORMAT_S24_BE ((__force snd_pcm_format_t) 7) /* low three bytes */ --#define SNDRV_PCM_FORMAT_U24_LE ((__force snd_pcm_format_t) 8) /* low three bytes */ --#define SNDRV_PCM_FORMAT_U24_BE ((__force snd_pcm_format_t) 9) /* low three bytes */ --#define SNDRV_PCM_FORMAT_S32_LE ((__force snd_pcm_format_t) 10) --#define SNDRV_PCM_FORMAT_S32_BE ((__force snd_pcm_format_t) 11) --#define SNDRV_PCM_FORMAT_U32_LE ((__force snd_pcm_format_t) 12) --#define SNDRV_PCM_FORMAT_U32_BE ((__force snd_pcm_format_t) 13) --#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 */ --#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 */ --#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 */ --#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 */ --#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE ((__force snd_pcm_format_t) 18) /* IEC-958 subframe, Little Endian */ --#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE ((__force snd_pcm_format_t) 19) /* IEC-958 subframe, Big Endian */ --#define SNDRV_PCM_FORMAT_MU_LAW ((__force snd_pcm_format_t) 20) --#define SNDRV_PCM_FORMAT_A_LAW ((__force snd_pcm_format_t) 21) --#define SNDRV_PCM_FORMAT_IMA_ADPCM ((__force snd_pcm_format_t) 22) --#define SNDRV_PCM_FORMAT_MPEG ((__force snd_pcm_format_t) 23) --#define SNDRV_PCM_FORMAT_GSM ((__force snd_pcm_format_t) 24) --#define SNDRV_PCM_FORMAT_S20_LE ((__force snd_pcm_format_t) 25) /* in four bytes, LSB justified */ --#define SNDRV_PCM_FORMAT_S20_BE ((__force snd_pcm_format_t) 26) /* in four bytes, LSB justified */ --#define SNDRV_PCM_FORMAT_U20_LE ((__force snd_pcm_format_t) 27) /* in four bytes, LSB justified */ --#define SNDRV_PCM_FORMAT_U20_BE ((__force snd_pcm_format_t) 28) /* in four bytes, LSB justified */ --/* gap in the numbering for a future standard linear format */ --#define SNDRV_PCM_FORMAT_SPECIAL ((__force snd_pcm_format_t) 31) --#define SNDRV_PCM_FORMAT_S24_3LE ((__force snd_pcm_format_t) 32) /* in three bytes */ --#define SNDRV_PCM_FORMAT_S24_3BE ((__force snd_pcm_format_t) 33) /* in three bytes */ --#define SNDRV_PCM_FORMAT_U24_3LE ((__force snd_pcm_format_t) 34) /* in three bytes */ --#define SNDRV_PCM_FORMAT_U24_3BE ((__force snd_pcm_format_t) 35) /* in three bytes */ --#define SNDRV_PCM_FORMAT_S20_3LE ((__force snd_pcm_format_t) 36) /* in three bytes */ --#define SNDRV_PCM_FORMAT_S20_3BE ((__force snd_pcm_format_t) 37) /* in three bytes */ --#define SNDRV_PCM_FORMAT_U20_3LE ((__force snd_pcm_format_t) 38) /* in three bytes */ --#define SNDRV_PCM_FORMAT_U20_3BE ((__force snd_pcm_format_t) 39) /* in three bytes */ --#define SNDRV_PCM_FORMAT_S18_3LE ((__force snd_pcm_format_t) 40) /* in three bytes */ --#define SNDRV_PCM_FORMAT_S18_3BE ((__force snd_pcm_format_t) 41) /* in three bytes */ --#define SNDRV_PCM_FORMAT_U18_3LE ((__force snd_pcm_format_t) 42) /* in three bytes */ --#define SNDRV_PCM_FORMAT_U18_3BE ((__force snd_pcm_format_t) 43) /* in three bytes */ --#define SNDRV_PCM_FORMAT_G723_24 ((__force snd_pcm_format_t) 44) /* 8 samples in 3 bytes */ --#define SNDRV_PCM_FORMAT_G723_24_1B ((__force snd_pcm_format_t) 45) /* 1 sample in 1 byte */ --#define SNDRV_PCM_FORMAT_G723_40 ((__force snd_pcm_format_t) 46) /* 8 Samples in 5 bytes */ --#define SNDRV_PCM_FORMAT_G723_40_1B ((__force snd_pcm_format_t) 47) /* 1 sample in 1 byte */ --#define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */ --#define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */ --#define SNDRV_PCM_FORMAT_DSD_U32_LE ((__force snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */ --#define SNDRV_PCM_FORMAT_DSD_U16_BE ((__force snd_pcm_format_t) 51) /* DSD, 2-byte samples DSD (x16), big endian */ --#define SNDRV_PCM_FORMAT_DSD_U32_BE ((__force snd_pcm_format_t) 52) /* DSD, 4-byte samples DSD (x32), big endian */ --#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_BE --#define SNDRV_PCM_FORMAT_FIRST SNDRV_PCM_FORMAT_S8 -- --#ifdef SNDRV_LITTLE_ENDIAN --#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE --#define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_LE --#define SNDRV_PCM_FORMAT_S24 SNDRV_PCM_FORMAT_S24_LE --#define SNDRV_PCM_FORMAT_U24 SNDRV_PCM_FORMAT_U24_LE --#define SNDRV_PCM_FORMAT_S32 SNDRV_PCM_FORMAT_S32_LE --#define SNDRV_PCM_FORMAT_U32 SNDRV_PCM_FORMAT_U32_LE --#define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_LE --#define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_LE --#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE --#define SNDRV_PCM_FORMAT_S20 SNDRV_PCM_FORMAT_S20_LE --#define SNDRV_PCM_FORMAT_U20 SNDRV_PCM_FORMAT_U20_LE --#endif --#ifdef SNDRV_BIG_ENDIAN --#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_BE --#define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_BE --#define SNDRV_PCM_FORMAT_S24 SNDRV_PCM_FORMAT_S24_BE --#define SNDRV_PCM_FORMAT_U24 SNDRV_PCM_FORMAT_U24_BE --#define SNDRV_PCM_FORMAT_S32 SNDRV_PCM_FORMAT_S32_BE --#define SNDRV_PCM_FORMAT_U32 SNDRV_PCM_FORMAT_U32_BE --#define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_BE --#define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_BE --#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE --#define SNDRV_PCM_FORMAT_S20 SNDRV_PCM_FORMAT_S20_BE --#define SNDRV_PCM_FORMAT_U20 SNDRV_PCM_FORMAT_U20_BE --#endif -- --typedef int __bitwise snd_pcm_subformat_t; --#define SNDRV_PCM_SUBFORMAT_STD ((__force snd_pcm_subformat_t) 0) --#define SNDRV_PCM_SUBFORMAT_LAST SNDRV_PCM_SUBFORMAT_STD -- --#define SNDRV_PCM_INFO_MMAP 0x00000001 /* hardware supports mmap */ --#define SNDRV_PCM_INFO_MMAP_VALID 0x00000002 /* period data are valid during transfer */ --#define SNDRV_PCM_INFO_DOUBLE 0x00000004 /* Double buffering needed for PCM start/stop */ --#define SNDRV_PCM_INFO_BATCH 0x00000010 /* double buffering */ --#define SNDRV_PCM_INFO_SYNC_APPLPTR 0x00000020 /* need the explicit sync of appl_ptr update */ --#define SNDRV_PCM_INFO_INTERLEAVED 0x00000100 /* channels are interleaved */ --#define SNDRV_PCM_INFO_NONINTERLEAVED 0x00000200 /* channels are not interleaved */ --#define SNDRV_PCM_INFO_COMPLEX 0x00000400 /* complex frame organization (mmap only) */ --#define SNDRV_PCM_INFO_BLOCK_TRANSFER 0x00010000 /* hardware transfer block of samples */ --#define SNDRV_PCM_INFO_OVERRANGE 0x00020000 /* hardware supports ADC (capture) overrange detection */ --#define SNDRV_PCM_INFO_RESUME 0x00040000 /* hardware supports stream resume after suspend */ --#define SNDRV_PCM_INFO_PAUSE 0x00080000 /* pause ioctl is supported */ --#define SNDRV_PCM_INFO_HALF_DUPLEX 0x00100000 /* only half duplex */ --#define SNDRV_PCM_INFO_JOINT_DUPLEX 0x00200000 /* playback and capture stream are somewhat correlated */ --#define SNDRV_PCM_INFO_SYNC_START 0x00400000 /* pcm support some kind of sync go */ --#define SNDRV_PCM_INFO_NO_PERIOD_WAKEUP 0x00800000 /* period wakeup can be disabled */ --#define SNDRV_PCM_INFO_HAS_WALL_CLOCK 0x01000000 /* (Deprecated)has audio wall clock for audio/system time sync */ --#define SNDRV_PCM_INFO_HAS_LINK_ATIME 0x01000000 /* report hardware link audio time, reset on startup */ --#define SNDRV_PCM_INFO_HAS_LINK_ABSOLUTE_ATIME 0x02000000 /* report absolute hardware link audio time, not reset on startup */ --#define SNDRV_PCM_INFO_HAS_LINK_ESTIMATED_ATIME 0x04000000 /* report estimated link audio time */ --#define SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME 0x08000000 /* report synchronized audio/system time */ -- --#define SNDRV_PCM_INFO_DRAIN_TRIGGER 0x40000000 /* internal kernel flag - trigger in drain */ --#define SNDRV_PCM_INFO_FIFO_IN_FRAMES 0x80000000 /* internal kernel flag - FIFO size is in frames */ -- -- -- --typedef int __bitwise snd_pcm_state_t; --#define SNDRV_PCM_STATE_OPEN ((__force snd_pcm_state_t) 0) /* stream is open */ --#define SNDRV_PCM_STATE_SETUP ((__force snd_pcm_state_t) 1) /* stream has a setup */ --#define SNDRV_PCM_STATE_PREPARED ((__force snd_pcm_state_t) 2) /* stream is ready to start */ --#define SNDRV_PCM_STATE_RUNNING ((__force snd_pcm_state_t) 3) /* stream is running */ --#define SNDRV_PCM_STATE_XRUN ((__force snd_pcm_state_t) 4) /* stream reached an xrun */ --#define SNDRV_PCM_STATE_DRAINING ((__force snd_pcm_state_t) 5) /* stream is draining */ --#define SNDRV_PCM_STATE_PAUSED ((__force snd_pcm_state_t) 6) /* stream is paused */ --#define SNDRV_PCM_STATE_SUSPENDED ((__force snd_pcm_state_t) 7) /* hardware is suspended */ --#define SNDRV_PCM_STATE_DISCONNECTED ((__force snd_pcm_state_t) 8) /* hardware is disconnected */ --#define SNDRV_PCM_STATE_LAST SNDRV_PCM_STATE_DISCONNECTED -- --enum { -- SNDRV_PCM_MMAP_OFFSET_DATA = 0x00000000, -- SNDRV_PCM_MMAP_OFFSET_STATUS = 0x80000000, -- SNDRV_PCM_MMAP_OFFSET_CONTROL = 0x81000000, --}; -- --union snd_pcm_sync_id { -- unsigned char id[16]; -- unsigned short id16[8]; -- unsigned int id32[4]; --}; -- --struct snd_pcm_info { -- unsigned int device; /* RO/WR (control): device number */ -- unsigned int subdevice; /* RO/WR (control): subdevice number */ -- int stream; /* RO/WR (control): stream direction */ -- int card; /* R: card number */ -- unsigned char id[64]; /* ID (user selectable) */ -- unsigned char name[80]; /* name of this device */ -- unsigned char subname[32]; /* subdevice name */ -- int dev_class; /* SNDRV_PCM_CLASS_* */ -- int dev_subclass; /* SNDRV_PCM_SUBCLASS_* */ -- unsigned int subdevices_count; -- unsigned int subdevices_avail; -- union snd_pcm_sync_id sync; /* hardware synchronization ID */ -- unsigned char reserved[64]; /* reserved for future... */ --}; -- --typedef int snd_pcm_hw_param_t; --#define SNDRV_PCM_HW_PARAM_ACCESS 0 /* Access type */ --#define SNDRV_PCM_HW_PARAM_FORMAT 1 /* Format */ --#define SNDRV_PCM_HW_PARAM_SUBFORMAT 2 /* Subformat */ --#define SNDRV_PCM_HW_PARAM_FIRST_MASK SNDRV_PCM_HW_PARAM_ACCESS --#define SNDRV_PCM_HW_PARAM_LAST_MASK SNDRV_PCM_HW_PARAM_SUBFORMAT -- --#define SNDRV_PCM_HW_PARAM_SAMPLE_BITS 8 /* Bits per sample */ --#define SNDRV_PCM_HW_PARAM_FRAME_BITS 9 /* Bits per frame */ --#define SNDRV_PCM_HW_PARAM_CHANNELS 10 /* Channels */ --#define SNDRV_PCM_HW_PARAM_RATE 11 /* Approx rate */ --#define SNDRV_PCM_HW_PARAM_PERIOD_TIME 12 /* Approx distance between -- * interrupts in us -- */ --#define SNDRV_PCM_HW_PARAM_PERIOD_SIZE 13 /* Approx frames between -- * interrupts -- */ --#define SNDRV_PCM_HW_PARAM_PERIOD_BYTES 14 /* Approx bytes between -- * interrupts -- */ --#define SNDRV_PCM_HW_PARAM_PERIODS 15 /* Approx interrupts per -- * buffer -- */ --#define SNDRV_PCM_HW_PARAM_BUFFER_TIME 16 /* Approx duration of buffer -- * in us -- */ --#define SNDRV_PCM_HW_PARAM_BUFFER_SIZE 17 /* Size of buffer in frames */ --#define SNDRV_PCM_HW_PARAM_BUFFER_BYTES 18 /* Size of buffer in bytes */ --#define SNDRV_PCM_HW_PARAM_TICK_TIME 19 /* Approx tick duration in us */ --#define SNDRV_PCM_HW_PARAM_FIRST_INTERVAL SNDRV_PCM_HW_PARAM_SAMPLE_BITS --#define SNDRV_PCM_HW_PARAM_LAST_INTERVAL SNDRV_PCM_HW_PARAM_TICK_TIME -- --#define SNDRV_PCM_HW_PARAMS_NORESAMPLE (1<<0) /* avoid rate resampling */ --#define SNDRV_PCM_HW_PARAMS_EXPORT_BUFFER (1<<1) /* export buffer */ --#define SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP (1<<2) /* disable period wakeups */ -- --struct snd_interval { -- unsigned int min, max; -- unsigned int openmin:1, -- openmax:1, -- integer:1, -- empty:1; --}; -- --#define SNDRV_MASK_MAX 256 -- --struct snd_mask { -- __u32 bits[(SNDRV_MASK_MAX+31)/32]; --}; -- --struct snd_pcm_hw_params { -- unsigned int flags; -- struct snd_mask masks[SNDRV_PCM_HW_PARAM_LAST_MASK - -- SNDRV_PCM_HW_PARAM_FIRST_MASK + 1]; -- struct snd_mask mres[5]; /* reserved masks */ -- struct snd_interval intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL - -- SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1]; -- struct snd_interval ires[9]; /* reserved intervals */ -- unsigned int rmask; /* W: requested masks */ -- unsigned int cmask; /* R: changed masks */ -- unsigned int info; /* R: Info flags for returned setup */ -- unsigned int msbits; /* R: used most significant bits */ -- unsigned int rate_num; /* R: rate numerator */ -- unsigned int rate_den; /* R: rate denominator */ -- snd_pcm_uframes_t fifo_size; /* R: chip FIFO size in frames */ -- unsigned char reserved[64]; /* reserved for future */ --}; -- --enum { -- SNDRV_PCM_TSTAMP_NONE = 0, -- SNDRV_PCM_TSTAMP_ENABLE, -- SNDRV_PCM_TSTAMP_LAST = SNDRV_PCM_TSTAMP_ENABLE, --}; -- --struct snd_pcm_sw_params { -- int tstamp_mode; /* timestamp mode */ -- unsigned int period_step; -- unsigned int sleep_min; /* min ticks to sleep */ -- snd_pcm_uframes_t avail_min; /* min avail frames for wakeup */ -- snd_pcm_uframes_t xfer_align; /* obsolete: xfer size need to be a multiple */ -- snd_pcm_uframes_t start_threshold; /* min hw_avail frames for automatic start */ -- snd_pcm_uframes_t stop_threshold; /* min avail frames for automatic stop */ -- snd_pcm_uframes_t silence_threshold; /* min distance from noise for silence filling */ -- snd_pcm_uframes_t silence_size; /* silence block size */ -- snd_pcm_uframes_t boundary; /* pointers wrap point */ -- unsigned int proto; /* protocol version */ -- unsigned int tstamp_type; /* timestamp type (req. proto >= 2.0.12) */ -- unsigned char reserved[56]; /* reserved for future */ --}; -- --struct snd_pcm_channel_info { -- unsigned int channel; -- __kernel_off_t offset; /* mmap offset */ -- unsigned int first; /* offset to first sample in bits */ -- unsigned int step; /* samples distance in bits */ --}; -- --enum { -- /* -- * first definition for backwards compatibility only, -- * maps to wallclock/link time for HDAudio playback and DEFAULT/DMA time for everything else -- */ -- SNDRV_PCM_AUDIO_TSTAMP_TYPE_COMPAT = 0, -- -- /* timestamp definitions */ -- SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT = 1, /* DMA time, reported as per hw_ptr */ -- SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK = 2, /* link time reported by sample or wallclock counter, reset on startup */ -- SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ABSOLUTE = 3, /* link time reported by sample or wallclock counter, not reset on startup */ -- SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ESTIMATED = 4, /* link time estimated indirectly */ -- SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED = 5, /* link time synchronized with system time */ -- SNDRV_PCM_AUDIO_TSTAMP_TYPE_LAST = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED --}; -- --struct snd_pcm_status { -- snd_pcm_state_t state; /* stream state */ -- struct timespec trigger_tstamp; /* time when stream was started/stopped/paused */ -- struct timespec tstamp; /* reference timestamp */ -- snd_pcm_uframes_t appl_ptr; /* appl ptr */ -- snd_pcm_uframes_t hw_ptr; /* hw ptr */ -- snd_pcm_sframes_t delay; /* current delay in frames */ -- snd_pcm_uframes_t avail; /* number of frames available */ -- snd_pcm_uframes_t avail_max; /* max frames available on hw since last status */ -- snd_pcm_uframes_t overrange; /* count of ADC (capture) overrange detections from last status */ -- snd_pcm_state_t suspended_state; /* suspended stream state */ -- __u32 audio_tstamp_data; /* needed for 64-bit alignment, used for configs/report to/from userspace */ -- struct timespec audio_tstamp; /* sample counter, wall clock, PHC or on-demand sync'ed */ -- struct timespec driver_tstamp; /* useful in case reference system tstamp is reported with delay */ -- __u32 audio_tstamp_accuracy; /* in ns units, only valid if indicated in audio_tstamp_data */ -- unsigned char reserved[52-2*sizeof(struct timespec)]; /* must be filled with zero */ --}; -- --struct snd_pcm_mmap_status { -- snd_pcm_state_t state; /* RO: state - SNDRV_PCM_STATE_XXXX */ -- int pad1; /* Needed for 64 bit alignment */ -- snd_pcm_uframes_t hw_ptr; /* RO: hw ptr (0...boundary-1) */ -- struct timespec tstamp; /* Timestamp */ -- snd_pcm_state_t suspended_state; /* RO: suspended stream state */ -- struct timespec audio_tstamp; /* from sample counter or wall clock */ --}; -- --struct snd_pcm_mmap_control { -- snd_pcm_uframes_t appl_ptr; /* RW: appl ptr (0...boundary-1) */ -- snd_pcm_uframes_t avail_min; /* RW: min available frames for wakeup */ --}; -- --#define SNDRV_PCM_SYNC_PTR_HWSYNC (1<<0) /* execute hwsync */ --#define SNDRV_PCM_SYNC_PTR_APPL (1<<1) /* get appl_ptr from driver (r/w op) */ --#define SNDRV_PCM_SYNC_PTR_AVAIL_MIN (1<<2) /* get avail_min from driver */ -- --struct snd_pcm_sync_ptr { -- unsigned int flags; -- union { -- struct snd_pcm_mmap_status status; -- unsigned char reserved[64]; -- } s; -- union { -- struct snd_pcm_mmap_control control; -- unsigned char reserved[64]; -- } c; --}; -- --struct snd_xferi { -- snd_pcm_sframes_t result; -- void __user *buf; -- snd_pcm_uframes_t frames; --}; -- --struct snd_xfern { -- snd_pcm_sframes_t result; -- void __user * __user *bufs; -- snd_pcm_uframes_t frames; --}; -- --enum { -- SNDRV_PCM_TSTAMP_TYPE_GETTIMEOFDAY = 0, /* gettimeofday equivalent */ -- SNDRV_PCM_TSTAMP_TYPE_MONOTONIC, /* posix_clock_monotonic equivalent */ -- SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW, /* monotonic_raw (no NTP) */ -- SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW, --}; -- --/* channel positions */ --enum { -- SNDRV_CHMAP_UNKNOWN = 0, -- SNDRV_CHMAP_NA, /* N/A, silent */ -- SNDRV_CHMAP_MONO, /* mono stream */ -- /* this follows the alsa-lib mixer channel value + 3 */ -- SNDRV_CHMAP_FL, /* front left */ -- SNDRV_CHMAP_FR, /* front right */ -- SNDRV_CHMAP_RL, /* rear left */ -- SNDRV_CHMAP_RR, /* rear right */ -- SNDRV_CHMAP_FC, /* front center */ -- SNDRV_CHMAP_LFE, /* LFE */ -- SNDRV_CHMAP_SL, /* side left */ -- SNDRV_CHMAP_SR, /* side right */ -- SNDRV_CHMAP_RC, /* rear center */ -- /* new definitions */ -- SNDRV_CHMAP_FLC, /* front left center */ -- SNDRV_CHMAP_FRC, /* front right center */ -- SNDRV_CHMAP_RLC, /* rear left center */ -- SNDRV_CHMAP_RRC, /* rear right center */ -- SNDRV_CHMAP_FLW, /* front left wide */ -- SNDRV_CHMAP_FRW, /* front right wide */ -- SNDRV_CHMAP_FLH, /* front left high */ -- SNDRV_CHMAP_FCH, /* front center high */ -- SNDRV_CHMAP_FRH, /* front right high */ -- SNDRV_CHMAP_TC, /* top center */ -- SNDRV_CHMAP_TFL, /* top front left */ -- SNDRV_CHMAP_TFR, /* top front right */ -- SNDRV_CHMAP_TFC, /* top front center */ -- SNDRV_CHMAP_TRL, /* top rear left */ -- SNDRV_CHMAP_TRR, /* top rear right */ -- SNDRV_CHMAP_TRC, /* top rear center */ -- /* new definitions for UAC2 */ -- SNDRV_CHMAP_TFLC, /* top front left center */ -- SNDRV_CHMAP_TFRC, /* top front right center */ -- SNDRV_CHMAP_TSL, /* top side left */ -- SNDRV_CHMAP_TSR, /* top side right */ -- SNDRV_CHMAP_LLFE, /* left LFE */ -- SNDRV_CHMAP_RLFE, /* right LFE */ -- SNDRV_CHMAP_BC, /* bottom center */ -- SNDRV_CHMAP_BLC, /* bottom left center */ -- SNDRV_CHMAP_BRC, /* bottom right center */ -- SNDRV_CHMAP_LAST = SNDRV_CHMAP_BRC, --}; -- --#define SNDRV_CHMAP_POSITION_MASK 0xffff --#define SNDRV_CHMAP_PHASE_INVERSE (0x01 << 16) --#define SNDRV_CHMAP_DRIVER_SPEC (0x02 << 16) -- --#define SNDRV_PCM_IOCTL_PVERSION _IOR('A', 0x00, int) --#define SNDRV_PCM_IOCTL_INFO _IOR('A', 0x01, struct snd_pcm_info) --#define SNDRV_PCM_IOCTL_TSTAMP _IOW('A', 0x02, int) --#define SNDRV_PCM_IOCTL_TTSTAMP _IOW('A', 0x03, int) --#define SNDRV_PCM_IOCTL_USER_PVERSION _IOW('A', 0x04, int) --#define SNDRV_PCM_IOCTL_HW_REFINE _IOWR('A', 0x10, struct snd_pcm_hw_params) --#define SNDRV_PCM_IOCTL_HW_PARAMS _IOWR('A', 0x11, struct snd_pcm_hw_params) --#define SNDRV_PCM_IOCTL_HW_FREE _IO('A', 0x12) --#define SNDRV_PCM_IOCTL_SW_PARAMS _IOWR('A', 0x13, struct snd_pcm_sw_params) --#define SNDRV_PCM_IOCTL_STATUS _IOR('A', 0x20, struct snd_pcm_status) --#define SNDRV_PCM_IOCTL_DELAY _IOR('A', 0x21, snd_pcm_sframes_t) --#define SNDRV_PCM_IOCTL_HWSYNC _IO('A', 0x22) --#define SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct snd_pcm_sync_ptr) --#define SNDRV_PCM_IOCTL_STATUS_EXT _IOWR('A', 0x24, struct snd_pcm_status) --#define SNDRV_PCM_IOCTL_CHANNEL_INFO _IOR('A', 0x32, struct snd_pcm_channel_info) --#define SNDRV_PCM_IOCTL_PREPARE _IO('A', 0x40) --#define SNDRV_PCM_IOCTL_RESET _IO('A', 0x41) --#define SNDRV_PCM_IOCTL_START _IO('A', 0x42) --#define SNDRV_PCM_IOCTL_DROP _IO('A', 0x43) --#define SNDRV_PCM_IOCTL_DRAIN _IO('A', 0x44) --#define SNDRV_PCM_IOCTL_PAUSE _IOW('A', 0x45, int) --#define SNDRV_PCM_IOCTL_REWIND _IOW('A', 0x46, snd_pcm_uframes_t) --#define SNDRV_PCM_IOCTL_RESUME _IO('A', 0x47) --#define SNDRV_PCM_IOCTL_XRUN _IO('A', 0x48) --#define SNDRV_PCM_IOCTL_FORWARD _IOW('A', 0x49, snd_pcm_uframes_t) --#define SNDRV_PCM_IOCTL_WRITEI_FRAMES _IOW('A', 0x50, struct snd_xferi) --#define SNDRV_PCM_IOCTL_READI_FRAMES _IOR('A', 0x51, struct snd_xferi) --#define SNDRV_PCM_IOCTL_WRITEN_FRAMES _IOW('A', 0x52, struct snd_xfern) --#define SNDRV_PCM_IOCTL_READN_FRAMES _IOR('A', 0x53, struct snd_xfern) --#define SNDRV_PCM_IOCTL_LINK _IOW('A', 0x60, int) --#define SNDRV_PCM_IOCTL_UNLINK _IO('A', 0x61) -- --/***************************************************************************** -- * * -- * MIDI v1.0 interface * -- * * -- *****************************************************************************/ -- --/* -- * Raw MIDI section - /dev/snd/midi?? -- */ -- --#define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 0) -- --enum { -- SNDRV_RAWMIDI_STREAM_OUTPUT = 0, -- SNDRV_RAWMIDI_STREAM_INPUT, -- SNDRV_RAWMIDI_STREAM_LAST = SNDRV_RAWMIDI_STREAM_INPUT, --}; -- --#define SNDRV_RAWMIDI_INFO_OUTPUT 0x00000001 --#define SNDRV_RAWMIDI_INFO_INPUT 0x00000002 --#define SNDRV_RAWMIDI_INFO_DUPLEX 0x00000004 -- --struct snd_rawmidi_info { -- unsigned int device; /* RO/WR (control): device number */ -- unsigned int subdevice; /* RO/WR (control): subdevice number */ -- int stream; /* WR: stream */ -- int card; /* R: card number */ -- unsigned int flags; /* SNDRV_RAWMIDI_INFO_XXXX */ -- unsigned char id[64]; /* ID (user selectable) */ -- unsigned char name[80]; /* name of device */ -- unsigned char subname[32]; /* name of active or selected subdevice */ -- unsigned int subdevices_count; -- unsigned int subdevices_avail; -- unsigned char reserved[64]; /* reserved for future use */ --}; -- --struct snd_rawmidi_params { -- int stream; -- size_t buffer_size; /* queue size in bytes */ -- size_t avail_min; /* minimum avail bytes for wakeup */ -- unsigned int no_active_sensing: 1; /* do not send active sensing byte in close() */ -- unsigned char reserved[16]; /* reserved for future use */ --}; -- --struct snd_rawmidi_status { -- int stream; -- struct timespec tstamp; /* Timestamp */ -- size_t avail; /* available bytes */ -- size_t xruns; /* count of overruns since last status (in bytes) */ -- unsigned char reserved[16]; /* reserved for future use */ --}; -- --#define SNDRV_RAWMIDI_IOCTL_PVERSION _IOR('W', 0x00, int) --#define SNDRV_RAWMIDI_IOCTL_INFO _IOR('W', 0x01, struct snd_rawmidi_info) --#define SNDRV_RAWMIDI_IOCTL_PARAMS _IOWR('W', 0x10, struct snd_rawmidi_params) --#define SNDRV_RAWMIDI_IOCTL_STATUS _IOWR('W', 0x20, struct snd_rawmidi_status) --#define SNDRV_RAWMIDI_IOCTL_DROP _IOW('W', 0x30, int) --#define SNDRV_RAWMIDI_IOCTL_DRAIN _IOW('W', 0x31, int) -- --/* -- * Timer section - /dev/snd/timer -- */ -- --#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 6) -- --enum { -- SNDRV_TIMER_CLASS_NONE = -1, -- SNDRV_TIMER_CLASS_SLAVE = 0, -- SNDRV_TIMER_CLASS_GLOBAL, -- SNDRV_TIMER_CLASS_CARD, -- SNDRV_TIMER_CLASS_PCM, -- SNDRV_TIMER_CLASS_LAST = SNDRV_TIMER_CLASS_PCM, --}; -- --/* slave timer classes */ --enum { -- SNDRV_TIMER_SCLASS_NONE = 0, -- SNDRV_TIMER_SCLASS_APPLICATION, -- SNDRV_TIMER_SCLASS_SEQUENCER, /* alias */ -- SNDRV_TIMER_SCLASS_OSS_SEQUENCER, /* alias */ -- SNDRV_TIMER_SCLASS_LAST = SNDRV_TIMER_SCLASS_OSS_SEQUENCER, --}; -- --/* global timers (device member) */ --#define SNDRV_TIMER_GLOBAL_SYSTEM 0 --#define SNDRV_TIMER_GLOBAL_RTC 1 /* unused */ --#define SNDRV_TIMER_GLOBAL_HPET 2 --#define SNDRV_TIMER_GLOBAL_HRTIMER 3 -- --/* info flags */ --#define SNDRV_TIMER_FLG_SLAVE (1<<0) /* cannot be controlled */ -- --struct snd_timer_id { -- int dev_class; -- int dev_sclass; -- int card; -- int device; -- int subdevice; --}; -- --struct snd_timer_ginfo { -- struct snd_timer_id tid; /* requested timer ID */ -- unsigned int flags; /* timer flags - SNDRV_TIMER_FLG_* */ -- int card; /* card number */ -- unsigned char id[64]; /* timer identification */ -- unsigned char name[80]; /* timer name */ -- unsigned long reserved0; /* reserved for future use */ -- unsigned long resolution; /* average period resolution in ns */ -- unsigned long resolution_min; /* minimal period resolution in ns */ -- unsigned long resolution_max; /* maximal period resolution in ns */ -- unsigned int clients; /* active timer clients */ -- unsigned char reserved[32]; --}; -- --struct snd_timer_gparams { -- struct snd_timer_id tid; /* requested timer ID */ -- unsigned long period_num; /* requested precise period duration (in seconds) - numerator */ -- unsigned long period_den; /* requested precise period duration (in seconds) - denominator */ -- unsigned char reserved[32]; --}; -- --struct snd_timer_gstatus { -- struct snd_timer_id tid; /* requested timer ID */ -- unsigned long resolution; /* current period resolution in ns */ -- unsigned long resolution_num; /* precise current period resolution (in seconds) - numerator */ -- unsigned long resolution_den; /* precise current period resolution (in seconds) - denominator */ -- unsigned char reserved[32]; --}; -- --struct snd_timer_select { -- struct snd_timer_id id; /* bind to timer ID */ -- unsigned char reserved[32]; /* reserved */ --}; -- --struct snd_timer_info { -- unsigned int flags; /* timer flags - SNDRV_TIMER_FLG_* */ -- int card; /* card number */ -- unsigned char id[64]; /* timer identificator */ -- unsigned char name[80]; /* timer name */ -- unsigned long reserved0; /* reserved for future use */ -- unsigned long resolution; /* average period resolution in ns */ -- unsigned char reserved[64]; /* reserved */ --}; -- --#define SNDRV_TIMER_PSFLG_AUTO (1<<0) /* auto start, otherwise one-shot */ --#define SNDRV_TIMER_PSFLG_EXCLUSIVE (1<<1) /* exclusive use, precise start/stop/pause/continue */ --#define SNDRV_TIMER_PSFLG_EARLY_EVENT (1<<2) /* write early event to the poll queue */ -- --struct snd_timer_params { -- unsigned int flags; /* flags - SNDRV_TIMER_PSFLG_* */ -- unsigned int ticks; /* requested resolution in ticks */ -- unsigned int queue_size; /* total size of queue (32-1024) */ -- unsigned int reserved0; /* reserved, was: failure locations */ -- unsigned int filter; /* event filter (bitmask of SNDRV_TIMER_EVENT_*) */ -- unsigned char reserved[60]; /* reserved */ --}; -- --struct snd_timer_status { -- struct timespec tstamp; /* Timestamp - last update */ -- unsigned int resolution; /* current period resolution in ns */ -- unsigned int lost; /* counter of master tick lost */ -- unsigned int overrun; /* count of read queue overruns */ -- unsigned int queue; /* used queue size */ -- unsigned char reserved[64]; /* reserved */ --}; -- --#define SNDRV_TIMER_IOCTL_PVERSION _IOR('T', 0x00, int) --#define SNDRV_TIMER_IOCTL_NEXT_DEVICE _IOWR('T', 0x01, struct snd_timer_id) --#define SNDRV_TIMER_IOCTL_TREAD _IOW('T', 0x02, int) --#define SNDRV_TIMER_IOCTL_GINFO _IOWR('T', 0x03, struct snd_timer_ginfo) --#define SNDRV_TIMER_IOCTL_GPARAMS _IOW('T', 0x04, struct snd_timer_gparams) --#define SNDRV_TIMER_IOCTL_GSTATUS _IOWR('T', 0x05, struct snd_timer_gstatus) --#define SNDRV_TIMER_IOCTL_SELECT _IOW('T', 0x10, struct snd_timer_select) --#define SNDRV_TIMER_IOCTL_INFO _IOR('T', 0x11, struct snd_timer_info) --#define SNDRV_TIMER_IOCTL_PARAMS _IOW('T', 0x12, struct snd_timer_params) --#define SNDRV_TIMER_IOCTL_STATUS _IOR('T', 0x14, struct snd_timer_status) --/* The following four ioctls are changed since 1.0.9 due to confliction */ --#define SNDRV_TIMER_IOCTL_START _IO('T', 0xa0) --#define SNDRV_TIMER_IOCTL_STOP _IO('T', 0xa1) --#define SNDRV_TIMER_IOCTL_CONTINUE _IO('T', 0xa2) --#define SNDRV_TIMER_IOCTL_PAUSE _IO('T', 0xa3) -- --struct snd_timer_read { -- unsigned int resolution; -- unsigned int ticks; --}; -- --enum { -- SNDRV_TIMER_EVENT_RESOLUTION = 0, /* val = resolution in ns */ -- SNDRV_TIMER_EVENT_TICK, /* val = ticks */ -- SNDRV_TIMER_EVENT_START, /* val = resolution in ns */ -- SNDRV_TIMER_EVENT_STOP, /* val = 0 */ -- SNDRV_TIMER_EVENT_CONTINUE, /* val = resolution in ns */ -- SNDRV_TIMER_EVENT_PAUSE, /* val = 0 */ -- SNDRV_TIMER_EVENT_EARLY, /* val = 0, early event */ -- SNDRV_TIMER_EVENT_SUSPEND, /* val = 0 */ -- SNDRV_TIMER_EVENT_RESUME, /* val = resolution in ns */ -- /* master timer events for slave timer instances */ -- SNDRV_TIMER_EVENT_MSTART = SNDRV_TIMER_EVENT_START + 10, -- SNDRV_TIMER_EVENT_MSTOP = SNDRV_TIMER_EVENT_STOP + 10, -- SNDRV_TIMER_EVENT_MCONTINUE = SNDRV_TIMER_EVENT_CONTINUE + 10, -- SNDRV_TIMER_EVENT_MPAUSE = SNDRV_TIMER_EVENT_PAUSE + 10, -- SNDRV_TIMER_EVENT_MSUSPEND = SNDRV_TIMER_EVENT_SUSPEND + 10, -- SNDRV_TIMER_EVENT_MRESUME = SNDRV_TIMER_EVENT_RESUME + 10, --}; -- --struct snd_timer_tread { -- int event; -- struct timespec tstamp; -- unsigned int val; --}; -- --/**************************************************************************** -- * * -- * Section for driver control interface - /dev/snd/control? * -- * * -- ****************************************************************************/ -- --#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7) -- --struct snd_ctl_card_info { -- int card; /* card number */ -- int pad; /* reserved for future (was type) */ -- unsigned char id[16]; /* ID of card (user selectable) */ -- unsigned char driver[16]; /* Driver name */ -- unsigned char name[32]; /* Short name of soundcard */ -- unsigned char longname[80]; /* name + info text about soundcard */ -- unsigned char reserved_[16]; /* reserved for future (was ID of mixer) */ -- unsigned char mixername[80]; /* visual mixer identification */ -- unsigned char components[128]; /* card components / fine identification, delimited with one space (AC97 etc..) */ --}; -- --typedef int __bitwise snd_ctl_elem_type_t; --#define SNDRV_CTL_ELEM_TYPE_NONE ((__force snd_ctl_elem_type_t) 0) /* invalid */ --#define SNDRV_CTL_ELEM_TYPE_BOOLEAN ((__force snd_ctl_elem_type_t) 1) /* boolean type */ --#define SNDRV_CTL_ELEM_TYPE_INTEGER ((__force snd_ctl_elem_type_t) 2) /* integer type */ --#define SNDRV_CTL_ELEM_TYPE_ENUMERATED ((__force snd_ctl_elem_type_t) 3) /* enumerated type */ --#define SNDRV_CTL_ELEM_TYPE_BYTES ((__force snd_ctl_elem_type_t) 4) /* byte array */ --#define SNDRV_CTL_ELEM_TYPE_IEC958 ((__force snd_ctl_elem_type_t) 5) /* IEC958 (S/PDIF) setup */ --#define SNDRV_CTL_ELEM_TYPE_INTEGER64 ((__force snd_ctl_elem_type_t) 6) /* 64-bit integer type */ --#define SNDRV_CTL_ELEM_TYPE_LAST SNDRV_CTL_ELEM_TYPE_INTEGER64 -- --typedef int __bitwise snd_ctl_elem_iface_t; --#define SNDRV_CTL_ELEM_IFACE_CARD ((__force snd_ctl_elem_iface_t) 0) /* global control */ --#define SNDRV_CTL_ELEM_IFACE_HWDEP ((__force snd_ctl_elem_iface_t) 1) /* hardware dependent device */ --#define SNDRV_CTL_ELEM_IFACE_MIXER ((__force snd_ctl_elem_iface_t) 2) /* virtual mixer device */ --#define SNDRV_CTL_ELEM_IFACE_PCM ((__force snd_ctl_elem_iface_t) 3) /* PCM device */ --#define SNDRV_CTL_ELEM_IFACE_RAWMIDI ((__force snd_ctl_elem_iface_t) 4) /* RawMidi device */ --#define SNDRV_CTL_ELEM_IFACE_TIMER ((__force snd_ctl_elem_iface_t) 5) /* timer device */ --#define SNDRV_CTL_ELEM_IFACE_SEQUENCER ((__force snd_ctl_elem_iface_t) 6) /* sequencer client */ --#define SNDRV_CTL_ELEM_IFACE_LAST SNDRV_CTL_ELEM_IFACE_SEQUENCER -- --#define SNDRV_CTL_ELEM_ACCESS_READ (1<<0) --#define SNDRV_CTL_ELEM_ACCESS_WRITE (1<<1) --#define SNDRV_CTL_ELEM_ACCESS_READWRITE (SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE) --#define SNDRV_CTL_ELEM_ACCESS_VOLATILE (1<<2) /* control value may be changed without a notification */ --#define SNDRV_CTL_ELEM_ACCESS_TIMESTAMP (1<<3) /* when was control changed */ --#define SNDRV_CTL_ELEM_ACCESS_TLV_READ (1<<4) /* TLV read is possible */ --#define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE (1<<5) /* TLV write is possible */ --#define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE (SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE) --#define SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND (1<<6) /* TLV command is possible */ --#define SNDRV_CTL_ELEM_ACCESS_INACTIVE (1<<8) /* control does actually nothing, but may be updated */ --#define SNDRV_CTL_ELEM_ACCESS_LOCK (1<<9) /* write lock */ --#define SNDRV_CTL_ELEM_ACCESS_OWNER (1<<10) /* write lock owner */ --#define SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK (1<<28) /* kernel use a TLV callback */ --#define SNDRV_CTL_ELEM_ACCESS_USER (1<<29) /* user space element */ --/* bits 30 and 31 are obsoleted (for indirect access) */ -- --/* for further details see the ACPI and PCI power management specification */ --#define SNDRV_CTL_POWER_D0 0x0000 /* full On */ --#define SNDRV_CTL_POWER_D1 0x0100 /* partial On */ --#define SNDRV_CTL_POWER_D2 0x0200 /* partial On */ --#define SNDRV_CTL_POWER_D3 0x0300 /* Off */ --#define SNDRV_CTL_POWER_D3hot (SNDRV_CTL_POWER_D3|0x0000) /* Off, with power */ --#define SNDRV_CTL_POWER_D3cold (SNDRV_CTL_POWER_D3|0x0001) /* Off, without power */ -- --#define SNDRV_CTL_ELEM_ID_NAME_MAXLEN 44 -- --struct snd_ctl_elem_id { -- unsigned int numid; /* numeric identifier, zero = invalid */ -- snd_ctl_elem_iface_t iface; /* interface identifier */ -- unsigned int device; /* device/client number */ -- unsigned int subdevice; /* subdevice (substream) number */ -- unsigned char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* ASCII name of item */ -- unsigned int index; /* index of item */ --}; -- --struct snd_ctl_elem_list { -- unsigned int offset; /* W: first element ID to get */ -- unsigned int space; /* W: count of element IDs to get */ -- unsigned int used; /* R: count of element IDs set */ -- unsigned int count; /* R: count of all elements */ -- struct snd_ctl_elem_id __user *pids; /* R: IDs */ -- unsigned char reserved[50]; --}; -- --struct snd_ctl_elem_info { -- struct snd_ctl_elem_id id; /* W: element ID */ -- snd_ctl_elem_type_t type; /* R: value type - SNDRV_CTL_ELEM_TYPE_* */ -- unsigned int access; /* R: value access (bitmask) - SNDRV_CTL_ELEM_ACCESS_* */ -- unsigned int count; /* count of values */ -- __kernel_pid_t owner; /* owner's PID of this control */ -- union { -- struct { -- long min; /* R: minimum value */ -- long max; /* R: maximum value */ -- long step; /* R: step (0 variable) */ -- } integer; -- struct { -- long long min; /* R: minimum value */ -- long long max; /* R: maximum value */ -- long long step; /* R: step (0 variable) */ -- } integer64; -- struct { -- unsigned int items; /* R: number of items */ -- unsigned int item; /* W: item number */ -- char name[64]; /* R: value name */ -- __u64 names_ptr; /* W: names list (ELEM_ADD only) */ -- unsigned int names_length; -- } enumerated; -- unsigned char reserved[128]; -- } value; -- union { -- unsigned short d[4]; /* dimensions */ -- unsigned short *d_ptr; /* indirect - obsoleted */ -- } dimen; -- unsigned char reserved[64-4*sizeof(unsigned short)]; --}; -- --struct snd_ctl_elem_value { -- struct snd_ctl_elem_id id; /* W: element ID */ -- unsigned int indirect: 1; /* W: indirect access - obsoleted */ -- union { -- union { -- long value[128]; -- long *value_ptr; /* obsoleted */ -- } integer; -- union { -- long long value[64]; -- long long *value_ptr; /* obsoleted */ -- } integer64; -- union { -- unsigned int item[128]; -- unsigned int *item_ptr; /* obsoleted */ -- } enumerated; -- union { -- unsigned char data[512]; -- unsigned char *data_ptr; /* obsoleted */ -- } bytes; -- struct snd_aes_iec958 iec958; -- } value; /* RO */ -- struct timespec tstamp; -- unsigned char reserved[128-sizeof(struct timespec)]; --}; -- --struct snd_ctl_tlv { -- unsigned int numid; /* control element numeric identification */ -- unsigned int length; /* in bytes aligned to 4 */ -- unsigned int tlv[0]; /* first TLV */ --}; -- --#define SNDRV_CTL_IOCTL_PVERSION _IOR('U', 0x00, int) --#define SNDRV_CTL_IOCTL_CARD_INFO _IOR('U', 0x01, struct snd_ctl_card_info) --#define SNDRV_CTL_IOCTL_ELEM_LIST _IOWR('U', 0x10, struct snd_ctl_elem_list) --#define SNDRV_CTL_IOCTL_ELEM_INFO _IOWR('U', 0x11, struct snd_ctl_elem_info) --#define SNDRV_CTL_IOCTL_ELEM_READ _IOWR('U', 0x12, struct snd_ctl_elem_value) --#define SNDRV_CTL_IOCTL_ELEM_WRITE _IOWR('U', 0x13, struct snd_ctl_elem_value) --#define SNDRV_CTL_IOCTL_ELEM_LOCK _IOW('U', 0x14, struct snd_ctl_elem_id) --#define SNDRV_CTL_IOCTL_ELEM_UNLOCK _IOW('U', 0x15, struct snd_ctl_elem_id) --#define SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS _IOWR('U', 0x16, int) --#define SNDRV_CTL_IOCTL_ELEM_ADD _IOWR('U', 0x17, struct snd_ctl_elem_info) --#define SNDRV_CTL_IOCTL_ELEM_REPLACE _IOWR('U', 0x18, struct snd_ctl_elem_info) --#define SNDRV_CTL_IOCTL_ELEM_REMOVE _IOWR('U', 0x19, struct snd_ctl_elem_id) --#define SNDRV_CTL_IOCTL_TLV_READ _IOWR('U', 0x1a, struct snd_ctl_tlv) --#define SNDRV_CTL_IOCTL_TLV_WRITE _IOWR('U', 0x1b, struct snd_ctl_tlv) --#define SNDRV_CTL_IOCTL_TLV_COMMAND _IOWR('U', 0x1c, struct snd_ctl_tlv) --#define SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE _IOWR('U', 0x20, int) --#define SNDRV_CTL_IOCTL_HWDEP_INFO _IOR('U', 0x21, struct snd_hwdep_info) --#define SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE _IOR('U', 0x30, int) --#define SNDRV_CTL_IOCTL_PCM_INFO _IOWR('U', 0x31, struct snd_pcm_info) --#define SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE _IOW('U', 0x32, int) --#define SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE _IOWR('U', 0x40, int) --#define SNDRV_CTL_IOCTL_RAWMIDI_INFO _IOWR('U', 0x41, struct snd_rawmidi_info) --#define SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE _IOW('U', 0x42, int) --#define SNDRV_CTL_IOCTL_POWER _IOWR('U', 0xd0, int) --#define SNDRV_CTL_IOCTL_POWER_STATE _IOR('U', 0xd1, int) -- --/* -- * Read interface. -- */ -- --enum sndrv_ctl_event_type { -- SNDRV_CTL_EVENT_ELEM = 0, -- SNDRV_CTL_EVENT_LAST = SNDRV_CTL_EVENT_ELEM, --}; -- --#define SNDRV_CTL_EVENT_MASK_VALUE (1<<0) /* element value was changed */ --#define SNDRV_CTL_EVENT_MASK_INFO (1<<1) /* element info was changed */ --#define SNDRV_CTL_EVENT_MASK_ADD (1<<2) /* element was added */ --#define SNDRV_CTL_EVENT_MASK_TLV (1<<3) /* element TLV tree was changed */ --#define SNDRV_CTL_EVENT_MASK_REMOVE (~0U) /* element was removed */ -- --struct snd_ctl_event { -- int type; /* event type - SNDRV_CTL_EVENT_* */ -- union { -- struct { -- unsigned int mask; -- struct snd_ctl_elem_id id; -- } elem; -- unsigned char data8[60]; -- } data; --}; -- --/* -- * Control names -- */ -- --#define SNDRV_CTL_NAME_NONE "" --#define SNDRV_CTL_NAME_PLAYBACK "Playback " --#define SNDRV_CTL_NAME_CAPTURE "Capture " -- --#define SNDRV_CTL_NAME_IEC958_NONE "" --#define SNDRV_CTL_NAME_IEC958_SWITCH "Switch" --#define SNDRV_CTL_NAME_IEC958_VOLUME "Volume" --#define SNDRV_CTL_NAME_IEC958_DEFAULT "Default" --#define SNDRV_CTL_NAME_IEC958_MASK "Mask" --#define SNDRV_CTL_NAME_IEC958_CON_MASK "Con Mask" --#define SNDRV_CTL_NAME_IEC958_PRO_MASK "Pro Mask" --#define SNDRV_CTL_NAME_IEC958_PCM_STREAM "PCM Stream" --#define SNDRV_CTL_NAME_IEC958(expl,direction,what) "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what -- --#endif /* _UAPI__SOUND_ASOUND_H */ -+#include -diff --git a/include/sound/asound_fm.h b/include/sound/asound_fm.h -index 8471f404..3e5da4d0 100644 ---- a/include/sound/asound_fm.h -+++ b/include/sound/asound_fm.h -@@ -1,135 +1 @@ --/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ --#ifndef __SOUND_ASOUND_FM_H --#define __SOUND_ASOUND_FM_H -- --/* -- * Advanced Linux Sound Architecture - ALSA -- * -- * Interface file between ALSA driver & user space -- * Copyright (c) 1994-98 by Jaroslav Kysela , -- * 4Front Technologies -- * -- * Direct FM control -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -- * -- */ -- --#define SNDRV_DM_FM_MODE_OPL2 0x00 --#define SNDRV_DM_FM_MODE_OPL3 0x01 -- --struct snd_dm_fm_info { -- unsigned char fm_mode; /* OPL mode, see SNDRV_DM_FM_MODE_XXX */ -- unsigned char rhythm; /* percussion mode flag */ --}; -- --/* -- * Data structure composing an FM "note" or sound event. -- */ -- --struct snd_dm_fm_voice { -- unsigned char op; /* operator cell (0 or 1) */ -- unsigned char voice; /* FM voice (0 to 17) */ -- -- unsigned char am; /* amplitude modulation */ -- unsigned char vibrato; /* vibrato effect */ -- unsigned char do_sustain; /* sustain phase */ -- unsigned char kbd_scale; /* keyboard scaling */ -- unsigned char harmonic; /* 4 bits: harmonic and multiplier */ -- unsigned char scale_level; /* 2 bits: decrease output freq rises */ -- unsigned char volume; /* 6 bits: volume */ -- -- unsigned char attack; /* 4 bits: attack rate */ -- unsigned char decay; /* 4 bits: decay rate */ -- unsigned char sustain; /* 4 bits: sustain level */ -- unsigned char release; /* 4 bits: release rate */ -- -- unsigned char feedback; /* 3 bits: feedback for op0 */ -- unsigned char connection; /* 0 for serial, 1 for parallel */ -- unsigned char left; /* stereo left */ -- unsigned char right; /* stereo right */ -- unsigned char waveform; /* 3 bits: waveform shape */ --}; -- --/* -- * This describes an FM note by its voice, octave, frequency number (10bit) -- * and key on/off. -- */ -- --struct snd_dm_fm_note { -- unsigned char voice; /* 0-17 voice channel */ -- unsigned char octave; /* 3 bits: what octave to play */ -- unsigned int fnum; /* 10 bits: frequency number */ -- unsigned char key_on; /* set for active, clear for silent */ --}; -- --/* -- * FM parameters that apply globally to all voices, and thus are not "notes" -- */ -- --struct snd_dm_fm_params { -- unsigned char am_depth; /* amplitude modulation depth (1=hi) */ -- unsigned char vib_depth; /* vibrato depth (1=hi) */ -- unsigned char kbd_split; /* keyboard split */ -- unsigned char rhythm; /* percussion mode select */ -- -- /* This block is the percussion instrument data */ -- unsigned char bass; -- unsigned char snare; -- unsigned char tomtom; -- unsigned char cymbal; -- unsigned char hihat; --}; -- --/* -- * FM mode ioctl settings -- */ -- --#define SNDRV_DM_FM_IOCTL_INFO _IOR('H', 0x20, struct snd_dm_fm_info) --#define SNDRV_DM_FM_IOCTL_RESET _IO ('H', 0x21) --#define SNDRV_DM_FM_IOCTL_PLAY_NOTE _IOW('H', 0x22, struct snd_dm_fm_note) --#define SNDRV_DM_FM_IOCTL_SET_VOICE _IOW('H', 0x23, struct snd_dm_fm_voice) --#define SNDRV_DM_FM_IOCTL_SET_PARAMS _IOW('H', 0x24, struct snd_dm_fm_params) --#define SNDRV_DM_FM_IOCTL_SET_MODE _IOW('H', 0x25, int) --/* for OPL3 only */ --#define SNDRV_DM_FM_IOCTL_SET_CONNECTION _IOW('H', 0x26, int) --/* SBI patch management */ --#define SNDRV_DM_FM_IOCTL_CLEAR_PATCHES _IO ('H', 0x40) -- --#define SNDRV_DM_FM_OSS_IOCTL_RESET 0x20 --#define SNDRV_DM_FM_OSS_IOCTL_PLAY_NOTE 0x21 --#define SNDRV_DM_FM_OSS_IOCTL_SET_VOICE 0x22 --#define SNDRV_DM_FM_OSS_IOCTL_SET_PARAMS 0x23 --#define SNDRV_DM_FM_OSS_IOCTL_SET_MODE 0x24 --#define SNDRV_DM_FM_OSS_IOCTL_SET_OPL 0x25 -- --/* -- * Patch Record - fixed size for write -- */ -- --#define FM_KEY_SBI "SBI\032" --#define FM_KEY_2OP "2OP\032" --#define FM_KEY_4OP "4OP\032" -- --struct sbi_patch { -- unsigned char prog; -- unsigned char bank; -- char key[4]; -- char name[25]; -- char extension[7]; -- unsigned char data[32]; --}; -- --#endif /* __SOUND_ASOUND_FM_H */ -+#include -diff --git a/include/sound/emu10k1.h b/include/sound/emu10k1.h -index 042c5a6f..f06ecee5 100644 ---- a/include/sound/emu10k1.h -+++ b/include/sound/emu10k1.h -@@ -1,381 +1,2 @@ --/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ --/* -- * Copyright (c) by Jaroslav Kysela , -- * Creative Labs, Inc. -- * Definitions for EMU10K1 (SB Live!) chips -- * -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -- * -- */ --#ifndef _UAPI__SOUND_EMU10K1_H --#define _UAPI__SOUND_EMU10K1_H -- --#include --#include -- --/* -- * ---- FX8010 ---- -- */ -- --#define EMU10K1_CARD_CREATIVE 0x00000000 --#define EMU10K1_CARD_EMUAPS 0x00000001 -- --#define EMU10K1_FX8010_PCM_COUNT 8 -- --/* -- * Following definition is copied from linux/types.h to support compiling -- * this header file in userspace since they are not generally available for -- * uapi headers. -- */ --#define __EMU10K1_DECLARE_BITMAP(name,bits) \ -- unsigned long name[(bits) / (sizeof(unsigned long) * 8)] -- --/* instruction set */ --#define iMAC0 0x00 /* R = A + (X * Y >> 31) ; saturation */ --#define iMAC1 0x01 /* R = A + (-X * Y >> 31) ; saturation */ --#define iMAC2 0x02 /* R = A + (X * Y >> 31) ; wraparound */ --#define iMAC3 0x03 /* R = A + (-X * Y >> 31) ; wraparound */ --#define iMACINT0 0x04 /* R = A + X * Y ; saturation */ --#define iMACINT1 0x05 /* R = A + X * Y ; wraparound (31-bit) */ --#define iACC3 0x06 /* R = A + X + Y ; saturation */ --#define iMACMV 0x07 /* R = A, acc += X * Y >> 31 */ --#define iANDXOR 0x08 /* R = (A & X) ^ Y */ --#define iTSTNEG 0x09 /* R = (A >= Y) ? X : ~X */ --#define iLIMITGE 0x0a /* R = (A >= Y) ? X : Y */ --#define iLIMITLT 0x0b /* R = (A < Y) ? X : Y */ --#define iLOG 0x0c /* R = linear_data, A (log_data), X (max_exp), Y (format_word) */ --#define iEXP 0x0d /* R = log_data, A (linear_data), X (max_exp), Y (format_word) */ --#define iINTERP 0x0e /* R = A + (X * (Y - A) >> 31) ; saturation */ --#define iSKIP 0x0f /* R = A (cc_reg), X (count), Y (cc_test) */ -- --/* GPRs */ --#define FXBUS(x) (0x00 + (x)) /* x = 0x00 - 0x0f */ --#define EXTIN(x) (0x10 + (x)) /* x = 0x00 - 0x0f */ --#define EXTOUT(x) (0x20 + (x)) /* x = 0x00 - 0x0f physical outs -> FXWC low 16 bits */ --#define FXBUS2(x) (0x30 + (x)) /* x = 0x00 - 0x0f copies of fx buses for capture -> FXWC high 16 bits */ -- /* NB: 0x31 and 0x32 are shared with Center/LFE on SB live 5.1 */ -- --#define C_00000000 0x40 --#define C_00000001 0x41 --#define C_00000002 0x42 --#define C_00000003 0x43 --#define C_00000004 0x44 --#define C_00000008 0x45 --#define C_00000010 0x46 --#define C_00000020 0x47 --#define C_00000100 0x48 --#define C_00010000 0x49 --#define C_00080000 0x4a --#define C_10000000 0x4b --#define C_20000000 0x4c --#define C_40000000 0x4d --#define C_80000000 0x4e --#define C_7fffffff 0x4f --#define C_ffffffff 0x50 --#define C_fffffffe 0x51 --#define C_c0000000 0x52 --#define C_4f1bbcdc 0x53 --#define C_5a7ef9db 0x54 --#define C_00100000 0x55 /* ?? */ --#define GPR_ACCU 0x56 /* ACCUM, accumulator */ --#define GPR_COND 0x57 /* CCR, condition register */ --#define GPR_NOISE0 0x58 /* noise source */ --#define GPR_NOISE1 0x59 /* noise source */ --#define GPR_IRQ 0x5a /* IRQ register */ --#define GPR_DBAC 0x5b /* TRAM Delay Base Address Counter */ --#define GPR(x) (FXGPREGBASE + (x)) /* free GPRs: x = 0x00 - 0xff */ --#define ITRAM_DATA(x) (TANKMEMDATAREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */ --#define ETRAM_DATA(x) (TANKMEMDATAREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */ --#define ITRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */ --#define ETRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */ -- --#define A_ITRAM_DATA(x) (TANKMEMDATAREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */ --#define A_ETRAM_DATA(x) (TANKMEMDATAREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */ --#define A_ITRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */ --#define A_ETRAM_ADDR(x) (TANKMEMADDRREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */ --#define A_ITRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */ --#define A_ETRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */ -- --#define A_FXBUS(x) (0x00 + (x)) /* x = 0x00 - 0x3f FX buses */ --#define A_EXTIN(x) (0x40 + (x)) /* x = 0x00 - 0x0f physical ins */ --#define A_P16VIN(x) (0x50 + (x)) /* x = 0x00 - 0x0f p16v ins (A2 only) "EMU32 inputs" */ --#define A_EXTOUT(x) (0x60 + (x)) /* x = 0x00 - 0x1f physical outs -> A_FXWC1 0x79-7f unknown */ --#define A_FXBUS2(x) (0x80 + (x)) /* x = 0x00 - 0x1f extra outs used for EFX capture -> A_FXWC2 */ --#define A_EMU32OUTH(x) (0xa0 + (x)) /* x = 0x00 - 0x0f "EMU32_OUT_10 - _1F" - ??? */ --#define A_EMU32OUTL(x) (0xb0 + (x)) /* x = 0x00 - 0x0f "EMU32_OUT_1 - _F" - ??? */ --#define A3_EMU32IN(x) (0x160 + (x)) /* x = 0x00 - 0x3f "EMU32_IN_00 - _3F" - Only when .device = 0x0008 */ --#define A3_EMU32OUT(x) (0x1E0 + (x)) /* x = 0x00 - 0x0f "EMU32_OUT_00 - _3F" - Only when .device = 0x0008 */ --#define A_GPR(x) (A_FXGPREGBASE + (x)) -- --/* cc_reg constants */ --#define CC_REG_NORMALIZED C_00000001 --#define CC_REG_BORROW C_00000002 --#define CC_REG_MINUS C_00000004 --#define CC_REG_ZERO C_00000008 --#define CC_REG_SATURATE C_00000010 --#define CC_REG_NONZERO C_00000100 -- --/* FX buses */ --#define FXBUS_PCM_LEFT 0x00 --#define FXBUS_PCM_RIGHT 0x01 --#define FXBUS_PCM_LEFT_REAR 0x02 --#define FXBUS_PCM_RIGHT_REAR 0x03 --#define FXBUS_MIDI_LEFT 0x04 --#define FXBUS_MIDI_RIGHT 0x05 --#define FXBUS_PCM_CENTER 0x06 --#define FXBUS_PCM_LFE 0x07 --#define FXBUS_PCM_LEFT_FRONT 0x08 --#define FXBUS_PCM_RIGHT_FRONT 0x09 --#define FXBUS_MIDI_REVERB 0x0c --#define FXBUS_MIDI_CHORUS 0x0d --#define FXBUS_PCM_LEFT_SIDE 0x0e --#define FXBUS_PCM_RIGHT_SIDE 0x0f --#define FXBUS_PT_LEFT 0x14 --#define FXBUS_PT_RIGHT 0x15 -- --/* Inputs */ --#define EXTIN_AC97_L 0x00 /* AC'97 capture channel - left */ --#define EXTIN_AC97_R 0x01 /* AC'97 capture channel - right */ --#define EXTIN_SPDIF_CD_L 0x02 /* internal S/PDIF CD - onboard - left */ --#define EXTIN_SPDIF_CD_R 0x03 /* internal S/PDIF CD - onboard - right */ --#define EXTIN_ZOOM_L 0x04 /* Zoom Video I2S - left */ --#define EXTIN_ZOOM_R 0x05 /* Zoom Video I2S - right */ --#define EXTIN_TOSLINK_L 0x06 /* LiveDrive - TOSLink Optical - left */ --#define EXTIN_TOSLINK_R 0x07 /* LiveDrive - TOSLink Optical - right */ --#define EXTIN_LINE1_L 0x08 /* LiveDrive - Line/Mic 1 - left */ --#define EXTIN_LINE1_R 0x09 /* LiveDrive - Line/Mic 1 - right */ --#define EXTIN_COAX_SPDIF_L 0x0a /* LiveDrive - Coaxial S/PDIF - left */ --#define EXTIN_COAX_SPDIF_R 0x0b /* LiveDrive - Coaxial S/PDIF - right */ --#define EXTIN_LINE2_L 0x0c /* LiveDrive - Line/Mic 2 - left */ --#define EXTIN_LINE2_R 0x0d /* LiveDrive - Line/Mic 2 - right */ -- --/* Outputs */ --#define EXTOUT_AC97_L 0x00 /* AC'97 playback channel - left */ --#define EXTOUT_AC97_R 0x01 /* AC'97 playback channel - right */ --#define EXTOUT_TOSLINK_L 0x02 /* LiveDrive - TOSLink Optical - left */ --#define EXTOUT_TOSLINK_R 0x03 /* LiveDrive - TOSLink Optical - right */ --#define EXTOUT_AC97_CENTER 0x04 /* SB Live 5.1 - center */ --#define EXTOUT_AC97_LFE 0x05 /* SB Live 5.1 - LFE */ --#define EXTOUT_HEADPHONE_L 0x06 /* LiveDrive - Headphone - left */ --#define EXTOUT_HEADPHONE_R 0x07 /* LiveDrive - Headphone - right */ --#define EXTOUT_REAR_L 0x08 /* Rear channel - left */ --#define EXTOUT_REAR_R 0x09 /* Rear channel - right */ --#define EXTOUT_ADC_CAP_L 0x0a /* ADC Capture buffer - left */ --#define EXTOUT_ADC_CAP_R 0x0b /* ADC Capture buffer - right */ --#define EXTOUT_MIC_CAP 0x0c /* MIC Capture buffer */ --#define EXTOUT_AC97_REAR_L 0x0d /* SB Live 5.1 (c) 2003 - Rear Left */ --#define EXTOUT_AC97_REAR_R 0x0e /* SB Live 5.1 (c) 2003 - Rear Right */ --#define EXTOUT_ACENTER 0x11 /* Analog Center */ --#define EXTOUT_ALFE 0x12 /* Analog LFE */ -- --/* Audigy Inputs */ --#define A_EXTIN_AC97_L 0x00 /* AC'97 capture channel - left */ --#define A_EXTIN_AC97_R 0x01 /* AC'97 capture channel - right */ --#define A_EXTIN_SPDIF_CD_L 0x02 /* digital CD left */ --#define A_EXTIN_SPDIF_CD_R 0x03 /* digital CD left */ --#define A_EXTIN_OPT_SPDIF_L 0x04 /* audigy drive Optical SPDIF - left */ --#define A_EXTIN_OPT_SPDIF_R 0x05 /* right */ --#define A_EXTIN_LINE2_L 0x08 /* audigy drive line2/mic2 - left */ --#define A_EXTIN_LINE2_R 0x09 /* right */ --#define A_EXTIN_ADC_L 0x0a /* Philips ADC - left */ --#define A_EXTIN_ADC_R 0x0b /* right */ --#define A_EXTIN_AUX2_L 0x0c /* audigy drive aux2 - left */ --#define A_EXTIN_AUX2_R 0x0d /* - right */ -- --/* Audigiy Outputs */ --#define A_EXTOUT_FRONT_L 0x00 /* digital front left */ --#define A_EXTOUT_FRONT_R 0x01 /* right */ --#define A_EXTOUT_CENTER 0x02 /* digital front center */ --#define A_EXTOUT_LFE 0x03 /* digital front lfe */ --#define A_EXTOUT_HEADPHONE_L 0x04 /* headphone audigy drive left */ --#define A_EXTOUT_HEADPHONE_R 0x05 /* right */ --#define A_EXTOUT_REAR_L 0x06 /* digital rear left */ --#define A_EXTOUT_REAR_R 0x07 /* right */ --#define A_EXTOUT_AFRONT_L 0x08 /* analog front left */ --#define A_EXTOUT_AFRONT_R 0x09 /* right */ --#define A_EXTOUT_ACENTER 0x0a /* analog center */ --#define A_EXTOUT_ALFE 0x0b /* analog LFE */ --#define A_EXTOUT_ASIDE_L 0x0c /* analog side left - Audigy 2 ZS */ --#define A_EXTOUT_ASIDE_R 0x0d /* right - Audigy 2 ZS */ --#define A_EXTOUT_AREAR_L 0x0e /* analog rear left */ --#define A_EXTOUT_AREAR_R 0x0f /* right */ --#define A_EXTOUT_AC97_L 0x10 /* AC97 left (front) */ --#define A_EXTOUT_AC97_R 0x11 /* right */ --#define A_EXTOUT_ADC_CAP_L 0x16 /* ADC capture buffer left */ --#define A_EXTOUT_ADC_CAP_R 0x17 /* right */ --#define A_EXTOUT_MIC_CAP 0x18 /* Mic capture buffer */ -- --/* Audigy constants */ --#define A_C_00000000 0xc0 --#define A_C_00000001 0xc1 --#define A_C_00000002 0xc2 --#define A_C_00000003 0xc3 --#define A_C_00000004 0xc4 --#define A_C_00000008 0xc5 --#define A_C_00000010 0xc6 --#define A_C_00000020 0xc7 --#define A_C_00000100 0xc8 --#define A_C_00010000 0xc9 --#define A_C_00000800 0xca --#define A_C_10000000 0xcb --#define A_C_20000000 0xcc --#define A_C_40000000 0xcd --#define A_C_80000000 0xce --#define A_C_7fffffff 0xcf --#define A_C_ffffffff 0xd0 --#define A_C_fffffffe 0xd1 --#define A_C_c0000000 0xd2 --#define A_C_4f1bbcdc 0xd3 --#define A_C_5a7ef9db 0xd4 --#define A_C_00100000 0xd5 --#define A_GPR_ACCU 0xd6 /* ACCUM, accumulator */ --#define A_GPR_COND 0xd7 /* CCR, condition register */ --#define A_GPR_NOISE0 0xd8 /* noise source */ --#define A_GPR_NOISE1 0xd9 /* noise source */ --#define A_GPR_IRQ 0xda /* IRQ register */ --#define A_GPR_DBAC 0xdb /* TRAM Delay Base Address Counter - internal */ --#define A_GPR_DBACE 0xde /* TRAM Delay Base Address Counter - external */ -- --/* definitions for debug register */ --#define EMU10K1_DBG_ZC 0x80000000 /* zero tram counter */ --#define EMU10K1_DBG_SATURATION_OCCURED 0x02000000 /* saturation control */ --#define EMU10K1_DBG_SATURATION_ADDR 0x01ff0000 /* saturation address */ --#define EMU10K1_DBG_SINGLE_STEP 0x00008000 /* single step mode */ --#define EMU10K1_DBG_STEP 0x00004000 /* start single step */ --#define EMU10K1_DBG_CONDITION_CODE 0x00003e00 /* condition code */ --#define EMU10K1_DBG_SINGLE_STEP_ADDR 0x000001ff /* single step address */ -- --/* tank memory address line */ --#ifndef __KERNEL__ --#define TANKMEMADDRREG_ADDR_MASK 0x000fffff /* 20 bit tank address field */ --#define TANKMEMADDRREG_CLEAR 0x00800000 /* Clear tank memory */ --#define TANKMEMADDRREG_ALIGN 0x00400000 /* Align read or write relative to tank access */ --#define TANKMEMADDRREG_WRITE 0x00200000 /* Write to tank memory */ --#define TANKMEMADDRREG_READ 0x00100000 /* Read from tank memory */ --#endif -- --struct snd_emu10k1_fx8010_info { -- unsigned int internal_tram_size; /* in samples */ -- unsigned int external_tram_size; /* in samples */ -- char fxbus_names[16][32]; /* names of FXBUSes */ -- char extin_names[16][32]; /* names of external inputs */ -- char extout_names[32][32]; /* names of external outputs */ -- unsigned int gpr_controls; /* count of GPR controls */ --}; -- --#define EMU10K1_GPR_TRANSLATION_NONE 0 --#define EMU10K1_GPR_TRANSLATION_TABLE100 1 --#define EMU10K1_GPR_TRANSLATION_BASS 2 --#define EMU10K1_GPR_TRANSLATION_TREBLE 3 --#define EMU10K1_GPR_TRANSLATION_ONOFF 4 -- --struct snd_emu10k1_fx8010_control_gpr { -- struct snd_ctl_elem_id id; /* full control ID definition */ -- unsigned int vcount; /* visible count */ -- unsigned int count; /* count of GPR (1..16) */ -- unsigned short gpr[32]; /* GPR number(s) */ -- unsigned int value[32]; /* initial values */ -- unsigned int min; /* minimum range */ -- unsigned int max; /* maximum range */ -- unsigned int translation; /* translation type (EMU10K1_GPR_TRANSLATION*) */ -- const unsigned int *tlv; --}; -- --/* old ABI without TLV support */ --struct snd_emu10k1_fx8010_control_old_gpr { -- struct snd_ctl_elem_id id; -- unsigned int vcount; -- unsigned int count; -- unsigned short gpr[32]; -- unsigned int value[32]; -- unsigned int min; -- unsigned int max; -- unsigned int translation; --}; -- --struct snd_emu10k1_fx8010_code { -- char name[128]; -- -- __EMU10K1_DECLARE_BITMAP(gpr_valid, 0x200); /* bitmask of valid initializers */ -- __u32 __user *gpr_map; /* initializers */ -- -- unsigned int gpr_add_control_count; /* count of GPR controls to add/replace */ -- struct snd_emu10k1_fx8010_control_gpr __user *gpr_add_controls; /* GPR controls to add/replace */ -- -- unsigned int gpr_del_control_count; /* count of GPR controls to remove */ -- struct snd_ctl_elem_id __user *gpr_del_controls; /* IDs of GPR controls to remove */ -- -- unsigned int gpr_list_control_count; /* count of GPR controls to list */ -- unsigned int gpr_list_control_total; /* total count of GPR controls */ -- struct snd_emu10k1_fx8010_control_gpr __user *gpr_list_controls; /* listed GPR controls */ -- -- __EMU10K1_DECLARE_BITMAP(tram_valid, 0x100); /* bitmask of valid initializers */ -- __u32 __user *tram_data_map; /* data initializers */ -- __u32 __user *tram_addr_map; /* map initializers */ -- -- __EMU10K1_DECLARE_BITMAP(code_valid, 1024); /* bitmask of valid instructions */ -- __u32 __user *code; /* one instruction - 64 bits */ --}; -- --struct snd_emu10k1_fx8010_tram { -- unsigned int address; /* 31.bit == 1 -> external TRAM */ -- unsigned int size; /* size in samples (4 bytes) */ -- unsigned int *samples; /* pointer to samples (20-bit) */ -- /* NULL->clear memory */ --}; -- --struct snd_emu10k1_fx8010_pcm_rec { -- unsigned int substream; /* substream number */ -- unsigned int res1; /* reserved */ -- unsigned int channels; /* 16-bit channels count, zero = remove this substream */ -- unsigned int tram_start; /* ring buffer position in TRAM (in samples) */ -- unsigned int buffer_size; /* count of buffered samples */ -- unsigned short gpr_size; /* GPR containing size of ringbuffer in samples (host) */ -- unsigned short gpr_ptr; /* GPR containing current pointer in the ring buffer (host = reset, FX8010) */ -- unsigned short gpr_count; /* GPR containing count of samples between two interrupts (host) */ -- unsigned short gpr_tmpcount; /* GPR containing current count of samples to interrupt (host = set, FX8010) */ -- unsigned short gpr_trigger; /* GPR containing trigger (activate) information (host) */ -- unsigned short gpr_running; /* GPR containing info if PCM is running (FX8010) */ -- unsigned char pad; /* reserved */ -- unsigned char etram[32]; /* external TRAM address & data (one per channel) */ -- unsigned int res2; /* reserved */ --}; -- --#define SNDRV_EMU10K1_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 1) -- --#define SNDRV_EMU10K1_IOCTL_INFO _IOR ('H', 0x10, struct snd_emu10k1_fx8010_info) --#define SNDRV_EMU10K1_IOCTL_CODE_POKE _IOW ('H', 0x11, struct snd_emu10k1_fx8010_code) --#define SNDRV_EMU10K1_IOCTL_CODE_PEEK _IOWR('H', 0x12, struct snd_emu10k1_fx8010_code) --#define SNDRV_EMU10K1_IOCTL_TRAM_SETUP _IOW ('H', 0x20, int) --#define SNDRV_EMU10K1_IOCTL_TRAM_POKE _IOW ('H', 0x21, struct snd_emu10k1_fx8010_tram) --#define SNDRV_EMU10K1_IOCTL_TRAM_PEEK _IOWR('H', 0x22, struct snd_emu10k1_fx8010_tram) --#define SNDRV_EMU10K1_IOCTL_PCM_POKE _IOW ('H', 0x30, struct snd_emu10k1_fx8010_pcm_rec) --#define SNDRV_EMU10K1_IOCTL_PCM_PEEK _IOWR('H', 0x31, struct snd_emu10k1_fx8010_pcm_rec) --#define SNDRV_EMU10K1_IOCTL_PVERSION _IOR ('H', 0x40, int) --#define SNDRV_EMU10K1_IOCTL_STOP _IO ('H', 0x80) --#define SNDRV_EMU10K1_IOCTL_CONTINUE _IO ('H', 0x81) --#define SNDRV_EMU10K1_IOCTL_ZERO_TRAM_COUNTER _IO ('H', 0x82) --#define SNDRV_EMU10K1_IOCTL_SINGLE_STEP _IOW ('H', 0x83, int) --#define SNDRV_EMU10K1_IOCTL_DBG_READ _IOR ('H', 0x84, int) -- --/* typedefs for compatibility to user-space */ --typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t; --typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t; --typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t; --typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t; --typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t; -- --#endif /* _UAPI__SOUND_EMU10K1_H */ -+#include -+#include -diff --git a/include/sound/hdsp.h b/include/sound/hdsp.h -index 5dc0c3db..78fb745b 100644 ---- a/include/sound/hdsp.h -+++ b/include/sound/hdsp.h -@@ -1,111 +1,2 @@ --/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ --#ifndef __SOUND_HDSP_H --#define __SOUND_HDSP_H -- --/* -- * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -- */ -- --#include -- --#define HDSP_MATRIX_MIXER_SIZE 2048 -- --enum HDSP_IO_Type { -- Digiface, -- Multiface, -- H9652, -- H9632, -- RPM, -- Undefined, --}; -- --struct hdsp_peak_rms { -- __u32 input_peaks[26]; -- __u32 playback_peaks[26]; -- __u32 output_peaks[28]; -- __u64 input_rms[26]; -- __u64 playback_rms[26]; -- /* These are only used for H96xx cards */ -- __u64 output_rms[26]; --}; -- --#define SNDRV_HDSP_IOCTL_GET_PEAK_RMS _IOR('H', 0x40, struct hdsp_peak_rms) -- --struct hdsp_config_info { -- unsigned char pref_sync_ref; -- unsigned char wordclock_sync_check; -- unsigned char spdif_sync_check; -- unsigned char adatsync_sync_check; -- unsigned char adat_sync_check[3]; -- unsigned char spdif_in; -- unsigned char spdif_out; -- unsigned char spdif_professional; -- unsigned char spdif_emphasis; -- unsigned char spdif_nonaudio; -- unsigned int spdif_sample_rate; -- unsigned int system_sample_rate; -- unsigned int autosync_sample_rate; -- unsigned char system_clock_mode; -- unsigned char clock_source; -- unsigned char autosync_ref; -- unsigned char line_out; -- unsigned char passthru; -- unsigned char da_gain; -- unsigned char ad_gain; -- unsigned char phone_gain; -- unsigned char xlr_breakout_cable; -- unsigned char analog_extension_board; --}; -- --#define SNDRV_HDSP_IOCTL_GET_CONFIG_INFO _IOR('H', 0x41, struct hdsp_config_info) -- --struct hdsp_firmware { -- void __user *firmware_data; /* 24413 x 4 bytes */ --}; -- --#define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE _IOW('H', 0x42, struct hdsp_firmware) -- --struct hdsp_version { -- enum HDSP_IO_Type io_type; -- unsigned short firmware_rev; --}; -- --#define SNDRV_HDSP_IOCTL_GET_VERSION _IOR('H', 0x43, struct hdsp_version) -- --struct hdsp_mixer { -- unsigned short matrix[HDSP_MATRIX_MIXER_SIZE]; --}; -- --#define SNDRV_HDSP_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdsp_mixer) -- --struct hdsp_9632_aeb { -- int aebi; -- int aebo; --}; -- --#define SNDRV_HDSP_IOCTL_GET_9632_AEB _IOR('H', 0x45, struct hdsp_9632_aeb) -- --/* typedefs for compatibility to user-space */ --typedef enum HDSP_IO_Type HDSP_IO_Type; --typedef struct hdsp_peak_rms hdsp_peak_rms_t; --typedef struct hdsp_config_info hdsp_config_info_t; --typedef struct hdsp_firmware hdsp_firmware_t; --typedef struct hdsp_version hdsp_version_t; --typedef struct hdsp_mixer hdsp_mixer_t; --typedef struct hdsp_9632_aeb hdsp_9632_aeb_t; -- --#endif /* __SOUND_HDSP_H */ -+#include -+#include -diff --git a/include/sound/hdspm.h b/include/sound/hdspm.h -index a38f3f79..af6d19ed 100644 ---- a/include/sound/hdspm.h -+++ b/include/sound/hdspm.h -@@ -1,232 +1,2 @@ --/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ --#ifndef __SOUND_HDSPM_H --#define __SOUND_HDSPM_H --/* -- * Copyright (C) 2003 Winfried Ritsch (IEM) -- * based on hdsp.h from Thomas Charbonnel (thomas@undata.org) -- * -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -- */ -- --#include -- --/* Maximum channels is 64 even on 56Mode you have 64playbacks to matrix */ --#define HDSPM_MAX_CHANNELS 64 -- --enum hdspm_io_type { -- MADI, -- MADIface, -- AIO, -- AES32, -- RayDAT --}; -- --enum hdspm_speed { -- ss, -- ds, -- qs --}; -- --/* -------------------- IOCTL Peak/RMS Meters -------------------- */ -- --struct hdspm_peak_rms { -- __u32 input_peaks[64]; -- __u32 playback_peaks[64]; -- __u32 output_peaks[64]; -- -- __u64 input_rms[64]; -- __u64 playback_rms[64]; -- __u64 output_rms[64]; -- -- __u8 speed; /* enum {ss, ds, qs} */ -- int status2; --}; -- --#define SNDRV_HDSPM_IOCTL_GET_PEAK_RMS \ -- _IOR('H', 0x42, struct hdspm_peak_rms) -- --/* ------------ CONFIG block IOCTL ---------------------- */ -- --struct hdspm_config { -- unsigned char pref_sync_ref; -- unsigned char wordclock_sync_check; -- unsigned char madi_sync_check; -- unsigned int system_sample_rate; -- unsigned int autosync_sample_rate; -- unsigned char system_clock_mode; -- unsigned char clock_source; -- unsigned char autosync_ref; -- unsigned char line_out; -- unsigned int passthru; -- unsigned int analog_out; --}; -- --#define SNDRV_HDSPM_IOCTL_GET_CONFIG \ -- _IOR('H', 0x41, struct hdspm_config) -- --/* -- * If there's a TCO (TimeCode Option) board installed, -- * there are further options and status data available. -- * The hdspm_ltc structure contains the current SMPTE -- * timecode and some status information and can be -- * obtained via SNDRV_HDSPM_IOCTL_GET_LTC or in the -- * hdspm_status struct. -- */ -- --enum hdspm_ltc_format { -- format_invalid, -- fps_24, -- fps_25, -- fps_2997, -- fps_30 --}; -- --enum hdspm_ltc_frame { -- frame_invalid, -- drop_frame, -- full_frame --}; -- --enum hdspm_ltc_input_format { -- ntsc, -- pal, -- no_video --}; -- --struct hdspm_ltc { -- unsigned int ltc; -- -- enum hdspm_ltc_format format; -- enum hdspm_ltc_frame frame; -- enum hdspm_ltc_input_format input_format; --}; -- --#define SNDRV_HDSPM_IOCTL_GET_LTC _IOR('H', 0x46, struct hdspm_ltc) -- --/* -- * The status data reflects the device's current state -- * as determined by the card's configuration and -- * connection status. -- */ -- --enum hdspm_sync { -- hdspm_sync_no_lock = 0, -- hdspm_sync_lock = 1, -- hdspm_sync_sync = 2 --}; -- --enum hdspm_madi_input { -- hdspm_input_optical = 0, -- hdspm_input_coax = 1 --}; -- --enum hdspm_madi_channel_format { -- hdspm_format_ch_64 = 0, -- hdspm_format_ch_56 = 1 --}; -- --enum hdspm_madi_frame_format { -- hdspm_frame_48 = 0, -- hdspm_frame_96 = 1 --}; -- --enum hdspm_syncsource { -- syncsource_wc = 0, -- syncsource_madi = 1, -- syncsource_tco = 2, -- syncsource_sync = 3, -- syncsource_none = 4 --}; -- --struct hdspm_status { -- __u8 card_type; /* enum hdspm_io_type */ -- enum hdspm_syncsource autosync_source; -- -- __u64 card_clock; -- __u32 master_period; -- -- union { -- struct { -- __u8 sync_wc; /* enum hdspm_sync */ -- __u8 sync_madi; /* enum hdspm_sync */ -- __u8 sync_tco; /* enum hdspm_sync */ -- __u8 sync_in; /* enum hdspm_sync */ -- __u8 madi_input; /* enum hdspm_madi_input */ -- __u8 channel_format; /* enum hdspm_madi_channel_format */ -- __u8 frame_format; /* enum hdspm_madi_frame_format */ -- } madi; -- } card_specific; --}; -- --#define SNDRV_HDSPM_IOCTL_GET_STATUS \ -- _IOR('H', 0x47, struct hdspm_status) -- --/* -- * Get information about the card and its add-ons. -- */ -- --#define HDSPM_ADDON_TCO 1 -- --struct hdspm_version { -- __u8 card_type; /* enum hdspm_io_type */ -- char cardname[20]; -- unsigned int serial; -- unsigned short firmware_rev; -- int addons; --}; -- --#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x48, struct hdspm_version) -- --/* ------------- get Matrix Mixer IOCTL --------------- */ -- --/* MADI mixer: 64inputs+64playback in 64outputs = 8192 => *4Byte = -- * 32768 Bytes -- */ -- --/* organisation is 64 channelfader in a continuous memory block */ --/* equivalent to hardware definition, maybe for future feature of mmap of -- * them -- */ --/* each of 64 outputs has 64 infader and 64 outfader: -- Ins to Outs mixer[out].in[in], Outstreams to Outs mixer[out].pb[pb] */ -- --#define HDSPM_MIXER_CHANNELS HDSPM_MAX_CHANNELS -- --struct hdspm_channelfader { -- unsigned int in[HDSPM_MIXER_CHANNELS]; -- unsigned int pb[HDSPM_MIXER_CHANNELS]; --}; -- --struct hdspm_mixer { -- struct hdspm_channelfader ch[HDSPM_MIXER_CHANNELS]; --}; -- --struct hdspm_mixer_ioctl { -- struct hdspm_mixer *mixer; --}; -- --/* use indirect access due to the limit of ioctl bit size */ --#define SNDRV_HDSPM_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdspm_mixer_ioctl) -- --/* typedefs for compatibility to user-space */ --typedef struct hdspm_peak_rms hdspm_peak_rms_t; --typedef struct hdspm_config_info hdspm_config_info_t; --typedef struct hdspm_version hdspm_version_t; --typedef struct hdspm_channelfader snd_hdspm_channelfader_t; --typedef struct hdspm_mixer hdspm_mixer_t; -- -- --#endif -+#include -+#include -diff --git a/include/sound/sb16_csp.h b/include/sound/sb16_csp.h -index e6485148..24121fcb 100644 ---- a/include/sound/sb16_csp.h -+++ b/include/sound/sb16_csp.h -@@ -1,123 +1 @@ --/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ --/* -- * Copyright (c) 1999 by Uros Bizjak -- * Takashi Iwai -- * -- * SB16ASP/AWE32 CSP control -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -- * -- */ --#ifndef _UAPI__SOUND_SB16_CSP_H --#define _UAPI__SOUND_SB16_CSP_H -- -- --/* CSP modes */ --#define SNDRV_SB_CSP_MODE_NONE 0x00 --#define SNDRV_SB_CSP_MODE_DSP_READ 0x01 /* Record from DSP */ --#define SNDRV_SB_CSP_MODE_DSP_WRITE 0x02 /* Play to DSP */ --#define SNDRV_SB_CSP_MODE_QSOUND 0x04 /* QSound */ -- --/* CSP load flags */ --#define SNDRV_SB_CSP_LOAD_FROMUSER 0x01 --#define SNDRV_SB_CSP_LOAD_INITBLOCK 0x02 -- --/* CSP sample width */ --#define SNDRV_SB_CSP_SAMPLE_8BIT 0x01 --#define SNDRV_SB_CSP_SAMPLE_16BIT 0x02 -- --/* CSP channels */ --#define SNDRV_SB_CSP_MONO 0x01 --#define SNDRV_SB_CSP_STEREO 0x02 -- --/* CSP rates */ --#define SNDRV_SB_CSP_RATE_8000 0x01 --#define SNDRV_SB_CSP_RATE_11025 0x02 --#define SNDRV_SB_CSP_RATE_22050 0x04 --#define SNDRV_SB_CSP_RATE_44100 0x08 --#define SNDRV_SB_CSP_RATE_ALL 0x0f -- --/* CSP running state */ --#define SNDRV_SB_CSP_ST_IDLE 0x00 --#define SNDRV_SB_CSP_ST_LOADED 0x01 --#define SNDRV_SB_CSP_ST_RUNNING 0x02 --#define SNDRV_SB_CSP_ST_PAUSED 0x04 --#define SNDRV_SB_CSP_ST_AUTO 0x08 --#define SNDRV_SB_CSP_ST_QSOUND 0x10 -- --/* maximum QSound value (180 degrees right) */ --#define SNDRV_SB_CSP_QSOUND_MAX_RIGHT 0x20 -- --/* maximum microcode RIFF file size */ --#define SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE 0x3000 -- --/* microcode header */ --struct snd_sb_csp_mc_header { -- char codec_name[16]; /* id name of codec */ -- unsigned short func_req; /* requested function */ --}; -- --/* microcode to be loaded */ --struct snd_sb_csp_microcode { -- struct snd_sb_csp_mc_header info; -- unsigned char data[SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE]; --}; -- --/* start CSP with sample_width in mono/stereo */ --struct snd_sb_csp_start { -- int sample_width; /* sample width, look above */ -- int channels; /* channels, look above */ --}; -- --/* CSP information */ --struct snd_sb_csp_info { -- char codec_name[16]; /* id name of codec */ -- unsigned short func_nr; /* function number */ -- unsigned int acc_format; /* accepted PCM formats */ -- unsigned short acc_channels; /* accepted channels */ -- unsigned short acc_width; /* accepted sample width */ -- unsigned short acc_rates; /* accepted sample rates */ -- unsigned short csp_mode; /* CSP mode, see above */ -- unsigned short run_channels; /* current channels */ -- unsigned short run_width; /* current sample width */ -- unsigned short version; /* version id: 0x10 - 0x1f */ -- unsigned short state; /* state bits */ --}; -- --/* HWDEP controls */ --/* get CSP information */ --#define SNDRV_SB_CSP_IOCTL_INFO _IOR('H', 0x10, struct snd_sb_csp_info) --/* load microcode to CSP */ --/* NOTE: struct snd_sb_csp_microcode overflows the max size (13 bits) -- * defined for some architectures like MIPS, and it leads to build errors. -- * (x86 and co have 14-bit size, thus it's valid, though.) -- * As a workaround for skipping the size-limit check, here we don't use the -- * normal _IOW() macro but _IOC() with the manual argument. -- */ --#define SNDRV_SB_CSP_IOCTL_LOAD_CODE \ -- _IOC(_IOC_WRITE, 'H', 0x11, sizeof(struct snd_sb_csp_microcode)) --/* unload microcode from CSP */ --#define SNDRV_SB_CSP_IOCTL_UNLOAD_CODE _IO('H', 0x12) --/* start CSP */ --#define SNDRV_SB_CSP_IOCTL_START _IOW('H', 0x13, struct snd_sb_csp_start) --/* stop CSP */ --#define SNDRV_SB_CSP_IOCTL_STOP _IO('H', 0x14) --/* pause CSP and DMA transfer */ --#define SNDRV_SB_CSP_IOCTL_PAUSE _IO('H', 0x15) --/* restart CSP and DMA transfer */ --#define SNDRV_SB_CSP_IOCTL_RESTART _IO('H', 0x16) -- -- --#endif /* _UAPI__SOUND_SB16_CSP_H */ -+#include -diff --git a/include/sound/sscape_ioctl.h b/include/sound/sscape_ioctl.h -index c6653ebf..23b48d33 100644 ---- a/include/sound/sscape_ioctl.h -+++ b/include/sound/sscape_ioctl.h -@@ -1,21 +1 @@ --#ifndef SSCAPE_IOCTL_H --#define SSCAPE_IOCTL_H -- -- --struct sscape_bootblock --{ -- unsigned char code[256]; -- unsigned version; --}; -- --#define SSCAPE_MICROCODE_SIZE 65536 -- --struct sscape_microcode --{ -- unsigned char *code; --}; -- --#define SND_SSCAPE_LOAD_BOOTB _IOWR('P', 100, struct sscape_bootblock) --#define SND_SSCAPE_LOAD_MCODE _IOW ('P', 101, struct sscape_microcode) -- --#endif -+#include -diff --git a/include/sound/tlv.h b/include/sound/tlv.h -index 7d6d65f6..e435a5fc 100644 ---- a/include/sound/tlv.h -+++ b/include/sound/tlv.h -@@ -1,117 +1 @@ --/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ --/* -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- */ -- --#ifndef __UAPI_SOUND_TLV_H --#define __UAPI_SOUND_TLV_H -- --#define SNDRV_CTL_TLVT_CONTAINER 0 /* one level down - group of TLVs */ --#define SNDRV_CTL_TLVT_DB_SCALE 1 /* dB scale */ --#define SNDRV_CTL_TLVT_DB_LINEAR 2 /* linear volume */ --#define SNDRV_CTL_TLVT_DB_RANGE 3 /* dB range container */ --#define SNDRV_CTL_TLVT_DB_MINMAX 4 /* dB scale with min/max */ --#define SNDRV_CTL_TLVT_DB_MINMAX_MUTE 5 /* dB scale with min/max with mute */ -- --/* -- * channel-mapping TLV items -- * TLV length must match with num_channels -- */ --#define SNDRV_CTL_TLVT_CHMAP_FIXED 0x101 /* fixed channel position */ --#define SNDRV_CTL_TLVT_CHMAP_VAR 0x102 /* channels freely swappable */ --#define SNDRV_CTL_TLVT_CHMAP_PAIRED 0x103 /* pair-wise swappable */ -- --/* -- * TLV structure is right behind the struct snd_ctl_tlv: -- * unsigned int type - see SNDRV_CTL_TLVT_* -- * unsigned int length -- * .... data aligned to sizeof(unsigned int), use -- * block_length = (length + (sizeof(unsigned int) - 1)) & -- * ~(sizeof(unsigned int) - 1)) .... -- */ --#define SNDRV_CTL_TLVD_ITEM(type, ...) \ -- (type), SNDRV_CTL_TLVD_LENGTH(__VA_ARGS__), __VA_ARGS__ --#define SNDRV_CTL_TLVD_LENGTH(...) \ -- ((unsigned int)sizeof((const unsigned int[]) { __VA_ARGS__ })) -- --/* Accessor offsets for TLV data items */ --#define SNDRV_CTL_TLVO_TYPE 0 --#define SNDRV_CTL_TLVO_LEN 1 -- --#define SNDRV_CTL_TLVD_CONTAINER_ITEM(...) \ -- SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_CONTAINER, __VA_ARGS__) --#define SNDRV_CTL_TLVD_DECLARE_CONTAINER(name, ...) \ -- unsigned int name[] = { \ -- SNDRV_CTL_TLVD_CONTAINER_ITEM(__VA_ARGS__) \ -- } -- --#define SNDRV_CTL_TLVD_DB_SCALE_MASK 0xffff --#define SNDRV_CTL_TLVD_DB_SCALE_MUTE 0x10000 --#define SNDRV_CTL_TLVD_DB_SCALE_ITEM(min, step, mute) \ -- SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_SCALE, \ -- (min), \ -- ((step) & SNDRV_CTL_TLVD_DB_SCALE_MASK) | \ -- ((mute) ? SNDRV_CTL_TLVD_DB_SCALE_MUTE : 0)) --#define SNDRV_CTL_TLVD_DECLARE_DB_SCALE(name, min, step, mute) \ -- unsigned int name[] = { \ -- SNDRV_CTL_TLVD_DB_SCALE_ITEM(min, step, mute) \ -- } -- --/* Accessor offsets for min, mute and step items in dB scale type TLV */ --#define SNDRV_CTL_TLVO_DB_SCALE_MIN 2 --#define SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP 3 -- --/* dB scale specified with min/max values instead of step */ --#define SNDRV_CTL_TLVD_DB_MINMAX_ITEM(min_dB, max_dB) \ -- SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_MINMAX, (min_dB), (max_dB)) --#define SNDRV_CTL_TLVD_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) \ -- SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_MINMAX_MUTE, (min_dB), (max_dB)) --#define SNDRV_CTL_TLVD_DECLARE_DB_MINMAX(name, min_dB, max_dB) \ -- unsigned int name[] = { \ -- SNDRV_CTL_TLVD_DB_MINMAX_ITEM(min_dB, max_dB) \ -- } --#define SNDRV_CTL_TLVD_DECLARE_DB_MINMAX_MUTE(name, min_dB, max_dB) \ -- unsigned int name[] = { \ -- SNDRV_CTL_TLVD_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) \ -- } -- --/* Accessor offsets for min, max items in db-minmax types of TLV. */ --#define SNDRV_CTL_TLVO_DB_MINMAX_MIN 2 --#define SNDRV_CTL_TLVO_DB_MINMAX_MAX 3 -- --/* linear volume between min_dB and max_dB (.01dB unit) */ --#define SNDRV_CTL_TLVD_DB_LINEAR_ITEM(min_dB, max_dB) \ -- SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_LINEAR, (min_dB), (max_dB)) --#define SNDRV_CTL_TLVD_DECLARE_DB_LINEAR(name, min_dB, max_dB) \ -- unsigned int name[] = { \ -- SNDRV_CTL_TLVD_DB_LINEAR_ITEM(min_dB, max_dB) \ -- } -- --/* Accessor offsets for min, max items in db-linear type of TLV. */ --#define SNDRV_CTL_TLVO_DB_LINEAR_MIN 2 --#define SNDRV_CTL_TLVO_DB_LINEAR_MAX 3 -- --/* dB range container: -- * Items in dB range container must be ordered by their values and by their -- * dB values. This implies that larger values must correspond with larger -- * dB values (which is also required for all other mixer controls). -- */ --/* Each item is: */ --#define SNDRV_CTL_TLVD_DB_RANGE_ITEM(...) \ -- SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_RANGE, __VA_ARGS__) --#define SNDRV_CTL_TLVD_DECLARE_DB_RANGE(name, ...) \ -- unsigned int name[] = { \ -- SNDRV_CTL_TLVD_DB_RANGE_ITEM(__VA_ARGS__) \ -- } -- --#define SNDRV_CTL_TLVD_DB_GAIN_MUTE -9999999 -- --#endif -+#include -diff --git a/include/sound/type_compat.h b/include/sound/type_compat.h -index e973ff31..d4790c1f 100644 ---- a/include/sound/type_compat.h -+++ b/include/sound/type_compat.h -@@ -3,6 +3,9 @@ - - #ifndef DOC_HIDDEN - #include -+#ifdef __linux__ -+#include -+#else - typedef uint8_t __u8; - typedef uint16_t __u16; - typedef uint32_t __u32; -@@ -37,6 +40,16 @@ typedef int32_t __s32; - #define __be32 __u32 - #define __be16 __u16 - #define __be8 __u8 -+#endif -+ -+#ifndef __user -+#define __user -+#endif -+ -+#ifndef __packed -+#define __packed __attribute__((__packed__)) -+#endif -+ - #endif /* DOC_HIDDEN */ - - #endif /* __TYPE_COMPAT_H */ -diff --git a/include/sound/uapi/Makefile.am b/include/sound/uapi/Makefile.am -new file mode 100644 -index 00000000..99197108 ---- /dev/null -+++ b/include/sound/uapi/Makefile.am -@@ -0,0 +1,6 @@ -+alsasounduapiincludedir = ${includedir}/alsa/sound/uapi -+ -+alsasounduapiinclude_HEADERS = asound_fm.h hdsp.h hdspm.h sb16_csp.h \ -+ sscape_ioctl.h emu10k1.h asoc.h tlv.h -+ -+noinst_HEADERS = asound.h asequencer.h -diff --git a/include/sound/uapi/asequencer.h b/include/sound/uapi/asequencer.h -new file mode 100644 -index 00000000..a75e14ed ---- /dev/null -+++ b/include/sound/uapi/asequencer.h -@@ -0,0 +1,612 @@ -+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ -+/* -+ * Main header file for the ALSA sequencer -+ * Copyright (c) 1998-1999 by Frank van de Pol -+ * (c) 1998-1999 by Jaroslav Kysela -+ * -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ * -+ */ -+#ifndef _UAPI__SOUND_ASEQUENCER_H -+#define _UAPI__SOUND_ASEQUENCER_H -+ -+#include -+ -+/** version of the sequencer */ -+#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 2) -+ -+/** -+ * definition of sequencer event types -+ */ -+ -+/** system messages -+ * event data type = #snd_seq_result -+ */ -+#define SNDRV_SEQ_EVENT_SYSTEM 0 -+#define SNDRV_SEQ_EVENT_RESULT 1 -+ -+/** note messages (channel specific) -+ * event data type = #snd_seq_ev_note -+ */ -+#define SNDRV_SEQ_EVENT_NOTE 5 -+#define SNDRV_SEQ_EVENT_NOTEON 6 -+#define SNDRV_SEQ_EVENT_NOTEOFF 7 -+#define SNDRV_SEQ_EVENT_KEYPRESS 8 -+ -+/** control messages (channel specific) -+ * event data type = #snd_seq_ev_ctrl -+ */ -+#define SNDRV_SEQ_EVENT_CONTROLLER 10 -+#define SNDRV_SEQ_EVENT_PGMCHANGE 11 -+#define SNDRV_SEQ_EVENT_CHANPRESS 12 -+#define SNDRV_SEQ_EVENT_PITCHBEND 13 /**< from -8192 to 8191 */ -+#define SNDRV_SEQ_EVENT_CONTROL14 14 /**< 14 bit controller value */ -+#define SNDRV_SEQ_EVENT_NONREGPARAM 15 /**< 14 bit NRPN address + 14 bit unsigned value */ -+#define SNDRV_SEQ_EVENT_REGPARAM 16 /**< 14 bit RPN address + 14 bit unsigned value */ -+ -+/** synchronisation messages -+ * event data type = #snd_seq_ev_ctrl -+ */ -+#define SNDRV_SEQ_EVENT_SONGPOS 20 /* Song Position Pointer with LSB and MSB values */ -+#define SNDRV_SEQ_EVENT_SONGSEL 21 /* Song Select with song ID number */ -+#define SNDRV_SEQ_EVENT_QFRAME 22 /* midi time code quarter frame */ -+#define SNDRV_SEQ_EVENT_TIMESIGN 23 /* SMF Time Signature event */ -+#define SNDRV_SEQ_EVENT_KEYSIGN 24 /* SMF Key Signature event */ -+ -+/** timer messages -+ * event data type = snd_seq_ev_queue_control -+ */ -+#define SNDRV_SEQ_EVENT_START 30 /* midi Real Time Start message */ -+#define SNDRV_SEQ_EVENT_CONTINUE 31 /* midi Real Time Continue message */ -+#define SNDRV_SEQ_EVENT_STOP 32 /* midi Real Time Stop message */ -+#define SNDRV_SEQ_EVENT_SETPOS_TICK 33 /* set tick queue position */ -+#define SNDRV_SEQ_EVENT_SETPOS_TIME 34 /* set realtime queue position */ -+#define SNDRV_SEQ_EVENT_TEMPO 35 /* (SMF) Tempo event */ -+#define SNDRV_SEQ_EVENT_CLOCK 36 /* midi Real Time Clock message */ -+#define SNDRV_SEQ_EVENT_TICK 37 /* midi Real Time Tick message */ -+#define SNDRV_SEQ_EVENT_QUEUE_SKEW 38 /* skew queue tempo */ -+ -+/** others -+ * event data type = none -+ */ -+#define SNDRV_SEQ_EVENT_TUNE_REQUEST 40 /* tune request */ -+#define SNDRV_SEQ_EVENT_RESET 41 /* reset to power-on state */ -+#define SNDRV_SEQ_EVENT_SENSING 42 /* "active sensing" event */ -+ -+/** echo back, kernel private messages -+ * event data type = any type -+ */ -+#define SNDRV_SEQ_EVENT_ECHO 50 /* echo event */ -+#define SNDRV_SEQ_EVENT_OSS 51 /* OSS raw event */ -+ -+/** system status messages (broadcast for subscribers) -+ * event data type = snd_seq_addr -+ */ -+#define SNDRV_SEQ_EVENT_CLIENT_START 60 /* new client has connected */ -+#define SNDRV_SEQ_EVENT_CLIENT_EXIT 61 /* client has left the system */ -+#define SNDRV_SEQ_EVENT_CLIENT_CHANGE 62 /* client status/info has changed */ -+#define SNDRV_SEQ_EVENT_PORT_START 63 /* new port was created */ -+#define SNDRV_SEQ_EVENT_PORT_EXIT 64 /* port was deleted from system */ -+#define SNDRV_SEQ_EVENT_PORT_CHANGE 65 /* port status/info has changed */ -+ -+/** port connection changes -+ * event data type = snd_seq_connect -+ */ -+#define SNDRV_SEQ_EVENT_PORT_SUBSCRIBED 66 /* ports connected */ -+#define SNDRV_SEQ_EVENT_PORT_UNSUBSCRIBED 67 /* ports disconnected */ -+ -+/* 70-89: synthesizer events - obsoleted */ -+ -+/** user-defined events with fixed length -+ * event data type = any -+ */ -+#define SNDRV_SEQ_EVENT_USR0 90 -+#define SNDRV_SEQ_EVENT_USR1 91 -+#define SNDRV_SEQ_EVENT_USR2 92 -+#define SNDRV_SEQ_EVENT_USR3 93 -+#define SNDRV_SEQ_EVENT_USR4 94 -+#define SNDRV_SEQ_EVENT_USR5 95 -+#define SNDRV_SEQ_EVENT_USR6 96 -+#define SNDRV_SEQ_EVENT_USR7 97 -+#define SNDRV_SEQ_EVENT_USR8 98 -+#define SNDRV_SEQ_EVENT_USR9 99 -+ -+/* 100-118: instrument layer - obsoleted */ -+/* 119-129: reserved */ -+ -+/* 130-139: variable length events -+ * event data type = snd_seq_ev_ext -+ * (SNDRV_SEQ_EVENT_LENGTH_VARIABLE must be set) -+ */ -+#define SNDRV_SEQ_EVENT_SYSEX 130 /* system exclusive data (variable length) */ -+#define SNDRV_SEQ_EVENT_BOUNCE 131 /* error event */ -+/* 132-134: reserved */ -+#define SNDRV_SEQ_EVENT_USR_VAR0 135 -+#define SNDRV_SEQ_EVENT_USR_VAR1 136 -+#define SNDRV_SEQ_EVENT_USR_VAR2 137 -+#define SNDRV_SEQ_EVENT_USR_VAR3 138 -+#define SNDRV_SEQ_EVENT_USR_VAR4 139 -+ -+/* 150-151: kernel events with quote - DO NOT use in user clients */ -+#define SNDRV_SEQ_EVENT_KERNEL_ERROR 150 -+#define SNDRV_SEQ_EVENT_KERNEL_QUOTE 151 /* obsolete */ -+ -+/* 152-191: reserved */ -+ -+/* 192-254: hardware specific events */ -+ -+/* 255: special event */ -+#define SNDRV_SEQ_EVENT_NONE 255 -+ -+ -+typedef unsigned char snd_seq_event_type_t; -+ -+/** event address */ -+struct snd_seq_addr { -+ unsigned char client; /**< Client number: 0..255, 255 = broadcast to all clients */ -+ unsigned char port; /**< Port within client: 0..255, 255 = broadcast to all ports */ -+}; -+ -+/** port connection */ -+struct snd_seq_connect { -+ struct snd_seq_addr sender; -+ struct snd_seq_addr dest; -+}; -+ -+ -+#define SNDRV_SEQ_ADDRESS_UNKNOWN 253 /* unknown source */ -+#define SNDRV_SEQ_ADDRESS_SUBSCRIBERS 254 /* send event to all subscribed ports */ -+#define SNDRV_SEQ_ADDRESS_BROADCAST 255 /* send event to all queues/clients/ports/channels */ -+#define SNDRV_SEQ_QUEUE_DIRECT 253 /* direct dispatch */ -+ -+ /* event mode flag - NOTE: only 8 bits available! */ -+#define SNDRV_SEQ_TIME_STAMP_TICK (0<<0) /* timestamp in clock ticks */ -+#define SNDRV_SEQ_TIME_STAMP_REAL (1<<0) /* timestamp in real time */ -+#define SNDRV_SEQ_TIME_STAMP_MASK (1<<0) -+ -+#define SNDRV_SEQ_TIME_MODE_ABS (0<<1) /* absolute timestamp */ -+#define SNDRV_SEQ_TIME_MODE_REL (1<<1) /* relative to current time */ -+#define SNDRV_SEQ_TIME_MODE_MASK (1<<1) -+ -+#define SNDRV_SEQ_EVENT_LENGTH_FIXED (0<<2) /* fixed event size */ -+#define SNDRV_SEQ_EVENT_LENGTH_VARIABLE (1<<2) /* variable event size */ -+#define SNDRV_SEQ_EVENT_LENGTH_VARUSR (2<<2) /* variable event size - user memory space */ -+#define SNDRV_SEQ_EVENT_LENGTH_MASK (3<<2) -+ -+#define SNDRV_SEQ_PRIORITY_NORMAL (0<<4) /* normal priority */ -+#define SNDRV_SEQ_PRIORITY_HIGH (1<<4) /* event should be processed before others */ -+#define SNDRV_SEQ_PRIORITY_MASK (1<<4) -+ -+ -+ /* note event */ -+struct snd_seq_ev_note { -+ unsigned char channel; -+ unsigned char note; -+ unsigned char velocity; -+ unsigned char off_velocity; /* only for SNDRV_SEQ_EVENT_NOTE */ -+ unsigned int duration; /* only for SNDRV_SEQ_EVENT_NOTE */ -+}; -+ -+ /* controller event */ -+struct snd_seq_ev_ctrl { -+ unsigned char channel; -+ unsigned char unused1, unused2, unused3; /* pad */ -+ unsigned int param; -+ signed int value; -+}; -+ -+ /* generic set of bytes (12x8 bit) */ -+struct snd_seq_ev_raw8 { -+ unsigned char d[12]; /* 8 bit value */ -+}; -+ -+ /* generic set of integers (3x32 bit) */ -+struct snd_seq_ev_raw32 { -+ unsigned int d[3]; /* 32 bit value */ -+}; -+ -+ /* external stored data */ -+struct snd_seq_ev_ext { -+ unsigned int len; /* length of data */ -+ void *ptr; /* pointer to data (note: maybe 64-bit) */ -+} __attribute__((packed)); -+ -+struct snd_seq_result { -+ int event; /* processed event type */ -+ int result; -+}; -+ -+ -+struct snd_seq_real_time { -+ unsigned int tv_sec; /* seconds */ -+ unsigned int tv_nsec; /* nanoseconds */ -+}; -+ -+typedef unsigned int snd_seq_tick_time_t; /* midi ticks */ -+ -+union snd_seq_timestamp { -+ snd_seq_tick_time_t tick; -+ struct snd_seq_real_time time; -+}; -+ -+struct snd_seq_queue_skew { -+ unsigned int value; -+ unsigned int base; -+}; -+ -+ /* queue timer control */ -+struct snd_seq_ev_queue_control { -+ unsigned char queue; /* affected queue */ -+ unsigned char pad[3]; /* reserved */ -+ union { -+ signed int value; /* affected value (e.g. tempo) */ -+ union snd_seq_timestamp time; /* time */ -+ unsigned int position; /* sync position */ -+ struct snd_seq_queue_skew skew; -+ unsigned int d32[2]; -+ unsigned char d8[8]; -+ } param; -+}; -+ -+ /* quoted event - inside the kernel only */ -+struct snd_seq_ev_quote { -+ struct snd_seq_addr origin; /* original sender */ -+ unsigned short value; /* optional data */ -+ struct snd_seq_event *event; /* quoted event */ -+} __attribute__((packed)); -+ -+ -+ /* sequencer event */ -+struct snd_seq_event { -+ snd_seq_event_type_t type; /* event type */ -+ unsigned char flags; /* event flags */ -+ char tag; -+ -+ unsigned char queue; /* schedule queue */ -+ union snd_seq_timestamp time; /* schedule time */ -+ -+ -+ struct snd_seq_addr source; /* source address */ -+ struct snd_seq_addr dest; /* destination address */ -+ -+ union { /* event data... */ -+ struct snd_seq_ev_note note; -+ struct snd_seq_ev_ctrl control; -+ struct snd_seq_ev_raw8 raw8; -+ struct snd_seq_ev_raw32 raw32; -+ struct snd_seq_ev_ext ext; -+ struct snd_seq_ev_queue_control queue; -+ union snd_seq_timestamp time; -+ struct snd_seq_addr addr; -+ struct snd_seq_connect connect; -+ struct snd_seq_result result; -+ struct snd_seq_ev_quote quote; -+ } data; -+}; -+ -+ -+/* -+ * bounce event - stored as variable size data -+ */ -+struct snd_seq_event_bounce { -+ int err; -+ struct snd_seq_event event; -+ /* external data follows here. */ -+}; -+ -+ -+ /* system information */ -+struct snd_seq_system_info { -+ int queues; /* maximum queues count */ -+ int clients; /* maximum clients count */ -+ int ports; /* maximum ports per client */ -+ int channels; /* maximum channels per port */ -+ int cur_clients; /* current clients */ -+ int cur_queues; /* current queues */ -+ char reserved[24]; -+}; -+ -+ -+ /* system running information */ -+struct snd_seq_running_info { -+ unsigned char client; /* client id */ -+ unsigned char big_endian; /* 1 = big-endian */ -+ unsigned char cpu_mode; /* 4 = 32bit, 8 = 64bit */ -+ unsigned char pad; /* reserved */ -+ unsigned char reserved[12]; -+}; -+ -+ -+ /* known client numbers */ -+#define SNDRV_SEQ_CLIENT_SYSTEM 0 -+ /* internal client numbers */ -+#define SNDRV_SEQ_CLIENT_DUMMY 14 /* midi through */ -+#define SNDRV_SEQ_CLIENT_OSS 15 /* oss sequencer emulator */ -+ -+ -+ /* client types */ -+typedef int __bitwise snd_seq_client_type_t; -+#define NO_CLIENT ((__force snd_seq_client_type_t) 0) -+#define USER_CLIENT ((__force snd_seq_client_type_t) 1) -+#define KERNEL_CLIENT ((__force snd_seq_client_type_t) 2) -+ -+ /* event filter flags */ -+#define SNDRV_SEQ_FILTER_BROADCAST (1<<0) /* accept broadcast messages */ -+#define SNDRV_SEQ_FILTER_MULTICAST (1<<1) /* accept multicast messages */ -+#define SNDRV_SEQ_FILTER_BOUNCE (1<<2) /* accept bounce event in error */ -+#define SNDRV_SEQ_FILTER_USE_EVENT (1<<31) /* use event filter */ -+ -+struct snd_seq_client_info { -+ int client; /* client number to inquire */ -+ snd_seq_client_type_t type; /* client type */ -+ char name[64]; /* client name */ -+ unsigned int filter; /* filter flags */ -+ unsigned char multicast_filter[8]; /* multicast filter bitmap */ -+ unsigned char event_filter[32]; /* event filter bitmap */ -+ int num_ports; /* RO: number of ports */ -+ int event_lost; /* number of lost events */ -+ int card; /* RO: card number[kernel] */ -+ int pid; /* RO: pid[user] */ -+ char reserved[56]; /* for future use */ -+}; -+ -+ -+/* client pool size */ -+struct snd_seq_client_pool { -+ int client; /* client number to inquire */ -+ int output_pool; /* outgoing (write) pool size */ -+ int input_pool; /* incoming (read) pool size */ -+ int output_room; /* minimum free pool size for select/blocking mode */ -+ int output_free; /* unused size */ -+ int input_free; /* unused size */ -+ char reserved[64]; -+}; -+ -+ -+/* Remove events by specified criteria */ -+ -+#define SNDRV_SEQ_REMOVE_INPUT (1<<0) /* Flush input queues */ -+#define SNDRV_SEQ_REMOVE_OUTPUT (1<<1) /* Flush output queues */ -+#define SNDRV_SEQ_REMOVE_DEST (1<<2) /* Restrict by destination q:client:port */ -+#define SNDRV_SEQ_REMOVE_DEST_CHANNEL (1<<3) /* Restrict by channel */ -+#define SNDRV_SEQ_REMOVE_TIME_BEFORE (1<<4) /* Restrict to before time */ -+#define SNDRV_SEQ_REMOVE_TIME_AFTER (1<<5) /* Restrict to time or after */ -+#define SNDRV_SEQ_REMOVE_TIME_TICK (1<<6) /* Time is in ticks */ -+#define SNDRV_SEQ_REMOVE_EVENT_TYPE (1<<7) /* Restrict to event type */ -+#define SNDRV_SEQ_REMOVE_IGNORE_OFF (1<<8) /* Do not flush off events */ -+#define SNDRV_SEQ_REMOVE_TAG_MATCH (1<<9) /* Restrict to events with given tag */ -+ -+struct snd_seq_remove_events { -+ unsigned int remove_mode; /* Flags that determine what gets removed */ -+ -+ union snd_seq_timestamp time; -+ -+ unsigned char queue; /* Queue for REMOVE_DEST */ -+ struct snd_seq_addr dest; /* Address for REMOVE_DEST */ -+ unsigned char channel; /* Channel for REMOVE_DEST */ -+ -+ int type; /* For REMOVE_EVENT_TYPE */ -+ char tag; /* Tag for REMOVE_TAG */ -+ -+ int reserved[10]; /* To allow for future binary compatibility */ -+ -+}; -+ -+ -+ /* known port numbers */ -+#define SNDRV_SEQ_PORT_SYSTEM_TIMER 0 -+#define SNDRV_SEQ_PORT_SYSTEM_ANNOUNCE 1 -+ -+ /* port capabilities (32 bits) */ -+#define SNDRV_SEQ_PORT_CAP_READ (1<<0) /* readable from this port */ -+#define SNDRV_SEQ_PORT_CAP_WRITE (1<<1) /* writable to this port */ -+ -+#define SNDRV_SEQ_PORT_CAP_SYNC_READ (1<<2) -+#define SNDRV_SEQ_PORT_CAP_SYNC_WRITE (1<<3) -+ -+#define SNDRV_SEQ_PORT_CAP_DUPLEX (1<<4) -+ -+#define SNDRV_SEQ_PORT_CAP_SUBS_READ (1<<5) /* allow read subscription */ -+#define SNDRV_SEQ_PORT_CAP_SUBS_WRITE (1<<6) /* allow write subscription */ -+#define SNDRV_SEQ_PORT_CAP_NO_EXPORT (1<<7) /* routing not allowed */ -+ -+ /* port type */ -+#define SNDRV_SEQ_PORT_TYPE_SPECIFIC (1<<0) /* hardware specific */ -+#define SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC (1<<1) /* generic MIDI device */ -+#define SNDRV_SEQ_PORT_TYPE_MIDI_GM (1<<2) /* General MIDI compatible device */ -+#define SNDRV_SEQ_PORT_TYPE_MIDI_GS (1<<3) /* GS compatible device */ -+#define SNDRV_SEQ_PORT_TYPE_MIDI_XG (1<<4) /* XG compatible device */ -+#define SNDRV_SEQ_PORT_TYPE_MIDI_MT32 (1<<5) /* MT-32 compatible device */ -+#define SNDRV_SEQ_PORT_TYPE_MIDI_GM2 (1<<6) /* General MIDI 2 compatible device */ -+ -+/* other standards...*/ -+#define SNDRV_SEQ_PORT_TYPE_SYNTH (1<<10) /* Synth device (no MIDI compatible - direct wavetable) */ -+#define SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE (1<<11) /* Sampling device (support sample download) */ -+#define SNDRV_SEQ_PORT_TYPE_SAMPLE (1<<12) /* Sampling device (sample can be downloaded at any time) */ -+/*...*/ -+#define SNDRV_SEQ_PORT_TYPE_HARDWARE (1<<16) /* driver for a hardware device */ -+#define SNDRV_SEQ_PORT_TYPE_SOFTWARE (1<<17) /* implemented in software */ -+#define SNDRV_SEQ_PORT_TYPE_SYNTHESIZER (1<<18) /* generates sound */ -+#define SNDRV_SEQ_PORT_TYPE_PORT (1<<19) /* connects to other device(s) */ -+#define SNDRV_SEQ_PORT_TYPE_APPLICATION (1<<20) /* application (sequencer/editor) */ -+ -+/* misc. conditioning flags */ -+#define SNDRV_SEQ_PORT_FLG_GIVEN_PORT (1<<0) -+#define SNDRV_SEQ_PORT_FLG_TIMESTAMP (1<<1) -+#define SNDRV_SEQ_PORT_FLG_TIME_REAL (1<<2) -+ -+struct snd_seq_port_info { -+ struct snd_seq_addr addr; /* client/port numbers */ -+ char name[64]; /* port name */ -+ -+ unsigned int capability; /* port capability bits */ -+ unsigned int type; /* port type bits */ -+ int midi_channels; /* channels per MIDI port */ -+ int midi_voices; /* voices per MIDI port */ -+ int synth_voices; /* voices per SYNTH port */ -+ -+ int read_use; /* R/O: subscribers for output (from this port) */ -+ int write_use; /* R/O: subscribers for input (to this port) */ -+ -+ void *kernel; /* reserved for kernel use (must be NULL) */ -+ unsigned int flags; /* misc. conditioning */ -+ unsigned char time_queue; /* queue # for timestamping */ -+ char reserved[59]; /* for future use */ -+}; -+ -+ -+/* queue flags */ -+#define SNDRV_SEQ_QUEUE_FLG_SYNC (1<<0) /* sync enabled */ -+ -+/* queue information */ -+struct snd_seq_queue_info { -+ int queue; /* queue id */ -+ -+ /* -+ * security settings, only owner of this queue can start/stop timer -+ * etc. if the queue is locked for other clients -+ */ -+ int owner; /* client id for owner of the queue */ -+ unsigned locked:1; /* timing queue locked for other queues */ -+ char name[64]; /* name of this queue */ -+ unsigned int flags; /* flags */ -+ char reserved[60]; /* for future use */ -+ -+}; -+ -+/* queue info/status */ -+struct snd_seq_queue_status { -+ int queue; /* queue id */ -+ int events; /* read-only - queue size */ -+ snd_seq_tick_time_t tick; /* current tick */ -+ struct snd_seq_real_time time; /* current time */ -+ int running; /* running state of queue */ -+ int flags; /* various flags */ -+ char reserved[64]; /* for the future */ -+}; -+ -+ -+/* queue tempo */ -+struct snd_seq_queue_tempo { -+ int queue; /* sequencer queue */ -+ unsigned int tempo; /* current tempo, us/tick */ -+ int ppq; /* time resolution, ticks/quarter */ -+ unsigned int skew_value; /* queue skew */ -+ unsigned int skew_base; /* queue skew base */ -+ char reserved[24]; /* for the future */ -+}; -+ -+ -+/* sequencer timer sources */ -+#define SNDRV_SEQ_TIMER_ALSA 0 /* ALSA timer */ -+#define SNDRV_SEQ_TIMER_MIDI_CLOCK 1 /* Midi Clock (CLOCK event) */ -+#define SNDRV_SEQ_TIMER_MIDI_TICK 2 /* Midi Timer Tick (TICK event) */ -+ -+/* queue timer info */ -+struct snd_seq_queue_timer { -+ int queue; /* sequencer queue */ -+ int type; /* source timer type */ -+ union { -+ struct { -+ struct snd_timer_id id; /* ALSA's timer ID */ -+ unsigned int resolution; /* resolution in Hz */ -+ } alsa; -+ } u; -+ char reserved[64]; /* for the future use */ -+}; -+ -+ -+struct snd_seq_queue_client { -+ int queue; /* sequencer queue */ -+ int client; /* sequencer client */ -+ int used; /* queue is used with this client -+ (must be set for accepting events) */ -+ /* per client watermarks */ -+ char reserved[64]; /* for future use */ -+}; -+ -+ -+#define SNDRV_SEQ_PORT_SUBS_EXCLUSIVE (1<<0) /* exclusive connection */ -+#define SNDRV_SEQ_PORT_SUBS_TIMESTAMP (1<<1) -+#define SNDRV_SEQ_PORT_SUBS_TIME_REAL (1<<2) -+ -+struct snd_seq_port_subscribe { -+ struct snd_seq_addr sender; /* sender address */ -+ struct snd_seq_addr dest; /* destination address */ -+ unsigned int voices; /* number of voices to be allocated (0 = don't care) */ -+ unsigned int flags; /* modes */ -+ unsigned char queue; /* input time-stamp queue (optional) */ -+ unsigned char pad[3]; /* reserved */ -+ char reserved[64]; -+}; -+ -+/* type of query subscription */ -+#define SNDRV_SEQ_QUERY_SUBS_READ 0 -+#define SNDRV_SEQ_QUERY_SUBS_WRITE 1 -+ -+struct snd_seq_query_subs { -+ struct snd_seq_addr root; /* client/port id to be searched */ -+ int type; /* READ or WRITE */ -+ int index; /* 0..N-1 */ -+ int num_subs; /* R/O: number of subscriptions on this port */ -+ struct snd_seq_addr addr; /* R/O: result */ -+ unsigned char queue; /* R/O: result */ -+ unsigned int flags; /* R/O: result */ -+ char reserved[64]; /* for future use */ -+}; -+ -+ -+/* -+ * IOCTL commands -+ */ -+ -+#define SNDRV_SEQ_IOCTL_PVERSION _IOR ('S', 0x00, int) -+#define SNDRV_SEQ_IOCTL_CLIENT_ID _IOR ('S', 0x01, int) -+#define SNDRV_SEQ_IOCTL_SYSTEM_INFO _IOWR('S', 0x02, struct snd_seq_system_info) -+#define SNDRV_SEQ_IOCTL_RUNNING_MODE _IOWR('S', 0x03, struct snd_seq_running_info) -+ -+#define SNDRV_SEQ_IOCTL_GET_CLIENT_INFO _IOWR('S', 0x10, struct snd_seq_client_info) -+#define SNDRV_SEQ_IOCTL_SET_CLIENT_INFO _IOW ('S', 0x11, struct snd_seq_client_info) -+ -+#define SNDRV_SEQ_IOCTL_CREATE_PORT _IOWR('S', 0x20, struct snd_seq_port_info) -+#define SNDRV_SEQ_IOCTL_DELETE_PORT _IOW ('S', 0x21, struct snd_seq_port_info) -+#define SNDRV_SEQ_IOCTL_GET_PORT_INFO _IOWR('S', 0x22, struct snd_seq_port_info) -+#define SNDRV_SEQ_IOCTL_SET_PORT_INFO _IOW ('S', 0x23, struct snd_seq_port_info) -+ -+#define SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT _IOW ('S', 0x30, struct snd_seq_port_subscribe) -+#define SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT _IOW ('S', 0x31, struct snd_seq_port_subscribe) -+ -+#define SNDRV_SEQ_IOCTL_CREATE_QUEUE _IOWR('S', 0x32, struct snd_seq_queue_info) -+#define SNDRV_SEQ_IOCTL_DELETE_QUEUE _IOW ('S', 0x33, struct snd_seq_queue_info) -+#define SNDRV_SEQ_IOCTL_GET_QUEUE_INFO _IOWR('S', 0x34, struct snd_seq_queue_info) -+#define SNDRV_SEQ_IOCTL_SET_QUEUE_INFO _IOWR('S', 0x35, struct snd_seq_queue_info) -+#define SNDRV_SEQ_IOCTL_GET_NAMED_QUEUE _IOWR('S', 0x36, struct snd_seq_queue_info) -+#define SNDRV_SEQ_IOCTL_GET_QUEUE_STATUS _IOWR('S', 0x40, struct snd_seq_queue_status) -+#define SNDRV_SEQ_IOCTL_GET_QUEUE_TEMPO _IOWR('S', 0x41, struct snd_seq_queue_tempo) -+#define SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO _IOW ('S', 0x42, struct snd_seq_queue_tempo) -+#define SNDRV_SEQ_IOCTL_GET_QUEUE_TIMER _IOWR('S', 0x45, struct snd_seq_queue_timer) -+#define SNDRV_SEQ_IOCTL_SET_QUEUE_TIMER _IOW ('S', 0x46, struct snd_seq_queue_timer) -+#define SNDRV_SEQ_IOCTL_GET_QUEUE_CLIENT _IOWR('S', 0x49, struct snd_seq_queue_client) -+#define SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT _IOW ('S', 0x4a, struct snd_seq_queue_client) -+#define SNDRV_SEQ_IOCTL_GET_CLIENT_POOL _IOWR('S', 0x4b, struct snd_seq_client_pool) -+#define SNDRV_SEQ_IOCTL_SET_CLIENT_POOL _IOW ('S', 0x4c, struct snd_seq_client_pool) -+#define SNDRV_SEQ_IOCTL_REMOVE_EVENTS _IOW ('S', 0x4e, struct snd_seq_remove_events) -+#define SNDRV_SEQ_IOCTL_QUERY_SUBS _IOWR('S', 0x4f, struct snd_seq_query_subs) -+#define SNDRV_SEQ_IOCTL_GET_SUBSCRIPTION _IOWR('S', 0x50, struct snd_seq_port_subscribe) -+#define SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT _IOWR('S', 0x51, struct snd_seq_client_info) -+#define SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT _IOWR('S', 0x52, struct snd_seq_port_info) -+ -+#endif /* _UAPI__SOUND_ASEQUENCER_H */ -diff --git a/include/sound/uapi/asoc.h b/include/sound/uapi/asoc.h -new file mode 100644 -index 00000000..a74ca232 ---- /dev/null -+++ b/include/sound/uapi/asoc.h -@@ -0,0 +1,633 @@ -+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ -+/* -+ * uapi/sound/asoc.h -- ALSA SoC Firmware Controls and DAPM -+ * -+ * Copyright (C) 2012 Texas Instruments Inc. -+ * Copyright (C) 2015 Intel Corporation. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ * -+ * Simple file API to load FW that includes mixers, coefficients, DAPM graphs, -+ * algorithms, equalisers, DAIs, widgets etc. -+*/ -+ -+#ifndef __LINUX_UAPI_SND_ASOC_H -+#define __LINUX_UAPI_SND_ASOC_H -+ -+#include -+#include -+ -+/* -+ * Maximum number of channels topology kcontrol can represent. -+ */ -+#define SND_SOC_TPLG_MAX_CHAN 8 -+ -+/* -+ * Maximum number of PCM formats capability -+ */ -+#define SND_SOC_TPLG_MAX_FORMATS 16 -+ -+/* -+ * Maximum number of PCM stream configs -+ */ -+#define SND_SOC_TPLG_STREAM_CONFIG_MAX 8 -+ -+/* -+ * Maximum number of physical link's hardware configs -+ */ -+#define SND_SOC_TPLG_HW_CONFIG_MAX 8 -+ -+/* individual kcontrol info types - can be mixed with other types */ -+#define SND_SOC_TPLG_CTL_VOLSW 1 -+#define SND_SOC_TPLG_CTL_VOLSW_SX 2 -+#define SND_SOC_TPLG_CTL_VOLSW_XR_SX 3 -+#define SND_SOC_TPLG_CTL_ENUM 4 -+#define SND_SOC_TPLG_CTL_BYTES 5 -+#define SND_SOC_TPLG_CTL_ENUM_VALUE 6 -+#define SND_SOC_TPLG_CTL_RANGE 7 -+#define SND_SOC_TPLG_CTL_STROBE 8 -+ -+ -+/* individual widget kcontrol info types - can be mixed with other types */ -+#define SND_SOC_TPLG_DAPM_CTL_VOLSW 64 -+#define SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE 65 -+#define SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT 66 -+#define SND_SOC_TPLG_DAPM_CTL_ENUM_VALUE 67 -+#define SND_SOC_TPLG_DAPM_CTL_PIN 68 -+ -+/* DAPM widget types - add new items to the end */ -+#define SND_SOC_TPLG_DAPM_INPUT 0 -+#define SND_SOC_TPLG_DAPM_OUTPUT 1 -+#define SND_SOC_TPLG_DAPM_MUX 2 -+#define SND_SOC_TPLG_DAPM_MIXER 3 -+#define SND_SOC_TPLG_DAPM_PGA 4 -+#define SND_SOC_TPLG_DAPM_OUT_DRV 5 -+#define SND_SOC_TPLG_DAPM_ADC 6 -+#define SND_SOC_TPLG_DAPM_DAC 7 -+#define SND_SOC_TPLG_DAPM_SWITCH 8 -+#define SND_SOC_TPLG_DAPM_PRE 9 -+#define SND_SOC_TPLG_DAPM_POST 10 -+#define SND_SOC_TPLG_DAPM_AIF_IN 11 -+#define SND_SOC_TPLG_DAPM_AIF_OUT 12 -+#define SND_SOC_TPLG_DAPM_DAI_IN 13 -+#define SND_SOC_TPLG_DAPM_DAI_OUT 14 -+#define SND_SOC_TPLG_DAPM_DAI_LINK 15 -+#define SND_SOC_TPLG_DAPM_BUFFER 16 -+#define SND_SOC_TPLG_DAPM_SCHEDULER 17 -+#define SND_SOC_TPLG_DAPM_EFFECT 18 -+#define SND_SOC_TPLG_DAPM_SIGGEN 19 -+#define SND_SOC_TPLG_DAPM_SRC 20 -+#define SND_SOC_TPLG_DAPM_ASRC 21 -+#define SND_SOC_TPLG_DAPM_ENCODER 22 -+#define SND_SOC_TPLG_DAPM_DECODER 23 -+#define SND_SOC_TPLG_DAPM_LAST SND_SOC_TPLG_DAPM_DECODER -+ -+/* Header magic number and string sizes */ -+#define SND_SOC_TPLG_MAGIC 0x41536F43 /* ASoC */ -+ -+/* string sizes */ -+#define SND_SOC_TPLG_NUM_TEXTS 16 -+ -+/* ABI version */ -+#define SND_SOC_TPLG_ABI_VERSION 0x5 /* current version */ -+#define SND_SOC_TPLG_ABI_VERSION_MIN 0x4 /* oldest version supported */ -+ -+/* Max size of TLV data */ -+#define SND_SOC_TPLG_TLV_SIZE 32 -+ -+/* -+ * File and Block header data types. -+ * Add new generic and vendor types to end of list. -+ * Generic types are handled by the core whilst vendors types are passed -+ * to the component drivers for handling. -+ */ -+#define SND_SOC_TPLG_TYPE_MIXER 1 -+#define SND_SOC_TPLG_TYPE_BYTES 2 -+#define SND_SOC_TPLG_TYPE_ENUM 3 -+#define SND_SOC_TPLG_TYPE_DAPM_GRAPH 4 -+#define SND_SOC_TPLG_TYPE_DAPM_WIDGET 5 -+#define SND_SOC_TPLG_TYPE_DAI_LINK 6 -+#define SND_SOC_TPLG_TYPE_PCM 7 -+#define SND_SOC_TPLG_TYPE_MANIFEST 8 -+#define SND_SOC_TPLG_TYPE_CODEC_LINK 9 -+#define SND_SOC_TPLG_TYPE_BACKEND_LINK 10 -+#define SND_SOC_TPLG_TYPE_PDATA 11 -+#define SND_SOC_TPLG_TYPE_DAI 12 -+#define SND_SOC_TPLG_TYPE_MAX SND_SOC_TPLG_TYPE_DAI -+ -+/* vendor block IDs - please add new vendor types to end */ -+#define SND_SOC_TPLG_TYPE_VENDOR_FW 1000 -+#define SND_SOC_TPLG_TYPE_VENDOR_CONFIG 1001 -+#define SND_SOC_TPLG_TYPE_VENDOR_COEFF 1002 -+#define SND_SOC_TPLG_TYPEVENDOR_CODEC 1003 -+ -+#define SND_SOC_TPLG_STREAM_PLAYBACK 0 -+#define SND_SOC_TPLG_STREAM_CAPTURE 1 -+ -+/* vendor tuple types */ -+#define SND_SOC_TPLG_TUPLE_TYPE_UUID 0 -+#define SND_SOC_TPLG_TUPLE_TYPE_STRING 1 -+#define SND_SOC_TPLG_TUPLE_TYPE_BOOL 2 -+#define SND_SOC_TPLG_TUPLE_TYPE_BYTE 3 -+#define SND_SOC_TPLG_TUPLE_TYPE_WORD 4 -+#define SND_SOC_TPLG_TUPLE_TYPE_SHORT 5 -+ -+/* DAI flags */ -+#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_RATES (1 << 0) -+#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_CHANNELS (1 << 1) -+#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2) -+ -+/* DAI clock gating */ -+#define SND_SOC_TPLG_DAI_CLK_GATE_UNDEFINED 0 -+#define SND_SOC_TPLG_DAI_CLK_GATE_GATED 1 -+#define SND_SOC_TPLG_DAI_CLK_GATE_CONT 2 -+ -+/* DAI mclk_direction */ -+#define SND_SOC_TPLG_MCLK_CO 0 /* for codec, mclk is output */ -+#define SND_SOC_TPLG_MCLK_CI 1 /* for codec, mclk is input */ -+ -+/* DAI physical PCM data formats. -+ * Add new formats to the end of the list. -+ */ -+#define SND_SOC_DAI_FORMAT_I2S 1 /* I2S mode */ -+#define SND_SOC_DAI_FORMAT_RIGHT_J 2 /* Right Justified mode */ -+#define SND_SOC_DAI_FORMAT_LEFT_J 3 /* Left Justified mode */ -+#define SND_SOC_DAI_FORMAT_DSP_A 4 /* L data MSB after FRM LRC */ -+#define SND_SOC_DAI_FORMAT_DSP_B 5 /* L data MSB during FRM LRC */ -+#define SND_SOC_DAI_FORMAT_AC97 6 /* AC97 */ -+#define SND_SOC_DAI_FORMAT_PDM 7 /* Pulse density modulation */ -+ -+/* left and right justified also known as MSB and LSB respectively */ -+#define SND_SOC_DAI_FORMAT_MSB SND_SOC_DAI_FORMAT_LEFT_J -+#define SND_SOC_DAI_FORMAT_LSB SND_SOC_DAI_FORMAT_RIGHT_J -+ -+/* DAI link flags */ -+#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_RATES (1 << 0) -+#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_CHANNELS (1 << 1) -+#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2) -+#define SND_SOC_TPLG_LNK_FLGBIT_VOICE_WAKEUP (1 << 3) -+ -+/* DAI topology BCLK parameter -+ * For the backwards capability, by default codec is bclk master -+ */ -+#define SND_SOC_TPLG_BCLK_CM 0 /* codec is bclk master */ -+#define SND_SOC_TPLG_BCLK_CS 1 /* codec is bclk slave */ -+ -+/* DAI topology FSYNC parameter -+ * For the backwards capability, by default codec is fsync master -+ */ -+#define SND_SOC_TPLG_FSYNC_CM 0 /* codec is fsync master */ -+#define SND_SOC_TPLG_FSYNC_CS 1 /* codec is fsync slave */ -+ -+/* -+ * Block Header. -+ * This header precedes all object and object arrays below. -+ */ -+struct snd_soc_tplg_hdr { -+ __le32 magic; /* magic number */ -+ __le32 abi; /* ABI version */ -+ __le32 version; /* optional vendor specific version details */ -+ __le32 type; /* SND_SOC_TPLG_TYPE_ */ -+ __le32 size; /* size of this structure */ -+ __le32 vendor_type; /* optional vendor specific type info */ -+ __le32 payload_size; /* data bytes, excluding this header */ -+ __le32 index; /* identifier for block */ -+ __le32 count; /* number of elements in block */ -+} __attribute__((packed)); -+ -+/* vendor tuple for uuid */ -+struct snd_soc_tplg_vendor_uuid_elem { -+ __le32 token; -+ char uuid[16]; -+} __attribute__((packed)); -+ -+/* vendor tuple for a bool/byte/short/word value */ -+struct snd_soc_tplg_vendor_value_elem { -+ __le32 token; -+ __le32 value; -+} __attribute__((packed)); -+ -+/* vendor tuple for string */ -+struct snd_soc_tplg_vendor_string_elem { -+ __le32 token; -+ char string[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -+} __attribute__((packed)); -+ -+struct snd_soc_tplg_vendor_array { -+ __le32 size; /* size in bytes of the array, including all elements */ -+ __le32 type; /* SND_SOC_TPLG_TUPLE_TYPE_ */ -+ __le32 num_elems; /* number of elements in array */ -+ union { -+ struct snd_soc_tplg_vendor_uuid_elem uuid[0]; -+ struct snd_soc_tplg_vendor_value_elem value[0]; -+ struct snd_soc_tplg_vendor_string_elem string[0]; -+ }; -+} __attribute__((packed)); -+ -+/* -+ * Private data. -+ * All topology objects may have private data that can be used by the driver or -+ * firmware. Core will ignore this data. -+ */ -+struct snd_soc_tplg_private { -+ __le32 size; /* in bytes of private data */ -+ union { -+ char data[0]; -+ struct snd_soc_tplg_vendor_array array[0]; -+ }; -+} __attribute__((packed)); -+ -+/* -+ * Kcontrol TLV data. -+ */ -+struct snd_soc_tplg_tlv_dbscale { -+ __le32 min; -+ __le32 step; -+ __le32 mute; -+} __attribute__((packed)); -+ -+struct snd_soc_tplg_ctl_tlv { -+ __le32 size; /* in bytes of this structure */ -+ __le32 type; /* SNDRV_CTL_TLVT_*, type of TLV */ -+ union { -+ __le32 data[SND_SOC_TPLG_TLV_SIZE]; -+ struct snd_soc_tplg_tlv_dbscale scale; -+ }; -+} __attribute__((packed)); -+ -+/* -+ * Kcontrol channel data -+ */ -+struct snd_soc_tplg_channel { -+ __le32 size; /* in bytes of this structure */ -+ __le32 reg; -+ __le32 shift; -+ __le32 id; /* ID maps to Left, Right, LFE etc */ -+} __attribute__((packed)); -+ -+/* -+ * Genericl Operations IDs, for binding Kcontrol or Bytes ext ops -+ * Kcontrol ops need get/put/info. -+ * Bytes ext ops need get/put. -+ */ -+struct snd_soc_tplg_io_ops { -+ __le32 get; -+ __le32 put; -+ __le32 info; -+} __attribute__((packed)); -+ -+/* -+ * kcontrol header -+ */ -+struct snd_soc_tplg_ctl_hdr { -+ __le32 size; /* in bytes of this structure */ -+ __le32 type; -+ char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -+ __le32 access; -+ struct snd_soc_tplg_io_ops ops; -+ struct snd_soc_tplg_ctl_tlv tlv; -+} __attribute__((packed)); -+ -+/* -+ * Stream Capabilities -+ */ -+struct snd_soc_tplg_stream_caps { -+ __le32 size; /* in bytes of this structure */ -+ char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -+ __le64 formats; /* supported formats SNDRV_PCM_FMTBIT_* */ -+ __le32 rates; /* supported rates SNDRV_PCM_RATE_* */ -+ __le32 rate_min; /* min rate */ -+ __le32 rate_max; /* max rate */ -+ __le32 channels_min; /* min channels */ -+ __le32 channels_max; /* max channels */ -+ __le32 periods_min; /* min number of periods */ -+ __le32 periods_max; /* max number of periods */ -+ __le32 period_size_min; /* min period size bytes */ -+ __le32 period_size_max; /* max period size bytes */ -+ __le32 buffer_size_min; /* min buffer size bytes */ -+ __le32 buffer_size_max; /* max buffer size bytes */ -+ __le32 sig_bits; /* number of bits of content */ -+} __attribute__((packed)); -+ -+/* -+ * FE or BE Stream configuration supported by SW/FW -+ */ -+struct snd_soc_tplg_stream { -+ __le32 size; /* in bytes of this structure */ -+ char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* Name of the stream */ -+ __le64 format; /* SNDRV_PCM_FMTBIT_* */ -+ __le32 rate; /* SNDRV_PCM_RATE_* */ -+ __le32 period_bytes; /* size of period in bytes */ -+ __le32 buffer_bytes; /* size of buffer in bytes */ -+ __le32 channels; /* channels */ -+} __attribute__((packed)); -+ -+ -+/* -+ * Describes a physical link's runtime supported hardware config, -+ * i.e. hardware audio formats. -+ */ -+struct snd_soc_tplg_hw_config { -+ __le32 size; /* in bytes of this structure */ -+ __le32 id; /* unique ID - - used to match */ -+ __le32 fmt; /* SND_SOC_DAI_FORMAT_ format value */ -+ __u8 clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */ -+ __u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */ -+ __u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */ -+ __u8 bclk_master; /* SND_SOC_TPLG_BCLK_ value */ -+ __u8 fsync_master; /* SND_SOC_TPLG_FSYNC_ value */ -+ __u8 mclk_direction; /* SND_SOC_TPLG_MCLK_ value */ -+ __le16 reserved; /* for 32bit alignment */ -+ __le32 mclk_rate; /* MCLK or SYSCLK freqency in Hz */ -+ __le32 bclk_rate; /* BCLK freqency in Hz */ -+ __le32 fsync_rate; /* frame clock in Hz */ -+ __le32 tdm_slots; /* number of TDM slots in use */ -+ __le32 tdm_slot_width; /* width in bits for each slot */ -+ __le32 tx_slots; /* bit mask for active Tx slots */ -+ __le32 rx_slots; /* bit mask for active Rx slots */ -+ __le32 tx_channels; /* number of Tx channels */ -+ __le32 tx_chanmap[SND_SOC_TPLG_MAX_CHAN]; /* array of slot number */ -+ __le32 rx_channels; /* number of Rx channels */ -+ __le32 rx_chanmap[SND_SOC_TPLG_MAX_CHAN]; /* array of slot number */ -+} __attribute__((packed)); -+ -+/* -+ * Manifest. List totals for each payload type. Not used in parsing, but will -+ * be passed to the component driver before any other objects in order for any -+ * global component resource allocations. -+ * -+ * File block representation for manifest :- -+ * +-----------------------------------+----+ -+ * | struct snd_soc_tplg_hdr | 1 | -+ * +-----------------------------------+----+ -+ * | struct snd_soc_tplg_manifest | 1 | -+ * +-----------------------------------+----+ -+ */ -+struct snd_soc_tplg_manifest { -+ __le32 size; /* in bytes of this structure */ -+ __le32 control_elems; /* number of control elements */ -+ __le32 widget_elems; /* number of widget elements */ -+ __le32 graph_elems; /* number of graph elements */ -+ __le32 pcm_elems; /* number of PCM elements */ -+ __le32 dai_link_elems; /* number of DAI link elements */ -+ __le32 dai_elems; /* number of physical DAI elements */ -+ __le32 reserved[20]; /* reserved for new ABI element types */ -+ struct snd_soc_tplg_private priv; -+} __attribute__((packed)); -+ -+/* -+ * Mixer kcontrol. -+ * -+ * File block representation for mixer kcontrol :- -+ * +-----------------------------------+----+ -+ * | struct snd_soc_tplg_hdr | 1 | -+ * +-----------------------------------+----+ -+ * | struct snd_soc_tplg_mixer_control | N | -+ * +-----------------------------------+----+ -+ */ -+struct snd_soc_tplg_mixer_control { -+ struct snd_soc_tplg_ctl_hdr hdr; -+ __le32 size; /* in bytes of this structure */ -+ __le32 min; -+ __le32 max; -+ __le32 platform_max; -+ __le32 invert; -+ __le32 num_channels; -+ struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN]; -+ struct snd_soc_tplg_private priv; -+} __attribute__((packed)); -+ -+/* -+ * Enumerated kcontrol -+ * -+ * File block representation for enum kcontrol :- -+ * +-----------------------------------+----+ -+ * | struct snd_soc_tplg_hdr | 1 | -+ * +-----------------------------------+----+ -+ * | struct snd_soc_tplg_enum_control | N | -+ * +-----------------------------------+----+ -+ */ -+struct snd_soc_tplg_enum_control { -+ struct snd_soc_tplg_ctl_hdr hdr; -+ __le32 size; /* in bytes of this structure */ -+ __le32 num_channels; -+ struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN]; -+ __le32 items; -+ __le32 mask; -+ __le32 count; -+ char texts[SND_SOC_TPLG_NUM_TEXTS][SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -+ __le32 values[SND_SOC_TPLG_NUM_TEXTS * SNDRV_CTL_ELEM_ID_NAME_MAXLEN / 4]; -+ struct snd_soc_tplg_private priv; -+} __attribute__((packed)); -+ -+/* -+ * Bytes kcontrol -+ * -+ * File block representation for bytes kcontrol :- -+ * +-----------------------------------+----+ -+ * | struct snd_soc_tplg_hdr | 1 | -+ * +-----------------------------------+----+ -+ * | struct snd_soc_tplg_bytes_control | N | -+ * +-----------------------------------+----+ -+ */ -+struct snd_soc_tplg_bytes_control { -+ struct snd_soc_tplg_ctl_hdr hdr; -+ __le32 size; /* in bytes of this structure */ -+ __le32 max; -+ __le32 mask; -+ __le32 base; -+ __le32 num_regs; -+ struct snd_soc_tplg_io_ops ext_ops; -+ struct snd_soc_tplg_private priv; -+} __attribute__((packed)); -+ -+/* -+ * DAPM Graph Element -+ * -+ * File block representation for DAPM graph elements :- -+ * +-------------------------------------+----+ -+ * | struct snd_soc_tplg_hdr | 1 | -+ * +-------------------------------------+----+ -+ * | struct snd_soc_tplg_dapm_graph_elem | N | -+ * +-------------------------------------+----+ -+ */ -+struct snd_soc_tplg_dapm_graph_elem { -+ char sink[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -+ char control[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -+ char source[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -+} __attribute__((packed)); -+ -+/* -+ * DAPM Widget. -+ * -+ * File block representation for DAPM widget :- -+ * +-------------------------------------+-----+ -+ * | struct snd_soc_tplg_hdr | 1 | -+ * +-------------------------------------+-----+ -+ * | struct snd_soc_tplg_dapm_widget | N | -+ * +-------------------------------------+-----+ -+ * | struct snd_soc_tplg_enum_control | 0|1 | -+ * | struct snd_soc_tplg_mixer_control | 0|N | -+ * +-------------------------------------+-----+ -+ * -+ * Optional enum or mixer control can be appended to the end of each widget -+ * in the block. -+ */ -+struct snd_soc_tplg_dapm_widget { -+ __le32 size; /* in bytes of this structure */ -+ __le32 id; /* SND_SOC_DAPM_CTL */ -+ char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -+ char sname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -+ -+ __le32 reg; /* negative reg = no direct dapm */ -+ __le32 shift; /* bits to shift */ -+ __le32 mask; /* non-shifted mask */ -+ __le32 subseq; /* sort within widget type */ -+ __le32 invert; /* invert the power bit */ -+ __le32 ignore_suspend; /* kept enabled over suspend */ -+ __le16 event_flags; -+ __le16 event_type; -+ __le32 num_kcontrols; -+ struct snd_soc_tplg_private priv; -+ /* -+ * kcontrols that relate to this widget -+ * follow here after widget private data -+ */ -+} __attribute__((packed)); -+ -+ -+/* -+ * Describes SW/FW specific features of PCM (FE DAI & DAI link). -+ * -+ * File block representation for PCM :- -+ * +-----------------------------------+-----+ -+ * | struct snd_soc_tplg_hdr | 1 | -+ * +-----------------------------------+-----+ -+ * | struct snd_soc_tplg_pcm | N | -+ * +-----------------------------------+-----+ -+ */ -+struct snd_soc_tplg_pcm { -+ __le32 size; /* in bytes of this structure */ -+ char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -+ char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -+ __le32 pcm_id; /* unique ID - used to match with DAI link */ -+ __le32 dai_id; /* unique ID - used to match */ -+ __le32 playback; /* supports playback mode */ -+ __le32 capture; /* supports capture mode */ -+ __le32 compress; /* 1 = compressed; 0 = PCM */ -+ struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */ -+ __le32 num_streams; /* number of streams */ -+ struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */ -+ __le32 flag_mask; /* bitmask of flags to configure */ -+ __le32 flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */ -+ struct snd_soc_tplg_private priv; -+} __attribute__((packed)); -+ -+ -+/* -+ * Describes the physical link runtime supported configs or params -+ * -+ * File block representation for physical link config :- -+ * +-----------------------------------+-----+ -+ * | struct snd_soc_tplg_hdr | 1 | -+ * +-----------------------------------+-----+ -+ * | struct snd_soc_tplg_link_config | N | -+ * +-----------------------------------+-----+ -+ */ -+struct snd_soc_tplg_link_config { -+ __le32 size; /* in bytes of this structure */ -+ __le32 id; /* unique ID - used to match */ -+ char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* name - used to match */ -+ char stream_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* stream name - used to match */ -+ struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* supported configs playback and captrure */ -+ __le32 num_streams; /* number of streams */ -+ struct snd_soc_tplg_hw_config hw_config[SND_SOC_TPLG_HW_CONFIG_MAX]; /* hw configs */ -+ __le32 num_hw_configs; /* number of hw configs */ -+ __le32 default_hw_config_id; /* default hw config ID for init */ -+ __le32 flag_mask; /* bitmask of flags to configure */ -+ __le32 flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */ -+ struct snd_soc_tplg_private priv; -+} __attribute__((packed)); -+ -+/* -+ * Describes SW/FW specific features of physical DAI. -+ * It can be used to configure backend DAIs for DPCM. -+ * -+ * File block representation for physical DAI :- -+ * +-----------------------------------+-----+ -+ * | struct snd_soc_tplg_hdr | 1 | -+ * +-----------------------------------+-----+ -+ * | struct snd_soc_tplg_dai | N | -+ * +-----------------------------------+-----+ -+ */ -+struct snd_soc_tplg_dai { -+ __le32 size; /* in bytes of this structure */ -+ char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* name - used to match */ -+ __le32 dai_id; /* unique ID - used to match */ -+ __le32 playback; /* supports playback mode */ -+ __le32 capture; /* supports capture mode */ -+ struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */ -+ __le32 flag_mask; /* bitmask of flags to configure */ -+ __le32 flags; /* SND_SOC_TPLG_DAI_FLGBIT_* */ -+ struct snd_soc_tplg_private priv; -+} __attribute__((packed)); -+ -+/* -+ * Old version of ABI structs, supported for backward compatibility. -+ */ -+ -+/* Manifest v4 */ -+struct snd_soc_tplg_manifest_v4 { -+ __le32 size; /* in bytes of this structure */ -+ __le32 control_elems; /* number of control elements */ -+ __le32 widget_elems; /* number of widget elements */ -+ __le32 graph_elems; /* number of graph elements */ -+ __le32 pcm_elems; /* number of PCM elements */ -+ __le32 dai_link_elems; /* number of DAI link elements */ -+ struct snd_soc_tplg_private priv; -+} __packed; -+ -+/* Stream Capabilities v4 */ -+struct snd_soc_tplg_stream_caps_v4 { -+ __le32 size; /* in bytes of this structure */ -+ char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -+ __le64 formats; /* supported formats SNDRV_PCM_FMTBIT_* */ -+ __le32 rates; /* supported rates SNDRV_PCM_RATE_* */ -+ __le32 rate_min; /* min rate */ -+ __le32 rate_max; /* max rate */ -+ __le32 channels_min; /* min channels */ -+ __le32 channels_max; /* max channels */ -+ __le32 periods_min; /* min number of periods */ -+ __le32 periods_max; /* max number of periods */ -+ __le32 period_size_min; /* min period size bytes */ -+ __le32 period_size_max; /* max period size bytes */ -+ __le32 buffer_size_min; /* min buffer size bytes */ -+ __le32 buffer_size_max; /* max buffer size bytes */ -+} __packed; -+ -+/* PCM v4 */ -+struct snd_soc_tplg_pcm_v4 { -+ __le32 size; /* in bytes of this structure */ -+ char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -+ char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; -+ __le32 pcm_id; /* unique ID - used to match with DAI link */ -+ __le32 dai_id; /* unique ID - used to match */ -+ __le32 playback; /* supports playback mode */ -+ __le32 capture; /* supports capture mode */ -+ __le32 compress; /* 1 = compressed; 0 = PCM */ -+ struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */ -+ __le32 num_streams; /* number of streams */ -+ struct snd_soc_tplg_stream_caps_v4 caps[2]; /* playback and capture for DAI */ -+} __packed; -+ -+/* Physical link config v4 */ -+struct snd_soc_tplg_link_config_v4 { -+ __le32 size; /* in bytes of this structure */ -+ __le32 id; /* unique ID - used to match */ -+ struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* supported configs playback and captrure */ -+ __le32 num_streams; /* number of streams */ -+} __packed; -+ -+#endif -diff --git a/include/sound/uapi/asound.h b/include/sound/uapi/asound.h -new file mode 100644 -index 00000000..df1153ce ---- /dev/null -+++ b/include/sound/uapi/asound.h -@@ -0,0 +1,1038 @@ -+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ -+/* -+ * Advanced Linux Sound Architecture - ALSA - Driver -+ * Copyright (c) 1994-2003 by Jaroslav Kysela , -+ * Abramo Bagnara -+ * -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ * -+ */ -+ -+#ifndef _UAPI__SOUND_ASOUND_H -+#define _UAPI__SOUND_ASOUND_H -+ -+#if defined(__KERNEL__) || defined(__linux__) -+#include -+#else -+#include -+#endif -+ -+#ifndef __KERNEL__ -+#include -+#include -+#endif -+ -+/* -+ * protocol version -+ */ -+ -+#define SNDRV_PROTOCOL_VERSION(major, minor, subminor) (((major)<<16)|((minor)<<8)|(subminor)) -+#define SNDRV_PROTOCOL_MAJOR(version) (((version)>>16)&0xffff) -+#define SNDRV_PROTOCOL_MINOR(version) (((version)>>8)&0xff) -+#define SNDRV_PROTOCOL_MICRO(version) ((version)&0xff) -+#define SNDRV_PROTOCOL_INCOMPATIBLE(kversion, uversion) \ -+ (SNDRV_PROTOCOL_MAJOR(kversion) != SNDRV_PROTOCOL_MAJOR(uversion) || \ -+ (SNDRV_PROTOCOL_MAJOR(kversion) == SNDRV_PROTOCOL_MAJOR(uversion) && \ -+ SNDRV_PROTOCOL_MINOR(kversion) != SNDRV_PROTOCOL_MINOR(uversion))) -+ -+/**************************************************************************** -+ * * -+ * Digital audio interface * -+ * * -+ ****************************************************************************/ -+ -+struct snd_aes_iec958 { -+ unsigned char status[24]; /* AES/IEC958 channel status bits */ -+ unsigned char subcode[147]; /* AES/IEC958 subcode bits */ -+ unsigned char pad; /* nothing */ -+ unsigned char dig_subframe[4]; /* AES/IEC958 subframe bits */ -+}; -+ -+/**************************************************************************** -+ * * -+ * CEA-861 Audio InfoFrame. Used in HDMI and DisplayPort * -+ * * -+ ****************************************************************************/ -+ -+struct snd_cea_861_aud_if { -+ unsigned char db1_ct_cc; /* coding type and channel count */ -+ unsigned char db2_sf_ss; /* sample frequency and size */ -+ unsigned char db3; /* not used, all zeros */ -+ unsigned char db4_ca; /* channel allocation code */ -+ unsigned char db5_dminh_lsv; /* downmix inhibit & level-shit values */ -+}; -+ -+/**************************************************************************** -+ * * -+ * Section for driver hardware dependent interface - /dev/snd/hw? * -+ * * -+ ****************************************************************************/ -+ -+#define SNDRV_HWDEP_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 1) -+ -+enum { -+ SNDRV_HWDEP_IFACE_OPL2 = 0, -+ SNDRV_HWDEP_IFACE_OPL3, -+ SNDRV_HWDEP_IFACE_OPL4, -+ SNDRV_HWDEP_IFACE_SB16CSP, /* Creative Signal Processor */ -+ SNDRV_HWDEP_IFACE_EMU10K1, /* FX8010 processor in EMU10K1 chip */ -+ SNDRV_HWDEP_IFACE_YSS225, /* Yamaha FX processor */ -+ SNDRV_HWDEP_IFACE_ICS2115, /* Wavetable synth */ -+ SNDRV_HWDEP_IFACE_SSCAPE, /* Ensoniq SoundScape ISA card (MC68EC000) */ -+ SNDRV_HWDEP_IFACE_VX, /* Digigram VX cards */ -+ SNDRV_HWDEP_IFACE_MIXART, /* Digigram miXart cards */ -+ SNDRV_HWDEP_IFACE_USX2Y, /* Tascam US122, US224 & US428 usb */ -+ SNDRV_HWDEP_IFACE_EMUX_WAVETABLE, /* EmuX wavetable */ -+ SNDRV_HWDEP_IFACE_BLUETOOTH, /* Bluetooth audio */ -+ SNDRV_HWDEP_IFACE_USX2Y_PCM, /* Tascam US122, US224 & US428 rawusb pcm */ -+ SNDRV_HWDEP_IFACE_PCXHR, /* Digigram PCXHR */ -+ SNDRV_HWDEP_IFACE_SB_RC, /* SB Extigy/Audigy2NX remote control */ -+ SNDRV_HWDEP_IFACE_HDA, /* HD-audio */ -+ SNDRV_HWDEP_IFACE_USB_STREAM, /* direct access to usb stream */ -+ SNDRV_HWDEP_IFACE_FW_DICE, /* TC DICE FireWire device */ -+ SNDRV_HWDEP_IFACE_FW_FIREWORKS, /* Echo Audio Fireworks based device */ -+ SNDRV_HWDEP_IFACE_FW_BEBOB, /* BridgeCo BeBoB based device */ -+ SNDRV_HWDEP_IFACE_FW_OXFW, /* Oxford OXFW970/971 based device */ -+ SNDRV_HWDEP_IFACE_FW_DIGI00X, /* Digidesign Digi 002/003 family */ -+ SNDRV_HWDEP_IFACE_FW_TASCAM, /* TASCAM FireWire series */ -+ SNDRV_HWDEP_IFACE_LINE6, /* Line6 USB processors */ -+ SNDRV_HWDEP_IFACE_FW_MOTU, /* MOTU FireWire series */ -+ SNDRV_HWDEP_IFACE_FW_FIREFACE, /* RME Fireface series */ -+ -+ /* Don't forget to change the following: */ -+ SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_FW_FIREFACE -+}; -+ -+struct snd_hwdep_info { -+ unsigned int device; /* WR: device number */ -+ int card; /* R: card number */ -+ unsigned char id[64]; /* ID (user selectable) */ -+ unsigned char name[80]; /* hwdep name */ -+ int iface; /* hwdep interface */ -+ unsigned char reserved[64]; /* reserved for future */ -+}; -+ -+/* generic DSP loader */ -+struct snd_hwdep_dsp_status { -+ unsigned int version; /* R: driver-specific version */ -+ unsigned char id[32]; /* R: driver-specific ID string */ -+ unsigned int num_dsps; /* R: number of DSP images to transfer */ -+ unsigned int dsp_loaded; /* R: bit flags indicating the loaded DSPs */ -+ unsigned int chip_ready; /* R: 1 = initialization finished */ -+ unsigned char reserved[16]; /* reserved for future use */ -+}; -+ -+struct snd_hwdep_dsp_image { -+ unsigned int index; /* W: DSP index */ -+ unsigned char name[64]; /* W: ID (e.g. file name) */ -+ unsigned char __user *image; /* W: binary image */ -+ size_t length; /* W: size of image in bytes */ -+ unsigned long driver_data; /* W: driver-specific data */ -+}; -+ -+#define SNDRV_HWDEP_IOCTL_PVERSION _IOR ('H', 0x00, int) -+#define SNDRV_HWDEP_IOCTL_INFO _IOR ('H', 0x01, struct snd_hwdep_info) -+#define SNDRV_HWDEP_IOCTL_DSP_STATUS _IOR('H', 0x02, struct snd_hwdep_dsp_status) -+#define SNDRV_HWDEP_IOCTL_DSP_LOAD _IOW('H', 0x03, struct snd_hwdep_dsp_image) -+ -+/***************************************************************************** -+ * * -+ * Digital Audio (PCM) interface - /dev/snd/pcm?? * -+ * * -+ *****************************************************************************/ -+ -+#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 14) -+ -+typedef unsigned long snd_pcm_uframes_t; -+typedef signed long snd_pcm_sframes_t; -+ -+enum { -+ SNDRV_PCM_CLASS_GENERIC = 0, /* standard mono or stereo device */ -+ SNDRV_PCM_CLASS_MULTI, /* multichannel device */ -+ SNDRV_PCM_CLASS_MODEM, /* software modem class */ -+ SNDRV_PCM_CLASS_DIGITIZER, /* digitizer class */ -+ /* Don't forget to change the following: */ -+ SNDRV_PCM_CLASS_LAST = SNDRV_PCM_CLASS_DIGITIZER, -+}; -+ -+enum { -+ SNDRV_PCM_SUBCLASS_GENERIC_MIX = 0, /* mono or stereo subdevices are mixed together */ -+ SNDRV_PCM_SUBCLASS_MULTI_MIX, /* multichannel subdevices are mixed together */ -+ /* Don't forget to change the following: */ -+ SNDRV_PCM_SUBCLASS_LAST = SNDRV_PCM_SUBCLASS_MULTI_MIX, -+}; -+ -+enum { -+ SNDRV_PCM_STREAM_PLAYBACK = 0, -+ SNDRV_PCM_STREAM_CAPTURE, -+ SNDRV_PCM_STREAM_LAST = SNDRV_PCM_STREAM_CAPTURE, -+}; -+ -+typedef int __bitwise snd_pcm_access_t; -+#define SNDRV_PCM_ACCESS_MMAP_INTERLEAVED ((__force snd_pcm_access_t) 0) /* interleaved mmap */ -+#define SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED ((__force snd_pcm_access_t) 1) /* noninterleaved mmap */ -+#define SNDRV_PCM_ACCESS_MMAP_COMPLEX ((__force snd_pcm_access_t) 2) /* complex mmap */ -+#define SNDRV_PCM_ACCESS_RW_INTERLEAVED ((__force snd_pcm_access_t) 3) /* readi/writei */ -+#define SNDRV_PCM_ACCESS_RW_NONINTERLEAVED ((__force snd_pcm_access_t) 4) /* readn/writen */ -+#define SNDRV_PCM_ACCESS_LAST SNDRV_PCM_ACCESS_RW_NONINTERLEAVED -+ -+typedef int __bitwise snd_pcm_format_t; -+#define SNDRV_PCM_FORMAT_S8 ((__force snd_pcm_format_t) 0) -+#define SNDRV_PCM_FORMAT_U8 ((__force snd_pcm_format_t) 1) -+#define SNDRV_PCM_FORMAT_S16_LE ((__force snd_pcm_format_t) 2) -+#define SNDRV_PCM_FORMAT_S16_BE ((__force snd_pcm_format_t) 3) -+#define SNDRV_PCM_FORMAT_U16_LE ((__force snd_pcm_format_t) 4) -+#define SNDRV_PCM_FORMAT_U16_BE ((__force snd_pcm_format_t) 5) -+#define SNDRV_PCM_FORMAT_S24_LE ((__force snd_pcm_format_t) 6) /* low three bytes */ -+#define SNDRV_PCM_FORMAT_S24_BE ((__force snd_pcm_format_t) 7) /* low three bytes */ -+#define SNDRV_PCM_FORMAT_U24_LE ((__force snd_pcm_format_t) 8) /* low three bytes */ -+#define SNDRV_PCM_FORMAT_U24_BE ((__force snd_pcm_format_t) 9) /* low three bytes */ -+#define SNDRV_PCM_FORMAT_S32_LE ((__force snd_pcm_format_t) 10) -+#define SNDRV_PCM_FORMAT_S32_BE ((__force snd_pcm_format_t) 11) -+#define SNDRV_PCM_FORMAT_U32_LE ((__force snd_pcm_format_t) 12) -+#define SNDRV_PCM_FORMAT_U32_BE ((__force snd_pcm_format_t) 13) -+#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 */ -+#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 */ -+#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 */ -+#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 */ -+#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE ((__force snd_pcm_format_t) 18) /* IEC-958 subframe, Little Endian */ -+#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE ((__force snd_pcm_format_t) 19) /* IEC-958 subframe, Big Endian */ -+#define SNDRV_PCM_FORMAT_MU_LAW ((__force snd_pcm_format_t) 20) -+#define SNDRV_PCM_FORMAT_A_LAW ((__force snd_pcm_format_t) 21) -+#define SNDRV_PCM_FORMAT_IMA_ADPCM ((__force snd_pcm_format_t) 22) -+#define SNDRV_PCM_FORMAT_MPEG ((__force snd_pcm_format_t) 23) -+#define SNDRV_PCM_FORMAT_GSM ((__force snd_pcm_format_t) 24) -+#define SNDRV_PCM_FORMAT_S20_LE ((__force snd_pcm_format_t) 25) /* in four bytes, LSB justified */ -+#define SNDRV_PCM_FORMAT_S20_BE ((__force snd_pcm_format_t) 26) /* in four bytes, LSB justified */ -+#define SNDRV_PCM_FORMAT_U20_LE ((__force snd_pcm_format_t) 27) /* in four bytes, LSB justified */ -+#define SNDRV_PCM_FORMAT_U20_BE ((__force snd_pcm_format_t) 28) /* in four bytes, LSB justified */ -+/* gap in the numbering for a future standard linear format */ -+#define SNDRV_PCM_FORMAT_SPECIAL ((__force snd_pcm_format_t) 31) -+#define SNDRV_PCM_FORMAT_S24_3LE ((__force snd_pcm_format_t) 32) /* in three bytes */ -+#define SNDRV_PCM_FORMAT_S24_3BE ((__force snd_pcm_format_t) 33) /* in three bytes */ -+#define SNDRV_PCM_FORMAT_U24_3LE ((__force snd_pcm_format_t) 34) /* in three bytes */ -+#define SNDRV_PCM_FORMAT_U24_3BE ((__force snd_pcm_format_t) 35) /* in three bytes */ -+#define SNDRV_PCM_FORMAT_S20_3LE ((__force snd_pcm_format_t) 36) /* in three bytes */ -+#define SNDRV_PCM_FORMAT_S20_3BE ((__force snd_pcm_format_t) 37) /* in three bytes */ -+#define SNDRV_PCM_FORMAT_U20_3LE ((__force snd_pcm_format_t) 38) /* in three bytes */ -+#define SNDRV_PCM_FORMAT_U20_3BE ((__force snd_pcm_format_t) 39) /* in three bytes */ -+#define SNDRV_PCM_FORMAT_S18_3LE ((__force snd_pcm_format_t) 40) /* in three bytes */ -+#define SNDRV_PCM_FORMAT_S18_3BE ((__force snd_pcm_format_t) 41) /* in three bytes */ -+#define SNDRV_PCM_FORMAT_U18_3LE ((__force snd_pcm_format_t) 42) /* in three bytes */ -+#define SNDRV_PCM_FORMAT_U18_3BE ((__force snd_pcm_format_t) 43) /* in three bytes */ -+#define SNDRV_PCM_FORMAT_G723_24 ((__force snd_pcm_format_t) 44) /* 8 samples in 3 bytes */ -+#define SNDRV_PCM_FORMAT_G723_24_1B ((__force snd_pcm_format_t) 45) /* 1 sample in 1 byte */ -+#define SNDRV_PCM_FORMAT_G723_40 ((__force snd_pcm_format_t) 46) /* 8 Samples in 5 bytes */ -+#define SNDRV_PCM_FORMAT_G723_40_1B ((__force snd_pcm_format_t) 47) /* 1 sample in 1 byte */ -+#define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */ -+#define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */ -+#define SNDRV_PCM_FORMAT_DSD_U32_LE ((__force snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */ -+#define SNDRV_PCM_FORMAT_DSD_U16_BE ((__force snd_pcm_format_t) 51) /* DSD, 2-byte samples DSD (x16), big endian */ -+#define SNDRV_PCM_FORMAT_DSD_U32_BE ((__force snd_pcm_format_t) 52) /* DSD, 4-byte samples DSD (x32), big endian */ -+#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_BE -+#define SNDRV_PCM_FORMAT_FIRST SNDRV_PCM_FORMAT_S8 -+ -+#ifdef SNDRV_LITTLE_ENDIAN -+#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE -+#define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_LE -+#define SNDRV_PCM_FORMAT_S24 SNDRV_PCM_FORMAT_S24_LE -+#define SNDRV_PCM_FORMAT_U24 SNDRV_PCM_FORMAT_U24_LE -+#define SNDRV_PCM_FORMAT_S32 SNDRV_PCM_FORMAT_S32_LE -+#define SNDRV_PCM_FORMAT_U32 SNDRV_PCM_FORMAT_U32_LE -+#define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_LE -+#define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_LE -+#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE -+#define SNDRV_PCM_FORMAT_S20 SNDRV_PCM_FORMAT_S20_LE -+#define SNDRV_PCM_FORMAT_U20 SNDRV_PCM_FORMAT_U20_LE -+#endif -+#ifdef SNDRV_BIG_ENDIAN -+#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_BE -+#define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_BE -+#define SNDRV_PCM_FORMAT_S24 SNDRV_PCM_FORMAT_S24_BE -+#define SNDRV_PCM_FORMAT_U24 SNDRV_PCM_FORMAT_U24_BE -+#define SNDRV_PCM_FORMAT_S32 SNDRV_PCM_FORMAT_S32_BE -+#define SNDRV_PCM_FORMAT_U32 SNDRV_PCM_FORMAT_U32_BE -+#define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_BE -+#define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_BE -+#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE -+#define SNDRV_PCM_FORMAT_S20 SNDRV_PCM_FORMAT_S20_BE -+#define SNDRV_PCM_FORMAT_U20 SNDRV_PCM_FORMAT_U20_BE -+#endif -+ -+typedef int __bitwise snd_pcm_subformat_t; -+#define SNDRV_PCM_SUBFORMAT_STD ((__force snd_pcm_subformat_t) 0) -+#define SNDRV_PCM_SUBFORMAT_LAST SNDRV_PCM_SUBFORMAT_STD -+ -+#define SNDRV_PCM_INFO_MMAP 0x00000001 /* hardware supports mmap */ -+#define SNDRV_PCM_INFO_MMAP_VALID 0x00000002 /* period data are valid during transfer */ -+#define SNDRV_PCM_INFO_DOUBLE 0x00000004 /* Double buffering needed for PCM start/stop */ -+#define SNDRV_PCM_INFO_BATCH 0x00000010 /* double buffering */ -+#define SNDRV_PCM_INFO_SYNC_APPLPTR 0x00000020 /* need the explicit sync of appl_ptr update */ -+#define SNDRV_PCM_INFO_INTERLEAVED 0x00000100 /* channels are interleaved */ -+#define SNDRV_PCM_INFO_NONINTERLEAVED 0x00000200 /* channels are not interleaved */ -+#define SNDRV_PCM_INFO_COMPLEX 0x00000400 /* complex frame organization (mmap only) */ -+#define SNDRV_PCM_INFO_BLOCK_TRANSFER 0x00010000 /* hardware transfer block of samples */ -+#define SNDRV_PCM_INFO_OVERRANGE 0x00020000 /* hardware supports ADC (capture) overrange detection */ -+#define SNDRV_PCM_INFO_RESUME 0x00040000 /* hardware supports stream resume after suspend */ -+#define SNDRV_PCM_INFO_PAUSE 0x00080000 /* pause ioctl is supported */ -+#define SNDRV_PCM_INFO_HALF_DUPLEX 0x00100000 /* only half duplex */ -+#define SNDRV_PCM_INFO_JOINT_DUPLEX 0x00200000 /* playback and capture stream are somewhat correlated */ -+#define SNDRV_PCM_INFO_SYNC_START 0x00400000 /* pcm support some kind of sync go */ -+#define SNDRV_PCM_INFO_NO_PERIOD_WAKEUP 0x00800000 /* period wakeup can be disabled */ -+#define SNDRV_PCM_INFO_HAS_WALL_CLOCK 0x01000000 /* (Deprecated)has audio wall clock for audio/system time sync */ -+#define SNDRV_PCM_INFO_HAS_LINK_ATIME 0x01000000 /* report hardware link audio time, reset on startup */ -+#define SNDRV_PCM_INFO_HAS_LINK_ABSOLUTE_ATIME 0x02000000 /* report absolute hardware link audio time, not reset on startup */ -+#define SNDRV_PCM_INFO_HAS_LINK_ESTIMATED_ATIME 0x04000000 /* report estimated link audio time */ -+#define SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME 0x08000000 /* report synchronized audio/system time */ -+ -+#define SNDRV_PCM_INFO_DRAIN_TRIGGER 0x40000000 /* internal kernel flag - trigger in drain */ -+#define SNDRV_PCM_INFO_FIFO_IN_FRAMES 0x80000000 /* internal kernel flag - FIFO size is in frames */ -+ -+ -+ -+typedef int __bitwise snd_pcm_state_t; -+#define SNDRV_PCM_STATE_OPEN ((__force snd_pcm_state_t) 0) /* stream is open */ -+#define SNDRV_PCM_STATE_SETUP ((__force snd_pcm_state_t) 1) /* stream has a setup */ -+#define SNDRV_PCM_STATE_PREPARED ((__force snd_pcm_state_t) 2) /* stream is ready to start */ -+#define SNDRV_PCM_STATE_RUNNING ((__force snd_pcm_state_t) 3) /* stream is running */ -+#define SNDRV_PCM_STATE_XRUN ((__force snd_pcm_state_t) 4) /* stream reached an xrun */ -+#define SNDRV_PCM_STATE_DRAINING ((__force snd_pcm_state_t) 5) /* stream is draining */ -+#define SNDRV_PCM_STATE_PAUSED ((__force snd_pcm_state_t) 6) /* stream is paused */ -+#define SNDRV_PCM_STATE_SUSPENDED ((__force snd_pcm_state_t) 7) /* hardware is suspended */ -+#define SNDRV_PCM_STATE_DISCONNECTED ((__force snd_pcm_state_t) 8) /* hardware is disconnected */ -+#define SNDRV_PCM_STATE_LAST SNDRV_PCM_STATE_DISCONNECTED -+ -+enum { -+ SNDRV_PCM_MMAP_OFFSET_DATA = 0x00000000, -+ SNDRV_PCM_MMAP_OFFSET_STATUS = 0x80000000, -+ SNDRV_PCM_MMAP_OFFSET_CONTROL = 0x81000000, -+}; -+ -+union snd_pcm_sync_id { -+ unsigned char id[16]; -+ unsigned short id16[8]; -+ unsigned int id32[4]; -+}; -+ -+struct snd_pcm_info { -+ unsigned int device; /* RO/WR (control): device number */ -+ unsigned int subdevice; /* RO/WR (control): subdevice number */ -+ int stream; /* RO/WR (control): stream direction */ -+ int card; /* R: card number */ -+ unsigned char id[64]; /* ID (user selectable) */ -+ unsigned char name[80]; /* name of this device */ -+ unsigned char subname[32]; /* subdevice name */ -+ int dev_class; /* SNDRV_PCM_CLASS_* */ -+ int dev_subclass; /* SNDRV_PCM_SUBCLASS_* */ -+ unsigned int subdevices_count; -+ unsigned int subdevices_avail; -+ union snd_pcm_sync_id sync; /* hardware synchronization ID */ -+ unsigned char reserved[64]; /* reserved for future... */ -+}; -+ -+typedef int snd_pcm_hw_param_t; -+#define SNDRV_PCM_HW_PARAM_ACCESS 0 /* Access type */ -+#define SNDRV_PCM_HW_PARAM_FORMAT 1 /* Format */ -+#define SNDRV_PCM_HW_PARAM_SUBFORMAT 2 /* Subformat */ -+#define SNDRV_PCM_HW_PARAM_FIRST_MASK SNDRV_PCM_HW_PARAM_ACCESS -+#define SNDRV_PCM_HW_PARAM_LAST_MASK SNDRV_PCM_HW_PARAM_SUBFORMAT -+ -+#define SNDRV_PCM_HW_PARAM_SAMPLE_BITS 8 /* Bits per sample */ -+#define SNDRV_PCM_HW_PARAM_FRAME_BITS 9 /* Bits per frame */ -+#define SNDRV_PCM_HW_PARAM_CHANNELS 10 /* Channels */ -+#define SNDRV_PCM_HW_PARAM_RATE 11 /* Approx rate */ -+#define SNDRV_PCM_HW_PARAM_PERIOD_TIME 12 /* Approx distance between -+ * interrupts in us -+ */ -+#define SNDRV_PCM_HW_PARAM_PERIOD_SIZE 13 /* Approx frames between -+ * interrupts -+ */ -+#define SNDRV_PCM_HW_PARAM_PERIOD_BYTES 14 /* Approx bytes between -+ * interrupts -+ */ -+#define SNDRV_PCM_HW_PARAM_PERIODS 15 /* Approx interrupts per -+ * buffer -+ */ -+#define SNDRV_PCM_HW_PARAM_BUFFER_TIME 16 /* Approx duration of buffer -+ * in us -+ */ -+#define SNDRV_PCM_HW_PARAM_BUFFER_SIZE 17 /* Size of buffer in frames */ -+#define SNDRV_PCM_HW_PARAM_BUFFER_BYTES 18 /* Size of buffer in bytes */ -+#define SNDRV_PCM_HW_PARAM_TICK_TIME 19 /* Approx tick duration in us */ -+#define SNDRV_PCM_HW_PARAM_FIRST_INTERVAL SNDRV_PCM_HW_PARAM_SAMPLE_BITS -+#define SNDRV_PCM_HW_PARAM_LAST_INTERVAL SNDRV_PCM_HW_PARAM_TICK_TIME -+ -+#define SNDRV_PCM_HW_PARAMS_NORESAMPLE (1<<0) /* avoid rate resampling */ -+#define SNDRV_PCM_HW_PARAMS_EXPORT_BUFFER (1<<1) /* export buffer */ -+#define SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP (1<<2) /* disable period wakeups */ -+ -+struct snd_interval { -+ unsigned int min, max; -+ unsigned int openmin:1, -+ openmax:1, -+ integer:1, -+ empty:1; -+}; -+ -+#define SNDRV_MASK_MAX 256 -+ -+struct snd_mask { -+ __u32 bits[(SNDRV_MASK_MAX+31)/32]; -+}; -+ -+struct snd_pcm_hw_params { -+ unsigned int flags; -+ struct snd_mask masks[SNDRV_PCM_HW_PARAM_LAST_MASK - -+ SNDRV_PCM_HW_PARAM_FIRST_MASK + 1]; -+ struct snd_mask mres[5]; /* reserved masks */ -+ struct snd_interval intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL - -+ SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1]; -+ struct snd_interval ires[9]; /* reserved intervals */ -+ unsigned int rmask; /* W: requested masks */ -+ unsigned int cmask; /* R: changed masks */ -+ unsigned int info; /* R: Info flags for returned setup */ -+ unsigned int msbits; /* R: used most significant bits */ -+ unsigned int rate_num; /* R: rate numerator */ -+ unsigned int rate_den; /* R: rate denominator */ -+ snd_pcm_uframes_t fifo_size; /* R: chip FIFO size in frames */ -+ unsigned char reserved[64]; /* reserved for future */ -+}; -+ -+enum { -+ SNDRV_PCM_TSTAMP_NONE = 0, -+ SNDRV_PCM_TSTAMP_ENABLE, -+ SNDRV_PCM_TSTAMP_LAST = SNDRV_PCM_TSTAMP_ENABLE, -+}; -+ -+struct snd_pcm_sw_params { -+ int tstamp_mode; /* timestamp mode */ -+ unsigned int period_step; -+ unsigned int sleep_min; /* min ticks to sleep */ -+ snd_pcm_uframes_t avail_min; /* min avail frames for wakeup */ -+ snd_pcm_uframes_t xfer_align; /* obsolete: xfer size need to be a multiple */ -+ snd_pcm_uframes_t start_threshold; /* min hw_avail frames for automatic start */ -+ snd_pcm_uframes_t stop_threshold; /* min avail frames for automatic stop */ -+ snd_pcm_uframes_t silence_threshold; /* min distance from noise for silence filling */ -+ snd_pcm_uframes_t silence_size; /* silence block size */ -+ snd_pcm_uframes_t boundary; /* pointers wrap point */ -+ unsigned int proto; /* protocol version */ -+ unsigned int tstamp_type; /* timestamp type (req. proto >= 2.0.12) */ -+ unsigned char reserved[56]; /* reserved for future */ -+}; -+ -+struct snd_pcm_channel_info { -+ unsigned int channel; -+ __kernel_off_t offset; /* mmap offset */ -+ unsigned int first; /* offset to first sample in bits */ -+ unsigned int step; /* samples distance in bits */ -+}; -+ -+enum { -+ /* -+ * first definition for backwards compatibility only, -+ * maps to wallclock/link time for HDAudio playback and DEFAULT/DMA time for everything else -+ */ -+ SNDRV_PCM_AUDIO_TSTAMP_TYPE_COMPAT = 0, -+ -+ /* timestamp definitions */ -+ SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT = 1, /* DMA time, reported as per hw_ptr */ -+ SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK = 2, /* link time reported by sample or wallclock counter, reset on startup */ -+ SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ABSOLUTE = 3, /* link time reported by sample or wallclock counter, not reset on startup */ -+ SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ESTIMATED = 4, /* link time estimated indirectly */ -+ SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED = 5, /* link time synchronized with system time */ -+ SNDRV_PCM_AUDIO_TSTAMP_TYPE_LAST = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED -+}; -+ -+struct snd_pcm_status { -+ snd_pcm_state_t state; /* stream state */ -+ struct timespec trigger_tstamp; /* time when stream was started/stopped/paused */ -+ struct timespec tstamp; /* reference timestamp */ -+ snd_pcm_uframes_t appl_ptr; /* appl ptr */ -+ snd_pcm_uframes_t hw_ptr; /* hw ptr */ -+ snd_pcm_sframes_t delay; /* current delay in frames */ -+ snd_pcm_uframes_t avail; /* number of frames available */ -+ snd_pcm_uframes_t avail_max; /* max frames available on hw since last status */ -+ snd_pcm_uframes_t overrange; /* count of ADC (capture) overrange detections from last status */ -+ snd_pcm_state_t suspended_state; /* suspended stream state */ -+ __u32 audio_tstamp_data; /* needed for 64-bit alignment, used for configs/report to/from userspace */ -+ struct timespec audio_tstamp; /* sample counter, wall clock, PHC or on-demand sync'ed */ -+ struct timespec driver_tstamp; /* useful in case reference system tstamp is reported with delay */ -+ __u32 audio_tstamp_accuracy; /* in ns units, only valid if indicated in audio_tstamp_data */ -+ unsigned char reserved[52-2*sizeof(struct timespec)]; /* must be filled with zero */ -+}; -+ -+struct snd_pcm_mmap_status { -+ snd_pcm_state_t state; /* RO: state - SNDRV_PCM_STATE_XXXX */ -+ int pad1; /* Needed for 64 bit alignment */ -+ snd_pcm_uframes_t hw_ptr; /* RO: hw ptr (0...boundary-1) */ -+ struct timespec tstamp; /* Timestamp */ -+ snd_pcm_state_t suspended_state; /* RO: suspended stream state */ -+ struct timespec audio_tstamp; /* from sample counter or wall clock */ -+}; -+ -+struct snd_pcm_mmap_control { -+ snd_pcm_uframes_t appl_ptr; /* RW: appl ptr (0...boundary-1) */ -+ snd_pcm_uframes_t avail_min; /* RW: min available frames for wakeup */ -+}; -+ -+#define SNDRV_PCM_SYNC_PTR_HWSYNC (1<<0) /* execute hwsync */ -+#define SNDRV_PCM_SYNC_PTR_APPL (1<<1) /* get appl_ptr from driver (r/w op) */ -+#define SNDRV_PCM_SYNC_PTR_AVAIL_MIN (1<<2) /* get avail_min from driver */ -+ -+struct snd_pcm_sync_ptr { -+ unsigned int flags; -+ union { -+ struct snd_pcm_mmap_status status; -+ unsigned char reserved[64]; -+ } s; -+ union { -+ struct snd_pcm_mmap_control control; -+ unsigned char reserved[64]; -+ } c; -+}; -+ -+struct snd_xferi { -+ snd_pcm_sframes_t result; -+ void __user *buf; -+ snd_pcm_uframes_t frames; -+}; -+ -+struct snd_xfern { -+ snd_pcm_sframes_t result; -+ void __user * __user *bufs; -+ snd_pcm_uframes_t frames; -+}; -+ -+enum { -+ SNDRV_PCM_TSTAMP_TYPE_GETTIMEOFDAY = 0, /* gettimeofday equivalent */ -+ SNDRV_PCM_TSTAMP_TYPE_MONOTONIC, /* posix_clock_monotonic equivalent */ -+ SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW, /* monotonic_raw (no NTP) */ -+ SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW, -+}; -+ -+/* channel positions */ -+enum { -+ SNDRV_CHMAP_UNKNOWN = 0, -+ SNDRV_CHMAP_NA, /* N/A, silent */ -+ SNDRV_CHMAP_MONO, /* mono stream */ -+ /* this follows the alsa-lib mixer channel value + 3 */ -+ SNDRV_CHMAP_FL, /* front left */ -+ SNDRV_CHMAP_FR, /* front right */ -+ SNDRV_CHMAP_RL, /* rear left */ -+ SNDRV_CHMAP_RR, /* rear right */ -+ SNDRV_CHMAP_FC, /* front center */ -+ SNDRV_CHMAP_LFE, /* LFE */ -+ SNDRV_CHMAP_SL, /* side left */ -+ SNDRV_CHMAP_SR, /* side right */ -+ SNDRV_CHMAP_RC, /* rear center */ -+ /* new definitions */ -+ SNDRV_CHMAP_FLC, /* front left center */ -+ SNDRV_CHMAP_FRC, /* front right center */ -+ SNDRV_CHMAP_RLC, /* rear left center */ -+ SNDRV_CHMAP_RRC, /* rear right center */ -+ SNDRV_CHMAP_FLW, /* front left wide */ -+ SNDRV_CHMAP_FRW, /* front right wide */ -+ SNDRV_CHMAP_FLH, /* front left high */ -+ SNDRV_CHMAP_FCH, /* front center high */ -+ SNDRV_CHMAP_FRH, /* front right high */ -+ SNDRV_CHMAP_TC, /* top center */ -+ SNDRV_CHMAP_TFL, /* top front left */ -+ SNDRV_CHMAP_TFR, /* top front right */ -+ SNDRV_CHMAP_TFC, /* top front center */ -+ SNDRV_CHMAP_TRL, /* top rear left */ -+ SNDRV_CHMAP_TRR, /* top rear right */ -+ SNDRV_CHMAP_TRC, /* top rear center */ -+ /* new definitions for UAC2 */ -+ SNDRV_CHMAP_TFLC, /* top front left center */ -+ SNDRV_CHMAP_TFRC, /* top front right center */ -+ SNDRV_CHMAP_TSL, /* top side left */ -+ SNDRV_CHMAP_TSR, /* top side right */ -+ SNDRV_CHMAP_LLFE, /* left LFE */ -+ SNDRV_CHMAP_RLFE, /* right LFE */ -+ SNDRV_CHMAP_BC, /* bottom center */ -+ SNDRV_CHMAP_BLC, /* bottom left center */ -+ SNDRV_CHMAP_BRC, /* bottom right center */ -+ SNDRV_CHMAP_LAST = SNDRV_CHMAP_BRC, -+}; -+ -+#define SNDRV_CHMAP_POSITION_MASK 0xffff -+#define SNDRV_CHMAP_PHASE_INVERSE (0x01 << 16) -+#define SNDRV_CHMAP_DRIVER_SPEC (0x02 << 16) -+ -+#define SNDRV_PCM_IOCTL_PVERSION _IOR('A', 0x00, int) -+#define SNDRV_PCM_IOCTL_INFO _IOR('A', 0x01, struct snd_pcm_info) -+#define SNDRV_PCM_IOCTL_TSTAMP _IOW('A', 0x02, int) -+#define SNDRV_PCM_IOCTL_TTSTAMP _IOW('A', 0x03, int) -+#define SNDRV_PCM_IOCTL_USER_PVERSION _IOW('A', 0x04, int) -+#define SNDRV_PCM_IOCTL_HW_REFINE _IOWR('A', 0x10, struct snd_pcm_hw_params) -+#define SNDRV_PCM_IOCTL_HW_PARAMS _IOWR('A', 0x11, struct snd_pcm_hw_params) -+#define SNDRV_PCM_IOCTL_HW_FREE _IO('A', 0x12) -+#define SNDRV_PCM_IOCTL_SW_PARAMS _IOWR('A', 0x13, struct snd_pcm_sw_params) -+#define SNDRV_PCM_IOCTL_STATUS _IOR('A', 0x20, struct snd_pcm_status) -+#define SNDRV_PCM_IOCTL_DELAY _IOR('A', 0x21, snd_pcm_sframes_t) -+#define SNDRV_PCM_IOCTL_HWSYNC _IO('A', 0x22) -+#define SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct snd_pcm_sync_ptr) -+#define SNDRV_PCM_IOCTL_STATUS_EXT _IOWR('A', 0x24, struct snd_pcm_status) -+#define SNDRV_PCM_IOCTL_CHANNEL_INFO _IOR('A', 0x32, struct snd_pcm_channel_info) -+#define SNDRV_PCM_IOCTL_PREPARE _IO('A', 0x40) -+#define SNDRV_PCM_IOCTL_RESET _IO('A', 0x41) -+#define SNDRV_PCM_IOCTL_START _IO('A', 0x42) -+#define SNDRV_PCM_IOCTL_DROP _IO('A', 0x43) -+#define SNDRV_PCM_IOCTL_DRAIN _IO('A', 0x44) -+#define SNDRV_PCM_IOCTL_PAUSE _IOW('A', 0x45, int) -+#define SNDRV_PCM_IOCTL_REWIND _IOW('A', 0x46, snd_pcm_uframes_t) -+#define SNDRV_PCM_IOCTL_RESUME _IO('A', 0x47) -+#define SNDRV_PCM_IOCTL_XRUN _IO('A', 0x48) -+#define SNDRV_PCM_IOCTL_FORWARD _IOW('A', 0x49, snd_pcm_uframes_t) -+#define SNDRV_PCM_IOCTL_WRITEI_FRAMES _IOW('A', 0x50, struct snd_xferi) -+#define SNDRV_PCM_IOCTL_READI_FRAMES _IOR('A', 0x51, struct snd_xferi) -+#define SNDRV_PCM_IOCTL_WRITEN_FRAMES _IOW('A', 0x52, struct snd_xfern) -+#define SNDRV_PCM_IOCTL_READN_FRAMES _IOR('A', 0x53, struct snd_xfern) -+#define SNDRV_PCM_IOCTL_LINK _IOW('A', 0x60, int) -+#define SNDRV_PCM_IOCTL_UNLINK _IO('A', 0x61) -+ -+/***************************************************************************** -+ * * -+ * MIDI v1.0 interface * -+ * * -+ *****************************************************************************/ -+ -+/* -+ * Raw MIDI section - /dev/snd/midi?? -+ */ -+ -+#define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 0) -+ -+enum { -+ SNDRV_RAWMIDI_STREAM_OUTPUT = 0, -+ SNDRV_RAWMIDI_STREAM_INPUT, -+ SNDRV_RAWMIDI_STREAM_LAST = SNDRV_RAWMIDI_STREAM_INPUT, -+}; -+ -+#define SNDRV_RAWMIDI_INFO_OUTPUT 0x00000001 -+#define SNDRV_RAWMIDI_INFO_INPUT 0x00000002 -+#define SNDRV_RAWMIDI_INFO_DUPLEX 0x00000004 -+ -+struct snd_rawmidi_info { -+ unsigned int device; /* RO/WR (control): device number */ -+ unsigned int subdevice; /* RO/WR (control): subdevice number */ -+ int stream; /* WR: stream */ -+ int card; /* R: card number */ -+ unsigned int flags; /* SNDRV_RAWMIDI_INFO_XXXX */ -+ unsigned char id[64]; /* ID (user selectable) */ -+ unsigned char name[80]; /* name of device */ -+ unsigned char subname[32]; /* name of active or selected subdevice */ -+ unsigned int subdevices_count; -+ unsigned int subdevices_avail; -+ unsigned char reserved[64]; /* reserved for future use */ -+}; -+ -+struct snd_rawmidi_params { -+ int stream; -+ size_t buffer_size; /* queue size in bytes */ -+ size_t avail_min; /* minimum avail bytes for wakeup */ -+ unsigned int no_active_sensing: 1; /* do not send active sensing byte in close() */ -+ unsigned char reserved[16]; /* reserved for future use */ -+}; -+ -+struct snd_rawmidi_status { -+ int stream; -+ struct timespec tstamp; /* Timestamp */ -+ size_t avail; /* available bytes */ -+ size_t xruns; /* count of overruns since last status (in bytes) */ -+ unsigned char reserved[16]; /* reserved for future use */ -+}; -+ -+#define SNDRV_RAWMIDI_IOCTL_PVERSION _IOR('W', 0x00, int) -+#define SNDRV_RAWMIDI_IOCTL_INFO _IOR('W', 0x01, struct snd_rawmidi_info) -+#define SNDRV_RAWMIDI_IOCTL_PARAMS _IOWR('W', 0x10, struct snd_rawmidi_params) -+#define SNDRV_RAWMIDI_IOCTL_STATUS _IOWR('W', 0x20, struct snd_rawmidi_status) -+#define SNDRV_RAWMIDI_IOCTL_DROP _IOW('W', 0x30, int) -+#define SNDRV_RAWMIDI_IOCTL_DRAIN _IOW('W', 0x31, int) -+ -+/* -+ * Timer section - /dev/snd/timer -+ */ -+ -+#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 6) -+ -+enum { -+ SNDRV_TIMER_CLASS_NONE = -1, -+ SNDRV_TIMER_CLASS_SLAVE = 0, -+ SNDRV_TIMER_CLASS_GLOBAL, -+ SNDRV_TIMER_CLASS_CARD, -+ SNDRV_TIMER_CLASS_PCM, -+ SNDRV_TIMER_CLASS_LAST = SNDRV_TIMER_CLASS_PCM, -+}; -+ -+/* slave timer classes */ -+enum { -+ SNDRV_TIMER_SCLASS_NONE = 0, -+ SNDRV_TIMER_SCLASS_APPLICATION, -+ SNDRV_TIMER_SCLASS_SEQUENCER, /* alias */ -+ SNDRV_TIMER_SCLASS_OSS_SEQUENCER, /* alias */ -+ SNDRV_TIMER_SCLASS_LAST = SNDRV_TIMER_SCLASS_OSS_SEQUENCER, -+}; -+ -+/* global timers (device member) */ -+#define SNDRV_TIMER_GLOBAL_SYSTEM 0 -+#define SNDRV_TIMER_GLOBAL_RTC 1 /* unused */ -+#define SNDRV_TIMER_GLOBAL_HPET 2 -+#define SNDRV_TIMER_GLOBAL_HRTIMER 3 -+ -+/* info flags */ -+#define SNDRV_TIMER_FLG_SLAVE (1<<0) /* cannot be controlled */ -+ -+struct snd_timer_id { -+ int dev_class; -+ int dev_sclass; -+ int card; -+ int device; -+ int subdevice; -+}; -+ -+struct snd_timer_ginfo { -+ struct snd_timer_id tid; /* requested timer ID */ -+ unsigned int flags; /* timer flags - SNDRV_TIMER_FLG_* */ -+ int card; /* card number */ -+ unsigned char id[64]; /* timer identification */ -+ unsigned char name[80]; /* timer name */ -+ unsigned long reserved0; /* reserved for future use */ -+ unsigned long resolution; /* average period resolution in ns */ -+ unsigned long resolution_min; /* minimal period resolution in ns */ -+ unsigned long resolution_max; /* maximal period resolution in ns */ -+ unsigned int clients; /* active timer clients */ -+ unsigned char reserved[32]; -+}; -+ -+struct snd_timer_gparams { -+ struct snd_timer_id tid; /* requested timer ID */ -+ unsigned long period_num; /* requested precise period duration (in seconds) - numerator */ -+ unsigned long period_den; /* requested precise period duration (in seconds) - denominator */ -+ unsigned char reserved[32]; -+}; -+ -+struct snd_timer_gstatus { -+ struct snd_timer_id tid; /* requested timer ID */ -+ unsigned long resolution; /* current period resolution in ns */ -+ unsigned long resolution_num; /* precise current period resolution (in seconds) - numerator */ -+ unsigned long resolution_den; /* precise current period resolution (in seconds) - denominator */ -+ unsigned char reserved[32]; -+}; -+ -+struct snd_timer_select { -+ struct snd_timer_id id; /* bind to timer ID */ -+ unsigned char reserved[32]; /* reserved */ -+}; -+ -+struct snd_timer_info { -+ unsigned int flags; /* timer flags - SNDRV_TIMER_FLG_* */ -+ int card; /* card number */ -+ unsigned char id[64]; /* timer identificator */ -+ unsigned char name[80]; /* timer name */ -+ unsigned long reserved0; /* reserved for future use */ -+ unsigned long resolution; /* average period resolution in ns */ -+ unsigned char reserved[64]; /* reserved */ -+}; -+ -+#define SNDRV_TIMER_PSFLG_AUTO (1<<0) /* auto start, otherwise one-shot */ -+#define SNDRV_TIMER_PSFLG_EXCLUSIVE (1<<1) /* exclusive use, precise start/stop/pause/continue */ -+#define SNDRV_TIMER_PSFLG_EARLY_EVENT (1<<2) /* write early event to the poll queue */ -+ -+struct snd_timer_params { -+ unsigned int flags; /* flags - SNDRV_TIMER_PSFLG_* */ -+ unsigned int ticks; /* requested resolution in ticks */ -+ unsigned int queue_size; /* total size of queue (32-1024) */ -+ unsigned int reserved0; /* reserved, was: failure locations */ -+ unsigned int filter; /* event filter (bitmask of SNDRV_TIMER_EVENT_*) */ -+ unsigned char reserved[60]; /* reserved */ -+}; -+ -+struct snd_timer_status { -+ struct timespec tstamp; /* Timestamp - last update */ -+ unsigned int resolution; /* current period resolution in ns */ -+ unsigned int lost; /* counter of master tick lost */ -+ unsigned int overrun; /* count of read queue overruns */ -+ unsigned int queue; /* used queue size */ -+ unsigned char reserved[64]; /* reserved */ -+}; -+ -+#define SNDRV_TIMER_IOCTL_PVERSION _IOR('T', 0x00, int) -+#define SNDRV_TIMER_IOCTL_NEXT_DEVICE _IOWR('T', 0x01, struct snd_timer_id) -+#define SNDRV_TIMER_IOCTL_TREAD _IOW('T', 0x02, int) -+#define SNDRV_TIMER_IOCTL_GINFO _IOWR('T', 0x03, struct snd_timer_ginfo) -+#define SNDRV_TIMER_IOCTL_GPARAMS _IOW('T', 0x04, struct snd_timer_gparams) -+#define SNDRV_TIMER_IOCTL_GSTATUS _IOWR('T', 0x05, struct snd_timer_gstatus) -+#define SNDRV_TIMER_IOCTL_SELECT _IOW('T', 0x10, struct snd_timer_select) -+#define SNDRV_TIMER_IOCTL_INFO _IOR('T', 0x11, struct snd_timer_info) -+#define SNDRV_TIMER_IOCTL_PARAMS _IOW('T', 0x12, struct snd_timer_params) -+#define SNDRV_TIMER_IOCTL_STATUS _IOR('T', 0x14, struct snd_timer_status) -+/* The following four ioctls are changed since 1.0.9 due to confliction */ -+#define SNDRV_TIMER_IOCTL_START _IO('T', 0xa0) -+#define SNDRV_TIMER_IOCTL_STOP _IO('T', 0xa1) -+#define SNDRV_TIMER_IOCTL_CONTINUE _IO('T', 0xa2) -+#define SNDRV_TIMER_IOCTL_PAUSE _IO('T', 0xa3) -+ -+struct snd_timer_read { -+ unsigned int resolution; -+ unsigned int ticks; -+}; -+ -+enum { -+ SNDRV_TIMER_EVENT_RESOLUTION = 0, /* val = resolution in ns */ -+ SNDRV_TIMER_EVENT_TICK, /* val = ticks */ -+ SNDRV_TIMER_EVENT_START, /* val = resolution in ns */ -+ SNDRV_TIMER_EVENT_STOP, /* val = 0 */ -+ SNDRV_TIMER_EVENT_CONTINUE, /* val = resolution in ns */ -+ SNDRV_TIMER_EVENT_PAUSE, /* val = 0 */ -+ SNDRV_TIMER_EVENT_EARLY, /* val = 0, early event */ -+ SNDRV_TIMER_EVENT_SUSPEND, /* val = 0 */ -+ SNDRV_TIMER_EVENT_RESUME, /* val = resolution in ns */ -+ /* master timer events for slave timer instances */ -+ SNDRV_TIMER_EVENT_MSTART = SNDRV_TIMER_EVENT_START + 10, -+ SNDRV_TIMER_EVENT_MSTOP = SNDRV_TIMER_EVENT_STOP + 10, -+ SNDRV_TIMER_EVENT_MCONTINUE = SNDRV_TIMER_EVENT_CONTINUE + 10, -+ SNDRV_TIMER_EVENT_MPAUSE = SNDRV_TIMER_EVENT_PAUSE + 10, -+ SNDRV_TIMER_EVENT_MSUSPEND = SNDRV_TIMER_EVENT_SUSPEND + 10, -+ SNDRV_TIMER_EVENT_MRESUME = SNDRV_TIMER_EVENT_RESUME + 10, -+}; -+ -+struct snd_timer_tread { -+ int event; -+ struct timespec tstamp; -+ unsigned int val; -+}; -+ -+/**************************************************************************** -+ * * -+ * Section for driver control interface - /dev/snd/control? * -+ * * -+ ****************************************************************************/ -+ -+#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7) -+ -+struct snd_ctl_card_info { -+ int card; /* card number */ -+ int pad; /* reserved for future (was type) */ -+ unsigned char id[16]; /* ID of card (user selectable) */ -+ unsigned char driver[16]; /* Driver name */ -+ unsigned char name[32]; /* Short name of soundcard */ -+ unsigned char longname[80]; /* name + info text about soundcard */ -+ unsigned char reserved_[16]; /* reserved for future (was ID of mixer) */ -+ unsigned char mixername[80]; /* visual mixer identification */ -+ unsigned char components[128]; /* card components / fine identification, delimited with one space (AC97 etc..) */ -+}; -+ -+typedef int __bitwise snd_ctl_elem_type_t; -+#define SNDRV_CTL_ELEM_TYPE_NONE ((__force snd_ctl_elem_type_t) 0) /* invalid */ -+#define SNDRV_CTL_ELEM_TYPE_BOOLEAN ((__force snd_ctl_elem_type_t) 1) /* boolean type */ -+#define SNDRV_CTL_ELEM_TYPE_INTEGER ((__force snd_ctl_elem_type_t) 2) /* integer type */ -+#define SNDRV_CTL_ELEM_TYPE_ENUMERATED ((__force snd_ctl_elem_type_t) 3) /* enumerated type */ -+#define SNDRV_CTL_ELEM_TYPE_BYTES ((__force snd_ctl_elem_type_t) 4) /* byte array */ -+#define SNDRV_CTL_ELEM_TYPE_IEC958 ((__force snd_ctl_elem_type_t) 5) /* IEC958 (S/PDIF) setup */ -+#define SNDRV_CTL_ELEM_TYPE_INTEGER64 ((__force snd_ctl_elem_type_t) 6) /* 64-bit integer type */ -+#define SNDRV_CTL_ELEM_TYPE_LAST SNDRV_CTL_ELEM_TYPE_INTEGER64 -+ -+typedef int __bitwise snd_ctl_elem_iface_t; -+#define SNDRV_CTL_ELEM_IFACE_CARD ((__force snd_ctl_elem_iface_t) 0) /* global control */ -+#define SNDRV_CTL_ELEM_IFACE_HWDEP ((__force snd_ctl_elem_iface_t) 1) /* hardware dependent device */ -+#define SNDRV_CTL_ELEM_IFACE_MIXER ((__force snd_ctl_elem_iface_t) 2) /* virtual mixer device */ -+#define SNDRV_CTL_ELEM_IFACE_PCM ((__force snd_ctl_elem_iface_t) 3) /* PCM device */ -+#define SNDRV_CTL_ELEM_IFACE_RAWMIDI ((__force snd_ctl_elem_iface_t) 4) /* RawMidi device */ -+#define SNDRV_CTL_ELEM_IFACE_TIMER ((__force snd_ctl_elem_iface_t) 5) /* timer device */ -+#define SNDRV_CTL_ELEM_IFACE_SEQUENCER ((__force snd_ctl_elem_iface_t) 6) /* sequencer client */ -+#define SNDRV_CTL_ELEM_IFACE_LAST SNDRV_CTL_ELEM_IFACE_SEQUENCER -+ -+#define SNDRV_CTL_ELEM_ACCESS_READ (1<<0) -+#define SNDRV_CTL_ELEM_ACCESS_WRITE (1<<1) -+#define SNDRV_CTL_ELEM_ACCESS_READWRITE (SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE) -+#define SNDRV_CTL_ELEM_ACCESS_VOLATILE (1<<2) /* control value may be changed without a notification */ -+#define SNDRV_CTL_ELEM_ACCESS_TIMESTAMP (1<<3) /* when was control changed */ -+#define SNDRV_CTL_ELEM_ACCESS_TLV_READ (1<<4) /* TLV read is possible */ -+#define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE (1<<5) /* TLV write is possible */ -+#define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE (SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE) -+#define SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND (1<<6) /* TLV command is possible */ -+#define SNDRV_CTL_ELEM_ACCESS_INACTIVE (1<<8) /* control does actually nothing, but may be updated */ -+#define SNDRV_CTL_ELEM_ACCESS_LOCK (1<<9) /* write lock */ -+#define SNDRV_CTL_ELEM_ACCESS_OWNER (1<<10) /* write lock owner */ -+#define SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK (1<<28) /* kernel use a TLV callback */ -+#define SNDRV_CTL_ELEM_ACCESS_USER (1<<29) /* user space element */ -+/* bits 30 and 31 are obsoleted (for indirect access) */ -+ -+/* for further details see the ACPI and PCI power management specification */ -+#define SNDRV_CTL_POWER_D0 0x0000 /* full On */ -+#define SNDRV_CTL_POWER_D1 0x0100 /* partial On */ -+#define SNDRV_CTL_POWER_D2 0x0200 /* partial On */ -+#define SNDRV_CTL_POWER_D3 0x0300 /* Off */ -+#define SNDRV_CTL_POWER_D3hot (SNDRV_CTL_POWER_D3|0x0000) /* Off, with power */ -+#define SNDRV_CTL_POWER_D3cold (SNDRV_CTL_POWER_D3|0x0001) /* Off, without power */ -+ -+#define SNDRV_CTL_ELEM_ID_NAME_MAXLEN 44 -+ -+struct snd_ctl_elem_id { -+ unsigned int numid; /* numeric identifier, zero = invalid */ -+ snd_ctl_elem_iface_t iface; /* interface identifier */ -+ unsigned int device; /* device/client number */ -+ unsigned int subdevice; /* subdevice (substream) number */ -+ unsigned char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* ASCII name of item */ -+ unsigned int index; /* index of item */ -+}; -+ -+struct snd_ctl_elem_list { -+ unsigned int offset; /* W: first element ID to get */ -+ unsigned int space; /* W: count of element IDs to get */ -+ unsigned int used; /* R: count of element IDs set */ -+ unsigned int count; /* R: count of all elements */ -+ struct snd_ctl_elem_id __user *pids; /* R: IDs */ -+ unsigned char reserved[50]; -+}; -+ -+struct snd_ctl_elem_info { -+ struct snd_ctl_elem_id id; /* W: element ID */ -+ snd_ctl_elem_type_t type; /* R: value type - SNDRV_CTL_ELEM_TYPE_* */ -+ unsigned int access; /* R: value access (bitmask) - SNDRV_CTL_ELEM_ACCESS_* */ -+ unsigned int count; /* count of values */ -+ __kernel_pid_t owner; /* owner's PID of this control */ -+ union { -+ struct { -+ long min; /* R: minimum value */ -+ long max; /* R: maximum value */ -+ long step; /* R: step (0 variable) */ -+ } integer; -+ struct { -+ long long min; /* R: minimum value */ -+ long long max; /* R: maximum value */ -+ long long step; /* R: step (0 variable) */ -+ } integer64; -+ struct { -+ unsigned int items; /* R: number of items */ -+ unsigned int item; /* W: item number */ -+ char name[64]; /* R: value name */ -+ __u64 names_ptr; /* W: names list (ELEM_ADD only) */ -+ unsigned int names_length; -+ } enumerated; -+ unsigned char reserved[128]; -+ } value; -+ union { -+ unsigned short d[4]; /* dimensions */ -+ unsigned short *d_ptr; /* indirect - obsoleted */ -+ } dimen; -+ unsigned char reserved[64-4*sizeof(unsigned short)]; -+}; -+ -+struct snd_ctl_elem_value { -+ struct snd_ctl_elem_id id; /* W: element ID */ -+ unsigned int indirect: 1; /* W: indirect access - obsoleted */ -+ union { -+ union { -+ long value[128]; -+ long *value_ptr; /* obsoleted */ -+ } integer; -+ union { -+ long long value[64]; -+ long long *value_ptr; /* obsoleted */ -+ } integer64; -+ union { -+ unsigned int item[128]; -+ unsigned int *item_ptr; /* obsoleted */ -+ } enumerated; -+ union { -+ unsigned char data[512]; -+ unsigned char *data_ptr; /* obsoleted */ -+ } bytes; -+ struct snd_aes_iec958 iec958; -+ } value; /* RO */ -+ struct timespec tstamp; -+ unsigned char reserved[128-sizeof(struct timespec)]; -+}; -+ -+struct snd_ctl_tlv { -+ unsigned int numid; /* control element numeric identification */ -+ unsigned int length; /* in bytes aligned to 4 */ -+ unsigned int tlv[0]; /* first TLV */ -+}; -+ -+#define SNDRV_CTL_IOCTL_PVERSION _IOR('U', 0x00, int) -+#define SNDRV_CTL_IOCTL_CARD_INFO _IOR('U', 0x01, struct snd_ctl_card_info) -+#define SNDRV_CTL_IOCTL_ELEM_LIST _IOWR('U', 0x10, struct snd_ctl_elem_list) -+#define SNDRV_CTL_IOCTL_ELEM_INFO _IOWR('U', 0x11, struct snd_ctl_elem_info) -+#define SNDRV_CTL_IOCTL_ELEM_READ _IOWR('U', 0x12, struct snd_ctl_elem_value) -+#define SNDRV_CTL_IOCTL_ELEM_WRITE _IOWR('U', 0x13, struct snd_ctl_elem_value) -+#define SNDRV_CTL_IOCTL_ELEM_LOCK _IOW('U', 0x14, struct snd_ctl_elem_id) -+#define SNDRV_CTL_IOCTL_ELEM_UNLOCK _IOW('U', 0x15, struct snd_ctl_elem_id) -+#define SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS _IOWR('U', 0x16, int) -+#define SNDRV_CTL_IOCTL_ELEM_ADD _IOWR('U', 0x17, struct snd_ctl_elem_info) -+#define SNDRV_CTL_IOCTL_ELEM_REPLACE _IOWR('U', 0x18, struct snd_ctl_elem_info) -+#define SNDRV_CTL_IOCTL_ELEM_REMOVE _IOWR('U', 0x19, struct snd_ctl_elem_id) -+#define SNDRV_CTL_IOCTL_TLV_READ _IOWR('U', 0x1a, struct snd_ctl_tlv) -+#define SNDRV_CTL_IOCTL_TLV_WRITE _IOWR('U', 0x1b, struct snd_ctl_tlv) -+#define SNDRV_CTL_IOCTL_TLV_COMMAND _IOWR('U', 0x1c, struct snd_ctl_tlv) -+#define SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE _IOWR('U', 0x20, int) -+#define SNDRV_CTL_IOCTL_HWDEP_INFO _IOR('U', 0x21, struct snd_hwdep_info) -+#define SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE _IOR('U', 0x30, int) -+#define SNDRV_CTL_IOCTL_PCM_INFO _IOWR('U', 0x31, struct snd_pcm_info) -+#define SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE _IOW('U', 0x32, int) -+#define SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE _IOWR('U', 0x40, int) -+#define SNDRV_CTL_IOCTL_RAWMIDI_INFO _IOWR('U', 0x41, struct snd_rawmidi_info) -+#define SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE _IOW('U', 0x42, int) -+#define SNDRV_CTL_IOCTL_POWER _IOWR('U', 0xd0, int) -+#define SNDRV_CTL_IOCTL_POWER_STATE _IOR('U', 0xd1, int) -+ -+/* -+ * Read interface. -+ */ -+ -+enum sndrv_ctl_event_type { -+ SNDRV_CTL_EVENT_ELEM = 0, -+ SNDRV_CTL_EVENT_LAST = SNDRV_CTL_EVENT_ELEM, -+}; -+ -+#define SNDRV_CTL_EVENT_MASK_VALUE (1<<0) /* element value was changed */ -+#define SNDRV_CTL_EVENT_MASK_INFO (1<<1) /* element info was changed */ -+#define SNDRV_CTL_EVENT_MASK_ADD (1<<2) /* element was added */ -+#define SNDRV_CTL_EVENT_MASK_TLV (1<<3) /* element TLV tree was changed */ -+#define SNDRV_CTL_EVENT_MASK_REMOVE (~0U) /* element was removed */ -+ -+struct snd_ctl_event { -+ int type; /* event type - SNDRV_CTL_EVENT_* */ -+ union { -+ struct { -+ unsigned int mask; -+ struct snd_ctl_elem_id id; -+ } elem; -+ unsigned char data8[60]; -+ } data; -+}; -+ -+/* -+ * Control names -+ */ -+ -+#define SNDRV_CTL_NAME_NONE "" -+#define SNDRV_CTL_NAME_PLAYBACK "Playback " -+#define SNDRV_CTL_NAME_CAPTURE "Capture " -+ -+#define SNDRV_CTL_NAME_IEC958_NONE "" -+#define SNDRV_CTL_NAME_IEC958_SWITCH "Switch" -+#define SNDRV_CTL_NAME_IEC958_VOLUME "Volume" -+#define SNDRV_CTL_NAME_IEC958_DEFAULT "Default" -+#define SNDRV_CTL_NAME_IEC958_MASK "Mask" -+#define SNDRV_CTL_NAME_IEC958_CON_MASK "Con Mask" -+#define SNDRV_CTL_NAME_IEC958_PRO_MASK "Pro Mask" -+#define SNDRV_CTL_NAME_IEC958_PCM_STREAM "PCM Stream" -+#define SNDRV_CTL_NAME_IEC958(expl,direction,what) "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what -+ -+#endif /* _UAPI__SOUND_ASOUND_H */ -diff --git a/include/sound/uapi/asound_fm.h b/include/sound/uapi/asound_fm.h -new file mode 100644 -index 00000000..8471f404 ---- /dev/null -+++ b/include/sound/uapi/asound_fm.h -@@ -0,0 +1,135 @@ -+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ -+#ifndef __SOUND_ASOUND_FM_H -+#define __SOUND_ASOUND_FM_H -+ -+/* -+ * Advanced Linux Sound Architecture - ALSA -+ * -+ * Interface file between ALSA driver & user space -+ * Copyright (c) 1994-98 by Jaroslav Kysela , -+ * 4Front Technologies -+ * -+ * Direct FM control -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ * -+ */ -+ -+#define SNDRV_DM_FM_MODE_OPL2 0x00 -+#define SNDRV_DM_FM_MODE_OPL3 0x01 -+ -+struct snd_dm_fm_info { -+ unsigned char fm_mode; /* OPL mode, see SNDRV_DM_FM_MODE_XXX */ -+ unsigned char rhythm; /* percussion mode flag */ -+}; -+ -+/* -+ * Data structure composing an FM "note" or sound event. -+ */ -+ -+struct snd_dm_fm_voice { -+ unsigned char op; /* operator cell (0 or 1) */ -+ unsigned char voice; /* FM voice (0 to 17) */ -+ -+ unsigned char am; /* amplitude modulation */ -+ unsigned char vibrato; /* vibrato effect */ -+ unsigned char do_sustain; /* sustain phase */ -+ unsigned char kbd_scale; /* keyboard scaling */ -+ unsigned char harmonic; /* 4 bits: harmonic and multiplier */ -+ unsigned char scale_level; /* 2 bits: decrease output freq rises */ -+ unsigned char volume; /* 6 bits: volume */ -+ -+ unsigned char attack; /* 4 bits: attack rate */ -+ unsigned char decay; /* 4 bits: decay rate */ -+ unsigned char sustain; /* 4 bits: sustain level */ -+ unsigned char release; /* 4 bits: release rate */ -+ -+ unsigned char feedback; /* 3 bits: feedback for op0 */ -+ unsigned char connection; /* 0 for serial, 1 for parallel */ -+ unsigned char left; /* stereo left */ -+ unsigned char right; /* stereo right */ -+ unsigned char waveform; /* 3 bits: waveform shape */ -+}; -+ -+/* -+ * This describes an FM note by its voice, octave, frequency number (10bit) -+ * and key on/off. -+ */ -+ -+struct snd_dm_fm_note { -+ unsigned char voice; /* 0-17 voice channel */ -+ unsigned char octave; /* 3 bits: what octave to play */ -+ unsigned int fnum; /* 10 bits: frequency number */ -+ unsigned char key_on; /* set for active, clear for silent */ -+}; -+ -+/* -+ * FM parameters that apply globally to all voices, and thus are not "notes" -+ */ -+ -+struct snd_dm_fm_params { -+ unsigned char am_depth; /* amplitude modulation depth (1=hi) */ -+ unsigned char vib_depth; /* vibrato depth (1=hi) */ -+ unsigned char kbd_split; /* keyboard split */ -+ unsigned char rhythm; /* percussion mode select */ -+ -+ /* This block is the percussion instrument data */ -+ unsigned char bass; -+ unsigned char snare; -+ unsigned char tomtom; -+ unsigned char cymbal; -+ unsigned char hihat; -+}; -+ -+/* -+ * FM mode ioctl settings -+ */ -+ -+#define SNDRV_DM_FM_IOCTL_INFO _IOR('H', 0x20, struct snd_dm_fm_info) -+#define SNDRV_DM_FM_IOCTL_RESET _IO ('H', 0x21) -+#define SNDRV_DM_FM_IOCTL_PLAY_NOTE _IOW('H', 0x22, struct snd_dm_fm_note) -+#define SNDRV_DM_FM_IOCTL_SET_VOICE _IOW('H', 0x23, struct snd_dm_fm_voice) -+#define SNDRV_DM_FM_IOCTL_SET_PARAMS _IOW('H', 0x24, struct snd_dm_fm_params) -+#define SNDRV_DM_FM_IOCTL_SET_MODE _IOW('H', 0x25, int) -+/* for OPL3 only */ -+#define SNDRV_DM_FM_IOCTL_SET_CONNECTION _IOW('H', 0x26, int) -+/* SBI patch management */ -+#define SNDRV_DM_FM_IOCTL_CLEAR_PATCHES _IO ('H', 0x40) -+ -+#define SNDRV_DM_FM_OSS_IOCTL_RESET 0x20 -+#define SNDRV_DM_FM_OSS_IOCTL_PLAY_NOTE 0x21 -+#define SNDRV_DM_FM_OSS_IOCTL_SET_VOICE 0x22 -+#define SNDRV_DM_FM_OSS_IOCTL_SET_PARAMS 0x23 -+#define SNDRV_DM_FM_OSS_IOCTL_SET_MODE 0x24 -+#define SNDRV_DM_FM_OSS_IOCTL_SET_OPL 0x25 -+ -+/* -+ * Patch Record - fixed size for write -+ */ -+ -+#define FM_KEY_SBI "SBI\032" -+#define FM_KEY_2OP "2OP\032" -+#define FM_KEY_4OP "4OP\032" -+ -+struct sbi_patch { -+ unsigned char prog; -+ unsigned char bank; -+ char key[4]; -+ char name[25]; -+ char extension[7]; -+ unsigned char data[32]; -+}; -+ -+#endif /* __SOUND_ASOUND_FM_H */ -diff --git a/include/sound/uapi/emu10k1.h b/include/sound/uapi/emu10k1.h -new file mode 100644 -index 00000000..c1150e4d ---- /dev/null -+++ b/include/sound/uapi/emu10k1.h -@@ -0,0 +1,395 @@ -+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ -+/* -+ * Copyright (c) by Jaroslav Kysela , -+ * Creative Labs, Inc. -+ * Definitions for EMU10K1 (SB Live!) chips -+ * -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ * -+ */ -+#ifndef _UAPI__SOUND_EMU10K1_H -+#define _UAPI__SOUND_EMU10K1_H -+ -+/* -+ * ---- FX8010 ---- -+ */ -+ -+#define EMU10K1_CARD_CREATIVE 0x00000000 -+#define EMU10K1_CARD_EMUAPS 0x00000001 -+ -+#define EMU10K1_FX8010_PCM_COUNT 8 -+ -+/* -+ * Following definition is copied from linux/types.h to support compiling -+ * this header file in userspace since they are not generally available for -+ * uapi headers. -+ */ -+#define __EMU10K1_DECLARE_BITMAP(name,bits) \ -+ unsigned long name[(bits) / (sizeof(unsigned long) * 8)] -+ -+/* instruction set */ -+#define iMAC0 0x00 /* R = A + (X * Y >> 31) ; saturation */ -+#define iMAC1 0x01 /* R = A + (-X * Y >> 31) ; saturation */ -+#define iMAC2 0x02 /* R = A + (X * Y >> 31) ; wraparound */ -+#define iMAC3 0x03 /* R = A + (-X * Y >> 31) ; wraparound */ -+#define iMACINT0 0x04 /* R = A + X * Y ; saturation */ -+#define iMACINT1 0x05 /* R = A + X * Y ; wraparound (31-bit) */ -+#define iACC3 0x06 /* R = A + X + Y ; saturation */ -+#define iMACMV 0x07 /* R = A, acc += X * Y >> 31 */ -+#define iANDXOR 0x08 /* R = (A & X) ^ Y */ -+#define iTSTNEG 0x09 /* R = (A >= Y) ? X : ~X */ -+#define iLIMITGE 0x0a /* R = (A >= Y) ? X : Y */ -+#define iLIMITLT 0x0b /* R = (A < Y) ? X : Y */ -+#define iLOG 0x0c /* R = linear_data, A (log_data), X (max_exp), Y (format_word) */ -+#define iEXP 0x0d /* R = log_data, A (linear_data), X (max_exp), Y (format_word) */ -+#define iINTERP 0x0e /* R = A + (X * (Y - A) >> 31) ; saturation */ -+#define iSKIP 0x0f /* R = A (cc_reg), X (count), Y (cc_test) */ -+ -+/* GPRs */ -+#define FXBUS(x) (0x00 + (x)) /* x = 0x00 - 0x0f */ -+#define EXTIN(x) (0x10 + (x)) /* x = 0x00 - 0x0f */ -+#define EXTOUT(x) (0x20 + (x)) /* x = 0x00 - 0x0f physical outs -> FXWC low 16 bits */ -+#define FXBUS2(x) (0x30 + (x)) /* x = 0x00 - 0x0f copies of fx buses for capture -> FXWC high 16 bits */ -+ /* NB: 0x31 and 0x32 are shared with Center/LFE on SB live 5.1 */ -+ -+#define C_00000000 0x40 -+#define C_00000001 0x41 -+#define C_00000002 0x42 -+#define C_00000003 0x43 -+#define C_00000004 0x44 -+#define C_00000008 0x45 -+#define C_00000010 0x46 -+#define C_00000020 0x47 -+#define C_00000100 0x48 -+#define C_00010000 0x49 -+#define C_00080000 0x4a -+#define C_10000000 0x4b -+#define C_20000000 0x4c -+#define C_40000000 0x4d -+#define C_80000000 0x4e -+#define C_7fffffff 0x4f -+#define C_ffffffff 0x50 -+#define C_fffffffe 0x51 -+#define C_c0000000 0x52 -+#define C_4f1bbcdc 0x53 -+#define C_5a7ef9db 0x54 -+#define C_00100000 0x55 /* ?? */ -+#define GPR_ACCU 0x56 /* ACCUM, accumulator */ -+#define GPR_COND 0x57 /* CCR, condition register */ -+#define GPR_NOISE0 0x58 /* noise source */ -+#define GPR_NOISE1 0x59 /* noise source */ -+#define GPR_IRQ 0x5a /* IRQ register */ -+#define GPR_DBAC 0x5b /* TRAM Delay Base Address Counter */ -+#define GPR(x) (FXGPREGBASE + (x)) /* free GPRs: x = 0x00 - 0xff */ -+#define ITRAM_DATA(x) (TANKMEMDATAREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */ -+#define ETRAM_DATA(x) (TANKMEMDATAREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */ -+#define ITRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */ -+#define ETRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */ -+ -+#define A_ITRAM_DATA(x) (TANKMEMDATAREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */ -+#define A_ETRAM_DATA(x) (TANKMEMDATAREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */ -+#define A_ITRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */ -+#define A_ETRAM_ADDR(x) (TANKMEMADDRREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */ -+#define A_ITRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */ -+#define A_ETRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */ -+ -+#define A_FXBUS(x) (0x00 + (x)) /* x = 0x00 - 0x3f FX buses */ -+#define A_EXTIN(x) (0x40 + (x)) /* x = 0x00 - 0x0f physical ins */ -+#define A_P16VIN(x) (0x50 + (x)) /* x = 0x00 - 0x0f p16v ins (A2 only) "EMU32 inputs" */ -+#define A_EXTOUT(x) (0x60 + (x)) /* x = 0x00 - 0x1f physical outs -> A_FXWC1 0x79-7f unknown */ -+#define A_FXBUS2(x) (0x80 + (x)) /* x = 0x00 - 0x1f extra outs used for EFX capture -> A_FXWC2 */ -+#define A_EMU32OUTH(x) (0xa0 + (x)) /* x = 0x00 - 0x0f "EMU32_OUT_10 - _1F" - ??? */ -+#define A_EMU32OUTL(x) (0xb0 + (x)) /* x = 0x00 - 0x0f "EMU32_OUT_1 - _F" - ??? */ -+#define A3_EMU32IN(x) (0x160 + (x)) /* x = 0x00 - 0x3f "EMU32_IN_00 - _3F" - Only when .device = 0x0008 */ -+#define A3_EMU32OUT(x) (0x1E0 + (x)) /* x = 0x00 - 0x0f "EMU32_OUT_00 - _3F" - Only when .device = 0x0008 */ -+#define A_GPR(x) (A_FXGPREGBASE + (x)) -+ -+/* cc_reg constants */ -+#define CC_REG_NORMALIZED C_00000001 -+#define CC_REG_BORROW C_00000002 -+#define CC_REG_MINUS C_00000004 -+#define CC_REG_ZERO C_00000008 -+#define CC_REG_SATURATE C_00000010 -+#define CC_REG_NONZERO C_00000100 -+ -+/* FX buses */ -+#define FXBUS_PCM_LEFT 0x00 -+#define FXBUS_PCM_RIGHT 0x01 -+#define FXBUS_PCM_LEFT_REAR 0x02 -+#define FXBUS_PCM_RIGHT_REAR 0x03 -+#define FXBUS_MIDI_LEFT 0x04 -+#define FXBUS_MIDI_RIGHT 0x05 -+#define FXBUS_PCM_CENTER 0x06 -+#define FXBUS_PCM_LFE 0x07 -+#define FXBUS_PCM_LEFT_FRONT 0x08 -+#define FXBUS_PCM_RIGHT_FRONT 0x09 -+#define FXBUS_MIDI_REVERB 0x0c -+#define FXBUS_MIDI_CHORUS 0x0d -+#define FXBUS_PCM_LEFT_SIDE 0x0e -+#define FXBUS_PCM_RIGHT_SIDE 0x0f -+#define FXBUS_PT_LEFT 0x14 -+#define FXBUS_PT_RIGHT 0x15 -+ -+/* Inputs */ -+#define EXTIN_AC97_L 0x00 /* AC'97 capture channel - left */ -+#define EXTIN_AC97_R 0x01 /* AC'97 capture channel - right */ -+#define EXTIN_SPDIF_CD_L 0x02 /* internal S/PDIF CD - onboard - left */ -+#define EXTIN_SPDIF_CD_R 0x03 /* internal S/PDIF CD - onboard - right */ -+#define EXTIN_ZOOM_L 0x04 /* Zoom Video I2S - left */ -+#define EXTIN_ZOOM_R 0x05 /* Zoom Video I2S - right */ -+#define EXTIN_TOSLINK_L 0x06 /* LiveDrive - TOSLink Optical - left */ -+#define EXTIN_TOSLINK_R 0x07 /* LiveDrive - TOSLink Optical - right */ -+#define EXTIN_LINE1_L 0x08 /* LiveDrive - Line/Mic 1 - left */ -+#define EXTIN_LINE1_R 0x09 /* LiveDrive - Line/Mic 1 - right */ -+#define EXTIN_COAX_SPDIF_L 0x0a /* LiveDrive - Coaxial S/PDIF - left */ -+#define EXTIN_COAX_SPDIF_R 0x0b /* LiveDrive - Coaxial S/PDIF - right */ -+#define EXTIN_LINE2_L 0x0c /* LiveDrive - Line/Mic 2 - left */ -+#define EXTIN_LINE2_R 0x0d /* LiveDrive - Line/Mic 2 - right */ -+ -+/* Outputs */ -+#define EXTOUT_AC97_L 0x00 /* AC'97 playback channel - left */ -+#define EXTOUT_AC97_R 0x01 /* AC'97 playback channel - right */ -+#define EXTOUT_TOSLINK_L 0x02 /* LiveDrive - TOSLink Optical - left */ -+#define EXTOUT_TOSLINK_R 0x03 /* LiveDrive - TOSLink Optical - right */ -+#define EXTOUT_AC97_CENTER 0x04 /* SB Live 5.1 - center */ -+#define EXTOUT_AC97_LFE 0x05 /* SB Live 5.1 - LFE */ -+#define EXTOUT_HEADPHONE_L 0x06 /* LiveDrive - Headphone - left */ -+#define EXTOUT_HEADPHONE_R 0x07 /* LiveDrive - Headphone - right */ -+#define EXTOUT_REAR_L 0x08 /* Rear channel - left */ -+#define EXTOUT_REAR_R 0x09 /* Rear channel - right */ -+#define EXTOUT_ADC_CAP_L 0x0a /* ADC Capture buffer - left */ -+#define EXTOUT_ADC_CAP_R 0x0b /* ADC Capture buffer - right */ -+#define EXTOUT_MIC_CAP 0x0c /* MIC Capture buffer */ -+#define EXTOUT_AC97_REAR_L 0x0d /* SB Live 5.1 (c) 2003 - Rear Left */ -+#define EXTOUT_AC97_REAR_R 0x0e /* SB Live 5.1 (c) 2003 - Rear Right */ -+#define EXTOUT_ACENTER 0x11 /* Analog Center */ -+#define EXTOUT_ALFE 0x12 /* Analog LFE */ -+ -+/* Audigy Inputs */ -+#define A_EXTIN_AC97_L 0x00 /* AC'97 capture channel - left */ -+#define A_EXTIN_AC97_R 0x01 /* AC'97 capture channel - right */ -+#define A_EXTIN_SPDIF_CD_L 0x02 /* digital CD left */ -+#define A_EXTIN_SPDIF_CD_R 0x03 /* digital CD left */ -+#define A_EXTIN_OPT_SPDIF_L 0x04 /* audigy drive Optical SPDIF - left */ -+#define A_EXTIN_OPT_SPDIF_R 0x05 /* right */ -+#define A_EXTIN_LINE2_L 0x08 /* audigy drive line2/mic2 - left */ -+#define A_EXTIN_LINE2_R 0x09 /* right */ -+#define A_EXTIN_ADC_L 0x0a /* Philips ADC - left */ -+#define A_EXTIN_ADC_R 0x0b /* right */ -+#define A_EXTIN_AUX2_L 0x0c /* audigy drive aux2 - left */ -+#define A_EXTIN_AUX2_R 0x0d /* - right */ -+ -+/* Audigiy Outputs */ -+#define A_EXTOUT_FRONT_L 0x00 /* digital front left */ -+#define A_EXTOUT_FRONT_R 0x01 /* right */ -+#define A_EXTOUT_CENTER 0x02 /* digital front center */ -+#define A_EXTOUT_LFE 0x03 /* digital front lfe */ -+#define A_EXTOUT_HEADPHONE_L 0x04 /* headphone audigy drive left */ -+#define A_EXTOUT_HEADPHONE_R 0x05 /* right */ -+#define A_EXTOUT_REAR_L 0x06 /* digital rear left */ -+#define A_EXTOUT_REAR_R 0x07 /* right */ -+#define A_EXTOUT_AFRONT_L 0x08 /* analog front left */ -+#define A_EXTOUT_AFRONT_R 0x09 /* right */ -+#define A_EXTOUT_ACENTER 0x0a /* analog center */ -+#define A_EXTOUT_ALFE 0x0b /* analog LFE */ -+#define A_EXTOUT_ASIDE_L 0x0c /* analog side left - Audigy 2 ZS */ -+#define A_EXTOUT_ASIDE_R 0x0d /* right - Audigy 2 ZS */ -+#define A_EXTOUT_AREAR_L 0x0e /* analog rear left */ -+#define A_EXTOUT_AREAR_R 0x0f /* right */ -+#define A_EXTOUT_AC97_L 0x10 /* AC97 left (front) */ -+#define A_EXTOUT_AC97_R 0x11 /* right */ -+#define A_EXTOUT_ADC_CAP_L 0x16 /* ADC capture buffer left */ -+#define A_EXTOUT_ADC_CAP_R 0x17 /* right */ -+#define A_EXTOUT_MIC_CAP 0x18 /* Mic capture buffer */ -+ -+/* Audigy constants */ -+#define A_C_00000000 0xc0 -+#define A_C_00000001 0xc1 -+#define A_C_00000002 0xc2 -+#define A_C_00000003 0xc3 -+#define A_C_00000004 0xc4 -+#define A_C_00000008 0xc5 -+#define A_C_00000010 0xc6 -+#define A_C_00000020 0xc7 -+#define A_C_00000100 0xc8 -+#define A_C_00010000 0xc9 -+#define A_C_00000800 0xca -+#define A_C_10000000 0xcb -+#define A_C_20000000 0xcc -+#define A_C_40000000 0xcd -+#define A_C_80000000 0xce -+#define A_C_7fffffff 0xcf -+#define A_C_ffffffff 0xd0 -+#define A_C_fffffffe 0xd1 -+#define A_C_c0000000 0xd2 -+#define A_C_4f1bbcdc 0xd3 -+#define A_C_5a7ef9db 0xd4 -+#define A_C_00100000 0xd5 -+#define A_GPR_ACCU 0xd6 /* ACCUM, accumulator */ -+#define A_GPR_COND 0xd7 /* CCR, condition register */ -+#define A_GPR_NOISE0 0xd8 /* noise source */ -+#define A_GPR_NOISE1 0xd9 /* noise source */ -+#define A_GPR_IRQ 0xda /* IRQ register */ -+#define A_GPR_DBAC 0xdb /* TRAM Delay Base Address Counter - internal */ -+#define A_GPR_DBACE 0xde /* TRAM Delay Base Address Counter - external */ -+ -+/* definitions for debug register */ -+#define EMU10K1_DBG_ZC 0x80000000 /* zero tram counter */ -+#define EMU10K1_DBG_SATURATION_OCCURED 0x02000000 /* saturation control */ -+#define EMU10K1_DBG_SATURATION_ADDR 0x01ff0000 /* saturation address */ -+#define EMU10K1_DBG_SINGLE_STEP 0x00008000 /* single step mode */ -+#define EMU10K1_DBG_STEP 0x00004000 /* start single step */ -+#define EMU10K1_DBG_CONDITION_CODE 0x00003e00 /* condition code */ -+#define EMU10K1_DBG_SINGLE_STEP_ADDR 0x000001ff /* single step address */ -+ -+/* tank memory address line */ -+#ifndef __KERNEL__ -+#define TANKMEMADDRREG_ADDR_MASK 0x000fffff /* 20 bit tank address field */ -+#define TANKMEMADDRREG_CLEAR 0x00800000 /* Clear tank memory */ -+#define TANKMEMADDRREG_ALIGN 0x00400000 /* Align read or write relative to tank access */ -+#define TANKMEMADDRREG_WRITE 0x00200000 /* Write to tank memory */ -+#define TANKMEMADDRREG_READ 0x00100000 /* Read from tank memory */ -+#endif -+ -+struct snd_emu10k1_fx8010_info { -+ unsigned int internal_tram_size; /* in samples */ -+ unsigned int external_tram_size; /* in samples */ -+ char fxbus_names[16][32]; /* names of FXBUSes */ -+ char extin_names[16][32]; /* names of external inputs */ -+ char extout_names[32][32]; /* names of external outputs */ -+ unsigned int gpr_controls; /* count of GPR controls */ -+}; -+ -+#define EMU10K1_GPR_TRANSLATION_NONE 0 -+#define EMU10K1_GPR_TRANSLATION_TABLE100 1 -+#define EMU10K1_GPR_TRANSLATION_BASS 2 -+#define EMU10K1_GPR_TRANSLATION_TREBLE 3 -+#define EMU10K1_GPR_TRANSLATION_ONOFF 4 -+ -+enum emu10k1_ctl_elem_iface { -+ EMU10K1_CTL_ELEM_IFACE_MIXER = 2, /* virtual mixer device */ -+ EMU10K1_CTL_ELEM_IFACE_PCM = 3, /* PCM device */ -+}; -+ -+struct emu10k1_ctl_elem_id { -+ unsigned int pad; /* don't use */ -+ int iface; /* interface identifier */ -+ unsigned int device; /* device/client number */ -+ unsigned int subdevice; /* subdevice (substream) number */ -+ unsigned char name[44]; /* ASCII name of item */ -+ unsigned int index; /* index of item */ -+}; -+ -+struct snd_emu10k1_fx8010_control_gpr { -+ struct emu10k1_ctl_elem_id id; /* full control ID definition */ -+ unsigned int vcount; /* visible count */ -+ unsigned int count; /* count of GPR (1..16) */ -+ unsigned short gpr[32]; /* GPR number(s) */ -+ unsigned int value[32]; /* initial values */ -+ unsigned int min; /* minimum range */ -+ unsigned int max; /* maximum range */ -+ unsigned int translation; /* translation type (EMU10K1_GPR_TRANSLATION*) */ -+ const unsigned int *tlv; -+}; -+ -+/* old ABI without TLV support */ -+struct snd_emu10k1_fx8010_control_old_gpr { -+ struct emu10k1_ctl_elem_id id; -+ unsigned int vcount; -+ unsigned int count; -+ unsigned short gpr[32]; -+ unsigned int value[32]; -+ unsigned int min; -+ unsigned int max; -+ unsigned int translation; -+}; -+ -+struct snd_emu10k1_fx8010_code { -+ char name[128]; -+ -+ __EMU10K1_DECLARE_BITMAP(gpr_valid, 0x200); /* bitmask of valid initializers */ -+ __u32 *gpr_map; /* initializers */ -+ -+ unsigned int gpr_add_control_count; /* count of GPR controls to add/replace */ -+ struct snd_emu10k1_fx8010_control_gpr *gpr_add_controls; /* GPR controls to add/replace */ -+ -+ unsigned int gpr_del_control_count; /* count of GPR controls to remove */ -+ struct emu10k1_ctl_elem_id *gpr_del_controls; /* IDs of GPR controls to remove */ -+ -+ unsigned int gpr_list_control_count; /* count of GPR controls to list */ -+ unsigned int gpr_list_control_total; /* total count of GPR controls */ -+ struct snd_emu10k1_fx8010_control_gpr *gpr_list_controls; /* listed GPR controls */ -+ -+ __EMU10K1_DECLARE_BITMAP(tram_valid, 0x100); /* bitmask of valid initializers */ -+ __u32 *tram_data_map; /* data initializers */ -+ __u32 *tram_addr_map; /* map initializers */ -+ -+ __EMU10K1_DECLARE_BITMAP(code_valid, 1024); /* bitmask of valid instructions */ -+ __u32 *code; /* one instruction - 64 bits */ -+}; -+ -+struct snd_emu10k1_fx8010_tram { -+ unsigned int address; /* 31.bit == 1 -> external TRAM */ -+ unsigned int size; /* size in samples (4 bytes) */ -+ unsigned int *samples; /* pointer to samples (20-bit) */ -+ /* NULL->clear memory */ -+}; -+ -+struct snd_emu10k1_fx8010_pcm_rec { -+ unsigned int substream; /* substream number */ -+ unsigned int res1; /* reserved */ -+ unsigned int channels; /* 16-bit channels count, zero = remove this substream */ -+ unsigned int tram_start; /* ring buffer position in TRAM (in samples) */ -+ unsigned int buffer_size; /* count of buffered samples */ -+ unsigned short gpr_size; /* GPR containing size of ringbuffer in samples (host) */ -+ unsigned short gpr_ptr; /* GPR containing current pointer in the ring buffer (host = reset, FX8010) */ -+ unsigned short gpr_count; /* GPR containing count of samples between two interrupts (host) */ -+ unsigned short gpr_tmpcount; /* GPR containing current count of samples to interrupt (host = set, FX8010) */ -+ unsigned short gpr_trigger; /* GPR containing trigger (activate) information (host) */ -+ unsigned short gpr_running; /* GPR containing info if PCM is running (FX8010) */ -+ unsigned char pad; /* reserved */ -+ unsigned char etram[32]; /* external TRAM address & data (one per channel) */ -+ unsigned int res2; /* reserved */ -+}; -+ -+#define SNDRV_EMU10K1_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 1) -+ -+#define SNDRV_EMU10K1_IOCTL_INFO _IOR ('H', 0x10, struct snd_emu10k1_fx8010_info) -+#define SNDRV_EMU10K1_IOCTL_CODE_POKE _IOW ('H', 0x11, struct snd_emu10k1_fx8010_code) -+#define SNDRV_EMU10K1_IOCTL_CODE_PEEK _IOWR('H', 0x12, struct snd_emu10k1_fx8010_code) -+#define SNDRV_EMU10K1_IOCTL_TRAM_SETUP _IOW ('H', 0x20, int) -+#define SNDRV_EMU10K1_IOCTL_TRAM_POKE _IOW ('H', 0x21, struct snd_emu10k1_fx8010_tram) -+#define SNDRV_EMU10K1_IOCTL_TRAM_PEEK _IOWR('H', 0x22, struct snd_emu10k1_fx8010_tram) -+#define SNDRV_EMU10K1_IOCTL_PCM_POKE _IOW ('H', 0x30, struct snd_emu10k1_fx8010_pcm_rec) -+#define SNDRV_EMU10K1_IOCTL_PCM_PEEK _IOWR('H', 0x31, struct snd_emu10k1_fx8010_pcm_rec) -+#define SNDRV_EMU10K1_IOCTL_PVERSION _IOR ('H', 0x40, int) -+#define SNDRV_EMU10K1_IOCTL_STOP _IO ('H', 0x80) -+#define SNDRV_EMU10K1_IOCTL_CONTINUE _IO ('H', 0x81) -+#define SNDRV_EMU10K1_IOCTL_ZERO_TRAM_COUNTER _IO ('H', 0x82) -+#define SNDRV_EMU10K1_IOCTL_SINGLE_STEP _IOW ('H', 0x83, int) -+#define SNDRV_EMU10K1_IOCTL_DBG_READ _IOR ('H', 0x84, int) -+ -+#ifndef __KERNEL__ -+/* typedefs for compatibility to user-space */ -+typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t; -+typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t; -+typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t; -+typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t; -+typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t; -+typedef struct emu10k1_ctl_elem_id emu10k1_ctl_elem_id_t; -+#endif -+ -+#endif /* _UAPI__SOUND_EMU10K1_H */ -diff --git a/include/sound/uapi/hdsp.h b/include/sound/uapi/hdsp.h -new file mode 100644 -index 00000000..88c92a3f ---- /dev/null -+++ b/include/sound/uapi/hdsp.h -@@ -0,0 +1,109 @@ -+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ -+#ifndef __SOUND_HDSP_H -+#define __SOUND_HDSP_H -+ -+/* -+ * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ */ -+ -+#define HDSP_MATRIX_MIXER_SIZE 2048 -+ -+enum HDSP_IO_Type { -+ Digiface, -+ Multiface, -+ H9652, -+ H9632, -+ RPM, -+ Undefined, -+}; -+ -+struct hdsp_peak_rms { -+ __u32 input_peaks[26]; -+ __u32 playback_peaks[26]; -+ __u32 output_peaks[28]; -+ __u64 input_rms[26]; -+ __u64 playback_rms[26]; -+ /* These are only used for H96xx cards */ -+ __u64 output_rms[26]; -+}; -+ -+#define SNDRV_HDSP_IOCTL_GET_PEAK_RMS _IOR('H', 0x40, struct hdsp_peak_rms) -+ -+struct hdsp_config_info { -+ unsigned char pref_sync_ref; -+ unsigned char wordclock_sync_check; -+ unsigned char spdif_sync_check; -+ unsigned char adatsync_sync_check; -+ unsigned char adat_sync_check[3]; -+ unsigned char spdif_in; -+ unsigned char spdif_out; -+ unsigned char spdif_professional; -+ unsigned char spdif_emphasis; -+ unsigned char spdif_nonaudio; -+ unsigned int spdif_sample_rate; -+ unsigned int system_sample_rate; -+ unsigned int autosync_sample_rate; -+ unsigned char system_clock_mode; -+ unsigned char clock_source; -+ unsigned char autosync_ref; -+ unsigned char line_out; -+ unsigned char passthru; -+ unsigned char da_gain; -+ unsigned char ad_gain; -+ unsigned char phone_gain; -+ unsigned char xlr_breakout_cable; -+ unsigned char analog_extension_board; -+}; -+ -+#define SNDRV_HDSP_IOCTL_GET_CONFIG_INFO _IOR('H', 0x41, struct hdsp_config_info) -+ -+struct hdsp_firmware { -+ void *firmware_data; /* 24413 x 4 bytes */ -+}; -+ -+#define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE _IOW('H', 0x42, struct hdsp_firmware) -+ -+struct hdsp_version { -+ enum HDSP_IO_Type io_type; -+ unsigned short firmware_rev; -+}; -+ -+#define SNDRV_HDSP_IOCTL_GET_VERSION _IOR('H', 0x43, struct hdsp_version) -+ -+struct hdsp_mixer { -+ unsigned short matrix[HDSP_MATRIX_MIXER_SIZE]; -+}; -+ -+#define SNDRV_HDSP_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdsp_mixer) -+ -+struct hdsp_9632_aeb { -+ int aebi; -+ int aebo; -+}; -+ -+#define SNDRV_HDSP_IOCTL_GET_9632_AEB _IOR('H', 0x45, struct hdsp_9632_aeb) -+ -+/* typedefs for compatibility to user-space */ -+typedef enum HDSP_IO_Type HDSP_IO_Type; -+typedef struct hdsp_peak_rms hdsp_peak_rms_t; -+typedef struct hdsp_config_info hdsp_config_info_t; -+typedef struct hdsp_firmware hdsp_firmware_t; -+typedef struct hdsp_version hdsp_version_t; -+typedef struct hdsp_mixer hdsp_mixer_t; -+typedef struct hdsp_9632_aeb hdsp_9632_aeb_t; -+ -+#endif /* __SOUND_HDSP_H */ -diff --git a/include/sound/uapi/hdspm.h b/include/sound/uapi/hdspm.h -new file mode 100644 -index 00000000..2d91f90e ---- /dev/null -+++ b/include/sound/uapi/hdspm.h -@@ -0,0 +1,230 @@ -+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ -+#ifndef __SOUND_HDSPM_H -+#define __SOUND_HDSPM_H -+/* -+ * Copyright (C) 2003 Winfried Ritsch (IEM) -+ * based on hdsp.h from Thomas Charbonnel (thomas@undata.org) -+ * -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ */ -+ -+/* Maximum channels is 64 even on 56Mode you have 64playbacks to matrix */ -+#define HDSPM_MAX_CHANNELS 64 -+ -+enum hdspm_io_type { -+ MADI, -+ MADIface, -+ AIO, -+ AES32, -+ RayDAT -+}; -+ -+enum hdspm_speed { -+ ss, -+ ds, -+ qs -+}; -+ -+/* -------------------- IOCTL Peak/RMS Meters -------------------- */ -+ -+struct hdspm_peak_rms { -+ __u32 input_peaks[64]; -+ __u32 playback_peaks[64]; -+ __u32 output_peaks[64]; -+ -+ __u64 input_rms[64]; -+ __u64 playback_rms[64]; -+ __u64 output_rms[64]; -+ -+ __u8 speed; /* enum {ss, ds, qs} */ -+ int status2; -+}; -+ -+#define SNDRV_HDSPM_IOCTL_GET_PEAK_RMS \ -+ _IOR('H', 0x42, struct hdspm_peak_rms) -+ -+/* ------------ CONFIG block IOCTL ---------------------- */ -+ -+struct hdspm_config { -+ unsigned char pref_sync_ref; -+ unsigned char wordclock_sync_check; -+ unsigned char madi_sync_check; -+ unsigned int system_sample_rate; -+ unsigned int autosync_sample_rate; -+ unsigned char system_clock_mode; -+ unsigned char clock_source; -+ unsigned char autosync_ref; -+ unsigned char line_out; -+ unsigned int passthru; -+ unsigned int analog_out; -+}; -+ -+#define SNDRV_HDSPM_IOCTL_GET_CONFIG \ -+ _IOR('H', 0x41, struct hdspm_config) -+ -+/* -+ * If there's a TCO (TimeCode Option) board installed, -+ * there are further options and status data available. -+ * The hdspm_ltc structure contains the current SMPTE -+ * timecode and some status information and can be -+ * obtained via SNDRV_HDSPM_IOCTL_GET_LTC or in the -+ * hdspm_status struct. -+ */ -+ -+enum hdspm_ltc_format { -+ format_invalid, -+ fps_24, -+ fps_25, -+ fps_2997, -+ fps_30 -+}; -+ -+enum hdspm_ltc_frame { -+ frame_invalid, -+ drop_frame, -+ full_frame -+}; -+ -+enum hdspm_ltc_input_format { -+ ntsc, -+ pal, -+ no_video -+}; -+ -+struct hdspm_ltc { -+ unsigned int ltc; -+ -+ enum hdspm_ltc_format format; -+ enum hdspm_ltc_frame frame; -+ enum hdspm_ltc_input_format input_format; -+}; -+ -+#define SNDRV_HDSPM_IOCTL_GET_LTC _IOR('H', 0x46, struct hdspm_ltc) -+ -+/* -+ * The status data reflects the device's current state -+ * as determined by the card's configuration and -+ * connection status. -+ */ -+ -+enum hdspm_sync { -+ hdspm_sync_no_lock = 0, -+ hdspm_sync_lock = 1, -+ hdspm_sync_sync = 2 -+}; -+ -+enum hdspm_madi_input { -+ hdspm_input_optical = 0, -+ hdspm_input_coax = 1 -+}; -+ -+enum hdspm_madi_channel_format { -+ hdspm_format_ch_64 = 0, -+ hdspm_format_ch_56 = 1 -+}; -+ -+enum hdspm_madi_frame_format { -+ hdspm_frame_48 = 0, -+ hdspm_frame_96 = 1 -+}; -+ -+enum hdspm_syncsource { -+ syncsource_wc = 0, -+ syncsource_madi = 1, -+ syncsource_tco = 2, -+ syncsource_sync = 3, -+ syncsource_none = 4 -+}; -+ -+struct hdspm_status { -+ __u8 card_type; /* enum hdspm_io_type */ -+ enum hdspm_syncsource autosync_source; -+ -+ __u64 card_clock; -+ __u32 master_period; -+ -+ union { -+ struct { -+ __u8 sync_wc; /* enum hdspm_sync */ -+ __u8 sync_madi; /* enum hdspm_sync */ -+ __u8 sync_tco; /* enum hdspm_sync */ -+ __u8 sync_in; /* enum hdspm_sync */ -+ __u8 madi_input; /* enum hdspm_madi_input */ -+ __u8 channel_format; /* enum hdspm_madi_channel_format */ -+ __u8 frame_format; /* enum hdspm_madi_frame_format */ -+ } madi; -+ } card_specific; -+}; -+ -+#define SNDRV_HDSPM_IOCTL_GET_STATUS \ -+ _IOR('H', 0x47, struct hdspm_status) -+ -+/* -+ * Get information about the card and its add-ons. -+ */ -+ -+#define HDSPM_ADDON_TCO 1 -+ -+struct hdspm_version { -+ __u8 card_type; /* enum hdspm_io_type */ -+ char cardname[20]; -+ unsigned int serial; -+ unsigned short firmware_rev; -+ int addons; -+}; -+ -+#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x48, struct hdspm_version) -+ -+/* ------------- get Matrix Mixer IOCTL --------------- */ -+ -+/* MADI mixer: 64inputs+64playback in 64outputs = 8192 => *4Byte = -+ * 32768 Bytes -+ */ -+ -+/* organisation is 64 channelfader in a continuous memory block */ -+/* equivalent to hardware definition, maybe for future feature of mmap of -+ * them -+ */ -+/* each of 64 outputs has 64 infader and 64 outfader: -+ Ins to Outs mixer[out].in[in], Outstreams to Outs mixer[out].pb[pb] */ -+ -+#define HDSPM_MIXER_CHANNELS HDSPM_MAX_CHANNELS -+ -+struct hdspm_channelfader { -+ unsigned int in[HDSPM_MIXER_CHANNELS]; -+ unsigned int pb[HDSPM_MIXER_CHANNELS]; -+}; -+ -+struct hdspm_mixer { -+ struct hdspm_channelfader ch[HDSPM_MIXER_CHANNELS]; -+}; -+ -+struct hdspm_mixer_ioctl { -+ struct hdspm_mixer *mixer; -+}; -+ -+/* use indirect access due to the limit of ioctl bit size */ -+#define SNDRV_HDSPM_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdspm_mixer_ioctl) -+ -+/* typedefs for compatibility to user-space */ -+typedef struct hdspm_peak_rms hdspm_peak_rms_t; -+typedef struct hdspm_config_info hdspm_config_info_t; -+typedef struct hdspm_version hdspm_version_t; -+typedef struct hdspm_channelfader snd_hdspm_channelfader_t; -+typedef struct hdspm_mixer hdspm_mixer_t; -+ -+ -+#endif -diff --git a/include/sound/uapi/sb16_csp.h b/include/sound/uapi/sb16_csp.h -new file mode 100644 -index 00000000..e6485148 ---- /dev/null -+++ b/include/sound/uapi/sb16_csp.h -@@ -0,0 +1,123 @@ -+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ -+/* -+ * Copyright (c) 1999 by Uros Bizjak -+ * Takashi Iwai -+ * -+ * SB16ASP/AWE32 CSP control -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ * -+ */ -+#ifndef _UAPI__SOUND_SB16_CSP_H -+#define _UAPI__SOUND_SB16_CSP_H -+ -+ -+/* CSP modes */ -+#define SNDRV_SB_CSP_MODE_NONE 0x00 -+#define SNDRV_SB_CSP_MODE_DSP_READ 0x01 /* Record from DSP */ -+#define SNDRV_SB_CSP_MODE_DSP_WRITE 0x02 /* Play to DSP */ -+#define SNDRV_SB_CSP_MODE_QSOUND 0x04 /* QSound */ -+ -+/* CSP load flags */ -+#define SNDRV_SB_CSP_LOAD_FROMUSER 0x01 -+#define SNDRV_SB_CSP_LOAD_INITBLOCK 0x02 -+ -+/* CSP sample width */ -+#define SNDRV_SB_CSP_SAMPLE_8BIT 0x01 -+#define SNDRV_SB_CSP_SAMPLE_16BIT 0x02 -+ -+/* CSP channels */ -+#define SNDRV_SB_CSP_MONO 0x01 -+#define SNDRV_SB_CSP_STEREO 0x02 -+ -+/* CSP rates */ -+#define SNDRV_SB_CSP_RATE_8000 0x01 -+#define SNDRV_SB_CSP_RATE_11025 0x02 -+#define SNDRV_SB_CSP_RATE_22050 0x04 -+#define SNDRV_SB_CSP_RATE_44100 0x08 -+#define SNDRV_SB_CSP_RATE_ALL 0x0f -+ -+/* CSP running state */ -+#define SNDRV_SB_CSP_ST_IDLE 0x00 -+#define SNDRV_SB_CSP_ST_LOADED 0x01 -+#define SNDRV_SB_CSP_ST_RUNNING 0x02 -+#define SNDRV_SB_CSP_ST_PAUSED 0x04 -+#define SNDRV_SB_CSP_ST_AUTO 0x08 -+#define SNDRV_SB_CSP_ST_QSOUND 0x10 -+ -+/* maximum QSound value (180 degrees right) */ -+#define SNDRV_SB_CSP_QSOUND_MAX_RIGHT 0x20 -+ -+/* maximum microcode RIFF file size */ -+#define SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE 0x3000 -+ -+/* microcode header */ -+struct snd_sb_csp_mc_header { -+ char codec_name[16]; /* id name of codec */ -+ unsigned short func_req; /* requested function */ -+}; -+ -+/* microcode to be loaded */ -+struct snd_sb_csp_microcode { -+ struct snd_sb_csp_mc_header info; -+ unsigned char data[SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE]; -+}; -+ -+/* start CSP with sample_width in mono/stereo */ -+struct snd_sb_csp_start { -+ int sample_width; /* sample width, look above */ -+ int channels; /* channels, look above */ -+}; -+ -+/* CSP information */ -+struct snd_sb_csp_info { -+ char codec_name[16]; /* id name of codec */ -+ unsigned short func_nr; /* function number */ -+ unsigned int acc_format; /* accepted PCM formats */ -+ unsigned short acc_channels; /* accepted channels */ -+ unsigned short acc_width; /* accepted sample width */ -+ unsigned short acc_rates; /* accepted sample rates */ -+ unsigned short csp_mode; /* CSP mode, see above */ -+ unsigned short run_channels; /* current channels */ -+ unsigned short run_width; /* current sample width */ -+ unsigned short version; /* version id: 0x10 - 0x1f */ -+ unsigned short state; /* state bits */ -+}; -+ -+/* HWDEP controls */ -+/* get CSP information */ -+#define SNDRV_SB_CSP_IOCTL_INFO _IOR('H', 0x10, struct snd_sb_csp_info) -+/* load microcode to CSP */ -+/* NOTE: struct snd_sb_csp_microcode overflows the max size (13 bits) -+ * defined for some architectures like MIPS, and it leads to build errors. -+ * (x86 and co have 14-bit size, thus it's valid, though.) -+ * As a workaround for skipping the size-limit check, here we don't use the -+ * normal _IOW() macro but _IOC() with the manual argument. -+ */ -+#define SNDRV_SB_CSP_IOCTL_LOAD_CODE \ -+ _IOC(_IOC_WRITE, 'H', 0x11, sizeof(struct snd_sb_csp_microcode)) -+/* unload microcode from CSP */ -+#define SNDRV_SB_CSP_IOCTL_UNLOAD_CODE _IO('H', 0x12) -+/* start CSP */ -+#define SNDRV_SB_CSP_IOCTL_START _IOW('H', 0x13, struct snd_sb_csp_start) -+/* stop CSP */ -+#define SNDRV_SB_CSP_IOCTL_STOP _IO('H', 0x14) -+/* pause CSP and DMA transfer */ -+#define SNDRV_SB_CSP_IOCTL_PAUSE _IO('H', 0x15) -+/* restart CSP and DMA transfer */ -+#define SNDRV_SB_CSP_IOCTL_RESTART _IO('H', 0x16) -+ -+ -+#endif /* _UAPI__SOUND_SB16_CSP_H */ -diff --git a/include/sound/uapi/sscape_ioctl.h b/include/sound/uapi/sscape_ioctl.h -new file mode 100644 -index 00000000..c6653ebf ---- /dev/null -+++ b/include/sound/uapi/sscape_ioctl.h -@@ -0,0 +1,21 @@ -+#ifndef SSCAPE_IOCTL_H -+#define SSCAPE_IOCTL_H -+ -+ -+struct sscape_bootblock -+{ -+ unsigned char code[256]; -+ unsigned version; -+}; -+ -+#define SSCAPE_MICROCODE_SIZE 65536 -+ -+struct sscape_microcode -+{ -+ unsigned char *code; -+}; -+ -+#define SND_SSCAPE_LOAD_BOOTB _IOWR('P', 100, struct sscape_bootblock) -+#define SND_SSCAPE_LOAD_MCODE _IOW ('P', 101, struct sscape_microcode) -+ -+#endif -diff --git a/include/sound/uapi/tlv.h b/include/sound/uapi/tlv.h -new file mode 100644 -index 00000000..7d6d65f6 ---- /dev/null -+++ b/include/sound/uapi/tlv.h -@@ -0,0 +1,117 @@ -+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ -+/* -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ */ -+ -+#ifndef __UAPI_SOUND_TLV_H -+#define __UAPI_SOUND_TLV_H -+ -+#define SNDRV_CTL_TLVT_CONTAINER 0 /* one level down - group of TLVs */ -+#define SNDRV_CTL_TLVT_DB_SCALE 1 /* dB scale */ -+#define SNDRV_CTL_TLVT_DB_LINEAR 2 /* linear volume */ -+#define SNDRV_CTL_TLVT_DB_RANGE 3 /* dB range container */ -+#define SNDRV_CTL_TLVT_DB_MINMAX 4 /* dB scale with min/max */ -+#define SNDRV_CTL_TLVT_DB_MINMAX_MUTE 5 /* dB scale with min/max with mute */ -+ -+/* -+ * channel-mapping TLV items -+ * TLV length must match with num_channels -+ */ -+#define SNDRV_CTL_TLVT_CHMAP_FIXED 0x101 /* fixed channel position */ -+#define SNDRV_CTL_TLVT_CHMAP_VAR 0x102 /* channels freely swappable */ -+#define SNDRV_CTL_TLVT_CHMAP_PAIRED 0x103 /* pair-wise swappable */ -+ -+/* -+ * TLV structure is right behind the struct snd_ctl_tlv: -+ * unsigned int type - see SNDRV_CTL_TLVT_* -+ * unsigned int length -+ * .... data aligned to sizeof(unsigned int), use -+ * block_length = (length + (sizeof(unsigned int) - 1)) & -+ * ~(sizeof(unsigned int) - 1)) .... -+ */ -+#define SNDRV_CTL_TLVD_ITEM(type, ...) \ -+ (type), SNDRV_CTL_TLVD_LENGTH(__VA_ARGS__), __VA_ARGS__ -+#define SNDRV_CTL_TLVD_LENGTH(...) \ -+ ((unsigned int)sizeof((const unsigned int[]) { __VA_ARGS__ })) -+ -+/* Accessor offsets for TLV data items */ -+#define SNDRV_CTL_TLVO_TYPE 0 -+#define SNDRV_CTL_TLVO_LEN 1 -+ -+#define SNDRV_CTL_TLVD_CONTAINER_ITEM(...) \ -+ SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_CONTAINER, __VA_ARGS__) -+#define SNDRV_CTL_TLVD_DECLARE_CONTAINER(name, ...) \ -+ unsigned int name[] = { \ -+ SNDRV_CTL_TLVD_CONTAINER_ITEM(__VA_ARGS__) \ -+ } -+ -+#define SNDRV_CTL_TLVD_DB_SCALE_MASK 0xffff -+#define SNDRV_CTL_TLVD_DB_SCALE_MUTE 0x10000 -+#define SNDRV_CTL_TLVD_DB_SCALE_ITEM(min, step, mute) \ -+ SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_SCALE, \ -+ (min), \ -+ ((step) & SNDRV_CTL_TLVD_DB_SCALE_MASK) | \ -+ ((mute) ? SNDRV_CTL_TLVD_DB_SCALE_MUTE : 0)) -+#define SNDRV_CTL_TLVD_DECLARE_DB_SCALE(name, min, step, mute) \ -+ unsigned int name[] = { \ -+ SNDRV_CTL_TLVD_DB_SCALE_ITEM(min, step, mute) \ -+ } -+ -+/* Accessor offsets for min, mute and step items in dB scale type TLV */ -+#define SNDRV_CTL_TLVO_DB_SCALE_MIN 2 -+#define SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP 3 -+ -+/* dB scale specified with min/max values instead of step */ -+#define SNDRV_CTL_TLVD_DB_MINMAX_ITEM(min_dB, max_dB) \ -+ SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_MINMAX, (min_dB), (max_dB)) -+#define SNDRV_CTL_TLVD_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) \ -+ SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_MINMAX_MUTE, (min_dB), (max_dB)) -+#define SNDRV_CTL_TLVD_DECLARE_DB_MINMAX(name, min_dB, max_dB) \ -+ unsigned int name[] = { \ -+ SNDRV_CTL_TLVD_DB_MINMAX_ITEM(min_dB, max_dB) \ -+ } -+#define SNDRV_CTL_TLVD_DECLARE_DB_MINMAX_MUTE(name, min_dB, max_dB) \ -+ unsigned int name[] = { \ -+ SNDRV_CTL_TLVD_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) \ -+ } -+ -+/* Accessor offsets for min, max items in db-minmax types of TLV. */ -+#define SNDRV_CTL_TLVO_DB_MINMAX_MIN 2 -+#define SNDRV_CTL_TLVO_DB_MINMAX_MAX 3 -+ -+/* linear volume between min_dB and max_dB (.01dB unit) */ -+#define SNDRV_CTL_TLVD_DB_LINEAR_ITEM(min_dB, max_dB) \ -+ SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_LINEAR, (min_dB), (max_dB)) -+#define SNDRV_CTL_TLVD_DECLARE_DB_LINEAR(name, min_dB, max_dB) \ -+ unsigned int name[] = { \ -+ SNDRV_CTL_TLVD_DB_LINEAR_ITEM(min_dB, max_dB) \ -+ } -+ -+/* Accessor offsets for min, max items in db-linear type of TLV. */ -+#define SNDRV_CTL_TLVO_DB_LINEAR_MIN 2 -+#define SNDRV_CTL_TLVO_DB_LINEAR_MAX 3 -+ -+/* dB range container: -+ * Items in dB range container must be ordered by their values and by their -+ * dB values. This implies that larger values must correspond with larger -+ * dB values (which is also required for all other mixer controls). -+ */ -+/* Each item is: */ -+#define SNDRV_CTL_TLVD_DB_RANGE_ITEM(...) \ -+ SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_RANGE, __VA_ARGS__) -+#define SNDRV_CTL_TLVD_DECLARE_DB_RANGE(name, ...) \ -+ unsigned int name[] = { \ -+ SNDRV_CTL_TLVD_DB_RANGE_ITEM(__VA_ARGS__) \ -+ } -+ -+#define SNDRV_CTL_TLVD_DB_GAIN_MUTE -9999999 -+ -+#endif -diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h -index 11efce6d..101491a4 100644 ---- a/src/topology/tplg_local.h -+++ b/src/topology/tplg_local.h -@@ -18,8 +18,7 @@ - #include "list.h" - #include "topology.h" - --#define __packed __attribute__((__packed__)) -- -+#include - #include - #include - #include --- -2.20.1 - diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0001-configure.ac-remove-an-unnecessary-libtool-fix.patch b/meta/recipes-multimedia/alsa/alsa-lib/0001-configure.ac-remove-an-unnecessary-libtool-fix.patch deleted file mode 100644 index 4db4934fdc..0000000000 --- a/meta/recipes-multimedia/alsa/alsa-lib/0001-configure.ac-remove-an-unnecessary-libtool-fix.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 01cd8cb6d594d7a12c67d21d689ebe0e347469c0 Mon Sep 17 00:00:00 2001 -From: Tanu Kaskinen -Date: Fri, 20 Dec 2019 09:26:12 +0200 -Subject: [PATCH] configure.ac: remove an unnecessary libtool fix - -This code was added in commit 75d393a563efb578c79364a277087c6326267f52 -without explaining why. I assume it was a mistake, since it looks like -the libtool problem should have gone away a long time ago. The referenced -wiki page https://wiki.debian.org/RpathIssue says: - - Since libtool 1.5.2 (released 2004-01-25), on Linux libtool no - longer sets RPATH for any directories in the dynamic linker search - path, so this should no longer be an issue unless upstream used a - really old version of libtool when creating their distribution - tarball. - -This code caused problems in OpenEmbedded, where the libtool script is -named "x86_64-oe-linux-libtool" or similar rather than just "libtool", -so the sed command failed with a file not found error. Rather than -adapting the code to OpenEmbedded's peculiarities, it seems best to just -remove the unnecessary code altogether. - -Upstream-Status: Submitted [https://github.com/alsa-project/alsa-lib/pull/19] -Signed-off-by: Tanu Kaskinen ---- - configure.ac | 11 ----------- - 1 file changed, 11 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 119ef600..22a4a885 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -764,14 +764,3 @@ test "$build_seq" = "yes" && echo "#include " >> include/asoundlib.h - test "$build_seq" = "yes" && echo "#include " >> include/asoundlib.h - test "$build_seq" = "yes" && echo "#include " >> include/asoundlib.h - cat "$srcdir"/include/asoundlib-tail.h >> include/asoundlib.h -- --dnl Taken from https://wiki.debian.org/RpathIssue --case $host in -- *-*-linux-gnu) -- AC_MSG_RESULT([Fixing libtool for -rpath problems.]) -- sed < libtool > libtool-2 \ -- 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/' -- mv libtool-2 libtool -- chmod 755 libtool -- ;; --esac --- -2.20.1 - diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0001-uapi-Move-typedefs-from-uapi-to-sound.patch b/meta/recipes-multimedia/alsa/alsa-lib/0001-uapi-Move-typedefs-from-uapi-to-sound.patch deleted file mode 100644 index c35a2c9d7c..0000000000 --- a/meta/recipes-multimedia/alsa/alsa-lib/0001-uapi-Move-typedefs-from-uapi-to-sound.patch +++ /dev/null @@ -1,137 +0,0 @@ -From 59792f467b38d6a4c4dffdb30528f7fb03d23d96 Mon Sep 17 00:00:00 2001 -From: Takashi Iwai -Date: Fri, 20 Dec 2019 17:12:37 +0100 -Subject: [PATCH] uapi: Move typedefs from uapi to sound/* - -For keeping uapi/*.h cleaner. - -Signed-off-by: Takashi Iwai - -Upstream-Status: Backport - -Signed-off-by: Tanu Kaskinen ---- - include/sound/emu10k1.h | 9 +++++++++ - include/sound/hdsp.h | 10 ++++++++++ - include/sound/hdspm.h | 8 ++++++++ - include/sound/sb16_csp.h | 4 ++++ - include/sound/uapi/emu10k1.h | 10 ---------- - include/sound/uapi/hdsp.h | 9 --------- - include/sound/uapi/hdspm.h | 8 -------- - 7 files changed, 31 insertions(+), 27 deletions(-) - -diff --git a/include/sound/emu10k1.h b/include/sound/emu10k1.h -index f06ecee5..0832f95b 100644 ---- a/include/sound/emu10k1.h -+++ b/include/sound/emu10k1.h -@@ -1,2 +1,11 @@ - #include - #include -+#ifndef __emu10k1_type_defined -+#define __emu10k1_type_defined -+typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t; -+typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t; -+typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t; -+typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t; -+typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t; -+typedef struct emu10k1_ctl_elem_id emu10k1_ctl_elem_id_t; -+#endif -diff --git a/include/sound/hdsp.h b/include/sound/hdsp.h -index 78fb745b..e8f93156 100644 ---- a/include/sound/hdsp.h -+++ b/include/sound/hdsp.h -@@ -1,2 +1,12 @@ - #include - #include -+#ifndef __hdsp_type_defined -+#define __hdsp_type_defined -+typedef enum HDSP_IO_Type HDSP_IO_Type; -+typedef struct hdsp_peak_rms hdsp_peak_rms_t; -+typedef struct hdsp_config_info hdsp_config_info_t; -+typedef struct hdsp_firmware hdsp_firmware_t; -+typedef struct hdsp_version hdsp_version_t; -+typedef struct hdsp_mixer hdsp_mixer_t; -+typedef struct hdsp_9632_aeb hdsp_9632_aeb_t; -+#endif -diff --git a/include/sound/hdspm.h b/include/sound/hdspm.h -index af6d19ed..d9095d9f 100644 ---- a/include/sound/hdspm.h -+++ b/include/sound/hdspm.h -@@ -1,2 +1,10 @@ - #include - #include -+#ifndef __hdspm_type_defined -+#define __hdspm_type_defined -+typedef struct hdspm_peak_rms hdspm_peak_rms_t; -+typedef struct hdspm_config_info hdspm_config_info_t; -+typedef struct hdspm_version hdspm_version_t; -+typedef struct hdspm_channelfader snd_hdspm_channelfader_t; -+typedef struct hdspm_mixer hdspm_mixer_t; -+#endif -diff --git a/include/sound/sb16_csp.h b/include/sound/sb16_csp.h -index 24121fcb..fd02bc56 100644 ---- a/include/sound/sb16_csp.h -+++ b/include/sound/sb16_csp.h -@@ -1 +1,5 @@ - #include -+#ifndef __sb16_csp_type_defined -+#define __sb16_csp_type_defined -+typedef struct snd_sb_csp_microcode snd_sb_csp_microcode_t; -+#endif -diff --git a/include/sound/uapi/emu10k1.h b/include/sound/uapi/emu10k1.h -index c1150e4d..6bcd76f6 100644 ---- a/include/sound/uapi/emu10k1.h -+++ b/include/sound/uapi/emu10k1.h -@@ -382,14 +382,4 @@ struct snd_emu10k1_fx8010_pcm_rec { - #define SNDRV_EMU10K1_IOCTL_SINGLE_STEP _IOW ('H', 0x83, int) - #define SNDRV_EMU10K1_IOCTL_DBG_READ _IOR ('H', 0x84, int) - --#ifndef __KERNEL__ --/* typedefs for compatibility to user-space */ --typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t; --typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t; --typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t; --typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t; --typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t; --typedef struct emu10k1_ctl_elem_id emu10k1_ctl_elem_id_t; --#endif -- - #endif /* _UAPI__SOUND_EMU10K1_H */ -diff --git a/include/sound/uapi/hdsp.h b/include/sound/uapi/hdsp.h -index 88c92a3f..7ac2d3f2 100644 ---- a/include/sound/uapi/hdsp.h -+++ b/include/sound/uapi/hdsp.h -@@ -97,13 +97,4 @@ struct hdsp_9632_aeb { - - #define SNDRV_HDSP_IOCTL_GET_9632_AEB _IOR('H', 0x45, struct hdsp_9632_aeb) - --/* typedefs for compatibility to user-space */ --typedef enum HDSP_IO_Type HDSP_IO_Type; --typedef struct hdsp_peak_rms hdsp_peak_rms_t; --typedef struct hdsp_config_info hdsp_config_info_t; --typedef struct hdsp_firmware hdsp_firmware_t; --typedef struct hdsp_version hdsp_version_t; --typedef struct hdsp_mixer hdsp_mixer_t; --typedef struct hdsp_9632_aeb hdsp_9632_aeb_t; -- - #endif /* __SOUND_HDSP_H */ -diff --git a/include/sound/uapi/hdspm.h b/include/sound/uapi/hdspm.h -index 2d91f90e..3fbfd9dc 100644 ---- a/include/sound/uapi/hdspm.h -+++ b/include/sound/uapi/hdspm.h -@@ -219,12 +219,4 @@ struct hdspm_mixer_ioctl { - /* use indirect access due to the limit of ioctl bit size */ - #define SNDRV_HDSPM_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdspm_mixer_ioctl) - --/* typedefs for compatibility to user-space */ --typedef struct hdspm_peak_rms hdspm_peak_rms_t; --typedef struct hdspm_config_info hdspm_config_info_t; --typedef struct hdspm_version hdspm_version_t; --typedef struct hdspm_channelfader snd_hdspm_channelfader_t; --typedef struct hdspm_mixer hdspm_mixer_t; -- -- - #endif --- -2.20.1 - diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch b/meta/recipes-multimedia/alsa/alsa-lib/0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch deleted file mode 100644 index 96dcd8abac..0000000000 --- a/meta/recipes-multimedia/alsa/alsa-lib/0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 4b6fe372c68d1ff50e7c161cffadeb298734f49c Mon Sep 17 00:00:00 2001 -From: paulhsia -Date: Sat, 30 Nov 2019 03:35:30 +0800 -Subject: [PATCH 1/5] ucm: Use strncmp to avoid access-out-of-boundary - -If the length of the identifier is less than the length of the prefix, -access-out-of-boundary will occur in memcmp(). - -Signed-off-by: paulhsia -Signed-off-by: Jaroslav Kysela - -Upstream-Status: Backport -Signed-off-by: Tanu Kaskinen ---- - src/ucm/main.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/src/ucm/main.c b/src/ucm/main.c -index b0b6ffb3..252e50d9 100644 ---- a/src/ucm/main.c -+++ b/src/ucm/main.c -@@ -61,11 +61,13 @@ static int check_identifier(const char *identifier, const char *prefix) - { - int len; - -- if (strcmp(identifier, prefix) == 0) -- return 1; - len = strlen(prefix); -- if (memcmp(identifier, prefix, len) == 0 && identifier[len] == '/') -+ if (strncmp(identifier, prefix, len) != 0) -+ return 0; -+ -+ if (identifier[len] == 0 || identifier[len] == '/') - return 1; -+ - return 0; - } - --- -2.20.1 - diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch b/meta/recipes-multimedia/alsa/alsa-lib/0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch deleted file mode 100644 index 42973fb6d0..0000000000 --- a/meta/recipes-multimedia/alsa/alsa-lib/0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 58f9dc9bd12a51efa12dbc67e200f4d85cd3da07 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Fri, 29 Nov 2019 22:28:26 +0100 -Subject: [PATCH 2/5] ucm: return always at least NULL if no list is available - in snd_use_case_get_list() - -Signed-off-by: Jaroslav Kysela - -Upstream-Status: Backport -Signed-off-by: Tanu Kaskinen ---- - src/ucm/main.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/ucm/main.c b/src/ucm/main.c -index 252e50d9..b80db65f 100644 ---- a/src/ucm/main.c -+++ b/src/ucm/main.c -@@ -1160,8 +1160,10 @@ static int get_supcon_device_list(snd_use_case_mgr_t *uc_mgr, - - modifier = find_modifier(uc_mgr, verb, name, 0); - if (modifier) { -- if (modifier->dev_list.type != type) -+ if (modifier->dev_list.type != type) { -+ *list = NULL; - return 0; -+ } - return get_list(&modifier->dev_list.list, list, - struct dev_list_node, list, - name); -@@ -1169,8 +1171,10 @@ static int get_supcon_device_list(snd_use_case_mgr_t *uc_mgr, - - device = find_device(uc_mgr, verb, name, 0); - if (device) { -- if (device->dev_list.type != type) -+ if (device->dev_list.type != type) { -+ *list = NULL; - return 0; -+ } - return get_list(&device->dev_list.list, list, - struct dev_list_node, list, - name); --- -2.20.1 - diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0003-namehint-correct-the-args-check.patch b/meta/recipes-multimedia/alsa/alsa-lib/0003-namehint-correct-the-args-check.patch deleted file mode 100644 index 82f8b2bd2a..0000000000 --- a/meta/recipes-multimedia/alsa/alsa-lib/0003-namehint-correct-the-args-check.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 10f3401ce356a675e2440993457ee7c8c7e9fcf8 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Sun, 1 Dec 2019 14:26:40 +0100 -Subject: [PATCH 3/5] namehint: correct the @args check - -BugLink: https://github.com/alsa-project/alsa-plugins/issues/3 -Signed-off-by: Jaroslav Kysela - -Upstream-Status: Backport -Signed-off-by: Tanu Kaskinen ---- - src/control/namehint.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/src/control/namehint.c b/src/control/namehint.c -index 808df6b5..4927ef97 100644 ---- a/src/control/namehint.c -+++ b/src/control/namehint.c -@@ -348,6 +348,12 @@ static int try_config(snd_config_t *config, - goto __cleanup; - if (snd_config_search(res, "@args", &cfg) >= 0) { - snd_config_for_each(i, next, cfg) { -+ /* skip the argument list */ -+ snd_config_get_id(snd_config_iterator_entry(i), &str); -+ while (*str && *str >= '0' && *str <= '9') str++; -+ if (*str == '\0') -+ continue; -+ /* the argument definition must have the default */ - if (snd_config_search(snd_config_iterator_entry(i), - "default", NULL) < 0) { - err = -EINVAL; --- -2.20.1 - diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0004-namehint-improve-the-previous-patch-check-the-return.patch b/meta/recipes-multimedia/alsa/alsa-lib/0004-namehint-improve-the-previous-patch-check-the-return.patch deleted file mode 100644 index 98192f6e53..0000000000 --- a/meta/recipes-multimedia/alsa/alsa-lib/0004-namehint-improve-the-previous-patch-check-the-return.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 1fa6664d5f0cc7d21edceba6695a4c28543c2cab Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Sun, 1 Dec 2019 14:30:54 +0100 -Subject: [PATCH 4/5] namehint: improve the previous patch (check the returned - value) - -Signed-off-by: Jaroslav Kysela - -Upstream-Status: Backport -Signed-off-by: Tanu Kaskinen ---- - src/control/namehint.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/control/namehint.c b/src/control/namehint.c -index 4927ef97..60c48ae3 100644 ---- a/src/control/namehint.c -+++ b/src/control/namehint.c -@@ -349,7 +349,8 @@ static int try_config(snd_config_t *config, - if (snd_config_search(res, "@args", &cfg) >= 0) { - snd_config_for_each(i, next, cfg) { - /* skip the argument list */ -- snd_config_get_id(snd_config_iterator_entry(i), &str); -+ if (snd_config_get_id(snd_config_iterator_entry(i), &str) < 0) -+ continue; - while (*str && *str >= '0' && *str <= '9') str++; - if (*str == '\0') - continue; --- -2.20.1 - diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0005-ucm-Do-not-fail-to-parse-configs-on-cards-with-an-em.patch b/meta/recipes-multimedia/alsa/alsa-lib/0005-ucm-Do-not-fail-to-parse-configs-on-cards-with-an-em.patch deleted file mode 100644 index cbc0a4ceab..0000000000 --- a/meta/recipes-multimedia/alsa/alsa-lib/0005-ucm-Do-not-fail-to-parse-configs-on-cards-with-an-em.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 976f8f62238f0d837584adc7c31035bdb29b6d6f Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Tue, 3 Dec 2019 18:27:39 +0100 -Subject: [PATCH 5/5] ucm: Do not fail to parse configs on cards with an empty - CardComponents lists - -Since the UCM profiles for all Bay- and Cherry-Trail SST cards have been -moved over to UCM2, parsing them fails with: - -ALSA lib ucm_subs.c:220:(uc_mgr_get_substituted_value) variable '${CardComponents}' is not defined in this context! - -This completely breaks audio support on all Bay- and Cherry-Trail devices. - -This is caused by these non-SOF ASoC using cards having an empty -CardComponents list. Which in itself is fine, but is rejected by -the ucm_subs.c code. This commit changes the ucm_subs code to accept -an empty string as a valid value for CardComponents restoring audio -functionality on these boards. - -Signed-off-by: Hans de Goede -Signed-off-by: Jaroslav Kysela - -Upstream-Status: Backport -Signed-off-by: Tanu Kaskinen ---- - src/ucm/ucm_subs.c | 20 ++++++++++++-------- - 1 file changed, 12 insertions(+), 8 deletions(-) - -diff --git a/src/ucm/ucm_subs.c b/src/ucm/ucm_subs.c -index 00afa9e3..90e395f0 100644 ---- a/src/ucm/ucm_subs.c -+++ b/src/ucm/ucm_subs.c -@@ -25,6 +25,7 @@ - */ - - #include "ucm_local.h" -+#include - #include - #include - -@@ -145,10 +146,11 @@ static char *rval_sysfs(snd_use_case_mgr_t *uc_mgr ATTRIBUTE_UNUSED, const char - return strdup(path); - } - --#define MATCH_VARIABLE(name, id, fcn) \ -+#define MATCH_VARIABLE(name, id, fcn, empty_ok) \ - if (strncmp((name), (id), sizeof(id) - 1) == 0) { \ - rval = fcn(uc_mgr); \ - idsize = sizeof(id) - 1; \ -+ allow_empty = (empty_ok); \ - goto __rval; \ - } - -@@ -189,12 +191,14 @@ int uc_mgr_get_substituted_value(snd_use_case_mgr_t *uc_mgr, - - while (*value) { - if (*value == '$' && *(value+1) == '{') { -- MATCH_VARIABLE(value, "${ConfName}", rval_conf_name); -- MATCH_VARIABLE(value, "${CardId}", rval_card_id); -- MATCH_VARIABLE(value, "${CardDriver}", rval_card_driver); -- MATCH_VARIABLE(value, "${CardName}", rval_card_name); -- MATCH_VARIABLE(value, "${CardLongName}", rval_card_longname); -- MATCH_VARIABLE(value, "${CardComponents}", rval_card_components); -+ bool allow_empty = false; -+ -+ MATCH_VARIABLE(value, "${ConfName}", rval_conf_name, false); -+ MATCH_VARIABLE(value, "${CardId}", rval_card_id, false); -+ MATCH_VARIABLE(value, "${CardDriver}", rval_card_driver, false); -+ MATCH_VARIABLE(value, "${CardName}", rval_card_name, false); -+ MATCH_VARIABLE(value, "${CardLongName}", rval_card_longname, false); -+ MATCH_VARIABLE(value, "${CardComponents}", rval_card_components, true); - MATCH_VARIABLE2(value, "${env:", rval_env); - MATCH_VARIABLE2(value, "${sys:", rval_sysfs); - err = -EINVAL; -@@ -208,7 +212,7 @@ int uc_mgr_get_substituted_value(snd_use_case_mgr_t *uc_mgr, - } - goto __error; - __rval: -- if (rval == NULL || rval[0] == '\0') { -+ if (rval == NULL || (!allow_empty && rval[0] == '\0')) { - free(rval); - strncpy(r, value, idsize); - r[idsize] = '\0'; --- -2.20.1 - diff --git a/meta/recipes-multimedia/alsa/alsa-lib_1.2.1.2.bb b/meta/recipes-multimedia/alsa/alsa-lib_1.2.1.2.bb deleted file mode 100644 index e2bc61fbe9..0000000000 --- a/meta/recipes-multimedia/alsa/alsa-lib_1.2.1.2.bb +++ /dev/null @@ -1,52 +0,0 @@ -SUMMARY = "ALSA sound library" -HOMEPAGE = "http://www.alsa-project.org" -BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking" -SECTION = "libs/multimedia" -LICENSE = "LGPLv2.1 & GPLv2+" -LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7 \ - file://src/socket.c;md5=285675b45e83f571c6a957fe4ab79c93;beginline=9;endline=24 \ - " - -SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2 \ - file://0001-configure.ac-remove-an-unnecessary-libtool-fix.patch \ - file://0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch \ - file://0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch \ - file://0003-namehint-correct-the-args-check.patch \ - file://0004-namehint-improve-the-previous-patch-check-the-return.patch \ - file://0005-ucm-Do-not-fail-to-parse-configs-on-cards-with-an-em.patch \ - file://0001-Fix-alsa-sound-.h-for-external-programs.patch \ - file://0001-uapi-Move-typedefs-from-uapi-to-sound.patch \ - " -SRC_URI[md5sum] = "82ddd3698469beec147e4f4a67134ea0" -SRC_URI[sha256sum] = "958e260e3673f1f6ff6b2d2c0df3fc2e469bea5b2957163ce96ce17f23e87943" - -inherit autotools pkgconfig - -EXTRA_OECONF += " \ - ${@bb.utils.contains('TARGET_FPU', 'soft', '--with-softfloat', '', d)} \ - --disable-python \ -" - -PACKAGES =+ "alsa-server alsa-conf libatopology" - -FILES_alsa-server = "${bindir}/*" -FILES_alsa-conf = "${datadir}/alsa/" -FILES_libatopology = "${libdir}/libatopology.so.*" - -RDEPENDS_${PN}_class-target = "alsa-conf alsa-ucm-conf" -RDEPENDS_libatopology_class-target = "alsa-topology-conf" - -# upgrade path -RPROVIDES_${PN} = "libasound" -RREPLACES_${PN} = "libasound" -RCONFLICTS_${PN} = "libasound" - -RPROVIDES_${PN}-dev = "alsa-dev" -RREPLACES_${PN}-dev = "alsa-dev" -RCONFLICTS_${PN}-dev = "alsa-dev" - -RPROVIDES_alsa-conf = "alsa-conf-base" -RREPLACES_alsa-conf = "alsa-conf-base" -RCONFLICTS_alsa-conf = "alsa-conf-base" - -BBCLASSEXTEND = "native nativesdk" diff --git a/meta/recipes-multimedia/alsa/alsa-lib_1.2.2.bb b/meta/recipes-multimedia/alsa/alsa-lib_1.2.2.bb new file mode 100644 index 0000000000..9a4082ff94 --- /dev/null +++ b/meta/recipes-multimedia/alsa/alsa-lib_1.2.2.bb @@ -0,0 +1,43 @@ +SUMMARY = "ALSA sound library" +HOMEPAGE = "http://www.alsa-project.org" +BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking" +SECTION = "libs/multimedia" +LICENSE = "LGPLv2.1 & GPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7 \ + file://src/socket.c;md5=285675b45e83f571c6a957fe4ab79c93;beginline=9;endline=24 \ + " + +SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2" +SRC_URI[md5sum] = "82cdc23a5233d5ed319d2cbc89af5ca5" +SRC_URI[sha256sum] = "d8e853d8805574777bbe40937812ad1419c9ea7210e176f0def3e6ed255ab3ec" + +inherit autotools pkgconfig + +EXTRA_OECONF += " \ + ${@bb.utils.contains('TARGET_FPU', 'soft', '--with-softfloat', '', d)} \ + --disable-python \ +" + +PACKAGES =+ "alsa-server alsa-conf libatopology" + +FILES_alsa-server = "${bindir}/*" +FILES_alsa-conf = "${datadir}/alsa/" +FILES_libatopology = "${libdir}/libatopology.so.*" + +RDEPENDS_${PN}_class-target = "alsa-conf alsa-ucm-conf" +RDEPENDS_libatopology_class-target = "alsa-topology-conf" + +# upgrade path +RPROVIDES_${PN} = "libasound" +RREPLACES_${PN} = "libasound" +RCONFLICTS_${PN} = "libasound" + +RPROVIDES_${PN}-dev = "alsa-dev" +RREPLACES_${PN}-dev = "alsa-dev" +RCONFLICTS_${PN}-dev = "alsa-dev" + +RPROVIDES_alsa-conf = "alsa-conf-base" +RREPLACES_alsa-conf = "alsa-conf-base" +RCONFLICTS_alsa-conf = "alsa-conf-base" + +BBCLASSEXTEND = "native nativesdk" -- cgit 1.2.3-korg