- Restructure HAL bus routines a bit.
[reactos.git] / reactos / include / ndk / haltypes.h
index 38d1f61..4687378 100644 (file)
@@ -1,4 +1,4 @@
-/*++ NDK Version: 0095
+/*++ NDK Version: 0098
 
 Copyright (c) Alex Ionescu.  All rights reserved.
 
@@ -12,7 +12,7 @@ Abstract:
 
 Author:
 
-    Alex Ionescu (alex.ionescu@reactos.com)   06-Oct-2004
+    Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
 
 --*/
 
@@ -26,29 +26,10 @@ Author:
 
 #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,
@@ -59,172 +40,236 @@ typedef enum _FIRMWARE_ENTRY
 } 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
 
+
+