Annotation of sys/dev/isa/ad1848var.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: ad1848var.h,v 1.12 2002/03/14 03:16:05 millert Exp $ */
2: /* $NetBSD: ad1848var.h,v 1.22 1998/01/19 22:18:26 augustss Exp $ */
3:
4: /*
5: * Copyright (c) 1994 John Brezak
6: * Copyright (c) 1991-1993 Regents of the University of California.
7: * All rights reserved.
8: *
9: * Redistribution and use in source and binary forms, with or without
10: * modification, are permitted provided that the following conditions
11: * are met:
12: * 1. Redistributions of source code must retain the above copyright
13: * notice, this list of conditions and the following disclaimer.
14: * 2. Redistributions in binary form must reproduce the above copyright
15: * notice, this list of conditions and the following disclaimer in the
16: * documentation and/or other materials provided with the distribution.
17: * 3. All advertising materials mentioning features or use of this software
18: * must display the following acknowledgement:
19: * This product includes software developed by the Computer Systems
20: * Engineering Group at Lawrence Berkeley Laboratory.
21: * 4. Neither the name of the University nor of the Laboratory may be used
22: * to endorse or promote products derived from this software without
23: * specific prior written permission.
24: *
25: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35: * SUCH DAMAGE.
36: *
37: */
38:
39: #define AD1848_NPORT 4
40:
41: struct ad1848_volume {
42: u_char left;
43: u_char right;
44: };
45:
46: struct ad1848_softc {
47: struct device sc_dev; /* base device */
48: struct isadev sc_id; /* ISA device */
49: void *sc_ih; /* interrupt vectoring */
50: bus_space_tag_t sc_iot; /* tag */
51: bus_space_handle_t sc_ioh; /* handle */
52: int sc_iooffs; /* offset from handle */
53:
54: void *parent;
55: struct device *sc_isa; /* ISA bus's device */
56:
57: u_short sc_locked; /* true when doing HS DMA */
58: u_int sc_lastcc; /* size of last DMA xfer */
59: int sc_mode; /* half-duplex record/play */
60:
61: int sc_dma_flags;
62: void *sc_dma_bp;
63: u_int sc_dma_cnt;
64:
65: char sc_playrun; /* running in continuous mode */
66: char sc_recrun; /* running in continuous mode */
67: #define NOTRUNNING 0
68: #define DMARUNNING 1
69: #define PCMRUNNING 2
70:
71: int sc_irq; /* interrupt */
72: int sc_drq; /* DMA */
73: int sc_recdrq; /* record/capture DMA */
74:
75: /* We keep track of these */
76: struct ad1848_volume gains[6];
77:
78: struct ad1848_volume rec_gain;
79:
80: int rec_port; /* recording port */
81:
82: /* ad1848 */
83: u_char MCE_bit;
84: char mic_gain_on; /* CS4231 only */
85: char mute[6];
86:
87: char *chip_name;
88: int mode;
89:
90: u_int precision; /* 8/16 bits */
91: int channels;
92:
93: u_char speed_bits;
94: u_char format_bits;
95: u_char need_commit;
96:
97: u_long sc_interrupts; /* number of interrupts taken */
98: void (*sc_intr)(void *); /* dma completion intr handler */
99: void *sc_arg; /* arg for sc_intr() */
100:
101: /* Only used by pss XXX */
102: int sc_iobase;
103: };
104:
105: #define MUTE_LEFT 1
106: #define MUTE_RIGHT 2
107: #define MUTE_ALL (MUTE_LEFT | MUTE_RIGHT)
108: #define MUTE_MONO MUTE_ALL
109:
110: /* Don't change this ordering without seriously looking around.
111: These are indexes into mute[] array and into a register information
112: array */
113: #define AD1848_AUX2_CHANNEL 0
114: #define AD1848_AUX1_CHANNEL 1
115: #define AD1848_DAC_CHANNEL 2
116: #define AD1848_LINE_CHANNEL 3
117: #define AD1848_MONO_CHANNEL 4
118: #define AD1848_MONITOR_CHANNEL 5 /* Doesn't seem to be on all later chips */
119:
120: /*
121: * Ad1848 ports
122: */
123: #define MIC_IN_PORT 0
124: #define LINE_IN_PORT 1
125: #define AUX1_IN_PORT 2
126: #define DAC_IN_PORT 3
127:
128: #ifdef _KERNEL
129:
130: #define AD1848_KIND_LVL 0
131: #define AD1848_KIND_MUTE 1
132: #define AD1848_KIND_RECORDGAIN 2
133: #define AD1848_KIND_MICGAIN 3
134: #define AD1848_KIND_RECORDSOURCE 4
135:
136: typedef struct ad1848_devmap {
137: int id;
138: int kind;
139: int dev;
140: } ad1848_devmap_t;
141:
142: static __inline int ad1848_to_vol(mixer_ctrl_t *, struct ad1848_volume *);
143: static __inline int ad1848_from_vol(mixer_ctrl_t *, struct ad1848_volume *);
144:
145: static __inline int
146: ad1848_to_vol(cp, vol)
147: mixer_ctrl_t *cp;
148: struct ad1848_volume *vol;
149: {
150: if (cp->un.value.num_channels == 1) {
151: vol->left = vol->right = cp->un.value.level[AUDIO_MIXER_LEVEL_MONO];
152: return(1);
153: }
154: else if (cp->un.value.num_channels == 2) {
155: vol->left = cp->un.value.level[AUDIO_MIXER_LEVEL_LEFT];
156: vol->right = cp->un.value.level[AUDIO_MIXER_LEVEL_RIGHT];
157: return(1);
158: }
159: return(0);
160: }
161:
162: static __inline int
163: ad1848_from_vol(cp, vol)
164: mixer_ctrl_t *cp;
165: struct ad1848_volume *vol;
166: {
167: if (cp->un.value.num_channels == 1) {
168: cp->un.value.level[AUDIO_MIXER_LEVEL_MONO] = vol->left;
169: return(1);
170: }
171: else if (cp->un.value.num_channels == 2) {
172: cp->un.value.level[AUDIO_MIXER_LEVEL_LEFT] = vol->left;
173: cp->un.value.level[AUDIO_MIXER_LEVEL_RIGHT] = vol->right;
174: return(1);
175: }
176: return(0);
177: }
178:
179:
180: int ad1848_mixer_get_port(struct ad1848_softc *, ad1848_devmap_t *, int cnt, mixer_ctrl_t *);
181: int ad1848_mixer_set_port(struct ad1848_softc *, ad1848_devmap_t *, int, mixer_ctrl_t *);
182: int ad1848_mapprobe(struct ad1848_softc *, int);
183: int ad1848_probe(struct ad1848_softc *);
184: void ad1848_unmap(struct ad1848_softc *);
185: void ad1848_attach(struct ad1848_softc *);
186:
187: int ad1848_open(void *, int);
188: void ad1848_close(void *);
189:
190: void ad1848_forceintr(struct ad1848_softc *);
191:
192: int ad1848_query_encoding(void *, struct audio_encoding *);
193: int ad1848_set_params(void *, int, int, struct audio_params *, struct audio_params *);
194:
195: int ad1848_round_blocksize(void *, int);
196:
197: int ad1848_dma_init_output(void *, void *, int);
198: int ad1848_dma_init_input(void *, void *, int);
199: int ad1848_dma_output(void *, void *, int, void (*)(void *), void *);
200: int ad1848_dma_input(void *, void *, int, void (*)(void *), void *);
201:
202: int ad1848_commit_settings(void *);
203:
204: int ad1848_halt_in_dma(void *);
205: int ad1848_halt_out_dma(void *);
206:
207: int ad1848_intr(void *);
208:
209: int ad1848_set_rec_port(struct ad1848_softc *, int);
210: int ad1848_get_rec_port(struct ad1848_softc *);
211:
212: int ad1848_set_channel_gain(struct ad1848_softc *, int, struct ad1848_volume *);
213: int ad1848_get_device_gain(struct ad1848_softc *, int, struct ad1848_volume *);
214: int ad1848_set_rec_gain(struct ad1848_softc *, struct ad1848_volume *);
215: int ad1848_get_rec_gain(struct ad1848_softc *, struct ad1848_volume *);
216: /* Note: The mic pre-MUX gain is not a variable gain, it's 20dB or 0dB */
217: int ad1848_set_mic_gain(struct ad1848_softc *, struct ad1848_volume *);
218: int ad1848_get_mic_gain(struct ad1848_softc *, struct ad1848_volume *);
219: void ad1848_mute_channel(struct ad1848_softc *, int device, int mute);
220:
221: void *ad1848_malloc(void *, int, size_t, int, int);
222: void ad1848_free(void *, void *, int);
223: size_t ad1848_round(void *, int, size_t);
224: paddr_t ad1848_mappage(void *, void *, off_t, int);
225:
226: int ad1848_get_props(void *);
227:
228: #endif
CVSweb