- INITIAL_STALL_COUNT makes more sense in decimal (100) than hex (0x64) so define...
[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 /* bus.c */
65 VOID NTAPI HalpInitNonBusHandler (VOID);
66
67 /* sysinfo.c */
68 VOID
69 NTAPI
70 HalpRegisterVector(IN UCHAR Flags,
71 IN ULONG BusVector,
72 IN ULONG SystemVector,
73 IN KIRQL Irql);
74
75 VOID
76 NTAPI
77 HalpEnableInterruptHandler(IN UCHAR Flags,
78 IN ULONG BusVector,
79 IN ULONG SystemVector,
80 IN KIRQL Irql,
81 IN PVOID Handler,
82 IN KINTERRUPT_MODE Mode);
83
84 /* irql.c */
85 VOID NTAPI HalpInitPICs(VOID);
86
87 /* udelay.c */
88 VOID NTAPI HalpInitializeClock(VOID);
89
90 VOID
91 NTAPI
92 HalpCalibrateStallExecution(VOID);
93
94 /* pci.c */
95 VOID HalpInitPciBus (VOID);
96
97 /* dma.c */
98 VOID HalpInitDma (VOID);
99
100 /* Non-generic initialization */
101 VOID HalpInitPhase0 (PLOADER_PARAMETER_BLOCK LoaderBlock);
102 VOID HalpInitPhase1(VOID);
103 VOID NTAPI HalpClockInterrupt(VOID);
104 VOID NTAPI HalpProfileInterrupt(VOID);
105
106 //
107 // KD Support
108 //
109 VOID
110 NTAPI
111 HalpCheckPowerButton(
112 VOID
113 );
114
115 VOID
116 NTAPI
117 HalpRegisterKdSupportFunctions(
118 VOID
119 );
120
121 NTSTATUS
122 NTAPI
123 HalpSetupPciDeviceForDebugging(
124 IN PVOID LoaderBlock,
125 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
126 );
127
128 NTSTATUS
129 NTAPI
130 HalpReleasePciDeviceForDebugging(
131 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
132 );
133
134 //
135 // Memory routines
136 //
137 PVOID
138 NTAPI
139 HalpMapPhysicalMemory64(
140 IN PHYSICAL_ADDRESS PhysicalAddress,
141 IN ULONG NumberPage
142 );
143
144 VOID
145 NTAPI
146 HalpUnmapVirtualAddress(
147 IN PVOID VirtualAddress,
148 IN ULONG NumberPages
149 );
150
151 /* sysinfo.c */
152 NTSTATUS
153 NTAPI
154 HaliQuerySystemInformation(
155 IN HAL_QUERY_INFORMATION_CLASS InformationClass,
156 IN ULONG BufferSize,
157 IN OUT PVOID Buffer,
158 OUT PULONG ReturnedLength
159 );
160
161 NTSTATUS
162 NTAPI
163 HaliSetSystemInformation(
164 IN HAL_SET_INFORMATION_CLASS InformationClass,
165 IN ULONG BufferSize,
166 IN OUT PVOID Buffer
167 );
168
169 //
170 // BIOS Routines
171 //
172 BOOLEAN
173 NTAPI
174 HalpBiosDisplayReset(
175 VOID
176 );
177
178 ULONG
179 NTAPI
180 HalpBorrowTss(
181 VOID
182 );
183
184 ULONG
185 NTAPI
186 HalpReturnTss(
187 ULONG SavedTss
188 );
189
190 VOID
191 NTAPI
192 HalpBiosCall(
193 VOID
194 );
195
196 VOID
197 NTAPI
198 HalpTrap0D(
199 VOID
200 );
201
202 VOID
203 NTAPI
204 HalpTrap06(
205 VOID
206 );
207
208 //
209 // Processor Halt Routine
210 //
211 VOID
212 NTAPI
213 HaliHaltSystem(
214 VOID
215 );
216
217 //
218 // CMOS initialization
219 //
220 VOID
221 NTAPI
222 HalpInitializeCmos(
223 VOID
224 );
225
226 //
227 // Spinlock for protecting CMOS access
228 //
229 VOID
230 NTAPI
231 HalpAcquireSystemHardwareSpinLock(
232 VOID
233 );
234
235 VOID
236 NTAPI
237 HalpReleaseCmosSpinLock(
238 VOID
239 );
240
241 #ifdef _M_AMD64
242 #define KfLowerIrql KeLowerIrql
243 #ifndef CONFIG_SMP
244 /* On UP builds, spinlocks don't exist at IRQL >= DISPATCH */
245 #define KiAcquireSpinLock(SpinLock)
246 #define KiReleaseSpinLock(SpinLock)
247 #define KfAcquireSpinLock(SpinLock) KfRaiseIrql(DISPATCH_LEVEL);
248 #define KfReleaseSpinLock(SpinLock, OldIrql) KeLowerIrql(OldIrql);
249 #endif // !CONFIG_SMP
250 #endif // _M_AMD64
251
252 extern PVOID HalpRealModeStart;
253 extern PVOID HalpRealModeEnd;
254
255 extern ADDRESS_USAGE HalpDefaultIoSpace;
256
257 extern KSPIN_LOCK HalpSystemHardwareLock;
258
259 extern PADDRESS_USAGE HalpAddressUsageList;
260
261 #endif /* __INTERNAL_HAL_HAL_H */