From 13f7fdcf67f9ed893a575e78ef170b42eda58ef4 Mon Sep 17 00:00:00 2001 From: Author Name Date: Sun, 14 Dec 2008 23:29:49 -0800 Subject: [PATCH] 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. --- src/dev/ide_ctrl.cc | 58 ++++++++++++++++++++++++--------------------- 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; -- 2.30.2