1 | /* $NetBSD: oplvar.h,v 1.17 2012/04/09 10:18:16 plunky Exp $ */ |
2 | |
3 | /* |
4 | * Copyright (c) 1998, 2008 The NetBSD Foundation, Inc. |
5 | * All rights reserved. |
6 | * |
7 | * This code is derived from software contributed to The NetBSD Foundation |
8 | * by Lennart Augustsson (augustss@NetBSD.org). |
9 | * |
10 | * Redistribution and use in source and binary forms, with or without |
11 | * modification, are permitted provided that the following conditions |
12 | * are met: |
13 | * 1. Redistributions of source code must retain the above copyright |
14 | * notice, this list of conditions and the following disclaimer. |
15 | * 2. Redistributions in binary form must reproduce the above copyright |
16 | * notice, this list of conditions and the following disclaimer in the |
17 | * documentation and/or other materials provided with the distribution. |
18 | * |
19 | * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS |
20 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
21 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
22 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS |
23 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
24 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
25 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
26 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
27 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
28 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
29 | * POSSIBILITY OF SUCH DAMAGE. |
30 | */ |
31 | |
32 | #include <dev/midivar.h> |
33 | #include <dev/midisynvar.h> |
34 | |
35 | struct opl_voice { |
36 | int voiceno; |
37 | int iooffs; |
38 | u_int8_t op[4]; |
39 | const struct opl_operators *patch; |
40 | u_int8_t rB0; |
41 | }; |
42 | |
43 | struct opl_softc { |
44 | device_t dev; |
45 | bus_space_tag_t iot; |
46 | bus_space_handle_t ioh; |
47 | kmutex_t *lock; |
48 | int offs; |
49 | int model; |
50 | #define OPL_2 2 |
51 | #define OPL_3 3 |
52 | struct midisyn syn; |
53 | device_t sc_mididev; |
54 | |
55 | struct opl_voice voices[OPL3_NVOICE]; |
56 | u_int8_t pan[MIDI_MAX_CHANS]; |
57 | u_int8_t panl, panr; |
58 | |
59 | int (*spkrctl)(void *, int); |
60 | void *spkrarg; |
61 | |
62 | #ifndef AUDIO_NO_POWER_CTL |
63 | int (*powerctl)(void *, int); |
64 | void *powerarg; |
65 | #endif |
66 | }; |
67 | |
68 | /* for panpot */ |
69 | #define OPL_MIDI_CENTER_MIN (64 - 20) |
70 | #define OPL_MIDI_CENTER_MAX (64 + 20) |
71 | |
72 | /* config flags */ |
73 | #define OPL_FLAGS_SWAP_LR 0x0001 /* swap L and R channels */ |
74 | |
75 | struct opl_attach_arg { |
76 | bus_space_tag_t iot; |
77 | bus_space_handle_t ioh; |
78 | int offs; |
79 | int done; |
80 | }; |
81 | |
82 | struct opl_operators { |
83 | u_int8_t opl3; |
84 | u_int8_t ops[22]; |
85 | #define OO_CHARS 0 |
86 | #define OO_KSL_LEV 2 |
87 | #define OO_ATT_DEC 4 |
88 | #define OO_SUS_REL 6 |
89 | #define OO_WAV_SEL 8 |
90 | #define OO_FB_CONN 10 |
91 | #define OO_4OP_OFFS 11 |
92 | }; |
93 | |
94 | #define OPL_NINSTR 256 |
95 | |
96 | #ifdef _KERNEL |
97 | extern const struct opl_operators opl2_instrs[]; |
98 | extern const struct opl_operators opl3_instrs[]; |
99 | |
100 | int opl_find(struct opl_softc *); |
101 | int opl_match(bus_space_tag_t, bus_space_handle_t, int); |
102 | void opl_attach(struct opl_softc *); |
103 | int opl_detach(struct opl_softc *, int); |
104 | #endif |
105 | |