diff options
author | Kevin Lim <ktlim@umich.edu> | 2006-11-02 15:18:35 -0500 |
---|---|---|
committer | Kevin Lim <ktlim@umich.edu> | 2006-11-02 15:18:35 -0500 |
commit | c3485a654888f641dca23128f8197ef747c706d2 (patch) | |
tree | aec1f9bf2932bd10e5c834b61ba9fab4d3a409c0 | |
parent | 8d53f298a6efd3312cc1096b13b6be9e6a7fe02f (diff) | |
download | gem5-c3485a654888f641dca23128f8197ef747c706d2.tar.xz |
Implement device that will return BadAddress.
--HG--
extra : convert_revision : d833c20f691e01c84a0678f19f7d83f3ee50c0c1
-rw-r--r-- | src/dev/isa_fake.cc | 63 | ||||
-rw-r--r-- | src/dev/isa_fake.hh | 17 |
2 files changed, 80 insertions, 0 deletions
diff --git a/src/dev/isa_fake.cc b/src/dev/isa_fake.cc index 23761cd10..ccc9a1f7c 100644 --- a/src/dev/isa_fake.cc +++ b/src/dev/isa_fake.cc @@ -88,6 +88,38 @@ IsaFake::write(PacketPtr pkt) return pioDelay; } +BadAddr::BadAddr(Params *p) + : BasicPioDevice(p) +{ +} + +void +BadAddr::init() +{ + // Only init this device if it's connected to anything. + if (pioPort) + PioDevice::init(); +} + +Tick +BadAddr::read(PacketPtr pkt) +{ + assert(pkt->result == Packet::Unknown); + DPRINTF(Tsunami, "read to bad address va=%#x size=%d\n", + pkt->getAddr(), pkt->getSize()); + pkt->result = Packet::BadAddress; + return pioDelay; +} + +Tick +BadAddr::write(PacketPtr pkt) +{ + DPRINTF(Tsunami, "write to bad address va=%#x size=%d \n", + pkt->getAddr(), pkt->getSize()); + pkt->result = Packet::BadAddress; + return pioDelay; +} + BEGIN_DECLARE_SIM_OBJECT_PARAMS(IsaFake) Param<Addr> pio_addr; @@ -121,3 +153,34 @@ CREATE_SIM_OBJECT(IsaFake) } REGISTER_SIM_OBJECT("IsaFake", IsaFake) + +BEGIN_DECLARE_SIM_OBJECT_PARAMS(BadAddr) + + Param<Addr> pio_addr; + Param<Tick> pio_latency; + SimObjectParam<Platform *> platform; + SimObjectParam<System *> system; + +END_DECLARE_SIM_OBJECT_PARAMS(BadAddr) + +BEGIN_INIT_SIM_OBJECT_PARAMS(BadAddr) + + INIT_PARAM(pio_addr, "Device Address"), + INIT_PARAM(pio_latency, "Programmed IO latency"), + INIT_PARAM(platform, "platform"), + INIT_PARAM(system, "system object") + +END_INIT_SIM_OBJECT_PARAMS(BadAddr) + +CREATE_SIM_OBJECT(BadAddr) +{ + BadAddr::Params *p = new BadAddr::Params; + p->name = getInstanceName(); + p->pio_addr = pio_addr; + p->pio_delay = pio_latency; + p->platform = platform; + p->system = system; + return new BadAddr(p); +} + +REGISTER_SIM_OBJECT("BadAddr", BadAddr) diff --git a/src/dev/isa_fake.hh b/src/dev/isa_fake.hh index 366061c25..6665f1a78 100644 --- a/src/dev/isa_fake.hh +++ b/src/dev/isa_fake.hh @@ -79,4 +79,21 @@ class IsaFake : public BasicPioDevice virtual Tick write(PacketPtr pkt); }; +/** + * BadAddr is a device that fills the packet's result field with "BadAddress". + * @todo: Consider consolidating with IsaFake and similar classes. + */ +class BadAddr : public BasicPioDevice +{ + public: + struct Params : public BasicPioDevice::Params + { + }; + + BadAddr(Params *p); + virtual void init(); + virtual Tick read(PacketPtr pkt); + virtual Tick write(PacketPtr pkt); +}; + #endif // __TSUNAMI_FAKE_HH__ |