Print this page
patch use-x2apic-feature
patch apic-simplify
patch apic-task-reg-write-dup
*** 92,102 ****
* 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
*/
--- 92,101 ----
*** 107,117 ****
}
static void
local_apic_write(uint32_t reg, uint64_t value)
{
! apicadr[reg] = (uint32_t)value;
}
static int
get_local_apic_pri(void)
{
--- 106,116 ----
}
static void
local_apic_write(uint32_t reg, uint64_t value)
{
! LOCAL_APIC_WRITE_REG(reg, (uint32_t)value);
}
static int
get_local_apic_pri(void)
{
*** 131,141 ****
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;
#endif
}
static void
local_apic_write_int_cmd(uint32_t cpu_id, uint32_t cmd1)
--- 130,140 ----
setcr8((ulong_t)(value >> APIC_IPL_SHIFT));
#else
if (apic_have_32bit_cr8)
setcr8((ulong_t)(value >> APIC_IPL_SHIFT));
else
! 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,249 ****
}
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);
}
void
apic_enable_x2apic(void)
{
--- 230,243 ----
}
int
apic_detect_x2apic(void)
{
if (x2apic_enable == 0)
return (0);
! return is_x86_feature(x86_featureset, X86FSET_X2APIC);
}
void
apic_enable_x2apic(void)
{