45#include "params/X86SMBiosBiosInformation.hh"
46#include "params/X86SMBiosSMBiosStructure.hh"
47#include "params/X86SMBiosSMBiosTable.hh"
54const uint8_t X86ISA::smbios::SMBiosTable::
55 SMBiosHeader::formattedArea[] = {0,0,0,0,0};
56const uint8_t X86ISA::smbios::SMBiosTable::
57 SMBiosHeader::entryPointLength = 0x1F;
58const uint8_t X86ISA::smbios::SMBiosTable::
59 SMBiosHeader::entryPointRevision = 0;
60const char X86ISA::smbios::SMBiosTable::
61 SMBiosHeader::IntermediateHeader::anchorString[] =
"_DMI_";
68 typename T::iterator vecIt;
69 for (vecIt =
vec.begin(); vecIt !=
vec.end(); vecIt++) {
70 val |= (1 << (*vecIt));
90 const Params &
p, uint8_t _type) :
101 const uint8_t nullTerminator = 0;
111 offset += it->length() + 1;
124 size += it->length() + 1;
136 if (new_string.length() == 0)
151 int n,
const std::string &new_string)
191 uint16_t characteristicExtBytesGuest =
193 proxy.
writeBlob(
addr + 0x12, &characteristicExtBytesGuest, 2);
210 assert(
p.major_version <= 9);
211 assert(
p.minor_version <= 9);
213 (
p.major_version << 4) |
p.minor_version;
225 uint8_t mainChecksum = 0;
228 for (
int i = 0;
i < 4;
i++)
243 for (
int i = 0;
i < 5;
i++)
249 uint8_t intChecksum = 0;
253 for (
int i = 0;
i < 5;
i++)
254 intChecksum +=
smbiosHeader.intermediateHeader.anchorString[
i];
259 uint32_t tableAddrGuest =
262 for (
int i = 0;
i < 4;
i++) {
263 intChecksum += tableAddrGuest;
264 tableAddrGuest >>= 8;
269 for (
int i = 0;
i < 2;
i++) {
270 intChecksum += numStructs;
276 intChecksum +=
smbiosHeader.intermediateHeader.smbiosBCDRevision;
284 uint16_t maxSize = 0;
287 uint16_t size = (*it)->writeOut(proxy,
base +
offset);
299 maxSize =
htole(maxSize);
301 for (
int i = 0;
i < 2;
i++) {
302 mainChecksum += maxSize;
307 mainChecksum = -mainChecksum;
314 uint16_t tableSize =
offset;
315 tableSize =
htole(tableSize);
317 for (
int i = 0;
i < 2;
i++) {
318 intChecksum += tableSize;
322 intChecksum = -intChecksum;
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,...
This object is a proxy for a port or other object which implements the functional response protocol,...
void writeBlob(Addr addr, const void *p, uint64_t size) const
Same as tryWriteBlob, but insists on success.
virtual uint8_t getLength()
SMBiosStructure(const Params &p, uint8_t _type)
int addString(const std::string &new_string)
std::string readString(int n)
std::vector< std::string > strings
X86SMBiosSMBiosStructureParams Params
void setString(int n, const std::string &new_string)
void writeOutStrings(PortProxy &proxy, Addr addr)
virtual uint16_t writeOut(PortProxy &proxy, Addr addr)
void writeOut(PortProxy &proxy, Addr addr, Addr &headerSize, Addr &structSize)
struct gem5::X86ISA::smbios::SMBiosTable::SMBiosHeader smbiosHeader
std::vector< SMBiosStructure * > structures
SMBiosTable(const Params &p)
X86SMBiosSMBiosTableParams Params
SimObject(const Params &p)
Copyright (c) 2024 Arm Limited All rights reserved.
uint64_t composeBitVector(T vec)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Minor contains all the definitions within the MinorCPU apart from the CPU class itself.
PortProxy Object Declaration.