ReactOS 0.4.16-dev-2293-g4d8327b
buspdo.cpp File Reference
#include "driver.h"
#include "adsp.h"
Include dependency graph for buspdo.cpp:

Go to the source code of this file.

Functions

NTSTATUS Bus_CreatePdo (_In_ WDFDEVICE Device, _In_ PWDFDEVICE_INIT DeviceInit, _In_ PPDO_IDENTIFICATION_DESCRIPTION Desc)
 
NTSTATUS NTAPI Bus_EvtChildListIdentificationDescriptionDuplicate (WDFCHILDLIST DeviceList, PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SourceIdentificationDescription, PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER DestinationIdentificationDescription)
 
BOOLEAN NTAPI Bus_EvtChildListIdentificationDescriptionCompare (WDFCHILDLIST DeviceList, PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER FirstIdentificationDescription, PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SecondIdentificationDescription)
 
VOID NTAPI Bus_EvtChildListIdentificationDescriptionCleanup (_In_ WDFCHILDLIST DeviceList, _Inout_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription)
 
NTSTATUS NTAPI Bus_EvtDeviceListCreatePdo (WDFCHILDLIST DeviceList, PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription, PWDFDEVICE_INIT ChildInit)
 

Function Documentation

◆ Bus_CreatePdo()

NTSTATUS Bus_CreatePdo ( _In_ WDFDEVICE  Device,
_In_ PWDFDEVICE_INIT  DeviceInit,
_In_ PPDO_IDENTIFICATION_DESCRIPTION  Desc 
)

Definition at line 157 of file buspdo.cpp.

162{
164
166 PPDO_DEVICE_DATA pdoData = NULL;
167 WDFDEVICE hChild = NULL;
169 WDF_OBJECT_ATTRIBUTES pdoAttributes;
172 DECLARE_CONST_UNICODE_STRING(deviceLocation, L"High Definition Audio Bus");
176
177 SklHdAudBusPrint(DEBUG_LEVEL_INFO, DBG_INIT,
178 "%s\n", __func__);
179
180 if (Desc->CodecIds.IsDSP) {
181 //
182 // Set DeviceType
183 //
184 WdfDeviceInitSetDeviceType(DeviceInit, FILE_DEVICE_BUS_EXTENDER);
185
186 //
187 // Provide DeviceID, HardwareIDs, CompatibleIDs and InstanceId
188 //
189 status = RtlUnicodeStringPrintf(&deviceId, L"CSAUDIO\\ADSP&CTLR_VEN_%04X&CTLR_DEV_%04X",
190 Desc->CodecIds.CtlrVenId, Desc->CodecIds.CtlrDevId);
191 if (!NT_SUCCESS(status)) {
192 return status;
193 }
194
195 status = WdfPdoInitAssignInstanceID(DeviceInit, &deviceId);
196 if (!NT_SUCCESS(status)) {
197 return status;
198 }
199
200 status = WdfPdoInitAssignDeviceID(DeviceInit, &deviceId);
201 if (!NT_SUCCESS(status)) {
202 return status;
203 }
204
205 //
206 // NOTE: same string is used to initialize hardware id too
207 //
208 status = WdfPdoInitAddHardwareID(DeviceInit, &deviceId);
209 if (!NT_SUCCESS(status)) {
210 return status;
211 }
212
213 status = RtlUnicodeStringPrintf(&compatId, L"CSAUDIO\\ADSP&CTLR_VEN_%04X&CTLR_DEV_%04X",
214 Desc->CodecIds.CtlrVenId, Desc->CodecIds.CtlrDevId);
215 if (!NT_SUCCESS(status)) {
216 return status;
217 }
218
219 //
220 // NOTE: same string is used to initialize compat id too
221 //
222 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
223 if (!NT_SUCCESS(status)) {
224 return status;
225 }
226 }
227 else {
228 //
229 // Set DeviceType
230 //
231 WdfDeviceInitSetDeviceType(DeviceInit, FILE_DEVICE_SOUND);
232
233 PWCHAR prefix = L"HDAUDIO";
234 PWCHAR funcPrefix = L"";
235 if (Desc->CodecIds.IsGraphicsCodec) {
236 funcPrefix = L"SGPC_";
237 }
238
239 //
240 // Provide DeviceID, HardwareIDs, CompatibleIDs and InstanceId
241 //
242 status = RtlUnicodeStringPrintf(&deviceId, L"%s\\%sFUNC_%02X&VEN_%04X&DEV_%04X&SUBSYS_%08X&REV_%04X",
243 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.VenId, Desc->CodecIds.DevId, Desc->CodecIds.SubsysId, Desc->CodecIds.RevId);
244 if (!NT_SUCCESS(status)) {
245 return status;
246 }
247
248 status = WdfPdoInitAssignDeviceID(DeviceInit, &deviceId);
249 if (!NT_SUCCESS(status)) {
250 return status;
251 }
252
253 //
254 // NOTE: same string is used to initialize hardware id too
255 //
256 status = WdfPdoInitAddHardwareID(DeviceInit, &deviceId);
257 if (!NT_SUCCESS(status)) {
258 return status;
259 }
260
261 //Add second hardware ID without Rev
262 status = RtlUnicodeStringPrintf(&deviceId, L"%s\\%sFUNC_%02X&VEN_%04X&DEV_%04X&SUBSYS_%08X",
263 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.VenId, Desc->CodecIds.DevId, Desc->CodecIds.SubsysId);
264 if (!NT_SUCCESS(status)) {
265 return status;
266 }
267
268 status = WdfPdoInitAddHardwareID(DeviceInit, &deviceId);
269 if (!NT_SUCCESS(status)) {
270 return status;
271 }
272
273 //Add Compatible Ids
274 {
275 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X&CTLR_DEV_%02X&VEN_%04X&DEV_%04X&REV_%04X",
276 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId, Desc->CodecIds.CtlrDevId, Desc->CodecIds.VenId, Desc->CodecIds.DevId, Desc->CodecIds.RevId);
277 if (!NT_SUCCESS(status)) {
278 return status;
279 }
280
281 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
282 if (!NT_SUCCESS(status)) {
283 return status;
284 }
285
286 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X&VEN_%04X&DEV_%04X&REV_%04X",
287 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId, Desc->CodecIds.VenId, Desc->CodecIds.DevId, Desc->CodecIds.RevId);
288 if (!NT_SUCCESS(status)) {
289 return status;
290 }
291
292 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
293 if (!NT_SUCCESS(status)) {
294 return status;
295 }
296
297 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&VEN_%04X&DEV_%04X&REV_%04X",
298 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.VenId, Desc->CodecIds.DevId, Desc->CodecIds.RevId);
299 if (!NT_SUCCESS(status)) {
300 return status;
301 }
302
303 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
304 if (!NT_SUCCESS(status)) {
305 return status;
306 }
307
308 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X&CTLR_DEV_%02X&VEN_%04X&DEV_%04X",
309 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId, Desc->CodecIds.CtlrDevId, Desc->CodecIds.VenId, Desc->CodecIds.DevId);
310 if (!NT_SUCCESS(status)) {
311 return status;
312 }
313
314 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
315 if (!NT_SUCCESS(status)) {
316 return status;
317 }
318
319 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X&VEN_%04X&DEV_%04X",
320 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId, Desc->CodecIds.VenId, Desc->CodecIds.DevId);
321 if (!NT_SUCCESS(status)) {
322 return status;
323 }
324
325 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
326 if (!NT_SUCCESS(status)) {
327 return status;
328 }
329
330 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&VEN_%04X&DEV_%04X",
331 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.VenId, Desc->CodecIds.DevId);
332 if (!NT_SUCCESS(status)) {
333 return status;
334 }
335
336 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
337 if (!NT_SUCCESS(status)) {
338 return status;
339 }
340
341 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X&CTLR_DEV_%02X&VEN_%04X",
342 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId, Desc->CodecIds.CtlrDevId, Desc->CodecIds.VenId);
343 if (!NT_SUCCESS(status)) {
344 return status;
345 }
346
347 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
348 if (!NT_SUCCESS(status)) {
349 return status;
350 }
351
352 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X&VEN_%04X",
353 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId, Desc->CodecIds.VenId);
354 if (!NT_SUCCESS(status)) {
355 return status;
356 }
357
358 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
359 if (!NT_SUCCESS(status)) {
360 return status;
361 }
362
363 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&VEN_%04X",
364 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.VenId);
365 if (!NT_SUCCESS(status)) {
366 return status;
367 }
368
369 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
370 if (!NT_SUCCESS(status)) {
371 return status;
372 }
373
374 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X&CTLR_DEV_%02X",
375 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId, Desc->CodecIds.CtlrDevId);
376 if (!NT_SUCCESS(status)) {
377 return status;
378 }
379
380 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
381 if (!NT_SUCCESS(status)) {
382 return status;
383 }
384
385 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X&CTLR_VEN_%02X",
386 prefix, funcPrefix, Desc->CodecIds.FuncId, Desc->CodecIds.CtlrVenId);
387 if (!NT_SUCCESS(status)) {
388 return status;
389 }
390
391 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
392 if (!NT_SUCCESS(status)) {
393 return status;
394 }
395
396 status = RtlUnicodeStringPrintf(&compatId, L"%s\\%sFUNC_%02X",
397 prefix, funcPrefix, Desc->CodecIds.FuncId);
398 if (!NT_SUCCESS(status)) {
399 return status;
400 }
401
402 status = WdfPdoInitAddCompatibleID(DeviceInit, &compatId);
403 if (!NT_SUCCESS(status)) {
404 return status;
405 }
406 }
407 }
408
409 status = RtlUnicodeStringPrintf(&buffer, L"%02d", Desc->CodecIds.CodecAddress);
410 if (!NT_SUCCESS(status)) {
411 return status;
412 }
413
414 status = WdfPdoInitAssignInstanceID(DeviceInit, &buffer);
415 if (!NT_SUCCESS(status)) {
416 return status;
417 }
418
419 //
420 // Provide a description about the device. This text is usually read from
421 // the device. In the case of USB device, this text comes from the string
422 // descriptor. This text is displayed momentarily by the PnP manager while
423 // it's looking for a matching INF. If it finds one, it uses the Device
424 // Description from the INF file or the friendly name created by
425 // coinstallers to display in the device manager. FriendlyName takes
426 // precedence over the DeviceDesc from the INF file.
427 //
428 if (Desc->CodecIds.IsDSP) {
430 L"Intel Audio DSP");
431 }
432 else {
434 L"High Definition Audio Device");
435 }
436 if (!NT_SUCCESS(status)) {
437 return status;
438 }
439
440 //
441 // You can call WdfPdoInitAddDeviceText multiple times, adding device
442 // text for multiple locales. When the system displays the text, it
443 // chooses the text that matches the current locale, if available.
444 // Otherwise it will use the string for the default locale.
445 // The driver can specify the driver's default locale by calling
446 // WdfPdoInitSetDefaultLocale.
447 //
448 status = WdfPdoInitAddDeviceText(DeviceInit,
449 &buffer,
450 &deviceLocation,
452 if (!NT_SUCCESS(status)) {
453 return status;
454 }
455
456 WdfPdoInitSetDefaultLocale(DeviceInit, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
457
458 //
459 // Initialize the attributes to specify the size of PDO device extension.
460 // All the state information private to the PDO will be tracked here.
461 //
463
464 status = WdfDeviceCreate(&DeviceInit, &pdoAttributes, &hChild);
465 if (!NT_SUCCESS(status)) {
466 return status;
467 }
468
469 //
470 // Get the device context.
471 //
472 pdoData = PdoGetData(hChild);
473
474 pdoData->FdoContext = Desc->FdoContext;
475 RtlCopyMemory(&pdoData->CodecIds, &Desc->CodecIds, sizeof(Desc->CodecIds));
476
477 if (!Desc->CodecIds.IsDSP)
478 Desc->FdoContext->codecs[Desc->CodecIds.CodecAddress] = pdoData;
479
480 //
481 // Set some properties for the child device.
482 //
484 pnpCaps.Removable = WdfFalse;
485 pnpCaps.EjectSupported = Desc->CodecIds.IsGraphicsCodec ? WdfTrue : WdfFalse;
486 pnpCaps.SurpriseRemovalOK = Desc->CodecIds.IsGraphicsCodec ? WdfTrue : WdfFalse;
487
488 pnpCaps.Address = Desc->CodecIds.CodecAddress;
489 pnpCaps.UINumber = Desc->CodecIds.CodecAddress;
490
491 WdfDeviceSetPnpCapabilities(hChild, &pnpCaps);
492
494
495 powerCaps.DeviceD1 = WdfTrue;
496 powerCaps.WakeFromD1 = WdfTrue;
497 powerCaps.DeviceWake = PowerDeviceD1;
498
505
506 WdfDeviceSetPowerCapabilities(hChild, &powerCaps);
507
508 if (Desc->CodecIds.IsDSP) {
509 ADSP_BUS_INTERFACE busInterface = ADSP_BusInterface(pdoData);
511 (PINTERFACE)&busInterface,
512 &GUID_ADSP_BUS_INTERFACE,
513 NULL);
514 status = WdfDeviceAddQueryInterface(hChild, &qiConfig);
515 }
516 else {
517 HDAUDIO_BUS_INTERFACE busInterface = HDA_BusInterface(pdoData);
518
520 (PINTERFACE)&busInterface,
521 &GUID_HDAUDIO_BUS_INTERFACE,
522 NULL);
523
524 status = WdfDeviceAddQueryInterface(hChild, &qiConfig);
525 if (!NT_SUCCESS(status)) {
526 return status;
527 }
528
529 HDAUDIO_BUS_INTERFACE_BDL busInterfaceBDL = HDA_BusInterfaceBDL(pdoData);
531 (PINTERFACE)&busInterfaceBDL,
532 &GUID_HDAUDIO_BUS_INTERFACE_BDL,
533 NULL);
534 status = WdfDeviceAddQueryInterface(hChild, &qiConfig);
535 if (!NT_SUCCESS(status)) {
536 return status;
537 }
538
539 HDAUDIO_BUS_INTERFACE_V2 busInterface2 = HDA_BusInterfaceV2(pdoData);
541 (PINTERFACE)&busInterface2,
542 &GUID_HDAUDIO_BUS_INTERFACE_V2,
543 NULL);
544 status = WdfDeviceAddQueryInterface(hChild, &qiConfig);
545 if (!NT_SUCCESS(status)) {
546 return status;
547 }
548
549 HDAUDIO_BUS_INTERFACE_V3 busInterface3 = HDA_BusInterfaceV3(pdoData);
551 (PINTERFACE)&busInterface3,
552 &GUID_HDAUDIO_BUS_INTERFACE_V3,
553 NULL);
554 status = WdfDeviceAddQueryInterface(hChild, &qiConfig);
555 if (!NT_SUCCESS(status)) {
556 return status;
557 }
558 }
559
560 return status;
561}
ADSP_BUS_INTERFACE ADSP_BusInterface(PVOID Context)
Definition: adsp.cpp:369
LONG NTSTATUS
Definition: precomp.h:26
#define DECLARE_UNICODE_STRING_SIZE(_var, _size)
Definition: reactos.c:2885
#define MAX_INSTANCE_ID_LEN
Definition: buspdo.h:4
#define NULL
Definition: types.h:112
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define L(x)
Definition: resources.c:13
HDAUDIO_BUS_INTERFACE_BDL HDA_BusInterfaceBDL(PVOID Context)
Definition: hdaudio.cpp:1146
HDAUDIO_BUS_INTERFACE HDA_BusInterface(PVOID Context)
Definition: hdaudio.cpp:1119
HDAUDIO_BUS_INTERFACE_V2 HDA_BusInterfaceV2(PVOID Context)
Definition: hdaudio.cpp:1055
#define SklHdAudBusPrint(dbglevel, fmt,...)
Definition: driver.h:111
HDAUDIO_BUS_INTERFACE_V3 HDA_BusInterfaceV3(PVOID Context)
Definition: hdaudio.cpp:1086
GLuint buffer
Definition: glext.h:5915
static HTREEITEM hChild
Definition: treeview.c:383
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
@ PowerSystemSleeping1
Definition: ntpoapi.h:37
@ PowerSystemSleeping2
Definition: ntpoapi.h:38
@ PowerSystemSleeping3
Definition: ntpoapi.h:39
@ PowerSystemShutdown
Definition: ntpoapi.h:41
@ PowerSystemWorking
Definition: ntpoapi.h:36
@ PowerSystemHibernate
Definition: ntpoapi.h:40
@ PowerDeviceD1
Definition: ntpoapi.h:50
@ PowerDeviceD2
Definition: ntpoapi.h:51
@ PowerDeviceD3
Definition: ntpoapi.h:52
NTSTRSAFEVAPI RtlUnicodeStringPrintf(_In_ PUNICODE_STRING DestinationString, _In_ NTSTRSAFE_PCWSTR pszFormat,...)
Definition: ntstrsafe.h:3241
#define FILE_DEVICE_BUS_EXTENDER
Definition: winioctl.h:87
#define FILE_DEVICE_SOUND
Definition: winioctl.h:74
#define MAKELANGID(p, s)
Definition: nls.h:15
#define LANG_ENGLISH
Definition: nls.h:52
#define SUBLANG_ENGLISH_US
Definition: nls.h:222
PFDO_CONTEXT FdoContext
Definition: buspdo.h:49
CODEC_IDS CodecIds
Definition: buspdo.h:51
WDF_TRI_STATE EjectSupported
Definition: wdfdevice.h:1526
WDF_TRI_STATE SurpriseRemovalOK
Definition: wdfdevice.h:1531
DEVICE_POWER_STATE DeviceWake
Definition: wdfdevice.h:1590
DEVICE_POWER_STATE DeviceState[PowerSystemMaximum]
Definition: wdfdevice.h:1584
Definition: ps.c:97
Character const *const prefix
Definition: tempnam.cpp:195
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
uint16_t * PWCHAR
Definition: typedefs.h:56
_Must_inspect_result_ _In_ WDFDEVICE Device
Definition: wdfchildlist.h:474
_In_ PWDFDEVICE_INIT DeviceInit
Definition: wdfcontrol.h:113
#define DECLARE_CONST_UNICODE_STRING(_variablename, _string)
Definition: wdfcore.h:161
FORCEINLINE VOID WDF_DEVICE_PNP_CAPABILITIES_INIT(_Out_ PWDF_DEVICE_PNP_CAPABILITIES Caps)
Definition: wdfdevice.h:1545
FORCEINLINE VOID WDF_DEVICE_POWER_CAPABILITIES_INIT(_Out_ PWDF_DEVICE_POWER_CAPABILITIES Caps)
Definition: wdfdevice.h:1612
#define WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(_attributes, _contexttype)
Definition: wdfobject.h:170
FORCEINLINE VOID WDF_QUERY_INTERFACE_CONFIG_INIT(_Out_ PWDF_QUERY_INTERFACE_CONFIG InterfaceConfig, _In_opt_ PINTERFACE Interface, _In_ CONST GUID *InterfaceType, _In_opt_ PFN_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST EvtDeviceProcessQueryInterfaceRequest)
@ WdfTrue
Definition: wdftypes.h:88
@ WdfFalse
Definition: wdftypes.h:87

Referenced by Bus_EvtDeviceListCreatePdo().

◆ Bus_EvtChildListIdentificationDescriptionCleanup()

VOID NTAPI Bus_EvtChildListIdentificationDescriptionCleanup ( _In_ WDFCHILDLIST  DeviceList,
_Inout_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER  IdentificationDescription 
)

Definition at line 100 of file buspdo.cpp.

114{
117}
PDEVICE_LIST DeviceList
Definition: utils.c:27
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
Definition: wdfchildlist.h:124

Referenced by Fdo_Create().

◆ Bus_EvtChildListIdentificationDescriptionCompare()

BOOLEAN NTAPI Bus_EvtChildListIdentificationDescriptionCompare ( WDFCHILDLIST  DeviceList,
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER  FirstIdentificationDescription,
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER  SecondIdentificationDescription 
)

Definition at line 60 of file buspdo.cpp.

79{
81
83
86 Header);
89 Header);
90
91 SklHdAudBusPrint(DEBUG_LEVEL_INFO, DBG_INIT,
92 "%s\n", __func__);
93
94 return (lhs->FdoContext == rhs->FdoContext) &&
95 (RtlCompareMemory(&lhs->CodecIds, &rhs->CodecIds, sizeof(lhs->CodecIds)) == sizeof(lhs->CodecIds));
96}
Definition: Header.h:9
#define RtlCompareMemory(s1, s2, l)
Definition: env_spec_w32.h:465
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER _In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SecondIdentificationDescription
Definition: wdfchildlist.h:191
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER FirstIdentificationDescription
Definition: wdfchildlist.h:188

Referenced by Fdo_Create().

◆ Bus_EvtChildListIdentificationDescriptionDuplicate()

NTSTATUS NTAPI Bus_EvtChildListIdentificationDescriptionDuplicate ( WDFCHILDLIST  DeviceList,
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER  SourceIdentificationDescription,
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER  DestinationIdentificationDescription 
)

Definition at line 13 of file buspdo.cpp.

37{
39
41
44 Header);
47 Header);
48
49 SklHdAudBusPrint(DEBUG_LEVEL_INFO, DBG_INIT,
50 "%s\n", __func__);
51
52 dst->FdoContext = src->FdoContext;
53 RtlCopyMemory(&dst->CodecIds, &src->CodecIds, sizeof(dst->CodecIds));
54
55 return STATUS_SUCCESS;
56}
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
#define STATUS_SUCCESS
Definition: shellext.h:65
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SourceIdentificationDescription
Definition: wdfchildlist.h:154
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER _Out_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER DestinationIdentificationDescription
Definition: wdfchildlist.h:157

Referenced by Fdo_Create().

◆ Bus_EvtDeviceListCreatePdo()

NTSTATUS NTAPI Bus_EvtDeviceListCreatePdo ( WDFCHILDLIST  DeviceList,
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER  IdentificationDescription,
PWDFDEVICE_INIT  ChildInit 
)

Definition at line 121 of file buspdo.cpp.

139{
141
142 PAGED_CODE();
143
146 Header);
147
148 SklHdAudBusPrint(DEBUG_LEVEL_INFO, DBG_INIT,
149 "%s\n", __func__);
150
151 return Bus_CreatePdo(WdfChildListGetDevice(DeviceList),
152 ChildInit,
153 pDesc);
154}
#define PAGED_CODE()
NTSTATUS Bus_CreatePdo(_In_ WDFDEVICE Device, _In_ PWDFDEVICE_INIT DeviceInit, _In_ PPDO_IDENTIFICATION_DESCRIPTION Desc)
Definition: buspdo.cpp:157
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER _In_ PWDFDEVICE_INIT ChildInit
Definition: wdfchildlist.h:127

Referenced by Fdo_Create().