ReactOS 0.4.17-dev-116-ga4b6fe9
pciidex.c
Go to the documentation of this file.
1/*
2 * PROJECT: PCI IDE bus driver extension
3 * LICENSE: See COPYING in the top level directory
4 * PURPOSE: Main file
5 * COPYRIGHT: Copyright 2005 Hervé Poussineau <hpoussin@reactos.org>
6 */
7
8#include "pciidex.h"
9
11
14 _In_ __callback PATA_PCI_MATCH_FN MatchFunction,
16{
17 ULONG BusNumber, DeviceNumber, FunctionNumber;
18
19 for (BusNumber = 0; BusNumber < 0xFF; ++BusNumber)
20 {
22 {
23 for (FunctionNumber = 0; FunctionNumber < PCI_MAX_FUNCTION; ++FunctionNumber)
24 {
29
30 PciSlot.u.AsULONG = 0;
31 PciSlot.u.bits.DeviceNumber = DeviceNumber;
32 PciSlot.u.bits.FunctionNumber = FunctionNumber;
33
37 &Buffer,
38 0,
39 sizeof(Buffer));
40 if (BytesRead != sizeof(Buffer) ||
41 PciConfig->VendorID == PCI_INVALID_VENDORID ||
42 PciConfig->VendorID == 0)
43 {
44 if (FunctionNumber == 0)
45 {
46 /* This slot has no single- or a multi-function device */
47 break;
48 }
49 else
50 {
51 /* Continue scanning the functions */
52 continue;
53 }
54 }
55
56 if (MatchFunction(Context, BusNumber, PciSlot, PciConfig))
57 return TRUE;
58
60 {
61 /* The device is a single function device */
62 break;
63 }
64 }
65 }
66 }
67
68 return FALSE;
69}
70
71VOID
73 _In_ PATA_CONTROLLER Controller,
75 _In_ ULONG ConfigDataOffset,
77{
78 Controller->GetBusData(Controller->BusInterfaceContext,
80 Buffer,
81 ConfigDataOffset,
83}
84
85VOID
87 _In_ PATA_CONTROLLER Controller,
89 _In_ ULONG ConfigDataOffset,
91{
92 Controller->SetBusData(Controller->BusInterfaceContext,
94 Buffer,
95 ConfigDataOffset,
97}
98
99VOID
101{
104
106
107 DueTime.QuadPart = PORT_TIMER_TICK_MS * -10000LL;
108
112}
113
114CODE_SEG("PAGE")
116NTAPI
120{
122
123 PAGED_CODE();
124
125 if (IS_FDO(DeviceObject->DeviceExtension))
126 {
128
130 Status = IoCallDriver(FdoExtension->Common.LowerDeviceObject, Irp);
131 }
132 else
133 {
134 Status = Irp->IoStatus.Status;
136 }
137
138 return Status;
139}
140
141CODE_SEG("PAGE")
142VOID
143NTAPI
146{
148
149 PAGED_CODE();
150
151 NOTHING;
152}
153
154CODE_SEG("PAGE")
158 _In_ PIRP Irp,
160{
161 PCOMMON_DEVICE_EXTENSION FdoExt = CommonExt->FdoExt;
162 PDEVICE_OBJECT TopDeviceObject;
163 PIO_STACK_LOCATION IoStack, SubStack;
164 PIRP SubIrp;
167
168 PAGED_CODE();
169 ASSERT(!IS_FDO(CommonExt));
170
171 TopDeviceObject = IoGetAttachedDeviceReference(FdoExt->Self);
172
173 SubIrp = IoAllocateIrp(TopDeviceObject->StackSize, FALSE);
174 if (!SubIrp)
175 {
176 ObDereferenceObject(TopDeviceObject);
178 }
179
181
183 SubStack = IoGetNextIrpStackLocation(SubIrp);
184 RtlCopyMemory(SubStack, IoStack, sizeof(*SubStack));
185
187 SubStack->Parameters.DeviceCapabilities.Capabilities = DeviceCapabilities;
188
191 &Event,
192 TRUE,
193 TRUE,
194 TRUE);
195
197
198 Status = IoCallDriver(TopDeviceObject, SubIrp);
199 if (Status == STATUS_PENDING)
200 {
202 }
203
204 ObDereferenceObject(TopDeviceObject);
205
206 Status = SubIrp->IoStatus.Status;
207 IoFreeIrp(SubIrp);
208
209 return Status;
210}
211
212CODE_SEG("PAGE")
216 _In_ PIRP Irp)
217{
218 PIO_STACK_LOCATION IoStack;
220 volatile LONG* Counter;
221
222 PAGED_CODE();
223
224 if (!IS_FDO(CommonExt))
225 {
226 Status = PciIdeXPnpRepeatRequest(CommonExt, Irp, NULL);
227 }
228 else
229 {
230 if (!NT_VERIFY(IoForwardIrpSynchronously(CommonExt->LowerDeviceObject, Irp)))
231 return STATUS_UNSUCCESSFUL;
232 Status = Irp->IoStatus.Status;
233 }
234 if (!NT_SUCCESS(Status))
235 return Status;
236
238 switch (IoStack->Parameters.UsageNotification.Type)
239 {
241 Counter = &CommonExt->PageFiles;
242 break;
243
245 Counter = &CommonExt->HibernateFiles;
246 break;
247
249 Counter = &CommonExt->DumpFiles;
250 break;
251
252 default:
253 return Status;
254 }
255
257
258 if (!IS_FDO(CommonExt))
259 IoInvalidateDeviceState(CommonExt->Self);
260
261 return STATUS_SUCCESS;
262}
263
264CODE_SEG("PAGE")
268 _In_ PIRP Irp)
269{
270 PAGED_CODE();
271
272 if (CommonExt->PageFiles || CommonExt->HibernateFiles || CommonExt->DumpFiles)
273 Irp->IoStatus.Information |= PNP_DEVICE_NOT_DISABLEABLE;
274
275 if (IS_FDO(CommonExt))
276 Irp->IoStatus.Status = STATUS_SUCCESS;
277
278 return STATUS_SUCCESS;
279}
280
282NTAPI
285 _In_ PIRP Irp,
286 _In_reads_opt_(_Inexpressible_("varies")) PVOID Context)
287{
289
290 if (Irp->PendingReturned)
292
294}
295
296static
297CODE_SEG("PAGE")
305{
308 PIRP Irp;
311
312 PAGED_CODE();
313
315
317 CommonExt->LowerDeviceObject,
318 NULL,
319 0,
320 NULL,
321 &Event,
322 &IoStatus);
323 if (!Irp)
325
326 Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
327 Irp->IoStatus.Information = 0;
328
330 Stack->MinorFunction = IRP_MN_QUERY_INTERFACE;
331 Stack->Parameters.QueryInterface.InterfaceType = Guid;
332 Stack->Parameters.QueryInterface.Version = Version;
333 Stack->Parameters.QueryInterface.Size = Size;
334 Stack->Parameters.QueryInterface.Interface = Interface;
335 Stack->Parameters.QueryInterface.InterfaceSpecificData = NULL;
336
337 Status = IoCallDriver(CommonExt->LowerDeviceObject, Irp);
338 if (Status == STATUS_PENDING)
339 {
341 Status = IoStatus.Status;
342 }
343
344 return Status;
345}
346
347static
348CODE_SEG("PAGE")
353 _Out_ PVOID *ControllerContext)
354{
357 ULONG DeviceExtensionSize;
360 WCHAR DeviceNameBuffer[sizeof("\\Device\\Ide\\PciIde99999")];
362
363 PAGED_CODE();
364
365 Status = RtlStringCbPrintfW(DeviceNameBuffer,
366 sizeof(DeviceNameBuffer),
367 L"\\Device\\Ide\\PciIde%lu",
370 RtlInitUnicodeString(&DeviceName, DeviceNameBuffer);
371
372 INFO("%s(%p, %p, %p) '%wZ'\n",
374
377
378 Status = RtlULongAdd(DriverExtension->MiniControllerExtensionSize,
379 sizeof(*FdoExtension),
380 &DeviceExtensionSize);
381 if (!NT_SUCCESS(Status))
382 {
383 ERR("Invalid miniport extension size %lx\n", DriverExtension->MiniControllerExtensionSize);
384 return Status;
385 }
386
388 DeviceExtensionSize,
389 &DeviceName,
392 FALSE,
393 &Fdo);
394 if (!NT_SUCCESS(Status))
395 {
396 ERR("Failed to create FDO 0x%lx\n", Status);
397 return Status;
398 }
399
400 FdoExtension = Fdo->DeviceExtension;
401
403 FdoExtension->Common.Flags = DO_IS_FDO;
404 FdoExtension->Common.Self = Fdo;
405 IoInitializeRemoveLock(&FdoExtension->Common.RemoveLock, TAG_PCIIDEX, 0, 0);
406
407 FdoExtension->DriverObject = DriverObject;
409 FdoExtension->ControllerNumber = PciIdeControllerNumber++;
410
411 ExInitializeFastMutex(&FdoExtension->PdoListSyncMutex);
412 InitializeListHead(&FdoExtension->PdoListHead);
413
414 KeInitializeSpinLock(&FdoExtension->Controller.Lock);
415
418 &FdoExtension->Common.LowerDeviceObject);
419 if (!NT_SUCCESS(Status))
420 {
421 ERR("Failed to attach FDO 0x%lx\n", Status);
422 goto Failure;
423 }
424
425 /* DMA buffers alignment */
426 Fdo->AlignmentRequirement = FdoExtension->Common.LowerDeviceObject->AlignmentRequirement;
427 Fdo->AlignmentRequirement = max(Fdo->AlignmentRequirement, ATA_MIN_BUFFER_ALIGNMENT);
428
429#if defined(ATA_DETECT_LEGACY_DEVICES)
430 if (ControllerContext)
431 {
432 FdoExtension->Controller.Flags |= CTRL_FLAG_NON_PNP;
433 *ControllerContext = FdoExtension;
434 }
435 else
436#endif
437 {
438 BUS_INTERFACE_STANDARD BusInterface;
439
441 &GUID_BUS_INTERFACE_STANDARD,
442 &BusInterface,
444 sizeof(BusInterface));
445 if (!NT_SUCCESS(Status))
446 {
447 ERR("No PCI bus interface 0x%lx\n", Status);
448 goto Failure;
449 }
450
451 FdoExtension->Controller.BusInterfaceContext = BusInterface.Context;
452 FdoExtension->Controller.SetBusData = BusInterface.SetBusData;
453 FdoExtension->Controller.GetBusData = BusInterface.GetBusData;
454 }
455
456 Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
457 return STATUS_SUCCESS;
458
459Failure:
460 if (FdoExtension->Common.LowerDeviceObject)
461 IoDetachDevice(FdoExtension->Common.LowerDeviceObject);
462
464
465 return Status;
466}
467
468CODE_SEG("PAGE")
470NTAPI
474{
475 PAGED_CODE();
476
478}
479
480static
481CODE_SEG("PAGE")
482VOID
484{
488 UNICODE_STRING DirectoryName = RTL_CONSTANT_STRING(L"\\Device\\Ide");
489
490 PAGED_CODE();
491
493 &DirectoryName,
495 NULL,
496 NULL);
497
499 if (NT_SUCCESS(Status))
500 {
501 /* We don't need a handle for a permanent object */
503 }
504 /*
505 * Ignore directory creation failures (don't report them as a driver initialization error)
506 * as the directory may have already been created by another driver.
507 * We will handle fatal errors later via IoCreateDevice() call.
508 */
509}
510
511CODE_SEG("PAGE")
513NTAPI
517 _In_ PCONTROLLER_PROPERTIES HwGetControllerProperties,
519{
522
523 PAGED_CODE();
524
525 INFO("PciIdeXInitialize(%p '%wZ' %p 0x%lx)\n",
526 DriverObject, RegistryPath, HwGetControllerProperties, ExtensionSize);
527
528 /* ReactOS-specific: Check for our legacy detection magic */
530 {
531#if defined(ATA_DETECT_LEGACY_DEVICES)
532 PPCIIDEX_LEGACY_CONTROLLER_INTERFACE ControllerInferface;
533
534 ControllerInferface = (PVOID)HwGetControllerProperties;
535 ControllerInferface->Version = PCIIDEX_INTERFACE_VERSION;
536 ControllerInferface->AddDevice = PciIdeXAddDeviceEx;
537 ControllerInferface->StartDevice = PciIdeXFdoStartDevice;
538 ControllerInferface->RemoveDevice = PciIdeXFdoRemoveDevice;
539
540 ExtensionSize = 0;
541#else
543#endif
544 }
545
548 sizeof(*DriverExtension),
550 if (!NT_SUCCESS(Status))
551 return Status;
552
554 DriverExtension->MiniControllerExtensionSize = ExtensionSize;
555 DriverExtension->HwGetControllerProperties = HwGetControllerProperties;
556
560 DriverObject->DriverExtension->AddDevice = PciIdeXAddDevice;
561 DriverObject->DriverUnload = PciIdeXUnload;
562
563 /* Create a directory to hold the driver's device objects */
565
566 return STATUS_SUCCESS;
567}
568
569CODE_SEG("PAGE") /* This function is too small to be placed into INIT section */
571NTAPI
575{
578
579 PAGED_CODE();
580
581 return STATUS_SUCCESS;
582}
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
#define PAGED_CODE()
#define CODE_SEG(...)
unsigned char BOOLEAN
Definition: actypes.h:127
#define PCIIDEX_INTERFACE_VERSION
Definition: ata_shared.h:12
#define PCIIDEX_GET_CONTROLLER_INTERFACE_SIGNATURE
Definition: ata_shared.h:481
#define ATA_MIN_BUFFER_ALIGNMENT
Definition: ata_shared.h:30
#define DO_IS_FDO
Definition: atapi.h:430
#define IS_FDO(p)
Definition: atapi.h:173
LONG NTSTATUS
Definition: precomp.h:26
#define ERR(fmt,...)
Definition: precomp.h:57
PDEVICE_OBJECT PhysicalDeviceObject
Definition: btrfs_drv.h:1157
#define FILE_DEVICE_SECURE_OPEN
Definition: cdrw_usr.h:46
#define IRP_MJ_PNP
Definition: cdrw_usr.h:52
Definition: bufpool.h:45
_In_ PCHAR _In_ ULONG DeviceNumber
Definition: classpnp.h:1230
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_NOT_SUPPORTED
Definition: d3dkmdt.h:48
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define RTL_CONSTANT_STRING(s)
Definition: combase.c:35
DRIVER_INITIALIZE DriverEntry
Definition: condrv.c:21
#define L(x)
Definition: resources.c:13
#define __FUNCTION__
Definition: types.h:116
#define INFO
Definition: debug.h:89
NTSTATUS NTAPI PciIdeXDispatchPower(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
Definition: power.c:53
@ FdoExtension
Definition: precomp.h:48
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
Definition: env_spec_w32.h:478
#define KeInitializeEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:477
#define KeSetEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:476
#define KeGetCurrentIrql()
Definition: env_spec_w32.h:706
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
#define KeInitializeSpinLock(sl)
Definition: env_spec_w32.h:604
ULONG Handle
Definition: gdb_input.c:15
Status
Definition: gdiplustypes.h:25
ULONG NTAPI HalGetBusDataByOffset(IN BUS_DATA_TYPE BusDataType, IN ULONG BusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
Definition: bus.c:73
NTSTATUS(NTAPI * PCONTROLLER_PROPERTIES)(_In_ PVOID DeviceExtension, _In_ PIDE_CONTROLLER_PROPERTIES ControllerProperties)
Definition: ide.h:245
#define NOTHING
Definition: input_list.c:10
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
nsresult QueryInterface(nsIIDRef riid, void **result)
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
Definition: irp.cpp:490
#define ASSERT(a)
Definition: mode.c:44
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:115
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
Definition: mxum.h:159
_In_ PIOMMU_DEVICE_PATH _In_ PIOMMU_SVM_CAPABILITIES DeviceCapabilities
Definition: haltypes.h:1824
#define KernelMode
Definition: asm.h:38
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
NTSYSAPI NTSTATUS NTAPI ZwCreateDirectoryObject(_Out_ PHANDLE DirectoryHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes)
#define _In_reads_bytes_(s)
Definition: no_sal2.h:170
#define _Inout_
Definition: no_sal2.h:162
#define _Out_
Definition: no_sal2.h:160
#define _In_reads_opt_(s)
Definition: no_sal2.h:222
#define _In_
Definition: no_sal2.h:158
#define _Out_writes_bytes_all_(s)
Definition: no_sal2.h:194
#define _In_opt_
Definition: no_sal2.h:212
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define DIRECTORY_ALL_ACCESS
Definition: nt_native.h:1262
#define RTL_SIZEOF_THROUGH_FIELD(type, field)
Definition: ntbasedef.h:684
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
@ NotificationEvent
@ SynchronizationEvent
#define IoSkipCurrentIrpStackLocation(Irp)
Definition: ntifs_ex.h:421
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
Definition: device.c:1032
NTSTATUS NTAPI IoAttachDeviceToDeviceStackSafe(IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice, IN OUT PDEVICE_OBJECT *AttachedToDeviceObject)
Definition: device.c:981
VOID NTAPI IoDetachDevice(IN PDEVICE_OBJECT TargetDevice)
Definition: device.c:1297
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: device.c:1252
PDEVICE_OBJECT NTAPI IoGetAttachedDeviceReference(PDEVICE_OBJECT DeviceObject)
Definition: device.c:1407
PVOID NTAPI IoGetDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress)
Definition: driver.c:1916
NTSTATUS NTAPI IoAllocateDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress, IN ULONG DriverObjectExtensionSize, OUT PVOID *DriverObjectExtension)
Definition: driver.c:1838
PIRP NTAPI IoBuildSynchronousFsdRequest(IN ULONG MajorFunction, IN PDEVICE_OBJECT DeviceObject, IN PVOID Buffer, IN ULONG Length, IN PLARGE_INTEGER StartingOffset, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
Definition: irp.c:1069
#define IoCompleteRequest
Definition: irp.c:1240
PIRP NTAPI IoAllocateIrp(IN CCHAR StackSize, IN BOOLEAN ChargeQuota)
Definition: irp.c:615
BOOLEAN NTAPI IoForwardIrpSynchronously(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: irp.c:1625
#define IoCallDriver
Definition: irp.c:1225
VOID NTAPI IoFreeIrp(IN PIRP Irp)
Definition: irp.c:1666
NTSTRSAFEVAPI RtlStringCbPrintfW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
Definition: ntstrsafe.h:1173
PPCI_DRIVER_EXTENSION DriverExtension
Definition: pci.c:31
NTSTATUS PciIdeXPnpQueryDeviceUsageNotification(_In_ PCOMMON_DEVICE_EXTENSION CommonExt, _In_ PIRP Irp)
Definition: pciidex.c:214
VOID PciWrite(_In_ PATA_CONTROLLER Controller, _In_reads_bytes_(BufferLength) PVOID Buffer, _In_ ULONG ConfigDataOffset, _In_ ULONG BufferLength)
Definition: pciidex.c:86
VOID PciRead(_In_ PATA_CONTROLLER Controller, _Out_writes_bytes_all_(BufferLength) PVOID Buffer, _In_ ULONG ConfigDataOffset, _In_ ULONG BufferLength)
Definition: pciidex.c:72
VOID AtaSleep(VOID)
Definition: pciidex.c:100
static NTSTATUS PciIdeXAddDeviceEx(_In_ PDRIVER_OBJECT DriverObject, _In_ PDEVICE_OBJECT PhysicalDeviceObject, _Out_ PVOID *ControllerContext)
Definition: pciidex.c:350
NTSTATUS NTAPI PciIdeXInitialize(_In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath, _In_ PCONTROLLER_PROPERTIES HwGetControllerProperties, _In_ ULONG ExtensionSize)
Definition: pciidex.c:514
NTSTATUS PciIdeXPnpRepeatRequest(_In_ PCOMMON_DEVICE_EXTENSION CommonExt, _In_ PIRP Irp, _In_opt_ PDEVICE_CAPABILITIES DeviceCapabilities)
Definition: pciidex.c:156
BOOLEAN PciFindDevice(_In_ __callback PATA_PCI_MATCH_FN MatchFunction, _In_ PVOID Context)
Definition: pciidex.c:13
static VOID PciIdeXCreateIdeDirectory(VOID)
Definition: pciidex.c:483
static NTSTATUS PciIdeXPnpQueryInterface(_In_ PCOMMON_DEVICE_EXTENSION CommonExt, _In_ const GUID *Guid, _Out_ PVOID Interface, _In_ ULONG Version, _In_ ULONG Size)
Definition: pciidex.c:299
NTSTATUS NTAPI PciIdeXDispatchWmi(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
Definition: pciidex.c:117
NTSTATUS PciIdeXPnpQueryPnpDeviceState(_In_ PCOMMON_DEVICE_EXTENSION CommonExt, _In_ PIRP Irp)
Definition: pciidex.c:266
ULONG PciIdeControllerNumber
Definition: pciidex.c:10
CONTROLLER_PNP_START_DEVICE PciIdeXFdoStartDevice
Definition: pciidex.h:468
DRIVER_UNLOAD PciIdeXUnload
Definition: pciidex.h:512
_In_ ULONG _In_ PCI_SLOT_NUMBER PciSlot
Definition: pciidex.h:66
#define CTRL_FLAG_NON_PNP
Definition: pciidex.h:228
DRIVER_ADD_DEVICE PciIdeXAddDevice
Definition: pciidex.h:515
_In_ ULONG BusNumber
Definition: pciidex.h:65
#define PORT_TIMER_TICK_MS
Definition: pciidex.h:54
ATA_PCI_MATCH_FN * PATA_PCI_MATCH_FN
Definition: pciidex.h:68
IO_COMPLETION_ROUTINE PciIdeXPdoCompletionRoutine
Definition: pciidex.h:521
CONTROLLER_PNP_REMOVE_DEVICE PciIdeXFdoRemoveDevice
Definition: pciidex.h:471
#define TAG_PCIIDEX
Definition: pciidex.h:32
_In_ ULONG _In_ PCI_SLOT_NUMBER _In_ PPCI_COMMON_HEADER PciConfig
Definition: pciidex.h:67
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
VOID NTAPI IoInvalidateDeviceState(IN PDEVICE_OBJECT DeviceObject)
Definition: pnpmgr.c:1847
#define FILE_DEVICE_BUS_EXTENDER
Definition: winioctl.h:87
#define OBJ_KERNEL_HANDLE
Definition: winternl.h:231
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
#define OBJ_PERMANENT
Definition: winternl.h:226
#define __callback
Definition: sal_old.h:112
@ PCIConfiguration
Definition: miniport.h:93
WORD ExtensionSize
Definition: apisets.c:17
#define STATUS_MORE_PROCESSING_REQUIRED
Definition: shellext.h:68
#define STATUS_SUCCESS
Definition: shellext.h:65
NTSTATUS NTAPI PciIdeXDispatchPnp(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
Definition: pdo.c:1083
_In_ PVOID Context
Definition: storport.h:2269
PGET_SET_DEVICE_DATA SetBusData
Definition: iotypes.h:915
PGET_SET_DEVICE_DATA GetBusData
Definition: iotypes.h:916
PDEVICE_OBJECT Self
Definition: pciidex.h:376
union _IO_STACK_LOCATION::@1696 Parameters
struct _IO_STACK_LOCATION::@4454::@4487 UsageNotification
struct _IO_STACK_LOCATION::@4454::@4481 DeviceCapabilities
IO_STATUS_BLOCK IoStatus
Legacy detection interface with the PCIIDEX driver.
Definition: ata_shared.h:489
PCONTROLLER_PNP_REMOVE_DEVICE RemoveDevice
Definition: ata_shared.h:493
PCONTROLLER_PNP_START_DEVICE StartDevice
Definition: ata_shared.h:492
PCONTROLLER_PNP_ADD_DEVICE AddDevice
Definition: ata_shared.h:491
struct _PCI_SLOT_NUMBER::@4498::@4499 bits
union _PCI_SLOT_NUMBER::@4498 u
static LARGE_INTEGER Counter
Definition: clock.c:43
#define max(a, b)
Definition: svc.c:63
#define STATUS_PENDING
Definition: telnetd.h:14
BOOLEAN NTAPI KeSetTimer(IN OUT PKTIMER Timer, IN LARGE_INTEGER DueTime, IN PKDPC Dpc OPTIONAL)
Definition: timerobj.c:282
VOID NTAPI KeInitializeTimer(OUT PKTIMER Timer)
Definition: timerobj.c:233
unsigned char UCHAR
Definition: typedefs.h:53
#define NTAPI
Definition: typedefs.h:36
void * PVOID
Definition: typedefs.h:50
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG
Definition: typedefs.h:59
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2061
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
Definition: wdfdevice.h:3777
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
Definition: wdfdevice.h:3281
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
Definition: wdfdriver.h:215
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
Definition: wdfdriver.h:213
_Must_inspect_result_ _In_ WDFDEVICE Fdo
Definition: wdffdo.h:461
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
Definition: wdffdo.h:465
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT Version
Definition: wdffdo.h:469
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
Definition: wdfiotarget.h:870
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
Definition: wdfobject.h:762
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:639
_In_ WDFTIMER _In_ LONGLONG DueTime
Definition: wdftimer.h:190
#define DeviceCapabilities
Definition: wingdi.h:4895
FORCEINLINE VOID ExInitializeFastMutex(_Out_ PFAST_MUTEX FastMutex)
Definition: exfuncs.h:274
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
Definition: iofuncs.h:2695
#define IoAdjustPagingPathCount(_Count, _Increment)
#define IoInitializeRemoveLock(Lock, AllocateTag, MaxLockedMinutes, HighWatermark)
Definition: iofuncs.h:2833
#define PCI_BUS_INTERFACE_STANDARD_VERSION
Definition: iotypes.h:5339
#define PCI_INVALID_VENDORID
Definition: iotypes.h:3603
#define PNP_DEVICE_NOT_DISABLEABLE
Definition: iotypes.h:1006
#define PCI_WHICHSPACE_CONFIG
Definition: iotypes.h:3646
#define IO_NO_INCREMENT
Definition: iotypes.h:598
#define IRP_MN_QUERY_INTERFACE
#define PCI_MAX_FUNCTION
Definition: iotypes.h:3601
#define IRP_MJ_SYSTEM_CONTROL
struct _PCI_COMMON_HEADER * PPCI_COMMON_HEADER
* PDEVICE_CAPABILITIES
Definition: iotypes.h:965
#define PCI_MAX_DEVICES
Definition: iotypes.h:3600
_In_ USHORT _In_ UCHAR RevisionID
Definition: iotypes.h:893
#define IRP_MJ_POWER
#define PCI_MULTIFUNCTION_DEVICE(PciData)
Definition: iotypes.h:3614
@ DeviceUsageTypeHibernation
Definition: iotypes.h:1171
@ DeviceUsageTypeDumpFile
Definition: iotypes.h:1172
@ DeviceUsageTypePaging
Definition: iotypes.h:1170
@ Executive
Definition: ketypes.h:467
#define ObDereferenceObject
Definition: obfuncs.h:203
#define NT_VERIFY(exp)
Definition: rtlfuncs.h:3304
#define const
Definition: zconf.h:233