5 #ifndef __INTERNAL_HAL_HAL_H
6 #define __INTERNAL_HAL_HAL_H
8 #define HAL_APC_REQUEST 0
9 #define HAL_DPC_REQUEST 1
12 struct _LOADER_PARAMETER_BLOCK
;
13 VOID FASTCALL
HalInitializeDisplay (struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
);
14 VOID FASTCALL
HalClearDisplay (UCHAR CharAttribute
);
17 PADAPTER_OBJECT STDCALL
HalpAllocateAdapterEx(ULONG NumberOfMapRegisters
,BOOLEAN IsMaster
, BOOLEAN Dma32BitAddresses
);
20 VOID
HalpInitBusHandlers (VOID
);
23 VOID
HalpInitPICs(VOID
);
26 VOID
HalpCalibrateStallExecution(VOID
);
29 VOID
HalpInitPciBus (VOID
);
32 VOID
HalpStartEnumerator (VOID
);
35 VOID
HalpInitDma (VOID
);
38 PVOID
HalpMapPhysMemory(ULONG PhysAddr
, ULONG Size
);
40 /* Non-generic initialization */
41 VOID
HalpInitPhase0 (PLOADER_PARAMETER_BLOCK LoaderBlock
);
45 HalpQuerySystemInformation(IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
48 OUT PULONG ReturnedLength
);
50 /* Non-standard functions */
52 HalReleaseDisplayOwnership();
55 HalQueryDisplayOwnership();
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))
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
76 #error Unknown compiler for inline assembler
79 typedef struct tagHALP_HOOKS
81 void (*InitPciBus
)(ULONG BusNumber
, PBUS_HANDLER BusHandler
);
82 } HALP_HOOKS
, *PHALP_HOOKS
;
84 extern HALP_HOOKS HalpHooks
;
86 #endif /* __INTERNAL_HAL_HAL_H */