diff options
author | Author Name <r.d.strong@gmail.com> | 2008-12-14 23:29:49 -0800 |
---|---|---|
committer | Author Name <r.d.strong@gmail.com> | 2008-12-14 23:29:49 -0800 |
commit | 13f7fdcf67f9ed893a575e78ef170b42eda58ef4 (patch) | |
tree | f84a233422c303a669c3a6421a88ec0cc67b581d /src/dev | |
parent | dae531c0494bc6142ae3febc3623a4514a727614 (diff) | |
download | gem5-13f7fdcf67f9ed893a575e78ef170b42eda58ef4.tar.xz |
The ide_ctrl serialize and unserialize were broken.
Multiple channels were saving their state under the
same name. This patch separates the saved state of
the primary and secondary channel.
Diffstat (limited to 'src/dev')
-rw-r--r-- | src/dev/ide_ctrl.cc | 58 | ||||
-rw-r--r-- | src/dev/ide_ctrl.hh | 9 |
2 files changed, 37 insertions, 30 deletions
diff --git a/src/dev/ide_ctrl.cc b/src/dev/ide_ctrl.cc index 454bafac1..3d4e71888 100644 --- a/src/dev/ide_ctrl.cc +++ b/src/dev/ide_ctrl.cc @@ -501,8 +501,8 @@ IdeController::serialize(std::ostream &os) PciDev::serialize(os); // Serialize channels - primary.serialize(os); - secondary.serialize(os); + primary.serialize("primary", os); + secondary.serialize("secondary", os); // Serialize config registers SERIALIZE_SCALAR(primaryTiming); @@ -515,23 +515,25 @@ IdeController::serialize(std::ostream &os) // Serialize internal state SERIALIZE_SCALAR(ioEnabled); SERIALIZE_SCALAR(bmEnabled); + SERIALIZE_SCALAR(bmiAddr); + SERIALIZE_SCALAR(bmiSize); } void -IdeController::Channel::serialize(std::ostream &os) +IdeController::Channel::serialize(const std::string &base, std::ostream &os) { - SERIALIZE_SCALAR(cmdAddr); - SERIALIZE_SCALAR(cmdSize); - SERIALIZE_SCALAR(ctrlAddr); - SERIALIZE_SCALAR(ctrlSize); + paramOut(os, base + ".cmdAddr", cmdAddr); + paramOut(os, base + ".cmdSize", cmdSize); + paramOut(os, base + ".ctrlAddr", ctrlAddr); + paramOut(os, base + ".ctrlSize", ctrlSize); uint8_t command = bmiRegs.command; - SERIALIZE_SCALAR(command); - SERIALIZE_SCALAR(bmiRegs.reserved0); + paramOut(os, base + ".bmiRegs.command", command); + paramOut(os, base + ".bmiRegs.reserved0", bmiRegs.reserved0); uint8_t status = bmiRegs.status; - SERIALIZE_SCALAR(status); - SERIALIZE_SCALAR(bmiRegs.reserved1); - SERIALIZE_SCALAR(bmiRegs.bmidtp); - SERIALIZE_SCALAR(selectBit); + paramOut(os, base + ".bmiRegs.status", status); + paramOut(os, base + ".bmiRegs.reserved1", bmiRegs.reserved1); + paramOut(os, base + ".bmiRegs.bmidtp", bmiRegs.bmidtp); + paramOut(os, base + ".selectBit", selectBit); } void @@ -541,8 +543,8 @@ IdeController::unserialize(Checkpoint *cp, const std::string §ion) PciDev::unserialize(cp, section); // Unserialize channels - primary.unserialize(cp, section); - secondary.unserialize(cp, section); + primary.unserialize("primary", cp, section); + secondary.unserialize("secondary", cp, section); // Unserialize config registers UNSERIALIZE_SCALAR(primaryTiming); @@ -555,26 +557,28 @@ IdeController::unserialize(Checkpoint *cp, const std::string §ion) // Unserialize internal state UNSERIALIZE_SCALAR(ioEnabled); UNSERIALIZE_SCALAR(bmEnabled); + UNSERIALIZE_SCALAR(bmiAddr); + UNSERIALIZE_SCALAR(bmiSize); } void -IdeController::Channel::unserialize( - Checkpoint *cp, const std::string §ion) +IdeController::Channel::unserialize(const std::string &base, Checkpoint *cp, + const std::string §ion) { - UNSERIALIZE_SCALAR(cmdAddr); - UNSERIALIZE_SCALAR(cmdSize); - UNSERIALIZE_SCALAR(ctrlAddr); - UNSERIALIZE_SCALAR(ctrlSize); + paramIn(cp, section, base + ".cmdAddr", cmdAddr); + paramIn(cp, section, base + ".cmdSize", cmdSize); + paramIn(cp, section, base + ".ctrlAddr", ctrlAddr); + paramIn(cp, section, base + ".ctrlSize", ctrlSize); uint8_t command; - UNSERIALIZE_SCALAR(command); + paramIn(cp, section, base +".bmiRegs.command", command); bmiRegs.command = command; - UNSERIALIZE_SCALAR(bmiRegs.reserved0); + paramIn(cp, section, base + ".bmiRegs.reserved0", bmiRegs.reserved0); uint8_t status; - UNSERIALIZE_SCALAR(status); + paramIn(cp, section, base + ".bmiRegs.status", status); bmiRegs.status = status; - UNSERIALIZE_SCALAR(bmiRegs.reserved1); - UNSERIALIZE_SCALAR(bmiRegs.bmidtp); - UNSERIALIZE_SCALAR(selectBit); + paramIn(cp, section, base + ".bmiRegs.reserved1", bmiRegs.reserved1); + paramIn(cp, section, base + ".bmiRegs.bmidtp", bmiRegs.bmidtp); + paramIn(cp, section, base + ".selectBit", selectBit); select(selectBit); } diff --git a/src/dev/ide_ctrl.hh b/src/dev/ide_ctrl.hh index 6a71a6640..89dc1ee9d 100644 --- a/src/dev/ide_ctrl.hh +++ b/src/dev/ide_ctrl.hh @@ -111,10 +111,13 @@ class IdeController : public PciDev Channel(std::string newName, Addr _cmdSize, Addr _ctrlSize); ~Channel(); - void serialize(std::ostream &os); - void unserialize(Checkpoint *cp, const std::string §ion); + void serialize(const std::string &base, std::ostream &os); + void unserialize(const std::string &base, Checkpoint *cp, + const std::string §ion); + }; - } primary, secondary; + Channel primary; + Channel secondary; /** Bus master interface (BMI) registers */ Addr bmiAddr, bmiSize; |