void cpu_init(void) { cpu_data_t *cdp = current_cpu_datap(); timer_call_queue_init(&cdp->rtclock_timer.queue); cdp->rtclock_timer.deadline = EndOfAllTime; cdp->cpu_type = cpuid_cputype(); cdp->cpu_subtype = cpuid_cpusubtype(); i386_activate_cpu(); }
void cpu_init(void) { cpu_data_t *cdp = getCpuDatap(); arm_cpu_info_t *cpu_info_p; if (cdp->cpu_type != CPU_TYPE_ARM) { cdp->cpu_type = CPU_TYPE_ARM; timer_call_queue_init(&cdp->rtclock_timer.queue); cdp->rtclock_timer.deadline = EndOfAllTime; if (cdp == &BootCpuData) { do_cpuid(); do_cacheid(); do_mvfpid(); } else { /* * We initialize non-boot CPUs here; the boot CPU is * dealt with as part of pmap_bootstrap. */ pmap_cpu_data_init(); } /* ARM_SMP: Assuming identical cpu */ do_debugid(); cpu_info_p = cpuid_info(); /* switch based on CPU's reported architecture */ switch (cpu_info_p->arm_info.arm_arch) { case CPU_ARCH_ARMv4T: case CPU_ARCH_ARMv5T: cdp->cpu_subtype = CPU_SUBTYPE_ARM_V4T; break; case CPU_ARCH_ARMv5TE: case CPU_ARCH_ARMv5TEJ: if (cpu_info_p->arm_info.arm_implementor == CPU_VID_INTEL) cdp->cpu_subtype = CPU_SUBTYPE_ARM_XSCALE; else cdp->cpu_subtype = CPU_SUBTYPE_ARM_V5TEJ; break; case CPU_ARCH_ARMv6: cdp->cpu_subtype = CPU_SUBTYPE_ARM_V6; break; case CPU_ARCH_ARMv7: cdp->cpu_subtype = CPU_SUBTYPE_ARM_V7; break; case CPU_ARCH_ARMv7f: cdp->cpu_subtype = CPU_SUBTYPE_ARM_V7F; break; case CPU_ARCH_ARMv7s: cdp->cpu_subtype = CPU_SUBTYPE_ARM_V7S; break; case CPU_ARCH_ARMv7k: cdp->cpu_subtype = CPU_SUBTYPE_ARM_V7K; break; default: cdp->cpu_subtype = CPU_SUBTYPE_ARM_ALL; break; } cdp->cpu_threadtype = CPU_THREADTYPE_NONE; } cdp->cpu_stat.irq_ex_cnt_wake = 0; cdp->cpu_stat.ipi_cnt_wake = 0; cdp->cpu_stat.timer_cnt_wake = 0; cdp->cpu_running = TRUE; cdp->cpu_sleep_token_last = cdp->cpu_sleep_token; cdp->cpu_sleep_token = 0x0UL; }