LAPIC
include/acpi/lapic.h View source View on GitHubFunctions
Section titled “Functions”lapic_reg_to_x2apic_msr
Section titled “lapic_reg_to_x2apic_msr”uint32_t lapic_reg_to_x2apic_msr(uint32_t reg) source lapic_write
Section titled “lapic_write”void lapic_write(uint32_t reg, uint32_t val) source lapic_read
Section titled “lapic_read”uint32_t lapic_read(uint32_t reg) source lapic_init
Section titled “lapic_init”void lapic_init(void) source x2apic_init
Section titled “x2apic_init”void x2apic_init(void) source lapic_get_id
Section titled “lapic_get_id”uint64_t lapic_get_id(void) source x2apic_get_id
Section titled “x2apic_get_id”uint32_t x2apic_get_id(void) source lapic_this_id
Section titled “lapic_this_id”uint32_t lapic_this_id(void) source lapic_dest_8bit
Section titled “lapic_dest_8bit”uint8_t lapic_dest_8bit(uint32_t apic_id) source IOAPIC entries and MSI addresses have 8 destination bits, larger ones need x2apic
lapic_get_chip
Section titled “lapic_get_chip”lapic_icr_write
Section titled “lapic_icr_write”void lapic_icr_write(uint32_t dest, uint32_t lo) source lapic_icr_try_write
Section titled “lapic_icr_try_write”bool lapic_icr_try_write(uint32_t dest, uint32_t lo) source Same as above, just the try version
lapic_icr_nmi_save
Section titled “lapic_icr_nmi_save”uint32_t lapic_icr_nmi_save(void) source NMIs happening between IPI sends can retarget the IPI
lapic_icr_nmi_restore
Section titled “lapic_icr_nmi_restore”void lapic_icr_nmi_restore(uint32_t high) source Variables
Section titled “Variables”x2apic_enabled
Section titled “x2apic_enabled”extern bool x2apic_enabled source Macros
Section titled “Macros”IA32_APIC_BASE
Section titled “IA32_APIC_BASE”#define IA32_APIC_BASE 0x1B source IA32_APIC_BASE_MSR
Section titled “IA32_APIC_BASE_MSR”#define IA32_APIC_BASE_MSR 0x1B source IA32_APIC_BASE_MASK
Section titled “IA32_APIC_BASE_MASK”#define IA32_APIC_BASE_MASK 0xFFFFF000UL source IA32_APIC_BASE_ENABLE
Section titled “IA32_APIC_BASE_ENABLE”APIC_X2APIC_ENABLE
Section titled “APIC_X2APIC_ENABLE”LAPIC_REG_ID
Section titled “LAPIC_REG_ID”#define LAPIC_REG_ID 0x020 source LAPIC_REG_EOI
Section titled “LAPIC_REG_EOI”#define LAPIC_REG_EOI 0x0B0 source LAPIC_REG_SVR
Section titled “LAPIC_REG_SVR”#define LAPIC_REG_SVR 0x0F0 source LAPIC_REG_LVT_TIMER
Section titled “LAPIC_REG_LVT_TIMER”#define LAPIC_REG_LVT_TIMER 0x320 source LAPIC_REG_TIMER_INIT
Section titled “LAPIC_REG_TIMER_INIT”#define LAPIC_REG_TIMER_INIT 0x380 source LAPIC_REG_TIMER_CUR
Section titled “LAPIC_REG_TIMER_CUR”#define LAPIC_REG_TIMER_CUR 0x390 source LAPIC_REG_TIMER_DIV
Section titled “LAPIC_REG_TIMER_DIV”#define LAPIC_REG_TIMER_DIV 0x3E0 source LAPIC_LVT_MASK
Section titled “LAPIC_LVT_MASK”LAPIC_ENABLE
Section titled “LAPIC_ENABLE”#define LAPIC_ENABLE 0x100 source LAPIC_SPURIOUS_REGISTER
Section titled “LAPIC_SPURIOUS_REGISTER”#define LAPIC_SPURIOUS_REGISTER 0xF0 source TIMER_MODE_PERIODIC
Section titled “TIMER_MODE_PERIODIC”TIMER_MODE_ONESHOT
Section titled “TIMER_MODE_ONESHOT”#define TIMER_MODE_ONESHOT (0 << 17) source LAPIC_ICR_LOW
Section titled “LAPIC_ICR_LOW”#define LAPIC_ICR_LOW 0x300 source LAPIC_ICR_HIGH
Section titled “LAPIC_ICR_HIGH”#define LAPIC_ICR_HIGH 0x310 source LAPIC_DELIVERY_FIXED
Section titled “LAPIC_DELIVERY_FIXED”#define LAPIC_DELIVERY_FIXED (0x0 << 8) source LAPIC_DELIVERY_LOWEST
Section titled “LAPIC_DELIVERY_LOWEST”#define LAPIC_DELIVERY_LOWEST (0x1 << 8) source LAPIC_DELIVERY_SMI
Section titled “LAPIC_DELIVERY_SMI”#define LAPIC_DELIVERY_SMI (0x2 << 8) source LAPIC_DELIVERY_NMI
Section titled “LAPIC_DELIVERY_NMI”#define LAPIC_DELIVERY_NMI (0x4 << 8) source LAPIC_DELIVERY_INIT
Section titled “LAPIC_DELIVERY_INIT”#define LAPIC_DELIVERY_INIT (0x5 << 8) source LAPIC_DELIVERY_STARTUP
Section titled “LAPIC_DELIVERY_STARTUP”#define LAPIC_DELIVERY_STARTUP (0x6 << 8) source LAPIC_LEVEL_ASSERT
Section titled “LAPIC_LEVEL_ASSERT”LAPIC_TRIGGER_EDGE
Section titled “LAPIC_TRIGGER_EDGE”#define LAPIC_TRIGGER_EDGE (0 << 15) source LAPIC_TRIGGER_LEVEL
Section titled “LAPIC_TRIGGER_LEVEL”LAPIC_IPI_IN_FLIGHT
Section titled “LAPIC_IPI_IN_FLIGHT”LAPIC_DEST_PHYSICAL
Section titled “LAPIC_DEST_PHYSICAL”#define LAPIC_DEST_PHYSICAL (0 << 11) source LAPIC_DEST_LOGICAL
Section titled “LAPIC_DEST_LOGICAL”LAPIC_DEST_SHORTHAND_NONE
Section titled “LAPIC_DEST_SHORTHAND_NONE”#define LAPIC_DEST_SHORTHAND_NONE (0x0 << 18) source LAPIC_DEST_SHORTHAND_SELF
Section titled “LAPIC_DEST_SHORTHAND_SELF”#define LAPIC_DEST_SHORTHAND_SELF (0x1 << 18) source LAPIC_DEST_SHORTHAND_ALL
Section titled “LAPIC_DEST_SHORTHAND_ALL”#define LAPIC_DEST_SHORTHAND_ALL (0x2 << 18) source LAPIC_DEST_SHORTHAND_OTHERS
Section titled “LAPIC_DEST_SHORTHAND_OTHERS”#define LAPIC_DEST_SHORTHAND_OTHERS (0x3 << 18) source LAPIC_DEST_SHIFT
Section titled “LAPIC_DEST_SHIFT”#define LAPIC_DEST_SHIFT 24 source X2APIC_CLUSTER_SHIFT
Section titled “X2APIC_CLUSTER_SHIFT”#define X2APIC_CLUSTER_SHIFT 4 source LDR is read-only and derived from the ID. Cluster (ID[19:4]) in bits 31:16, one-hot ID[3:0] in bits 15:0
X2APIC_CLUSTER_SIZE
Section titled “X2APIC_CLUSTER_SIZE”#define X2APIC_CLUSTER_SIZE BIT(X2APIC_CLUSTER_SHIFT) source X2APIC_CLUSTER_ID_MASK
Section titled “X2APIC_CLUSTER_ID_MASK”#define X2APIC_CLUSTER_ID_MASK 0xFFFF source X2APIC_LDR_CLUSTER_SHIFT
Section titled “X2APIC_LDR_CLUSTER_SHIFT”#define X2APIC_LDR_CLUSTER_SHIFT 16 source IA32_X2APIC_BASE
Section titled “IA32_X2APIC_BASE”#define IA32_X2APIC_BASE 0x800 source IA32_X2APIC_ID
Section titled “IA32_X2APIC_ID”#define IA32_X2APIC_ID (IA32_X2APIC_BASE + 0x02) source IA32_X2APIC_EOI
Section titled “IA32_X2APIC_EOI”#define IA32_X2APIC_EOI (IA32_X2APIC_BASE + 0x0B) source IA32_X2APIC_SVR
Section titled “IA32_X2APIC_SVR”#define IA32_X2APIC_SVR (IA32_X2APIC_BASE + 0x0F) source IA32_X2APIC_ICR
Section titled “IA32_X2APIC_ICR”#define IA32_X2APIC_ICR (IA32_X2APIC_BASE + 0x30) source IA32_X2APIC_LVT_TIMER
Section titled “IA32_X2APIC_LVT_TIMER”#define IA32_X2APIC_LVT_TIMER (IA32_X2APIC_BASE + 0x32) source IA32_X2APIC_TIMER_INIT
Section titled “IA32_X2APIC_TIMER_INIT”#define IA32_X2APIC_TIMER_INIT (IA32_X2APIC_BASE + 0x38) source IA32_X2APIC_TIMER_CUR
Section titled “IA32_X2APIC_TIMER_CUR”#define IA32_X2APIC_TIMER_CUR (IA32_X2APIC_BASE + 0x39) source IA32_X2APIC_TIMER_DIV
Section titled “IA32_X2APIC_TIMER_DIV”#define IA32_X2APIC_TIMER_DIV (IA32_X2APIC_BASE + 0x3E) source