[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     ! 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