1/*	$NetBSD$	*/
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.26 $ (SHARK) $Date: 2011/11/23 23:07:32 $
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_DAC_REC_VOL		15
90#define ESS_MIC_REC_VOL		16
91#define ESS_LINE_REC_VOL	17
92#define ESS_SYNTH_REC_VOL	18
93#define ESS_CD_REC_VOL		19
94#define ESS_AUXB_REC_VOL	20
95#define ESS_MIC_PREAMP		21
96
97#define ESS_1888_NDEVS		22
98#define ESS_MAX_NDEVS		22
99
100struct ess_audio_channel
101{
102	int	drq;			/* DMA channel */
103	bus_size_t maxsize;		/* max size for DMA channel */
104#define IS16BITDRQ(drq) ((drq) >= 4)
105	int	irq;			/* IRQ line for this DMA channel */
106	int	ist;
107	void	*ih;			/* interrupt vectoring */
108	u_long	nintr;			/* number of interrupts taken */
109	void	(*intr)(void*);		/* ISR for DMA complete */
110	void	*arg;			/* arg for intr() */
111
112	/* Status information */
113	int	active;			/* boolean: channel in use? */
114
115	/* Polling state */
116	int	polled;			/* 1 if channel is polled */
117	int	dmapos;			/* last DMA pointer */
118	int	buffersize;		/* size of DMA buffer */
119	/* (The following is only needed due to the stupid block interface.) */
120	int	dmacount;		/* leftover partial block */
121	int	blksize;		/* current block size */
122};
123
124struct ess_softc
125{
126	device_t sc_dev;		/* base device */
127	isa_chipset_tag_t sc_ic;
128	bus_space_tag_t sc_iot;		/* tag */
129	bus_space_handle_t sc_ioh;	/* handle */
130	kmutex_t sc_lock;
131	kmutex_t sc_intr_lock;
132
133	callout_t sc_poll1_ch;		/* audio1 poll */
134	callout_t sc_poll2_ch;		/* audio2 poll */
135
136	int	sc_iobase;		/* I/O port base address */
137
138	u_short	sc_open;		/* reference count of open calls */
139
140	int ndevs;
141	u_char	gain[ESS_MAX_NDEVS][2];	/* kept in input levels */
142#define ESS_LEFT 0
143#define ESS_RIGHT 1
144
145	u_int	out_port;		/* output port */
146	u_int	in_mask;		/* input ports */
147	u_int	in_port;		/* XXX needed for MI interface */
148
149	u_int	spkr_state;		/* non-null is on */
150
151	struct ess_audio_channel sc_audio1; /* audio channel for record */
152	struct ess_audio_channel sc_audio2; /* audio channel for playback */
153
154	u_int	sc_model;
155#define ESS_UNSUPPORTED 0
156#define	ESS_688		1
157#define	ESS_1688	2
158#define ESS_1788	3
159#define ESS_1868	4
160#define ESS_1869	5
161#define ESS_1878	6
162#define ESS_1879	7
163#define ESS_888		8
164#define ESS_1887	9
165#define ESS_1888	10
166
167	u_int	sc_version;		/* Legacy ES688/ES1688 ID */
168
169	/* game port on es1888 */
170	bus_space_tag_t sc_joy_iot;
171	bus_space_handle_t sc_joy_ioh;
172};
173
174int	essmatch(struct ess_softc *);
175void	essattach(struct ess_softc *, int);
176int	ess_config_addr(struct ess_softc *);
177
178