c23f39dce4b9485e5bb096a9363562fba8ffae03
[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 /* display.c */
12 struct _LOADER_PARAMETER_BLOCK;
13 VOID FASTCALL HalInitializeDisplay (struct _LOADER_PARAMETER_BLOCK *LoaderBlock);
14 VOID FASTCALL HalClearDisplay (UCHAR CharAttribute);
15
16 /* adapter.c */
17 PADAPTER_OBJECT STDCALL HalpAllocateAdapterEx(ULONG NumberOfMapRegisters,BOOLEAN IsMaster, BOOLEAN Dma32BitAddresses);
18
19 /* bus.c */
20 VOID HalpInitBusHandlers (VOID);
21
22 /* irql.c */
23 VOID HalpInitPICs(VOID);
24
25 /* udelay.c */
26 VOID HalpCalibrateStallExecution(VOID);
27
28 /* pci.c */
29 VOID HalpInitPciBus (VOID);
30
31 /* enum.c */
32 VOID HalpStartEnumerator (VOID);
33
34 /* dma.c */
35 VOID HalpInitDma (VOID);
36
37 /* mem.c */
38 PVOID HalpMapPhysMemory(ULONG PhysAddr, ULONG Size);
39
40 /* Non-generic initialization */
41 VOID HalpInitPhase0 (PLOADER_PARAMETER_BLOCK LoaderBlock);
42
43 /* sysinfo.c */
44 NTSTATUS STDCALL
45 HalpQuerySystemInformation(IN HAL_QUERY_INFORMATION_CLASS InformationClass,
46 IN ULONG BufferSize,
47 IN OUT PVOID Buffer,
48 OUT PULONG ReturnedLength);
49
50 /* Non-standard functions */
51 VOID STDCALL
52 HalReleaseDisplayOwnership();
53
54 BOOLEAN STDCALL
55 HalQueryDisplayOwnership();
56
57 #if defined(__GNUC__)
58 #define Ki386SaveFlags(x) __asm__ __volatile__("pushfl ; popl %0":"=g" (x): /* no input */)
59 #define Ki386RestoreFlags(x) __asm__ __volatile__("pushl %0 ; popfl": /* no output */ :"g" (x):"memory")
60 #define Ki386DisableInterrupts() __asm__ __volatile__("cli\n\t")
61 #define Ki386EnableInterrupts() __asm__ __volatile__("sti\n\t")
62 #define Ki386HaltProcessor() __asm__ __volatile__("hlt\n\t")
63 #define Ki386RdTSC(x) __asm__ __volatile__("rdtsc\n\t" : "=A" (x.u.LowPart), "=d" (x.u.HighPart))
64 #define Ki386Rdmsr(msr,val1,val2) __asm__ __volatile__("rdmsr" : "=a" (val1), "=d" (val2) : "c" (msr))
65 #define Ki386Wrmsr(msr,val1,val2) __asm__ __volatile__("wrmsr" : /* no outputs */ : "c" (msr), "a" (val1), "d" (val2))
66 #define Ki386ReadFsByte(offset,x) __asm__ __volatile__("movb %%fs:%c1,%0" : "=q" (x) : "i" (offset))
67 #define Ki386WriteFsByte(offset,x) __asm__ __volatile__("movb %0,%%fs:%c1" : : "q" ((UCHAR)x), "i" (offset))
68
69 #elif defined(_MSC_VER)
70 #define Ki386SaveFlags(x) __asm pushfd __asm pop x;
71 #define Ki386RestoreFlags(x) __asm push x __asm popfd;
72 #define Ki386DisableInterrupts() __asm cli
73 #define Ki386EnableInterrupts() __asm sti
74 #define Ki386HaltProcessor() __asm hlt
75 #else
76 #error Unknown compiler for inline assembler
77 #endif
78
79 typedef struct tagHALP_HOOKS
80 {
81 void (*InitPciBus)(ULONG BusNumber, PBUS_HANDLER BusHandler);
82 } HALP_HOOKS, *PHALP_HOOKS;
83
84 extern HALP_HOOKS HalpHooks;
85
86 #endif /* __INTERNAL_HAL_HAL_H */