NMI Support Patch 4:
[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 //
39 // Mm PTE/PDE to Hal PTE/PDE
40 //
41 #define HalAddressToPde(x) (PHARDWARE_PTE)MiAddressToPde(x)
42 #define HalAddressToPte(x) (PHARDWARE_PTE)MiAddressToPte(x)
43
44 typedef struct _IDTUsageFlags
45 {
46 UCHAR Flags;
47 } IDTUsageFlags;
48
49 typedef struct
50 {
51 KIRQL Irql;
52 UCHAR BusReleativeVector;
53 } IDTUsage;
54
55 typedef struct _HalAddressUsage
56 {
57 struct _HalAddressUsage *Next;
58 CM_RESOURCE_TYPE Type;
59 UCHAR Flags;
60 struct
61 {
62 ULONG Start;
63 ULONG Length;
64 } Element[];
65 } ADDRESS_USAGE, *PADDRESS_USAGE;
66
67 /* adapter.c */
68 PADAPTER_OBJECT NTAPI HalpAllocateAdapterEx(ULONG NumberOfMapRegisters,BOOLEAN IsMaster, BOOLEAN Dma32BitAddresses);
69
70 /* sysinfo.c */
71 VOID
72 NTAPI
73 HalpRegisterVector(IN UCHAR Flags,
74 IN ULONG BusVector,
75 IN ULONG SystemVector,
76 IN KIRQL Irql);
77
78 VOID
79 NTAPI
80 HalpEnableInterruptHandler(IN UCHAR Flags,
81 IN ULONG BusVector,
82 IN ULONG SystemVector,
83 IN KIRQL Irql,
84 IN PVOID Handler,
85 IN KINTERRUPT_MODE Mode);
86
87 /* irql.c */
88 VOID NTAPI HalpInitPICs(VOID);
89
90 /* udelay.c */
91 VOID NTAPI HalpInitializeClock(VOID);
92
93 VOID
94 NTAPI
95 HalpCalibrateStallExecution(VOID);
96
97 /* pci.c */
98 VOID HalpInitPciBus (VOID);
99
100 /* dma.c */
101 VOID HalpInitDma (VOID);
102
103 /* Non-generic initialization */
104 VOID HalpInitPhase0 (PLOADER_PARAMETER_BLOCK LoaderBlock);
105 VOID HalpInitPhase1(VOID);
106 VOID NTAPI HalpClockInterrupt(VOID);
107 VOID NTAPI HalpProfileInterrupt(VOID);
108
109 //
110 // KD Support
111 //
112 VOID
113 NTAPI
114 HalpCheckPowerButton(
115 VOID
116 );
117
118 VOID
119 NTAPI
120 HalpRegisterKdSupportFunctions(
121 VOID
122 );
123
124 NTSTATUS
125 NTAPI
126 HalpSetupPciDeviceForDebugging(
127 IN PVOID LoaderBlock,
128 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
129 );
130
131 NTSTATUS
132 NTAPI
133 HalpReleasePciDeviceForDebugging(
134 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
135 );
136
137 //
138 // Memory routines
139 //
140 PVOID
141 NTAPI
142 HalpMapPhysicalMemory64(
143 IN PHYSICAL_ADDRESS PhysicalAddress,
144 IN ULONG NumberPage
145 );
146
147 VOID
148 NTAPI
149 HalpUnmapVirtualAddress(
150 IN PVOID VirtualAddress,
151 IN ULONG NumberPages
152 );
153
154 /* sysinfo.c */
155 NTSTATUS
156 NTAPI
157 HaliQuerySystemInformation(
158 IN HAL_QUERY_INFORMATION_CLASS InformationClass,
159 IN ULONG BufferSize,
160 IN OUT PVOID Buffer,
161 OUT PULONG ReturnedLength
162 );
163
164 NTSTATUS
165 NTAPI
166 HaliSetSystemInformation(
167 IN HAL_SET_INFORMATION_CLASS InformationClass,
168 IN ULONG BufferSize,
169 IN OUT PVOID Buffer
170 );
171
172 //
173 // BIOS Routines
174 //
175 BOOLEAN
176 NTAPI
177 HalpBiosDisplayReset(
178 VOID
179 );
180
181 VOID
182 NTAPI
183 HalpBiosCall(
184 VOID
185 );
186
187 VOID
188 NTAPI
189 HalpTrap0D(
190 VOID
191 );
192
193 VOID
194 NTAPI
195 HalpTrap06(
196 VOID
197 );
198
199 //
200 // Processor Halt Routine
201 //
202 VOID
203 NTAPI
204 HaliHaltSystem(
205 VOID
206 );
207
208 //
209 // CMOS initialization
210 //
211 VOID
212 NTAPI
213 HalpInitializeCmos(
214 VOID
215 );
216
217 //
218 // Spinlock for protecting CMOS access
219 //
220 VOID
221 NTAPI
222 HalpAcquireSystemHardwareSpinLock(
223 VOID
224 );
225
226 VOID
227 NTAPI
228 HalpReleaseCmosSpinLock(
229 VOID
230 );
231
232 #ifdef _M_AMD64
233 #define KfLowerIrql KeLowerIrql
234 #ifndef CONFIG_SMP
235 /* On UP builds, spinlocks don't exist at IRQL >= DISPATCH */
236 #define KiAcquireSpinLock(SpinLock)
237 #define KiReleaseSpinLock(SpinLock)
238 #define KfAcquireSpinLock(SpinLock) KfRaiseIrql(DISPATCH_LEVEL);
239 #define KfReleaseSpinLock(SpinLock, OldIrql) KeLowerIrql(OldIrql);
240 #endif // !CONFIG_SMP
241 #endif // _M_AMD64
242
243 extern PVOID HalpRealModeStart;
244 extern PVOID HalpRealModeEnd;
245
246 extern ADDRESS_USAGE HalpDefaultIoSpace;
247
248 extern KSPIN_LOCK HalpSystemHardwareLock;
249
250 extern PADDRESS_USAGE HalpAddressUsageList;
251
252 #endif /* __INTERNAL_HAL_HAL_H */