-/*++ NDK Version: 0095
+/*++ NDK Version: 0098
Copyright (c) Alex Ionescu. All rights reserved.
Author:
- Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
+ Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
--*/
#ifndef NTOS_MODE_USER
-//
-// Multi-Boot Flags (REMOVE ME)
-//
-#ifdef _REACTOS_
-#define MB_FLAGS_MEM_INFO (0x1)
-#define MB_FLAGS_BOOT_DEVICE (0x2)
-#define MB_FLAGS_COMMAND_LINE (0x4)
-#define MB_FLAGS_MODULE_INFO (0x8)
-#define MB_FLAGS_AOUT_SYMS (0x10)
-#define MB_FLAGS_ELF_SYMS (0x20)
-#define MB_FLAGS_MMAP_INFO (0x40)
-#define MB_FLAGS_DRIVES_INFO (0x80)
-#define MB_FLAGS_CONFIG_TABLE (0x100)
-#define MB_FLAGS_BOOT_LOADER_NAME (0x200)
-#define MB_FLAGS_APM_TABLE (0x400)
-#define MB_FLAGS_GRAPHICS_TABLE (0x800)
-#define MB_FLAGS_ACPI_TABLE (0x1000)
-#endif
-
//
// HalShutdownSystem Types
//
-typedef enum _FIRMWARE_ENTRY
+typedef enum _FIRMWARE_REENTRY
{
HalHaltRoutine,
HalPowerDownRoutine,
} FIRMWARE_REENTRY, *PFIRMWARE_REENTRY;
//
-// Hal Private dispatch Table
+// HAL Private function Types
//
-#define HAL_PRIVATE_DISPATCH_VERSION 1
-typedef struct _HAL_PRIVATE_DISPATCH
-{
- ULONG Version;
-} HAL_PRIVATE_DISPATCH, *PHAL_PRIVATE_DISPATCH;
+typedef
+PBUS_HANDLER
+(FASTCALL *pHalHandlerForConfigSpace)(
+ IN BUS_DATA_TYPE ConfigSpace,
+ IN ULONG BusNumber
+);
-#ifndef _REACTOS_
-//
-// NLS Data Block
-//
-typedef struct _NLS_TABLE_DATA
-{
- PVOID AnsiCodePageData;
- PVOID OemCodePageData;
- PVOID UnicodeCodePageData;
-} NLS_TABLE_DATA, *PNLS_TABLE_DATA;
+typedef
+NTSTATUS
+(NTAPI *PINSTALL_BUS_HANDLER)(
+ IN PBUS_HANDLER Bus
+);
+
+typedef
+NTSTATUS
+(NTAPI *pHalRegisterBusHandler)(
+ IN INTERFACE_TYPE InterfaceType,
+ IN BUS_DATA_TYPE ConfigSpace,
+ IN ULONG BusNumber,
+ IN INTERFACE_TYPE ParentInterfaceType,
+ IN ULONG ParentBusNumber,
+ IN ULONG ContextSize,
+ IN PINSTALL_BUS_HANDLER InstallCallback,
+ OUT PBUS_HANDLER *BusHandler
+);
+
+typedef
+VOID
+(NTAPI *pHalSetWakeEnable)(
+ IN BOOLEAN Enable
+);
+
+typedef
+VOID
+(NTAPI *pHalSetWakeAlarm)(
+ IN ULONGLONG AlartTime,
+ IN PTIME_FIELDS TimeFields
+);
+
+typedef
+VOID
+(NTAPI *pHalLocateHiberRanges)(
+ IN PVOID MemoryMap
+);
+
+typedef
+BOOLEAN
+(NTAPI *pHalAllocateMapRegisters)(
+ IN PADAPTER_OBJECT AdapterObject,
+ IN ULONG Unknown,
+ IN ULONG Unknown2,
+ PMAP_REGISTER_ENTRY Registers
+);
//
-// Subsystem Specific Loader Blocks
+// HAL Bus Handler Callback Types
//
-typedef struct _PROFILE_PARAMETER_BLOCK
-{
- USHORT DockData0;
- USHORT DockData1;
- USHORT DockData2;
- USHORT DockData3;
- ULONG DockData4;
- ULONG DockData5;
-} PROFILE_PARAMETER_BLOCK, *PPROFILE_PARAMETER_BLOCK;
-
-typedef struct _HEADLESS_LOADER_BLOCK
-{
- UCHAR Unknown[0xC];
-} HEADLESS_LOADER_BLOCK, *PHEADLESS_LOADER_BLOCK;
+typedef
+NTSTATUS
+(NTAPI *PADJUSTRESOURCELIST)(
+ IN PBUS_HANDLER BusHandler,
+ IN PBUS_HANDLER RootHandler,
+ IN OUT PIO_RESOURCE_REQUIREMENTS_LIST *Resources
+);
-typedef struct _NETWORK_LOADER_BLOCK
-{
- UCHAR Unknown[0xC];
-} NETWORK_LOADER_BLOCK, *PNETWORK_LOADER_BLOCK;
+typedef
+NTSTATUS
+(NTAPI *PASSIGNSLOTRESOURCES)(
+ IN PBUS_HANDLER BusHandler,
+ IN PBUS_HANDLER RootHandler,
+ IN PUNICODE_STRING RegistryPath,
+ IN PUNICODE_STRING DriverClassName,
+ IN PDRIVER_OBJECT DriverObject,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SlotNumber,
+ IN OUT PCM_RESOURCE_LIST *AllocatedResources
+);
+
+typedef
+ULONG
+(NTAPI *PGETSETBUSDATA)(
+ IN PBUS_HANDLER BusHandler,
+ IN PBUS_HANDLER RootHandler,
+ IN ULONG SlotNumber,
+ OUT PVOID Buffer,
+ IN ULONG Offset,
+ IN ULONG Length
+);
+
+typedef
+ULONG
+(NTAPI *PGETINTERRUPTVECTOR)(
+ IN PBUS_HANDLER BusHandler,
+ IN PBUS_HANDLER RootHandler,
+ IN ULONG BusInterruptLevel,
+ IN ULONG BusInterruptVector,
+ OUT PKIRQL Irql,
+ OUT PKAFFINITY Affinity
+);
+
+typedef
+BOOLEAN
+(NTAPI *PTRANSLATEBUSADDRESS)(
+ IN PBUS_HANDLER BusHandler,
+ IN PBUS_HANDLER RootHandler,
+ IN PHYSICAL_ADDRESS BusAddress,
+ IN OUT PULONG AddressSpace,
+ OUT PPHYSICAL_ADDRESS TranslatedAddress
+);
//
-// Extended Loader Parameter Block
+// Hal Private dispatch Table
//
-typedef struct _LOADER_PARAMETER_EXTENSION
-{
- ULONG Size;
- PROFILE_PARAMETER_BLOCK ProfileParameterBlock;
- ULONG MajorVersion;
- ULONG MinorVersion;
- PVOID SpecialConfigInfFile;
- ULONG SpecialConfigInfSize;
- PVOID TriageDumpData;
- //
- // NT 5.1
- //
- ULONG NumberOfPages;
- PHEADLESS_LOADER_BLOCK HeadlessLoaderBlock;
- PVOID Unknown1;
- PVOID PrefetchDatabaseBase;
- ULONG PrefetchDatabaseSize;
- PNETWORK_LOADER_BLOCK NetworkLoaderBlock;
- //
- // NT 5.2+
- //
- PVOID Reserved[2];
- LIST_ENTRY FirmwareListEntry;
- PVOID AcpiTableBase;
- ULONG AcpiTableSize;
-} LOADER_PARAMETER_EXTENSION, *PLOADER_PARAMETER_EXTENSION;
-
-//
-// Architecture specific Loader Parameter Blocks
-//
-typedef struct _I386_LOADER_BLOCK
+#define HAL_PRIVATE_DISPATCH_VERSION 2
+typedef struct _HAL_PRIVATE_DISPATCH
{
- PVOID CommonDataArea;
- ULONG MachineType;
- ULONG Reserved;
-} I386_LOADER_BLOCK, *PI386_LOADER_BLOCK;
+ 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;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+ pKdGetPciDataByOffset KdGetPciDataByOffset;
+ pKdSetPciDataByOffset KdSetPciDataByOffset;
+ PVOID HalGetInterruptVectorOverride;
+ PVOID HalGetVectorInputOverride;
+#endif
+} HAL_PRIVATE_DISPATCH, *PHAL_PRIVATE_DISPATCH;
//
-// Setup Loader Parameter Block
+// HAL Supported Range
//
-typedef struct _SETUP_LOADER_BLOCK
+#define HAL_SUPPORTED_RANGE_VERSION 1
+typedef struct _SUPPORTED_RANGE
{
- ULONG Unknown[139];
- ULONG Flags;
-} SETUP_LOADER_BLOCK, *PSETUP_LOADER_BLOCK;
+ struct _SUPPORTED_RANGE *Next;
+ ULONG SystemAddressSpace;
+ LONGLONG SystemBase;
+ LONGLONG Base;
+ LONGLONG Limit;
+} SUPPORTED_RANGE, *PSUPPORTED_RANGE;
+
+typedef struct _SUPPORTED_RANGES
+{
+ USHORT Version;
+ BOOLEAN Sorted;
+ UCHAR Reserved;
+ ULONG NoIO;
+ SUPPORTED_RANGE IO;
+ ULONG NoMemory;
+ SUPPORTED_RANGE Memory;
+ ULONG NoPrefetchMemory;
+ SUPPORTED_RANGE PrefetchMemory;
+ ULONG NoDma;
+ SUPPORTED_RANGE Dma;
+} SUPPORTED_RANGES, *PSUPPORTED_RANGES;
//
-// Loader Parameter Block
+// HAL Bus Handler
//
-typedef struct _LOADER_PARAMETER_BLOCK
+#define HAL_BUS_HANDLER_VERSION 1
+typedef struct _BUS_HANDLER
{
- LIST_ENTRY LoadOrderListHead;
- LIST_ENTRY MemoryDescriptorListHead;
- LIST_ENTRY DriverList;
- PVOID KernelStack;
- PVOID Prcb;
- PVOID Process;
- PVOID Thread;
- ULONG RegistryLength;
- PVOID RegistryBase;
- PCONFIGURATION_COMPONENT_DATA ConfigurationRoot;
- LPSTR ArcBootDeviceName;
- LPSTR ArcHalDeviceName;
- LPSTR SystemRoot;
- LPSTR BootRoot;
- LPSTR CommandLine;
- PNLS_TABLE_DATA NlsTables;
- PARC_DISK_INFORMATION ArcDevices;
- PVOID OEMFont;
- PSETUP_LOADER_BLOCK SetupLdrBlock;
- PLOADER_PARAMETER_EXTENSION LpbExtension;
- union
- {
- I386_LOADER_BLOCK I386;
- } u;
-} LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
-
-#else
+ ULONG Version;
+ INTERFACE_TYPE InterfaceType;
+ BUS_DATA_TYPE ConfigurationType;
+ ULONG BusNumber;
+ PDEVICE_OBJECT DeviceObject;
+ struct _BUS_HANDLER *ParentHandler;
+ PVOID BusData;
+ ULONG DeviceControlExtensionSize;
+ PSUPPORTED_RANGES BusAddresses;
+ ULONG Reserved[4];
+ PGETSETBUSDATA GetBusData;
+ PGETSETBUSDATA SetBusData;
+ PADJUSTRESOURCELIST AdjustResourceList;
+ PASSIGNSLOTRESOURCES AssignSlotResources;
+ PGETINTERRUPTVECTOR GetInterruptVector;
+ PTRANSLATEBUSADDRESS TranslateBusAddress;
+ PVOID Spare1;
+ PVOID Spare2;
+ PVOID Spare3;
+ PVOID Spare4;
+ PVOID Spare5;
+ PVOID Spare6;
+ PVOID Spare7;
+ PVOID Spare8;
+} BUS_HANDLER;
//
-// FIXME: ReactOS ONLY
+// HAL Chip Hacks
//
-typedef struct _LOADER_MODULE
-{
- ULONG ModStart;
- ULONG ModEnd;
- ULONG String;
- ULONG Reserved;
-} LOADER_MODULE, *PLOADER_MODULE;
-typedef struct _LOADER_PARAMETER_BLOCK
-{
- ULONG Flags;
- ULONG MemLower;
- ULONG MemHigher;
- ULONG BootDevice;
- ULONG CommandLine;
- ULONG ModsCount;
- ULONG ModsAddr;
- UCHAR Syms[12];
- ULONG MmapLength;
- ULONG MmapAddr;
- ULONG DrivesCount;
- ULONG DrivesAddr;
- ULONG ConfigTable;
- ULONG BootLoaderName;
- ULONG PageDirectoryStart;
- ULONG PageDirectoryEnd;
- ULONG KernelBase;
-} LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
-#endif
+#define HAL_PCI_CHIP_HACK_DISABLE_HIBERNATE 0x02
+#define HAL_PCI_CHIP_HACK_USB_SMI_DISABLE 0x08
//
// Kernel Exports
//
-#ifdef __NTOSKRNL__
-extern HAL_PRIVATE_DISPATCH NTSYSAPI HalPrivateDispatchTable;
+#if defined(_NTDRIVER_) || defined(_NTHAL_)
+extern NTSYSAPI PHAL_PRIVATE_DISPATCH HalPrivateDispatchTable;
+#define HALPRIVATEDISPATCH ((PHAL_PRIVATE_DISPATCH)&HalPrivateDispatchTable)
#else
-extern PHAL_PRIVATE_DISPATCH NTSYSAPI HalPrivateDispatchTable;
+extern NTSYSAPI HAL_PRIVATE_DISPATCH HalPrivateDispatchTable;
+#define HALPRIVATEDISPATCH (&HalPrivateDispatchTable)
#endif
-extern ULONG NTSYSAPI KdComPortInUse;
+
+//
+// HAL Exports
+//
+extern PUCHAR NTHALAPI KdComPortInUse;
#endif
#endif
+
+