properly implement the fifo _reserved stuff.
authorNathan Binkert <binkertn@umich.edu>
Wed, 17 Nov 2004 06:27:08 +0000 (01:27 -0500)
committerNathan Binkert <binkertn@umich.edu>
Wed, 17 Nov 2004 06:27:08 +0000 (01:27 -0500)
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

dev/pktfifo.cc
dev/pktfifo.hh

index cf09ae910f20ea0dca2eee8f1e806b543829e7ce..00c12ce6810e363c2579e6b8d284d067181b596a 100644 (file)
@@ -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);
 
index 56e72947a3ea93af2f273f19bcb50e644ce9b1a5..0c237949c7d5f8dc678d4c83034852ec99570231 100644 (file)
@@ -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;
     }
 
 /**