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