1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 /*
26  * Purpose: Definitions for the Creative/Ensoniq AudioPCI97 driver.
27  */
28 /*
29  * This file is part of Open Sound System
30  *
31  * Copyright (C) 4Front Technologies 1996-2008.
32  *
33  * This software is released under CDDL 1.0 source license.
34  * See the COPYING file included in the main directory of this source
35  * distribution for the license terms and conditions.
36  */
37 
38 #ifndef	_AUDIOPCI_H
39 #define	_AUDIOPCI_H
40 
41 /* CONCERT PCI-SIG defines */
42 #define	CONC_PCI_VENDID		0x1274U
43 #define	CONC_PCI_DEVID		0x5000U
44 
45 /* used for the development board only!! */
46 #define	CONC_DEV_PCI_VENDID	0x1274U
47 #define	CONC_DEV_PCI_DEVID	0x5000U
48 
49 
50 /*
51  * CONCERT Registers
52  */
53 
54 #define	DAC_CLOCK_DIVIDE	22579200UL	/* DAC2 (CODEC) clock divide */
55 
56 /* Concert direct register offset defines */
57 
58 #define	CONC_bDEVCTL_OFF	0x00	/* Device control/enable */
59 #define	CONC_bMISCCTL_OFF	0x01	/* Miscellaneous control */
60 #define	CONC_wDACRATE_OFF	0x02	/* CODEC clock divider for PLL */
61 #define	CONC_dSTATUS_OFF	0x04	/* long status register */
62 #define	CONC_bCODECSTAT_OFF	0x05	/* CODEC interface status */
63 #define	CONC_bUARTDATA_OFF	0x08	/* UART data R/W - read clears RX int */
64 #define	CONC_bUARTCSTAT_OFF	0x09	/* UART control and status */
65 #define	CONC_bMEMPAGE_OFF	0x0c	/* Memory page select */
66 #define	CONC_wCODECCTL_OFF	0x10	/* CODEC control - word-write-only */
67 #define	CONC_wNMISTAT_OFF	0x18	/* Legacy NMI status */
68 #define	CONC_bNMIENA_OFF	0x1a	/* Legacy NMI enable */
69 #define	CONC_bNMICTL_OFF	0x1b	/* Legacy control */
70 #define	CONC_bSERFMT_OFF	0x20	/* Serial device control */
71 #define	CONC_bSERCTL_OFF	0x21	/* Serial device format */
72 #define	CONC_bSKIPC_OFF		0x22	/* Skip counts for DAC (wave) */
73 #define	CONC_wSYNIC_OFF		0x24	/* Synth int count in sample frames */
74 #define	CONC_wSYNCIC_OFF	0x26	/* Synth current int count */
75 #define	CONC_wDACIC_OFF		0x28	/* DAC int count in sample frames */
76 #define	CONC_wDACCIC_OFF	0x2a	/* DAC current int count */
77 #define	CONC_wADCIC_OFF		0x2c	/* ADC int count in sample frames */
78 #define	CONC_wADCCIC_OFF	0x2e	/* ADC current int count */
79 #define	CONC_MEMBASE_OFF	0x30	/* Memory window base - 16 bytes */
80 
81 /* Device Control defines */
82 #define	CONC_DEVCTL_SERR_DIS	0x01	/* internal PCI serr bus enable */
83 #define	CONC_DEVCTL_CODEC_EN	0x02	/* CoDec Enable */
84 #define	CONC_DEVCTL_JSTICK_EN	0x04	/* Joystick Enable */
85 #define	CONC_DEVCTL_UART_EN	0x08	/* UART Enable */
86 #define	CONC_DEVCTL_ADC_EN	0x10	/* ADC Enable (record) */
87 #define	CONC_DEVCTL_DAC_EN	0x20	/* DAC Enable (playback) */
88 #define	CONC_DEVCTL_SYN_EN	0x40	/* Synth Enable */
89 #define	CONC_DEVCTL_MICBIAS	0x4000L	/* mic bias switch */
90 
91 /* Misc Control defines */
92 #define	CONC_MISCCTL_MUTE	0x01	/* XTL0 wired to mute */
93 #define	CONC_MISCCTL_CCB_INTRM	0x04	/* CCB interrupt mask */
94 #define	CONC_MISCCTL_SYN_5KHZ	0x00	/* synth: 5512 Hz */
95 #define	CONC_MISCCTL_SYN_11KHZ	0x10	/* synth: 11025 Hz */
96 #define	CONC_MISCCTL_SYN_22KHZ	0x20	/* synth: 22050 Hz */
97 #define	CONC_MISCCTL_SYN_44KHZ	0x30	/* synth: 44100 Hz */
98 
99 /* Interrupt Status defines */
100 #define	CONC_INTSTAT_ADCINT	0x01	/* A/D interrupt pending bit */
101 #define	CONC_INTSTAT_DACINT	0x02	/* DAC interrupt pending bit */
102 #define	CONC_INTSTAT_SYNINT	0x04	/* synth interrupt pending bit */
103 #define	CONC_INTSTAT_UARTINT	0x08	/* UART interrupt pending bit */
104 #define	CONC_INTSTAT_PENDING	0x80000000
105 			/* this bit set high while'st we have an interrupt */
106 
107 /* Codec Status defines */
108 #define	CONC_CSTAT_CSTAT	0x4
109 #define	CONC_CSTAT_CBUSY	0x2
110 #define	CONC_CSTAT_CWRIP	0x1
111 
112 /* SERFMT PCM format defines */
113 #define	CONC_PCM_SYN_STEREO	0x01
114 #define	CONC_PCM_SYN_16BIT	0x02
115 #define	CONC_PCM_DAC_STEREO	0x04
116 #define	CONC_PCM_DAC_16BIT	0x08
117 #define	CONC_PCM_ADC_STEREO	0x10
118 #define	CONC_PCM_ADC_16BIT	0x20
119 
120 /* Serial Control defines */
121 #define	CONC_SERCTL_SYNIE	0x01	/* synth int enable */
122 #define	CONC_SERCTL_DACIE	0x02	/* playback interrupt enable */
123 #define	CONC_SERCTL_ADCIE	0x04	/* record interrupt enable */
124 #define	CONC_SERCTL_SYNPAUSE	0x10	/* playback pause */
125 
126 /* Concert memory page-banked register offset defines */
127 #define	CONC_dSYNPADDR_OFF	0x30	/* Synth host frame PCI phys addr */
128 #define	CONC_wSYNFC_OFF		0x34	/* Synth host frame count in DWORDS */
129 #define	CONC_wSYNCFC_OFF	0x36	/* Synth host current frame count */
130 #define	CONC_dDACPADDR_OFF	0x38	/* DAC host frame PCI phys addr */
131 #define	CONC_wDACFC_OFF		0x3c	/* DAC host frame count in DWORDS */
132 #define	CONC_wDACCFC_OFF	0x3e	/* DAC host current frame count */
133 #define	CONC_dADCPADDR_OFF	0x30	/* ADC host frame PCI phys addr */
134 #define	CONC_wADCFC_OFF		0x34	/* ADC host frame count in DWORDS */
135 #define	CONC_wADCCFC_OFF	0x36	/* ADC host current frame count */
136 
137 /* Concert memory page number defines */
138 #define	CONC_SYNRAM_PAGE	0x00	/* Synth host/serial I/F RAM */
139 #define	CONC_DACRAM_PAGE	0x04	/* DAC host/serial I/F RAM */
140 #define	CONC_ADCRAM_PAGE	0x08	/* ADC host/serial I/F RAM */
141 #define	CONC_SYNCTL_PAGE	0x0c	/* Page bank for synth host control */
142 #define	CONC_DACCTL_PAGE	0x0c	/* Page bank for DAC host control */
143 #define	CONC_ADCCTL_PAGE	0x0d	/* Page bank for ADC host control */
144 #define	CONC_FIFO0_PAGE		0x0e	/* page 0 of UART "FIFO" (rx stash) */
145 #define	CONC_FIFO1_PAGE		0x0f	/* page 1 of UART "FIFO" (rx stash) */
146 
147 /* UARTCSTAT register masks  */
148 #define	CONC_UART_RXRDY		0x01
149 #define	CONC_UART_TXRDY		0x02
150 #define	CONC_UART_TXINT		0x04
151 #define	CONC_UART_RXINT		0x80
152 
153 #define	CONC_UART_CTL		0x03
154 #define	CONC_UART_TXINTEN	0x20
155 #define	CONC_UART_RXINTEN	0x80
156 
157 /*
158  * CODEC register map
159  */
160 #define	NUMREGS			32	/* total number of registers */
161 #define	NUMVOLS			16	/* number of vol regs */
162 
163 /* Source and output volume control defines */
164 #define	CODEC_VOL_MASTER_L	0x00U	/* Master out, left */
165 #define	CODEC_VOL_MASTER_R	0x01U	/* Master out, right */
166 #define	CODEC_VOL_WAVE_L	0x02U	/* Wave DAC, left */
167 #define	CODEC_VOL_WAVE_R	0x03U	/* Wave DAC, right */
168 #define	CODEC_VOL_SYNTH_L	0x04U	/* Synth DAC, left */
169 #define	CODEC_VOL_SYNTH_R	0x05U	/* Synth DAC, right */
170 #define	CODEC_VOL_CD_L		0x06U	/* CD audio, left */
171 #define	CODEC_VOL_CD_R		0x07U	/* CD audio, right */
172 #define	CODEC_VOL_AUX_L		0x08U	/* Aux line source, left */
173 #define	CODEC_VOL_AUX_R		0x09U	/* Aux line source, right */
174 #define	CODEC_VOL_TV_L		0x0aU	/* TV Tuner, left */
175 #define	CODEC_VOL_TV_R		0x0bU	/* TV Tuner, right */
176 #define	CODEC_VOL_TAD		0x0cU	/* TAD monitor, mono */
177 #define	CODEC_VOL_MONO2		0x0dU	/* Unused MONO2 */
178 #define	CODEC_VOL_MIC		0x0eU	/* Mic, mono */
179 #define	CODEC_VOL_MONO		0x0fU	/* Mono out volume */
180 
181 /* Input bus enable defines -SW1 */
182 #define	CODEC_IN_ENABLE_MIC	0x01U	/* Mic enable, mono */
183 #define	CODEC_IN_ENABLE_CD_R	0x02U	/* CD audio enable, right */
184 #define	CODEC_IN_ENABLE_CD_L	0x04U	/* CD audio enable, left */
185 #define	CODEC_IN_ENABLE_AUX_R	0x08U	/* Aux line source enable, right */
186 #define	CODEC_IN_ENABLE_AUX_L	0x10U	/* Aux line source enable, left */
187 #define	CODEC_IN_ENABLE_SYNTH_R 0x20U	/* Synth DAC enable, right */
188 #define	CODEC_IN_ENABLE_SYNTH_L 0x40U	/* Synth DAC enable, left */
189 
190 /* Input bus enable defines - SW2 */
191 #define	CODEC_IN_ENABLE_TAD	0x01U	/* TAD monitor enable, mono */
192 #define	CODEC_IN_ENABLE_MONO2	0x02U	/* Unused MONO2 enable, mono */
193 #define	CODEC_IN_ENABLE_WAVE	0x04U	/* Wave DAC enable */
194 #define	CODEC_IN_ENABLE_TV_R	0x08U	/* TV Tuner enable, right */
195 #define	CODEC_IN_ENABLE_TV_L	0x10U	/* TV Tuner enable, left */
196 #define	CODEC_IN_ENABLE_TMONO2	0x20U	/* unboosted MONO2 */
197 #define	CODEC_IN_ENABLE_TMONO1	0x40U	/* unboosted MONO1 */
198 #define	CODEC_IN_ENABLE_TMIC	0x80U	/* unboosted MONO3 (mic) */
199 
200 /* Output bus enable defines - SW1 */
201 #define	CODEC_OUT_ENABLE_MIC	0x01U	/* Mic enable, mono */
202 #define	CODEC_OUT_ENABLE_CD	0x06U	/* CD audio enable, stereo */
203 #define	CODEC_OUT_ENABLE_AUX	0x18U	/* Aux line source enable, stereo */
204 #define	CODEC_OUT_ENABLE_SYNTH	0x60U	/* Synth DAC enable, stereo */
205 
206 /* Output bus enable defines - SW2 */
207 #define	CODEC_OUT_ENABLE_TAD	0x01U	/* TAD monitor enable, mono */
208 #define	CODEC_OUT_ENABLE_MONO2	0x02U	/* Unused MONO2 enable, mono */
209 #define	CODEC_OUT_ENABLE_WAVE	0x0cU	/* Wave DAC enable, stereo */
210 #define	CODEC_OUT_ENABLE_TV	0x30U	/* TV Tuner enable, stereo */
211 
212 /* Volume setting constants */
213 #define	CODEC_ATT_MUTE		0x80U
214 #define	CODEC_ATT_MAX		0x1fU
215 #define	CODEC_ATT_MONO		0x07U
216 
217 /* Control function defines */
218 #define	CODEC_CTL_4SPKR		0x00U	/* 4-spkr output mode enable */
219 #define	CODEC_CTL_MICBOOST	0x01U	/* Mic boost (+30 dB) enable */
220 
221 /* Miscellaneous CODEC defines for internal use */
222 #define	CODEC_OUT_SW1		0x10U
223 #define	CODEC_OUT_SW2		0x11U
224 #define	CODEC_LIN_SW1		0x12U
225 #define	CODEC_RIN_SW1		0x13U
226 #define	CODEC_LIN_SW2		0x14U
227 #define	CODEC_RIN_SW2		0x15U
228 #define	CODEC_RESET_PWRD	0x16U
229 #define	CODEC_CLKSELECT		0x17U
230 #define	CODEC_ADSELECT		0x18U
231 #define	CODEC_MICBOOST		0x19U
232 
233 #endif	/* _AUDIOPCI_H */
234