summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAuthor Name <r.d.strong@gmail.com>2008-12-14 23:29:49 -0800
committerAuthor Name <r.d.strong@gmail.com>2008-12-14 23:29:49 -0800
commit13f7fdcf67f9ed893a575e78ef170b42eda58ef4 (patch)
treef84a233422c303a669c3a6421a88ec0cc67b581d
parentdae531c0494bc6142ae3febc3623a4514a727614 (diff)
downloadgem5-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.
-rw-r--r--src/dev/ide_ctrl.cc58
-rw-r--r--src/dev/ide_ctrl.hh9
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 &section)
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 &section)
// Unserialize internal state
UNSERIALIZE_SCALAR(ioEnabled);
UNSERIALIZE_SCALAR(bmEnabled);
+ UNSERIALIZE_SCALAR(bmiAddr);
+ UNSERIALIZE_SCALAR(bmiSize);
}
void
-IdeController::Channel::unserialize(
- Checkpoint *cp, const std::string &section)
+IdeController::Channel::unserialize(const std::string &base, Checkpoint *cp,
+ const std::string &section)
{
- 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 &section);
+ void serialize(const std::string &base, std::ostream &os);
+ void unserialize(const std::string &base, Checkpoint *cp,
+ const std::string &section);
+ };
- } primary, secondary;
+ Channel primary;
+ Channel secondary;
/** Bus master interface (BMI) registers */
Addr bmiAddr, bmiSize;