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_DDK_HALTYPES_H
14 #define __INCLUDE_DDK_HALTYPES_H
17 /* HalReturnToFirmware */
18 #define FIRMWARE_HALT 1
19 #define FIRMWARE_REBOOT 3
23 DEVICE_DESCRIPTION_VERSION,
24 DEVICE_DESCRIPTION_VERSION1,
27 typedef ULONG DMA_WIDTH;
28 typedef ULONG DMA_SPEED;
31 * PURPOSE: Types for HalGetBusData
33 typedef enum _BUS_DATA_TYPE
35 ConfigurationSpaceUndefined = -1,
48 } BUS_DATA_TYPE, *PBUS_DATA_TYPE;
50 typedef struct _DEVICE_DESCRIPTION
54 BOOLEAN ScatterGather;
56 BOOLEAN AutoInitialize;
57 BOOLEAN Dma32BitAddress;
63 INTERFACE_TYPE InterfaceType;
68 } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION;
71 /* PCI bus definitions */
73 #define PCI_TYPE0_ADDRESSES 6
74 #define PCI_TYPE1_ADDRESSES 2
75 #define PCI_TYPE2_ADDRESSES 5
77 typedef struct _PCI_COMMON_CONFIG
79 USHORT VendorID; /* read-only */
80 USHORT DeviceID; /* read-only */
83 UCHAR RevisionID; /* read-only */
84 UCHAR ProgIf; /* read-only */
85 UCHAR SubClass; /* read-only */
86 UCHAR BaseClass; /* read-only */
87 UCHAR CacheLineSize; /* read-only */
88 UCHAR LatencyTimer; /* read-only */
89 UCHAR HeaderType; /* read-only */
93 struct _PCI_HEADER_TYPE_0
95 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES];
103 UCHAR InterruptPin; /* read-only */
104 UCHAR MinimumGrant; /* read-only */
105 UCHAR MaximumLatency; /* read-only */
108 /* PCI to PCI Bridge */
109 struct _PCI_HEADER_TYPE_1
111 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES];
114 UCHAR SubordinateBus;
115 UCHAR SecondaryLatency;
118 USHORT SecondaryStatus;
122 USHORT PrefetchLimit;
123 ULONG PrefetchBaseUpper32;
124 ULONG PrefetchLimitUpper32;
125 USHORT IOBaseUpper16;
126 USHORT IOLimitUpper16;
127 UCHAR CapabilitiesPtr;
129 ULONG ROMBaseAddress;
132 USHORT BridgeControl;
135 /* PCI to CARDBUS Bridge */
136 struct _PCI_HEADER_TYPE_2
138 ULONG SocketRegistersBaseAddress;
139 UCHAR CapabilitiesPtr;
141 USHORT SecondaryStatus;
144 UCHAR SubordinateBus;
145 UCHAR SecondaryLatency;
150 } Range[PCI_TYPE2_ADDRESSES-1];
153 USHORT BridgeControl;
156 UCHAR DeviceSpecific[192];
157 } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
159 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET (PCI_COMMON_CONFIG, DeviceSpecific))
161 #define PCI_MAX_DEVICES 32
162 #define PCI_MAX_FUNCTION 8
164 #define PCI_INVALID_VENDORID 0xFFFF
167 /* Bit encodings for PCI_COMMON_CONFIG.HeaderType */
169 #define PCI_MULTIFUNCTION 0x80
170 #define PCI_DEVICE_TYPE 0x00
171 #define PCI_BRIDGE_TYPE 0x01
174 /* Bit encodings for PCI_COMMON_CONFIG.Command */
176 #define PCI_ENABLE_IO_SPACE 0x0001
177 #define PCI_ENABLE_MEMORY_SPACE 0x0002
178 #define PCI_ENABLE_BUS_MASTER 0x0004
179 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
180 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
181 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
182 #define PCI_ENABLE_PARITY 0x0040
183 #define PCI_ENABLE_WAIT_CYCLE 0x0080
184 #define PCI_ENABLE_SERR 0x0100
185 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
188 /* Bit encodings for PCI_COMMON_CONFIG.Status */
190 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
191 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
192 #define PCI_STATUS_DEVSEL 0x0600 /* 2 bits wide */
193 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
194 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
195 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
196 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
197 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
200 /* Bit encodes for PCI_COMMON_CONFIG.u.type0.BaseAddresses */
202 #define PCI_ADDRESS_IO_SPACE 0x00000001
203 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
204 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
206 #define PCI_TYPE_32BIT 0
207 #define PCI_TYPE_20BIT 2
208 #define PCI_TYPE_64BIT 4
211 /* Bit encodes for PCI_COMMON_CONFIG.u.type0.ROMBaseAddresses */
213 #define PCI_ROMADDRESS_ENABLED 0x00000001
216 typedef struct _PCI_SLOT_NUMBER
222 ULONG DeviceNumber:5;
223 ULONG FunctionNumber:3;
228 } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
231 /* MicroChannel bus data */
233 typedef struct _CM_MCA_POS_DATA
240 } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
243 /* Hal dispatch table */
245 typedef enum _HAL_QUERY_INFORMATION_CLASS
247 HalInstalledBusInformation,
248 HalProfileSourceInformation,
249 HalSystemDockInformation,
251 HalProcessorSpeedInformation,
252 HalCallbackInformation,
253 HalMapRegisterInformation,
254 HalMcaLogInformation,
255 HalFrameBufferCachingInformation,
256 HalDisplayBiosInformation
257 /* information levels >= 0x8000000 reserved for OEM use */
258 } HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS;
261 typedef enum _HAL_SET_INFORMATION_CLASS
263 HalProfileSourceInterval,
264 HalProfileSourceInterruptHandler,
266 } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
269 typedef struct _BUS_HANDLER *PBUS_HANDLER;
270 typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
273 typedef BOOLEAN STDCALL
274 (*PHAL_RESET_DISPLAY_PARAMETERS)(ULONG Columns, ULONG Rows);
276 typedef NTSTATUS STDCALL
277 (*pHalQuerySystemInformation)(IN HAL_QUERY_INFORMATION_CLASS InformationClass,
280 OUT PULONG ReturnedLength);
283 typedef NTSTATUS STDCALL
284 (*pHalSetSystemInformation)(IN HAL_SET_INFORMATION_CLASS InformationClass,
289 typedef NTSTATUS STDCALL
290 (*pHalQueryBusSlots)(IN PBUS_HANDLER BusHandler,
292 OUT PULONG SlotNumbers,
293 OUT PULONG ReturnedLength);
296 /* Control codes of HalDeviceControl function */
297 #define BCTL_EJECT 0x0001
298 #define BCTL_QUERY_DEVICE_ID 0x0002
299 #define BCTL_QUERY_DEVICE_UNIQUE_ID 0x0003
300 #define BCTL_QUERY_DEVICE_CAPABILITIES 0x0004
301 #define BCTL_QUERY_DEVICE_RESOURCES 0x0005
302 #define BCTL_QUERY_DEVICE_RESOURCE_REQUIREMENTS 0x0006
303 #define BCTL_QUERY_EJECT 0x0007
304 #define BCTL_SET_LOCK 0x0008
305 #define BCTL_SET_POWER 0x0009
306 #define BCTL_SET_RESUME 0x000A
307 #define BCTL_SET_DEVICE_RESOURCES 0x000B
309 /* Defines for BCTL structures */
312 BOOLEAN PowerSupported;
313 BOOLEAN ResumeSupported;
314 BOOLEAN LockSupported;
315 BOOLEAN EjectSupported;
317 } BCTL_DEVICE_CAPABILITIES, *PBCTL_DEVICE_CAPABILITIES;
320 typedef struct _DEVICE_CONTROL_CONTEXT
323 PDEVICE_HANDLER_OBJECT DeviceHandler;
324 PDEVICE_OBJECT DeviceObject;
329 } DEVICE_CONTROL_CONTEXT, *PDEVICE_CONTROL_CONTEXT;
333 (*PDEVICE_CONTROL_COMPLETION)(IN PDEVICE_CONTROL_CONTEXT ControlContext);
336 typedef NTSTATUS STDCALL
337 (*pHalDeviceControl)(IN PDEVICE_HANDLER_OBJECT DeviceHandler,
338 IN PDEVICE_OBJECT DeviceObject,
339 IN ULONG ControlCode,
340 IN OUT PVOID Buffer OPTIONAL,
341 IN OUT PULONG BufferLength OPTIONAL,
343 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine);
345 typedef VOID FASTCALL
346 (*pHalExamineMBR)(IN PDEVICE_OBJECT DeviceObject,
348 IN ULONG MBRTypeIdentifier,
351 typedef VOID FASTCALL
352 (*pHalIoAssignDriveLetters)(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
353 IN PSTRING NtDeviceName,
354 OUT PUCHAR NtSystemPath,
355 OUT PSTRING NtSystemPathString);
357 typedef NTSTATUS FASTCALL
358 (*pHalIoReadPartitionTable)(IN PDEVICE_OBJECT DeviceObject,
360 IN BOOLEAN ReturnRecognizedPartitions,
361 OUT PDRIVE_LAYOUT_INFORMATION *PartitionBuffer);
363 typedef NTSTATUS FASTCALL
364 (*pHalIoSetPartitionInformation)(IN PDEVICE_OBJECT DeviceObject,
366 IN ULONG PartitionNumber,
367 IN ULONG PartitionType);
369 typedef NTSTATUS FASTCALL
370 (*pHalIoWritePartitionTable)(IN PDEVICE_OBJECT DeviceObject,
372 IN ULONG SectorsPerTrack,
373 IN ULONG NumberOfHeads,
374 IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer);
376 typedef PBUS_HANDLER FASTCALL
377 (*pHalHandlerForBus)(IN INTERFACE_TYPE InterfaceType,
380 typedef VOID FASTCALL
381 (*pHalReferenceBusHandler)(IN PBUS_HANDLER BusHandler);
384 typedef struct _HAL_DISPATCH
387 pHalQuerySystemInformation HalQuerySystemInformation;
388 pHalSetSystemInformation HalSetSystemInformation;
389 pHalQueryBusSlots HalQueryBusSlots;
390 pHalDeviceControl HalDeviceControl;
391 pHalExamineMBR HalExamineMBR;
392 pHalIoAssignDriveLetters HalIoAssignDriveLetters;
393 pHalIoReadPartitionTable HalIoReadPartitionTable;
394 pHalIoSetPartitionInformation HalIoSetPartitionInformation;
395 pHalIoWritePartitionTable HalIoWritePartitionTable;
396 pHalHandlerForBus HalReferenceHandlerForBus;
397 pHalReferenceBusHandler HalReferenceBusHandler;
398 pHalReferenceBusHandler HalDereferenceBusHandler;
399 } HAL_DISPATCH, *PHAL_DISPATCH;
401 #define HAL_DISPATCH_VERSION 1
404 extern HAL_DISPATCH EXPORTED HalDispatchTable;
406 extern HAL_DISPATCH IMPORTED HalDispatchTable;
410 /* Hal private dispatch table */
412 typedef struct _HAL_PRIVATE_DISPATCH
415 } HAL_PRIVATE_DISPATCH, *PHAL_PRIVATE_DISPATCH;
417 #define HAL_PRIVATE_DISPATCH_VERSION 1
421 extern HAL_PRIVATE_DISPATCH EXPORTED HalPrivateDispatchTable;
423 extern HAL_PRIVATE_DISPATCH IMPORTED HalPrivateDispatchTable;
429 * Kernel debugger section
432 typedef struct _KD_PORT_INFORMATION
437 } KD_PORT_INFORMATION, *PKD_PORT_INFORMATION;
441 extern ULONG EXPORTED KdComPortInUse;
443 extern ULONG IMPORTED KdComPortInUse;
446 #endif /* __INCLUDE_DDK_HALTYPES_H */