The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/sys/audioio.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: audioio.h,v 1.40 2022/04/07 19:33:38 andvar Exp $      */
    2 
    3 /*
    4  * Copyright (c) 1991-1993 Regents of the University of California.
    5  * All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  * 3. All advertising materials mentioning features or use of this software
   16  *    must display the following acknowledgement:
   17  *      This product includes software developed by the Computer Systems
   18  *      Engineering Group at Lawrence Berkeley Laboratory.
   19  * 4. Neither the name of the University nor of the Laboratory may be used
   20  *    to endorse or promote products derived from this software without
   21  *    specific prior written permission.
   22  *
   23  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   25  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   26  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   27  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   28  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   29  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   30  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   32  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   33  * SUCH DAMAGE.
   34  *
   35  */
   36 
   37 #ifndef _SYS_AUDIOIO_H_
   38 #define _SYS_AUDIOIO_H_
   39 
   40 #include <sys/types.h>
   41 #include <sys/ioccom.h>
   42 
   43 #ifndef _KERNEL
   44 #include <string.h>     /* Required for memset(3) prototype (AUDIO_INITINFO) */
   45 #endif /* _KERNEL */
   46 
   47 /*
   48  * Audio device
   49  */
   50 struct audio_prinfo {
   51         u_int   sample_rate;    /* sample rate in bit/s */
   52         u_int   channels;       /* number of channels, usually 1 or 2 */
   53         u_int   precision;      /* number of bits/sample */
   54         u_int   encoding;       /* data encoding (AUDIO_ENCODING_* below) */
   55         u_int   gain;           /* volume level */
   56         u_int   port;           /* selected I/O port */
   57         u_int   seek;           /* BSD extension */
   58         u_int   avail_ports;    /* available I/O ports */
   59         u_int   buffer_size;    /* total size audio buffer */
   60         u_int   _ispare[1];
   61         /* Current state of device: */
   62         u_int   samples;        /* number of samples */
   63         u_int   eof;            /* End Of File (zero-size writes) counter */
   64         u_char  pause;          /* non-zero if paused, zero to resume */
   65         u_char  error;          /* non-zero if underflow/overflow occurred */
   66         u_char  waiting;        /* non-zero if another process hangs in open */
   67         u_char  balance;        /* stereo channel balance */
   68         u_char  cspare[2];
   69         u_char  open;           /* non-zero if currently open */
   70         u_char  active;         /* non-zero if I/O is currently active */
   71 };
   72 typedef struct audio_prinfo audio_prinfo_t;
   73 
   74 struct audio_info {
   75         struct  audio_prinfo play;      /* Info for play (output) side */
   76         struct  audio_prinfo record;    /* Info for record (input) side */
   77 
   78         u_int   monitor_gain;   /* input to output mix */
   79         /* BSD extensions */
   80         u_int   blocksize;      /* H/W read/write block size */
   81         u_int   hiwat;          /* output high water mark */
   82         u_int   lowat;          /* output low water mark */
   83         u_int   _ispare1;
   84         u_int   mode;           /* current device mode */
   85 #define AUMODE_PLAY     0x01
   86 #define AUMODE_RECORD   0x02
   87 #define AUMODE_PLAY_ALL 0x04    /* don't do real-time correction */
   88 };
   89 typedef struct audio_info audio_info_t;
   90 
   91 #define AUDIO_INITINFO(p) \
   92         (void)memset((void *)(p), 0xff, sizeof(struct audio_info))
   93 
   94 /*
   95  * Parameter for the AUDIO_GETDEV ioctl to determine current
   96  * audio devices.
   97  */
   98 #define MAX_AUDIO_DEV_LEN       16
   99 typedef struct audio_device {
  100         char name[MAX_AUDIO_DEV_LEN];
  101         char version[MAX_AUDIO_DEV_LEN];
  102         char config[MAX_AUDIO_DEV_LEN];
  103 } audio_device_t;
  104 
  105 typedef struct audio_offset {
  106         u_int   samples;        /* Total number of bytes transferred */
  107         u_int   deltablks;      /* Blocks transferred since last checked */
  108         u_int   offset;         /* Physical transfer offset in buffer */
  109 } audio_offset_t;
  110 
  111 /*
  112  * Supported audio encodings
  113  */
  114 /* Encoding ID's */
  115 #define AUDIO_ENCODING_NONE             0 /* no encoding assigned */
  116 #define AUDIO_ENCODING_ULAW             1 /* ITU G.711 mu-law */
  117 #define AUDIO_ENCODING_ALAW             2 /* ITU G.711 A-law */
  118 #define AUDIO_ENCODING_PCM16            3 /* signed linear PCM, obsolete */
  119 #define AUDIO_ENCODING_LINEAR           AUDIO_ENCODING_PCM16 /* SunOS compat */
  120 #define AUDIO_ENCODING_PCM8             4 /* unsigned linear PCM, obsolete */
  121 #define AUDIO_ENCODING_LINEAR8          AUDIO_ENCODING_PCM8 /* SunOS compat */
  122 #define AUDIO_ENCODING_ADPCM            5 /* adaptive differential PCM */
  123 #define AUDIO_ENCODING_SLINEAR_LE       6
  124 #define AUDIO_ENCODING_SLINEAR_BE       7
  125 #define AUDIO_ENCODING_ULINEAR_LE       8
  126 #define AUDIO_ENCODING_ULINEAR_BE       9
  127 #define AUDIO_ENCODING_SLINEAR          10
  128 #define AUDIO_ENCODING_ULINEAR          11
  129 #define AUDIO_ENCODING_MPEG_L1_STREAM   12
  130 #define AUDIO_ENCODING_MPEG_L1_PACKETS  13
  131 #define AUDIO_ENCODING_MPEG_L1_SYSTEM   14
  132 #define AUDIO_ENCODING_MPEG_L2_STREAM   15
  133 #define AUDIO_ENCODING_MPEG_L2_PACKETS  16
  134 #define AUDIO_ENCODING_MPEG_L2_SYSTEM   17
  135 #define AUDIO_ENCODING_AC3              18
  136 
  137 /* XXX Consider whether to export to userland? */
  138 #if defined(_KERNEL)
  139 #if BYTE_ORDER == LITTLE_ENDIAN
  140 #define AUDIO_ENCODING_SLINEAR_NE AUDIO_ENCODING_SLINEAR_LE
  141 #define AUDIO_ENCODING_ULINEAR_NE AUDIO_ENCODING_ULINEAR_LE
  142 #define AUDIO_ENCODING_SLINEAR_OE AUDIO_ENCODING_SLINEAR_BE
  143 #define AUDIO_ENCODING_ULINEAR_OE AUDIO_ENCODING_ULINEAR_BE
  144 #else
  145 #define AUDIO_ENCODING_SLINEAR_NE AUDIO_ENCODING_SLINEAR_BE
  146 #define AUDIO_ENCODING_ULINEAR_NE AUDIO_ENCODING_ULINEAR_BE
  147 #define AUDIO_ENCODING_SLINEAR_OE AUDIO_ENCODING_SLINEAR_LE
  148 #define AUDIO_ENCODING_ULINEAR_OE AUDIO_ENCODING_ULINEAR_LE
  149 #endif
  150 #endif /* _KERNEL */
  151 
  152 typedef struct audio_encoding {
  153         int     index;
  154         char    name[MAX_AUDIO_DEV_LEN];
  155         int     encoding;
  156         int     precision;
  157         int     flags;
  158 #define AUDIO_ENCODINGFLAG_EMULATED 1 /* software emulation mode */
  159 } audio_encoding_t;
  160 
  161 struct audio_format {
  162         /**
  163          * Device-dependent audio drivers may use this field freely.
  164          */
  165         void *driver_data;
  166 
  167         /**
  168          * combination of AUMODE_PLAY and AUMODE_RECORD
  169          */
  170         int32_t mode;
  171 
  172         /**
  173          * Encoding type.  AUDIO_ENCODING_*.
  174          * Don't use AUDIO_ENCODING_SLINEAR/ULINEAR/LINEAR/LINEAR8
  175          */
  176         u_int encoding;
  177 
  178         /**
  179          * The size of valid bits in one sample.
  180          * It must be <= precision.
  181          */
  182         u_int validbits;
  183 
  184         /**
  185          * The bit size of one sample.
  186          * It must be >= validbits, and is usually a multiple of 8.
  187          */
  188         u_int precision;
  189 
  190         /**
  191          * The number of channels.  >= 1
  192          */
  193         u_int channels;
  194 
  195         u_int channel_mask;
  196 #define AUFMT_UNKNOWN_POSITION          0U
  197 #define AUFMT_FRONT_LEFT                0x00001U /* USB audio compatible */
  198 #define AUFMT_FRONT_RIGHT               0x00002U /* USB audio compatible */
  199 #define AUFMT_FRONT_CENTER              0x00004U /* USB audio compatible */
  200 #define AUFMT_LOW_FREQUENCY             0x00008U /* USB audio compatible */
  201 #define AUFMT_BACK_LEFT                 0x00010U /* USB audio compatible */
  202 #define AUFMT_BACK_RIGHT                0x00020U /* USB audio compatible */
  203 #define AUFMT_FRONT_LEFT_OF_CENTER      0x00040U /* USB audio compatible */
  204 #define AUFMT_FRONT_RIGHT_OF_CENTER     0x00080U /* USB audio compatible */
  205 #define AUFMT_BACK_CENTER               0x00100U /* USB audio compatible */
  206 #define AUFMT_SIDE_LEFT                 0x00200U /* USB audio compatible */
  207 #define AUFMT_SIDE_RIGHT                0x00400U /* USB audio compatible */
  208 #define AUFMT_TOP_CENTER                0x00800U /* USB audio compatible */
  209 #define AUFMT_TOP_FRONT_LEFT            0x01000U
  210 #define AUFMT_TOP_FRONT_CENTER          0x02000U
  211 #define AUFMT_TOP_FRONT_RIGHT           0x04000U
  212 #define AUFMT_TOP_BACK_LEFT             0x08000U
  213 #define AUFMT_TOP_BACK_CENTER           0x10000U
  214 #define AUFMT_TOP_BACK_RIGHT            0x20000U
  215 
  216 #define AUFMT_MONAURAL          AUFMT_FRONT_CENTER
  217 #define AUFMT_STEREO            (AUFMT_FRONT_LEFT | AUFMT_FRONT_RIGHT)
  218 #define AUFMT_SURROUND4         (AUFMT_STEREO | AUFMT_BACK_LEFT \
  219                                 | AUFMT_BACK_RIGHT)
  220 #define AUFMT_DOLBY_5_1         (AUFMT_SURROUND4 | AUFMT_FRONT_CENTER \
  221                                 | AUFMT_LOW_FREQUENCY)
  222 
  223         /**
  224          * 0: frequency[0] is lower limit, and frequency[1] is higher limit.
  225          * 1-16: frequency[0] to frequency[frequency_type-1] are valid.
  226          */
  227         u_int frequency_type;
  228 
  229 #define AUFMT_MAX_FREQUENCIES   16
  230         /**
  231          * sampling rates
  232          */
  233         u_int frequency[AUFMT_MAX_FREQUENCIES];
  234 
  235         /**
  236          * 0-3: priority.  0 is the lowest.
  237          * -1: hardware supports this format but driver doesn't (e.g. AC3).
  238          */
  239         int priority;
  240 };
  241 
  242 typedef struct audio_format_query {
  243         u_int   index;
  244         struct audio_format fmt;
  245 } audio_format_query_t;
  246 
  247 /*
  248  * Balance settings.
  249  */
  250 #define AUDIO_LEFT_BALANCE      0       /* left channel only    */
  251 #define AUDIO_MID_BALANCE       32      /* equal left/right channel */
  252 #define AUDIO_RIGHT_BALANCE     64      /* right channel only   */
  253 #define AUDIO_BALANCE_SHIFT     3
  254 
  255 /*
  256  * Output ports
  257  */
  258 #define AUDIO_SPEAKER           0x01    /* built-in speaker */
  259 #define AUDIO_HEADPHONE         0x02    /* headphone jack */
  260 #define AUDIO_LINE_OUT          0x04    /* line out      */
  261 #define VC_OUT                  0x08    /* virt chan out */
  262 
  263 /*
  264  * Input ports
  265  */
  266 #define AUDIO_MICROPHONE        0x01    /* microphone */
  267 #define AUDIO_LINE_IN           0x02    /* line in       */
  268 #define AUDIO_CD                0x04    /* on-board CD inputs */
  269 #define AUDIO_INTERNAL_CD_IN    AUDIO_CD        /* internal CDROM */
  270 #define VC_IN                   0x08    /* virt chan in */
  271 
  272 /*
  273  * Audio device operations
  274  */
  275 #define AUDIO_GETINFO   _IOR('A', 21, struct audio_info)
  276 #define AUDIO_SETINFO   _IOWR('A', 22, struct audio_info)
  277 #define AUDIO_DRAIN     _IO('A', 23)
  278 #define AUDIO_FLUSH     _IO('A', 24)
  279 #define AUDIO_WSEEK     _IOR('A', 25, u_long)
  280 #define AUDIO_RERROR    _IOR('A', 26, int)
  281 #define AUDIO_GETDEV    _IOR('A', 27, struct audio_device)
  282 #define AUDIO_GETENC    _IOWR('A', 28, struct audio_encoding)
  283 #define AUDIO_GETFD     _IOR('A', 29, int)
  284 #define AUDIO_SETFD     _IOWR('A', 30, int)
  285 #define AUDIO_PERROR    _IOR('A', 31, int)
  286 #define AUDIO_GETIOFFS  _IOR('A', 32, struct audio_offset)
  287 #define AUDIO_GETOOFFS  _IOR('A', 33, struct audio_offset)
  288 #define AUDIO_GETPROPS  _IOR('A', 34, int)
  289 #define  AUDIO_PROP_FULLDUPLEX  0x01
  290 #define  AUDIO_PROP_MMAP        0x02
  291 #define  AUDIO_PROP_INDEPENDENT 0x04
  292 #define  AUDIO_PROP_PLAYBACK    0x10
  293 #define  AUDIO_PROP_CAPTURE     0x20
  294 #define AUDIO_GETBUFINFO        _IOR('A', 35, struct audio_info)
  295 #define AUDIO_SETCHAN   _IOW('A', 36, int)
  296 #define AUDIO_GETCHAN   _IOR('A', 37, int)
  297 #define AUDIO_QUERYFORMAT       _IOWR('A', 38, struct audio_format_query)
  298 #define AUDIO_GETFORMAT _IOR('A', 39, struct audio_info)
  299 #define AUDIO_SETFORMAT _IOW('A', 40, struct audio_info)
  300 
  301 /*
  302  * Mixer device
  303  */
  304 #define AUDIO_MIN_GAIN  0
  305 #define AUDIO_MAX_GAIN  255
  306 
  307 typedef struct mixer_level {
  308         int num_channels;
  309         u_char level[8];        /* [num_channels] */
  310 } mixer_level_t;
  311 #define AUDIO_MIXER_LEVEL_MONO  0
  312 #define AUDIO_MIXER_LEVEL_LEFT  0
  313 #define AUDIO_MIXER_LEVEL_RIGHT 1
  314 
  315 /*
  316  * Device operations
  317  */
  318 
  319 typedef struct audio_mixer_name {
  320         char name[MAX_AUDIO_DEV_LEN];
  321         int msg_id;
  322 } audio_mixer_name_t;
  323 
  324 typedef struct mixer_devinfo {
  325         int index;
  326         audio_mixer_name_t label;
  327         int type;
  328 #define AUDIO_MIXER_CLASS       0
  329 #define AUDIO_MIXER_ENUM        1
  330 #define AUDIO_MIXER_SET         2
  331 #define AUDIO_MIXER_VALUE       3
  332         int mixer_class;
  333         int next, prev;
  334 #define AUDIO_MIXER_LAST        -1
  335         union {
  336                 struct audio_mixer_enum {
  337                         int num_mem;
  338                         struct {
  339                                 audio_mixer_name_t label;
  340                                 int ord;
  341                         } member[32];
  342                 } e;
  343                 struct audio_mixer_set {
  344                         int num_mem;
  345                         struct {
  346                                 audio_mixer_name_t label;
  347                                 int mask;
  348                         } member[32];
  349                 } s;
  350                 struct audio_mixer_value {
  351                         audio_mixer_name_t units;
  352                         int num_channels;
  353                         int delta;
  354                 } v;
  355         } un;
  356 } mixer_devinfo_t;
  357 
  358 
  359 typedef struct mixer_ctrl {
  360         int dev;
  361         int type;
  362         union {
  363                 int ord;                /* enum */
  364                 int mask;               /* set */
  365                 mixer_level_t value;    /* value */
  366         } un;
  367 } mixer_ctrl_t;
  368 
  369 /*
  370  * Mixer operations
  371  */
  372 #define AUDIO_MIXER_READ                _IOWR('M', 0, mixer_ctrl_t)
  373 #define AUDIO_MIXER_WRITE               _IOWR('M', 1, mixer_ctrl_t)
  374 #define AUDIO_MIXER_DEVINFO             _IOWR('M', 2, mixer_devinfo_t)
  375 
  376 /*
  377  * Well known device names
  378  */
  379 #define AudioNmicrophone        "mic"
  380 #define AudioNline      "line"
  381 #define AudioNcd        "cd"
  382 #define AudioNdac       "dac"
  383 #define AudioNaux       "aux"
  384 #define AudioNrecord    "record"
  385 #define AudioNvolume    "volume"
  386 #define AudioNmonitor   "monitor"
  387 #define AudioNtreble    "treble"
  388 #define AudioNmid       "mid"
  389 #define AudioNbass      "bass"
  390 #define AudioNbassboost "bassboost"
  391 #define AudioNspeaker   "speaker"
  392 #define AudioNheadphone "headphones"
  393 #define AudioNoutput    "output"
  394 #define AudioNinput     "input"
  395 #define AudioNmaster    "master"
  396 #define AudioNstereo    "stereo"
  397 #define AudioNmono      "mono"
  398 #define AudioNloudness  "loudness"
  399 #define AudioNspatial   "spatial"
  400 #define AudioNsurround  "surround"
  401 #define AudioNpseudo    "pseudo"
  402 #define AudioNmute      "mute"
  403 #define AudioNenhanced  "enhanced"
  404 #define AudioNpreamp    "preamp"
  405 #define AudioNon        "on"
  406 #define AudioNoff       "off"
  407 #define AudioNmode      "mode"
  408 #define AudioNsource    "source"
  409 #define AudioNfmsynth   "fmsynth"
  410 #define AudioNwave      "wave"
  411 #define AudioNmidi      "midi"
  412 #define AudioNmixerout  "mixerout"
  413 #define AudioNswap      "swap"  /* swap left and right channels */
  414 #define AudioNagc       "agc"
  415 #define AudioNdelay     "delay"
  416 #define AudioNselect    "select" /* select destination */
  417 #define AudioNvideo     "video"
  418 #define AudioNcenter    "center"
  419 #define AudioNdepth     "depth"
  420 #define AudioNlfe       "lfe"
  421 
  422 #define AudioEmulaw             "mulaw"
  423 #define AudioEalaw              "alaw"
  424 #define AudioEadpcm             "adpcm"
  425 #define AudioEslinear           "slinear"
  426 #define AudioEslinear_le        "slinear_le"
  427 #define AudioEslinear_be        "slinear_be"
  428 #define AudioEulinear           "ulinear"
  429 #define AudioEulinear_le        "ulinear_le"
  430 #define AudioEulinear_be        "ulinear_be"
  431 #define AudioEmpeg_l1_stream    "mpeg_l1_stream"
  432 #define AudioEmpeg_l1_packets   "mpeg_l1_packets"
  433 #define AudioEmpeg_l1_system    "mpeg_l1_system"
  434 #define AudioEmpeg_l2_stream    "mpeg_l2_stream"
  435 #define AudioEmpeg_l2_packets   "mpeg_l2_packets"
  436 #define AudioEmpeg_l2_system    "mpeg_l2_system"
  437 #define AudioEac3               "ac3"
  438 
  439 #define AudioCinputs    "inputs"
  440 #define AudioCoutputs   "outputs"
  441 #define AudioCrecord    "record"
  442 #define AudioCmonitor   "monitor"
  443 #define AudioCequalization      "equalization"
  444 #define AudioCmodem     "modem"
  445 #define AudioCvirtchan  "vchan"
  446 
  447 #endif /* !_SYS_AUDIOIO_H_ */

Cache object: b49ea8c57e75852a3a0f9aed4bc4f95d


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.