| From ae564665ec261cf104de499b1cdda3564070fc65 Mon Sep 17 00:00:00 2001 |
| From: Takashi Iwai <tiwai@suse.de> |
| 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 <linux/types.h> 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 <tiwai@suse.de> |
| |
| Upstream-Status: Backport |
| |
| Signed-off-by: Tanu Kaskinen <tanuk@iki.fi> |
| |
| --- |
| 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 <fvdpol@coil.demon.nl> |
| - * (c) 1998-1999 by Jaroslav Kysela <perex@perex.cz> |
| - * |
| - * |
| - * This program is free software; you can redistribute it and/or modify |
| - * it under the terms of the GNU General Public License as published by |
| - * the Free Software Foundation; either version 2 of the License, or |
| - * (at your option) any later version. |
| - * |
| - * This program is distributed in the hope that it will be useful, |
| - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| - * GNU General Public License for more details. |
| - * |
| - * You should have received a copy of the GNU General Public License |
| - * along with this program; if not, write to the Free Software |
| - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| - * |
| - */ |
| -#ifndef _UAPI__SOUND_ASEQUENCER_H |
| -#define _UAPI__SOUND_ASEQUENCER_H |
| - |
| -#include <sound/asound.h> |
| - |
| -/** 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 <alsa/sound/uapi/asequencer.h> |
| 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 <linux/types.h> |
| -#include <sound/asound.h> |
| - |
| -/* |
| - * 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 <alsa/sound/uapi/asoc.h> |
| 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 <perex@perex.cz>, |
| - * Abramo Bagnara <abramo@alsa-project.org> |
| - * |
| - * |
| - * This program is free software; you can redistribute it and/or modify |
| - * it under the terms of the GNU General Public License as published by |
| - * the Free Software Foundation; either version 2 of the License, or |
| - * (at your option) any later version. |
| - * |
| - * This program is distributed in the hope that it will be useful, |
| - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| - * GNU General Public License for more details. |
| - * |
| - * You should have received a copy of the GNU General Public License |
| - * along with this program; if not, write to the Free Software |
| - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| - * |
| - */ |
| - |
| -#ifndef _UAPI__SOUND_ASOUND_H |
| -#define _UAPI__SOUND_ASOUND_H |
| - |
| -#if defined(__KERNEL__) || defined(__linux__) |
| -#include <linux/types.h> |
| -#else |
| -#include <sys/ioctl.h> |
| -#endif |
| - |
| -#ifndef __KERNEL__ |
| -#include <stdlib.h> |
| -#include <time.h> |
| -#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 <alsa/sound/uapi/asound.h> |
| 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 <perex@perex.cz>, |
| - * 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 <alsa/sound/uapi/asound_fm.h> |
| 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 <perex@perex.cz>, |
| - * 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 <linux/types.h> |
| -#include <sound/asound.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 |
| - |
| -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 <alsa/sound/type_compat.h> |
| +#include <alsa/sound/uapi/emu10k1.h> |
| 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 <linux/types.h> |
| - |
| -#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 <alsa/sound/type_compat.h> |
| +#include <alsa/sound/uapi/hdsp.h> |
| 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 <linux/types.h> |
| - |
| -/* 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 <alsa/sound/type_compat.h> |
| +#include <alsa/sound/uapi/hdspm.h> |
| 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 <uros@kss-loka.si> |
| - * Takashi Iwai <tiwai@suse.de> |
| - * |
| - * 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 <alsa/sound/uapi/sb16_csp.h> |
| 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 <alsa/sound/uapi/sscape_ioctl.h> |
| 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: <min> <max> <TLV> */ |
| -#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 <alsa/sound/uapi/tlv.h> |
| 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 <stdint.h> |
| +#ifdef __linux__ |
| +#include <linux/types.h> |
| +#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 <fvdpol@coil.demon.nl> |
| + * (c) 1998-1999 by Jaroslav Kysela <perex@perex.cz> |
| + * |
| + * |
| + * This program is free software; you can redistribute it and/or modify |
| + * it under the terms of the GNU General Public License as published by |
| + * the Free Software Foundation; either version 2 of the License, or |
| + * (at your option) any later version. |
| + * |
| + * This program is distributed in the hope that it will be useful, |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| + * GNU General Public License for more details. |
| + * |
| + * You should have received a copy of the GNU General Public License |
| + * along with this program; if not, write to the Free Software |
| + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| + * |
| + */ |
| +#ifndef _UAPI__SOUND_ASEQUENCER_H |
| +#define _UAPI__SOUND_ASEQUENCER_H |
| + |
| +#include <sound/asound.h> |
| + |
| +/** 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 <linux/types.h> |
| +#include <sound/asound.h> |
| + |
| +/* |
| + * 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 <perex@perex.cz>, |
| + * Abramo Bagnara <abramo@alsa-project.org> |
| + * |
| + * |
| + * This program is free software; you can redistribute it and/or modify |
| + * it under the terms of the GNU General Public License as published by |
| + * the Free Software Foundation; either version 2 of the License, or |
| + * (at your option) any later version. |
| + * |
| + * This program is distributed in the hope that it will be useful, |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| + * GNU General Public License for more details. |
| + * |
| + * You should have received a copy of the GNU General Public License |
| + * along with this program; if not, write to the Free Software |
| + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| + * |
| + */ |
| + |
| +#ifndef _UAPI__SOUND_ASOUND_H |
| +#define _UAPI__SOUND_ASOUND_H |
| + |
| +#if defined(__KERNEL__) || defined(__linux__) |
| +#include <linux/types.h> |
| +#else |
| +#include <sys/ioctl.h> |
| +#endif |
| + |
| +#ifndef __KERNEL__ |
| +#include <stdlib.h> |
| +#include <time.h> |
| +#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 <perex@perex.cz>, |
| + * 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 <perex@perex.cz>, |
| + * 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 <uros@kss-loka.si> |
| + * Takashi Iwai <tiwai@suse.de> |
| + * |
| + * 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: <min> <max> <TLV> */ |
| +#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 <sound/type_compat.h> |
| #include <sound/asound.h> |
| #include <sound/asoc.h> |
| #include <sound/tlv.h> |
| -- |
| 2.20.1 |
| |