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