[BACK]Return to audio_if.h CVS log [TXT][DIR] Up to [local] / sys / dev

Annotation of sys/dev/audio_if.h, Revision 1.1.1.1

1.1       nbrk        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:

CVSweb