8516399123e7e9aa8be9ea37cd54d00fe16b084e
[reactos.git] / reactos / include / ddk / halddk.h
1 /* $Id: halddk.h,v 1.9 2001/03/31 16:01:03 phreak Exp $
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: include/internal/hal/ddk.h
6 * PURPOSE: HAL provided defintions for device drivers
7 * PROGRAMMER: David Welch (welch@mcmail.com)
8 * REVISION HISTORY:
9 * 23/06/98: Taken from linux system.h
10 */
11
12
13 #ifndef __INCLUDE_DDK_HALDDK_H
14 #define __INCLUDE_DDK_HALDDK_H
15
16 /* HalReturnToFirmware */
17 #define FIRMWARE_HALT 1
18 #define FIRMWARE_REBOOT 3
19
20
21 enum
22 {
23 DEVICE_DESCRIPTION_VERSION,
24 DEVICE_DESCRIPTION_VERSION1,
25 };
26
27 typedef ULONG DMA_WIDTH;
28 typedef ULONG DMA_SPEED;
29
30 /*
31 * PURPOSE: Types for HalGetBusData
32 */
33 typedef enum _BUS_DATA_TYPE
34 {
35 ConfigurationSpaceUndefined = -1,
36 Cmos,
37 EisaConfiguration,
38 Pos,
39 CbusConfiguration,
40 PCIConfiguration,
41 VMEConfiguration,
42 NuBusConfiguration,
43 PCMCIAConfiguration,
44 MPIConfiguration,
45 MPSAConfiguration,
46 PNPISAConfiguration,
47 MaximumBusDataType,
48 } BUS_DATA_TYPE, *PBUS_DATA_TYPE;
49
50 typedef struct _DEVICE_DESCRIPTION
51 {
52 ULONG Version;
53 BOOLEAN Master;
54 BOOLEAN ScatterGather;
55 BOOLEAN DemandMode;
56 BOOLEAN AutoInitialize;
57 BOOLEAN Dma32BitAddress;
58 BOOLEAN IgnoreCount;
59 BOOLEAN Reserved1;
60 BOOLEAN Reserved2;
61 ULONG BusNumber;
62 ULONG DmaChannel;
63 INTERFACE_TYPE InterfaceType;
64 DMA_WIDTH DmaWidth;
65 DMA_SPEED DmaSpeed;
66 ULONG MaximumLength;
67 ULONG DmaPort;
68 } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION;
69
70 typedef BOOLEAN (*PHAL_RESET_DISPLAY_PARAMETERS)(ULONG Columns, ULONG Rows);
71
72 /* Hal dispatch table */
73
74 typedef enum _HAL_QUERY_INFORMATION_CLASS
75 {
76 HalInstalledBusInformation,
77 HalProfileSourceInformation,
78 HalSystemDockInformation,
79 HalPowerInformation,
80 HalProcessorSpeedInformation,
81 HalCallbackInformation,
82 HalMapRegisterInformation,
83 HalMcaLogInformation,
84 HalFrameBufferCachingInformation,
85 HalDisplayBiosInformation
86 /* information levels >= 0x8000000 reserved for OEM use */
87 } HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS;
88
89
90 typedef enum _HAL_SET_INFORMATION_CLASS
91 {
92 HalProfileSourceInterval,
93 HalProfileSourceInterruptHandler,
94 HalMcaRegisterDriver
95 } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
96
97
98 typedef
99 NTSTATUS
100 (*pHalQuerySystemInformation) (
101 IN HAL_QUERY_INFORMATION_CLASS InformationClass,
102 IN ULONG BufferSize,
103 IN OUT PVOID Buffer,
104 OUT PULONG ReturnedLength
105 );
106
107
108 typedef
109 NTSTATUS
110 (*pHalSetSystemInformation) (
111 IN HAL_SET_INFORMATION_CLASS InformationClass,
112 IN ULONG BufferSize,
113 IN PVOID Buffer
114 );
115
116
117 typedef
118 NTSTATUS
119 (*pHalQueryBusSlots) (
120 // IN PBUS_HANDLER BusHandler,
121 IN PVOID BusHandler,
122 IN ULONG BufferSize,
123 OUT PULONG SlotNumbers,
124 OUT PULONG ReturnedLength
125 );
126
127
128 /* Control codes of HalDeviceControl function */
129 #define BCTL_EJECT 0x0001
130 #define BCTL_QUERY_DEVICE_ID 0x0002
131 #define BCTL_QUERY_DEVICE_UNIQUE_ID 0x0003
132 #define BCTL_QUERY_DEVICE_CAPABILITIES 0x0004
133 #define BCTL_QUERY_DEVICE_RESOURCES 0x0005
134 #define BCTL_QUERY_DEVICE_RESOURCE_REQUIREMENTS 0x0006
135 #define BCTL_QUERY_EJECT 0x0007
136 #define BCTL_SET_LOCK 0x0008
137 #define BCTL_SET_POWER 0x0009
138 #define BCTL_SET_RESUME 0x000A
139 #define BCTL_SET_DEVICE_RESOURCES 0x000B
140
141 /* Defines for BCTL structures */
142 typedef struct
143 {
144 BOOLEAN PowerSupported;
145 BOOLEAN ResumeSupported;
146 BOOLEAN LockSupported;
147 BOOLEAN EjectSupported;
148 BOOLEAN Removable;
149 } BCTL_DEVICE_CAPABILITIES, *PBCTL_DEVICE_CAPABILITIES;
150
151
152 typedef struct _DEVICE_CONTROL_CONTEXT
153 {
154 NTSTATUS Status;
155 // PDEVICE_HANDLER_OBJECT DeviceHandler;
156 PVOID DeviceHandler;
157 PDEVICE_OBJECT DeviceObject;
158 ULONG ControlCode;
159 PVOID Buffer;
160 PULONG BufferLength;
161 PVOID Context;
162 } DEVICE_CONTROL_CONTEXT, *PDEVICE_CONTROL_CONTEXT;
163
164
165 typedef
166 VOID
167 (*PDEVICE_CONTROL_COMPLETION) (
168 IN PDEVICE_CONTROL_CONTEXT ControlContext
169 );
170
171
172 typedef
173 NTSTATUS
174 (*pHalDeviceControl) (
175 // IN PDEVICE_HANDLER_OBJECT DeviceHandler,
176 IN PVOID DeviceHandler,
177 IN PDEVICE_OBJECT DeviceObject,
178 IN ULONG ControlCode,
179 IN OUT PVOID Buffer OPTIONAL,
180 IN OUT PULONG BufferLength OPTIONAL,
181 IN PVOID Context,
182 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
183 );
184
185
186 typedef
187 VOID
188 (FASTCALL *pHalExamineMBR) (
189 IN PDEVICE_OBJECT DeviceObject,
190 IN ULONG SectorSize,
191 IN ULONG MBRTypeIdentifier,
192 OUT PVOID * Buffer
193 );
194
195 typedef
196 VOID
197 (FASTCALL *pHalIoAssignDriveLetters) (
198 IN PLOADER_PARAMETER_BLOCK LoaderBlock,
199 IN PSTRING NtDeviceName,
200 OUT PUCHAR NtSystemPath,
201 OUT PSTRING NtSystemPathString
202 );
203
204 typedef
205 NTSTATUS
206 (FASTCALL *pHalIoReadPartitionTable) (
207 IN PDEVICE_OBJECT DeviceObject,
208 IN ULONG SectorSize,
209 IN BOOLEAN ReturnRecognizedPartitions,
210 OUT PDRIVE_LAYOUT_INFORMATION * PartitionBuffer
211 );
212
213 typedef
214 NTSTATUS
215 (FASTCALL *pHalIoSetPartitionInformation) (
216 IN PDEVICE_OBJECT DeviceObject,
217 IN ULONG SectorSize,
218 IN ULONG PartitionNumber,
219 IN ULONG PartitionType
220 );
221
222 typedef
223 NTSTATUS
224 (FASTCALL *pHalIoWritePartitionTable) (
225 IN PDEVICE_OBJECT DeviceObject,
226 IN ULONG SectorSize,
227 IN ULONG SectorsPerTrack,
228 IN ULONG NumberOfHeads,
229 IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer
230 );
231
232 typedef
233 //PBUS_HANDLER
234 PVOID
235 (FASTCALL *pHalHandlerForBus) (
236 IN INTERFACE_TYPE InterfaceType,
237 IN ULONG BusNumber
238 );
239
240 typedef
241 VOID
242 (FASTCALL *pHalReferenceBusHandler) (
243 // IN PBUS_HANDLER BusHandler
244 IN PVOID BusHandler
245 );
246
247 typedef struct _HAL_DISPATCH
248 {
249 ULONG Version;
250 pHalQuerySystemInformation HalQuerySystemInformation;
251 pHalSetSystemInformation HalSetSystemInformation;
252 pHalQueryBusSlots HalQueryBusSlots;
253 pHalDeviceControl HalDeviceControl;
254 pHalExamineMBR HalExamineMBR;
255 pHalIoAssignDriveLetters HalIoAssignDriveLetters;
256 pHalIoReadPartitionTable HalIoReadPartitionTable;
257 pHalIoSetPartitionInformation HalIoSetPartitionInformation;
258 pHalIoWritePartitionTable HalIoWritePartitionTable;
259 pHalHandlerForBus HalReferenceHandlerForBus;
260 pHalReferenceBusHandler HalReferenceBusHandler;
261 pHalReferenceBusHandler HalDereferenceBusHandler;
262 } HAL_DISPATCH, *PHAL_DISPATCH;
263
264 #define HAL_DISPATCH_VERSION 1
265
266 #ifdef __NTOSKRNL__
267 extern HAL_DISPATCH EXPORTED HalDispatchTable;
268 #else
269 extern HAL_DISPATCH IMPORTED HalDispatchTable;
270 #endif
271
272
273 /* Hal private dispatch table */
274
275 typedef struct _HAL_PRIVATE_DISPATCH
276 {
277 ULONG Version;
278
279
280 } HAL_PRIVATE_DISPATCH, *PHAL_PRIVATE_DISPATCH;
281
282 #define HAL_PRIVATE_DISPATCH_VERSION 1
283
284 #ifdef __NTOSKRNL__
285 extern HAL_PRIVATE_DISPATCH EXPORTED HalPrivateDispatchTable;
286 #else
287 extern HAL_PRIVATE_DISPATCH IMPORTED HalPrivateDispatchTable;
288 #endif
289
290
291 VOID
292 STDCALL
293 HalAcquireDisplayOwnership (
294 PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
295 );
296
297 NTSTATUS
298 STDCALL
299 HalAdjustResourceList (
300 PCM_RESOURCE_LIST Resources
301 );
302
303 NTSTATUS
304 STDCALL
305 HalAllocateAdapterChannel (
306 IN PADAPTER_OBJECT AdapterObject,
307 IN PDEVICE_OBJECT DeviceObject,
308 IN ULONG NumberOfMapRegisters,
309 IN PDRIVER_CONTROL ExecutionRoutine,
310 IN PVOID Context
311 );
312
313 PVOID
314 STDCALL
315 HalAllocateCommonBuffer (
316 PADAPTER_OBJECT AdapterObject,
317 ULONG Length,
318 PPHYSICAL_ADDRESS LogicalAddress,
319 BOOLEAN CacheEnabled
320 );
321
322 PVOID
323 STDCALL
324 HalAllocateCrashDumpRegisters (
325 IN PADAPTER_OBJECT AdapterObject,
326 IN OUT PULONG NumberOfMapRegisters
327 );
328
329 BOOLEAN
330 STDCALL
331 HalAllProcessorsStarted (
332 VOID
333 );
334
335 NTSTATUS
336 STDCALL
337 HalAssignSlotResources (
338 PUNICODE_STRING RegistryPath,
339 PUNICODE_STRING DriverClassName,
340 PDRIVER_OBJECT DriverObject,
341 PDEVICE_OBJECT DeviceObject,
342 INTERFACE_TYPE BusType,
343 ULONG BusNumber,
344 ULONG SlotNumber,
345 PCM_RESOURCE_LIST *AllocatedResources
346 );
347
348 BOOLEAN STDCALL HalBeginSystemInterrupt (ULONG Vector,
349 KIRQL Irql,
350 PKIRQL OldIrql);
351
352 VOID
353 STDCALL
354 HalCalibratePerformanceCounter (
355 ULONG Count
356 );
357
358 /*
359 FASTCALL
360 HalClearSoftwareInterrupt
361 */
362
363 BOOLEAN STDCALL HalDisableSystemInterrupt (ULONG Vector,
364 ULONG Unknown2);
365
366 VOID
367 STDCALL
368 HalDisplayString (
369 IN PCH String
370 );
371
372 BOOLEAN STDCALL HalEnableSystemInterrupt (ULONG Vector,
373 ULONG Unknown2,
374 ULONG Unknown3);
375
376 VOID STDCALL HalEndSystemInterrupt (KIRQL Irql,
377 ULONG Unknown2);
378
379
380 /* Is this function really exported ?? */
381 VOID
382 HalExamineMBR (
383 PDEVICE_OBJECT DeviceObject,
384 ULONG SectorSize,
385 ULONG MBRTypeIdentifier,
386 PVOID Buffer
387 );
388
389 BOOLEAN
390 STDCALL
391 HalFlushCommonBuffer (
392 ULONG Unknown1,
393 ULONG Unknown2,
394 ULONG Unknown3,
395 ULONG Unknown4,
396 ULONG Unknown5,
397 ULONG Unknown6,
398 ULONG Unknown7,
399 ULONG Unknown8
400 );
401
402 VOID
403 STDCALL
404 HalFreeCommonBuffer (
405 PADAPTER_OBJECT AdapterObject,
406 ULONG Length,
407 PHYSICAL_ADDRESS LogicalAddress,
408 PVOID VirtualAddress,
409 BOOLEAN CacheEnabled
410 );
411
412 PADAPTER_OBJECT
413 STDCALL
414 HalGetAdapter (
415 PDEVICE_DESCRIPTION DeviceDescription,
416 PULONG NumberOfMapRegisters
417 );
418
419 ULONG
420 STDCALL
421 HalGetBusData (
422 BUS_DATA_TYPE BusDataType,
423 ULONG BusNumber,
424 ULONG SlotNumber,
425 PVOID Buffer,
426 ULONG Length
427 );
428
429 ULONG
430 STDCALL
431 HalGetBusDataByOffset (
432 BUS_DATA_TYPE BusDataType,
433 ULONG BusNumber,
434 ULONG SlotNumber,
435 PVOID Buffer,
436 ULONG Offset,
437 ULONG Length
438 );
439
440 /* Is this function really exported ?? */
441 ULONG
442 HalGetDmaAlignmentRequirement (
443 VOID
444 );
445
446 BOOLEAN
447 STDCALL
448 HalGetEnvironmentVariable (
449 IN PCH Name,
450 OUT PCH Value,
451 IN USHORT ValueLength
452 );
453
454 ULONG
455 STDCALL
456 HalGetInterruptVector (
457 INTERFACE_TYPE InterfaceType,
458 ULONG BusNumber,
459 ULONG BusInterruptLevel,
460 ULONG BusInterruptVector,
461 PKIRQL Irql,
462 PKAFFINITY Affinity
463 );
464
465 VOID
466 STDCALL
467 HalInitializeProcessor (
468 ULONG ProcessorNumber
469 );
470
471 BOOLEAN
472 STDCALL
473 HalInitSystem (
474 ULONG BootPhase,
475 PLOADER_PARAMETER_BLOCK LoaderBlock
476 );
477
478 BOOLEAN
479 STDCALL
480 HalMakeBeep (
481 ULONG Frequency
482 );
483
484 VOID
485 STDCALL
486 HalQueryDisplayParameters (
487 PULONG DispSizeX,
488 PULONG DispSizeY,
489 PULONG CursorPosX,
490 PULONG CursorPosY
491 );
492
493 VOID
494 STDCALL
495 HalQueryRealTimeClock (
496 PTIME_FIELDS Time
497 );
498
499 /* Is this function really exported ?? */
500 VOID
501 HalQuerySystemInformation(VOID);
502
503 ULONG
504 STDCALL
505 HalReadDmaCounter (
506 PADAPTER_OBJECT AdapterObject
507 );
508
509 VOID
510 STDCALL
511 HalReportResourceUsage (
512 VOID
513 );
514
515 VOID
516 STDCALL
517 HalRequestIpi (
518 ULONG Unknown
519 );
520
521 /*
522 FASTCALL
523 HalRequestSoftwareInterrupt
524 */
525
526 VOID
527 STDCALL
528 HalReturnToFirmware (
529 ULONG Action
530 );
531
532 ULONG
533 STDCALL
534 HalSetBusData (
535 BUS_DATA_TYPE BusDataType,
536 ULONG BusNumber,
537 ULONG SlotNumber,
538 PVOID Buffer,
539 ULONG Length
540 );
541
542 ULONG
543 STDCALL
544 HalSetBusDataByOffset (
545 BUS_DATA_TYPE BusDataType,
546 ULONG BusNumber,
547 ULONG SlotNumber,
548 PVOID Buffer,
549 ULONG Offset,
550 ULONG Length
551 );
552
553 VOID
554 STDCALL
555 HalSetDisplayParameters (
556 ULONG CursorPosX,
557 ULONG CursorPosY
558 );
559
560 BOOLEAN
561 STDCALL
562 HalSetEnvironmentVariable (
563 IN PCH Name,
564 IN PCH Value
565 );
566
567 /*
568 HalSetProfileInterval
569 */
570
571 VOID
572 STDCALL
573 HalSetRealTimeClock (
574 PTIME_FIELDS Time
575 );
576
577 /*
578 HalSetTimeIncrement
579 */
580
581 BOOLEAN
582 STDCALL
583 HalStartNextProcessor (
584 ULONG Unknown1,
585 ULONG Unknown2
586 );
587
588 /*
589 HalStartProfileInterrupt
590 */
591
592 /*
593 HalStopProfileInterrupt
594 */
595
596 ULONG
597 FASTCALL
598 HalSystemVectorDispatchEntry (
599 ULONG Unknown1,
600 ULONG Unknown2,
601 ULONG Unknown3
602 );
603
604 BOOLEAN
605 STDCALL
606 HalTranslateBusAddress (
607 INTERFACE_TYPE InterfaceType,
608 ULONG BusNumber,
609 PHYSICAL_ADDRESS BusAddress,
610 PULONG AddressSpace,
611 PPHYSICAL_ADDRESS TranslatedAddress
612 );
613
614 /*
615 * Kernel debugger section
616 */
617
618 typedef struct _KD_PORT_INFORMATION
619 {
620 ULONG ComPort;
621 ULONG BaudRate;
622 ULONG BaseAddress;
623 } KD_PORT_INFORMATION, *PKD_PORT_INFORMATION;
624
625
626 #if defined(__HAL__) || defined(__NTOSKRNL__)
627 extern ULONG KdComPortInUse __declspec(dllexport);
628 #else
629 extern ULONG KdComPortInUse __declspec(dllimport);
630 #endif
631
632 BOOLEAN
633 STDCALL
634 KdPortInitialize (PKD_PORT_INFORMATION PortInformation,
635 DWORD Unknown1,
636 DWORD Unknown2);
637
638 BOOLEAN
639 STDCALL
640 KdPortGetByte (PUCHAR ByteRecieved);
641
642 BOOLEAN
643 STDCALL
644 KdPortPollByte (PUCHAR ByteRecieved);
645
646 VOID
647 STDCALL
648 KdPortPutByte (UCHAR ByteToSend);
649
650
651 /*
652 * Port I/O functions
653 */
654
655 VOID
656 STDCALL
657 READ_PORT_BUFFER_UCHAR (PUCHAR Port, PUCHAR Value, ULONG Count);
658
659 VOID
660 STDCALL
661 READ_PORT_BUFFER_ULONG (PULONG Port, PULONG Value, ULONG Count);
662
663 VOID
664 STDCALL
665 READ_PORT_BUFFER_USHORT (PUSHORT Port, PUSHORT Value, ULONG Count);
666
667 UCHAR
668 STDCALL
669 READ_PORT_UCHAR (PUCHAR Port);
670
671 ULONG
672 STDCALL
673 READ_PORT_ULONG (PULONG Port);
674
675 USHORT
676 STDCALL
677 READ_PORT_USHORT (PUSHORT Port);
678
679 VOID
680 STDCALL
681 WRITE_PORT_BUFFER_UCHAR (PUCHAR Port, PUCHAR Value, ULONG Count);
682
683 VOID
684 STDCALL
685 WRITE_PORT_BUFFER_ULONG (PULONG Port, PULONG Value, ULONG Count);
686
687 VOID
688 STDCALL
689 WRITE_PORT_BUFFER_USHORT (PUSHORT Port, PUSHORT Value, ULONG Count);
690
691 VOID
692 STDCALL
693 WRITE_PORT_UCHAR (PUCHAR Port, UCHAR Value);
694
695 VOID
696 STDCALL
697 WRITE_PORT_ULONG (PULONG Port, ULONG Value);
698
699 VOID
700 STDCALL
701 WRITE_PORT_USHORT (PUSHORT Port, USHORT Value);
702
703
704 #endif /* __INCLUDE_DDK_HALDDK_H */