misc: Delete the now unnecessary create methods.
[gem5.git] / src / mem / bridge.hh
index 6aebe5204d87db465203ab0c3229ad7b77f7130a..8f74478e1a72c8147a8a371666f2c5b4af76c969 100644 (file)
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Authors: Ali Saidi
- *          Steve Reinhardt
- *          Andreas Hansson
  */
 
 /**
  * @file
- * Declaration of a memory-mapped bridge that connects a master
- * and a slave through a request and response queue.
+ * Declaration of a memory-mapped bridge that connects a requestor
+ * and a responder through a request and response queue.
  */
 
 #ifndef __MEM_BRIDGE_HH__
 #include <deque>
 
 #include "base/types.hh"
-#include "mem/mem_object.hh"
+#include "mem/port.hh"
 #include "params/Bridge.hh"
+#include "sim/clocked_object.hh"
 
 /**
  * A bridge is used to interface two different crossbars (or in general a
- * memory-mapped master and slave), with buffering for requests and
+ * memory-mapped requestor and responder), with buffering for requests and
  * responses. The bridge has a fixed delay for packets passing through
  * it and responds to a fixed set of address ranges.
  *
- * The bridge comprises a slave port and a master port, that buffer
+ * The bridge comprises a response port and a request port, that buffer
  * outgoing responses and requests respectively. Buffer space is
  * reserved when a request arrives, also reserving response space
  * before forwarding the request. If there is no space present, then
  * the bridge will delay accepting the packet until space becomes
  * available.
  */
-class Bridge : public MemObject
+class Bridge : public ClockedObject
 {
   protected:
 
@@ -90,16 +87,16 @@ class Bridge : public MemObject
         { }
     };
 
-    // Forward declaration to allow the slave port to have a pointer
-    class BridgeMasterPort;
+    // Forward declaration to allow the response port to have a pointer
+    class BridgeRequestPort;
 
     /**
      * The port on the side that receives requests and sends
-     * responses. The slave port has a set of address ranges that it
-     * is responsible for. The slave port also has a buffer for the
+     * responses. The response port has a set of address ranges that it
+     * is responsible for. The response port also has a buffer for the
      * responses not yet sent.
      */
-    class BridgeSlavePort : public SlavePort
+    class BridgeResponsePort : public ResponsePort
     {
 
       private:
@@ -108,9 +105,9 @@ class Bridge : public MemObject
         Bridge& bridge;
 
         /**
-         * Master port on the other side of the bridge.
+         * Request port on the other side of the bridge.
          */
-        BridgeMasterPort& masterPort;
+        BridgeRequestPort& memSidePort;
 
         /** Minimum request delay though this bridge. */
         const Cycles delay;
@@ -135,6 +132,12 @@ class Bridge : public MemObject
         /** Max queue size for reserved responses. */
         unsigned int respQueueLimit;
 
+        /**
+         * Upstream caches need this packet until true is returned, so
+         * hold it for deletion until a subsequent call
+         */
+        std::unique_ptr<Packet> pendingDelete;
+
         /**
          * Is this side blocked from accepting new response packets.
          *
@@ -150,23 +153,23 @@ class Bridge : public MemObject
         void trySendTiming();
 
         /** Send event for the response queue. */
-        EventWrapper<BridgeSlavePort,
-                     &BridgeSlavePort::trySendTiming> sendEvent;
+        EventFunctionWrapper sendEvent;
 
       public:
 
         /**
-         * Constructor for the BridgeSlavePort.
+         * Constructor for the BridgeResponsePort.
          *
          * @param _name the port name including the owner
          * @param _bridge the structural owner
-         * @param _masterPort the master port on the other side of the bridge
+         * @param _memSidePort the request port on the other
+         *                       side of the bridge
          * @param _delay the delay in cycles from receiving to sending
          * @param _resp_limit the size of the response queue
          * @param _ranges a number of address ranges to forward
          */
-        BridgeSlavePort(const std::string& _name, Bridge& _bridge,
-                        BridgeMasterPort& _masterPort, Cycles _delay,
+        BridgeResponsePort(const std::string& _name, Bridge& _bridge,
+                        BridgeRequestPort& _memSidePort, Cycles _delay,
                         int _resp_limit, std::vector<AddrRange> _ranges);
 
         /**
@@ -211,10 +214,10 @@ class Bridge : public MemObject
 
     /**
      * Port on the side that forwards requests and receives
-     * responses. The master port has a buffer for the requests not
+     * responses. The request port has a buffer for the requests not
      * yet sent.
      */
-    class BridgeMasterPort : public MasterPort
+    class BridgeRequestPort : public RequestPort
     {
 
       private:
@@ -223,9 +226,9 @@ class Bridge : public MemObject
         Bridge& bridge;
 
         /**
-         * The slave port on the other side of the bridge.
+         * The response port on the other side of the bridge.
          */
-        BridgeSlavePort& slavePort;
+        BridgeResponsePort& cpuSidePort;
 
         /** Minimum delay though this bridge. */
         const Cycles delay;
@@ -249,22 +252,22 @@ class Bridge : public MemObject
         void trySendTiming();
 
         /** Send event for the request queue. */
-        EventWrapper<BridgeMasterPort,
-                     &BridgeMasterPort::trySendTiming> sendEvent;
+        EventFunctionWrapper sendEvent;
 
       public:
 
         /**
-         * Constructor for the BridgeMasterPort.
+         * Constructor for the BridgeRequestPort.
          *
          * @param _name the port name including the owner
          * @param _bridge the structural owner
-         * @param _slavePort the slave port on the other side of the bridge
+         * @param _cpuSidePort the response port on the other side of
+         * the bridge
          * @param _delay the delay in cycles from receiving to sending
          * @param _req_limit the size of the request queue
          */
-        BridgeMasterPort(const std::string& _name, Bridge& _bridge,
-                         BridgeSlavePort& _slavePort, Cycles _delay,
+        BridgeRequestPort(const std::string& _name, Bridge& _bridge,
+                         BridgeResponsePort& _cpuSidePort, Cycles _delay,
                          int _req_limit);
 
         /**
@@ -291,7 +294,7 @@ class Bridge : public MemObject
          *
          * @return true if we find a match
          */
-        bool checkFunctional(PacketPtr pkt);
+        bool trySatisfyFunctional(PacketPtr pkt);
 
       protected:
 
@@ -304,24 +307,22 @@ class Bridge : public MemObject
         void recvReqRetry();
     };
 
-    /** Slave port of the bridge. */
-    BridgeSlavePort slavePort;
+    /** Response port of the bridge. */
+    BridgeResponsePort cpuSidePort;
 
-    /** Master port of the bridge. */
-    BridgeMasterPort masterPort;
+    /** Request port of the bridge. */
+    BridgeRequestPort memSidePort;
 
   public:
 
-    virtual BaseMasterPort& getMasterPort(const std::string& if_name,
-                                          PortID idx = InvalidPortID);
-    virtual BaseSlavePort& getSlavePort(const std::string& if_name,
-                                        PortID idx = InvalidPortID);
+    Port &getPort(const std::string &if_name,
+                  PortID idx=InvalidPortID) override;
 
-    virtual void init();
+    void init() override;
 
     typedef BridgeParams Params;
 
-    Bridge(Params *p);
+    Bridge(const Params &p);
 };
 
 #endif //__MEM_BRIDGE_HH__