Fixed callback calling conventions (part 1).
[reactos.git] / reactos / include / ddk / halddk.h
1 /* $Id: halddk.h,v 1.10 2001/08/21 20:13:05 chorns 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 PVOID ProcessorStack
470 );
471
472 BOOLEAN
473 STDCALL
474 HalInitSystem (
475 ULONG BootPhase,
476 PLOADER_PARAMETER_BLOCK LoaderBlock
477 );
478
479 BOOLEAN
480 STDCALL
481 HalMakeBeep (
482 ULONG Frequency
483 );
484
485 VOID
486 STDCALL
487 HalQueryDisplayParameters (
488 PULONG DispSizeX,
489 PULONG DispSizeY,
490 PULONG CursorPosX,
491 PULONG CursorPosY
492 );
493
494 VOID
495 STDCALL
496 HalQueryRealTimeClock (
497 PTIME_FIELDS Time
498 );
499
500 /* Is this function really exported ?? */
501 VOID
502 HalQuerySystemInformation(VOID);
503
504 ULONG
505 STDCALL
506 HalReadDmaCounter (
507 PADAPTER_OBJECT AdapterObject
508 );
509
510 VOID
511 STDCALL
512 HalReportResourceUsage (
513 VOID
514 );
515
516 VOID
517 STDCALL
518 HalRequestIpi (
519 ULONG Unknown
520 );
521
522 /*
523 FASTCALL
524 HalRequestSoftwareInterrupt
525 */
526
527 VOID
528 STDCALL
529 HalReturnToFirmware (
530 ULONG Action
531 );
532
533 ULONG
534 STDCALL
535 HalSetBusData (
536 BUS_DATA_TYPE BusDataType,
537 ULONG BusNumber,
538 ULONG SlotNumber,
539 PVOID Buffer,
540 ULONG Length
541 );
542
543 ULONG
544 STDCALL
545 HalSetBusDataByOffset (
546 BUS_DATA_TYPE BusDataType,
547 ULONG BusNumber,
548 ULONG SlotNumber,
549 PVOID Buffer,
550 ULONG Offset,
551 ULONG Length
552 );
553
554 VOID
555 STDCALL
556 HalSetDisplayParameters (
557 ULONG CursorPosX,
558 ULONG CursorPosY
559 );
560
561 BOOLEAN
562 STDCALL
563 HalSetEnvironmentVariable (
564 IN PCH Name,
565 IN PCH Value
566 );
567
568 /*
569 HalSetProfileInterval
570 */
571
572 VOID
573 STDCALL
574 HalSetRealTimeClock (
575 PTIME_FIELDS Time
576 );
577
578 /*
579 HalSetTimeIncrement
580 */
581
582 BOOLEAN
583 STDCALL
584 HalStartNextProcessor (
585 ULONG Unknown1,
586 ULONG Unknown2
587 );
588
589 /*
590 HalStartProfileInterrupt
591 */
592
593 /*
594 HalStopProfileInterrupt
595 */
596
597 ULONG
598 FASTCALL
599 HalSystemVectorDispatchEntry (
600 ULONG Unknown1,
601 ULONG Unknown2,
602 ULONG Unknown3
603 );
604
605 BOOLEAN
606 STDCALL
607 HalTranslateBusAddress (
608 INTERFACE_TYPE InterfaceType,
609 ULONG BusNumber,
610 PHYSICAL_ADDRESS BusAddress,
611 PULONG AddressSpace,
612 PPHYSICAL_ADDRESS TranslatedAddress
613 );
614
615 /*
616 * Kernel debugger section
617 */
618
619 typedef struct _KD_PORT_INFORMATION
620 {
621 ULONG ComPort;
622 ULONG BaudRate;
623 ULONG BaseAddress;
624 } KD_PORT_INFORMATION, *PKD_PORT_INFORMATION;
625
626
627 #if defined(__NTOSKRNL__)
628 extern ULONG KdComPortInUse __declspec(dllexport);
629 #endif
630
631 #if defined(__HAL__)
632 extern ULONG KdComPortInUse __declspec(dllimport);
633 #endif
634
635 BOOLEAN
636 STDCALL
637 KdPortInitialize (PKD_PORT_INFORMATION PortInformation,
638 DWORD Unknown1,
639 DWORD Unknown2);
640
641 BOOLEAN
642 STDCALL
643 KdPortGetByte (PUCHAR ByteRecieved);
644
645 BOOLEAN
646 STDCALL
647 KdPortPollByte (PUCHAR ByteRecieved);
648
649 VOID
650 STDCALL
651 KdPortPutByte (UCHAR ByteToSend);
652
653
654 /*
655 * Port I/O functions
656 */
657
658 VOID
659 STDCALL
660 READ_PORT_BUFFER_UCHAR (PUCHAR Port, PUCHAR Value, ULONG Count);
661
662 VOID
663 STDCALL
664 READ_PORT_BUFFER_ULONG (PULONG Port, PULONG Value, ULONG Count);
665
666 VOID
667 STDCALL
668 READ_PORT_BUFFER_USHORT (PUSHORT Port, PUSHORT Value, ULONG Count);
669
670 UCHAR
671 STDCALL
672 READ_PORT_UCHAR (PUCHAR Port);
673
674 ULONG
675 STDCALL
676 READ_PORT_ULONG (PULONG Port);
677
678 USHORT
679 STDCALL
680 READ_PORT_USHORT (PUSHORT Port);
681
682 VOID
683 STDCALL
684 WRITE_PORT_BUFFER_UCHAR (PUCHAR Port, PUCHAR Value, ULONG Count);
685
686 VOID
687 STDCALL
688 WRITE_PORT_BUFFER_ULONG (PULONG Port, PULONG Value, ULONG Count);
689
690 VOID
691 STDCALL
692 WRITE_PORT_BUFFER_USHORT (PUSHORT Port, PUSHORT Value, ULONG Count);
693
694 VOID
695 STDCALL
696 WRITE_PORT_UCHAR (PUCHAR Port, UCHAR Value);
697
698 VOID
699 STDCALL
700 WRITE_PORT_ULONG (PULONG Port, ULONG Value);
701
702 VOID
703 STDCALL
704 WRITE_PORT_USHORT (PUSHORT Port, USHORT Value);
705
706
707 #endif /* __INCLUDE_DDK_HALDDK_H */