xref: /openbsd-src/sys/dev/pci/ydsreg.h (revision d8f12e49120d080a2566d347f43bb5a3dcf6c2ed)
1*d8f12e49Sjakemsr /*	$OpenBSD: ydsreg.h,v 1.7 2010/09/17 07:55:52 jakemsr Exp $	*/
2c28d1257Saaron /*	$NetBSD$	*/
3c28d1257Saaron 
4c28d1257Saaron /*
5c28d1257Saaron  * Copyright (c) 2000, 2001 Kazuki Sakamoto and Minoura Makoto.
6c28d1257Saaron  * All rights reserved.
7c28d1257Saaron  *
8c28d1257Saaron  * Redistribution and use in source and binary forms, with or without
9c28d1257Saaron  * modification, are permitted provided that the following conditions
10c28d1257Saaron  * are met:
11c28d1257Saaron  * 1. Redistributions of source code must retain the above copyright
12c28d1257Saaron  *    notice, this list of conditions and the following disclaimer.
13c28d1257Saaron  * 2. Redistributions in binary form must reproduce the above copyright
14c28d1257Saaron  *    notice, this list of conditions and the following disclaimer in the
15c28d1257Saaron  *    documentation and/or other materials provided with the distribution.
16c28d1257Saaron  *
17c28d1257Saaron  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18c28d1257Saaron  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19c28d1257Saaron  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20c28d1257Saaron  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21c28d1257Saaron  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22c28d1257Saaron  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23c28d1257Saaron  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24c28d1257Saaron  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25c28d1257Saaron  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26c28d1257Saaron  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27c28d1257Saaron  */
28c28d1257Saaron 
29c28d1257Saaron /*
30c28d1257Saaron  * YMF724/740/744/754 registers
31c28d1257Saaron  */
32c28d1257Saaron 
33c28d1257Saaron #ifndef _DEV_PCI_YDSREG_H_
34c28d1257Saaron #define	_DEV_PCI_YDSREG_H_
35c28d1257Saaron 
36c28d1257Saaron /*
37c28d1257Saaron  * PCI Config Registers
38c28d1257Saaron  */
39c28d1257Saaron #define	YDS_PCI_MBA		0x10
40c28d1257Saaron #define	YDS_PCI_LEGACY		0x40
41c28d1257Saaron # define YDS_PCI_LEGACY_SBEN	0x0001
42c28d1257Saaron # define YDS_PCI_LEGACY_FMEN	0x0002
43c28d1257Saaron # define YDS_PCI_LEGACY_JPEN	0x0004
44c28d1257Saaron # define YDS_PCI_LEGACY_MEN	0x0008
45c28d1257Saaron # define YDS_PCI_LEGACY_MIEN	0x0010
46c28d1257Saaron # define YDS_PCI_LEGACY_IO	0x0020
47c28d1257Saaron # define YDS_PCI_LEGACY_SDMA0	0x0000
48c28d1257Saaron # define YDS_PCI_LEGACY_SDMA1	0x0040
49c28d1257Saaron # define YDS_PCI_LEGACY_SDMA3	0x00c0
50c28d1257Saaron # define YDS_PCI_LEGACY_SBIRQ5	0x0000
51c28d1257Saaron # define YDS_PCI_LEGACY_SBIRQ7	0x0100
52c28d1257Saaron # define YDS_PCI_LEGACY_SBIRQ9	0x0200
53c28d1257Saaron # define YDS_PCI_LEGACY_SBIRQ10	0x0300
54c28d1257Saaron # define YDS_PCI_LEGACY_SBIRQ11	0x0400
55c28d1257Saaron # define YDS_PCI_LEGACY_MPUIRQ5	0x0000
56c28d1257Saaron # define YDS_PCI_LEGACY_MPUIRQ7	0x0800
57c28d1257Saaron # define YDS_PCI_LEGACY_MPUIRQ9	0x1000
58c28d1257Saaron # define YDS_PCI_LEGACY_MPUIRQ10 0x1800
59c28d1257Saaron # define YDS_PCI_LEGACY_MPUIRQ11 0x2000
60c28d1257Saaron # define YDS_PCI_LEGACY_SIEN	0x4000
61c28d1257Saaron # define YDS_PCI_LEGACY_LAD	0x8000
62c28d1257Saaron 
63c28d1257Saaron # define YDS_PCI_EX_LEGACY_FMIO_388	(0x0000 << 16)
64c28d1257Saaron # define YDS_PCI_EX_LEGACY_FMIO_398	(0x0001 << 16)
65c28d1257Saaron # define YDS_PCI_EX_LEGACY_FMIO_3A0	(0x0002 << 16)
66c28d1257Saaron # define YDS_PCI_EX_LEGACY_FMIO_3A8	(0x0003 << 16)
67c28d1257Saaron # define YDS_PCI_EX_LEGACY_SBIO_220	(0x0000 << 16)
68c28d1257Saaron # define YDS_PCI_EX_LEGACY_SBIO_240	(0x0004 << 16)
69c28d1257Saaron # define YDS_PCI_EX_LEGACY_SBIO_260	(0x0008 << 16)
70c28d1257Saaron # define YDS_PCI_EX_LEGACY_SBIO_280	(0x000c << 16)
71c28d1257Saaron # define YDS_PCI_EX_LEGACY_MPUIO_330	(0x0000 << 16)
72c28d1257Saaron # define YDS_PCI_EX_LEGACY_MPUIO_300	(0x0010 << 16)
73c28d1257Saaron # define YDS_PCI_EX_LEGACY_MPUIO_332	(0x0020 << 16)
74c28d1257Saaron # define YDS_PCI_EX_LEGACY_MPUIO_334	(0x0030 << 16)
75c28d1257Saaron # define YDS_PCI_EX_LEGACY_JSIO_201	(0x0000 << 16)
76c28d1257Saaron # define YDS_PCI_EX_LEGACY_JSIO_202	(0x0040 << 16)
77c28d1257Saaron # define YDS_PCI_EX_LEGACY_JSIO_204	(0x0080 << 16)
78c28d1257Saaron # define YDS_PCI_EX_LEGACY_JSIO_205	(0x00c0 << 16)
79c28d1257Saaron # define YDS_PCI_EX_LEGACY_MAIM		(0x0100 << 16)
80336946fdSmarkus # define YDS_PCI_EX_LEGACY_SMOD_PCI	(0x0000 << 16)
81336946fdSmarkus # define YDS_PCI_EX_LEGACY_SMOD_DISABLE	(0x0800 << 16)
82336946fdSmarkus # define YDS_PCI_EX_LEGACY_SMOD_DDMA	(0x1000 << 16)
83c28d1257Saaron # define YDS_PCI_EX_LEGACY_SBVER_3	(0x0000 << 16)
84c28d1257Saaron # define YDS_PCI_EX_LEGACY_SBVER_2	(0x2000 << 16)
85c28d1257Saaron # define YDS_PCI_EX_LEGACY_SBVER_1	(0x4000 << 16)
86c28d1257Saaron # define YDS_PCI_EX_LEGACY_IMOD		(0x8000 << 16)
87c28d1257Saaron 
88c28d1257Saaron #define	YDS_PCI_DSCTRL		0x48
89c28d1257Saaron # define YDS_DSCTRL_CRST	0x00000001
90c28d1257Saaron # define YDS_DSCTRL_WRST	0x00000004
91c28d1257Saaron 
92c28d1257Saaron #define YDS_PCI_FM_BA		0x60
93c28d1257Saaron #define YDS_PCI_SB_BA		0x62
94c28d1257Saaron #define YDS_PCI_MPU_BA		0x64
95c28d1257Saaron #define YDS_PCI_JS_BA		0x66
96c28d1257Saaron 
97c28d1257Saaron /*
98c28d1257Saaron  * DS-1 PCI Audio part registers
99c28d1257Saaron  */
100c28d1257Saaron #define YDS_INTERRUPT_FLAGS	0x0004
101c28d1257Saaron #define YDS_INTERRUPT_FLAGS_TI	0x0001
102c28d1257Saaron #define YDS_ACTIVITY		0x0006
103c28d1257Saaron # define YDS_ACTIVITY_DOCKA	0x0010
104c28d1257Saaron #define	YDS_GLOBAL_CONTROL	0x0008
105c28d1257Saaron # define YDS_GLCTRL_HVE		0x0001
106c28d1257Saaron # define YDS_GLCTRL_HVIE	0x0002
107c28d1257Saaron 
108c28d1257Saaron #define YDS_GPIO_IIF		0x0050
109c28d1257Saaron # define YDS_GPIO_GIO0		0x0001
110c28d1257Saaron # define YDS_GPIO_GIO1		0x0002
111c28d1257Saaron # define YDS_GPIO_GIO2		0x0004
112c28d1257Saaron #define YDS_GPIO_IIE		0x0052
113c28d1257Saaron # define YDS_GPIO_GIE0		0x0001
114c28d1257Saaron # define YDS_GPIO_GIE1		0x0002
115c28d1257Saaron # define YDS_GPIO_GIE2		0x0004
116c28d1257Saaron #define YDS_GPIO_ISTAT		0x0054
117c28d1257Saaron # define YDS_GPIO_GPI0		0x0001
118c28d1257Saaron # define YDS_GPIO_GPI1		0x0002
119c28d1257Saaron # define YDS_GPIO_GPI2		0x0004
120c28d1257Saaron #define YDS_GPIO_OCTRL		0x0056
121c28d1257Saaron # define YDS_GPIO_GPO0		0x0001
122c28d1257Saaron # define YDS_GPIO_GPO1		0x0002
123c28d1257Saaron # define YDS_GPIO_GPO2		0x0004
124c28d1257Saaron #define YDS_GPIO_FUNCE		0x0058
125c28d1257Saaron # define YDS_GPIO_GPC0		0x0001
126c28d1257Saaron # define YDS_GPIO_GPC1		0x0002
127c28d1257Saaron # define YDS_GPIO_GPC2		0x0004
128c28d1257Saaron # define YDS_GPIO_GPE0		0x0010
129c28d1257Saaron # define YDS_GPIO_GPE1		0x0020
130c28d1257Saaron # define YDS_GPIO_GPE2		0x0040
131c28d1257Saaron #define YDS_GPIO_ITYPE		0x005a
132c28d1257Saaron # define YDS_GPIO_GPT0_LEVEL	0x0000
133c28d1257Saaron # define YDS_GPIO_GPT0_RISE	0x0001
134c28d1257Saaron # define YDS_GPIO_GPT0_FALL	0x0002
135c28d1257Saaron # define YDS_GPIO_GPT0_BOTH	0x0003
136c28d1257Saaron # define YDS_GPIO_GPT0_MASK	0x0003
137c28d1257Saaron # define YDS_GPIO_GPT1_LEVEL	0x0004
138c28d1257Saaron # define YDS_GPIO_GPT1_RISE	0x0005
139c28d1257Saaron # define YDS_GPIO_GPT1_FALL	0x0006
140c28d1257Saaron # define YDS_GPIO_GPT1_BOTH	0x0007
141c28d1257Saaron # define YDS_GPIO_GPT1_MASK	0x0007
142c28d1257Saaron # define YDS_GPIO_GPT2_LEVEL	0x0000
143c28d1257Saaron # define YDS_GPIO_GPT2_RISE	0x0010
144c28d1257Saaron # define YDS_GPIO_GPT2_FALL	0x0020
145c28d1257Saaron # define YDS_GPIO_GPT2_BOTH	0x0030
146c28d1257Saaron # define YDS_GPIO_GPT2_MASK	0x0030
147c28d1257Saaron 
148c28d1257Saaron #define	YDS_GLOBAL_CONTROL	0x0008
149c28d1257Saaron # define YDS_GLCTRL_HVE		0x0001
150c28d1257Saaron # define YDS_GLCTRL_HVIE	0x0002
151c28d1257Saaron 
152c28d1257Saaron #define	AC97_CMD_DATA		0x0060
153c28d1257Saaron #define	AC97_CMD_ADDR		0x0062
154c28d1257Saaron # define AC97_ID(id)		((id) << 8)
155c28d1257Saaron # define AC97_CMD_READ		0x8000
156c28d1257Saaron # define AC97_CMD_WRITE		0x0000
157c28d1257Saaron #define	AC97_STAT_DATA1		0x0064
158c28d1257Saaron #define	AC97_STAT_ADDR1		0x0066
159c28d1257Saaron #define	AC97_STAT_DATA2		0x0068
160c28d1257Saaron #define	AC97_STAT_ADDR2		0x006a
161c28d1257Saaron # define AC97_BUSY		0x8000
162c28d1257Saaron 
163c28d1257Saaron #define	YDS_LEGACY_OUT_VOLUME	0x0080
164c28d1257Saaron #define	YDS_DAC_OUT_VOLUME	0x0084
165c28d1257Saaron #define	YDS_DAC_OUT_VOL_L	0x0084
166c28d1257Saaron #define	YDS_DAC_OUT_VOL_R	0x0086
167c28d1257Saaron #define	YDS_ZV_OUT_VOLUME	0x0088
168c28d1257Saaron #define	YDS_2ND_OUT_VOLUME	0x008C
169c28d1257Saaron #define	YDS_ADC_OUT_VOLUME	0x0090
170c28d1257Saaron #define	YDS_LEGACY_REC_VOLUME	0x0094
171c28d1257Saaron #define	YDS_DAC_REC_VOLUME	0x0098
172c28d1257Saaron #define	YDS_ZV_REC_VOLUME	0x009C
173c28d1257Saaron #define	YDS_2ND_REC_VOLUME	0x00A0
174c28d1257Saaron #define	YDS_ADC_REC_VOLUME	0x00A4
175c28d1257Saaron #define	YDS_ADC_IN_VOLUME	0x00A8
176c28d1257Saaron #define	YDS_REC_IN_VOLUME	0x00AC
177c28d1257Saaron #define	YDS_P44_OUT_VOLUME	0x00B0
178c28d1257Saaron #define	YDS_P44_REC_VOLUME	0x00B4
179c28d1257Saaron #define	YDS_SPDIFIN_OUT_VOLUME	0x00B8
180c28d1257Saaron #define	YDS_SPDIFIN_REC_VOLUME	0x00BC
181c28d1257Saaron 
182c28d1257Saaron #define	YDS_ADC_SAMPLE_RATE	0x00c0
183c28d1257Saaron #define	YDS_REC_SAMPLE_RATE	0x00c4
184c28d1257Saaron #define	YDS_ADC_FORMAT		0x00c8
185c28d1257Saaron #define	YDS_REC_FORMAT		0x00cc
186c28d1257Saaron # define YDS_FORMAT_8BIT	0x01
187c28d1257Saaron # define YDS_FORMAT_STEREO	0x02
188c28d1257Saaron 
189c28d1257Saaron #define	YDS_STATUS		0x0100
190c28d1257Saaron # define YDS_STAT_ACT		0x00000001
191c28d1257Saaron # define YDS_STAT_WORK		0x00000002
192c28d1257Saaron # define YDS_STAT_TINT		0x00008000
193c28d1257Saaron # define YDS_STAT_INT		0x80000000
194c28d1257Saaron #define	YDS_CONTROL_SELECT	0x0104
195c28d1257Saaron # define YDS_CSEL		0x00000001
196c28d1257Saaron #define	YDS_MODE		0x0108
197c28d1257Saaron # define YDS_MODE_ACTV		0x00000001
198c28d1257Saaron # define YDS_MODE_ACTV2		0x00000002
199c28d1257Saaron # define YDS_MODE_TOUT		0x00008000
200c28d1257Saaron # define YDS_MODE_RESET		0x00010000
201c28d1257Saaron # define YDS_MODE_AC3		0x40000000
202c28d1257Saaron # define YDS_MODE_MUTE		0x80000000
203c28d1257Saaron 
204c28d1257Saaron #define	YDS_CONFIG		0x0114
205c28d1257Saaron # define YDS_DSP_DISABLE	0
206c28d1257Saaron # define YDS_DSP_SETUP		0x00000001
207c28d1257Saaron 
208c28d1257Saaron #define	YDS_PLAY_CTRLSIZE	0x0140
209c28d1257Saaron #define	YDS_REC_CTRLSIZE	0x0144
210c28d1257Saaron #define	YDS_EFFECT_CTRLSIZE	0x0148
211c28d1257Saaron #define	YDS_WORK_SIZE		0x014c
212c28d1257Saaron #define	YDS_MAPOF_REC		0x0150
213c28d1257Saaron # define YDS_RECSLOT_VALID	0x00000001
214c28d1257Saaron # define YDS_ADCSLOT_VALID	0x00000002
215c28d1257Saaron #define	YDS_MAPOF_EFFECT	0x0154
216c28d1257Saaron # define YDS_DL_VALID		0x00000001
217c28d1257Saaron # define YDS_DR_VALID		0x00000002
218c28d1257Saaron # define YDS_EFFECT1_VALID	0x00000004
219c28d1257Saaron # define YDS_EFFECT2_VALID	0x00000008
220c28d1257Saaron # define YDS_EFFECT3_VALID	0x00000010
221c28d1257Saaron 
222c28d1257Saaron #define	YDS_PLAY_CTRLBASE	0x0158
223c28d1257Saaron #define	YDS_REC_CTRLBASE	0x015c
224c28d1257Saaron #define	YDS_EFFECT_CTRLBASE	0x0160
225c28d1257Saaron #define	YDS_WORK_BASE		0x0164
226c28d1257Saaron 
227c28d1257Saaron #define	YDS_DSP_INSTRAM		0x1000
228c28d1257Saaron #define	YDS_CTRL_INSTRAM	0x4000
229c28d1257Saaron 
230c28d1257Saaron typedef enum {
231c28d1257Saaron 	YDS_DS_1,
232c28d1257Saaron 	YDS_DS_1E
233c28d1257Saaron } yds_dstype_t;
234c28d1257Saaron 
235c28d1257Saaron #define	AC97_TIMEOUT		1000
236c28d1257Saaron #define	YDS_WORK_TIMEOUT	250000
237c28d1257Saaron 
238c28d1257Saaron /* slot control data structures */
239c28d1257Saaron #define	MAX_PLAY_SLOT_CTRL	64
240c28d1257Saaron #define	N_PLAY_SLOT_CTRL_BANK	2
241c28d1257Saaron #define	N_REC_SLOT_CTRL		2
242c28d1257Saaron #define	N_REC_SLOT_CTRL_BANK	2
243c28d1257Saaron 
244c28d1257Saaron /*
245c28d1257Saaron  * play slot
246c28d1257Saaron  */
247c28d1257Saaron union play_slot_table {
248c28d1257Saaron 	u_int32_t numofplay;
249c28d1257Saaron 	u_int32_t slotbase;
250c28d1257Saaron };
251c28d1257Saaron 
252c28d1257Saaron struct play_slot_ctrl_bank {
253c28d1257Saaron 	u_int32_t format;
254c28d1257Saaron #define	PSLT_FORMAT_STEREO	0x00010000
255c28d1257Saaron #define	PSLT_FORMAT_8BIT	0x80000000
256c28d1257Saaron #define	PSLT_FORMAT_SRC441	0x10000000
257c28d1257Saaron #define PSLT_FORMAT_RCH		0x00000001
258c28d1257Saaron 	u_int32_t loopdefault;
259c28d1257Saaron 	u_int32_t pgbase;
260c28d1257Saaron 	u_int32_t pgloop;
261c28d1257Saaron 	u_int32_t pgloopend;
262c28d1257Saaron 	u_int32_t pgloopfrac;
263c28d1257Saaron 	u_int32_t pgdeltaend;
264c28d1257Saaron 	u_int32_t lpfkend;
265c28d1257Saaron 	u_int32_t eggainend;
266c28d1257Saaron 	u_int32_t lchgainend;
267c28d1257Saaron 	u_int32_t rchgainend;
268c28d1257Saaron 	u_int32_t effect1gainend;
269c28d1257Saaron 	u_int32_t effect2gainend;
270c28d1257Saaron 	u_int32_t effect3gainend;
271c28d1257Saaron 	u_int32_t lpfq;
272c28d1257Saaron 	u_int32_t status;
273c28d1257Saaron #define	PSLT_STATUS_DEND	0x00000001
274c28d1257Saaron 	u_int32_t numofframes;
275c28d1257Saaron 	u_int32_t loopcount;
276c28d1257Saaron 	u_int32_t pgstart;
277c28d1257Saaron 	u_int32_t pgstartfrac;
278c28d1257Saaron 	u_int32_t pgdelta;
279c28d1257Saaron 	u_int32_t lpfk;
280c28d1257Saaron 	u_int32_t eggain;
281c28d1257Saaron 	u_int32_t lchgain;
282c28d1257Saaron 	u_int32_t rchgain;
283c28d1257Saaron 	u_int32_t effect1gain;
284c28d1257Saaron 	u_int32_t effect2gain;
285c28d1257Saaron 	u_int32_t effect3gain;
286c28d1257Saaron 	u_int32_t lpfd1;
287c28d1257Saaron 	u_int32_t lpfd2;
288c28d1257Saaron };
289c28d1257Saaron 
290c28d1257Saaron /*
291c28d1257Saaron  * rec slot
292c28d1257Saaron  */
293c28d1257Saaron struct rec_slot_ctrl_bank {
294c28d1257Saaron 	u_int32_t pgbase;
295c28d1257Saaron 	u_int32_t pgloopendadr;
296c28d1257Saaron 	u_int32_t pgstartadr;
297c28d1257Saaron 	u_int32_t numofloops;
298c28d1257Saaron };
299c28d1257Saaron 
300c28d1257Saaron struct rec_slot {
301c28d1257Saaron 	struct rec_slot_ctrl {
302c28d1257Saaron 		struct rec_slot_ctrl_bank bank[N_REC_SLOT_CTRL_BANK];
303c28d1257Saaron 	} ctrl[N_REC_SLOT_CTRL];
304c28d1257Saaron };
305c28d1257Saaron 
306c28d1257Saaron /*
307c28d1257Saaron  * effect slot
308c28d1257Saaron  */
309c28d1257Saaron struct effect_slot_ctrl_bank {
310c28d1257Saaron 	u_int32_t pgbase;
311c28d1257Saaron 	u_int32_t pgloopend;
312c28d1257Saaron 	u_int32_t pgstart;
313c28d1257Saaron 	u_int32_t temp;
314c28d1257Saaron };
315c28d1257Saaron 
31665b5a2beSderaadt #define N_PLAY_SLOTS		2		/* We use only 2 (R and L) */
31765b5a2beSderaadt #define	N_PLAY_SLOT_CTRL	2
31865b5a2beSderaadt #define WORK_SIZE		0x0400
31965b5a2beSderaadt 
32065b5a2beSderaadt /*
32165b5a2beSderaadt  * softc
32265b5a2beSderaadt  */
32365b5a2beSderaadt struct yds_dma {
32465b5a2beSderaadt 	bus_dmamap_t map;
32565b5a2beSderaadt 	caddr_t addr;			/* VA */
32665b5a2beSderaadt 	bus_dma_segment_t segs[1];
32765b5a2beSderaadt 	int nsegs;
32865b5a2beSderaadt 	size_t size;
32965b5a2beSderaadt 	struct yds_dma *next;
33065b5a2beSderaadt };
33165b5a2beSderaadt 
33265b5a2beSderaadt struct yds_codec_softc {
33365b5a2beSderaadt 	struct device sc_dev;		/* base device */
33465b5a2beSderaadt 	struct yds_softc *sc;
33565b5a2beSderaadt 	int id;
33665b5a2beSderaadt 	int status_data;
33765b5a2beSderaadt 	int status_addr;
33865b5a2beSderaadt 	struct ac97_host_if host_if;
33965b5a2beSderaadt 	struct ac97_codec_if *codec_if;
34065b5a2beSderaadt };
34165b5a2beSderaadt 
34265b5a2beSderaadt struct yds_softc {
34365b5a2beSderaadt 	struct device		sc_dev;		/* base device */
34465b5a2beSderaadt 	pci_chipset_tag_t	sc_pc;
34565b5a2beSderaadt 	pcitag_t		sc_pcitag;
34665b5a2beSderaadt 	pcireg_t		sc_id;
34765b5a2beSderaadt 	int			sc_revision;
34865b5a2beSderaadt 	void			*sc_ih;		/* interrupt vectoring */
34965b5a2beSderaadt 	bus_space_tag_t		memt;
35065b5a2beSderaadt 	bus_space_handle_t	memh;
35165b5a2beSderaadt 	bus_dma_tag_t		sc_dmatag;	/* DMA tag */
35265b5a2beSderaadt 	u_int			sc_flags;
35365b5a2beSderaadt 
35465b5a2beSderaadt 	struct yds_codec_softc	sc_codec[2];	/* Primary/Secondary AC97 */
35565b5a2beSderaadt 
35665b5a2beSderaadt 	struct yds_dma		*sc_dmas;	/* List of DMA handles */
35765b5a2beSderaadt 
35865b5a2beSderaadt 	/*
35965b5a2beSderaadt 	 * Play/record status
36065b5a2beSderaadt 	 */
36165b5a2beSderaadt 	struct {
36265b5a2beSderaadt 		void		(*intr)(void *); /* rint/pint */
36365b5a2beSderaadt 		void		*intr_arg;	/* arg for intr */
36465b5a2beSderaadt 		u_int	 	offset;		/* filled up to here */
36565b5a2beSderaadt 		u_int	 	blksize;
36665b5a2beSderaadt 		u_int	 	factor;		/* byte per sample */
36765b5a2beSderaadt 		u_int		length;		/* ring buffer length */
36865b5a2beSderaadt 		struct yds_dma	*dma;		/* DMA handle for ring buf */
36965b5a2beSderaadt 	} sc_play, sc_rec;
37065b5a2beSderaadt 
37165b5a2beSderaadt 	/*
37265b5a2beSderaadt 	 * DSP control data
37365b5a2beSderaadt 	 *
37465b5a2beSderaadt 	 * Work space, play control data table, play slot control data,
37565b5a2beSderaadt 	 * rec slot control data and effect slot control data are
37665b5a2beSderaadt 	 * stored in a single memory segment in this order.
37765b5a2beSderaadt 	 */
37865b5a2beSderaadt 	struct yds_dma			sc_ctrldata;
37965b5a2beSderaadt 	/* KVA and offset in buffer of play ctrl data tbl */
38065b5a2beSderaadt 	u_int32_t			*ptbl;
38165b5a2beSderaadt 	off_t				ptbloff;
38265b5a2beSderaadt 	/* KVA and offset in buffer of rec slot ctrl data */
38365b5a2beSderaadt 	struct rec_slot_ctrl_bank	*rbank;
38465b5a2beSderaadt 	off_t				rbankoff;
38565b5a2beSderaadt 	/* Array of KVA pointers and offset of play slot control data */
38665b5a2beSderaadt 	struct play_slot_ctrl_bank	*pbankp[N_PLAY_SLOT_CTRL_BANK
38765b5a2beSderaadt 					       *N_PLAY_SLOTS];
38865b5a2beSderaadt 	off_t				pbankoff;
38965b5a2beSderaadt 
39065b5a2beSderaadt 	/*
39165b5a2beSderaadt 	 * Legacy support
39265b5a2beSderaadt 	 */
39365b5a2beSderaadt 	bus_space_tag_t		sc_legacy_iot;
39465b5a2beSderaadt 	bus_space_handle_t	sc_opl_ioh;
39565b5a2beSderaadt 	struct device		*sc_mpu;
39665b5a2beSderaadt 	bus_space_handle_t	sc_mpu_ioh;
39765b5a2beSderaadt 
39865b5a2beSderaadt 	/*
39965b5a2beSderaadt 	 * Suspend/resume support
40065b5a2beSderaadt 	 */
40165b5a2beSderaadt 	int			suspend;
402*d8f12e49Sjakemsr 	int			sc_resume_active;
40365b5a2beSderaadt };
40465b5a2beSderaadt #define sc_opl_iot	sc_legacy_iot
40565b5a2beSderaadt #define sc_mpu_iot	sc_legacy_iot
40665b5a2beSderaadt 
407c28d1257Saaron #endif /* _DEV_PCI_YDSREG_H_ */
408