76,82c76,77
< : System(p)
< {
< smbiosTable = new X86ISA::SMBios::SMBiosTable;
< smbiosTable->smbiosHeader.majorVersion = 2;
< smbiosTable->smbiosHeader.minorVersion = 5;
< smbiosTable->smbiosHeader.intermediateHeader.smbiosBCDRevision = 0x25;
< }
---
> : System(p), smbiosTable(p->smbios_table)
> {}
238a234,236
> Addr ebdaPos = 0xF0000;
>
> Addr headerSize, structSize;
240c238,239
< writeOutSMBiosTable(0xF0000);
---
> writeOutSMBiosTable(ebdaPos, headerSize, structSize);
> ebdaPos += (headerSize + structSize);
244c243,244
< X86System::writeOutSMBiosTable(Addr header, Addr table)
---
> X86System::writeOutSMBiosTable(Addr header,
> Addr &headerSize, Addr &structSize, Addr table)
251,257c251,253
< if (!table) {
< if (!smbiosTable->smbiosHeader.intermediateHeader.tableAddr)
< smbiosTable->smbiosHeader.
< intermediateHeader.tableAddr = header + 0x1F;
< } else {
< smbiosTable->smbiosHeader.intermediateHeader.tableAddr = table;
< }
---
> if (!table)
> table = header + 0x1F;
> smbiosTable->setTableAddr(table);
259c255,260
< smbiosTable->writeOut(physPort, header);
---
> smbiosTable->writeOut(physPort, header, headerSize, structSize);
>
> // Do some bounds checking to make sure we at least didn't step on
> // ourselves.
> assert(header > table || header + headerSize <= table);
> assert(table > header || table + structSize <= header);