summaryrefslogtreecommitdiff
path: root/dev
diff options
context:
space:
mode:
authorNathan Binkert <binkertn@umich.edu>2004-11-17 01:27:08 -0500
committerNathan Binkert <binkertn@umich.edu>2004-11-17 01:27:08 -0500
commit5f6328d9c63e44dd16be54a6fbab4fbdb3b78d7e (patch)
tree659cbca3325dc0aaed454585bea496f4f7b2a5ef /dev
parentc43c3f2af3d328e040b1e8f8149879b1cdb74c5f (diff)
downloadgem5-5f6328d9c63e44dd16be54a6fbab4fbdb3b78d7e.tar.xz
properly implement the fifo _reserved stuff.
dev/pktfifo.cc: need to checkpoint _reserved dev/pktfifo.hh: When clearing, clear _reserved size() is used for determining how many bytes are in the fifo ready to be pulled, so we don't want to add _reserved avail() on the other hand is used for determining how much free space is in the fifo for adding packets. adjust the implementation of empty() and full() to reflect this. --HG-- extra : convert_revision : 3281972b4b70ea5833d39ae7ce1e73648b3573b0
Diffstat (limited to 'dev')
-rw-r--r--dev/pktfifo.cc2
-rw-r--r--dev/pktfifo.hh12
2 files changed, 9 insertions, 5 deletions
diff --git a/dev/pktfifo.cc b/dev/pktfifo.cc
index cf09ae910..00c12ce68 100644
--- a/dev/pktfifo.cc
+++ b/dev/pktfifo.cc
@@ -36,6 +36,7 @@ PacketFifo::serialize(const string &base, ostream &os)
{
paramOut(os, base + ".size", _size);
paramOut(os, base + ".maxsize", _maxsize);
+ paramOut(os, base + ".reserved", _reserved);
paramOut(os, base + ".packets", fifo.size());
int i = 0;
@@ -54,6 +55,7 @@ PacketFifo::unserialize(const string &base, Checkpoint *cp,
{
paramIn(cp, section, base + ".size", _size);
paramIn(cp, section, base + ".maxsize", _maxsize);
+ paramIn(cp, section, base + ".reserved", _reserved);
int fifosize;
paramIn(cp, section, base + ".packets", fifosize);
diff --git a/dev/pktfifo.hh b/dev/pktfifo.hh
index 56e72947a..0c237949c 100644
--- a/dev/pktfifo.hh
+++ b/dev/pktfifo.hh
@@ -49,12 +49,13 @@ class PacketFifo
explicit PacketFifo(int max) : _maxsize(max), _size(0), _reserved(0) {}
virtual ~PacketFifo() {}
- int maxsize() const { return _maxsize; }
int packets() const { return fifo.size(); }
- int size() const { return _size + _reserved; }
- int avail() const { return maxsize() - size(); }
- bool empty() const { return size() == 0; }
- bool full() const { return size() >= maxsize(); }
+ int maxsize() const { return _maxsize; }
+ int size() const { return _size; }
+ int reserved() const { return _reserved; }
+ int avail() const { return _maxsize - _size - _reserved; }
+ bool empty() const { return size() <= 0; }
+ bool full() const { return avail() <= 0; }
int reserve(int len = 0)
{
@@ -91,6 +92,7 @@ class PacketFifo
{
fifo.clear();
_size = 0;
+ _reserved = 0;
}
/**