Files
2023-11-30 18:31:19 +08:00

274 lines
6.0 KiB
C

#pragma once
typedef
PBUS_HANDLER
(FASTCALL* pHalHandlerForConfigSpace) (
_In_ BUS_DATA_TYPE ConfigSpace,
_In_ ULONG BusNumber
);
typedef
VOID
(*pHalLocateHiberRanges)(
_In_ PVOID MemoryMap
);
typedef
NTSTATUS
(*PINSTALL_BUS_HANDLER)(
IN PBUS_HANDLER Bus
);
typedef
NTSTATUS
(*pHalRegisterBusHandler)(
_In_ INTERFACE_TYPE InterfaceType,
_In_ BUS_DATA_TYPE AssociatedConfigurationSpace,
_In_ ULONG BusNumber,
_In_ INTERFACE_TYPE ParentBusType,
_In_ ULONG ParentBusNumber,
_In_ ULONG SizeofBusExtensionData,
_In_ PINSTALL_BUS_HANDLER InstallBusHandlers,
_Out_ PBUS_HANDLER* BusHandler
);
typedef
VOID
(*pHalSetWakeEnable)(
_In_ BOOLEAN Enable
);
typedef
VOID
(*pHalSetWakeAlarm)(
_In_ ULONGLONG WakeTime,
_In_ PTIME_FIELDS WakeTimeFields
);
typedef
VOID
(*pHalLocateHiberRanges)(
_In_ PVOID MemoryMap
);
typedef
NTSTATUS
(*pHalAllocateMapRegisters)(
_In_ struct _ADAPTER_OBJECT* DmaAdapter,
_In_ ULONG NumberOfMapRegisters,
_In_ ULONG BaseAddressCount,
_Out_ PMAP_REGISTER_ENTRY MapRegsiterArray
);
typedef struct {
ULONG Version;
pHalHandlerForBus HalHandlerForBus;
pHalHandlerForConfigSpace HalHandlerForConfigSpace;
pHalLocateHiberRanges HalLocateHiberRanges;
pHalRegisterBusHandler HalRegisterBusHandler;
pHalSetWakeEnable HalSetWakeEnable;
pHalSetWakeAlarm HalSetWakeAlarm;
pHalTranslateBusAddress HalPciTranslateBusAddress;
pHalAssignSlotResources HalPciAssignSlotResources;
pHalHaltSystem HalHaltSystem;
pHalFindBusAddressTranslation HalFindBusAddressTranslation;
pHalResetDisplay HalResetDisplay;
pHalAllocateMapRegisters HalAllocateMapRegisters;
pKdSetupPciDeviceForDebugging KdSetupPciDeviceForDebugging;
pKdReleasePciDeviceForDebugging KdReleasePciDeviceForDebugging;
pKdGetAcpiTablePhase0 KdGetAcpiTablePhase0;
pKdCheckPowerButton KdCheckPowerButton;
pHalVectorToIDTEntry HalVectorToIDTEntry;
pKdMapPhysicalMemory64 KdMapPhysicalMemory64;
pKdUnmapVirtualAddress KdUnmapVirtualAddress;
} HAL_PRIVATE_DISPATCH, * PHAL_PRIVATE_DISPATCH;
typedef enum _INTERRUPT_MODEL {
InterruptModelInvalid,
InterruptModelApic,
InterruptModelGic,
InterruptModelBcm,
InterruptModelUnknown = 0x1000
} INTERRUPT_MODEL, * PINTERRUPT_MODEL;
typedef
VOID
(*pHalAcpiTimerInterrupt)(
VOID
);
typedef struct {
BOOLEAN Supported;
UCHAR Pm1aVal;
UCHAR Pm1bVal;
} HAL_SLEEP_VAL, * PHAL_SLEEP_VAL;
typedef
VOID
(*pHalAcpiMachineStateInit)(
_In_reads_(5) PHAL_SLEEP_VAL SleepValues,
_Out_ PINTERRUPT_MODEL InterruptModel
);
typedef
ULONG
(*pHalAcpiQueryFlags)(
VOID
);
typedef
BOOLEAN
(*pHalPicStateIntact)(
VOID
);
typedef
VOID
(*pHalRestorePicState)(
VOID
);
typedef
ULONG
(*pHalInterfaceWriteConfig)(
_In_ PVOID Context,
_In_ ULONG BusOffset,
_In_ ULONG Slot,
_In_reads_bytes_(Buffer) PVOID Buffer,
_In_ ULONG Offset,
_In_ ULONG Length
);
typedef
ULONG
(*pHalInterfaceReadConfig)(
_In_ PVOID Context,
_In_ ULONG BusOffset,
_In_ ULONG Slot,
_Out_writes_bytes_(Buffer) PVOID Buffer,
_In_ ULONG Offset,
_In_ ULONG Length
);
typedef
ULONG
(*pHalGetIOApicVersion)(
_In_ ULONG BaseVector
);
typedef
VOID
(*pHalSetMaxLegacyPciBusNumber)(
_In_ ULONG BusNumber
);
typedef
BOOLEAN
(*pHalIsVectorValid)(
_In_ ULONG Vector
);
typedef
PVOID
(*pHalGetAcpiTable)(
_In_ ULONG Signature,
_In_opt_ PCSTR OemId,
_In_opt_ PCSTR OemTableId
);
typedef
PVOID
(*pHalAcpiGetRsdp)(
VOID
);
typedef
PVOID
(*pHalAcpiGetFacsMapping)(
VOID
);
typedef
PVOID
(*pHalAcpiGetAllTables)(
VOID
);
//
// ACPI PM register enums.
//
typedef enum _ACPI_PM_REGISTER {
PM1A_EVT_REGISTER = 0,
PM1A_CTRL_REGISTER,
PMTMR_REGISTER,
PM1B_EVT_REGISTER,
PM1B_CTRL_REGISTER,
PM2_CTRL_REGISTER,
PM_GP0_REGISTER,
PM_GP1_REGISTER,
PM_RESET_REGISTER,
PM_REGISTER_END,
} ACPI_PM_REGISTER, * PACPI_PM_REGISTER;
typedef
NTSTATUS
(*pHalAcpiPmRegisterAvailable) (
ACPI_PM_REGISTER Register
);
typedef
NTSTATUS
(*pHalAcpiPmRegisterRead) (
_In_ ACPI_PM_REGISTER Register,
_In_ ULONG Offset,
_Out_writes_bytes_(BufferSize) PVOID Output,
_In_ ULONG BufferSize,
_Out_opt_ PULONG BytesRead
);
typedef
NTSTATUS
(*pHalAcpiPmRegisterWrite) (
_In_ ACPI_PM_REGISTER Register,
_In_ ULONG Offset,
_In_reads_bytes_(BufferSize) PVOID Input,
_In_ ULONG BufferSize,
_Out_opt_ PULONG BytesWritten
);
typedef struct {
ULONG Signature;
ULONG Version;
pHalAcpiTimerInterrupt HalpAcpiTimerInterrupt;
pHalAcpiMachineStateInit HalpAcpiMachineStateInit;
pHalAcpiQueryFlags HalpAcpiQueryFlags;
pHalPicStateIntact HalxPicStateIntact;
pHalRestorePicState HalxRestorePicState;
pHalInterfaceReadConfig HalpPciInterfaceReadConfig;
pHalInterfaceWriteConfig HalpPciInterfaceWriteConfig;
pHalGetIOApicVersion HalpGetIOApicVersion;
pHalSetMaxLegacyPciBusNumber HalpSetMaxLegacyPciBusNumber;
pHalIsVectorValid HalpIsVectorValid;
pHalGetAcpiTable HalpGetAcpiTable;
pHalAcpiGetRsdp HalpAcpiGetRsdp;
pHalAcpiGetFacsMapping HalpAcpiGetFacsMapping;
pHalAcpiGetAllTables HalpAcpiGetAllTables;
pHalAcpiPmRegisterAvailable HalpAcpiPmRegisterAvailable;
pHalAcpiPmRegisterRead HalpAcpiPmRegisterRead;
pHalAcpiPmRegisterWrite HalpAcpiPmRegisterWrite;
} HAL_ACPI_DISPATCH_TABLE, * PHAL_ACPI_DISPATCH_TABLE;