Linux Audio

Check our new training course

Loading...
  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
 23struct smatch {
 24	char *arcname;
 25	char *liname;
 26	int flags;
 27};
 28
 29static struct smatch mach_table[] = {
 30	{
 31		.arcname	= "SGI-IP22",
 32		.liname		= "SGI Indy",
 33		.flags		= PROM_FLAG_ARCS,
 34	}, {
 35		.arcname	= "SGI-IP27",
 36		.liname		= "SGI Origin",
 37		.flags		= PROM_FLAG_ARCS,
 38	}, {
 39		.arcname	= "SGI-IP28",
 40		.liname		= "SGI IP28",
 41		.flags		= PROM_FLAG_ARCS,
 42	}, {
 43		.arcname	= "SGI-IP30",
 44		.liname		= "SGI Octane",
 45		.flags		= PROM_FLAG_ARCS,
 46	}, {
 47		.arcname	= "SGI-IP32",
 48		.liname		= "SGI O2",
 49		.flags		= PROM_FLAG_ARCS,
 50	}, {
 51		.arcname	= "Microsoft-Jazz",
 52		.liname		= "Jazz MIPS_Magnum_4000",
 53		.flags		= 0,
 54	}, {
 55		.arcname	= "PICA-61",
 56		.liname		= "Jazz Acer_PICA_61",
 57		.flags		= 0,
 58	}, {
 59		.arcname	= "RM200PCI",
 60		.liname		= "SNI RM200_PCI",
 61		.flags		= PROM_FLAG_DONT_FREE_TEMP,
 62	}, {
 63		.arcname	= "RM200PCI-R5K",
 64		.liname		= "SNI RM200_PCI-R5K",
 65		.flags		= PROM_FLAG_DONT_FREE_TEMP,
 66	}
 67};
 68
 69int prom_flags;
 70
 71static struct smatch * __init string_to_mach(const char *s)
 72{
 73	int i;
 74
 75	for (i = 0; i < ARRAY_SIZE(mach_table); i++) {
 76		if (!strcmp(s, mach_table[i].arcname))
 77			return &mach_table[i];
 78	}
 79
 80	panic("Yeee, could not determine architecture type <%s>", s);
 81}
 82
 83char *system_type;
 84
 85const char *get_system_type(void)
 86{
 87	return system_type;
 88}
 89
 90void __init prom_identify_arch(void)
 91{
 92	pcomponent *p;
 93	struct smatch *mach;
 94	const char *iname;
 95
 96	/*
 97	 * The root component tells us what machine architecture we have here.
 98	 */
 99	p = ArcGetChild(PROM_NULL_COMPONENT);
100	if (p == NULL) {
101#ifdef CONFIG_SGI_IP27
102		/* IP27 PROM misbehaves, seems to not implement ARC
103		   GetChild().  So we just assume it's an IP27.  */
104		iname = "SGI-IP27";
105#else
106		iname = "Unknown";
107#endif
108	} else
109		iname = (char *) (long) p->iname;
110
111	printk("ARCH: %s\n", iname);
112	mach = string_to_mach(iname);
113	system_type = mach->liname;
114
115	prom_flags = mach->flags;
116}