ASMLINK NORETURN void mpmain(struct cpu *cpu) { long unit = cpu->unit; seginit(unit); idtset(); m_atomwrite((m_atomic_t *)&cpu->flg, CPUSTARTED); mpinitcpu(unit); schedloop(); /* NOTREACHED */ for ( ; ; ) { ; } }
ASMLINK void mpmain(struct m_cpu *cpu) { // gdtinit(); seginit(cpu->id); idtset(); m_xchgl(&cpu->started, 1L); /* TODO: initialise HPET; enable [rerouted] interrupts */ #if (HPET) hpetinit(); apicinitcpu(cpu->id); ioapicinit(cpu->id); tssinit(cpu->id); #endif while (1) { k_waitint(); } }