Partially fixed up tree after merge from HEAD. More to do.
[reactos.git] / reactos / hal / halx86 / include / halp.h
1 /*
2 *
3 */
4
5 #ifndef __INTERNAL_HAL_HAL_H
6 #define __INTERNAL_HAL_HAL_H
7
8 #define HAL_APC_REQUEST 0
9 #define HAL_DPC_REQUEST 1
10
11 //
12 // Kernel Debugger Port Definition
13 //
14 typedef struct _KD_PORT_INFORMATION
15 {
16 ULONG ComPort;
17 ULONG BaudRate;
18 ULONG BaseAddress;
19 } KD_PORT_INFORMATION, *PKD_PORT_INFORMATION;
20
21 /* display.c */
22 VOID FASTCALL HalInitializeDisplay (struct _ROS_LOADER_PARAMETER_BLOCK *LoaderBlock);
23 VOID FASTCALL HalClearDisplay (UCHAR CharAttribute);
24
25 /* adapter.c */
26 PADAPTER_OBJECT STDCALL HalpAllocateAdapterEx(ULONG NumberOfMapRegisters,BOOLEAN IsMaster, BOOLEAN Dma32BitAddresses);
27
28 /* bus.c */
29 VOID HalpInitBusHandlers (VOID);
30
31 /* irql.c */
32 VOID NTAPI HalpInitPICs(VOID);
33
34 /* udelay.c */
35 VOID HalpCalibrateStallExecution(VOID);
36
37 /* pci.c */
38 VOID HalpInitPciBus (VOID);
39
40 /* enum.c */
41 VOID HalpStartEnumerator (VOID);
42
43 /* dma.c */
44 VOID HalpInitDma (VOID);
45
46 /* mem.c */
47 PVOID HalpMapPhysMemory(ULONG PhysAddr, ULONG Size);
48
49 /* Non-generic initialization */
50 VOID HalpInitPhase0 (PROS_LOADER_PARAMETER_BLOCK LoaderBlock);
51 VOID HalpInitPhase1(VOID);
52 VOID NTAPI HalpClockInterrupt(VOID);
53
54 /* sysinfo.c */
55 NTSTATUS STDCALL
56 HalpQuerySystemInformation(IN HAL_QUERY_INFORMATION_CLASS InformationClass,
57 IN ULONG BufferSize,
58 IN OUT PVOID Buffer,
59 OUT PULONG ReturnedLength);
60
61 /* Non-standard functions */
62 VOID STDCALL
63 HalReleaseDisplayOwnership();
64
65 BOOLEAN STDCALL
66 HalQueryDisplayOwnership();
67
68 #if defined(__GNUC__)
69 #define Ki386SaveFlags(x) __asm__ __volatile__("pushfl ; popl %0":"=g" (x): /* no input */)
70 #define Ki386RestoreFlags(x) __asm__ __volatile__("pushl %0 ; popfl": /* no output */ :"g" (x):"memory")
71 #define Ki386DisableInterrupts() __asm__ __volatile__("cli\n\t")
72 #define Ki386EnableInterrupts() __asm__ __volatile__("sti\n\t")
73 #define Ki386HaltProcessor() __asm__ __volatile__("hlt\n\t")
74 #define Ki386RdTSC(x) __asm__ __volatile__("rdtsc\n\t" : "=A" (x.u.LowPart), "=d" (x.u.HighPart))
75 #define Ki386Rdmsr(msr,val1,val2) __asm__ __volatile__("rdmsr" : "=a" (val1), "=d" (val2) : "c" (msr))
76 #define Ki386Wrmsr(msr,val1,val2) __asm__ __volatile__("wrmsr" : /* no outputs */ : "c" (msr), "a" (val1), "d" (val2))
77 #define Ki386ReadFsByte(offset,x) __asm__ __volatile__("movb %%fs:%c1,%0" : "=q" (x) : "i" (offset))
78 #define Ki386WriteFsByte(offset,x) __asm__ __volatile__("movb %0,%%fs:%c1" : : "q" ((UCHAR)x), "i" (offset))
79
80 #elif defined(_MSC_VER)
81 #define Ki386SaveFlags(x) __asm pushfd __asm pop x;
82 #define Ki386RestoreFlags(x) __asm push x __asm popfd;
83 #define Ki386DisableInterrupts() __asm cli
84 #define Ki386EnableInterrupts() __asm sti
85 #define Ki386HaltProcessor() __asm hlt
86 #else
87 #error Unknown compiler for inline assembler
88 #endif
89
90 typedef struct tagHALP_HOOKS
91 {
92 void (*InitPciBus)(ULONG BusNumber, PBUS_HANDLER BusHandler);
93 } HALP_HOOKS, *PHALP_HOOKS;
94
95 extern HALP_HOOKS HalpHooks;
96
97 #endif /* __INTERNAL_HAL_HAL_H */