summaryrefslogtreecommitdiff
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-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;