smbios.hh revision 8706
15612Sgblack@eecs.umich.edu/* 27087Snate@binkert.org * Copyright (c) 2008 The Hewlett-Packard Development Company 37087Snate@binkert.org * All rights reserved. 47087Snate@binkert.org * 57087Snate@binkert.org * The license below extends only to copyright in the software and shall 67087Snate@binkert.org * not be construed as granting a license to any other intellectual 77087Snate@binkert.org * property including but not limited to intellectual property relating 87087Snate@binkert.org * to a hardware implementation of the functionality of the software 97087Snate@binkert.org * licensed hereunder. You may use the software subject to the license 107087Snate@binkert.org * terms below provided that you ensure that this notice is replicated 117087Snate@binkert.org * unmodified and in its entirety in all distributions of the software, 127087Snate@binkert.org * modified or unmodified, in source code or in binary form. 137087Snate@binkert.org * 145612Sgblack@eecs.umich.edu * Copyright (c) 2008 The Regents of The University of Michigan 155612Sgblack@eecs.umich.edu * All rights reserved. 165612Sgblack@eecs.umich.edu * 175612Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 185612Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 195612Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 205612Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 215612Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 225612Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 235612Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 245612Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 255612Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 265612Sgblack@eecs.umich.edu * this software without specific prior written permission. 275612Sgblack@eecs.umich.edu * 285612Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 295612Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 305612Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 315612Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 325612Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 335612Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 345612Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 355612Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 365612Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 375612Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 385612Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 395612Sgblack@eecs.umich.edu * 405612Sgblack@eecs.umich.edu * Authors: Gabe Black 415612Sgblack@eecs.umich.edu */ 425612Sgblack@eecs.umich.edu 435612Sgblack@eecs.umich.edu#ifndef __ARCH_X86_BIOS_SMBIOS_HH__ 445612Sgblack@eecs.umich.edu#define __ARCH_X86_BIOS_SMBIOS_HH__ 455612Sgblack@eecs.umich.edu 465612Sgblack@eecs.umich.edu#include <string> 475612Sgblack@eecs.umich.edu#include <vector> 485612Sgblack@eecs.umich.edu 496216Snate@binkert.org#include "base/types.hh" 505615Sgblack@eecs.umich.edu#include "enums/Characteristic.hh" 515615Sgblack@eecs.umich.edu#include "enums/ExtCharacteristic.hh" 525615Sgblack@eecs.umich.edu#include "sim/sim_object.hh" 535615Sgblack@eecs.umich.edu 548706Sandreas.hansson@arm.comclass PortProxy; 555615Sgblack@eecs.umich.educlass X86SMBiosBiosInformationParams; 565615Sgblack@eecs.umich.educlass X86SMBiosSMBiosStructureParams; 575615Sgblack@eecs.umich.educlass X86SMBiosSMBiosTableParams; 585612Sgblack@eecs.umich.edu 595612Sgblack@eecs.umich.edunamespace X86ISA 605612Sgblack@eecs.umich.edu{ 615612Sgblack@eecs.umich.edu 625612Sgblack@eecs.umich.edunamespace SMBios 635612Sgblack@eecs.umich.edu{ 645612Sgblack@eecs.umich.edu 655615Sgblack@eecs.umich.educlass SMBiosStructure : public SimObject 665612Sgblack@eecs.umich.edu{ 675615Sgblack@eecs.umich.edu protected: 685615Sgblack@eecs.umich.edu typedef X86SMBiosSMBiosStructureParams Params; 695615Sgblack@eecs.umich.edu 705612Sgblack@eecs.umich.edu public: 715612Sgblack@eecs.umich.edu 725612Sgblack@eecs.umich.edu virtual 735612Sgblack@eecs.umich.edu ~SMBiosStructure() 745612Sgblack@eecs.umich.edu {} 755612Sgblack@eecs.umich.edu 765612Sgblack@eecs.umich.edu // Offset 00h, 1 byte 775612Sgblack@eecs.umich.edu uint8_t type; 785612Sgblack@eecs.umich.edu 795612Sgblack@eecs.umich.edu // Offset 01h, 1 byte 805612Sgblack@eecs.umich.edu //Length: computed when written to memory. 815612Sgblack@eecs.umich.edu 825612Sgblack@eecs.umich.edu // Offset 02h, 2 bytes 835612Sgblack@eecs.umich.edu uint16_t handle; 845612Sgblack@eecs.umich.edu 855612Sgblack@eecs.umich.edu virtual uint8_t 865612Sgblack@eecs.umich.edu getLength() 875612Sgblack@eecs.umich.edu { 885612Sgblack@eecs.umich.edu // This is the size of a structure with nothing but the header 895612Sgblack@eecs.umich.edu return 4; 905612Sgblack@eecs.umich.edu } 915612Sgblack@eecs.umich.edu 928706Sandreas.hansson@arm.com virtual uint16_t writeOut(PortProxy* proxy, Addr addr); 935612Sgblack@eecs.umich.edu 945612Sgblack@eecs.umich.edu protected: 955615Sgblack@eecs.umich.edu bool stringFields; 965615Sgblack@eecs.umich.edu 975615Sgblack@eecs.umich.edu SMBiosStructure(Params * p, uint8_t _type); 985615Sgblack@eecs.umich.edu 995612Sgblack@eecs.umich.edu std::vector<std::string> strings; 1005612Sgblack@eecs.umich.edu 1018706Sandreas.hansson@arm.com void writeOutStrings(PortProxy* proxy, Addr addr); 1025612Sgblack@eecs.umich.edu 1035615Sgblack@eecs.umich.edu int getStringLength(); 1045612Sgblack@eecs.umich.edu 1055612Sgblack@eecs.umich.edu public: 1065612Sgblack@eecs.umich.edu 1075615Sgblack@eecs.umich.edu int addString(std::string & newString); 1085615Sgblack@eecs.umich.edu std::string readString(int n); 1095615Sgblack@eecs.umich.edu void setString(int n, std::string & newString); 1105612Sgblack@eecs.umich.edu}; 1115612Sgblack@eecs.umich.edu 1125612Sgblack@eecs.umich.educlass BiosInformation : public SMBiosStructure 1135612Sgblack@eecs.umich.edu{ 1145615Sgblack@eecs.umich.edu protected: 1155615Sgblack@eecs.umich.edu const static uint8_t Type = 0; 1165615Sgblack@eecs.umich.edu 1175615Sgblack@eecs.umich.edu typedef X86SMBiosBiosInformationParams Params; 1185615Sgblack@eecs.umich.edu 1195612Sgblack@eecs.umich.edu public: 1205612Sgblack@eecs.umich.edu // Offset 04h, 1 byte 1215612Sgblack@eecs.umich.edu uint8_t vendor; 1225612Sgblack@eecs.umich.edu // Offset 05h, 1 byte 1235612Sgblack@eecs.umich.edu uint8_t version; 1245612Sgblack@eecs.umich.edu // Offset 06h, 2 bytes 1255612Sgblack@eecs.umich.edu uint16_t startingAddrSegment; 1265612Sgblack@eecs.umich.edu // Offset 08h, 1 byte 1275612Sgblack@eecs.umich.edu uint8_t releaseDate; 1285612Sgblack@eecs.umich.edu // Offset 09h, 1 byte 1295612Sgblack@eecs.umich.edu uint8_t romSize; 1305612Sgblack@eecs.umich.edu // Offset 0Ah, 8 bytes 1315612Sgblack@eecs.umich.edu //See tables in 3.3.1 in the SMBios 2.5 spec from the DMTF for 1325612Sgblack@eecs.umich.edu //bit definitions. 1335612Sgblack@eecs.umich.edu uint64_t characteristics; 1345612Sgblack@eecs.umich.edu // Offset 12h, 2 bytes 1355612Sgblack@eecs.umich.edu uint16_t characteristicExtBytes; 1365612Sgblack@eecs.umich.edu // Offset 14h, 1 byte 1375615Sgblack@eecs.umich.edu uint8_t majorVer; 1385612Sgblack@eecs.umich.edu // Offset 15h, 1 byte 1395615Sgblack@eecs.umich.edu uint8_t minorVer; 1405612Sgblack@eecs.umich.edu // Offset 16h, 1 byte 1415612Sgblack@eecs.umich.edu uint8_t embContFirmwareMajor; 1425612Sgblack@eecs.umich.edu // Offset 17h, 1 byte 1435612Sgblack@eecs.umich.edu uint8_t embContFirmwareMinor; 1445612Sgblack@eecs.umich.edu 1455615Sgblack@eecs.umich.edu BiosInformation(Params * p); 1465615Sgblack@eecs.umich.edu 1475612Sgblack@eecs.umich.edu uint8_t getLength() { return 0x18; } 1488706Sandreas.hansson@arm.com uint16_t writeOut(PortProxy* proxy, Addr addr); 1495612Sgblack@eecs.umich.edu}; 1505612Sgblack@eecs.umich.edu 1515615Sgblack@eecs.umich.educlass SMBiosTable : public SimObject 1525612Sgblack@eecs.umich.edu{ 1535615Sgblack@eecs.umich.edu protected: 1545615Sgblack@eecs.umich.edu typedef X86SMBiosSMBiosTableParams Params; 1555615Sgblack@eecs.umich.edu 1565612Sgblack@eecs.umich.edu struct SMBiosHeader 1575612Sgblack@eecs.umich.edu { 1585612Sgblack@eecs.umich.edu SMBiosHeader() 1595612Sgblack@eecs.umich.edu {} 1605612Sgblack@eecs.umich.edu 1615612Sgblack@eecs.umich.edu // Offset 00h, 4 bytes 1625612Sgblack@eecs.umich.edu static const char anchorString[]; 1635612Sgblack@eecs.umich.edu 1645612Sgblack@eecs.umich.edu // Offset 04h, 1 byte 1655612Sgblack@eecs.umich.edu //Checksum: computed when written to memory. 1665612Sgblack@eecs.umich.edu 1675612Sgblack@eecs.umich.edu // Offset 05h, 1 byte 1685612Sgblack@eecs.umich.edu static const uint8_t entryPointLength; 1695612Sgblack@eecs.umich.edu 1705612Sgblack@eecs.umich.edu // Offset 06h, 1 byte 1715612Sgblack@eecs.umich.edu uint8_t majorVersion; 1725612Sgblack@eecs.umich.edu 1735612Sgblack@eecs.umich.edu // Offset 07h, 1 byte 1745612Sgblack@eecs.umich.edu uint8_t minorVersion; 1755612Sgblack@eecs.umich.edu 1765612Sgblack@eecs.umich.edu // Offset 08h, 2 bytes 1775612Sgblack@eecs.umich.edu //Maximum structure size: computed when written to memory. 1785612Sgblack@eecs.umich.edu 1795612Sgblack@eecs.umich.edu // Offset 0Ah, 1 byte 1805612Sgblack@eecs.umich.edu static const uint8_t entryPointRevision; 1815612Sgblack@eecs.umich.edu 1825612Sgblack@eecs.umich.edu // Offset 0Bh, 5 bytes 1835612Sgblack@eecs.umich.edu static const uint8_t formattedArea[5]; 1845612Sgblack@eecs.umich.edu 1855612Sgblack@eecs.umich.edu // Offset 10h, 15 bytes 1865612Sgblack@eecs.umich.edu struct IntermediateHeader 1875612Sgblack@eecs.umich.edu { 1885612Sgblack@eecs.umich.edu IntermediateHeader() : tableAddr(0) 1895612Sgblack@eecs.umich.edu {} 1905612Sgblack@eecs.umich.edu // Offset 10h, 5 bytes 1915612Sgblack@eecs.umich.edu static const char anchorString[]; 1925612Sgblack@eecs.umich.edu 1935612Sgblack@eecs.umich.edu // Offset 15h, 1 byte 1945612Sgblack@eecs.umich.edu //Checksum: computed when written to memory. 1955612Sgblack@eecs.umich.edu 1965612Sgblack@eecs.umich.edu // Offset 16h, 2 bytes 1975612Sgblack@eecs.umich.edu //Length of the structure table in bytes: computed when 1985612Sgblack@eecs.umich.edu //written to memory. 1995612Sgblack@eecs.umich.edu 2005612Sgblack@eecs.umich.edu // Offset 18h, 4 bytes 2015612Sgblack@eecs.umich.edu uint32_t tableAddr; 2025612Sgblack@eecs.umich.edu 2035612Sgblack@eecs.umich.edu // Offset 1Ch, 2 bytes 2045612Sgblack@eecs.umich.edu //Number of structures: computed when written to memory 2055612Sgblack@eecs.umich.edu 2065612Sgblack@eecs.umich.edu // Offset 1Eh, 1 byte 2075612Sgblack@eecs.umich.edu uint8_t smbiosBCDRevision; 2085612Sgblack@eecs.umich.edu } intermediateHeader; 2095612Sgblack@eecs.umich.edu } smbiosHeader; 2105612Sgblack@eecs.umich.edu 2115615Sgblack@eecs.umich.edu std::vector<SMBiosStructure *> structures; 2125612Sgblack@eecs.umich.edu 2135615Sgblack@eecs.umich.edu public: 2145615Sgblack@eecs.umich.edu SMBiosTable(Params * p); 2155615Sgblack@eecs.umich.edu 2165615Sgblack@eecs.umich.edu Addr getTableAddr() 2175615Sgblack@eecs.umich.edu { 2185615Sgblack@eecs.umich.edu return smbiosHeader.intermediateHeader.tableAddr; 2195615Sgblack@eecs.umich.edu } 2205615Sgblack@eecs.umich.edu 2215615Sgblack@eecs.umich.edu void setTableAddr(Addr addr) 2225615Sgblack@eecs.umich.edu { 2235615Sgblack@eecs.umich.edu smbiosHeader.intermediateHeader.tableAddr = addr; 2245615Sgblack@eecs.umich.edu } 2255615Sgblack@eecs.umich.edu 2268706Sandreas.hansson@arm.com void writeOut(PortProxy* proxy, Addr addr, 2275615Sgblack@eecs.umich.edu Addr &headerSize, Addr &structSize); 2285612Sgblack@eecs.umich.edu}; 2295612Sgblack@eecs.umich.edu 2305612Sgblack@eecs.umich.edu} //SMBios 2315612Sgblack@eecs.umich.edu} //X86ISA 2325612Sgblack@eecs.umich.edu 2335612Sgblack@eecs.umich.edu#endif 234