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) {