linux/arch/mips/fw/arc/identify.c
<<
>>
Prefs
   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}
 117