Skip to main content

send_init_sipi

Function send_init_sipi 

Source
fn send_init_sipi(apic_id: u32)
Expand description

Send INIT + SIPI×2 to an AP per Intel SDM Volume 3, Section 10.6.7.1.

The Intel SDM recommends sending SIPI twice (200 µs apart) so that if the first SIPI is missed, the second one still catches the AP. Some platforms (Redox-OS) succeed with a single SIPI, but sending two is more robust and matches Linux/FreeBSD behaviour.

Step 1: INIT level-assert (0xC500) : wait ≥10 ms Step 2: INIT level-de-assert (0x8500) : wait ≥200 µs Step 3: SIPI (0x4608, vector=0x08 → trampoline at 0x8000) : 200 µs Step 4: SIPI again : 200 µs

ICR values (xAPIC format, delivery-mode bit-fields): INIT: delivery=INIT(101), level=1(assert), trigger=1(level) Deassert: delivery=INIT(101), level=0(de-assert), trigger=1(level) SIPI: delivery=STARTUP(110), level=1, vector=0x8