smbios.hh revision 5615
15612Sgblack@eecs.umich.edu/* 25612Sgblack@eecs.umich.edu * Copyright (c) 2008 The Regents of The University of Michigan 35612Sgblack@eecs.umich.edu * All rights reserved. 45612Sgblack@eecs.umich.edu * 55612Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 65612Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 75612Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 85612Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 95612Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 105612Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 115612Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 125612Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 135612Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 145612Sgblack@eecs.umich.edu * this software without specific prior written permission. 155612Sgblack@eecs.umich.edu * 165612Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 175612Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 185612Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 195612Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 205612Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 215612Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 225612Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 235612Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 245612Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255612Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 265612Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275612Sgblack@eecs.umich.edu * 285612Sgblack@eecs.umich.edu * Authors: Gabe Black 295612Sgblack@eecs.umich.edu */ 305612Sgblack@eecs.umich.edu 315612Sgblack@eecs.umich.edu/* 325612Sgblack@eecs.umich.edu * Copyright (c) 2008 The Hewlett-Packard Development Company 335612Sgblack@eecs.umich.edu * All rights reserved. 345612Sgblack@eecs.umich.edu * 355612Sgblack@eecs.umich.edu * Redistribution and use of this software in source and binary forms, 365612Sgblack@eecs.umich.edu * with or without modification, are permitted provided that the 375612Sgblack@eecs.umich.edu * following conditions are met: 385612Sgblack@eecs.umich.edu * 395612Sgblack@eecs.umich.edu * The software must be used only for Non-Commercial Use which means any 405612Sgblack@eecs.umich.edu * use which is NOT directed to receiving any direct monetary 415612Sgblack@eecs.umich.edu * compensation for, or commercial advantage from such use. Illustrative 425612Sgblack@eecs.umich.edu * examples of non-commercial use are academic research, personal study, 435612Sgblack@eecs.umich.edu * teaching, education and corporate research & development. 445612Sgblack@eecs.umich.edu * Illustrative examples of commercial use are distributing products for 455612Sgblack@eecs.umich.edu * commercial advantage and providing services using the software for 465612Sgblack@eecs.umich.edu * commercial advantage. 475612Sgblack@eecs.umich.edu * 485612Sgblack@eecs.umich.edu * If you wish to use this software or functionality therein that may be 495612Sgblack@eecs.umich.edu * covered by patents for commercial use, please contact: 505612Sgblack@eecs.umich.edu * Director of Intellectual Property Licensing 515612Sgblack@eecs.umich.edu * Office of Strategy and Technology 525612Sgblack@eecs.umich.edu * Hewlett-Packard Company 535612Sgblack@eecs.umich.edu * 1501 Page Mill Road 545612Sgblack@eecs.umich.edu * Palo Alto, California 94304 555612Sgblack@eecs.umich.edu * 565612Sgblack@eecs.umich.edu * Redistributions of source code must retain the above copyright notice, 575612Sgblack@eecs.umich.edu * this list of conditions and the following disclaimer. Redistributions 585612Sgblack@eecs.umich.edu * in binary form must reproduce the above copyright notice, this list of 595612Sgblack@eecs.umich.edu * conditions and the following disclaimer in the documentation and/or 605612Sgblack@eecs.umich.edu * other materials provided with the distribution. Neither the name of 615612Sgblack@eecs.umich.edu * the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its 625612Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 635612Sgblack@eecs.umich.edu * this software without specific prior written permission. No right of 645612Sgblack@eecs.umich.edu * sublicense is granted herewith. Derivatives of the software and 655612Sgblack@eecs.umich.edu * output created using the software may be prepared, but only for 665612Sgblack@eecs.umich.edu * Non-Commercial Uses. Derivatives of the software may be shared with 675612Sgblack@eecs.umich.edu * others provided: (i) the others agree to abide by the list of 685612Sgblack@eecs.umich.edu * conditions herein which includes the Non-Commercial Use restrictions; 695612Sgblack@eecs.umich.edu * and (ii) such Derivatives of the software include the above copyright 705612Sgblack@eecs.umich.edu * notice to acknowledge the contribution from this software where 715612Sgblack@eecs.umich.edu * applicable, this list of conditions and the disclaimer below. 725612Sgblack@eecs.umich.edu * 735612Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 745612Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 755612Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 765612Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 775612Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 785612Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 795612Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 805612Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 815612Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 825612Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 835612Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 845612Sgblack@eecs.umich.edu * 855612Sgblack@eecs.umich.edu * Authors: Gabe Black 865612Sgblack@eecs.umich.edu */ 875612Sgblack@eecs.umich.edu 885612Sgblack@eecs.umich.edu#ifndef __ARCH_X86_BIOS_SMBIOS_HH__ 895612Sgblack@eecs.umich.edu#define __ARCH_X86_BIOS_SMBIOS_HH__ 905612Sgblack@eecs.umich.edu 915612Sgblack@eecs.umich.edu#include <string> 925612Sgblack@eecs.umich.edu#include <vector> 935612Sgblack@eecs.umich.edu 945615Sgblack@eecs.umich.edu#include "enums/Characteristic.hh" 955615Sgblack@eecs.umich.edu#include "enums/ExtCharacteristic.hh" 965612Sgblack@eecs.umich.edu#include "sim/host.hh" 975615Sgblack@eecs.umich.edu#include "sim/sim_object.hh" 985615Sgblack@eecs.umich.edu 995615Sgblack@eecs.umich.educlass FunctionalPort; 1005615Sgblack@eecs.umich.educlass X86SMBiosBiosInformationParams; 1015615Sgblack@eecs.umich.educlass X86SMBiosSMBiosStructureParams; 1025615Sgblack@eecs.umich.educlass X86SMBiosSMBiosTableParams; 1035612Sgblack@eecs.umich.edu 1045612Sgblack@eecs.umich.edunamespace X86ISA 1055612Sgblack@eecs.umich.edu{ 1065612Sgblack@eecs.umich.edu 1075612Sgblack@eecs.umich.edunamespace SMBios 1085612Sgblack@eecs.umich.edu{ 1095612Sgblack@eecs.umich.edu 1105615Sgblack@eecs.umich.educlass SMBiosStructure : public SimObject 1115612Sgblack@eecs.umich.edu{ 1125615Sgblack@eecs.umich.edu protected: 1135615Sgblack@eecs.umich.edu typedef X86SMBiosSMBiosStructureParams Params; 1145615Sgblack@eecs.umich.edu 1155612Sgblack@eecs.umich.edu public: 1165612Sgblack@eecs.umich.edu 1175612Sgblack@eecs.umich.edu virtual 1185612Sgblack@eecs.umich.edu ~SMBiosStructure() 1195612Sgblack@eecs.umich.edu {} 1205612Sgblack@eecs.umich.edu 1215612Sgblack@eecs.umich.edu // Offset 00h, 1 byte 1225612Sgblack@eecs.umich.edu uint8_t type; 1235612Sgblack@eecs.umich.edu 1245612Sgblack@eecs.umich.edu // Offset 01h, 1 byte 1255612Sgblack@eecs.umich.edu //Length: computed when written to memory. 1265612Sgblack@eecs.umich.edu 1275612Sgblack@eecs.umich.edu // Offset 02h, 2 bytes 1285612Sgblack@eecs.umich.edu uint16_t handle; 1295612Sgblack@eecs.umich.edu 1305612Sgblack@eecs.umich.edu virtual uint8_t 1315612Sgblack@eecs.umich.edu getLength() 1325612Sgblack@eecs.umich.edu { 1335612Sgblack@eecs.umich.edu // This is the size of a structure with nothing but the header 1345612Sgblack@eecs.umich.edu return 4; 1355612Sgblack@eecs.umich.edu } 1365612Sgblack@eecs.umich.edu 1375615Sgblack@eecs.umich.edu virtual uint16_t writeOut(FunctionalPort * port, Addr addr); 1385612Sgblack@eecs.umich.edu 1395612Sgblack@eecs.umich.edu protected: 1405615Sgblack@eecs.umich.edu bool stringFields; 1415615Sgblack@eecs.umich.edu 1425615Sgblack@eecs.umich.edu SMBiosStructure(Params * p, uint8_t _type); 1435615Sgblack@eecs.umich.edu 1445612Sgblack@eecs.umich.edu std::vector<std::string> strings; 1455612Sgblack@eecs.umich.edu 1465615Sgblack@eecs.umich.edu void writeOutStrings(FunctionalPort * port, Addr addr); 1475612Sgblack@eecs.umich.edu 1485615Sgblack@eecs.umich.edu int getStringLength(); 1495612Sgblack@eecs.umich.edu 1505612Sgblack@eecs.umich.edu public: 1515612Sgblack@eecs.umich.edu 1525615Sgblack@eecs.umich.edu int addString(std::string & newString); 1535615Sgblack@eecs.umich.edu std::string readString(int n); 1545615Sgblack@eecs.umich.edu void setString(int n, std::string & newString); 1555612Sgblack@eecs.umich.edu}; 1565612Sgblack@eecs.umich.edu 1575612Sgblack@eecs.umich.educlass BiosInformation : public SMBiosStructure 1585612Sgblack@eecs.umich.edu{ 1595615Sgblack@eecs.umich.edu protected: 1605615Sgblack@eecs.umich.edu const static uint8_t Type = 0; 1615615Sgblack@eecs.umich.edu 1625615Sgblack@eecs.umich.edu typedef X86SMBiosBiosInformationParams Params; 1635615Sgblack@eecs.umich.edu 1645612Sgblack@eecs.umich.edu public: 1655612Sgblack@eecs.umich.edu // Offset 04h, 1 byte 1665612Sgblack@eecs.umich.edu uint8_t vendor; 1675612Sgblack@eecs.umich.edu // Offset 05h, 1 byte 1685612Sgblack@eecs.umich.edu uint8_t version; 1695612Sgblack@eecs.umich.edu // Offset 06h, 2 bytes 1705612Sgblack@eecs.umich.edu uint16_t startingAddrSegment; 1715612Sgblack@eecs.umich.edu // Offset 08h, 1 byte 1725612Sgblack@eecs.umich.edu uint8_t releaseDate; 1735612Sgblack@eecs.umich.edu // Offset 09h, 1 byte 1745612Sgblack@eecs.umich.edu uint8_t romSize; 1755612Sgblack@eecs.umich.edu // Offset 0Ah, 8 bytes 1765612Sgblack@eecs.umich.edu //See tables in 3.3.1 in the SMBios 2.5 spec from the DMTF for 1775612Sgblack@eecs.umich.edu //bit definitions. 1785612Sgblack@eecs.umich.edu uint64_t characteristics; 1795612Sgblack@eecs.umich.edu // Offset 12h, 2 bytes 1805612Sgblack@eecs.umich.edu uint16_t characteristicExtBytes; 1815612Sgblack@eecs.umich.edu // Offset 14h, 1 byte 1825615Sgblack@eecs.umich.edu uint8_t majorVer; 1835612Sgblack@eecs.umich.edu // Offset 15h, 1 byte 1845615Sgblack@eecs.umich.edu uint8_t minorVer; 1855612Sgblack@eecs.umich.edu // Offset 16h, 1 byte 1865612Sgblack@eecs.umich.edu uint8_t embContFirmwareMajor; 1875612Sgblack@eecs.umich.edu // Offset 17h, 1 byte 1885612Sgblack@eecs.umich.edu uint8_t embContFirmwareMinor; 1895612Sgblack@eecs.umich.edu 1905615Sgblack@eecs.umich.edu BiosInformation(Params * p); 1915615Sgblack@eecs.umich.edu 1925612Sgblack@eecs.umich.edu uint8_t getLength() { return 0x18; } 1935612Sgblack@eecs.umich.edu uint16_t writeOut(FunctionalPort * port, Addr addr); 1945612Sgblack@eecs.umich.edu}; 1955612Sgblack@eecs.umich.edu 1965615Sgblack@eecs.umich.educlass SMBiosTable : public SimObject 1975612Sgblack@eecs.umich.edu{ 1985615Sgblack@eecs.umich.edu protected: 1995615Sgblack@eecs.umich.edu typedef X86SMBiosSMBiosTableParams Params; 2005615Sgblack@eecs.umich.edu 2015612Sgblack@eecs.umich.edu struct SMBiosHeader 2025612Sgblack@eecs.umich.edu { 2035612Sgblack@eecs.umich.edu SMBiosHeader() 2045612Sgblack@eecs.umich.edu {} 2055612Sgblack@eecs.umich.edu 2065612Sgblack@eecs.umich.edu // Offset 00h, 4 bytes 2075612Sgblack@eecs.umich.edu static const char anchorString[]; 2085612Sgblack@eecs.umich.edu 2095612Sgblack@eecs.umich.edu // Offset 04h, 1 byte 2105612Sgblack@eecs.umich.edu //Checksum: computed when written to memory. 2115612Sgblack@eecs.umich.edu 2125612Sgblack@eecs.umich.edu // Offset 05h, 1 byte 2135612Sgblack@eecs.umich.edu static const uint8_t entryPointLength; 2145612Sgblack@eecs.umich.edu 2155612Sgblack@eecs.umich.edu // Offset 06h, 1 byte 2165612Sgblack@eecs.umich.edu uint8_t majorVersion; 2175612Sgblack@eecs.umich.edu 2185612Sgblack@eecs.umich.edu // Offset 07h, 1 byte 2195612Sgblack@eecs.umich.edu uint8_t minorVersion; 2205612Sgblack@eecs.umich.edu 2215612Sgblack@eecs.umich.edu // Offset 08h, 2 bytes 2225612Sgblack@eecs.umich.edu //Maximum structure size: computed when written to memory. 2235612Sgblack@eecs.umich.edu 2245612Sgblack@eecs.umich.edu // Offset 0Ah, 1 byte 2255612Sgblack@eecs.umich.edu static const uint8_t entryPointRevision; 2265612Sgblack@eecs.umich.edu 2275612Sgblack@eecs.umich.edu // Offset 0Bh, 5 bytes 2285612Sgblack@eecs.umich.edu static const uint8_t formattedArea[5]; 2295612Sgblack@eecs.umich.edu 2305612Sgblack@eecs.umich.edu // Offset 10h, 15 bytes 2315612Sgblack@eecs.umich.edu struct IntermediateHeader 2325612Sgblack@eecs.umich.edu { 2335612Sgblack@eecs.umich.edu IntermediateHeader() : tableAddr(0) 2345612Sgblack@eecs.umich.edu {} 2355612Sgblack@eecs.umich.edu // Offset 10h, 5 bytes 2365612Sgblack@eecs.umich.edu static const char anchorString[]; 2375612Sgblack@eecs.umich.edu 2385612Sgblack@eecs.umich.edu // Offset 15h, 1 byte 2395612Sgblack@eecs.umich.edu //Checksum: computed when written to memory. 2405612Sgblack@eecs.umich.edu 2415612Sgblack@eecs.umich.edu // Offset 16h, 2 bytes 2425612Sgblack@eecs.umich.edu //Length of the structure table in bytes: computed when 2435612Sgblack@eecs.umich.edu //written to memory. 2445612Sgblack@eecs.umich.edu 2455612Sgblack@eecs.umich.edu // Offset 18h, 4 bytes 2465612Sgblack@eecs.umich.edu uint32_t tableAddr; 2475612Sgblack@eecs.umich.edu 2485612Sgblack@eecs.umich.edu // Offset 1Ch, 2 bytes 2495612Sgblack@eecs.umich.edu //Number of structures: computed when written to memory 2505612Sgblack@eecs.umich.edu 2515612Sgblack@eecs.umich.edu // Offset 1Eh, 1 byte 2525612Sgblack@eecs.umich.edu uint8_t smbiosBCDRevision; 2535612Sgblack@eecs.umich.edu } intermediateHeader; 2545612Sgblack@eecs.umich.edu } smbiosHeader; 2555612Sgblack@eecs.umich.edu 2565615Sgblack@eecs.umich.edu std::vector<SMBiosStructure *> structures; 2575612Sgblack@eecs.umich.edu 2585615Sgblack@eecs.umich.edu public: 2595615Sgblack@eecs.umich.edu SMBiosTable(Params * p); 2605615Sgblack@eecs.umich.edu 2615615Sgblack@eecs.umich.edu Addr getTableAddr() 2625615Sgblack@eecs.umich.edu { 2635615Sgblack@eecs.umich.edu return smbiosHeader.intermediateHeader.tableAddr; 2645615Sgblack@eecs.umich.edu } 2655615Sgblack@eecs.umich.edu 2665615Sgblack@eecs.umich.edu void setTableAddr(Addr addr) 2675615Sgblack@eecs.umich.edu { 2685615Sgblack@eecs.umich.edu smbiosHeader.intermediateHeader.tableAddr = addr; 2695615Sgblack@eecs.umich.edu } 2705615Sgblack@eecs.umich.edu 2715615Sgblack@eecs.umich.edu void writeOut(FunctionalPort * port, Addr addr, 2725615Sgblack@eecs.umich.edu Addr &headerSize, Addr &structSize); 2735612Sgblack@eecs.umich.edu}; 2745612Sgblack@eecs.umich.edu 2755612Sgblack@eecs.umich.edu} //SMBios 2765612Sgblack@eecs.umich.edu} //X86ISA 2775612Sgblack@eecs.umich.edu 2785612Sgblack@eecs.umich.edu#endif 279