summaryrefslogtreecommitdiff
path: root/src/dev/ide_ctrl.cc
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/dev/ide_ctrl.cc
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/dev/ide_ctrl.cc')
-rw-r--r--src/dev/ide_ctrl.cc58
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 &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);
}