cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

identify.c (2316B)


      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-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
     65int prom_flags;
     66
     67static 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
     79char *system_type;
     80
     81const char *get_system_type(void)
     82{
     83	return system_type;
     84}
     85
     86static pcomponent * __init ArcGetChild(pcomponent *Current)
     87{
     88	return (pcomponent *) ARC_CALL1(child_component, Current);
     89}
     90
     91void __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}