This commit was manufactured by cvs2svn to create branch 'captive'.
[reactos.git] / include / ntos / haltypes.h
diff --git a/include/ntos/haltypes.h b/include/ntos/haltypes.h
new file mode 100755 (executable)
index 0000000..1cf303d
--- /dev/null
@@ -0,0 +1,505 @@
+/* $Id$
+ *
+ * COPYRIGHT:                See COPYING in the top level directory
+ * PROJECT:                  ReactOS kernel
+ * FILE:                     include/ddk/haltypes.h
+ * PURPOSE:                  HAL provided defintions for device drivers
+ * PROGRAMMER:               David Welch (welch@mcmail.com)
+ * REVISION HISTORY:
+ *              23/06/98:   Taken from linux system.h
+ */
+
+
+#ifndef __INCLUDE_NTOS_HALTYPES_H
+#define __INCLUDE_NTOS_HALTYPES_H
+
+#ifdef __GNUC__
+#define STDCALL_FUNC STDCALL
+#else
+#define STDCALL_FUNC(a) (__stdcall a )
+#endif /*__GNUC__*/
+
+#include "types.h"
+
+
+/* HalReturnToFirmware */
+#define FIRMWARE_HALT   1
+#define FIRMWARE_REBOOT 3
+
+#ifndef __USE_W32API
+
+enum
+{
+   DEVICE_DESCRIPTION_VERSION,
+   DEVICE_DESCRIPTION_VERSION1,
+};
+
+typedef ULONG DMA_WIDTH;
+typedef ULONG DMA_SPEED;
+
+/*
+ * PURPOSE: Types for HalGetBusData
+ */
+typedef enum _BUS_DATA_TYPE
+{
+   ConfigurationSpaceUndefined = -1,
+   Cmos,
+   EisaConfiguration,
+   Pos,
+   CbusConfiguration,
+   PCIConfiguration,
+   VMEConfiguration,
+   NuBusConfiguration,
+   PCMCIAConfiguration,
+   MPIConfiguration,
+   MPSAConfiguration,
+   PNPISAConfiguration,
+   MaximumBusDataType,
+} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
+
+typedef struct _DEVICE_DESCRIPTION
+{
+  ULONG Version;
+  BOOLEAN Master;
+  BOOLEAN ScatterGather;
+  BOOLEAN DemandMode;
+  BOOLEAN AutoInitialize;
+  BOOLEAN Dma32BitAddresses;
+  BOOLEAN IgnoreCount;
+  BOOLEAN Reserved1;
+  BOOLEAN Reserved2;
+  ULONG BusNumber;
+  ULONG DmaChannel;
+  INTERFACE_TYPE InterfaceType;
+  DMA_WIDTH DmaWidth;
+  DMA_SPEED DmaSpeed;
+  ULONG MaximumLength;
+  ULONG DmaPort;
+} DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION;
+
+
+/* PCI bus definitions */
+
+#define PCI_TYPE0_ADDRESSES    6
+#define PCI_TYPE1_ADDRESSES    2
+#define PCI_TYPE2_ADDRESSES    5
+
+typedef struct _PCI_COMMON_CONFIG
+{
+  USHORT VendorID;             /* read-only */
+  USHORT DeviceID;             /* read-only */
+  USHORT Command;
+  USHORT Status;
+  UCHAR  RevisionID;           /* read-only */
+  UCHAR  ProgIf;               /* read-only */
+  UCHAR  SubClass;             /* read-only */
+  UCHAR  BaseClass;            /* read-only */
+  UCHAR  CacheLineSize;                /* read-only */
+  UCHAR  LatencyTimer;         /* read-only */
+  UCHAR  HeaderType;           /* read-only */
+  UCHAR  BIST;
+  union
+    {
+      struct _PCI_HEADER_TYPE_0
+       {
+         ULONG  BaseAddresses[PCI_TYPE0_ADDRESSES];
+         ULONG  CIS;
+         USHORT SubVendorID;
+         USHORT SubSystemID;
+         ULONG  ROMBaseAddress;
+         ULONG  Reserved2[2];
+
+         UCHAR  InterruptLine;
+         UCHAR  InterruptPin;          /* read-only */
+         UCHAR  MinimumGrant;          /* read-only */
+         UCHAR  MaximumLatency;        /* read-only */
+       } type0;
+
+      /* PCI to PCI Bridge */
+      struct _PCI_HEADER_TYPE_1
+       {
+         ULONG  BaseAddresses[PCI_TYPE1_ADDRESSES];
+         UCHAR  PrimaryBus;
+         UCHAR  SecondaryBus;
+         UCHAR  SubordinateBus;
+         UCHAR  SecondaryLatency;
+         UCHAR  IOBase;
+         UCHAR  IOLimit;
+         USHORT SecondaryStatus;
+         USHORT MemoryBase;
+         USHORT MemoryLimit;
+         USHORT PrefetchBase;
+         USHORT PrefetchLimit;
+         ULONG  PrefetchBaseUpper32;
+         ULONG  PrefetchLimitUpper32;
+         USHORT IOBaseUpper16;
+         USHORT IOLimitUpper16;
+         UCHAR  CapabilitiesPtr;
+         UCHAR  Reserved1[3];
+         ULONG  ROMBaseAddress;
+         UCHAR  InterruptLine;
+         UCHAR  InterruptPin;
+         USHORT BridgeControl;
+       } type1;
+
+      /* PCI to CARDBUS Bridge */
+      struct _PCI_HEADER_TYPE_2
+       {
+         ULONG  SocketRegistersBaseAddress;
+         UCHAR  CapabilitiesPtr;
+         UCHAR  Reserved;
+         USHORT SecondaryStatus;
+         UCHAR  PrimaryBus;
+         UCHAR  SecondaryBus;
+         UCHAR  SubordinateBus;
+         UCHAR  SecondaryLatency;
+         struct
+           {
+             ULONG Base;
+             ULONG Limit;
+           } Range[PCI_TYPE2_ADDRESSES-1];
+         UCHAR  InterruptLine;
+         UCHAR  InterruptPin;
+         USHORT BridgeControl;
+       } type2;
+    } u;
+  UCHAR DeviceSpecific[192];
+} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
+
+#define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET (PCI_COMMON_CONFIG, DeviceSpecific))
+
+#define PCI_MAX_DEVICES                     32
+#define PCI_MAX_FUNCTION                    8
+
+#define PCI_INVALID_VENDORID                0xFFFF
+
+/* Bit encodings for PCI_COMMON_CONFIG.HeaderType */
+
+#define PCI_MULTIFUNCTION                   0x80
+#define PCI_DEVICE_TYPE                     0x00
+#define PCI_BRIDGE_TYPE                     0x01
+
+
+/* Bit encodings for PCI_COMMON_CONFIG.Command */
+
+#define PCI_ENABLE_IO_SPACE                 0x0001
+#define PCI_ENABLE_MEMORY_SPACE             0x0002
+#define PCI_ENABLE_BUS_MASTER               0x0004
+#define PCI_ENABLE_SPECIAL_CYCLES           0x0008
+#define PCI_ENABLE_WRITE_AND_INVALIDATE     0x0010
+#define PCI_ENABLE_VGA_COMPATIBLE_PALETTE   0x0020
+#define PCI_ENABLE_PARITY                   0x0040
+#define PCI_ENABLE_WAIT_CYCLE               0x0080
+#define PCI_ENABLE_SERR                     0x0100
+#define PCI_ENABLE_FAST_BACK_TO_BACK        0x0200
+
+
+/* Bit encodings for PCI_COMMON_CONFIG.Status */
+
+#define PCI_STATUS_FAST_BACK_TO_BACK        0x0080
+#define PCI_STATUS_DATA_PARITY_DETECTED     0x0100
+#define PCI_STATUS_DEVSEL                   0x0600  /* 2 bits wide */
+#define PCI_STATUS_SIGNALED_TARGET_ABORT    0x0800
+#define PCI_STATUS_RECEIVED_TARGET_ABORT    0x1000
+#define PCI_STATUS_RECEIVED_MASTER_ABORT    0x2000
+#define PCI_STATUS_SIGNALED_SYSTEM_ERROR    0x4000
+#define PCI_STATUS_DETECTED_PARITY_ERROR    0x8000
+
+
+/* PCI device classes */
+
+#define PCI_CLASS_PRE_20                    0x00
+#define PCI_CLASS_MASS_STORAGE_CTLR         0x01
+#define PCI_CLASS_NETWORK_CTLR              0x02
+#define PCI_CLASS_DISPLAY_CTLR              0x03
+#define PCI_CLASS_MULTIMEDIA_DEV            0x04
+#define PCI_CLASS_MEMORY_CTLR               0x05
+#define PCI_CLASS_BRIDGE_DEV                0x06
+#define PCI_CLASS_SIMPLE_COMMS_CTLR         0x07
+#define PCI_CLASS_BASE_SYSTEM_DEV           0x08
+#define PCI_CLASS_INPUT_DEV                 0x09
+#define PCI_CLASS_DOCKING_STATION           0x0a
+#define PCI_CLASS_PROCESSOR                 0x0b
+#define PCI_CLASS_SERIAL_BUS_CTLR           0x0c
+
+
+/* PCI device subclasses for class 1 (mass storage controllers)*/
+
+#define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR      0x00
+#define PCI_SUBCLASS_MSC_IDE_CTLR           0x01
+#define PCI_SUBCLASS_MSC_FLOPPY_CTLR        0x02
+#define PCI_SUBCLASS_MSC_IPI_CTLR           0x03
+#define PCI_SUBCLASS_MSC_RAID_CTLR          0x04
+#define PCI_SUBCLASS_MSC_OTHER              0x80
+
+
+/* Bit encodes for PCI_COMMON_CONFIG.u.type0.BaseAddresses */
+
+#define PCI_ADDRESS_IO_SPACE                0x00000001
+#define PCI_ADDRESS_MEMORY_TYPE_MASK        0x00000006
+#define PCI_ADDRESS_MEMORY_PREFETCHABLE     0x00000008
+
+#define PCI_ADDRESS_IO_ADDRESS_MASK         0xfffffffc
+#define PCI_ADDRESS_MEMORY_ADDRESS_MASK     0xfffffff0
+#define PCI_ADDRESS_ROM_ADDRESS_MASK        0xfffff800
+
+#define PCI_TYPE_32BIT      0
+#define PCI_TYPE_20BIT      2
+#define PCI_TYPE_64BIT      4
+
+
+/* Bit encodes for PCI_COMMON_CONFIG.u.type0.ROMBaseAddresses */
+
+#define PCI_ROMADDRESS_ENABLED              0x00000001
+
+
+
+typedef struct _PCI_SLOT_NUMBER
+{
+  union
+    {
+      struct
+       {
+         ULONG DeviceNumber:5;
+         ULONG FunctionNumber:3;
+         ULONG Reserved:24;
+       } bits;
+      ULONG AsULONG;
+    } u;
+} PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
+
+#endif /* __USE_W32API */
+
+/* Hal dispatch table */
+
+typedef enum _HAL_QUERY_INFORMATION_CLASS
+{
+  HalInstalledBusInformation,
+  HalProfileSourceInformation,
+  HalSystemDockInformation,
+  HalPowerInformation,
+  HalProcessorSpeedInformation,
+  HalCallbackInformation,
+  HalMapRegisterInformation,
+  HalMcaLogInformation,
+  HalFrameBufferCachingInformation,
+  HalDisplayBiosInformation
+  /* information levels >= 0x8000000 reserved for OEM use */
+} HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS;
+
+
+typedef enum _HAL_SET_INFORMATION_CLASS
+{
+  HalProfileSourceInterval,
+  HalProfileSourceInterruptHandler,
+  HalMcaRegisterDriver
+} HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
+
+
+typedef struct _BUS_HANDLER *PBUS_HANDLER;
+typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
+
+
+typedef BOOLEAN STDCALL_FUNC
+(*PHAL_RESET_DISPLAY_PARAMETERS)(ULONG Columns, ULONG Rows);
+
+typedef NTSTATUS STDCALL_FUNC
+(*pHalQuerySystemInformation)(IN HAL_QUERY_INFORMATION_CLASS InformationClass,
+                             IN ULONG BufferSize,
+                             IN OUT PVOID Buffer,
+                             OUT PULONG ReturnedLength);
+
+
+typedef NTSTATUS STDCALL_FUNC
+(*pHalSetSystemInformation)(IN HAL_SET_INFORMATION_CLASS InformationClass,
+                           IN ULONG BufferSize,
+                           IN PVOID Buffer);
+
+
+typedef NTSTATUS STDCALL_FUNC
+(*pHalQueryBusSlots)(IN PBUS_HANDLER BusHandler,
+                    IN ULONG BufferSize,
+                    OUT PULONG SlotNumbers,
+                    OUT PULONG ReturnedLength);
+
+
+/* Control codes of HalDeviceControl function */
+#define BCTL_EJECT                             0x0001
+#define BCTL_QUERY_DEVICE_ID                   0x0002
+#define BCTL_QUERY_DEVICE_UNIQUE_ID            0x0003
+#define BCTL_QUERY_DEVICE_CAPABILITIES         0x0004
+#define BCTL_QUERY_DEVICE_RESOURCES            0x0005
+#define BCTL_QUERY_DEVICE_RESOURCE_REQUIREMENTS        0x0006
+#define BCTL_QUERY_EJECT                            0x0007
+#define BCTL_SET_LOCK                               0x0008
+#define BCTL_SET_POWER                              0x0009
+#define BCTL_SET_RESUME                             0x000A
+#define BCTL_SET_DEVICE_RESOURCES                   0x000B
+
+/* Defines for BCTL structures */
+typedef struct
+{
+  BOOLEAN PowerSupported;
+  BOOLEAN ResumeSupported;
+  BOOLEAN LockSupported;
+  BOOLEAN EjectSupported;
+  BOOLEAN Removable;
+} BCTL_DEVICE_CAPABILITIES, *PBCTL_DEVICE_CAPABILITIES;
+
+
+typedef struct _DEVICE_CONTROL_CONTEXT
+{
+  NTSTATUS Status;
+  PDEVICE_HANDLER_OBJECT DeviceHandler;
+  PDEVICE_OBJECT DeviceObject;
+  ULONG ControlCode;
+  PVOID Buffer;
+  PULONG BufferLength;
+  PVOID Context;
+} DEVICE_CONTROL_CONTEXT, *PDEVICE_CONTROL_CONTEXT;
+
+
+typedef VOID STDCALL_FUNC
+(*PDEVICE_CONTROL_COMPLETION)(IN PDEVICE_CONTROL_CONTEXT ControlContext);
+
+
+typedef NTSTATUS STDCALL_FUNC
+(*pHalDeviceControl)(IN PDEVICE_HANDLER_OBJECT DeviceHandler,
+                    IN PDEVICE_OBJECT DeviceObject,
+                    IN ULONG ControlCode,
+                    IN OUT PVOID Buffer OPTIONAL,
+                    IN OUT PULONG BufferLength OPTIONAL,
+                    IN PVOID Context,
+                    IN PDEVICE_CONTROL_COMPLETION CompletionRoutine);
+
+typedef VOID FASTCALL
+(*pHalExamineMBR)(IN PDEVICE_OBJECT DeviceObject,
+                 IN ULONG SectorSize,
+                 IN ULONG MBRTypeIdentifier,
+                 OUT PVOID *Buffer);
+
+typedef VOID FASTCALL
+(*pHalIoAssignDriveLetters)(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
+                           IN PSTRING NtDeviceName,
+                           OUT PUCHAR NtSystemPath,
+                           OUT PSTRING NtSystemPathString);
+
+typedef NTSTATUS FASTCALL
+(*pHalIoReadPartitionTable)(IN PDEVICE_OBJECT DeviceObject,
+                           IN ULONG SectorSize,
+                           IN BOOLEAN ReturnRecognizedPartitions,
+                           OUT PDRIVE_LAYOUT_INFORMATION *PartitionBuffer);
+
+typedef NTSTATUS FASTCALL
+(*pHalIoSetPartitionInformation)(IN PDEVICE_OBJECT DeviceObject,
+                                IN ULONG SectorSize,
+                                IN ULONG PartitionNumber,
+                                IN ULONG PartitionType);
+
+typedef NTSTATUS FASTCALL
+(*pHalIoWritePartitionTable)(IN PDEVICE_OBJECT DeviceObject,
+                            IN ULONG SectorSize,
+                            IN ULONG SectorsPerTrack,
+                            IN ULONG NumberOfHeads,
+                            IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer);
+
+typedef PBUS_HANDLER FASTCALL
+(*pHalHandlerForBus)(IN INTERFACE_TYPE InterfaceType,
+                    IN ULONG BusNumber);
+
+typedef VOID FASTCALL
+(*pHalReferenceBusHandler)(IN PBUS_HANDLER BusHandler);
+
+
+typedef struct _HAL_DISPATCH
+{
+  ULONG                                Version;
+  pHalQuerySystemInformation   HalQuerySystemInformation;
+  pHalSetSystemInformation     HalSetSystemInformation;
+  pHalQueryBusSlots            HalQueryBusSlots;
+  pHalDeviceControl            HalDeviceControl;
+  pHalExamineMBR               HalExamineMBR;
+  pHalIoAssignDriveLetters     HalIoAssignDriveLetters;
+  pHalIoReadPartitionTable     HalIoReadPartitionTable;
+  pHalIoSetPartitionInformation        HalIoSetPartitionInformation;
+  pHalIoWritePartitionTable    HalIoWritePartitionTable;
+  pHalHandlerForBus            HalReferenceHandlerForBus;
+  pHalReferenceBusHandler      HalReferenceBusHandler;
+  pHalReferenceBusHandler      HalDereferenceBusHandler;
+} HAL_DISPATCH, *PHAL_DISPATCH;
+
+#ifndef __USE_W32API
+
+#ifdef __NTOSKRNL__
+extern HAL_DISPATCH EXPORTED HalDispatchTable;
+#else
+extern PHAL_DISPATCH IMPORTED HalDispatchTable;
+#endif
+
+#endif /* !__USE_W32API */
+
+#ifdef __NTOSKRNL__
+#define HALDISPATCH (&HalDispatchTable)
+#else
+#define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
+#endif
+
+
+#define HAL_DISPATCH_VERSION           1
+#define HalDispatchTableVersion                HALDISPATCH->Version
+#define HalQuerySystemInformation      HALDISPATCH->HalQuerySystemInformation
+#define HalSetSystemInformation                HALDISPATCH->HalSetSystemInformation
+#define HalQueryBusSlots               HALDISPATCH->HalQueryBusSlots
+#define HalDeviceControl               HALDISPATCH->HalDeviceControl
+#define HalExamineMBR                  HALDISPATCH->HalExamineMBR
+#define HalIoAssignDriveLetters                HALDISPATCH->HalIoAssignDriveLetters
+#define HalIoReadPartitionTable                HALDISPATCH->HalIoReadPartitionTable
+#define HalIoSetPartitionInformation   HALDISPATCH->HalIoSetPartitionInformation
+#define HalIoWritePartitionTable       HALDISPATCH->HalIoWritePartitionTable
+#define HalReferenceHandlerForBus      HALDISPATCH->HalReferenceHandlerForBus
+#define HalReferenceBusHandler         HALDISPATCH->HalReferenceBusHandler
+#define HalDereferenceBusHandler       HALDISPATCH->HalDereferenceBusHandler
+
+
+/* Hal private dispatch table */
+
+typedef struct _HAL_PRIVATE_DISPATCH
+{
+  ULONG Version;
+} HAL_PRIVATE_DISPATCH, *PHAL_PRIVATE_DISPATCH;
+
+#ifndef __USE_W32API
+
+#ifdef __NTOSKRNL__
+extern HAL_PRIVATE_DISPATCH EXPORTED HalPrivateDispatchTable;
+#else
+extern PHAL_PRIVATE_DISPATCH IMPORTED HalPrivateDispatchTable;
+#endif
+
+#endif /* !__USE_W32API */
+
+#define HAL_PRIVATE_DISPATCH_VERSION   1
+
+
+
+/*
+ * Kernel debugger section
+ */
+
+typedef struct _KD_PORT_INFORMATION
+{
+  ULONG ComPort;
+  ULONG BaudRate;
+  ULONG BaseAddress;
+} KD_PORT_INFORMATION, *PKD_PORT_INFORMATION;
+
+
+#ifdef __NTHAL__
+extern ULONG EXPORTED KdComPortInUse;
+#else
+extern ULONG IMPORTED KdComPortInUse;
+#endif
+
+#endif /* __INCLUDE_DDK_HALTYPES_H */
+
+/* EOF */