Print this page
patch use-x2apic-feature
patch apic-simplify
patch apic-task-reg-write-dup
@@ -92,11 +92,10 @@
* APIC register ops related data sturctures and functions.
*/
void apic_send_EOI();
void apic_send_directed_EOI(uint32_t irq);
-#define X2APIC_CPUID_BIT 21
#define X2APIC_ENABLE_BIT 10
/*
* Local APIC Implementation
*/
@@ -107,11 +106,11 @@
}
static void
local_apic_write(uint32_t reg, uint64_t value)
{
- apicadr[reg] = (uint32_t)value;
+ LOCAL_APIC_WRITE_REG(reg, (uint32_t)value);
}
static int
get_local_apic_pri(void)
{
@@ -131,11 +130,11 @@
setcr8((ulong_t)(value >> APIC_IPL_SHIFT));
#else
if (apic_have_32bit_cr8)
setcr8((ulong_t)(value >> APIC_IPL_SHIFT));
else
- apicadr[APIC_TASK_REG] = (uint32_t)value;
+ LOCAL_APIC_WRITE_REG(APIC_TASK_REG, (uint32_t)value);
#endif
}
static void
local_apic_write_int_cmd(uint32_t cpu_id, uint32_t cmd1)
@@ -231,19 +230,14 @@
}
int
apic_detect_x2apic(void)
{
- struct cpuid_regs cp;
-
if (x2apic_enable == 0)
return (0);
- cp.cp_eax = 1;
- (void) __cpuid_insn(&cp);
-
- return ((cp.cp_ecx & (0x1 << X2APIC_CPUID_BIT)) ? 1 : 0);
+ return is_x86_feature(x86_featureset, X86FSET_X2APIC);
}
void
apic_enable_x2apic(void)
{