1 /* $NetBSD: azalia.h,v 1.19 2008/06/07 16:32:38 freza Exp $ */
4 * Copyright (c) 2005 The NetBSD Foundation, Inc.
7 * This code is derived from software contributed to The NetBSD Foundation
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
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.
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.
32 #include <sys/types.h>
33 #include <sys/audioio.h>
35 /* ----------------------------------------------------------------
36 * High Definition Audio constant values
37 * ---------------------------------------------------------------- */
39 /* High Definition Audio registers */
40 #define HDA_GCAP 0x000 /* 2 */
41 #define HDA_GCAP_OSS(x) ((x & 0xf000) >> 12)
42 #define HDA_GCAP_ISS(x) ((x & 0x0f00) >> 8)
43 #define HDA_GCAP_BSS(x) ((x & 0x00f8) >> 3)
44 #define HDA_GCAP_NSDO_MASK 0x0006
45 #define HDA_GCAP_NSDO_1 0x0000
46 #define HDA_GCAP_NSDO_2 0x0002
47 #define HDA_GCAP_NSDO_4 0x0004
48 #define HDA_GCAP_NSDO_RESERVED 0x0006
49 #define HDA_GCAP_64OK 0x0001
50 #define HDA_VMIN 0x002 /* 1 */
51 #define HDA_VMAJ 0x003 /* 1 */
52 #define HDA_OUTPAY 0x004 /* 2 */
53 #define HDA_INPAY 0x006 /* 2 */
54 #define HDA_GCTL 0x008 /* 4 */
55 #define HDA_GCTL_UNSOL 0x00000100
56 #define HDA_GCTL_FCNTRL 0x00000002
57 #define HDA_GCTL_CRST 0x00000001
58 #define HDA_WAKEEN 0x00c /* 2 */
59 #define HDA_WAKEEN_SDIWEN 0x7fff
60 #define HDA_STATESTS 0x00e /* 2 */
61 #define HDA_STATESTS_SDIWAKE 0x7fff
62 #define HDA_GSTS 0x010 /* 2 */
63 #define HDA_GSTS_FSTS 0x0002
64 #define HDA_OUTSTRMPAY 0x018 /* 2 */
65 #define HDA_INSTRMPAY 0x01a /* 2 */
66 #define HDA_INTCTL 0x020 /* 4 */
67 #define HDA_INTCTL_GIE 0x80000000
68 #define HDA_INTCTL_CIE 0x40000000
69 #define HDA_INTCTL_SIE 0x3fffffff
70 #define HDA_INTSTS 0x024 /* 4 */
71 #define HDA_INTSTS_GIS 0x80000000
72 #define HDA_INTSTS_CIS 0x40000000
73 #define HDA_INTSTS_SIS 0x3fffffff
74 #define HDA_WALCLK 0x030 /* 4 */
75 #define HDA_SSYNC 0x034 /* 4 */
76 #define HDA_SSYNC_SSYNC 0x3fffffff
77 #define HDA_CORBLBASE 0x040 /* 4 */
78 #define HDA_CORBUBASE 0x044 /* 4 */
79 #define HDA_CORBWP 0x048 /* 2 */
80 #define HDA_CORBWP_CORBWP 0x00ff
81 #define HDA_CORBRP 0x04a /* 2 */
82 #define HDA_CORBRP_CORBRPRST 0x8000
83 #define HDA_CORBRP_CORBRP 0x00ff
84 #define HDA_CORBCTL 0x04c /* 1 */
85 #define HDA_CORBCTL_CORBRUN 0x02
86 #define HDA_CORBCTL_CMEIE 0x01
87 #define HDA_CORBSTS 0x04d /* 1 */
88 #define HDA_CORBSTS_CMEI 0x01
89 #define HDA_CORBSIZE 0x04e /* 1 */
90 #define HDA_CORBSIZE_CORBSZCAP_MASK 0xf0
91 #define HDA_CORBSIZE_CORBSZCAP_2 0x10
92 #define HDA_CORBSIZE_CORBSZCAP_16 0x20
93 #define HDA_CORBSIZE_CORBSZCAP_256 0x40
94 #define HDA_CORBSIZE_CORBSIZE_MASK 0x03
95 #define HDA_CORBSIZE_CORBSIZE_2 0x00
96 #define HDA_CORBSIZE_CORBSIZE_16 0x01
97 #define HDA_CORBSIZE_CORBSIZE_256 0x02
98 #define HDA_RIRBLBASE 0x050 /* 4 */
99 #define HDA_RIRBUBASE 0x054 /* 4 */
100 #define HDA_RIRBWP 0x058 /* 2 */
101 #define HDA_RIRBWP_RIRBWPRST 0x8000
102 #define HDA_RIRBWP_RIRBWP 0x00ff
103 #define HDA_RINTCNT 0x05a /* 2 */
104 #define HDA_RINTCNT_RINTCNT 0x00ff
105 #define HDA_RIRBCTL 0x05c /* 1 */
106 #define HDA_RIRBCTL_RIRBOIC 0x04
107 #define HDA_RIRBCTL_RIRBDMAEN 0x02
108 #define HDA_RIRBCTL_RINTCTL 0x01
109 #define HDA_RIRBSTS 0x05d /* 1 */
110 #define HDA_RIRBSTS_RIRBOIS 0x04
111 #define HDA_RIRBSTS_RINTFL 0x01
112 #define HDA_RIRBSIZE 0x05e /* 1 */
113 #define HDA_RIRBSIZE_RIRBSZCAP_MASK 0xf0
114 #define HDA_RIRBSIZE_RIRBSZCAP_2 0x10
115 #define HDA_RIRBSIZE_RIRBSZCAP_16 0x20
116 #define HDA_RIRBSIZE_RIRBSZCAP_256 0x40
117 #define HDA_RIRBSIZE_RIRBSIZE_MASK 0x03
118 #define HDA_RIRBSIZE_RIRBSIZE_2 0x00
119 #define HDA_RIRBSIZE_RIRBSIZE_16 0x01
120 #define HDA_RIRBSIZE_RIRBSIZE_256 0x02
121 #define HDA_IC 0x060 /* 4 */
122 #define HDA_IR 0x064 /* 4 */
123 #define HDA_IRS 0x068 /* 2 */
124 #define HDA_IRS_IRRADD 0x00f0
125 #define HDA_IRS_IRRUNSOL 0x0008
126 #define HDA_IRS_IRV 0x0002
127 #define HDA_IRS_ICB 0x0001
128 #define HDA_DPLBASE 0x070 /* 4 */
129 #define HDA_DPLBASE_DPLBASE 0xffffff80
130 #define HDA_DPLBASE_ENABLE 0x00000001
131 #define HDA_DPUBASE 0x074
133 #define HDA_SD_BASE 0x080
134 #define HDA_SD_CTL 0x00 /* 2 */
135 #define HDA_SD_CTL_DEIE 0x0010
136 #define HDA_SD_CTL_FEIE 0x0008
137 #define HDA_SD_CTL_IOCE 0x0004
138 #define HDA_SD_CTL_RUN 0x0002
139 #define HDA_SD_CTL_SRST 0x0001
140 #define HDA_SD_CTL2 0x02 /* 1 */
141 #define HDA_SD_CTL2_STRM 0xf0
142 #define HDA_SD_CTL2_STRM_SHIFT 4
143 #define HDA_SD_CTL2_DIR 0x08
144 #define HDA_SD_CTL2_TP 0x04
145 #define HDA_SD_CTL2_STRIPE 0x03
146 #define HDA_SD_STS 0x03 /* 1 */
147 #define HDA_SD_STS_FIFORDY 0x20
148 #define HDA_SD_STS_DESE 0x10
149 #define HDA_SD_STS_FIFOE 0x08
150 #define HDA_SD_STS_BCIS 0x04
151 #define HDA_SD_LPIB 0x04 /* 4 */
152 #define HDA_SD_CBL 0x08 /* 4 */
153 #define HDA_SD_LVI 0x0c /* 2 */
154 #define HDA_SD_LVI_LVI 0x00ff
155 #define HDA_SD_FIFOW 0x0e /* 2 */
156 #define HDA_SD_FIFOS 0x10 /* 2 */
157 #define HDA_SD_FMT 0x12 /* 2 */
158 #define HDA_SD_FMT_BASE 0x4000
159 #define HDA_SD_FMT_BASE_48 0x0000
160 #define HDA_SD_FMT_BASE_44 0x4000
161 #define HDA_SD_FMT_MULT 0x3800
162 #define HDA_SD_FMT_MULT_X1 0x0000
163 #define HDA_SD_FMT_MULT_X2 0x0800
164 #define HDA_SD_FMT_MULT_X3 0x1000
165 #define HDA_SD_FMT_MULT_X4 0x1800
166 #define HDA_SD_FMT_DIV 0x0700
167 #define HDA_SD_FMT_DIV_BY1 0x0000
168 #define HDA_SD_FMT_DIV_BY2 0x0100
169 #define HDA_SD_FMT_DIV_BY3 0x0200
170 #define HDA_SD_FMT_DIV_BY4 0x0300
171 #define HDA_SD_FMT_DIV_BY5 0x0400
172 #define HDA_SD_FMT_DIV_BY6 0x0500
173 #define HDA_SD_FMT_DIV_BY7 0x0600
174 #define HDA_SD_FMT_DIV_BY8 0x0700
175 #define HDA_SD_FMT_BITS 0x0070
176 #define HDA_SD_FMT_BITS_8_16 0x0000
177 #define HDA_SD_FMT_BITS_16_16 0x0010
178 #define HDA_SD_FMT_BITS_20_32 0x0020
179 #define HDA_SD_FMT_BITS_24_32 0x0030
180 #define HDA_SD_FMT_BITS_32_32 0x0040
181 #define HDA_SD_FMT_CHAN 0x000f
182 #define HDA_SD_BDPL 0x18 /* 4 */
183 #define HDA_SD_BDPU 0x1c /* 4 */
184 #define HDA_SD_SIZE 0x20
187 #define CORB_GET_PARAMETER 0xf00
188 #define COP_VENDOR_ID 0x00
189 #define COP_VID_VENDOR(x) (x >> 16)
190 #define COP_VID_DEVICE(x) (x & 0xffff)
191 #define COP_REVISION_ID 0x02
192 #define COP_RID_MAJ(x) ((x >> 20) & 0x0f)
193 #define COP_RID_MIN(x) ((x >> 16) & 0x0f)
194 #define COP_RID_REVISION(x) ((x >> 8) & 0xff)
195 #define COP_RID_STEPPING(x) (x & 0xff)
196 #define COP_SUBORDINATE_NODE_COUNT 0x04
197 #define COP_START_NID(x) ((x & 0x00ff0000) >> 16)
198 #define COP_NSUBNODES(x) (x & 0x000000ff)
199 #define COP_FUNCTION_GROUP_TYPE 0x05
200 #define COP_FTYPE(x) (x & 0x000000ff)
201 #define COP_FTYPE_RESERVED 0x01
202 #define COP_FTYPE_AUDIO 0x01
203 #define COP_FTYPE_MODEM 0x02
204 #define COP_AUDIO_FUNCTION_GROUP_CAPABILITY 0x08
205 #define COP_AUDIO_WIDGET_CAP 0x09
206 #define COP_AWCAP_TYPE(x) ((x >> 20) & 0xf)
207 #define COP_AWTYPE_AUDIO_OUTPUT 0x0
208 #define COP_AWTYPE_AUDIO_INPUT 0x1
209 #define COP_AWTYPE_AUDIO_MIXER 0x2
210 #define COP_AWTYPE_AUDIO_SELECTOR 0x3
211 #define COP_AWTYPE_PIN_COMPLEX 0x4
212 #define COP_AWTYPE_POWER 0x5
213 #define COP_AWTYPE_VOLUME_KNOB 0x6
214 #define COP_AWTYPE_BEEP_GENERATOR 0x7
215 #define COP_AWTYPE_VENDOR_DEFINED 0xf
216 #define COP_AWCAP_STEREO 0x001
217 #define COP_AWCAP_INAMP 0x002
218 #define COP_AWCAP_OUTAMP 0x004
219 #define COP_AWCAP_AMPOV 0x008
220 #define COP_AWCAP_FORMATOV 0x010
221 #define COP_AWCAP_STRIPE 0x020
222 #define COP_AWCAP_PROC 0x040
223 #define COP_AWCAP_UNSOL 0x080
224 #define COP_AWCAP_CONNLIST 0x100
225 #define COP_AWCAP_DIGITAL 0x200
226 #define COP_AWCAP_POWER 0x400
227 #define COP_AWCAP_LRSWAP 0x800
228 #define COP_AWCAP_DELAY(x) ((x >> 16) & 0xf)
230 #define COP_PCM_B32 0x00100000
231 #define COP_PCM_B24 0x00080000
232 #define COP_PCM_B20 0x00040000
233 #define COP_PCM_B16 0x00020000
234 #define COP_PCM_B8 0x00010000
235 #define COP_PCM_R3840 0x00000800
236 #define COP_PCM_R1920 0x00000400
237 #define COP_PCM_R1764 0x00000200
238 #define COP_PCM_R960 0x00000100
239 #define COP_PCM_R882 0x00000080
240 #define COP_PCM_R480 0x00000040
241 #define COP_PCM_R441 0x00000020
242 #define COP_PCM_R320 0x00000010
243 #define COP_PCM_R220 0x00000008
244 #define COP_PCM_R160 0x00000004
245 #define COP_PCM_R110 0x00000002
246 #define COP_PCM_R80 0x00000001
247 #define COP_STREAM_FORMATS 0x0b
248 #define COP_STREAM_FORMAT_PCM 0x00000001
249 #define COP_STREAM_FORMAT_FLOAT32 0x00000002
250 #define COP_STREAM_FORMAT_AC3 0x00000003
251 #define COP_PINCAP 0x0c
252 #define COP_PINCAP_IMPEDANCE 0x00000001
253 #define COP_PINCAP_TRIGGER 0x00000002
254 #define COP_PINCAP_PRESENCE 0x00000004
255 #define COP_PINCAP_HEADPHONE 0x00000008
256 #define COP_PINCAP_OUTPUT 0x00000010
257 #define COP_PINCAP_INPUT 0x00000020
258 #define COP_PINCAP_BALANCE 0x00000040
259 #define COP_PINCAP_VREF(x) ((x >> 8) & 0xff)
260 #define COP_PINCAP_EAPD 0x00010000
261 #define COP_INPUT_AMPCAP 0x0d
262 #define COP_AMPCAP_OFFSET(x) (x & 0x0000007f)
263 #define COP_AMPCAP_NUMSTEPS(x) ((x >> 8) & 0x7f)
264 #define COP_AMPCAP_STEPSIZE(x) ((x >> 16) & 0x7f)
265 #define COP_AMPCAP_MUTE 0x80000000
266 #define COP_CONNECTION_LIST_LENGTH 0x0e
267 #define COP_CLL_LONG 0x00000080
268 #define COP_CLL_LENGTH(x) (x & 0x0000007f)
269 #define COP_SUPPORTED_POWER_STATES 0x0f
270 #define COP_PROCESSING_CAPABILITIES 0x10
271 #define COP_GPIO_COUNT 0x11
272 #define COP_OUTPUT_AMPCAP 0x12
273 #define COP_VOLUME_KNOB_CAPABILITIES 0x13
274 #define COP_VKCAP_DELTA 0x00000080
275 #define COP_VKCAP_NUMSTEPS(x) (x & 0x7f)
276 #define CORB_GET_CONNECTION_SELECT_CONTROL 0xf01
277 #define CORB_CSC_INDEX(x) (x & 0xff)
278 #define CORB_SET_CONNECTION_SELECT_CONTROL 0x701
279 #define CORB_GET_CONNECTION_LIST_ENTRY 0xf02
280 #define CORB_CLE_LONG_0(x) (x & 0x0000ffff)
281 #define CORB_CLE_LONG_1(x) ((x & 0xffff0000) >> 16)
282 #define CORB_CLE_SHORT_0(x) (x & 0xff)
283 #define CORB_CLE_SHORT_1(x) ((x >> 8) & 0xff)
284 #define CORB_CLE_SHORT_2(x) ((x >> 16) & 0xff)
285 #define CORB_CLE_SHORT_3(x) ((x >> 24) & 0xff)
286 #define CORB_GET_PROCESSING_STATE 0xf03
287 #define CORB_SET_PROCESSING_STATE 0x703
288 #define CORB_GET_COEFFICIENT_INDEX 0xd00
289 #define CORB_SET_COEFFICIENT_INDEX 0x500
290 #define CORB_GET_PROCESSING_COEFFICIENT 0xc00
291 #define CORB_SET_PROCESSING_COEFFICIENT 0x400
292 #define CORB_GET_AMPLIFIER_GAIN_MUTE 0xb00
293 #define CORB_GAGM_INPUT 0x0000
294 #define CORB_GAGM_OUTPUT 0x8000
295 #define CORB_GAGM_RIGHT 0x0000
296 #define CORB_GAGM_LEFT 0x2000
297 #define CORB_GAGM_MUTE 0x00000080
298 #define CORB_GAGM_GAIN(x) (x & 0x0000007f)
299 #define CORB_SET_AMPLIFIER_GAIN_MUTE 0x300
300 #define CORB_AGM_GAIN_MASK 0x007f
301 #define CORB_AGM_MUTE 0x0080
302 #define CORB_AGM_INDEX_SHIFT 8
303 #define CORB_AGM_RIGHT 0x1000
304 #define CORB_AGM_LEFT 0x2000
305 #define CORB_AGM_INPUT 0x4000
306 #define CORB_AGM_OUTPUT 0x8000
307 #define CORB_GET_CONVERTER_FORMAT 0xa00
308 #define CORB_SET_CONVERTER_FORMAT 0x200
309 #define CORB_GET_DIGITAL_CONTROL 0xf0d
310 #define CORB_SET_DIGITAL_CONTROL_L 0x70d
311 #define CORB_SET_DIGITAL_CONTROL_H 0x70e
312 #define CORB_DCC_DIGEN 0x01
313 #define CORB_DCC_V 0x02
314 #define CORB_DCC_VCFG 0x04
315 #define CORB_DCC_PRE 0x08
316 #define CORB_DCC_COPY 0x10
317 #define CORB_DCC_NAUDIO 0x20
318 #define CORB_DCC_PRO 0x40
319 #define CORB_DCC_L 0x80
320 #define CORB_DCC_CC(x) ((x >> 8) & 0x7f)
321 #define CORB_GET_POWER_STATE 0xf05
322 #define CORB_SET_POWER_STATE 0x705
323 #define CORB_PS_D0 0x0
324 #define CORB_PS_D1 0x1
325 #define CORB_PS_D2 0x2
326 #define CORB_PS_D3 0x3
327 #define CORB_GET_CONVERTER_STREAM_CHANNEL 0xf06
328 #define CORB_SET_CONVERTER_STREAM_CHANNEL 0x706
329 #define CORB_GET_INPUT_CONVERTER_SDI_SELECT 0xf04
330 #define CORB_SET_INPUT_CONVERTER_SDI_SELECT 0x704
331 #define CORB_GET_PIN_WIDGET_CONTROL 0xf07
332 #define CORB_SET_PIN_WIDGET_CONTROL 0x707
333 #define CORB_PWC_HEADPHONE 0x80
334 #define CORB_PWC_OUTPUT 0x40
335 #define CORB_PWC_INPUT 0x20
336 #define CORB_PWC_VREF_HIZ 0x00
337 #define CORB_PWC_VREF_50 0x01
338 #define CORB_PWC_VREF_GND 0x02
339 #define CORB_PWC_VREF_80 0x04
340 #define CORB_PWC_VREF_100 0x05
341 #define CORB_GET_UNSOLICITED_RESPONSE 0xf08
342 #define CORB_SET_UNSOLICITED_RESPONSE 0x708
343 #define CORB_UNSOL_ENABLE 0x80
344 #define CORB_UNSOL_TAG(x) (x & 0x3f)
345 #define CORB_GET_PIN_SENSE 0xf09
346 #define CORB_PS_PRESENCE 0x80000000
347 #define CORB_PS_IMPEDANCE(x) (x & 0x7fffffff)
348 #define CORB_EXECUTE_PIN_SENSE 0x709
349 #define CORB_PS_RIGHT 0x1
350 #define CORB_GET_EAPD_BTL_ENABLE 0xf0c
351 #define CORB_SET_EAPD_BTL_ENABLE 0x70c
352 #define CORB_EAPD_BTL 0x01
353 #define CORB_EAPD_EAPD 0x02
354 #define CORB_EAPD_LRSWAP 0x04
355 #define CORB_GET_GPI_DATA 0xf10
356 #define CORB_SET_GPI_DATA 0x710
357 #define CORB_GET_GPI_WAKE_ENABLE_MASK 0xf11
358 #define CORB_SET_GPI_WAKE_ENABLE_MASK 0x711
359 #define CORB_GET_GPI_UNSOLICITED_ENABLE_MASK 0xf12
360 #define CORB_SET_GPI_UNSOLICITED_ENABLE_MASK 0x712
361 #define CORB_GET_GPI_STICKY_MASK 0xf13
362 #define CORB_SET_GPI_STICKY_MASK 0x713
363 #define CORB_GET_GPO_DATA 0xf14
364 #define CORB_SET_GPO_DATA 0x714
365 #define CORB_GET_GPIO_DATA 0xf15
366 #define CORB_SET_GPIO_DATA 0x715
367 #define CORB_GET_GPIO_ENABLE_MASK 0xf16
368 #define CORB_SET_GPIO_ENABLE_MASK 0x716
369 #define CORB_GET_GPIO_DIRECTION 0xf17
370 #define CORB_SET_GPIO_DIRECTION 0x717
371 #define CORB_GET_GPIO_WAKE_ENABLE_MASK 0xf18
372 #define CORB_SET_GPIO_WAKE_ENABLE_MASK 0x718
373 #define CORB_GET_GPIO_UNSOLICITED_ENABLE_MASK 0xf19
374 #define CORB_SET_GPIO_UNSOLICITED_ENABLE_MASK 0x719
375 #define CORB_GET_GPIO_STICKY_MASK 0xf1a
376 #define CORB_SET_GPIO_STICKY_MASK 0x71a
377 #define CORB_GET_BEEP_GENERATION 0xf0a
378 #define CORB_SET_BEEP_GENERATION 0x70a
379 #define CORB_GET_VOLUME_KNOB 0xf0f
380 #define CORB_SET_VOLUME_KNOB 0x70f
381 #define CORB_VKNOB_DIRECT 0x80
382 #define CORB_VKNOB_VOLUME(x) (x & 0x7f)
383 #define CORB_GET_SUBSYSTEM_ID 0xf20
384 #define CORB_SET_SUBSYSTEM_ID_1 0x720
385 #define CORB_SET_SUBSYSTEM_ID_2 0x721
386 #define CORB_SET_SUBSYSTEM_ID_3 0x722
387 #define CORB_SET_SUBSYSTEM_ID_4 0x723
388 #define CORB_GET_CONFIGURATION_DEFAULT 0xf1c
389 #define CORB_SET_CONFIGURATION_DEFAULT_1 0x71c
390 #define CORB_SET_CONFIGURATION_DEFAULT_2 0x71d
391 #define CORB_SET_CONFIGURATION_DEFAULT_3 0x71e
392 #define CORB_SET_CONFIGURATION_DEFAULT_4 0x71f
393 #define CORB_CD_SEQUENCE(x) (x & 0x0000000f)
394 #define CORB_CD_SEQUENCE_MAX 0x0f
395 #define CORB_CD_ASSOCIATION(x) ((x >> 4) & 0xf)
396 #define CORB_CD_ASSOCIATION_MAX 0x0f
397 #define CORB_CD_MISC_MASK 0x00000f00
398 #define CORB_CD_COLOR(x) ((x >> 12) & 0xf)
399 #define CORB_CD_COLOR_UNKNOWN 0x0
400 #define CORB_CD_BLACK 0x1
401 #define CORB_CD_GRAY 0x2
402 #define CORB_CD_BLUE 0x3
403 #define CORB_CD_GREEN 0x4
404 #define CORB_CD_RED 0x5
405 #define CORB_CD_ORANGE 0x6
406 #define CORB_CD_YELLOW 0x7
407 #define CORB_CD_PURPLE 0x8
408 #define CORB_CD_PINK 0x9
409 #define CORB_CD_WHITE 0xe
410 #define CORB_CD_COLOR_OTHER 0xf
411 #define CORB_CD_CONNECTION_MASK 0x000f0000
412 #define CORB_CD_DEVICE(x) ((x >> 20) & 0xf)
413 #define CORB_CD_LINEOUT 0x0
414 #define CORB_CD_SPEAKER 0x1
415 #define CORB_CD_HEADPHONE 0x2
416 #define CORB_CD_CD 0x3
417 #define CORB_CD_SPDIFOUT 0x4
418 #define CORB_CD_DIGITALOUT 0x5
419 #define CORB_CD_MODEMLINE 0x6
420 #define CORB_CD_MODEMHANDSET 0x7
421 #define CORB_CD_LINEIN 0x8
422 #define CORB_CD_AUX 0x9
423 #define CORB_CD_MICIN 0xa
424 #define CORB_CD_TELEPHONY 0xb
425 #define CORB_CD_SPDIFIN 0xc
426 #define CORB_CD_DIGITALIN 0xd
427 #define CORB_CD_DEVICE_OTHER 0xf
428 #define CORB_CD_LOCATION_MASK 0x3f000000
429 #define CORB_CD_PORT_MASK 0xc0000000
430 #define CORB_GET_STRIPE_CONTROL 0xf24
431 #define CORB_SET_STRIPE_CONTROL 0x720 /* XXX typo in the spec? */
432 #define CORB_EXECUTE_FUNCTION_RESET 0x7ff
434 #define CORB_NID_ROOT 0
435 #define HDA_MAX_CHANNELS 16
438 #ifndef PCI_SUBCLASS_MULTIMEDIA_HDAUDIO
439 #define PCI_SUBCLASS_MULTIMEDIA_HDAUDIO 0x03
442 /* memory-mapped types */
448 #define BDLIST_ENTRY_IOC 0x00000001
449 } __packed bdlist_entry_t
;
450 #define HDA_BDL_MAX 256
455 } __packed dmaposition_t
;
457 typedef uint32_t corb_entry_t
;
461 #define RIRB_UNSOL_TAG(resp) ((resp) >> 26)
462 #define RIRB_RESP_UNSOL (1 << 4)
463 #define RIRB_RESP_CODEC(ex) ((ex) & 0xf)
464 } __packed rirb_entry_t
;
467 /* #define AZALIA_DEBUG */
468 /* #define AZALIA_DEBUG_DOT */
470 # define DPRINTF(x) do { printf x; } while (0/*CONSTCOND*/)
472 # define DPRINTF(x) do {} while (0/*CONSTCOND*/)
474 #define PTR_UPPER32(x) ((uint64_t)(uintptr_t)(x) >> 32)
475 #define FLAGBUFLEN 256
476 #define MAX_VOLUME_255 1
483 int type
; /* = bit20-24 of widgetcap */
489 char name
[MAX_AUDIO_DEV_LEN
];
491 struct { /* for AUDIO_INPUT/OUTPUT */
495 struct { /* for PIN */
503 struct { /* for VOLUME_KNOB */
508 #define WIDGET_CHANNELS(w) ((w)->widgetcap & COP_AWCAP_STEREO ? 2 : 1)
511 mixer_devinfo_t devinfo
;
512 nid_t nid
; /* target NID; 0 is invalid. */
513 int target
; /* 0-15: inamp index, 0x100: outamp, ... */
514 #define IS_MI_TARGET_INAMP(x) ((x) <= 15)
515 #define MI_TARGET_INAMP(x) (x)
516 #define MI_TARGET_OUTAMP 0x100
517 #define MI_TARGET_CONNLIST 0x101
518 #define MI_TARGET_PINDIR 0x102 /* for bidirectional pin */
519 #define MI_TARGET_PINBOOST 0x103 /* for headphone pin */
520 #define MI_TARGET_DAC 0x104
521 #define MI_TARGET_ADC 0x105
522 #define MI_TARGET_VOLUME 0x106
523 #define MI_TARGET_SPDIF 0x107
524 #define MI_TARGET_SPDIF_CC 0x108
525 #define MI_TARGET_EAPD 0x109
526 #define MI_TARGET_BALANCE 0x10a
527 #define MI_TARGET_LRSWAP 0x10b
530 #define VALID_WIDGET_NID(nid, codec) (nid == (codec)->audiofunc || \
531 (nid >= (codec)->wstart && \
532 nid < (codec)->wend))
534 #define PIN_STATUS(wid, conn) \
536 if ((wid)->type != COP_AWTYPE_PIN_COMPLEX) \
540 ((wid)->d.pin.config & CORB_CD_PORT_MASK) >> 30; \
545 nid_t conv
[HDA_MAX_CHANNELS
]; /* front, surround, clfe, side, ... */
550 convgroup_t groups
[32];
553 typedef struct codec_t
{
554 int (*comresp
)(const struct codec_t
*, nid_t
, uint32_t, uint32_t, uint32_t *);
555 int (*init_dacgroup
)(struct codec_t
*);
556 int (*init_widget
)(const struct codec_t
*, widget_t
*, nid_t
);
557 int (*mixer_init
)(struct codec_t
*);
558 int (*mixer_delete
)(struct codec_t
*);
559 int (*set_port
)(struct codec_t
*, mixer_ctrl_t
*);
560 int (*get_port
)(struct codec_t
*, mixer_ctrl_t
*);
561 int (*unsol_event
)(struct codec_t
*, int);
563 device_t dev
; /* parent azalia(4) instance */
564 uint32_t vid
; /* codec vendor/device ID */
565 uint32_t subid
; /* PCI subvendor/device ID */
569 nid_t audiofunc
; /* NID of an audio function node */
570 nid_t wstart
; /* start NID of audio widgets */
571 nid_t wend
; /* the last NID of audio widgets + 1 */
572 widget_t
*w
; /* widgets in the audio function.
573 * w[0] to w[wstart-1] are unused. */
574 #define FOR_EACH_WIDGET(this, i) for (i = (this)->wstart; i < (this)->wend; i++)
580 int nmixers
, maxmixers
;
581 mixer_item_t
*mixers
;
583 struct audio_format
*formats
;
585 struct audio_encoding_set
*encodings
;
591 int azalia_codec_init_vtbl(codec_t
*);
592 int azalia_codec_construct_format(codec_t
*, int, int);