1 /* 2 * This file is subject to the terms and conditions of the GNU General Public 3 * License. See the file "COPYING" in the main directory of this archive 4 * for more details. 5 * 6 * identify.c: identify machine by looking up system identifier 7 * 8 * Copyright (C) 1998 Thomas Bogendoerfer 9 * 10 * This code is based on arch/mips/sgi/kernel/system.c, which is 11 * 12 * Copyright (C) 1996 David S. Miller (davem@davemloft.net) 13 */ 14 #include <linux/bug.h> 15 #include <linux/init.h> 16 #include <linux/kernel.h> 17 #include <linux/types.h> 18 #include <linux/string.h> 19 20 #include <asm/sgialib.h> 21 #include <asm/bootinfo.h> 22 23 struct smatch { 24 char *arcname; 25 char *liname; 26 int flags; 27 }; 28 29 static struct smatch mach_table[] = { 30 { 31 .arcname = "SGI-IP22", 32 .liname = "SGI Indy", 33 .flags = PROM_FLAG_ARCS, 34 }, { 35 .arcname = "SGI-IP28", 36 .liname = "SGI IP28", 37 .flags = PROM_FLAG_ARCS, 38 }, { 39 .arcname = "SGI-IP30", 40 .liname = "SGI Octane", 41 .flags = PROM_FLAG_ARCS, 42 }, { 43 .arcname = "SGI-IP32", 44 .liname = "SGI O2", 45 .flags = PROM_FLAG_ARCS, 46 }, { 47 .arcname = "Microsoft-Jazz", 48 .liname = "Jazz MIPS_Magnum_4000", 49 .flags = 0, 50 }, { 51 .arcname = "PICA-61", 52 .liname = "Jazz Acer_PICA_61", 53 .flags = 0, 54 }, { 55 .arcname = "RM200PCI", 56 .liname = "SNI RM200_PCI", 57 .flags = PROM_FLAG_DONT_FREE_TEMP, 58 }, { 59 .arcname = "RM200PCI-R5K", 60 .liname = "SNI RM200_PCI-R5K", 61 .flags = PROM_FLAG_DONT_FREE_TEMP, 62 } 63 }; 64 65 int prom_flags; 66 67 static struct smatch * __init string_to_mach(const char *s) 68 { 69 int i; 70 71 for (i = 0; i < ARRAY_SIZE(mach_table); i++) { 72 if (!strcmp(s, mach_table[i].arcname)) 73 return &mach_table[i]; 74 } 75 76 panic("Yeee, could not determine architecture type <%s>", s); 77 } 78 79 char *system_type; 80 81 const char *get_system_type(void) 82 { 83 return system_type; 84 } 85 86 static pcomponent * __init ArcGetChild(pcomponent *Current) 87 { 88 return (pcomponent *) ARC_CALL1(child_component, Current); 89 } 90 91 void __init prom_identify_arch(void) 92 { 93 pcomponent *p; 94 struct smatch *mach; 95 const char *iname; 96 97 /* 98 * The root component tells us what machine architecture we have here. 99 */ 100 p = ArcGetChild(PROM_NULL_COMPONENT); 101 if (p == NULL) { 102 iname = "Unknown"; 103 } else 104 iname = (char *) (long) p->iname; 105 106 printk("ARCH: %s\n", iname); 107 mach = string_to_mach(iname); 108 system_type = mach->liname; 109 110 prom_flags = mach->flags; 111 } 112