1 /*        $NetBSD: essvar.h,v 1.27 2014/08/16 13:01:33 nakayama Exp $ */
2 /*
3  * Copyright 1997
4  * Digital Equipment Corporation. All rights reserved.
5  *
6  * This software is furnished under license and may be used and
7  * copied only in accordance with the following terms and conditions.
8  * Subject to these conditions, you may download, copy, install,
9  * use, modify and distribute this software in source and/or binary
10  * form. No title or ownership is transferred hereby.
11  *
12  * 1) Any source code used, modified or distributed must reproduce
13  *    and retain this copyright notice and list of conditions as
14  *    they appear in the source file.
15  *
16  * 2) No right is granted to use any trade name, trademark, or logo of
17  *    Digital Equipment Corporation. Neither the "Digital Equipment
18  *    Corporation" name nor any trademark or logo of Digital Equipment
19  *    Corporation may be used to endorse or promote products derived
20  *    from this software without the prior written permission of
21  *    Digital Equipment Corporation.
22  *
23  * 3) This software is provided "AS-IS" and any express or implied
24  *    warranties, including but not limited to, any implied warranties
25  *    of merchantability, fitness for a particular purpose, or
26  *    non-infringement are disclaimed. In no event shall DIGITAL be
27  *    liable for any damages whatsoever, and in particular, DIGITAL
28  *    shall not be liable for special, indirect, consequential, or
29  *    incidental damages or damages for lost profits, loss of
30  *    revenue or loss of use, whether such damages arise in contract,
31  *    negligence, tort, under statute, in equity, at law or otherwise,
32  *    even if advised of the possibility of such damage.
33  */
34 
35 /*
36 ** @(#) $RCSfile: essvar.h,v $ $Revision: 1.27 $ (SHARK) $Date: 2014/08/16 13:01:33 $
37 **
38 **++
39 **
40 **  essvar.h
41 **
42 **  FACILITY:
43 **
44 **        DIGITAL Network Appliance Reference Design (DNARD)
45 **
46 **  MODULE DESCRIPTION:
47 **
48 **      This module contains the structure definitions and function
49 **      prototypes for the ESS Technologies 1887/888 sound chip
50 **      driver.
51 **
52 **  AUTHORS:
53 **
54 **        Blair Fidler        Software Engineering Australia
55 **                            Gold Coast, Australia.
56 **
57 **  CREATION DATE:
58 **
59 **        May 12, 1997.
60 **
61 **  MODIFICATION HISTORY:
62 **
63 **--
64 */
65 
66 #include <sys/callout.h>
67 
68 #define ESS_DAC_PLAY_VOL      0
69 #define ESS_MIC_PLAY_VOL      1
70 #define ESS_LINE_PLAY_VOL     2
71 #define ESS_SYNTH_PLAY_VOL    3
72 #define ESS_CD_PLAY_VOL                 4
73 #define ESS_AUXB_PLAY_VOL     5
74 #define ESS_INPUT_CLASS                 6
75 
76 #define ESS_MASTER_VOL                  7
77 #define ESS_PCSPEAKER_VOL     8
78 #define ESS_OUTPUT_CLASS      9
79 
80 #define ESS_RECORD_MONITOR    10
81 #define ESS_MONITOR_CLASS     11
82 
83 #define ESS_RECORD_VOL                  12
84 #define   ESS_RECORD_SOURCE   13
85 #define ESS_RECORD_CLASS      14
86 
87 #define ESS_1788_NDEVS                  15
88 
89 #define ESS_SPATIALIZER                 15
90 #define ESS_SPATIALIZER_ENABLE          16
91 
92 #define ESS_18X9_NDEVS                  17
93 
94 #define ESS_DAC_REC_VOL                 15
95 #define ESS_MIC_REC_VOL                 16
96 #define ESS_LINE_REC_VOL      17
97 #define ESS_SYNTH_REC_VOL     18
98 #define ESS_CD_REC_VOL                  19
99 #define ESS_AUXB_REC_VOL      20
100 #define ESS_MIC_PREAMP                  21
101 
102 #define ESS_1888_NDEVS                  22
103 #define ESS_MAX_NDEVS                   22
104 
105 struct ess_audio_channel
106 {
107           int       drq;                          /* DMA channel */
108           bus_size_t maxsize;           /* max size for DMA channel */
109 #define IS16BITDRQ(drq) ((drq) >= 4)
110           int       irq;                          /* IRQ line for this DMA channel */
111           int       ist;
112           void      *ih;                          /* interrupt vectoring */
113           u_long    nintr;                        /* number of interrupts taken */
114           void      (*intr)(void*);               /* ISR for DMA complete */
115           void      *arg;                         /* arg for intr() */
116 
117           /* Status information */
118           int       active;                       /* boolean: channel in use? */
119 
120           /* Polling state */
121           int       polled;                       /* 1 if channel is polled */
122           int       dmapos;                       /* last DMA pointer */
123           int       buffersize;                   /* size of DMA buffer */
124           /* (The following is only needed due to the stupid block interface.) */
125           int       dmacount;           /* leftover partial block */
126           int       blksize;            /* current block size */
127 };
128 
129 struct ess_softc
130 {
131           device_t sc_dev;              /* base device */
132           isa_chipset_tag_t sc_ic;
133           bus_space_tag_t sc_iot;                 /* tag */
134           bus_space_handle_t sc_ioh;    /* handle */
135           kmutex_t sc_lock;
136           kmutex_t sc_intr_lock;
137 
138           callout_t sc_poll1_ch;                  /* audio1 poll */
139           callout_t sc_poll2_ch;                  /* audio2 poll */
140 
141           int       sc_iobase;                    /* I/O port base address */
142 
143           u_short   sc_open;            /* reference count of open calls */
144 
145           int ndevs;
146           u_char    gain[ESS_MAX_NDEVS][2];       /* kept in input levels */
147 #define ESS_LEFT 0
148 #define ESS_RIGHT 1
149 
150           u_int     out_port;           /* output port */
151           u_int     in_mask;            /* input ports */
152           u_int     in_port;            /* XXX needed for MI interface */
153 
154           u_int     spkr_state;                   /* non-null is on */
155 
156           struct ess_audio_channel sc_audio1; /* audio channel for record */
157           struct ess_audio_channel sc_audio2; /* audio channel for playback */
158 
159           u_int     sc_model;
160 #define ESS_UNSUPPORTED 0
161 #define   ESS_688             1
162 #define   ESS_1688  2
163 #define ESS_1788    3
164 #define ESS_1868    4
165 #define ESS_1869    5
166 #define ESS_1878    6
167 #define ESS_1879    7
168 #define ESS_888               8
169 #define ESS_1887    9
170 #define ESS_1888    10
171 
172           u_int     sc_version;                   /* Legacy ES688/ES1688 ID */
173 
174           u_int     sc_spatializer;               /* spatializer enable */
175 
176           /* game port on es1888 */
177           bus_space_tag_t sc_joy_iot;
178           bus_space_handle_t sc_joy_ioh;
179 };
180 
181 int       essmatch(struct ess_softc *);
182 void      essattach(struct ess_softc *, int);
183 int       ess_config_addr(struct ess_softc *);
184 
185