__initfunc(void smp_boot_cpus(void)) { extern void smp4m_boot_cpus(void); extern void smp4d_boot_cpus(void); if (sparc_cpu_model == sun4m) smp4m_boot_cpus(); else smp4d_boot_cpus(); }
void __init smp_prepare_cpus(unsigned int max_cpus) { extern void __init smp4m_boot_cpus(void); extern void __init smp4d_boot_cpus(void); int i, cpuid, extra; printk("Entering SMP Mode...\n"); extra = 0; for (i = 0; !cpu_find_by_instance(i, NULL, &cpuid); i++) { if (cpuid >= NR_CPUS) extra++; } /* */ if (extra && max_cpus > i - extra) printk("Warning: NR_CPUS is too low to start all cpus\n"); smp_store_cpu_info(boot_cpu_id); switch(sparc_cpu_model) { case sun4: printk("SUN4\n"); BUG(); break; case sun4c: printk("SUN4C\n"); BUG(); break; case sun4m: smp4m_boot_cpus(); break; case sun4d: smp4d_boot_cpus(); break; case sparc_leon: leon_boot_cpus(); break; case sun4e: printk("SUN4E\n"); BUG(); break; case sun4u: printk("SUN4U\n"); BUG(); break; default: printk("UNKNOWN!\n"); BUG(); break; } }