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/ide_ctrl.cc | |
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/ide_ctrl.cc')
-rw-r--r-- | src/dev/ide_ctrl.cc | 58 |
1 files changed, 31 insertions, 27 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); } |