1 /*
2 Copyright (c) 2006-2008 dogbert <dogber1@gmail.com>
3 All rights reserved.
4 
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions
7 are met:
8 1. Redistributions of source code must retain the above copyright
9    notice, this list of conditions and the following disclaimer.
10 2. Redistributions in binary form must reproduce the above copyright
11    notice, this list of conditions and the following disclaimer in the
12    documentation and/or other materials provided with the distribution.
13 3. The name of the author may not be used to endorse or promote products
14    derived from this software without specific prior written permission.
15 
16 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27 
28 #ifndef _INTERFACES_HPP_
29 #define _INTERFACES_HPP_
30 
31 #include <portcls.h>
32 #include <stdunk.h>
33 
34 #define MAXLEN_DMA_BUFFER       0x18000
35 #define MAX_OUTPUT_STREAMS      1
36 #define MAX_INPUT_STREAMS       1
37 #define MAX_AC3_INPUT_STREAMS   1
38 
39 // PCM Info
40 #define MIN_CHANNELS            2
41 #define MAX_CHANNELS_PCM        8
42 #define MIN_BITS_PER_SAMPLE_PCM 16
43 #define MAX_BITS_PER_SAMPLE_PCM 32
44 #define MIN_SAMPLE_RATE         44100
45 #define MAX_SAMPLE_RATE         96000
46 #define MAX_SAMPLE_RATE_MULTI   48000
47 
48 // AC3 Info
49 #define MAX_CHANNELS_AC3        2
50 #define MIN_BITS_PER_SAMPLE_AC3 16
51 #define MAX_BITS_PER_SAMPLE_AC3 16
52 #define MIN_SAMPLE_RATE_AC3     48000
53 #define MAX_SAMPLE_RATE_AC3     48000
54 
55 // WMA-Pro Info
56 #define MAX_CHANNELS_WMA        2
57 #define MIN_BITS_PER_SAMPLE_WMA 16
58 #define MAX_BITS_PER_SAMPLE_WMA 16
59 #define MIN_SAMPLE_RATE_WMA     44100
60 #define MAX_SAMPLE_RATE_WMA     48000
61 
62 #define PCM_OUT_STREAM 0
63 #define PCM_IN_STREAM  1
64 #define AC3_OUT_STREAM 2
65 
66 #define CHAN_LEFT   0
67 #define CHAN_RIGHT  1
68 #define CHAN_MASTER (-1)
69 
70 #define IN_CHANNEL  0
71 #define OUT_CHANNEL 1
72 
73 #define UInt32	ULONG
74 #define UInt16	USHORT
75 #define UInt8	BYTE
76 #define Int32   LONG
77 
78 #define KSSTATE_STOP_AC3  (KSSTATE)5
79 #define KSSTATE_RUN_AC3   (KSSTATE)6
80 
81 // Interface ICMITopology
DECLARE_INTERFACE_(ICMITopology,IMiniportTopology)82 DECLARE_INTERFACE_(ICMITopology,IMiniportTopology)
83 {
84 	STDMETHOD_(NTSTATUS,GetDescription)
85 	(	THIS_
86 		PPCFILTER_DESCRIPTOR*  OutFilterDescriptor
87 	)	PURE;
88 	STDMETHOD_(NTSTATUS,DataRangeIntersection)
89 	(	THIS_
90 		ULONG			PinId,
91 		PKSDATARANGE	DataRange,
92 		PKSDATARANGE	MatchingDataRange,
93 		ULONG			OutputBufferLength,
94 		PVOID			ResultantFormat,
95 		PULONG			ResultantFormatLength
96 	)	PURE;
97 	STDMETHOD_(NTSTATUS,Init)
98 	(	THIS_
99 		PUNKNOWN		UnknownAdapter,
100 		PRESOURCELIST	ResourceList,
101 		PPORTTOPOLOGY	Port
102 	)	PURE;
103 	STDMETHOD_(NTSTATUS,loadMixerSettingsFromMemory)
104 	(	THIS_
105 		void
106 	)	PURE;
107 	STDMETHOD_(NTSTATUS,storeMixerSettingsToMemory)
108 	(	THIS_
109 		void
110 	)	PURE;
111 };
112 typedef ICMITopology *PCMITOPOLOGY;
113 
114 // Interface IMiniportWaveCMI
DECLARE_INTERFACE_(IMiniportWaveCMI,IUnknown)115 DECLARE_INTERFACE_(IMiniportWaveCMI,IUnknown)
116 {
117 	STDMETHOD_(void,ServiceWaveISR)
118 	(	THIS_
119 		ULONG	channel
120 	)	PURE;
121 
122 	STDMETHOD_(void,powerUp)
123 	(	THIS_
124 		void
125 	)	PURE;
126 	STDMETHOD_(void,powerDown)
127 	(	THIS_
128 		void
129 	)	PURE;
130 };
131 typedef IMiniportWaveCMI *PCMIWAVE;
132 
133 // structure to avoid the fucking COM crapola
134 typedef struct CMI8738Info {
135 	int             chipVersion;
136 	UInt32          maxChannels;
137 	bool            canAC3HW, canAC3SW;
138 	bool            canMultiChannel;
139 	bool            doAC3SW;
140 	bool            hasDualDAC;
141 	UInt32*         IOBase;
142 	UInt32*         MPUBase;
143 	PCMIWAVE        WaveMiniport;
144 	PCMITOPOLOGY    TopoMiniport;
145 	bool            enableSPDIFOut;
146 	bool            enableSPDIFIn;
147 	bool            enableSPDIFInMonitor;
148 	UInt32          formatMask;
149 	UInt32          regFUNCTRL0;
150 } CMI8738Info;
151 typedef CMI8738Info* PCMI8738Info;
152 
153 typedef struct VolumeTable {
154 	UInt32          node;
155 	UInt8           reg;
156 	UInt8           mask;
157 	UInt8           shift;
158 	Int32           max;
159 	Int32           min;
160 	Int32           step;
161 	Int32           dbshift;
162 } VolumeTable;
163 
164 // Interface ICMIAdapter
DECLARE_INTERFACE_(ICMIAdapter,IUnknown)165 DECLARE_INTERFACE_(ICMIAdapter,IUnknown)
166 {
167 	STDMETHOD_(NTSTATUS,init)
168 	( THIS_
169 		PRESOURCELIST	ResourceList,
170 		PDEVICE_OBJECT	DeviceObject
171 	) PURE;
172 	STDMETHOD_(PINTERRUPTSYNC,getInterruptSync)
173 	( THIS_
174 		void
175 	) PURE;
176 	STDMETHOD_(PDEVICE_OBJECT,getDeviceObject)
177 	( THIS_
178 		void
179 	) PURE;
180 	STDMETHOD_(PCMI8738Info,getCMI8738Info)
181 	( THIS_
182 		void
183 	) PURE;
184 	STDMETHOD_(UInt8, readUInt8)
185 	( THIS_
186 		UInt8 reg
187 	) PURE;
188 	STDMETHOD_(void, writeUInt8)
189 	(   THIS_
190 		UInt8 reg,
191 		UInt8 value
192 	)   PURE;
193 	STDMETHOD_(void, setUInt8Bit)
194 	(   THIS_
195 		UInt8 reg,
196 		UInt8 flag
197 	)   PURE;
198 	STDMETHOD_(void, clearUInt8Bit)
199 	(   THIS_
200 		UInt8 reg,
201 		UInt8 flag
202 	)   PURE;
203 	STDMETHOD_(UInt16, readUInt16)
204 	(   THIS_
205 		UInt8 reg
206 	)   PURE;
207 	STDMETHOD_(void, writeUInt16)
208 	(   THIS_
209 		UInt8 reg,
210 		UInt16 value
211 	)   PURE;
212 	STDMETHOD_(UInt32, readUInt32)
213 	(   THIS_
214 		UInt8 reg
215 	)   PURE;
216 	STDMETHOD_(void, writeUInt32)
217 	(   THIS_
218 		UInt8 reg,
219 		UInt32 value
220 	)   PURE;
221 	STDMETHOD_(void, setUInt32Bit)
222 	(   THIS_
223 		UInt8 reg,
224 		UInt32 flag
225 	)   PURE;
226 	STDMETHOD_(void, clearUInt32Bit)
227 	(   THIS_
228 		UInt8 reg,
229 		UInt32 flag
230 	)   PURE;
231 	STDMETHOD_(UInt8, readMixer)
232 	(   THIS_
233 		UInt8 index
234 	)   PURE;
235 	STDMETHOD_(void, writeMixer)
236 	(   THIS_
237 		UInt8 index,
238 		UInt8 value
239 	)   PURE;
240 	STDMETHOD_(void, setMixerBit)
241 	(   THIS_
242 		UInt8 index,
243 		UInt8 flag
244 	)   PURE;
245 	STDMETHOD_(void, clearMixerBit)
246 	(   THIS_
247 		UInt8 index,
248 		UInt8 flag
249 	)   PURE;
250 	STDMETHOD_(void,resetMixer)
251 	(   THIS_
252 	)   PURE;
253 	STDMETHOD_(NTSTATUS,activateMPU)
254 	(   THIS_
255 		ULONG*          MPUBase
256 	)   PURE;
257 	STDMETHOD_(NTSTATUS,loadSBMixerFromMemory)
258 	(   THIS_
259 	)   PURE;
260 };
261 typedef ICMIAdapter *PCMIADAPTER;
262 
263 // GUIDs
264 
265 // {34B338A2-BB40-4ecd-B97A-AEB03F325825}
266 DEFINE_GUID(IID_ICMIAdapter, 0x34b338a2, 0xbb40, 0x4ecd, 0xb9, 0x7a, 0xae, 0xb0, 0x3f, 0x32, 0x58, 0x25);
267 // {60BB55CF-C960-4ddf-B7A4-243978B2FE7B}
268 DEFINE_GUID(IID_ICMITopolgy, 0x60bb55cf, 0xc960, 0x4ddf, 0xb7, 0xa4, 0x24, 0x39, 0x78, 0xb2, 0xfe, 0x7b);
269 // {E8698236-D854-4da7-BF31-8332C614CE91}
270 DEFINE_GUID(IID_IMiniportWaveCMI, 0xe8698236, 0xd854, 0x4da7, 0xbf, 0x31, 0x83, 0x32, 0xc6, 0x14, 0xce, 0x91);
271 
272 
273 // {9DB14E9A-7BE7-480d-A2FA-32932489DE9C}
274 #define STATIC_PRODUCT_CM8738 \
275 	0x9db14e9a, 0x7be7, 0x480d, {0xa2, 0xfa, 0x32, 0x93, 0x24, 0x89, 0xde, 0x9c}
276 DEFINE_GUIDSTRUCT("9DB14E9A-7BE7-480d-A2FA-32932489DE9C", PRODUCT_CM8738);
277 #define PRODUCT_CM8738 DEFINE_GUIDNAMED(PRODUCT_CM8738)
278 
279 // {9DB14E9A-7BE7-480d-A2FA-32932489DE9D}
280 #define STATIC_COMPONENT_CM8738 \
281 	0x9db14e9a, 0x7be7, 0x480d, {0xa2, 0xfa, 0x32, 0x93, 0x24, 0x89, 0xde, 0x9d}
282 DEFINE_GUIDSTRUCT("9DB14E9A-7BE7-480d-A2FA-32932489DE9D", COMPONENT_CM8738);
283 #define COMPONENT_CM8738 DEFINE_GUIDNAMED(COMPONENT_CM8738)
284 
285 // {9DB14E9A-7BE7-480d-A2FA-32932489DE9E}
286 #define STATIC_MANUFACTURER_CM8738 \
287 	0x9db14e9a, 0x7be7, 0x480d, {0xa2, 0xfa, 0x32, 0x93, 0x24, 0x89, 0xde, 0x9e}
288 DEFINE_GUIDSTRUCT("9DB14E9A-7BE7-480d-A2FA-32932489DE9E", MANUFACTURER_CM8738);
289 #define MANUFACTURER_CM8738 DEFINE_GUIDNAMED(MANUFACTURER_CM8738)
290 
291 
292 #define CMIPCI_VERSION   0x00
293 
294 // topology node names (refer to .inf file)
295 // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF0}
296 #define STATIC_CMINAME_IEC_5V \
297     0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF0}
298 DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF0", CMINAME_IEC_5V);
299 #define CMINAME_IEC_5V DEFINE_GUIDNAMED(CMINAME_IEC_5V)
300 
301 // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF1}
302 #define STATIC_CMINAME_IEC_OUT \
303     0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF1}
304 DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF1", CMINAME_IEC_OUT);
305 #define CMINAME_IEC_OUT DEFINE_GUIDNAMED(CMINAME_IEC_OUT)
306 
307 // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF2}
308 #define STATIC_CMINAME_IEC_INVERSE \
309     0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF2}
310 DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF2", CMINAME_IEC_INVERSE);
311 #define CMINAME_IEC_INVERSE DEFINE_GUIDNAMED(CMINAME_IEC_INVERSE)
312 
313 // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF3}
314 #define STATIC_CMINAME_IEC_MONITOR \
315     0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF3}
316 DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF3", CMINAME_IEC_MONITOR);
317 #define CMINAME_IEC_MONITOR DEFINE_GUIDNAMED(CMINAME_IEC_MONITOR)
318 
319 // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF4}
320 #define STATIC_CMINAME_DAC \
321     0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF4}
322 DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF4", CMINAME_DAC);
323 #define CMINAME_DAC DEFINE_GUIDNAMED(CMINAME_DAC)
324 
325 // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF5}
326 #define STATIC_CMINAME_IEC_SELECT \
327     0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF5}
328 DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF5", CMINAME_IEC_SELECT);
329 #define CMINAME_IEC_SELECT DEFINE_GUIDNAMED(CMINAME_IEC_SELECT)
330 
331 // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF6}
332 #define STATIC_CMINAME_XCHG_FB \
333     0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF6}
334 DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF6", CMINAME_XCHG_FB);
335 #define CMINAME_XCHG_FB DEFINE_GUIDNAMED(CMINAME_XCHG_FB)
336 
337 // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF7}
338 #define STATIC_CMINAME_BASS2LINE \
339     0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF7}
340 DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF7", CMINAME_BASS2LINE);
341 #define CMINAME_BASS2LINE DEFINE_GUIDNAMED(CMINAME_BASS2LINE)
342 
343 // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF8}
344 #define STATIC_CMINAME_CENTER2LINE \
345     0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF8}
346 DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF8", CMINAME_CENTER2LINE);
347 #define CMINAME_CENTER2LINE DEFINE_GUIDNAMED(CMINAME_CENTER2LINE)
348 
349 // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF9}
350 #define STATIC_CMINAME_IEC_COPYRIGHT \
351     0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF9}
352 DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DF9", CMINAME_IEC_COPYRIGHT);
353 #define CMINAME_IEC_COPYRIGHT DEFINE_GUIDNAMED(CMINAME_IEC_COPYRIGHT)
354 
355 // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DFA}
356 #define STATIC_CMINAME_IEC_POLVALID \
357     0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xFA}
358 DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DFA", CMINAME_IEC_POLVALID);
359 #define CMINAME_IEC_POLVALID DEFINE_GUIDNAMED(CMINAME_IEC_POLVALID)
360 
361 // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DFB}
362 #define STATIC_CMINAME_IEC_LOOP \
363     0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xFB}
364 DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DFB", CMINAME_IEC_LOOP);
365 #define CMINAME_IEC_LOOP DEFINE_GUIDNAMED(CMINAME_IEC_LOOP)
366 
367 // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DFC}
368 #define STATIC_CMINAME_REAR2LINE \
369     0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xFC}
370 DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DFC", CMINAME_REAR2LINE);
371 #define CMINAME_REAR2LINE DEFINE_GUIDNAMED(CMINAME_REAR2LINE)
372 
373 // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DFD}
374 #define STATIC_CMINAME_CENTER2MIC \
375     0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xFD}
376 DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DFD", CMINAME_CENTER2MIC);
377 #define CMINAME_CENTER2MIC DEFINE_GUIDNAMED(CMINAME_CENTER2MIC)
378 
379 //topology pins
380 enum
381 {
382 	PIN_WAVEOUT_SOURCE = 0,
383 	PIN_SPDIFIN_SOURCE,
384 	PIN_MIC_SOURCE,
385 	PIN_CD_SOURCE,
386 	PIN_LINEIN_SOURCE,
387 	PIN_AUX_SOURCE,
388 	PIN_DAC_SOURCE,
389 	PIN_LINEOUT_DEST,
390 	PIN_WAVEIN_DEST,
391 	PIN_SPDIF_AC3_SOURCE,
392 	PIN_SPDIF_AC3_DEST,
393 
394 	PIN_INVALID
395 };
396 
397 //topology nodes
398 enum
399 {
400 	KSNODE_TOPO_WAVEOUT_VOLUME = 0,
401 	KSNODE_TOPO_WAVEOUT_MUTE,
402 	KSNODE_TOPO_MICOUT_VOLUME,
403 	KSNODE_TOPO_LINEOUT_MIX,
404 	KSNODE_TOPO_LINEOUT_VOLUME,
405 	KSNODE_TOPO_WAVEIN_SUM,
406 	KSNODE_TOPO_CD_VOLUME,
407 	KSNODE_TOPO_LINEIN_VOLUME,
408 	KSNODE_TOPO_AUX_VOLUME,
409 	KSNODE_TOPO_MICIN_VOLUME,
410 	KSNODE_TOPO_MICIN_LOUDNESS,
411 	KSNODE_TOPO_MICOUT_LOUDNESS,
412 	KSNODE_TOPO_CD_MUTE,
413 	KSNODE_TOPO_LINEIN_MUTE,
414 	KSNODE_TOPO_MICOUT_MUTE,
415 	KSNODE_TOPO_AUX_MUTE,
416 	KSNODE_TOPO_LINEIN_MUTE_IN,
417 	KSNODE_TOPO_MIC_MUTE_IN,
418 	KSNODE_TOPO_AUX_MUTE_IN,
419 	KSNODE_TOPO_CD_MUTE_IN,
420 	KSNODE_TOPO_WAVEOUT_MUTE_IN,
421 	KSNODE_TOPO_IEC_5V,
422 	KSNODE_TOPO_IEC_OUT,
423 	KSNODE_TOPO_IEC_INVERSE,
424 	KSNODE_TOPO_IEC_MONITOR,
425 	KSNODE_TOPO_IEC_SELECT,
426 	KSNODE_TOPO_SPDIF_AC3_MUTE,
427 	KSNODE_TOPO_SPDIF_AC3_MUX,
428 	KSNODE_TOPO_XCHG_FB,
429 	KSNODE_TOPO_BASS2LINE,
430 	KSNODE_TOPO_CENTER2LINE,
431 	KSNODE_TOPO_IEC_COPYRIGHT,
432 	KSNODE_TOPO_IEC_POLVALID,
433 	KSNODE_TOPO_IEC_LOOP,
434 	KSNODE_TOPO_REAR2LINE,
435 	KSNODE_TOPO_CENTER2MIC,
436 	KSNODE_TOPO_MASTER_MUTE_DUMMY,
437 
438 	KSNODE_TOPO_INVALID
439 };
440 
441 //wave miniport pins
442 enum
443 {
444 	PIN_WAVE_CAPTURE_SINK = 0,
445 	PIN_WAVE_CAPTURE_SOURCE,
446 	PIN_WAVE_RENDER_SINK,
447 	PIN_WAVE_RENDER_SOURCE,
448 	PIN_WAVE_AC3_RENDER_SINK,
449 	PIN_WAVE_AC3_RENDER_SOURCE,
450 
451 	PIN_WAVE_INVALID
452 };
453 
454 //wave miniport nodes
455 enum
456 {
457 	KSNODE_WAVE_ADC = 0,
458 	KSNODE_WAVE_VOLUME1,
459 	KSNODE_WAVE_3D_EFFECTS,
460 	KSNODE_WAVE_SUPERMIX,
461 	KSNODE_WAVE_VOLUME2,
462 	KSNODE_WAVE_SRC,
463 	KSNODE_WAVE_SUM,
464 	KSNODE_WAVE_DAC,
465 	KSNODE_WAVE_SPDIF,
466 
467 	KSNODE_WAVE_INVALID
468 };
469 
470 #endif //_INTERFACES_HPP_
471