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