35#ifndef _MINIOS_ARCH_X86_64_APIC_H_
36#define _MINIOS_ARCH_X86_64_APIC_H_
44#define LAPIC_EOI 0x0B0
45#define LAPIC_SVR 0x0F0
46#define LAPIC_ICR_LOW 0x300
47#define LAPIC_ICR_HIGH 0x310
48#define LAPIC_TIMER_LVT 0x320
49#define LAPIC_TIMER_ICR 0x380
50#define LAPIC_TIMER_CCR 0x390
51#define LAPIC_TIMER_DCR 0x3E0
56#define LAPIC_SVR_ENABLE (1 << 8)
57#define LAPIC_SPURIOUS_VECTOR 0xFF
62#define IA32_APIC_BASE_MSR 0x1B
63#define IA32_APIC_BASE_ENABLE (1 << 11)
140#define IOAPIC_BASE 0xFEC00000UL
142#define IOAPIC_REGSEL 0x00
143#define IOAPIC_IOWIN 0x10
145#define IOAPIC_ID 0x00
146#define IOAPIC_VER 0x01
147#define IOAPIC_REDTBL_LO(n) (0x10 + (n)*2)
148#define IOAPIC_REDTBL_HI(n) (0x10 + (n)*2 + 1)
150#define IOAPIC_RTE_MASKED (1 << 16)
151#define IOAPIC_RTE_LEVEL (1 << 15)
152#define IOAPIC_RTE_LOPOL (1 << 13)
154#define IRQ_VECTOR_BASE 32
183#define LAPIC_TIMER_PERIODIC (1 << 17)
184#define LAPIC_TIMER_ONESHOT (0 << 17)
185#define LAPIC_TIMER_MASKED (1 << 16)
186#define LAPIC_TIMER_VECTOR 48
187#define SCHEDULER_KICK_VECTOR 50
188#define TLB_SHOOTDOWN_VECTOR 51
189#define PANIC_HALT_VECTOR 52
190#define LAPIC_TIMER_DIVBY_16 0x3
volatile uint64_t lapic_tick_count
Definition lapic.c:126
static void lapic_eoi(void)
Signal End-of-Interrupt to the local APIC.
Definition apic.h:111
void ioapic_init(void)
Map and initialise the I/O APIC.
Definition ioapic.c:67
#define LAPIC_EOI
Definition apic.h:44
static uint32_t lapic_read(uint32_t reg)
Read a 32-bit value from a LAPIC MMIO register.
Definition apic.h:101
void lapic_eoi_asm(void)
Non-inline wrapper for lapic_eoi(), callable from assembly.
Definition lapic.c:118
void lapic_init(void)
Detect, identity-map, and software-enable the local APIC.
Definition lapic.c:54
void lapic_timer_init(void)
Calibrate and start the BSP LAPIC timer.
Definition lapic.c:166
void lapic_send_ipi(uint8_t target_lapic_id, uint8_t vector)
Send a Fixed IPI to a remote CPU.
Definition lapic.c:284
volatile uint32_t * lapic_base
Definition lapic.c:40
static void lapic_write(uint32_t reg, uint32_t val)
Write a 32-bit value to a LAPIC MMIO register.
Definition apic.h:92
uint32_t lapic_bsp_timer_icr
Definition lapic.c:45
void ioapic_unmask_irq(uint8_t irq)
Unmask (enable) an I/O APIC redirection entry.
Definition ioapic.c:62
void lapic_timer_idt_install(void)
Install the IDT entry for LAPIC_TIMER_VECTOR (48).
Definition lapic.c:160
void lapic_timer_init_ap(void)
Start the LAPIC timer on the calling AP.
Definition lapic.c:257
void ioapic_mask_irq(uint8_t irq)
Mask (disable) an I/O APIC redirection entry.
Definition ioapic.c:57
unsigned int uint32_t
Definition types.h:34
unsigned long int uint64_t
Definition types.h:37
unsigned char uint8_t
Definition types.h:28