198842a648c71be101ef405c28e30ef67d2de332
[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 /* CMOS Registers and Ports */
12 #define CMOS_CONTROL_PORT (PUCHAR)0x70
13 #define CMOS_DATA_PORT (PUCHAR)0x71
14 #define RTC_REGISTER_A 0x0A
15 #define RTC_REGISTER_B 0x0B
16 #define RTC_REG_A_UIP 0x80
17 #define RTC_REGISTER_CENTURY 0x32
18
19 /* Timer Registers and Ports */
20 #define TIMER_CONTROL_PORT 0x43
21 #define TIMER_DATA_PORT0 0x40
22 #define TIMER_SC0 0
23 #define TIMER_BOTH 0x30
24 #define TIMER_MD2 0x4
25
26 /* Usage flags */
27 #define IDT_REGISTERED 0x01
28 #define IDT_LATCHED 0x02
29 #define IDT_INTERNAL 0x11
30 #define IDT_DEVICE 0x21
31
32 /* Conversion functions */
33 #define BCD_INT(bcd) \
34 (((bcd & 0xF0) >> 4) * 10 + (bcd & 0x0F))
35 #define INT_BCD(int) \
36 (UCHAR)(((int / 10) << 4) + (int % 10))
37
38 typedef struct _IDTUsageFlags
39 {
40 UCHAR Flags;
41 } IDTUsageFlags;
42
43 typedef struct
44 {
45 KIRQL Irql;
46 UCHAR BusReleativeVector;
47 } IDTUsage;
48
49 typedef struct _HalAddressUsage
50 {
51 struct _HalAddressUsage *Next;
52 CM_RESOURCE_TYPE Type;
53 UCHAR Flags;
54 struct
55 {
56 ULONG Start;
57 ULONG Length;
58 } Element[];
59 } ADDRESS_USAGE, *PADDRESS_USAGE;
60
61 /* adapter.c */
62 PADAPTER_OBJECT NTAPI HalpAllocateAdapterEx(ULONG NumberOfMapRegisters,BOOLEAN IsMaster, BOOLEAN Dma32BitAddresses);
63
64 /* sysinfo.c */
65 VOID
66 NTAPI
67 HalpRegisterVector(IN UCHAR Flags,
68 IN ULONG BusVector,
69 IN ULONG SystemVector,
70 IN KIRQL Irql);
71
72 VOID
73 NTAPI
74 HalpEnableInterruptHandler(IN UCHAR Flags,
75 IN ULONG BusVector,
76 IN ULONG SystemVector,
77 IN KIRQL Irql,
78 IN PVOID Handler,
79 IN KINTERRUPT_MODE Mode);
80
81 /* irql.c */
82 VOID NTAPI HalpInitPICs(VOID);
83
84 /* udelay.c */
85 VOID NTAPI HalpInitializeClock(VOID);
86
87 VOID
88 NTAPI
89 HalpCalibrateStallExecution(VOID);
90
91 /* pci.c */
92 VOID HalpInitPciBus (VOID);
93
94 /* dma.c */
95 VOID HalpInitDma (VOID);
96
97 /* Non-generic initialization */
98 VOID HalpInitPhase0 (PLOADER_PARAMETER_BLOCK LoaderBlock);
99 VOID HalpInitPhase1(VOID);
100 VOID NTAPI HalpClockInterrupt(VOID);
101 VOID NTAPI HalpProfileInterrupt(VOID);
102
103 //
104 // KD Support
105 //
106 VOID
107 NTAPI
108 HalpCheckPowerButton(
109 VOID
110 );
111
112 VOID
113 NTAPI
114 HalpRegisterKdSupportFunctions(
115 VOID
116 );
117
118 NTSTATUS
119 NTAPI
120 HalpSetupPciDeviceForDebugging(
121 IN PVOID LoaderBlock,
122 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
123 );
124
125 NTSTATUS
126 NTAPI
127 HalpReleasePciDeviceForDebugging(
128 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
129 );
130
131 //
132 // Memory routines
133 //
134 PVOID
135 NTAPI
136 HalpMapPhysicalMemory64(
137 IN PHYSICAL_ADDRESS PhysicalAddress,
138 IN ULONG NumberPage
139 );
140
141 VOID
142 NTAPI
143 HalpUnmapVirtualAddress(
144 IN PVOID VirtualAddress,
145 IN ULONG NumberPages
146 );
147
148 /* sysinfo.c */
149 NTSTATUS
150 NTAPI
151 HaliQuerySystemInformation(
152 IN HAL_QUERY_INFORMATION_CLASS InformationClass,
153 IN ULONG BufferSize,
154 IN OUT PVOID Buffer,
155 OUT PULONG ReturnedLength
156 );
157
158 NTSTATUS
159 NTAPI
160 HaliSetSystemInformation(
161 IN HAL_SET_INFORMATION_CLASS InformationClass,
162 IN ULONG BufferSize,
163 IN OUT PVOID Buffer
164 );
165
166 //
167 // BIOS Routines
168 //
169 BOOLEAN
170 NTAPI
171 HalpBiosDisplayReset(
172 VOID
173 );
174
175 ULONG
176 NTAPI
177 HalpBorrowTss(
178 VOID
179 );
180
181 ULONG
182 NTAPI
183 HalpReturnTss(
184 ULONG SavedTss
185 );
186
187 VOID
188 NTAPI
189 HalpBiosCall(
190 VOID
191 );
192
193 VOID
194 NTAPI
195 HalpTrap0D(
196 VOID
197 );
198
199 VOID
200 NTAPI
201 HalpTrap06(
202 VOID
203 );
204
205 //
206 // Processor Halt Routine
207 //
208 VOID
209 NTAPI
210 HaliHaltSystem(
211 VOID
212 );
213
214 //
215 // CMOS initialization
216 //
217 VOID
218 NTAPI
219 HalpInitializeCmos(
220 VOID
221 );
222
223 //
224 // Spinlock for protecting CMOS access
225 //
226 VOID
227 NTAPI
228 HalpAcquireSystemHardwareSpinLock(
229 VOID
230 );
231
232 VOID
233 NTAPI
234 HalpReleaseCmosSpinLock(
235 VOID
236 );
237
238 #ifdef _M_AMD64
239 #define KfLowerIrql KeLowerIrql
240 #ifndef CONFIG_SMP
241 /* On UP builds, spinlocks don't exist at IRQL >= DISPATCH */
242 #define KiAcquireSpinLock(SpinLock)
243 #define KiReleaseSpinLock(SpinLock)
244 #define KfAcquireSpinLock(SpinLock) KfRaiseIrql(DISPATCH_LEVEL);
245 #define KfReleaseSpinLock(SpinLock, OldIrql) KeLowerIrql(OldIrql);
246 #endif // !CONFIG_SMP
247 #endif // _M_AMD64
248
249 extern PVOID HalpRealModeStart;
250 extern PVOID HalpRealModeEnd;
251
252 extern ADDRESS_USAGE HalpDefaultIoSpace;
253
254 extern KSPIN_LOCK HalpSystemHardwareLock;
255
256 extern PADDRESS_USAGE HalpAddressUsageList;
257
258 #endif /* __INTERNAL_HAL_HAL_H */