root/dev/audio_if.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: audio_if.h,v 1.25 2004/04/16 04:53:17 pvalchev Exp $  */
    2 /*      $NetBSD: audio_if.h,v 1.24 1998/01/10 14:07:25 tv Exp $ */
    3 
    4 /*
    5  * Copyright (c) 1994 Havard Eidnes.
    6  * All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in the
   15  *    documentation and/or other materials provided with the distribution.
   16  * 3. All advertising materials mentioning features or use of this software
   17  *    must display the following acknowledgement:
   18  *      This product includes software developed by the Computer Systems
   19  *      Engineering Group at Lawrence Berkeley Laboratory.
   20  * 4. Neither the name of the University nor of the Laboratory may be used
   21  *    to endorse or promote products derived from this software without
   22  *    specific prior written permission.
   23  *
   24  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   34  * SUCH DAMAGE.
   35  *
   36  */
   37 
   38 #ifndef _SYS_DEV_AUDIO_IF_H_
   39 #define _SYS_DEV_AUDIO_IF_H_
   40 
   41 /*
   42  * Generic interface to hardware driver.
   43  */
   44 
   45 struct audio_softc;
   46 struct audio_device;
   47 struct audio_encoding;
   48 struct mixer_devinfo;
   49 struct mixer_ctrl;
   50 
   51 struct audio_params {
   52         u_long  sample_rate;                    /* sample rate */
   53         u_int   encoding;                       /* mu-law, linear, etc */
   54         u_int   precision;                      /* bits/sample */
   55         u_int   channels;                       /* mono(1), stereo(2) */
   56         /* Software en/decode functions, set if SW coding required by HW */
   57         void    (*sw_code)(void *, u_char *, int);
   58         int     factor;                         /* coding space change */
   59 };
   60 
   61 /* The default audio mode: 8 kHz mono mu-law */
   62 extern struct audio_params audio_default;
   63 
   64 struct audio_hw_if {
   65         int     (*open)(void *, int);   /* open hardware */
   66         void    (*close)(void *);               /* close hardware */
   67         int     (*drain)(void *);               /* Optional: drain buffers */
   68 
   69         /* Encoding. */
   70         /* XXX should we have separate in/out? */
   71         int     (*query_encoding)(void *, struct audio_encoding *);
   72 
   73         /* Set the audio encoding parameters (record and play).
   74          * Return 0 on success, or an error code if the
   75          * requested parameters are impossible.
   76          * The values in the params struct may be changed (e.g. rounding
   77          * to the nearest sample rate.)
   78          */
   79         int     (*set_params)(void *, int, int, struct audio_params *,
   80                     struct audio_params *);
   81 
   82         /* Hardware may have some say in the blocksize to choose */
   83         int     (*round_blocksize)(void *, int);
   84 
   85         /*
   86          * Changing settings may require taking device out of "data mode",
   87          * which can be quite expensive.  Also, audiosetinfo() may
   88          * change several settings in quick succession.  To avoid
   89          * having to take the device in/out of "data mode", we provide
   90          * this function which indicates completion of settings
   91          * adjustment.
   92          */
   93         int     (*commit_settings)(void *);
   94 
   95         /* Start input/output routines. These usually control DMA. */
   96         int     (*init_output)(void *, void *, int);
   97         int     (*init_input)(void *, void *, int);
   98         int     (*start_output)(void *, void *, int, void (*)(void *), void *);
   99         int     (*start_input)(void *, void *, int, void (*)(void *), void *);
  100         int     (*halt_output)(void *);
  101         int     (*halt_input)(void *);
  102 
  103         int     (*speaker_ctl)(void *, int);
  104 #define SPKR_ON         1
  105 #define SPKR_OFF        0
  106 
  107         int     (*getdev)(void *, struct audio_device *);
  108         int     (*setfd)(void *, int);
  109 
  110         /* Mixer (in/out ports) */
  111         int     (*set_port)(void *, struct mixer_ctrl *);
  112         int     (*get_port)(void *, struct mixer_ctrl *);
  113 
  114         int     (*query_devinfo)(void *, struct mixer_devinfo *);
  115 
  116         /* Allocate/free memory for the ring buffer. Usually malloc/free. */
  117         /* The _old interfaces have been deprecated and will not be
  118            called in newer kernels if the new interfaces are present */
  119         void    *(*allocm)(void *, int, size_t, int, int);
  120         void    (*freem)(void *, void *, int);
  121         size_t  (*round_buffersize)(void *, int, size_t);
  122         paddr_t (*mappage)(void *, void *, off_t, int);
  123 
  124         int     (*get_props)(void *); /* device properties */
  125 
  126         int     (*trigger_output)(void *, void *, void *, int,
  127                     void (*)(void *), void *, struct audio_params *);
  128         int     (*trigger_input)(void *, void *, void *, int,
  129                     void (*)(void *), void *, struct audio_params *);
  130 };
  131 
  132 struct audio_attach_args {
  133         int     type;
  134         void    *hwif;          /* either audio_hw_if * or midi_hw_if * */
  135         void    *hdl;
  136 };
  137 #define AUDIODEV_TYPE_AUDIO     0
  138 #define AUDIODEV_TYPE_MIDI      1
  139 #define AUDIODEV_TYPE_OPL       2
  140 #define AUDIODEV_TYPE_MPU       3
  141 #define AUDIODEV_TYPE_RADIO     4
  142 
  143 /* Attach the MI driver(s) to the MD driver. */
  144 struct device *audio_attach_mi(struct audio_hw_if *, void *, struct device *);
  145 int            audioprint(void *, const char *);
  146 
  147 /* Device identity flags */
  148 #define SOUND_DEVICE            0
  149 #define AUDIO_DEVICE            0x80
  150 #define AUDIOCTL_DEVICE         0xc0
  151 #define MIXER_DEVICE            0x10
  152 
  153 #define AUDIOUNIT(x)            (minor(x)&0x0f)
  154 #define AUDIODEV(x)             (minor(x)&0xf0)
  155 
  156 #define ISDEVSOUND(x)           (AUDIODEV((x)) == SOUND_DEVICE)
  157 #define ISDEVAUDIO(x)           (AUDIODEV((x)) == AUDIO_DEVICE)
  158 #define ISDEVAUDIOCTL(x)        (AUDIODEV((x)) == AUDIOCTL_DEVICE)
  159 #define ISDEVMIXER(x)           (AUDIODEV((x)) == MIXER_DEVICE)
  160 
  161 /*
  162  * USB Audio specification defines 12 channels:
  163  *      L R C LFE Ls Rs Lc Rc S Sl Sr T
  164  */
  165 #define AUDIO_MAX_CHANNELS      12
  166 
  167 #endif /* _SYS_DEV_AUDIO_IF_H_ */
  168 

/* [<][>][^][v][top][bottom][index][help] */