2 * PROJECT: ReactOS PCI Bus Driver
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: drivers/bus/pci/pcivrify.c
5 * PURPOSE: PCI Driver Verifier Support
6 * PROGRAMMERS: ReactOS Portable Systems Group
9 /* INCLUDES *******************************************************************/
15 /* GLOBALS ********************************************************************/
17 BOOLEAN PciVerifierRegistered
;
18 PVOID PciVerifierNotificationHandle
;
20 PCI_VERIFIER_DATA PciVerifierFailureTable
[PCI_VERIFIER_CODES
] =
26 "The BIOS has reprogrammed the bus numbers of an active PCI device "
27 "(!devstack %DevObj) during a dock or undock!"
33 "A device in the system did not update it's PMCSR register in the spec "
34 "mandated time (!devstack %DevObj, Power state D%Ulong)"
40 "A driver controlling a PCI device has tried to access OS controlled "
41 "configuration space registers (!devstack %DevObj, Offset 0x%Ulong1, "
46 VFFAILURE_FAIL_UNDER_DEBUGGER
,
48 "A driver controlling a PCI device has tried to read or write from an "
49 "invalid space using IRP_MN_READ/WRITE_CONFIG or via BUS_INTERFACE_STANDARD."
50 " NB: These functions take WhichSpace parameters of the form PCI_WHICHSPACE_*"
51 " and not a BUS_DATA_TYPE (!devstack %DevObj, WhichSpace 0x%Ulong1)"
55 /* FUNCTIONS ******************************************************************/
59 PciVerifierRetrieveFailureData(IN ULONG FailureCode
)
61 PPCI_VERIFIER_DATA VerifierData
;
63 /* Scan the verifier failure table for this code */
64 VerifierData
= PciVerifierFailureTable
;
65 while (VerifierData
->FailureCode
!= FailureCode
)
69 ASSERT(VerifierData
< &PciVerifierFailureTable
[PCI_VERIFIER_CODES
]);
72 /* Return the entry for this code */
78 PciVerifierProfileChangeCallback(IN PVOID NotificationStructure
,
81 /* This function is not yet implemented */
84 return STATUS_SUCCESS
;
89 PciVerifierInit(IN PDRIVER_OBJECT DriverObject
)
93 /* Check if the kernel driver verifier is enabled */
94 if (VfIsVerificationEnabled(VFOBJTYPE_SYSTEM_BIOS
, NULL
))
96 /* Register a notification for changes, to keep track of the PCI tree */
97 Status
= IoRegisterPlugPlayNotification(EventCategoryHardwareProfileChange
,
101 PciVerifierProfileChangeCallback
,
103 &PciVerifierNotificationHandle
);
104 if (NT_SUCCESS(Status
)) PciVerifierRegistered
= TRUE
;