ReactOS 0.4.15-dev-7924-g5949c20
ac97reg.h
Go to the documentation of this file.
1/********************************************************************************
2** Copyright (c) 1998-2000 Microsoft Corporation. All Rights Reserved.
3**
4** Portions Copyright (c) 1998-1999 Intel Corporation
5**
6********************************************************************************/
7
8/* The file ac97reg.h was reviewed by LCA in June 2011 and is acceptable for use by Microsoft. */
9
10#ifndef _AC97REG_H_
11#define _AC97REG_H_
12
13// We use enum types cause the compiler can check variable passing if it is
14// an enum (otherwise you could pass any value). That doesn't save us from
15// doing reasonable run time checks in that range.
17{
38
39 // AC97-2.0 registers
50
51 // Modem registers from 0x3C to 0x58 (next 15 enums)
52 // Vendor Reserved = 0x5A-0x7A (next 16 enums)
53
54 // Vendor IDs
55 AC97REG_VENDOR_ID1 = 0x3E, // thats register address 0x7C
57
58 // Defines an invalid register. Likewise, this is the highest
59 // possible value that can be used.
61};
62
63#if (DBG)
64// Note: This array only has the first 29 registers defined.
65// There are many more.
66const PCHAR RegStrings[] =
67{
68 "REG_RESET",
69 "REG_MASTER_VOLUME",
70 "REG_HPHONE_VOLUME",
71 "REG_MMONO_VOLUME",
72 "REG_MASTER_TONE",
73 "REG_BEEP_VOLUME",
74 "REG_PHONE_VOLUME",
75 "REG_MIC_VOLUME",
76 "REG_LINEIN_VOLUME",
77 "REG_CD_VOLUME",
78 "REG_VIDEO_VOLUME",
79 "REG_AUX_VOLUME",
80 "REG_PCMOUT_VOLUME",
81 "REG_RECORD_SELECT",
82 "REG_RECORD_GAIN",
83 "REG_RECORD_GAIN_MIC",
84 "REG_GENERAL",
85 "REG_3D_CONTROL",
86 "REG_RESERVED",
87 "REG_POWERDOWN",
88 "REG_EXT_AUDIO_ID",
89 "REG_EXT_AUDIO_CTRL",
90 "REG_FRONT_SAMPLERATE",
91 "REG_SURROUND_SAMPLERATE",
92 "REG_LFE_SAMPLERATE",
93 "REG_RECORD_SAMPLERATE",
94 "REG_MIC_SAMPLERATE",
95 "REG_CENTER_LFE_VOLUME",
96 "REG_SURROUND_VOLUME",
97 "REG_RESERVED2"
98};
99#endif
100
101// This array maps the node controls to the AC97 registers.
102// E.g. if you mute the master volume control you should modify AC97
103// register AC97REG_MASTER_VOLUME
104typedef struct {
105 AC97Register reg; // we would only need one byte, but enums are int
106 WORD mask; // registers are 16 bit.
108
110{
111 // TODO: loopback
112 {AC97REG_PCM_OUT_VOLUME, 0x1F1F}, // NODE_WAVEOUT_VOLUME
113 {AC97REG_PCM_OUT_VOLUME, 0x8000}, // NODE_WAVEOUT_MUTE
114 {AC97REG_GENERAL, 0x8000}, // NODE_VIRT_WAVEOUT_3D_BYPASS
115 {AC97REG_BEEP_VOLUME, 0x001E}, // NODE_PCBEEP_VOLUME
116 {AC97REG_BEEP_VOLUME, 0x8000}, // NODE_PCBEEP_MUTE
117 {AC97REG_PHONE_VOLUME, 0x001F}, // NODE_PHONE_VOLUME
118 {AC97REG_PHONE_VOLUME, 0x8000}, // NODE_PHONE_MUTE
119 {AC97REG_GENERAL, 0x0100}, // NODE_MIC_SELECT
120 {AC97REG_MIC_VOLUME, 0x0040}, // NODE_MIC_BOOST
121 {AC97REG_MIC_VOLUME, 0x001F}, // NODE_MIC_VOLUME
122 {AC97REG_MIC_VOLUME, 0x8000}, // NODE_MIC_MUTE
123 {AC97REG_LINE_IN_VOLUME, 0x1F1F}, // NODE_LINEIN_VOLUME
124 {AC97REG_LINE_IN_VOLUME, 0x8000}, // NODE_LINEIN_MUTE
125 {AC97REG_CD_VOLUME, 0x1F1F}, // NODE_CD_VOLUME
126 {AC97REG_CD_VOLUME, 0x8000}, // NODE_CD_MUTE
127 {AC97REG_VIDEO_VOLUME, 0x1F1F}, // NODE_VIDEO_VOLUME
128 {AC97REG_VIDEO_VOLUME, 0x8000}, // NODE_VIDEO_MUTE
129 {AC97REG_AUX_VOLUME, 0x1F1F}, // NODE_AUX_VOLUME
130 {AC97REG_AUX_VOLUME, 0x8000}, // NODE_AUX_MUTE
131 {AC97REG_INVALID, 0x0000}, // NODE_MAIN_MIX doesn't has controls
132 {AC97REG_3D_CONTROL, 0x0F00}, // NODE_VIRT_3D_CENTER
133 {AC97REG_3D_CONTROL, 0x000F}, // NODE_VIRT_3D_DEPTH
134 {AC97REG_GENERAL, 0x2000}, // NODE_VIRT_3D_ENABLE
135 {AC97REG_INVALID, 0x0000}, // NODE_BEEP_MIX doesn't has controls
136 {AC97REG_MASTER_TONE, 0x0F00}, // NODE_BASS
137 {AC97REG_MASTER_TONE, 0x000F}, // NODE_TREBLE
138 {AC97REG_GENERAL, 0x1000}, // NODE_LOUDNESS
139 {AC97REG_GENERAL, 0x4000}, // NODE_SIMUL_STEREO
140 {AC97REG_MASTER_VOLUME, 0x3F3F}, // NODE_MASTEROUT_VOLUME
141 {AC97REG_MASTER_VOLUME, 0x8000}, // NODE_MASTEROUT_MUTE
142 {AC97REG_HPHONE_VOLUME, 0x3F3F}, // NODE_HPHONE_VOLUME
143 {AC97REG_HPHONE_VOLUME, 0x8000}, // NODE_HPHONE_MUTE
144 {AC97REG_GENERAL, 0x0200}, // NODE_MONOOUT_SELECT
145 {AC97REG_MMONO_VOLUME, 0x803F}, // NODE_VIRT_MONOOUT_VOLUME1
146 {AC97REG_MMONO_VOLUME, 0x803F}, // NODE_VIRT_MONOOUT_VOLUME2
147 {AC97REG_RECORD_SELECT, 0x0707}, // NODE_WAVEIN_SELECT
148 {AC97REG_RECORD_GAIN, 0x0F0F}, // NODE_VIRT_MASTER_INPUT_VOLUME1
149 {AC97REG_RECORD_GAIN, 0x0F0F}, // NODE_VIRT_MASTER_INPUT_VOLUME2
150 {AC97REG_RECORD_GAIN, 0x0F0F}, // NODE_VIRT_MASTER_INPUT_VOLUME3
151 {AC97REG_RECORD_GAIN, 0x0F0F}, // NODE_VIRT_MASTER_INPUT_VOLUME4
152 {AC97REG_RECORD_GAIN, 0x0F0F}, // NODE_VIRT_MASTER_INPUT_VOLUME5
153 {AC97REG_RECORD_GAIN, 0x0F0F}, // NODE_VIRT_MASTER_INPUT_VOLUME6
154 {AC97REG_RECORD_GAIN, 0x0F0F}, // NODE_VIRT_MASTER_INPUT_VOLUME7
155 {AC97REG_RECORD_GAIN, 0x0F0F}, // NODE_VIRT_MASTER_INPUT_VOLUME8
156 {AC97REG_RECORD_GAIN_MIC, 0x000F}, // NODE_MICIN_VOLUME
157 {AC97REG_RECORD_GAIN_MIC, 0x8000}, // NODE_MICIN_MUTE
158 {AC97REG_SURROUND_VOLUME, 0x3F3F}, // NODE_SURROUND_VOLUME
159 {AC97REG_SURROUND_VOLUME, 0x8080}, // NODE_SURROUND_MUTE
160 {AC97REG_CENTER_LFE_VOLUME, 0x3F00},// NODE_CENTER_VOLUME
161 {AC97REG_CENTER_LFE_VOLUME, 0x8000},// NODE_CENTER_MUTE
162 {AC97REG_CENTER_LFE_VOLUME, 0x003F},// NODE_LFE_VOLUME
163 {AC97REG_CENTER_LFE_VOLUME, 0x0080},// NODE_LFE_MUTE
164 {AC97REG_MASTER_VOLUME, 0x3F3F}, // NODE_FRONT_VOLUME
165 {AC97REG_MASTER_VOLUME, 0x8000}, // NODE_FRONT_MUTE
166 {AC97REG_INVALID, 0x0000}, // NODE_VIRT_MASTERMONO_VOLUME doesn't have controls
167 {AC97REG_INVALID, 0x0000} // NODE_VIRT_MASTERMONO_MUTE doesn't have controls
168};
169
170#endif //_AC97REG_H_
AC97Register
Definition: ac97reg.h:17
@ AC97REG_EXT_AUDIO_CTRL
Definition: ac97reg.h:41
@ AC97REG_AUX_VOLUME
Definition: ac97reg.h:29
@ AC97REG_RECORD_GAIN
Definition: ac97reg.h:32
@ AC97REG_MASTER_VOLUME
Definition: ac97reg.h:19
@ AC97REG_RESERVED
Definition: ac97reg.h:36
@ AC97REG_RECORD_GAIN_MIC
Definition: ac97reg.h:33
@ AC97REG_LINE_IN_VOLUME
Definition: ac97reg.h:26
@ AC97REG_MASTER_TONE
Definition: ac97reg.h:22
@ AC97REG_SURROUND_VOLUME
Definition: ac97reg.h:48
@ AC97REG_RESET
Definition: ac97reg.h:18
@ AC97REG_POWERDOWN
Definition: ac97reg.h:37
@ AC97REG_INVALID
Definition: ac97reg.h:60
@ AC97REG_CD_VOLUME
Definition: ac97reg.h:27
@ AC97REG_VIDEO_VOLUME
Definition: ac97reg.h:28
@ AC97REG_HPHONE_VOLUME
Definition: ac97reg.h:20
@ AC97REG_EXT_AUDIO_ID
Definition: ac97reg.h:40
@ AC97REG_VENDOR_ID1
Definition: ac97reg.h:55
@ AC97REG_PCM_OUT_VOLUME
Definition: ac97reg.h:30
@ AC97REG_MIC_VOLUME
Definition: ac97reg.h:25
@ AC97REG_GENERAL
Definition: ac97reg.h:34
@ AC97REG_PHONE_VOLUME
Definition: ac97reg.h:24
@ AC97REG_LFE_SAMPLERATE
Definition: ac97reg.h:44
@ AC97REG_3D_CONTROL
Definition: ac97reg.h:35
@ AC97REG_MIC_SAMPLERATE
Definition: ac97reg.h:46
@ AC97REG_RESERVED2
Definition: ac97reg.h:49
@ AC97REG_RECORD_SAMPLERATE
Definition: ac97reg.h:45
@ AC97REG_MMONO_VOLUME
Definition: ac97reg.h:21
@ AC97REG_CENTER_LFE_VOLUME
Definition: ac97reg.h:47
@ AC97REG_BEEP_VOLUME
Definition: ac97reg.h:23
@ AC97REG_RECORD_SELECT
Definition: ac97reg.h:31
@ AC97REG_SURROUND_SAMPLERATE
Definition: ac97reg.h:43
@ AC97REG_VENDOR_ID2
Definition: ac97reg.h:56
@ AC97REG_FRONT_SAMPLERATE
Definition: ac97reg.h:42
const tMapNodeToReg stMapNodeToReg[]
Definition: ac97reg.h:109
unsigned short WORD
Definition: ntddk_ex.h:93
AC97Register reg
Definition: ac97reg.h:105
char * PCHAR
Definition: typedefs.h:51