176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ----------------------------------------------------------------------- *
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   Pportions of this file taken from the dmidecode project
476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   Copyright (C) 2000-2002 Alan Cox <alan@redhat.com>
676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   Copyright (C) 2002-2008 Jean Delvare <khali@linux-fr.org>
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   This program is free software; you can redistribute it and/or modify
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   it under the terms of the GNU General Public License as published by
1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   the Free Software Foundation; either version 2 of the License, or
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   (at your option) any later version.
1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   This program is distributed in the hope that it will be useful,
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   but WITHOUT ANY WARRANTY; without even the implied warranty of
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   GNU General Public License for more details.
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   You should have received a copy of the GNU General Public License
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   along with this program; if not, write to the Free Software
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   For the avoidance of doubt the "preferred form" of this code is one which
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   is in an open unpatent encumbered format. Where cryptographic key signing
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   forms part of the process of creating an executable the information
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   including keys needed to generate an equivalently functional executable
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   are deemed to be part of the source code.
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman*/
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <dmi/dmi.h>
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdio.h>
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanconst char *dmi_processor_type(uint8_t code)
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    /* 3.3.5.1 */
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    static const char *type[] = {
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Other",		/* 0x01 */
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Unknown",
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Central Processor",
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Math Processor",
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"DSP Processor",
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Video Processor"	/* 0x06 */
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    };
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (code >= 0x01 && code <= 0x06)
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	return type[code - 0x01];
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    return out_of_spec;
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanconst char *dmi_processor_family(uint8_t code, char *manufacturer)
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    /* 3.3.5.2 */
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    /* TODO : Need to implement code/value (see dmidecode) insteed of array to address large index */
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    static const char *family[256] = {
5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x00 */
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Other",
5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Unknown",
5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"8086",
5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"80286",
5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"80386",
6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"80486",
6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"8087",
6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"80287",
6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"80387",
6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"80487",
6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Pentium",
6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Pentium Pro",
6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Pentium II",
6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Pentium MMX",
6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Celeron",
7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Pentium II Xeon",
7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Pentium III",
7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"M1",
7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"M2",
7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Celeron M",		/* 0x14 */
7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Pentium 4 HT",
7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x17 */
7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Duron",
7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"K5",
8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"K6",
8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"K6-2",
8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"K6-3",
8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Athlon",
8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"AMD2900",
8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"K6-2+",
8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Power PC",
8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Power PC 601",
8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Power PC 603",
8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Power PC 603+",
9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Power PC 604",
9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Power PC 620",
9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Power PC x704",
9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Power PC 750",
9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Core 2 Duo",		/* 0x28 */
9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Core 2 Duo Mobile",
9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Core Solo Mobile",
9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Atom",
9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x2F */
10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Alpha",
10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Alpha 21064",
10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Alpha 21066",
10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Alpha 21164",
10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Alpha 21164PC",
10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Alpha 21164a",
10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Alpha 21264",
10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Alpha 21364",
11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x38 */
11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x3F */
11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"MIPS",
11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"MIPS R4000",
12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"MIPS R4200",
12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"MIPS R4400",
12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"MIPS R4600",
12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"MIPS R10000",
12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x46 */
12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x4F */
13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"SPARC",
13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"SuperSPARC",
13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"MicroSPARC II",
13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"MicroSPARC IIep",
13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"UltraSPARC",
13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"UltraSPARC II",
14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"UltraSPARC IIi",
14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"UltraSPARC III",
14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"UltraSPARC IIIi",
14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x59 */
14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x5F */
15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"68040",
15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"68xxx",
15276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"68000",
15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"68010",
15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"68020",
15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"68030",
15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x66 */
15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x6F */
16676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Hobbit",
16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x71 */
16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
17176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x77 */
17476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Crusoe TM5000",
17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Crusoe TM3000",
17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Efficeon TM8000",
17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x7B */
17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x7F */
18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Weitek",
18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x81 */
18476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Itanium",
18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Athlon 64",
18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Opteron",
18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Sempron",
18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Turion 64",		/* 0x86 */
18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Dual-Core Opteron",
19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Atlhon 64 X2",
19176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Turion 64 X2",
19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Quad-Core Opteron",
19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Third-Generation Opteron",
19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Phenom FX",
19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Phenom X4",
19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Phenom X2",
19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Athlon X2",		/* 0x8F */
19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"PA-RISC",
19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"PA-RISC 8500",
20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"PA-RISC 8000",
20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"PA-RISC 7300LC",
20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"PA-RISC 7200",
20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"PA-RISC 7100LC",
20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"PA-RISC 7100",
20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x97 */
20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
20876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
20976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
21076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
21176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
21276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
21376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0x9F */
21476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"V30",
21576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Quad-Core Xeon 3200",	/* 0xA1 */
21676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Dual-Core Xeon 3000",
21776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Quad-Core Xeon 5300",
21876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Dual-Core Xeon 5100",
21976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Dual-Core Xeon 5000",
22076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Dual-Core Xeon LV",
22176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Dual-Core Xeon ULV",
22276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Dual-Core Xeon 7100",
22376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Quad-Core Xeon 5400",
22476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Quad-Core Xeon",	/* 0xAA */
22576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Dual-Core Xeon 5200",
22676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Dual-Core Xeon 7200",
22776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Quad-Core Xeon 7300",
22876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Quad-Core Xeon 7400",
22976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Multi-Core Xeon 7400",			/* 0xAF */
23076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Pentium III Xeon",
23176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Pentium III Speedstep",
23276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Pentium 4",
23376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Xeon",
23476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"AS400",
23576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Xeon MP",
23676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Athlon XP",
23776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Athlon MP",
23876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Itanium 2",
23976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Pentium M",
24076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Celeron D",		/* 0xBA */
24176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Pentium D",
24276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Pentium EE",
24376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Core Solo",		/* 0xBD */
24476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
24576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Core 2 Duo",
24676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Core 2 Solo",
24776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Core 2 Extreme",
24876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Core 2 Quad",
24976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Core 2 Extreme Mobile",
25076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Core 2 Duo Mobile",
25176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Core 2 Solo Mobile",
25276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Core i7",
25376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Dual-Core Celeron",		/* 0xC7 */
25476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"IBM390",
25576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"G4",
25676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"G5",
25776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"ESA/390 G6",		/* 0xCB */
25876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"z/Architectur",
25976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
26076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
26176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
26276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/*0xD0 */
26376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
26476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"C7-M",
26576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"C7-D",
26676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"C7",
26776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Eden",
26876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Multi-Core Xeon",			/*0xD6 */
26976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Dual-Core Xeon 3xxx",
27076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Quad-Core Xeon 3xxx",  /*0xD8 */
27176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
27276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Dual-Core Xeon 5xxx", /*0xDA */
27376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Quad-Core Xeon 5xxx",
27476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
27576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Dual-Core Xeon 7xxx", /*0xDD */
27676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Quad-Core Xeon 7xxx",
27776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Multi-Core Xeon 7xxx",
27876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/*0xE0 */
27976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
28076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
28176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
28276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
28376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
28476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Embedded Opteron Quad-Core",	/* 0xE6 */
28576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Phenom Triple-Core",
28676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Turion Ultra Dual-Core Mobile",
28776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Turion Dual-Core Mobile",
28876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Athlon Dual-Core",
28976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Sempron SI",		/*0xEB */
29076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
29176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
29276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
29376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
29476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
29576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
29676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
29776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
29876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
29976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
30076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
30176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
30276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
30376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0xF9 */
30476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"i860",
30576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"i960",
30676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0xFC */
30776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
30876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,
30976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	NULL,			/* 0xFF */
31076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    };
31176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    /* Special case for ambiguous value 0xBE */
31276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (code == 0xBE) {
31376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/* Best bet based on manufacturer string */
31476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	if (strstr(manufacturer, "Intel") != NULL
31576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	    || strncasecmp(manufacturer, "Intel", 5) == 0)
31676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	    return "Core 2";
31776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	if (strstr(manufacturer, "AMD") != NULL
31876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	    || strncasecmp(manufacturer, "AMD", 3) == 0)
31976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	    return "K7";
32076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	return "Core 2 or K7";
32176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    }
32276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
32376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (family[code] != NULL) {
32476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	return family[code];
32576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    }
32676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    return out_of_spec;
32776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
32876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
32976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanconst char *dmi_processor_status(uint8_t code)
33076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
33176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    static const char *status[] = {
33276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Unknown",		/* 0x00 */
33376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Enabled",
33476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Disabled By User",
33576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Disabled By BIOS",
33676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Idle",			/* 0x04 */
33776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"<OUT OF SPEC>",
33876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"<OUT OF SPEC>",
33976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Other"			/* 0x07 */
34076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    };
34176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
34276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (code <= 0x04)
34376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	return status[code];
34476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (code == 0x07)
34576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	return status[0x05];
34676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    return out_of_spec;
34776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
34876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
34976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanconst char *dmi_processor_upgrade(uint8_t code)
35076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
35176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    /* 3.3.5.5 */
35276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    static const char *upgrade[] = {
35376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Other",		/* 0x01 */
35476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Unknown",
35576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Daughter Board",
35676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"ZIF Socket",
35776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Replaceable Piggy Back",
35876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"None",
35976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"LIF Socket",
36076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Slot 1",
36176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Slot 2",
36276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"370-pin Socket",
36376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Slot A",
36476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Slot M",
36576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Socket 423",
36676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Socket A (Socket 462)",
36776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Socket 478",
36876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Socket 754",
36976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Socket 940",
37076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Socket 939"		/* 0x12 */
37176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Socket mPGA604",
37276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Socket LGA771",
37376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Socket LGA775",
37476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Socket S1",
37576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Socket AM2",
37676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Socket F (1207)"
37776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Socket LGA1366"	/* 0x19 */
37876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    };
37976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
38076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (code >= 0x01 && code <= 0x19)
38176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	return upgrade[code - 0x01];
38276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    return out_of_spec;
38376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
38476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
38576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid dmi_processor_cache(uint16_t code, const char *level, uint16_t ver,
38676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman			 char *cache)
38776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
38876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (code == 0xFFFF) {
38976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	if (ver >= 0x0203)
39076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	    sprintf(cache, "Not Provided");
39176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	else
39276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	    sprintf(cache, "No %s Cache", level);
39376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    } else
39476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	sprintf(cache, "0x%04X", code);
39576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
39676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
39776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Intel AP-485 revision 28, table 5 */
39876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanconst char *cpu_flags_strings[PROCESSOR_FLAGS_ELEMENTS] = {
39976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "FPU (Floating-point unit on-chip)",	/* 0 */
40076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "VME (Virtual mode extension)",
40176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "DE (Debugging extension)",
40276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "PSE (Page size extension)",
40376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "TSC (Time stamp counter)",
40476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "MSR (Model specific registers)",
40576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "PAE (Physical address extension)",
40676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "MCE (Machine check exception)",
40776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "CX8 (CMPXCHG8 instruction supported)",
40876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "APIC (On-chip APIC hardware supported)",
40976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    NULL,			/* 10 */
41076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "SEP (Fast system call)",
41176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "MTRR (Memory type range registers)",
41276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "PGE (Page global enable)",
41376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "MCA (Machine check architecture)",
41476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "CMOV (Conditional move instruction supported)",
41576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "PAT (Page attribute table)",
41676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "PSE-36 (36-bit page size extension)",
41776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "PSN (Processor serial number present and enabled)",
41876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "CLFSH (CLFLUSH instruction supported)",
41976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    NULL,			/* 20 */
42076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "DS (Debug store)",
42176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "ACPI (ACPI supported)",
42276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "MMX (MMX technology supported)",
42376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "FXSR (Fast floating-point save and restore)",
42476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "SSE (Streaming SIMD extensions)",
42576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "SSE2 (Streaming SIMD extensions 2)",
42676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "SS (Self-snoop)",
42776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "HTT (Hyper-threading technology)",
42876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "TM (Thermal monitor supported)",
42976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "IA64 (IA64 capabilities)",	/* 30 */
43076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    "PBE (Pending break enabled)"	/* 31 */
43176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman};
432