1 /* $Id: haltypes.h,v 1.5 2003/12/30 18:34:58 fireball Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: include/ddk/haltypes.h
6 * PURPOSE: HAL provided defintions for device drivers
7 * PROGRAMMER: David Welch (welch@mcmail.com)
9 * 23/06/98: Taken from linux system.h
13 #ifndef __INCLUDE_NTOS_HALTYPES_H
14 #define __INCLUDE_NTOS_HALTYPES_H
17 #define STDCALL_FUNC STDCALL
18 #define FASTCALL_FUNC FASTCALL
20 #define STDCALL_FUNC(a) (__stdcall a )
21 #define FASTCALL_FUNC(a) (__fastcall a )
27 /* HalReturnToFirmware */
28 #define FIRMWARE_HALT 1
29 #define FIRMWARE_REBOOT 3
35 DEVICE_DESCRIPTION_VERSION
,
36 DEVICE_DESCRIPTION_VERSION1
,
40 * DMA speed specifiers
42 typedef enum _DMA_SPEED
50 } DMA_SPEED
, *PDMA_SPEED
;
53 * DMA width specifiers
55 typedef enum _DMA_WIDTH
61 } DMA_WIDTH
, *PDMA_WIDTH
;
64 * PURPOSE: Types for HalGetBusData
66 typedef enum _BUS_DATA_TYPE
68 ConfigurationSpaceUndefined
= -1,
81 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
83 typedef struct _DEVICE_DESCRIPTION
87 BOOLEAN ScatterGather
;
89 BOOLEAN AutoInitialize
;
90 BOOLEAN Dma32BitAddresses
;
92 BOOLEAN Reserved1
; /* Must be false */
93 BOOLEAN Dma64BitAddresses
;
96 INTERFACE_TYPE InterfaceType
;
101 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
104 /* PCI bus definitions */
106 #define PCI_TYPE0_ADDRESSES 6
107 #define PCI_TYPE1_ADDRESSES 2
108 #define PCI_TYPE2_ADDRESSES 5
110 typedef struct _PCI_COMMON_CONFIG
112 USHORT VendorID
; /* read-only */
113 USHORT DeviceID
; /* read-only */
116 UCHAR RevisionID
; /* read-only */
117 UCHAR ProgIf
; /* read-only */
118 UCHAR SubClass
; /* read-only */
119 UCHAR BaseClass
; /* read-only */
120 UCHAR CacheLineSize
; /* read-only */
121 UCHAR LatencyTimer
; /* read-only */
122 UCHAR HeaderType
; /* read-only */
126 struct _PCI_HEADER_TYPE_0
128 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
132 ULONG ROMBaseAddress
;
136 UCHAR InterruptPin
; /* read-only */
137 UCHAR MinimumGrant
; /* read-only */
138 UCHAR MaximumLatency
; /* read-only */
141 /* PCI to PCI Bridge */
142 struct _PCI_HEADER_TYPE_1
144 ULONG BaseAddresses
[PCI_TYPE1_ADDRESSES
];
147 UCHAR SubordinateBus
;
148 UCHAR SecondaryLatency
;
151 USHORT SecondaryStatus
;
155 USHORT PrefetchLimit
;
156 ULONG PrefetchBaseUpper32
;
157 ULONG PrefetchLimitUpper32
;
158 USHORT IOBaseUpper16
;
159 USHORT IOLimitUpper16
;
160 UCHAR CapabilitiesPtr
;
162 ULONG ROMBaseAddress
;
165 USHORT BridgeControl
;
168 /* PCI to CARDBUS Bridge */
169 struct _PCI_HEADER_TYPE_2
171 ULONG SocketRegistersBaseAddress
;
172 UCHAR CapabilitiesPtr
;
174 USHORT SecondaryStatus
;
177 UCHAR SubordinateBus
;
178 UCHAR SecondaryLatency
;
183 } Range
[PCI_TYPE2_ADDRESSES
-1];
186 USHORT BridgeControl
;
189 UCHAR DeviceSpecific
[192];
190 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
192 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET (PCI_COMMON_CONFIG, DeviceSpecific))
194 #define PCI_MAX_DEVICES 32
195 #define PCI_MAX_FUNCTION 8
197 #define PCI_INVALID_VENDORID 0xFFFF
199 /* Bit encodings for PCI_COMMON_CONFIG.HeaderType */
201 #define PCI_MULTIFUNCTION 0x80
202 #define PCI_DEVICE_TYPE 0x00
203 #define PCI_BRIDGE_TYPE 0x01
206 /* Bit encodings for PCI_COMMON_CONFIG.Command */
208 #define PCI_ENABLE_IO_SPACE 0x0001
209 #define PCI_ENABLE_MEMORY_SPACE 0x0002
210 #define PCI_ENABLE_BUS_MASTER 0x0004
211 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
212 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
213 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
214 #define PCI_ENABLE_PARITY 0x0040
215 #define PCI_ENABLE_WAIT_CYCLE 0x0080
216 #define PCI_ENABLE_SERR 0x0100
217 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
220 /* Bit encodings for PCI_COMMON_CONFIG.Status */
222 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
223 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
224 #define PCI_STATUS_DEVSEL 0x0600 /* 2 bits wide */
225 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
226 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
227 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
228 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
229 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
232 /* PCI device classes */
234 #define PCI_CLASS_PRE_20 0x00
235 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
236 #define PCI_CLASS_NETWORK_CTLR 0x02
237 #define PCI_CLASS_DISPLAY_CTLR 0x03
238 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
239 #define PCI_CLASS_MEMORY_CTLR 0x05
240 #define PCI_CLASS_BRIDGE_DEV 0x06
241 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
242 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
243 #define PCI_CLASS_INPUT_DEV 0x09
244 #define PCI_CLASS_DOCKING_STATION 0x0a
245 #define PCI_CLASS_PROCESSOR 0x0b
246 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
249 /* PCI device subclasses for class 1 (mass storage controllers)*/
251 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
252 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
253 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
254 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
255 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
256 #define PCI_SUBCLASS_MSC_OTHER 0x80
259 /* Bit encodes for PCI_COMMON_CONFIG.u.type0.BaseAddresses */
261 #define PCI_ADDRESS_IO_SPACE 0x00000001
262 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
263 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
265 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
266 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
267 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
269 #define PCI_TYPE_32BIT 0
270 #define PCI_TYPE_20BIT 2
271 #define PCI_TYPE_64BIT 4
274 /* Bit encodes for PCI_COMMON_CONFIG.u.type0.ROMBaseAddresses */
276 #define PCI_ROMADDRESS_ENABLED 0x00000001
280 typedef struct _PCI_SLOT_NUMBER
286 ULONG DeviceNumber
:5;
287 ULONG FunctionNumber
:3;
292 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
294 #endif /* __USE_W32API */
296 /* Hal dispatch table */
298 typedef enum _HAL_QUERY_INFORMATION_CLASS
300 HalInstalledBusInformation
,
301 HalProfileSourceInformation
,
302 HalSystemDockInformation
,
304 HalProcessorSpeedInformation
,
305 HalCallbackInformation
,
306 HalMapRegisterInformation
,
307 HalMcaLogInformation
,
308 HalFrameBufferCachingInformation
,
309 HalDisplayBiosInformation
310 /* information levels >= 0x8000000 reserved for OEM use */
311 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
314 typedef enum _HAL_SET_INFORMATION_CLASS
316 HalProfileSourceInterval
,
317 HalProfileSourceInterruptHandler
,
319 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
322 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
323 typedef struct _DEVICE_HANDLER_OBJECT
*PDEVICE_HANDLER_OBJECT
;
326 typedef BOOLEAN STDCALL_FUNC
327 (*PHAL_RESET_DISPLAY_PARAMETERS
)(ULONG Columns
, ULONG Rows
);
329 typedef NTSTATUS STDCALL_FUNC
330 (*pHalQuerySystemInformation
)(IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
333 OUT PULONG ReturnedLength
);
336 typedef NTSTATUS STDCALL_FUNC
337 (*pHalSetSystemInformation
)(IN HAL_SET_INFORMATION_CLASS InformationClass
,
342 typedef NTSTATUS STDCALL_FUNC
343 (*pHalQueryBusSlots
)(IN PBUS_HANDLER BusHandler
,
345 OUT PULONG SlotNumbers
,
346 OUT PULONG ReturnedLength
);
349 /* Control codes of HalDeviceControl function */
350 #define BCTL_EJECT 0x0001
351 #define BCTL_QUERY_DEVICE_ID 0x0002
352 #define BCTL_QUERY_DEVICE_UNIQUE_ID 0x0003
353 #define BCTL_QUERY_DEVICE_CAPABILITIES 0x0004
354 #define BCTL_QUERY_DEVICE_RESOURCES 0x0005
355 #define BCTL_QUERY_DEVICE_RESOURCE_REQUIREMENTS 0x0006
356 #define BCTL_QUERY_EJECT 0x0007
357 #define BCTL_SET_LOCK 0x0008
358 #define BCTL_SET_POWER 0x0009
359 #define BCTL_SET_RESUME 0x000A
360 #define BCTL_SET_DEVICE_RESOURCES 0x000B
362 /* Defines for BCTL structures */
365 BOOLEAN PowerSupported
;
366 BOOLEAN ResumeSupported
;
367 BOOLEAN LockSupported
;
368 BOOLEAN EjectSupported
;
370 } BCTL_DEVICE_CAPABILITIES
, *PBCTL_DEVICE_CAPABILITIES
;
373 typedef struct _DEVICE_CONTROL_CONTEXT
376 PDEVICE_HANDLER_OBJECT DeviceHandler
;
377 PDEVICE_OBJECT DeviceObject
;
382 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
385 typedef VOID STDCALL_FUNC
386 (*PDEVICE_CONTROL_COMPLETION
)(IN PDEVICE_CONTROL_CONTEXT ControlContext
);
389 typedef NTSTATUS STDCALL_FUNC
390 (*pHalDeviceControl
)(IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
391 IN PDEVICE_OBJECT DeviceObject
,
392 IN ULONG ControlCode
,
393 IN OUT PVOID Buffer OPTIONAL
,
394 IN OUT PULONG BufferLength OPTIONAL
,
396 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
398 typedef VOID FASTCALL_FUNC
399 (*pHalExamineMBR
)(IN PDEVICE_OBJECT DeviceObject
,
401 IN ULONG MBRTypeIdentifier
,
404 typedef VOID FASTCALL_FUNC
405 (*pHalIoAssignDriveLetters
)(IN PLOADER_PARAMETER_BLOCK LoaderBlock
,
406 IN PSTRING NtDeviceName
,
407 OUT PUCHAR NtSystemPath
,
408 OUT PSTRING NtSystemPathString
);
410 typedef NTSTATUS FASTCALL_FUNC
411 (*pHalIoReadPartitionTable
)(IN PDEVICE_OBJECT DeviceObject
,
413 IN BOOLEAN ReturnRecognizedPartitions
,
414 OUT PDRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
416 typedef NTSTATUS FASTCALL_FUNC
417 (*pHalIoSetPartitionInformation
)(IN PDEVICE_OBJECT DeviceObject
,
419 IN ULONG PartitionNumber
,
420 IN ULONG PartitionType
);
422 typedef NTSTATUS FASTCALL_FUNC
423 (*pHalIoWritePartitionTable
)(IN PDEVICE_OBJECT DeviceObject
,
425 IN ULONG SectorsPerTrack
,
426 IN ULONG NumberOfHeads
,
427 IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer
);
429 typedef PBUS_HANDLER FASTCALL_FUNC
430 (*pHalHandlerForBus
)(IN INTERFACE_TYPE InterfaceType
,
433 typedef VOID FASTCALL_FUNC
434 (*pHalReferenceBusHandler
)(IN PBUS_HANDLER BusHandler
);
437 typedef struct _HAL_DISPATCH
440 pHalQuerySystemInformation HalQuerySystemInformation
;
441 pHalSetSystemInformation HalSetSystemInformation
;
442 pHalQueryBusSlots HalQueryBusSlots
;
443 pHalDeviceControl HalDeviceControl
;
444 pHalExamineMBR HalExamineMBR
;
445 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
446 pHalIoReadPartitionTable HalIoReadPartitionTable
;
447 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
448 pHalIoWritePartitionTable HalIoWritePartitionTable
;
449 pHalHandlerForBus HalReferenceHandlerForBus
;
450 pHalReferenceBusHandler HalReferenceBusHandler
;
451 pHalReferenceBusHandler HalDereferenceBusHandler
;
452 } HAL_DISPATCH
, *PHAL_DISPATCH
;
457 extern HAL_DISPATCH EXPORTED HalDispatchTable
;
459 extern PHAL_DISPATCH IMPORTED HalDispatchTable
;
462 #endif /* !__USE_W32API */
465 #define HALDISPATCH (&HalDispatchTable)
467 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
471 #define HAL_DISPATCH_VERSION 1
472 #define HalDispatchTableVersion HALDISPATCH->Version
473 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
474 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
475 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
476 #define HalDeviceControl HALDISPATCH->HalDeviceControl
477 #define HalExamineMBR HALDISPATCH->HalExamineMBR
478 #define HalIoAssignDriveLetters HALDISPATCH->HalIoAssignDriveLetters
479 #define HalIoReadPartitionTable HALDISPATCH->HalIoReadPartitionTable
480 #define HalIoSetPartitionInformation HALDISPATCH->HalIoSetPartitionInformation
481 #define HalIoWritePartitionTable HALDISPATCH->HalIoWritePartitionTable
482 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
483 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
484 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
487 /* Hal private dispatch table */
489 typedef struct _HAL_PRIVATE_DISPATCH
492 } HAL_PRIVATE_DISPATCH
, *PHAL_PRIVATE_DISPATCH
;
497 extern HAL_PRIVATE_DISPATCH EXPORTED HalPrivateDispatchTable
;
499 extern PHAL_PRIVATE_DISPATCH IMPORTED HalPrivateDispatchTable
;
502 #endif /* !__USE_W32API */
504 #define HAL_PRIVATE_DISPATCH_VERSION 1
509 * Kernel debugger section
512 typedef struct _KD_PORT_INFORMATION
517 } KD_PORT_INFORMATION
, *PKD_PORT_INFORMATION
;
521 extern ULONG EXPORTED KdComPortInUse
;
523 extern ULONG IMPORTED KdComPortInUse
;
526 #endif /* __INCLUDE_DDK_HALTYPES_H */