4 * Check for APIC support and initialize external interrupts to use it.
17 VA apicBase
, ioapicBase
;
19 /* uint64 tval, tval2; */
25 char deviceName
[] = {'l', 'a', 'p', 'i', 'c', 0, 0, 0, 0};
27 if (!CPU_GetFeature(CPU_APIC_ENABLED
)) {
34 rdmsr(APIC_BASE_MSR
, apicBaseReg
);
35 /* VPROBE_TEST(APIC_BASE_MSR, apicBaseReg); */
37 apicBase
= (VA
)(apicBaseReg
& 0x000ffffffffff000);
38 if (apicBase
& (1 << 8)) {
47 MapIORegion((PA
)apicBase
, (PA
)apicBase
+ PAGE_SIZE
, deviceName
);
49 /* init IO APIC (part of chipset) */
50 ioapicBase
= (VA
)0xfec00000; // real address is in APICBASE on chipset