summaryrefslogtreecommitdiff
path: root/mem/packet.cc
diff options
context:
space:
mode:
authorAli Saidi <saidi@eecs.umich.edu>2006-05-01 18:53:28 -0400
committerAli Saidi <saidi@eecs.umich.edu>2006-05-01 18:53:28 -0400
commit8a9d270f6c17efa79f38e629c7cbcafa51aa8494 (patch)
tree75bbf24f940af2b8bf6fe00d42c56b1715bdf07b /mem/packet.cc
parenta8fbc4ec76169a6d735817df2aa8bc2085df5ac8 (diff)
downloadgem5-8a9d270f6c17efa79f38e629c7cbcafa51aa8494.tar.xz
move code from packet.hh to packet.cc and packet_impl.hh
fix very annoying not-compiler bug arch/sparc/regfile.hh: You have not included an out-of-class definition of your static members. See [9.4.2]/4 and about a billion gcc bug reports. If statements get around the problem through some magic, and than seems nicer that putting a definition of them in a c file somewhere. cpu/simple/cpu.cc: get() and set() do the conversion now dev/io_device.hh: need get() and set() defentions in all the devices mem/packet.cc: mem/packet.hh: move code from packet.hh to packet.cc mem/physical.cc: packet_impl needed for templated packet functions --HG-- extra : convert_revision : 6c11842aa928d9af7b4cabe826306fe1fe09e693
Diffstat (limited to 'mem/packet.cc')
-rw-r--r--mem/packet.cc56
1 files changed, 56 insertions, 0 deletions
diff --git a/mem/packet.cc b/mem/packet.cc
index 85b76919b..ecd2a7be1 100644
--- a/mem/packet.cc
+++ b/mem/packet.cc
@@ -34,5 +34,61 @@
#include "base/misc.hh"
#include "mem/packet.hh"
+
+/** delete the data pointed to in the data pointer. Ok to call to matter how
+ * data was allocted. */
+void
+Packet::deleteData() {
+ assert(staticData || dynamicData);
+ if (staticData)
+ return;
+
+ if (arrayData)
+ delete [] data;
+ else
+ delete data;
+}
+
+/** If there isn't data in the packet, allocate some. */
+void
+Packet::allocate() {
+ if (data)
+ return;
+ assert(!staticData);
+ dynamicData = true;
+ arrayData = true;
+ data = new uint8_t[size];
+}
+
+/** Do the packet modify the same addresses. */
+bool
+Packet::intersect(Packet *p) {
+ Addr s1 = addr;
+ Addr e1 = addr + size;
+ Addr s2 = p->addr;
+ Addr e2 = p->addr + p->size;
+
+ if (s1 >= s2 && s1 < e2)
+ return true;
+ if (e1 >= s2 && e1 < e2)
+ return true;
+ return false;
+}
+
+/** Minimally reset a packet so something like simple cpu can reuse it. */
+void
+Packet::reset() {
+ result = Unknown;
+ if (dynamicData) {
+ deleteData();
+ dynamicData = false;
+ arrayData = false;
+ time = curTick;
+ }
+}
+
+
+
+
bool fixPacket(Packet &func, Packet &timing)
{ panic("Need to implement!"); }