1 /* Hardware Abstraction Layer Types */
5 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
10 (FASTCALL
*pHalHandlerForBus
)(
11 _In_ INTERFACE_TYPE InterfaceType
,
12 _In_ ULONG BusNumber
);
15 (FASTCALL
*pHalReferenceBusHandler
)(
16 _In_ PBUS_HANDLER BusHandler
);
18 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
19 HalInstalledBusInformation
,
20 HalProfileSourceInformation
,
21 HalInformationClassUnused1
,
23 HalProcessorSpeedInformation
,
24 HalCallbackInformation
,
25 HalMapRegisterInformation
,
27 HalFrameBufferCachingInformation
,
28 HalDisplayBiosInformation
,
29 HalProcessorFeatureInformation
,
30 HalNumaTopologyInterface
,
35 HalQueryAMLIIllegalIOPortAddresses
,
36 HalQueryMaxHotPlugMemoryAddress
,
37 HalPartitionIpiInterface
,
38 HalPlatformInformation
,
39 HalQueryProfileSourceList
,
40 HalInitLogInformation
,
41 HalFrequencyInformation
,
42 HalProcessorBrandString
,
43 HalHypervisorInformation
,
44 HalPlatformTimerInformation
,
45 HalAcpiAuditInformation
46 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
48 typedef enum _HAL_SET_INFORMATION_CLASS
{
49 HalProfileSourceInterval
,
50 HalProfileSourceInterruptHandler
,
52 HalKernelErrorHandler
,
58 HalGenerateCmcInterrupt
,
59 HalProfileSourceTimerHandler
,
61 HalProfileDpgoSourceInterruptHandler
62 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
65 (NTAPI
*pHalQuerySystemInformation
)(
66 _In_ HAL_QUERY_INFORMATION_CLASS InformationClass
,
67 _In_ ULONG BufferSize
,
68 _Inout_updates_bytes_to_(BufferSize
, *ReturnedLength
) PVOID Buffer
,
69 _Out_ PULONG ReturnedLength
);
72 (NTAPI
*pHalSetSystemInformation
)(
73 _In_ HAL_SET_INFORMATION_CLASS InformationClass
,
74 _In_ ULONG BufferSize
,
78 (FASTCALL
*pHalExamineMBR
)(
79 _In_ PDEVICE_OBJECT DeviceObject
,
80 _In_ ULONG SectorSize
,
81 _In_ ULONG MBRTypeIdentifier
,
85 (FASTCALL
*pHalIoReadPartitionTable
)(
86 _In_ PDEVICE_OBJECT DeviceObject
,
87 _In_ ULONG SectorSize
,
88 _In_ BOOLEAN ReturnRecognizedPartitions
,
89 _Out_
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
92 (FASTCALL
*pHalIoSetPartitionInformation
)(
93 _In_ PDEVICE_OBJECT DeviceObject
,
94 _In_ ULONG SectorSize
,
95 _In_ ULONG PartitionNumber
,
96 _In_ ULONG PartitionType
);
99 (FASTCALL
*pHalIoWritePartitionTable
)(
100 _In_ PDEVICE_OBJECT DeviceObject
,
101 _In_ ULONG SectorSize
,
102 _In_ ULONG SectorsPerTrack
,
103 _In_ ULONG NumberOfHeads
,
104 _In_
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
107 (NTAPI
*pHalQueryBusSlots
)(
108 _In_ PBUS_HANDLER BusHandler
,
109 _In_ ULONG BufferSize
,
110 _Out_ PULONG SlotNumbers
,
111 _Out_ PULONG ReturnedLength
);
114 (NTAPI
*pHalInitPnpDriver
)(VOID
);
116 typedef struct _PM_DISPATCH_TABLE
{
120 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
123 (NTAPI
*pHalInitPowerManagement
)(
124 _In_ PPM_DISPATCH_TABLE PmDriverDispatchTable
,
125 _Out_ PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
127 typedef struct _DMA_ADAPTER
*
128 (NTAPI
*pHalGetDmaAdapter
)(
130 _In_
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
131 _Out_ PULONG NumberOfMapRegisters
);
134 (NTAPI
*pHalGetInterruptTranslator
)(
135 _In_ INTERFACE_TYPE ParentInterfaceType
,
136 _In_ ULONG ParentBusNumber
,
137 _In_ INTERFACE_TYPE BridgeInterfaceType
,
140 _Out_ PTRANSLATOR_INTERFACE Translator
,
141 _Out_ PULONG BridgeBusNumber
);
144 (NTAPI
*pHalStartMirroring
)(VOID
);
147 (NTAPI
*pHalEndMirroring
)(
148 _In_ ULONG PassNumber
);
151 (NTAPI
*pHalMirrorPhysicalMemory
)(
152 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
153 _In_ LARGE_INTEGER NumberOfBytes
);
156 (NTAPI
*pHalMirrorVerify
)(
157 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
158 _In_ LARGE_INTEGER NumberOfBytes
);
161 (NTAPI
*pHalTranslateBusAddress
)(
162 _In_ INTERFACE_TYPE InterfaceType
,
163 _In_ ULONG BusNumber
,
164 _In_ PHYSICAL_ADDRESS BusAddress
,
165 _Inout_ PULONG AddressSpace
,
166 _Out_ PPHYSICAL_ADDRESS TranslatedAddress
);
169 (NTAPI
*pHalAssignSlotResources
)(
170 _In_ PUNICODE_STRING RegistryPath
,
171 _In_opt_ PUNICODE_STRING DriverClassName
,
172 _In_ PDRIVER_OBJECT DriverObject
,
173 _In_ PDEVICE_OBJECT DeviceObject
,
174 _In_ INTERFACE_TYPE BusType
,
175 _In_ ULONG BusNumber
,
176 _In_ ULONG SlotNumber
,
177 _Inout_ PCM_RESOURCE_LIST
*AllocatedResources
);
180 (NTAPI
*pHalHaltSystem
)(VOID
);
183 (NTAPI
*pHalResetDisplay
)(VOID
);
185 typedef struct _MAP_REGISTER_ENTRY
{
187 BOOLEAN WriteToDevice
;
188 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
191 (NTAPI
*pHalVectorToIDTEntry
)(
195 (NTAPI
*pHalFindBusAddressTranslation
)(
196 _In_ PHYSICAL_ADDRESS BusAddress
,
197 _Inout_ PULONG AddressSpace
,
198 _Out_ PPHYSICAL_ADDRESS TranslatedAddress
,
199 _Inout_ PULONG_PTR Context
,
200 _In_ BOOLEAN NextBus
);
203 (NTAPI
*pHalEndOfBoot
)(VOID
);
206 (NTAPI
*pHalGetAcpiTable
)(
207 _In_ ULONG Signature
,
208 _In_opt_ PCSTR OemId
,
209 _In_opt_ PCSTR OemTableId
);
213 (*pHalGetErrorCapList
)(
214 _Inout_ PULONG CapsListLength
,
215 _Inout_updates_bytes_(*CapsListLength
) PUCHAR ErrorCapList
);
219 _In_ ULONG BufferLength
,
220 _In_reads_bytes_(BufferLength
) PUCHAR Buffer
);
224 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(VOID
);
227 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
228 _In_ PCI_ERROR_HANDLER_CALLBACK Callback
);
230 #if 1 /* Not present in WDK 7600 */
232 (FASTCALL
*pHalIoAssignDriveLetters
)(
233 _In_
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
234 _In_ PSTRING NtDeviceName
,
235 _Out_ PUCHAR NtSystemPath
,
236 _Out_ PSTRING NtSystemPathString
);
241 pHalQuerySystemInformation HalQuerySystemInformation
;
242 pHalSetSystemInformation HalSetSystemInformation
;
243 pHalQueryBusSlots HalQueryBusSlots
;
245 pHalExamineMBR HalExamineMBR
;
246 #if 1 /* Not present in WDK 7600 */
247 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
249 pHalIoReadPartitionTable HalIoReadPartitionTable
;
250 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
251 pHalIoWritePartitionTable HalIoWritePartitionTable
;
252 pHalHandlerForBus HalReferenceHandlerForBus
;
253 pHalReferenceBusHandler HalReferenceBusHandler
;
254 pHalReferenceBusHandler HalDereferenceBusHandler
;
255 pHalInitPnpDriver HalInitPnpDriver
;
256 pHalInitPowerManagement HalInitPowerManagement
;
257 pHalGetDmaAdapter HalGetDmaAdapter
;
258 pHalGetInterruptTranslator HalGetInterruptTranslator
;
259 pHalStartMirroring HalStartMirroring
;
260 pHalEndMirroring HalEndMirroring
;
261 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
262 pHalEndOfBoot HalEndOfBoot
;
263 pHalMirrorVerify HalMirrorVerify
;
264 pHalGetAcpiTable HalGetCachedAcpiTable
;
265 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
267 pHalGetErrorCapList HalGetErrorCapList
;
268 pHalInjectError HalInjectError
;
270 } HAL_DISPATCH
, *PHAL_DISPATCH
;
272 /* GCC/MSVC and WDK compatible declaration */
273 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
275 #if defined(_NTOSKRNL_) || defined(_BLDR_)
276 #define HALDISPATCH (&HalDispatchTable)
278 /* This is a WDK compatibility definition */
279 #define HalDispatchTable (&HalDispatchTable)
280 #define HALDISPATCH HalDispatchTable
283 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
284 #define HalDispatchTableVersion HALDISPATCH->Version
285 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
286 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
287 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
288 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
289 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
290 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
291 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
292 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
293 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
294 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
295 #define HalStartMirroring HALDISPATCH->HalStartMirroring
296 #define HalEndMirroring HALDISPATCH->HalEndMirroring
297 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
298 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
299 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
300 #define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable
301 #define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback
303 #define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList
304 #define HalInjectError HALDISPATCH->HalInjectError
307 typedef struct _HAL_BUS_INFORMATION
{
308 INTERFACE_TYPE BusType
;
309 BUS_DATA_TYPE ConfigurationType
;
312 } HAL_BUS_INFORMATION
, *PHAL_BUS_INFORMATION
;
314 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
315 KPROFILE_SOURCE Source
;
318 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
320 typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX
{
321 KPROFILE_SOURCE Source
;
324 ULONG_PTR DefInterval
;
325 ULONG_PTR MaxInterval
;
326 ULONG_PTR MinInterval
;
327 } HAL_PROFILE_SOURCE_INFORMATION_EX
, *PHAL_PROFILE_SOURCE_INFORMATION_EX
;
329 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
330 KPROFILE_SOURCE Source
;
332 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
334 typedef struct _HAL_PROFILE_SOURCE_LIST
{
335 KPROFILE_SOURCE Source
;
337 } HAL_PROFILE_SOURCE_LIST
, *PHAL_PROFILE_SOURCE_LIST
;
339 typedef enum _HAL_DISPLAY_BIOS_INFORMATION
{
341 HalDisplayEmulatedBios
,
343 } HAL_DISPLAY_BIOS_INFORMATION
, *PHAL_DISPLAY_BIOS_INFORMATION
;
345 typedef struct _HAL_POWER_INFORMATION
{
347 } HAL_POWER_INFORMATION
, *PHAL_POWER_INFORMATION
;
349 typedef struct _HAL_PROCESSOR_SPEED_INFO
{
350 ULONG ProcessorSpeed
;
351 } HAL_PROCESSOR_SPEED_INFORMATION
, *PHAL_PROCESSOR_SPEED_INFORMATION
;
353 typedef struct _HAL_CALLBACKS
{
354 PCALLBACK_OBJECT SetSystemInformation
;
355 PCALLBACK_OBJECT BusCheck
;
356 } HAL_CALLBACKS
, *PHAL_CALLBACKS
;
358 typedef struct _HAL_PROCESSOR_FEATURE
{
359 ULONG UsableFeatureBits
;
360 } HAL_PROCESSOR_FEATURE
;
363 (NTAPI
*PHALIOREADWRITEHANDLER
)(
367 _Inout_ PULONG pdwData
);
369 typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST
{
372 ULONG OSVersionTrigger
;
373 PHALIOREADWRITEHANDLER IOHandler
;
374 } HAL_AMLI_BAD_IO_ADDRESS_LIST
, *PHAL_AMLI_BAD_IO_ADDRESS_LIST
;
376 #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
379 (NTAPI
*PHALMCAINTERFACELOCK
)(VOID
);
382 (NTAPI
*PHALMCAINTERFACEUNLOCK
)(VOID
);
385 (NTAPI
*PHALMCAINTERFACEREADREGISTER
)(
386 _In_ UCHAR BankNumber
,
387 _Inout_ PVOID Exception
);
389 typedef struct _HAL_MCA_INTERFACE
{
390 PHALMCAINTERFACELOCK Lock
;
391 PHALMCAINTERFACEUNLOCK Unlock
;
392 PHALMCAINTERFACEREADREGISTER ReadRegister
;
396 ApicDestinationModePhysical
= 1,
397 ApicDestinationModeLogicalFlat
,
398 ApicDestinationModeLogicalClustered
,
399 ApicDestinationModeUnknown
400 } HAL_APIC_DESTINATION_MODE
, *PHAL_APIC_DESTINATION_MODE
;
405 struct _KEXCEPTION_FRAME
;
407 typedef ERROR_SEVERITY
408 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
410 _In_
struct _KTRAP_FRAME
*TrapFrame
,
411 _In_
struct _KEXCEPTION_FRAME
*ExceptionFrame
,
412 _In_ PMCA_EXCEPTION Exception
);
416 #if defined(_X86_) || defined(_IA64_)
423 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
425 _In_ PMCA_EXCEPTION BankLog
);
428 typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK
;
430 typedef struct _MCA_DRIVER_INFO
{
431 PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback
;
432 PKDEFERRED_ROUTINE DpcCallback
;
434 } MCA_DRIVER_INFO
, *PMCA_DRIVER_INFO
;
436 typedef struct _HAL_ERROR_INFO
{
440 ULONG McaPreviousEventsCount
;
441 ULONG McaCorrectedEventsCount
;
442 ULONG McaKernelDeliveryFails
;
443 ULONG McaDriverDpcQueueFails
;
446 ULONG CmcPollingInterval
;
447 ULONG CmcInterruptsCount
;
448 ULONG CmcKernelDeliveryFails
;
449 ULONG CmcDriverDpcQueueFails
;
450 ULONG CmcGetStateFails
;
451 ULONG CmcClearStateFails
;
455 ULONG CpePollingInterval
;
456 ULONG CpeInterruptsCount
;
457 ULONG CpeKernelDeliveryFails
;
458 ULONG CpeDriverDpcQueueFails
;
459 ULONG CpeGetStateFails
;
460 ULONG CpeClearStateFails
;
461 ULONG CpeInterruptSources
;
463 ULONGLONG KernelReserved
[4];
464 } HAL_ERROR_INFO
, *PHAL_ERROR_INFO
;
466 #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
467 #define HAL_MCE_DISABLED ((ULONG)0)
469 #define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
470 #define HAL_CMC_DISABLED HAL_MCE_DISABLED
472 #define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
473 #define HAL_CPE_DISABLED HAL_MCE_DISABLED
475 #define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
476 #define HAL_MCA_DISABLED HAL_MCE_DISABLED
479 (NTAPI
*PDRIVER_CMC_EXCEPTION_CALLBACK
)(
481 _In_ PCMC_EXCEPTION CmcLog
);
484 (NTAPI
*PDRIVER_CPE_EXCEPTION_CALLBACK
)(
486 _In_ PCPE_EXCEPTION CmcLog
);
488 typedef struct _CMC_DRIVER_INFO
{
489 PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback
;
490 PKDEFERRED_ROUTINE DpcCallback
;
492 } CMC_DRIVER_INFO
, *PCMC_DRIVER_INFO
;
494 typedef struct _CPE_DRIVER_INFO
{
495 PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback
;
496 PKDEFERRED_ROUTINE DpcCallback
;
498 } CPE_DRIVER_INFO
, *PCPE_DRIVER_INFO
;
500 #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
505 (*HALSENDCROSSPARTITIONIPI
)(
506 _In_ USHORT ProcessorID
,
507 _In_ UCHAR HardwareVector
);
510 (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR
)(
513 _Inout_ PGROUP_AFFINITY Affinity
,
514 _Out_ PUCHAR HardwareVector
);
517 (*HALFREECROSSPARTITIONINTERRUPTVECTOR
)(
519 _In_ PGROUP_AFFINITY Affinity
);
521 typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE
{
522 HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi
;
523 HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector
;
524 HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector
;
525 } HAL_CROSS_PARTITION_IPI_INTERFACE
;
527 #define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
528 FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \
529 HalFreeCrossPartitionInterruptVector)
531 #endif /* defined(_IA64_) */
533 typedef struct _HAL_PLATFORM_INFORMATION
{
535 } HAL_PLATFORM_INFORMATION
, *PHAL_PLATFORM_INFORMATION
;
537 #define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L
538 #define HAL_PLATFORM_DISABLE_PTCG 0x04L
539 #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L
540 #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L
541 #define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L