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_chassis_type(uint8_t code)
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    /* 3.3.4.1 */
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    static const char *type[] = {
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Other",		/* 0x01 */
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Unknown",
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Desktop",
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Low Profile Desktop",
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Pizza Box",
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Mini Tower",
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Tower",
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Portable",
4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Laptop",
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Notebook",
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Hand Held",
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Docking Station",
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"All In One",
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Sub Notebook",
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Space-saving",
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Lunch Box",
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Main Server Chassis",	/* master.mif says System */
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Expansion Chassis",
5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Sub Chassis",
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Bus Expansion Chassis",
5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Peripheral Chassis",
5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"RAID Chassis",
5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Rack Mount Chassis",
5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Sealed-case PC",
6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Multi-system",		/* 0x19 */
6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"CompactPCI",
6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"AdvancedTCA",
6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Blade",
6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Blade Enclosing" /* 0x1D */
6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    };
6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (code >= 0x01 && code <= 0x1D)
6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	return type[code - 0x01];
6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    return out_of_spec;
7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanconst char *dmi_chassis_lock(uint8_t code)
7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    static const char *lock[] = {
7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Not Present",		/* 0x00 */
7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Present"		/* 0x01 */
7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    };
7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    return lock[code];
8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanconst char *dmi_chassis_state(uint8_t code)
8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    /* 3.3.4.2 */
8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    static const char *state[] = {
8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Other",		/* 0x01 */
8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Unknown",
8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Safe",			/* master.mif says OK */
8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Warning",
9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Critical",
9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Non-recoverable"	/* 0x06 */
9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    };
9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (code >= 0x01 && code <= 0x06)
9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	return (state[code - 0x01]);
9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    return out_of_spec;
9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanconst char *dmi_chassis_security_status(uint8_t code)
10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    /* 3.3.4.3 */
10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    static const char *status[] = {
10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Other",		/* 0x01 */
10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Unknown",
10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"None",
10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"External Interface Locked Out",
10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"External Interface Enabled"	/* 0x05 */
10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    };
10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (code >= 0x01 && code <= 0x05)
11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	return (status[code - 0x01]);
11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    return out_of_spec;
11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
114