c74ae1b0aa6edef79491cd5fee07637a8e4f1c20
[reactos.git] / reactos / hal / halx86 / include / halp.h
1 /*
2 *
3 */
4
5 #pragma once
6
7 typedef struct _HAL_BIOS_FRAME
8 {
9 ULONG SegSs;
10 ULONG Esp;
11 ULONG EFlags;
12 ULONG SegCs;
13 ULONG Eip;
14 PKTRAP_FRAME TrapFrame;
15 ULONG CsLimit;
16 ULONG CsBase;
17 ULONG CsFlags;
18 ULONG SsLimit;
19 ULONG SsBase;
20 ULONG SsFlags;
21 ULONG Prefix;
22 } HAL_BIOS_FRAME, *PHAL_BIOS_FRAME;
23
24 typedef
25 VOID
26 (*PHAL_SW_INTERRUPT_HANDLER)(
27 VOID
28 );
29
30 typedef
31 FASTCALL
32 VOID
33 DECLSPEC_NORETURN
34 (*PHAL_SW_INTERRUPT_HANDLER_2ND_ENTRY)(
35 IN PKTRAP_FRAME TrapFrame
36 );
37
38 #define HAL_APC_REQUEST 0
39 #define HAL_DPC_REQUEST 1
40
41 /* CMOS Registers and Ports */
42 #define CMOS_CONTROL_PORT (PUCHAR)0x70
43 #define CMOS_DATA_PORT (PUCHAR)0x71
44 #define RTC_REGISTER_A 0x0A
45 #define RTC_REGISTER_B 0x0B
46 #define RTC_REG_A_UIP 0x80
47 #define RTC_REGISTER_CENTURY 0x32
48
49 /* Usage flags */
50 #define IDT_REGISTERED 0x01
51 #define IDT_LATCHED 0x02
52 #define IDT_READ_ONLY 0x04
53 #define IDT_INTERNAL 0x11
54 #define IDT_DEVICE 0x21
55
56 /* Conversion functions */
57 #define BCD_INT(bcd) \
58 (((bcd & 0xF0) >> 4) * 10 + (bcd & 0x0F))
59 #define INT_BCD(int) \
60 (UCHAR)(((int / 10) << 4) + (int % 10))
61
62 //
63 // BIOS Interrupts
64 //
65 #define VIDEO_SERVICES 0x10
66
67 //
68 // Operations for INT 10h (in AH)
69 //
70 #define SET_VIDEO_MODE 0x00
71
72 //
73 // Video Modes for INT10h AH=00 (in AL)
74 //
75 #define GRAPHICS_MODE_12 0x12 /* 80x30 8x16 640x480 16/256K */
76
77 //
78 // Commonly stated as being 1.19318MHz
79 //
80 // See ISA System Architecture 3rd Edition (Tom Shanley, Don Anderson, John Swindle)
81 // P. 471
82 //
83 // However, the true value is closer to 1.19318181[...]81MHz since this is 1/3rd
84 // of the NTSC color subcarrier frequency which runs at 3.57954545[...]45MHz.
85 //
86 // Note that Windows uses 1.193167MHz which seems to have no basis. However, if
87 // one takes the NTSC color subcarrier frequency as being 3.579545 (trimming the
88 // infinite series) and divides it by three, one obtains 1.19318167.
89 //
90 // It may be that the original NT HAL source code introduced a typo and turned
91 // 119318167 into 1193167 by ommitting the "18". This is very plausible as the
92 // number is quite long.
93 //
94 #define PIT_FREQUENCY 1193182
95
96 //
97 // These ports are controlled by the i8254 Programmable Interrupt Timer (PIT)
98 //
99 #define TIMER_CHANNEL0_DATA_PORT 0x40
100 #define TIMER_CHANNEL1_DATA_PORT 0x41
101 #define TIMER_CHANNEL2_DATA_PORT 0x42
102 #define TIMER_CONTROL_PORT 0x43
103
104 //
105 // Mode 0 - Interrupt On Terminal Count
106 // Mode 1 - Hardware Re-triggerable One-Shot
107 // Mode 2 - Rate Generator
108 // Mode 3 - Square Wave Generator
109 // Mode 4 - Software Triggered Strobe
110 // Mode 5 - Hardware Triggered Strobe
111 //
112 typedef enum _TIMER_OPERATING_MODES
113 {
114 PitOperatingMode0,
115 PitOperatingMode1,
116 PitOperatingMode2,
117 PitOperatingMode3,
118 PitOperatingMode4,
119 PitOperatingMode5,
120 PitOperatingMode2Reserved,
121 PitOperatingMode5Reserved
122 } TIMER_OPERATING_MODES;
123
124 typedef enum _TIMER_ACCESS_MODES
125 {
126 PitAccessModeCounterLatch,
127 PitAccessModeLow,
128 PitAccessModeHigh,
129 PitAccessModeLowHigh
130 } TIMER_ACCESS_MODES;
131
132 typedef enum _TIMER_CHANNELS
133 {
134 PitChannel0,
135 PitChannel1,
136 PitChannel2,
137 PitReadBack
138 } TIMER_CHANNELS;
139
140 typedef union _TIMER_CONTROL_PORT_REGISTER
141 {
142 struct
143 {
144 UCHAR BcdMode:1;
145 TIMER_OPERATING_MODES OperatingMode:3;
146 TIMER_ACCESS_MODES AccessMode:2;
147 TIMER_CHANNELS Channel:2;
148 };
149 UCHAR Bits;
150 } TIMER_CONTROL_PORT_REGISTER, *PTIMER_CONTROL_PORT_REGISTER;
151
152 //
153 // See ISA System Architecture 3rd Edition (Tom Shanley, Don Anderson, John Swindle)
154 // P. 400
155 //
156 // This port is controled by the i8255 Programmable Peripheral Interface (PPI)
157 //
158 #define SYSTEM_CONTROL_PORT_A 0x92
159 #define SYSTEM_CONTROL_PORT_B 0x61
160 typedef union _SYSTEM_CONTROL_PORT_B_REGISTER
161 {
162 struct
163 {
164 UCHAR Timer2GateToSpeaker:1;
165 UCHAR SpeakerDataEnable:1;
166 UCHAR ParityCheckEnable:1;
167 UCHAR ChannelCheckEnable:1;
168 UCHAR RefreshRequest:1;
169 UCHAR Timer2Output:1;
170 UCHAR ChannelCheck:1;
171 UCHAR ParityCheck:1;
172 };
173 UCHAR Bits;
174 } SYSTEM_CONTROL_PORT_B_REGISTER, *PSYSTEM_CONTROL_PORT_B_REGISTER;
175
176 //
177 // See ISA System Architecture 3rd Edition (Tom Shanley, Don Anderson, John Swindle)
178 // P. 396, 397
179 //
180 // These ports are controlled by the i8259 Programmable Interrupt Controller (PIC)
181 //
182 #define PIC1_CONTROL_PORT 0x20
183 #define PIC1_DATA_PORT 0x21
184 #define PIC2_CONTROL_PORT 0xA0
185 #define PIC2_DATA_PORT 0xA1
186
187 //
188 // Definitions for ICW/OCW Bits
189 //
190 typedef enum _I8259_ICW1_OPERATING_MODE
191 {
192 Cascade,
193 Single
194 } I8259_ICW1_OPERATING_MODE;
195
196 typedef enum _I8259_ICW1_INTERRUPT_MODE
197 {
198 EdgeTriggered,
199 LevelTriggered
200 } I8259_ICW1_INTERRUPT_MODE;
201
202 typedef enum _I8259_ICW1_INTERVAL
203 {
204 Interval8,
205 Interval4
206 } I8259_ICW1_INTERVAL;
207
208 typedef enum _I8259_ICW4_SYSTEM_MODE
209 {
210 Mcs8085Mode,
211 New8086Mode
212 } I8259_ICW4_SYSTEM_MODE;
213
214 typedef enum _I8259_ICW4_EOI_MODE
215 {
216 NormalEoi,
217 AutomaticEoi
218 } I8259_ICW4_EOI_MODE;
219
220 typedef enum _I8259_ICW4_BUFFERED_MODE
221 {
222 NonBuffered,
223 NonBuffered2,
224 BufferedSlave,
225 BufferedMaster
226 } I8259_ICW4_BUFFERED_MODE;
227
228 typedef enum _I8259_READ_REQUEST
229 {
230 InvalidRequest,
231 InvalidRequest2,
232 ReadIdr,
233 ReadIsr
234 } I8259_READ_REQUEST;
235
236 typedef enum _I8259_EOI_MODE
237 {
238 RotateAutoEoiClear,
239 NonSpecificEoi,
240 InvalidEoiMode,
241 SpecificEoi,
242 RotateAutoEoiSet,
243 RotateNonSpecific,
244 SetPriority,
245 RotateSpecific
246 } I8259_EOI_MODE;
247
248 //
249 // Definitions for ICW Registers
250 //
251 typedef union _I8259_ICW1
252 {
253 struct
254 {
255 UCHAR NeedIcw4:1;
256 I8259_ICW1_OPERATING_MODE OperatingMode:1;
257 I8259_ICW1_INTERVAL Interval:1;
258 I8259_ICW1_INTERRUPT_MODE InterruptMode:1;
259 UCHAR Init:1;
260 UCHAR InterruptVectorAddress:3;
261 };
262 UCHAR Bits;
263 } I8259_ICW1, *PI8259_ICW1;
264
265 typedef union _I8259_ICW2
266 {
267 struct
268 {
269 UCHAR Sbz:3;
270 UCHAR InterruptVector:5;
271 };
272 UCHAR Bits;
273 } I8259_ICW2, *PI8259_ICW2;
274
275 typedef union _I8259_ICW3
276 {
277 union
278 {
279 struct
280 {
281 UCHAR SlaveIrq0:1;
282 UCHAR SlaveIrq1:1;
283 UCHAR SlaveIrq2:1;
284 UCHAR SlaveIrq3:1;
285 UCHAR SlaveIrq4:1;
286 UCHAR SlaveIrq5:1;
287 UCHAR SlaveIrq6:1;
288 UCHAR SlaveIrq7:1;
289 };
290 struct
291 {
292 UCHAR SlaveId:3;
293 UCHAR Reserved:5;
294 };
295 };
296 UCHAR Bits;
297 } I8259_ICW3, *PI8259_ICW3;
298
299 typedef union _I8259_ICW4
300 {
301 struct
302 {
303 I8259_ICW4_SYSTEM_MODE SystemMode:1;
304 I8259_ICW4_EOI_MODE EoiMode:1;
305 I8259_ICW4_BUFFERED_MODE BufferedMode:2;
306 UCHAR SpecialFullyNestedMode:1;
307 UCHAR Reserved:3;
308 };
309 UCHAR Bits;
310 } I8259_ICW4, *PI8259_ICW4;
311
312 typedef union _I8259_OCW2
313 {
314 struct
315 {
316 UCHAR IrqNumber:3;
317 UCHAR Sbz:2;
318 I8259_EOI_MODE EoiMode:3;
319 };
320 UCHAR Bits;
321 } I8259_OCW2, *PI8259_OCW2;
322
323 typedef union _I8259_OCW3
324 {
325 struct
326 {
327 I8259_READ_REQUEST ReadRequest:2;
328 UCHAR PollCommand:1;
329 UCHAR Sbo:1;
330 UCHAR Sbz:1;
331 UCHAR SpecialMaskMode:2;
332 UCHAR Reserved:1;
333 };
334 UCHAR Bits;
335 } I8259_OCW3, *PI8259_OCW3;
336
337 typedef union _I8259_ISR
338 {
339 union
340 {
341 struct
342 {
343 UCHAR Irq0:1;
344 UCHAR Irq1:1;
345 UCHAR Irq2:1;
346 UCHAR Irq3:1;
347 UCHAR Irq4:1;
348 UCHAR Irq5:1;
349 UCHAR Irq6:1;
350 UCHAR Irq7:1;
351 };
352 };
353 UCHAR Bits;
354 } I8259_ISR, *PI8259_ISR;
355
356 typedef I8259_ISR I8259_IDR, *PI8259_IDR;
357
358 //
359 // See EISA System Architecture 2nd Edition (Tom Shanley, Don Anderson, John Swindle)
360 // P. 34, 35
361 //
362 // These ports are controlled by the i8259A Programmable Interrupt Controller (PIC)
363 //
364 #define EISA_ELCR_MASTER 0x4D0
365 #define EISA_ELCR_SLAVE 0x4D1
366
367 typedef union _EISA_ELCR
368 {
369 struct
370 {
371 struct
372 {
373 UCHAR Irq0Level:1;
374 UCHAR Irq1Level:1;
375 UCHAR Irq2Level:1;
376 UCHAR Irq3Level:1;
377 UCHAR Irq4Level:1;
378 UCHAR Irq5Level:1;
379 UCHAR Irq6Level:1;
380 UCHAR Irq7Level:1;
381 } Master;
382 struct
383 {
384 UCHAR Irq8Level:1;
385 UCHAR Irq9Level:1;
386 UCHAR Irq10Level:1;
387 UCHAR Irq11Level:1;
388 UCHAR Irq12Level:1;
389 UCHAR Irq13Level:1;
390 UCHAR Irq14Level:1;
391 UCHAR Irq15Level:1;
392 } Slave;
393 };
394 USHORT Bits;
395 } EISA_ELCR, *PEISA_ELCR;
396
397 typedef struct _PIC_MASK
398 {
399 union
400 {
401 struct
402 {
403 UCHAR Master;
404 UCHAR Slave;
405 };
406 USHORT Both;
407 };
408 } PIC_MASK, *PPIC_MASK;
409
410 typedef
411 BOOLEAN
412 __attribute__((regparm(3)))
413 (*PHAL_DISMISS_INTERRUPT)(
414 IN KIRQL Irql,
415 IN ULONG Irq,
416 OUT PKIRQL OldIrql
417 );
418
419 BOOLEAN
420 __attribute__((regparm(3)))
421 HalpDismissIrqGeneric(
422 IN KIRQL Irql,
423 IN ULONG Irq,
424 OUT PKIRQL OldIrql
425 );
426
427 BOOLEAN
428 __attribute__((regparm(3)))
429 HalpDismissIrq15(
430 IN KIRQL Irql,
431 IN ULONG Irq,
432 OUT PKIRQL OldIrql
433 );
434
435 BOOLEAN
436 __attribute__((regparm(3)))
437 HalpDismissIrq13(
438 IN KIRQL Irql,
439 IN ULONG Irq,
440 OUT PKIRQL OldIrql
441 );
442
443 BOOLEAN
444 __attribute__((regparm(3)))
445 HalpDismissIrq07(
446 IN KIRQL Irql,
447 IN ULONG Irq,
448 OUT PKIRQL OldIrql
449 );
450
451 BOOLEAN
452 __attribute__((regparm(3)))
453 HalpDismissIrqLevel(
454 IN KIRQL Irql,
455 IN ULONG Irq,
456 OUT PKIRQL OldIrql
457 );
458
459 BOOLEAN
460 __attribute__((regparm(3)))
461 HalpDismissIrq15Level(
462 IN KIRQL Irql,
463 IN ULONG Irq,
464 OUT PKIRQL OldIrql
465 );
466
467 BOOLEAN
468 __attribute__((regparm(3)))
469 HalpDismissIrq13Level(
470 IN KIRQL Irql,
471 IN ULONG Irq,
472 OUT PKIRQL OldIrql
473 );
474
475 BOOLEAN
476 __attribute__((regparm(3)))
477 HalpDismissIrq07Level(
478 IN KIRQL Irql,
479 IN ULONG Irq,
480 OUT PKIRQL OldIrql
481 );
482
483 VOID
484 HalpHardwareInterruptLevel(
485 VOID
486 );
487
488 //
489 // Hack Flags
490 //
491 #define HALP_REVISION_FROM_HACK_FLAGS(x) ((x) >> 24)
492 #define HALP_REVISION_HACK_FLAGS(x) ((x) >> 12)
493 #define HALP_HACK_FLAGS(x) ((x) & 0xFFF)
494
495 //
496 // Feature flags
497 //
498 #define HALP_CARD_FEATURE_FULL_DECODE 0x0001
499
500 //
501 // Match Flags
502 //
503 #define HALP_CHECK_CARD_REVISION_ID 0x10000
504 #define HALP_CHECK_CARD_SUBVENDOR_ID 0x20000
505 #define HALP_CHECK_CARD_SUBSYSTEM_ID 0x40000
506
507 //
508 // Mm PTE/PDE to Hal PTE/PDE
509 //
510 #define HalAddressToPde(x) (PHARDWARE_PTE)MiAddressToPde(x)
511 #define HalAddressToPte(x) (PHARDWARE_PTE)MiAddressToPte(x)
512
513 typedef struct _IDTUsageFlags
514 {
515 UCHAR Flags;
516 } IDTUsageFlags;
517
518 typedef struct
519 {
520 KIRQL Irql;
521 UCHAR BusReleativeVector;
522 } IDTUsage;
523
524 typedef struct _HalAddressUsage
525 {
526 struct _HalAddressUsage *Next;
527 CM_RESOURCE_TYPE Type;
528 UCHAR Flags;
529 struct
530 {
531 ULONG Start;
532 ULONG Length;
533 } Element[];
534 } ADDRESS_USAGE, *PADDRESS_USAGE;
535
536 /* adapter.c */
537 PADAPTER_OBJECT NTAPI HalpAllocateAdapterEx(ULONG NumberOfMapRegisters,BOOLEAN IsMaster, BOOLEAN Dma32BitAddresses);
538
539 /* sysinfo.c */
540 VOID
541 NTAPI
542 HalpRegisterVector(IN UCHAR Flags,
543 IN ULONG BusVector,
544 IN ULONG SystemVector,
545 IN KIRQL Irql);
546
547 VOID
548 NTAPI
549 HalpEnableInterruptHandler(IN UCHAR Flags,
550 IN ULONG BusVector,
551 IN ULONG SystemVector,
552 IN KIRQL Irql,
553 IN PVOID Handler,
554 IN KINTERRUPT_MODE Mode);
555
556 /* pic.c */
557 VOID NTAPI HalpInitializePICs(IN BOOLEAN EnableInterrupts);
558 VOID HalpApcInterrupt(VOID);
559 VOID HalpDispatchInterrupt(VOID);
560 VOID HalpDispatchInterrupt2(VOID);
561 VOID FASTCALL DECLSPEC_NORETURN HalpApcInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame);
562 VOID FASTCALL DECLSPEC_NORETURN HalpDispatchInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame);
563
564 /* timer.c */
565 VOID NTAPI HalpInitializeClock(VOID);
566 VOID HalpClockInterrupt(VOID);
567 VOID HalpProfileInterrupt(VOID);
568
569 VOID
570 NTAPI
571 HalpCalibrateStallExecution(VOID);
572
573 /* pci.c */
574 VOID HalpInitPciBus (VOID);
575
576 /* dma.c */
577 VOID HalpInitDma (VOID);
578
579 /* Non-generic initialization */
580 VOID HalpInitPhase0 (PLOADER_PARAMETER_BLOCK LoaderBlock);
581 VOID HalpInitPhase1(VOID);
582
583 VOID
584 NTAPI
585 HalpFlushTLB(VOID);
586
587 //
588 // KD Support
589 //
590 VOID
591 NTAPI
592 HalpCheckPowerButton(
593 VOID
594 );
595
596 VOID
597 NTAPI
598 HalpRegisterKdSupportFunctions(
599 VOID
600 );
601
602 NTSTATUS
603 NTAPI
604 HalpSetupPciDeviceForDebugging(
605 IN PVOID LoaderBlock,
606 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
607 );
608
609 NTSTATUS
610 NTAPI
611 HalpReleasePciDeviceForDebugging(
612 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
613 );
614
615 //
616 // Memory routines
617 //
618 PVOID
619 NTAPI
620 HalpMapPhysicalMemory64(
621 IN PHYSICAL_ADDRESS PhysicalAddress,
622 IN ULONG NumberPage
623 );
624
625 VOID
626 NTAPI
627 HalpUnmapVirtualAddress(
628 IN PVOID VirtualAddress,
629 IN ULONG NumberPages
630 );
631
632 /* sysinfo.c */
633 NTSTATUS
634 NTAPI
635 HaliQuerySystemInformation(
636 IN HAL_QUERY_INFORMATION_CLASS InformationClass,
637 IN ULONG BufferSize,
638 IN OUT PVOID Buffer,
639 OUT PULONG ReturnedLength
640 );
641
642 NTSTATUS
643 NTAPI
644 HaliSetSystemInformation(
645 IN HAL_SET_INFORMATION_CLASS InformationClass,
646 IN ULONG BufferSize,
647 IN OUT PVOID Buffer
648 );
649
650 //
651 // BIOS Routines
652 //
653 BOOLEAN
654 NTAPI
655 HalpBiosDisplayReset(
656 VOID
657 );
658
659 VOID
660 FASTCALL
661 HalpExitToV86(
662 PKTRAP_FRAME TrapFrame
663 );
664
665 VOID
666 DECLSPEC_NORETURN
667 HalpRealModeStart(
668 VOID
669 );
670
671 //
672 // Processor Halt Routine
673 //
674 VOID
675 NTAPI
676 HaliHaltSystem(
677 VOID
678 );
679
680 //
681 // CMOS initialization
682 //
683 VOID
684 NTAPI
685 HalpInitializeCmos(
686 VOID
687 );
688
689 //
690 // Spinlock for protecting CMOS access
691 //
692 VOID
693 NTAPI
694 HalpAcquireSystemHardwareSpinLock(
695 VOID
696 );
697
698 VOID
699 NTAPI
700 HalpReleaseCmosSpinLock(
701 VOID
702 );
703
704 ULONG
705 NTAPI
706 HalpAllocPhysicalMemory(
707 IN PLOADER_PARAMETER_BLOCK LoaderBlock,
708 IN ULONG MaxAddress,
709 IN ULONG PageCount,
710 IN BOOLEAN Aligned
711 );
712
713 PVOID
714 NTAPI
715 HalpMapPhysicalMemory64(
716 IN PHYSICAL_ADDRESS PhysicalAddress,
717 IN ULONG PageCount
718 );
719
720 NTSTATUS
721 NTAPI
722 HalpOpenRegistryKey(
723 IN PHANDLE KeyHandle,
724 IN HANDLE RootKey,
725 IN PUNICODE_STRING KeyName,
726 IN ACCESS_MASK DesiredAccess,
727 IN BOOLEAN Create
728 );
729
730 VOID
731 NTAPI
732 HalpGetNMICrashFlag(
733 VOID
734 );
735
736 BOOLEAN
737 NTAPI
738 HalpGetDebugPortTable(
739 VOID
740 );
741
742 VOID
743 NTAPI
744 HalpReportSerialNumber(
745 VOID
746 );
747
748 NTSTATUS
749 NTAPI
750 HalpMarkAcpiHal(
751 VOID
752 );
753
754 VOID
755 NTAPI
756 HalpBuildAddressMap(
757 VOID
758 );
759
760 VOID
761 NTAPI
762 HalpReportResourceUsage(
763 IN PUNICODE_STRING HalName,
764 IN INTERFACE_TYPE InterfaceType
765 );
766
767 ULONG
768 NTAPI
769 HalpIs16BitPortDecodeSupported(
770 VOID
771 );
772
773 NTSTATUS
774 NTAPI
775 HalpQueryAcpiResourceRequirements(
776 OUT PIO_RESOURCE_REQUIREMENTS_LIST *Requirements
777 );
778
779 VOID
780 FASTCALL
781 KeUpdateSystemTime(
782 IN PKTRAP_FRAME TrapFrame,
783 IN ULONG Increment,
784 IN KIRQL OldIrql
785 );
786
787 VOID
788 NTAPI
789 HalpInitBusHandlers(
790 VOID
791 );
792
793 #ifdef _M_AMD64
794 #define KfLowerIrql KeLowerIrql
795 #ifndef CONFIG_SMP
796 /* On UP builds, spinlocks don't exist at IRQL >= DISPATCH */
797 #define KiAcquireSpinLock(SpinLock)
798 #define KiReleaseSpinLock(SpinLock)
799 #define KfAcquireSpinLock(SpinLock) KfRaiseIrql(DISPATCH_LEVEL);
800 #define KfReleaseSpinLock(SpinLock, OldIrql) KeLowerIrql(OldIrql);
801 #endif // !CONFIG_SMP
802 #endif // _M_AMD64
803
804 extern BOOLEAN HalpNMIInProgress;
805
806 extern ADDRESS_USAGE HalpDefaultIoSpace;
807
808 extern KSPIN_LOCK HalpSystemHardwareLock;
809
810 extern PADDRESS_USAGE HalpAddressUsageList;
811
812 extern LARGE_INTEGER HalpPerfCounter;
813
814 extern KAFFINITY HalpActiveProcessors;
815
816 extern BOOLEAN HalDisableFirmwareMapper;
817 extern PWCHAR HalHardwareIdString;
818 extern PWCHAR HalName;
819
820 extern KAFFINITY HalpDefaultInterruptAffinity;
821
822 extern IDTUsageFlags HalpIDTUsageFlags[MAXIMUM_IDTVECTOR];
823