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
;
273 extern HAL_DISPATCH HalDispatchTable
;
274 #define HALDISPATCH (&HalDispatchTable)
276 __CREATE_NTOS_DATA_IMPORT_ALIAS(HalDispatchTable
)
277 extern PHAL_DISPATCH HalDispatchTable
;
278 #define HALDISPATCH HalDispatchTable
281 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
282 #define HalDispatchTableVersion HALDISPATCH->Version
283 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
284 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
285 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
286 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
287 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
288 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
289 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
290 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
291 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
292 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
293 #define HalStartMirroring HALDISPATCH->HalStartMirroring
294 #define HalEndMirroring HALDISPATCH->HalEndMirroring
295 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
296 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
297 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
298 #define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable
299 #define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback
301 #define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList
302 #define HalInjectError HALDISPATCH->HalInjectError
305 typedef struct _HAL_BUS_INFORMATION
{
306 INTERFACE_TYPE BusType
;
307 BUS_DATA_TYPE ConfigurationType
;
310 } HAL_BUS_INFORMATION
, *PHAL_BUS_INFORMATION
;
312 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
313 KPROFILE_SOURCE Source
;
316 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
318 typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX
{
319 KPROFILE_SOURCE Source
;
322 ULONG_PTR DefInterval
;
323 ULONG_PTR MaxInterval
;
324 ULONG_PTR MinInterval
;
325 } HAL_PROFILE_SOURCE_INFORMATION_EX
, *PHAL_PROFILE_SOURCE_INFORMATION_EX
;
327 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
328 KPROFILE_SOURCE Source
;
330 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
332 typedef struct _HAL_PROFILE_SOURCE_LIST
{
333 KPROFILE_SOURCE Source
;
335 } HAL_PROFILE_SOURCE_LIST
, *PHAL_PROFILE_SOURCE_LIST
;
337 typedef enum _HAL_DISPLAY_BIOS_INFORMATION
{
339 HalDisplayEmulatedBios
,
341 } HAL_DISPLAY_BIOS_INFORMATION
, *PHAL_DISPLAY_BIOS_INFORMATION
;
343 typedef struct _HAL_POWER_INFORMATION
{
345 } HAL_POWER_INFORMATION
, *PHAL_POWER_INFORMATION
;
347 typedef struct _HAL_PROCESSOR_SPEED_INFO
{
348 ULONG ProcessorSpeed
;
349 } HAL_PROCESSOR_SPEED_INFORMATION
, *PHAL_PROCESSOR_SPEED_INFORMATION
;
351 typedef struct _HAL_CALLBACKS
{
352 PCALLBACK_OBJECT SetSystemInformation
;
353 PCALLBACK_OBJECT BusCheck
;
354 } HAL_CALLBACKS
, *PHAL_CALLBACKS
;
356 typedef struct _HAL_PROCESSOR_FEATURE
{
357 ULONG UsableFeatureBits
;
358 } HAL_PROCESSOR_FEATURE
;
361 (NTAPI
*PHALIOREADWRITEHANDLER
)(
365 _Inout_ PULONG pdwData
);
367 typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST
{
370 ULONG OSVersionTrigger
;
371 PHALIOREADWRITEHANDLER IOHandler
;
372 } HAL_AMLI_BAD_IO_ADDRESS_LIST
, *PHAL_AMLI_BAD_IO_ADDRESS_LIST
;
374 #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
377 (NTAPI
*PHALMCAINTERFACELOCK
)(VOID
);
380 (NTAPI
*PHALMCAINTERFACEUNLOCK
)(VOID
);
383 (NTAPI
*PHALMCAINTERFACEREADREGISTER
)(
384 _In_ UCHAR BankNumber
,
385 _Inout_ PVOID Exception
);
387 typedef struct _HAL_MCA_INTERFACE
{
388 PHALMCAINTERFACELOCK Lock
;
389 PHALMCAINTERFACEUNLOCK Unlock
;
390 PHALMCAINTERFACEREADREGISTER ReadRegister
;
394 ApicDestinationModePhysical
= 1,
395 ApicDestinationModeLogicalFlat
,
396 ApicDestinationModeLogicalClustered
,
397 ApicDestinationModeUnknown
398 } HAL_APIC_DESTINATION_MODE
, *PHAL_APIC_DESTINATION_MODE
;
403 struct _KEXCEPTION_FRAME
;
405 typedef ERROR_SEVERITY
406 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
408 _In_
struct _KTRAP_FRAME
*TrapFrame
,
409 _In_
struct _KEXCEPTION_FRAME
*ExceptionFrame
,
410 _In_ PMCA_EXCEPTION Exception
);
414 #if defined(_X86_) || defined(_IA64_)
421 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
423 _In_ PMCA_EXCEPTION BankLog
);
426 typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK
;
428 typedef struct _MCA_DRIVER_INFO
{
429 PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback
;
430 PKDEFERRED_ROUTINE DpcCallback
;
432 } MCA_DRIVER_INFO
, *PMCA_DRIVER_INFO
;
434 typedef struct _HAL_ERROR_INFO
{
438 ULONG McaPreviousEventsCount
;
439 ULONG McaCorrectedEventsCount
;
440 ULONG McaKernelDeliveryFails
;
441 ULONG McaDriverDpcQueueFails
;
444 ULONG CmcPollingInterval
;
445 ULONG CmcInterruptsCount
;
446 ULONG CmcKernelDeliveryFails
;
447 ULONG CmcDriverDpcQueueFails
;
448 ULONG CmcGetStateFails
;
449 ULONG CmcClearStateFails
;
453 ULONG CpePollingInterval
;
454 ULONG CpeInterruptsCount
;
455 ULONG CpeKernelDeliveryFails
;
456 ULONG CpeDriverDpcQueueFails
;
457 ULONG CpeGetStateFails
;
458 ULONG CpeClearStateFails
;
459 ULONG CpeInterruptSources
;
461 ULONGLONG KernelReserved
[4];
462 } HAL_ERROR_INFO
, *PHAL_ERROR_INFO
;
464 #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
465 #define HAL_MCE_DISABLED ((ULONG)0)
467 #define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
468 #define HAL_CMC_DISABLED HAL_MCE_DISABLED
470 #define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
471 #define HAL_CPE_DISABLED HAL_MCE_DISABLED
473 #define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
474 #define HAL_MCA_DISABLED HAL_MCE_DISABLED
477 (NTAPI
*PDRIVER_CMC_EXCEPTION_CALLBACK
)(
479 _In_ PCMC_EXCEPTION CmcLog
);
482 (NTAPI
*PDRIVER_CPE_EXCEPTION_CALLBACK
)(
484 _In_ PCPE_EXCEPTION CmcLog
);
486 typedef struct _CMC_DRIVER_INFO
{
487 PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback
;
488 PKDEFERRED_ROUTINE DpcCallback
;
490 } CMC_DRIVER_INFO
, *PCMC_DRIVER_INFO
;
492 typedef struct _CPE_DRIVER_INFO
{
493 PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback
;
494 PKDEFERRED_ROUTINE DpcCallback
;
496 } CPE_DRIVER_INFO
, *PCPE_DRIVER_INFO
;
498 #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
503 (*HALSENDCROSSPARTITIONIPI
)(
504 _In_ USHORT ProcessorID
,
505 _In_ UCHAR HardwareVector
);
508 (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR
)(
511 _Inout_ PGROUP_AFFINITY Affinity
,
512 _Out_ PUCHAR HardwareVector
);
515 (*HALFREECROSSPARTITIONINTERRUPTVECTOR
)(
517 _In_ PGROUP_AFFINITY Affinity
);
519 typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE
{
520 HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi
;
521 HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector
;
522 HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector
;
523 } HAL_CROSS_PARTITION_IPI_INTERFACE
;
525 #define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
526 FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \
527 HalFreeCrossPartitionInterruptVector)
529 #endif /* defined(_IA64_) */
531 typedef struct _HAL_PLATFORM_INFORMATION
{
533 } HAL_PLATFORM_INFORMATION
, *PHAL_PLATFORM_INFORMATION
;
535 #define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L
536 #define HAL_PLATFORM_DISABLE_PTCG 0x04L
537 #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L
538 #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L
539 #define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L