xref: /reactos/sdk/include/xdk/haltypes.h (revision a8491259)
1 /* Hardware Abstraction Layer Types */
2 
3 $if (_NTDDK_)
4 typedef BOOLEAN
5 (NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)(
6   _In_ ULONG Columns,
7   _In_ ULONG Rows);
8 
9 typedef PBUS_HANDLER
10 (FASTCALL *pHalHandlerForBus)(
11   _In_ INTERFACE_TYPE InterfaceType,
12   _In_ ULONG BusNumber);
13 
14 typedef VOID
15 (FASTCALL *pHalReferenceBusHandler)(
16   _In_ PBUS_HANDLER BusHandler);
17 
18 typedef enum _HAL_QUERY_INFORMATION_CLASS {
19   HalInstalledBusInformation,
20   HalProfileSourceInformation,
21   HalInformationClassUnused1,
22   HalPowerInformation,
23   HalProcessorSpeedInformation,
24   HalCallbackInformation,
25   HalMapRegisterInformation,
26   HalMcaLogInformation,
27   HalFrameBufferCachingInformation,
28   HalDisplayBiosInformation,
29   HalProcessorFeatureInformation,
30   HalNumaTopologyInterface,
31   HalErrorInformation,
32   HalCmcLogInformation,
33   HalCpeLogInformation,
34   HalQueryMcaInterface,
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;
47 
48 typedef enum _HAL_SET_INFORMATION_CLASS {
49   HalProfileSourceInterval,
50   HalProfileSourceInterruptHandler,
51   HalMcaRegisterDriver,
52   HalKernelErrorHandler,
53   HalCmcRegisterDriver,
54   HalCpeRegisterDriver,
55   HalMcaLog,
56   HalCmcLog,
57   HalCpeLog,
58   HalGenerateCmcInterrupt,
59   HalProfileSourceTimerHandler,
60   HalEnlightenment,
61   HalProfileDpgoSourceInterruptHandler
62 } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
63 
64 typedef NTSTATUS
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);
70 
71 typedef NTSTATUS
72 (NTAPI *pHalSetSystemInformation)(
73   _In_ HAL_SET_INFORMATION_CLASS InformationClass,
74   _In_ ULONG BufferSize,
75   _In_ PVOID Buffer);
76 
77 typedef VOID
78 (FASTCALL *pHalExamineMBR)(
79   _In_ PDEVICE_OBJECT DeviceObject,
80   _In_ ULONG SectorSize,
81   _In_ ULONG MBRTypeIdentifier,
82   _Out_ PVOID *Buffer);
83 
84 typedef NTSTATUS
85 (FASTCALL *pHalIoReadPartitionTable)(
86   _In_ PDEVICE_OBJECT DeviceObject,
87   _In_ ULONG SectorSize,
88   _In_ BOOLEAN ReturnRecognizedPartitions,
89   _Out_ struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
90 
91 typedef NTSTATUS
92 (FASTCALL *pHalIoSetPartitionInformation)(
93   _In_ PDEVICE_OBJECT DeviceObject,
94   _In_ ULONG SectorSize,
95   _In_ ULONG PartitionNumber,
96   _In_ ULONG PartitionType);
97 
98 typedef NTSTATUS
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);
105 
106 typedef NTSTATUS
107 (NTAPI *pHalQueryBusSlots)(
108   _In_ PBUS_HANDLER BusHandler,
109   _In_ ULONG BufferSize,
110   _Out_ PULONG SlotNumbers,
111   _Out_ PULONG ReturnedLength);
112 
113 typedef NTSTATUS
114 (NTAPI *pHalInitPnpDriver)(VOID);
115 
116 typedef struct _PM_DISPATCH_TABLE {
117   ULONG Signature;
118   ULONG Version;
119   PVOID Function[1];
120 } PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE;
121 
122 typedef NTSTATUS
123 (NTAPI *pHalInitPowerManagement)(
124   _In_ PPM_DISPATCH_TABLE PmDriverDispatchTable,
125   _Out_ PPM_DISPATCH_TABLE *PmHalDispatchTable);
126 
127 typedef struct _DMA_ADAPTER*
128 (NTAPI *pHalGetDmaAdapter)(
129   _In_ PVOID Context,
130   _In_ struct _DEVICE_DESCRIPTION *DeviceDescriptor,
131   _Out_ PULONG NumberOfMapRegisters);
132 
133 typedef NTSTATUS
134 (NTAPI *pHalGetInterruptTranslator)(
135   _In_ INTERFACE_TYPE ParentInterfaceType,
136   _In_ ULONG ParentBusNumber,
137   _In_ INTERFACE_TYPE BridgeInterfaceType,
138   _In_ USHORT Size,
139   _In_ USHORT Version,
140   _Out_ PTRANSLATOR_INTERFACE Translator,
141   _Out_ PULONG BridgeBusNumber);
142 
143 typedef NTSTATUS
144 (NTAPI *pHalStartMirroring)(VOID);
145 
146 typedef NTSTATUS
147 (NTAPI *pHalEndMirroring)(
148   _In_ ULONG PassNumber);
149 
150 typedef NTSTATUS
151 (NTAPI *pHalMirrorPhysicalMemory)(
152   _In_ PHYSICAL_ADDRESS PhysicalAddress,
153   _In_ LARGE_INTEGER NumberOfBytes);
154 
155 typedef NTSTATUS
156 (NTAPI *pHalMirrorVerify)(
157   _In_ PHYSICAL_ADDRESS PhysicalAddress,
158   _In_ LARGE_INTEGER NumberOfBytes);
159 
160 typedef BOOLEAN
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);
167 
168 typedef NTSTATUS
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);
178 
179 typedef VOID
180 (NTAPI *pHalHaltSystem)(VOID);
181 
182 typedef BOOLEAN
183 (NTAPI *pHalResetDisplay)(VOID);
184 
185 typedef struct _MAP_REGISTER_ENTRY {
186   PVOID MapRegister;
187   BOOLEAN WriteToDevice;
188 } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
189 
190 typedef UCHAR
191 (NTAPI *pHalVectorToIDTEntry)(
192   ULONG Vector);
193 
194 typedef BOOLEAN
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);
201 
202 typedef VOID
203 (NTAPI *pHalEndOfBoot)(VOID);
204 
205 typedef PVOID
206 (NTAPI *pHalGetAcpiTable)(
207   _In_ ULONG Signature,
208   _In_opt_ PCSTR OemId,
209   _In_opt_ PCSTR OemTableId);
210 
211 #if defined(_IA64_)
212 typedef NTSTATUS
213 (*pHalGetErrorCapList)(
214   _Inout_ PULONG CapsListLength,
215   _Inout_updates_bytes_(*CapsListLength) PUCHAR ErrorCapList);
216 
217 typedef NTSTATUS
218 (*pHalInjectError)(
219   _In_ ULONG BufferLength,
220   _In_reads_bytes_(BufferLength) PUCHAR Buffer);
221 #endif
222 
223 typedef VOID
224 (NTAPI *PCI_ERROR_HANDLER_CALLBACK)(VOID);
225 
226 typedef VOID
227 (NTAPI *pHalSetPciErrorHandlerCallback)(
228   _In_ PCI_ERROR_HANDLER_CALLBACK Callback);
229 
230 #if 1 /* Not present in WDK 7600 */
231 typedef VOID
232 (FASTCALL *pHalIoAssignDriveLetters)(
233   _In_ struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
234   _In_ PSTRING NtDeviceName,
235   _Out_ PUCHAR NtSystemPath,
236   _Out_ PSTRING NtSystemPathString);
237 #endif
238 
239 typedef struct {
240   ULONG Version;
241   pHalQuerySystemInformation HalQuerySystemInformation;
242   pHalSetSystemInformation HalSetSystemInformation;
243   pHalQueryBusSlots HalQueryBusSlots;
244   ULONG Spare1;
245   pHalExamineMBR HalExamineMBR;
246 #if 1 /* Not present in WDK 7600 */
247   pHalIoAssignDriveLetters HalIoAssignDriveLetters;
248 #endif
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;
266 #if defined(_IA64_)
267   pHalGetErrorCapList HalGetErrorCapList;
268   pHalInjectError HalInjectError;
269 #endif
270 } HAL_DISPATCH, *PHAL_DISPATCH;
271 
272 #if !defined(_NTSYSTEM_) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_))
273 __CREATE_NTOS_DATA_IMPORT_ALIAS(HalDispatchTable)
274 extern  PHAL_DISPATCH   HalDispatchTable;
275 #define HALDISPATCH     HalDispatchTable
276 #else
277 extern  HAL_DISPATCH    HalDispatchTable;
278 #define HALDISPATCH     (&HalDispatchTable)
279 #endif
280 
281 // See Version table at:
282 // https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/ntos/hal/hal_dispatch.htm
283 #if (NTDDI_VERSION < NTDDI_WIN2K)
284 #define HAL_DISPATCH_VERSION            1
285 #elif (NTDDI_VERSION < NTDDI_WINXP)
286 #define HAL_DISPATCH_VERSION            2
287 #elif (NTDDI_VERSION < NTDDI_WIN7)
288 #define HAL_DISPATCH_VERSION            3
289 #else
290 #define HAL_DISPATCH_VERSION            4
291 #endif
292 
293 #define HalDispatchTableVersion         HALDISPATCH->Version
294 #define HalQuerySystemInformation       HALDISPATCH->HalQuerySystemInformation
295 #define HalSetSystemInformation         HALDISPATCH->HalSetSystemInformation
296 #define HalQueryBusSlots                HALDISPATCH->HalQueryBusSlots
297 #define HalReferenceHandlerForBus       HALDISPATCH->HalReferenceHandlerForBus
298 #define HalReferenceBusHandler          HALDISPATCH->HalReferenceBusHandler
299 #define HalDereferenceBusHandler        HALDISPATCH->HalDereferenceBusHandler
300 #define HalInitPnpDriver                HALDISPATCH->HalInitPnpDriver
301 #define HalInitPowerManagement          HALDISPATCH->HalInitPowerManagement
302 #define HalGetDmaAdapter                HALDISPATCH->HalGetDmaAdapter
303 #define HalGetInterruptTranslator       HALDISPATCH->HalGetInterruptTranslator
304 #define HalStartMirroring               HALDISPATCH->HalStartMirroring
305 #define HalEndMirroring                 HALDISPATCH->HalEndMirroring
306 #define HalMirrorPhysicalMemory         HALDISPATCH->HalMirrorPhysicalMemory
307 #define HalEndOfBoot                    HALDISPATCH->HalEndOfBoot
308 #define HalMirrorVerify                 HALDISPATCH->HalMirrorVerify
309 #define HalGetCachedAcpiTable           HALDISPATCH->HalGetCachedAcpiTable
310 #define HalSetPciErrorHandlerCallback   HALDISPATCH->HalSetPciErrorHandlerCallback
311 #if defined(_IA64_)
312 #define HalGetErrorCapList              HALDISPATCH->HalGetErrorCapList
313 #define HalInjectError                  HALDISPATCH->HalInjectError
314 #endif
315 
316 typedef struct _HAL_BUS_INFORMATION {
317   INTERFACE_TYPE BusType;
318   BUS_DATA_TYPE ConfigurationType;
319   ULONG BusNumber;
320   ULONG Reserved;
321 } HAL_BUS_INFORMATION, *PHAL_BUS_INFORMATION;
322 
323 typedef struct _HAL_PROFILE_SOURCE_INFORMATION {
324   KPROFILE_SOURCE Source;
325   BOOLEAN Supported;
326   ULONG Interval;
327 } HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION;
328 
329 typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX {
330   KPROFILE_SOURCE Source;
331   BOOLEAN Supported;
332   ULONG_PTR Interval;
333   ULONG_PTR DefInterval;
334   ULONG_PTR MaxInterval;
335   ULONG_PTR MinInterval;
336 } HAL_PROFILE_SOURCE_INFORMATION_EX, *PHAL_PROFILE_SOURCE_INFORMATION_EX;
337 
338 typedef struct _HAL_PROFILE_SOURCE_INTERVAL {
339   KPROFILE_SOURCE Source;
340   ULONG_PTR Interval;
341 } HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL;
342 
343 typedef struct _HAL_PROFILE_SOURCE_LIST {
344   KPROFILE_SOURCE Source;
345   PWSTR Description;
346 } HAL_PROFILE_SOURCE_LIST, *PHAL_PROFILE_SOURCE_LIST;
347 
348 typedef enum _HAL_DISPLAY_BIOS_INFORMATION {
349   HalDisplayInt10Bios,
350   HalDisplayEmulatedBios,
351   HalDisplayNoBios
352 } HAL_DISPLAY_BIOS_INFORMATION, *PHAL_DISPLAY_BIOS_INFORMATION;
353 
354 typedef struct _HAL_POWER_INFORMATION {
355   ULONG TBD;
356 } HAL_POWER_INFORMATION, *PHAL_POWER_INFORMATION;
357 
358 typedef struct _HAL_PROCESSOR_SPEED_INFO {
359   ULONG ProcessorSpeed;
360 } HAL_PROCESSOR_SPEED_INFORMATION, *PHAL_PROCESSOR_SPEED_INFORMATION;
361 
362 typedef struct _HAL_CALLBACKS {
363   PCALLBACK_OBJECT SetSystemInformation;
364   PCALLBACK_OBJECT BusCheck;
365 } HAL_CALLBACKS, *PHAL_CALLBACKS;
366 
367 typedef struct _HAL_PROCESSOR_FEATURE {
368   ULONG UsableFeatureBits;
369 } HAL_PROCESSOR_FEATURE;
370 
371 typedef NTSTATUS
372 (NTAPI *PHALIOREADWRITEHANDLER)(
373   _In_ BOOLEAN fRead,
374   _In_ ULONG dwAddr,
375   _In_ ULONG dwSize,
376   _Inout_ PULONG pdwData);
377 
378 typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST {
379   ULONG BadAddrBegin;
380   ULONG BadAddrSize;
381   ULONG OSVersionTrigger;
382   PHALIOREADWRITEHANDLER IOHandler;
383 } HAL_AMLI_BAD_IO_ADDRESS_LIST, *PHAL_AMLI_BAD_IO_ADDRESS_LIST;
384 
385 #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
386 
387 typedef VOID
388 (NTAPI *PHALMCAINTERFACELOCK)(VOID);
389 
390 typedef VOID
391 (NTAPI *PHALMCAINTERFACEUNLOCK)(VOID);
392 
393 typedef NTSTATUS
394 (NTAPI *PHALMCAINTERFACEREADREGISTER)(
395   _In_ UCHAR BankNumber,
396   _Inout_ PVOID Exception);
397 
398 typedef struct _HAL_MCA_INTERFACE {
399   PHALMCAINTERFACELOCK Lock;
400   PHALMCAINTERFACEUNLOCK Unlock;
401   PHALMCAINTERFACEREADREGISTER ReadRegister;
402 } HAL_MCA_INTERFACE;
403 
404 typedef enum {
405   ApicDestinationModePhysical = 1,
406   ApicDestinationModeLogicalFlat,
407   ApicDestinationModeLogicalClustered,
408   ApicDestinationModeUnknown
409 } HAL_APIC_DESTINATION_MODE, *PHAL_APIC_DESTINATION_MODE;
410 
411 #if defined(_AMD64_)
412 
413 struct _KTRAP_FRAME;
414 struct _KEXCEPTION_FRAME;
415 
416 typedef ERROR_SEVERITY
417 (NTAPI *PDRIVER_EXCPTN_CALLBACK)(
418   _In_ PVOID Context,
419   _In_ struct _KTRAP_FRAME *TrapFrame,
420   _In_ struct _KEXCEPTION_FRAME *ExceptionFrame,
421   _In_ PMCA_EXCEPTION Exception);
422 
423 #endif
424 
425 #if defined(_X86_) || defined(_IA64_)
426 typedef
427 #if defined(_IA64_)
428 ERROR_SEVERITY
429 #else
430 VOID
431 #endif
432 (NTAPI *PDRIVER_EXCPTN_CALLBACK)(
433   _In_ PVOID Context,
434   _In_ PMCA_EXCEPTION BankLog);
435 #endif
436 
437 typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK;
438 
439 typedef struct _MCA_DRIVER_INFO {
440   PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback;
441   PKDEFERRED_ROUTINE DpcCallback;
442   PVOID DeviceContext;
443 } MCA_DRIVER_INFO, *PMCA_DRIVER_INFO;
444 
445 typedef struct _HAL_ERROR_INFO {
446   ULONG Version;
447   ULONG InitMaxSize;
448   ULONG McaMaxSize;
449   ULONG McaPreviousEventsCount;
450   ULONG McaCorrectedEventsCount;
451   ULONG McaKernelDeliveryFails;
452   ULONG McaDriverDpcQueueFails;
453   ULONG McaReserved;
454   ULONG CmcMaxSize;
455   ULONG CmcPollingInterval;
456   ULONG CmcInterruptsCount;
457   ULONG CmcKernelDeliveryFails;
458   ULONG CmcDriverDpcQueueFails;
459   ULONG CmcGetStateFails;
460   ULONG CmcClearStateFails;
461   ULONG CmcReserved;
462   ULONGLONG CmcLogId;
463   ULONG CpeMaxSize;
464   ULONG CpePollingInterval;
465   ULONG CpeInterruptsCount;
466   ULONG CpeKernelDeliveryFails;
467   ULONG CpeDriverDpcQueueFails;
468   ULONG CpeGetStateFails;
469   ULONG CpeClearStateFails;
470   ULONG CpeInterruptSources;
471   ULONGLONG CpeLogId;
472   ULONGLONG KernelReserved[4];
473 } HAL_ERROR_INFO, *PHAL_ERROR_INFO;
474 
475 #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
476 #define HAL_MCE_DISABLED          ((ULONG)0)
477 
478 #define HAL_CMC_INTERRUPTS_BASED  HAL_MCE_INTERRUPTS_BASED
479 #define HAL_CMC_DISABLED          HAL_MCE_DISABLED
480 
481 #define HAL_CPE_INTERRUPTS_BASED  HAL_MCE_INTERRUPTS_BASED
482 #define HAL_CPE_DISABLED          HAL_MCE_DISABLED
483 
484 #define HAL_MCA_INTERRUPTS_BASED  HAL_MCE_INTERRUPTS_BASED
485 #define HAL_MCA_DISABLED          HAL_MCE_DISABLED
486 
487 typedef VOID
488 (NTAPI *PDRIVER_CMC_EXCEPTION_CALLBACK)(
489   _In_ PVOID Context,
490   _In_ PCMC_EXCEPTION CmcLog);
491 
492 typedef VOID
493 (NTAPI *PDRIVER_CPE_EXCEPTION_CALLBACK)(
494   _In_ PVOID Context,
495   _In_ PCPE_EXCEPTION CmcLog);
496 
497 typedef struct _CMC_DRIVER_INFO {
498   PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback;
499   PKDEFERRED_ROUTINE DpcCallback;
500   PVOID DeviceContext;
501 } CMC_DRIVER_INFO, *PCMC_DRIVER_INFO;
502 
503 typedef struct _CPE_DRIVER_INFO {
504   PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback;
505   PKDEFERRED_ROUTINE DpcCallback;
506   PVOID DeviceContext;
507 } CPE_DRIVER_INFO, *PCPE_DRIVER_INFO;
508 
509 #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
510 
511 #if defined(_IA64_)
512 
513 typedef NTSTATUS
514 (*HALSENDCROSSPARTITIONIPI)(
515   _In_ USHORT ProcessorID,
516   _In_ UCHAR HardwareVector);
517 
518 typedef NTSTATUS
519 (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR)(
520   _Out_ PULONG Vector,
521   _Out_ PKIRQL Irql,
522   _Inout_ PGROUP_AFFINITY Affinity,
523   _Out_ PUCHAR HardwareVector);
524 
525 typedef VOID
526 (*HALFREECROSSPARTITIONINTERRUPTVECTOR)(
527   _In_ ULONG Vector,
528   _In_ PGROUP_AFFINITY Affinity);
529 
530 typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE {
531   HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi;
532   HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector;
533   HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector;
534 } HAL_CROSS_PARTITION_IPI_INTERFACE;
535 
536 #define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
537     FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE,    \
538                  HalFreeCrossPartitionInterruptVector)
539 
540 #endif /* defined(_IA64_) */
541 
542 typedef struct _HAL_PLATFORM_INFORMATION {
543   ULONG PlatformFlags;
544 } HAL_PLATFORM_INFORMATION, *PHAL_PLATFORM_INFORMATION;
545 
546 #define HAL_PLATFORM_DISABLE_WRITE_COMBINING      0x01L
547 #define HAL_PLATFORM_DISABLE_PTCG                 0x04L
548 #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY       0x08L
549 #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO  0x10L
550 #define HAL_PLATFORM_ACPI_TABLES_CACHED           0x20L
551 
552 $endif (_NTDDK_)
553