Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | /* $Id: system.c,v 1.3 1999/10/19 20:51:52 ralf Exp $ * * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * * system.c: Probe the system type using ARCS prom interface library. * * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com) */ #include <linux/init.h> #include <linux/kernel.h> #include <linux/types.h> #include <linux/string.h> #include <asm/sgi/sgi.h> #include <asm/sgialib.h> #include <asm/bootinfo.h> enum sgi_mach sgimach; struct smatch { char *name; int type; }; static struct smatch sgi_cputable[] = { { "MIPS-R2000", CPU_R2000 }, { "MIPS-R3000", CPU_R3000 }, { "MIPS-R3000A", CPU_R3000A }, { "MIPS-R4000", CPU_R4000SC }, { "MIPS-R4400", CPU_R4400SC }, { "MIPS-R4600", CPU_R4600 }, { "MIPS-R8000", CPU_R8000 }, { "MIPS-R5000", CPU_R5000 }, { "MIPS-R5000A", CPU_R5000A } }; #define NUM_CPUS 9 /* for now */ static int __init string_to_cpu(char *s) { int i; for(i = 0; i < NUM_CPUS; i++) { if(!strcmp(s, sgi_cputable[i].name)) return sgi_cputable[i].type; } prom_printf("\nYeee, could not determine MIPS cpu type <%s>\n", s); prom_printf("press a key to reboot\n"); prom_getchar(); ArcEnterInteractiveMode(); return 0; } /* * We' call this early before loadmmu(). If we do the other way around * the firmware will crash and burn. */ void __init sgi_sysinit(void) { pcomponent *p, *toplev, *cpup = 0; int cputype = -1; /* The root component tells us what machine architecture we * have here. */ p = ArcGetChild(PROM_NULL_COMPONENT); /* Now scan for cpu(s). */ toplev = p = ArcGetChild(p); while(p) { int ncpus = 0; if(p->type == Cpu) { if(++ncpus > 1) { prom_printf("\nYeee, SGI MP not ready yet\n"); prom_printf("press a key to reboot\n"); prom_getchar(); ArcEnterInteractiveMode(); } printk("CPU: %s ", p->iname); cpup = p; cputype = string_to_cpu(cpup->iname); } p = ArcGetPeer(p); } if(cputype == -1) { prom_printf("\nYeee, could not find cpu ARCS component\n"); prom_printf("press a key to reboot\n"); prom_getchar(); ArcEnterInteractiveMode(); } p = ArcGetChild(cpup); while(p) { switch(p->class) { case processor: switch(p->type) { case Fpu: printk("FPU<%s> ", p->iname); break; default: break; }; break; case cache: switch(p->type) { case picache: printk("ICACHE "); break; case pdcache: printk("DCACHE "); break; case sccache: printk("SCACHE "); break; default: break; }; break; default: break; }; p = ArcGetPeer(p); } printk("\n"); } |