mem: Put gem5 protocols in their own directory.
authorGabe Black <gabeblack@google.com>
Fri, 16 Aug 2019 20:21:56 +0000 (13:21 -0700)
committerGabe Black <gabeblack@google.com>
Fri, 23 Aug 2019 21:13:33 +0000 (21:13 +0000)
This reduces clutter in the src/mem directory, and makes it clear that
those protocols are for the classic gem5 memory system, not ruby, TLM,
etc.

Change-Id: I6cf6b21134d82f4f01991e4fe92dbea8c7e82081
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20231
Tested-by: kokoro <noreply+kokoro@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
15 files changed:
src/mem/SConscript
src/mem/atomic_protocol.cc [deleted file]
src/mem/atomic_protocol.hh [deleted file]
src/mem/functional_protocol.cc [deleted file]
src/mem/functional_protocol.hh [deleted file]
src/mem/port.hh
src/mem/protocol/SConscript [new file with mode: 0644]
src/mem/protocol/atomic.cc [new file with mode: 0644]
src/mem/protocol/atomic.hh [new file with mode: 0644]
src/mem/protocol/functional.cc [new file with mode: 0644]
src/mem/protocol/functional.hh [new file with mode: 0644]
src/mem/protocol/timing.cc [new file with mode: 0644]
src/mem/protocol/timing.hh [new file with mode: 0644]
src/mem/timing_protocol.cc [deleted file]
src/mem/timing_protocol.hh [deleted file]

index 9ebb074361495798e406fc61d674dea77f9ba816..95d8654b1d4f66db24da6615b73705ff6a13dbce 100644 (file)
@@ -60,14 +60,12 @@ SimObject('MemDelay.py')
 
 Source('abstract_mem.cc')
 Source('addr_mapper.cc')
-Source('atomic_protocol.cc')
 Source('bridge.cc')
 Source('coherent_xbar.cc')
 Source('drampower.cc')
 Source('dram_ctrl.cc')
 Source('external_master.cc')
 Source('external_slave.cc')
-Source('functional_protocol.cc')
 Source('mem_object.cc')
 Source('mport.cc')
 Source('noncoherent_xbar.cc')
@@ -77,7 +75,6 @@ Source('packet_queue.cc')
 Source('port_proxy.cc')
 Source('physical.cc')
 Source('secure_port_proxy.cc')
-Source('timing_protocol.cc')
 Source('simple_mem.cc')
 Source('snoop_filter.cc')
 Source('stack_dist_calc.cc')
diff --git a/src/mem/atomic_protocol.cc b/src/mem/atomic_protocol.cc
deleted file mode 100644 (file)
index 6aecc40..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2012,2015,2017 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Copyright (c) 2002-2005 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * 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: Steve Reinhardt
- *          Andreas Hansson
- *          William Wang
- */
-
-#include "mem/atomic_protocol.hh"
-
-#include "base/trace.hh"
-
-/* The request protocol. */
-
-Tick
-AtomicRequestProtocol::send(AtomicResponseProtocol *peer, PacketPtr pkt)
-{
-    assert(pkt->isRequest());
-    return peer->recvAtomic(pkt);
-}
-
-Tick
-AtomicRequestProtocol::sendBackdoor(AtomicResponseProtocol *peer,
-        PacketPtr pkt, MemBackdoorPtr &backdoor)
-{
-    assert(pkt->isRequest());
-    return peer->recvAtomicBackdoor(pkt, backdoor);
-}
-
-/* The response protocol. */
-
-Tick
-AtomicResponseProtocol::sendSnoop(AtomicRequestProtocol *peer, PacketPtr pkt)
-{
-    assert(pkt->isRequest());
-    return peer->recvAtomicSnoop(pkt);
-}
diff --git a/src/mem/atomic_protocol.hh b/src/mem/atomic_protocol.hh
deleted file mode 100644 (file)
index bb2de0a..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2011-2012,2015,2017 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Copyright (c) 2002-2005 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * 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: Ron Dreslinski
- *          Andreas Hansson
- *          William Wang
- */
-
-#ifndef __MEM_ATOMIC_PROTOCOL_HH__
-#define __MEM_ATOMIC_PROTOCOL_HH__
-
-#include "mem/backdoor.hh"
-#include "mem/packet.hh"
-
-class AtomicResponseProtocol;
-
-class AtomicRequestProtocol
-{
-    friend class AtomicResponseProtocol;
-
-  protected:
-    /**
-     * Send an atomic request packet, where the data is moved and the
-     * state is updated in zero time, without interleaving with other
-     * memory accesses.
-     *
-     * @param peer Peer to send packet to.
-     * @param pkt Packet to send.
-     *
-     * @return Estimated latency of access.
-     */
-    Tick send(AtomicResponseProtocol *peer, PacketPtr pkt);
-
-    /**
-     * Send an atomic request packet like above, but also request a backdoor
-     * to the data being accessed.
-     *
-     * @param peer Peer to send packet to.
-     * @param pkt Packet to send.
-     * @param backdoor Can be set to a back door pointer by the target to let
-     *        caller have direct access to the requested data.
-     *
-     * @return Estimated latency of access.
-     */
-    Tick sendBackdoor(AtomicResponseProtocol *peer, PacketPtr pkt,
-                      MemBackdoorPtr &backdoor);
-
-    /**
-     * Receive an atomic snoop request packet from our peer.
-     */
-    virtual Tick recvAtomicSnoop(PacketPtr pkt) = 0;
-};
-
-class AtomicResponseProtocol
-{
-    friend class AtomicRequestProtocol;
-
-  protected:
-    /**
-     * Send an atomic snoop request packet, where the data is moved
-     * and the state is updated in zero time, without interleaving
-     * with other memory accesses.
-     *
-     * @param peer Peer to send packet to.
-     * @param pkt Snoop packet to send.
-     *
-     * @return Estimated latency of access.
-     */
-    Tick sendSnoop(AtomicRequestProtocol *peer, PacketPtr pkt);
-
-    /**
-     * Receive an atomic request packet from the peer.
-     */
-    virtual Tick recvAtomic(PacketPtr pkt) = 0;
-
-    /**
-     * Receive an atomic request packet from the peer, and optionally
-     * provide a backdoor to the data being accessed.
-     */
-    virtual Tick recvAtomicBackdoor(
-            PacketPtr pkt, MemBackdoorPtr &backdoor) = 0;
-};
-
-#endif //__MEM_ATOMIC_PROTOCOL_HH__
diff --git a/src/mem/functional_protocol.cc b/src/mem/functional_protocol.cc
deleted file mode 100644 (file)
index be12953..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2012,2015,2017 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Copyright (c) 2002-2005 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * 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: Steve Reinhardt
- *          Andreas Hansson
- *          William Wang
- */
-
-#include "mem/functional_protocol.hh"
-
-/* The request protocol. */
-
-void
-FunctionalRequestProtocol::send(
-        FunctionalResponseProtocol *peer, PacketPtr pkt) const
-{
-    assert(pkt->isRequest());
-    return peer->recvFunctional(pkt);
-}
-
-/* The response protocol. */
-
-void
-FunctionalResponseProtocol::sendSnoop(
-        FunctionalRequestProtocol *peer, PacketPtr pkt) const
-{
-    assert(pkt->isRequest());
-    return peer->recvFunctionalSnoop(pkt);
-}
diff --git a/src/mem/functional_protocol.hh b/src/mem/functional_protocol.hh
deleted file mode 100644 (file)
index 443b980..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2011-2012,2015,2017 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Copyright (c) 2002-2005 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * 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: Ron Dreslinski
- *          Andreas Hansson
- *          William Wang
- */
-
-#ifndef __MEM_FUNCTIONAL_PROTOCOL_HH__
-#define __MEM_FUNCTIONAL_PROTOCOL_HH__
-
-#include "mem/packet.hh"
-
-class FunctionalResponseProtocol;
-
-class FunctionalRequestProtocol
-{
-    friend class FunctionalResponseProtocol;
-
-  protected:
-    /**
-     * Send a functional request packet, where the data is instantly
-     * updated everywhere in the memory system, without affecting the
-     * current state of any block or moving the block.
-     *
-     * @param pkt Packet to send.
-     */
-    void send(FunctionalResponseProtocol *peer, PacketPtr pkt) const;
-
-    /**
-     * Receive a functional snoop request packet from the peer.
-     */
-    virtual void recvFunctionalSnoop(PacketPtr pkt) = 0;
-};
-
-class FunctionalResponseProtocol
-{
-    friend class FunctionalRequestProtocol;
-
-  protected:
-    /**
-     * Send a functional snoop request packet, where the data is
-     * instantly updated everywhere in the memory system, without
-     * affecting the current state of any block or moving the block.
-     *
-     * @param pkt Snoop packet to send.
-     */
-    void sendSnoop(FunctionalRequestProtocol *peer, PacketPtr pkt) const;
-
-    /**
-     * Receive a functional request packet from the peer.
-     */
-    virtual void recvFunctional(PacketPtr pkt) = 0;
-};
-
-#endif //__MEM_FUNCTIONAL_PROTOCOL_HH__
index 16257ed4fda4f8e194f18cf562b1bd957b5a1c5b..847bd1e7dc81ce54c18ab679ebc30cfbcea38dfd 100644 (file)
 #define __MEM_PORT_HH__
 
 #include "base/addr_range.hh"
-#include "mem/atomic_protocol.hh"
-#include "mem/functional_protocol.hh"
 #include "mem/packet.hh"
-#include "mem/timing_protocol.hh"
+#include "mem/protocol/atomic.hh"
+#include "mem/protocol/functional.hh"
+#include "mem/protocol/timing.hh"
 #include "sim/port.hh"
 
 class SimObject;
diff --git a/src/mem/protocol/SConscript b/src/mem/protocol/SConscript
new file mode 100644 (file)
index 0000000..abab5cc
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2019 Google Inc.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# 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: Gabe Black
+
+Import('*')
+
+Source('atomic.cc')
+Source('functional.cc')
+Source('timing.cc')
diff --git a/src/mem/protocol/atomic.cc b/src/mem/protocol/atomic.cc
new file mode 100644 (file)
index 0000000..3ddd715
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2012,2015,2017 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 2002-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * 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: Steve Reinhardt
+ *          Andreas Hansson
+ *          William Wang
+ */
+
+#include "mem/protocol/atomic.hh"
+
+#include "base/trace.hh"
+
+/* The request protocol. */
+
+Tick
+AtomicRequestProtocol::send(AtomicResponseProtocol *peer, PacketPtr pkt)
+{
+    assert(pkt->isRequest());
+    return peer->recvAtomic(pkt);
+}
+
+Tick
+AtomicRequestProtocol::sendBackdoor(AtomicResponseProtocol *peer,
+        PacketPtr pkt, MemBackdoorPtr &backdoor)
+{
+    assert(pkt->isRequest());
+    return peer->recvAtomicBackdoor(pkt, backdoor);
+}
+
+/* The response protocol. */
+
+Tick
+AtomicResponseProtocol::sendSnoop(AtomicRequestProtocol *peer, PacketPtr pkt)
+{
+    assert(pkt->isRequest());
+    return peer->recvAtomicSnoop(pkt);
+}
diff --git a/src/mem/protocol/atomic.hh b/src/mem/protocol/atomic.hh
new file mode 100644 (file)
index 0000000..bbbd408
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2011-2012,2015,2017 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 2002-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * 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: Ron Dreslinski
+ *          Andreas Hansson
+ *          William Wang
+ */
+
+#ifndef __MEM_GEM5_PROTOCOL_ATOMIC_HH__
+#define __MEM_GEM5_PROTOCOL_ATOMIC_HH__
+
+#include "mem/backdoor.hh"
+#include "mem/packet.hh"
+
+class AtomicResponseProtocol;
+
+class AtomicRequestProtocol
+{
+    friend class AtomicResponseProtocol;
+
+  protected:
+    /**
+     * Send an atomic request packet, where the data is moved and the
+     * state is updated in zero time, without interleaving with other
+     * memory accesses.
+     *
+     * @param peer Peer to send packet to.
+     * @param pkt Packet to send.
+     *
+     * @return Estimated latency of access.
+     */
+    Tick send(AtomicResponseProtocol *peer, PacketPtr pkt);
+
+    /**
+     * Send an atomic request packet like above, but also request a backdoor
+     * to the data being accessed.
+     *
+     * @param peer Peer to send packet to.
+     * @param pkt Packet to send.
+     * @param backdoor Can be set to a back door pointer by the target to let
+     *        caller have direct access to the requested data.
+     *
+     * @return Estimated latency of access.
+     */
+    Tick sendBackdoor(AtomicResponseProtocol *peer, PacketPtr pkt,
+                      MemBackdoorPtr &backdoor);
+
+    /**
+     * Receive an atomic snoop request packet from our peer.
+     */
+    virtual Tick recvAtomicSnoop(PacketPtr pkt) = 0;
+};
+
+class AtomicResponseProtocol
+{
+    friend class AtomicRequestProtocol;
+
+  protected:
+    /**
+     * Send an atomic snoop request packet, where the data is moved
+     * and the state is updated in zero time, without interleaving
+     * with other memory accesses.
+     *
+     * @param peer Peer to send packet to.
+     * @param pkt Snoop packet to send.
+     *
+     * @return Estimated latency of access.
+     */
+    Tick sendSnoop(AtomicRequestProtocol *peer, PacketPtr pkt);
+
+    /**
+     * Receive an atomic request packet from the peer.
+     */
+    virtual Tick recvAtomic(PacketPtr pkt) = 0;
+
+    /**
+     * Receive an atomic request packet from the peer, and optionally
+     * provide a backdoor to the data being accessed.
+     */
+    virtual Tick recvAtomicBackdoor(
+            PacketPtr pkt, MemBackdoorPtr &backdoor) = 0;
+};
+
+#endif //__MEM_GEM5_PROTOCOL_ATOMIC_HH__
diff --git a/src/mem/protocol/functional.cc b/src/mem/protocol/functional.cc
new file mode 100644 (file)
index 0000000..6ae7c62
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2012,2015,2017 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 2002-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * 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: Steve Reinhardt
+ *          Andreas Hansson
+ *          William Wang
+ */
+
+#include "mem/protocol/functional.hh"
+
+/* The request protocol. */
+
+void
+FunctionalRequestProtocol::send(
+        FunctionalResponseProtocol *peer, PacketPtr pkt) const
+{
+    assert(pkt->isRequest());
+    return peer->recvFunctional(pkt);
+}
+
+/* The response protocol. */
+
+void
+FunctionalResponseProtocol::sendSnoop(
+        FunctionalRequestProtocol *peer, PacketPtr pkt) const
+{
+    assert(pkt->isRequest());
+    return peer->recvFunctionalSnoop(pkt);
+}
diff --git a/src/mem/protocol/functional.hh b/src/mem/protocol/functional.hh
new file mode 100644 (file)
index 0000000..ffd27a4
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2011-2012,2015,2017 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 2002-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * 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: Ron Dreslinski
+ *          Andreas Hansson
+ *          William Wang
+ */
+
+#ifndef __MEM_GEM5_PROTOCOL_FUNCTIONAL_HH__
+#define __MEM_GEM5_PROTOCOL_FUNCTIONAL_HH__
+
+#include "mem/packet.hh"
+
+class FunctionalResponseProtocol;
+
+class FunctionalRequestProtocol
+{
+    friend class FunctionalResponseProtocol;
+
+  protected:
+    /**
+     * Send a functional request packet, where the data is instantly
+     * updated everywhere in the memory system, without affecting the
+     * current state of any block or moving the block.
+     *
+     * @param pkt Packet to send.
+     */
+    void send(FunctionalResponseProtocol *peer, PacketPtr pkt) const;
+
+    /**
+     * Receive a functional snoop request packet from the peer.
+     */
+    virtual void recvFunctionalSnoop(PacketPtr pkt) = 0;
+};
+
+class FunctionalResponseProtocol
+{
+    friend class FunctionalRequestProtocol;
+
+  protected:
+    /**
+     * Send a functional snoop request packet, where the data is
+     * instantly updated everywhere in the memory system, without
+     * affecting the current state of any block or moving the block.
+     *
+     * @param pkt Snoop packet to send.
+     */
+    void sendSnoop(FunctionalRequestProtocol *peer, PacketPtr pkt) const;
+
+    /**
+     * Receive a functional request packet from the peer.
+     */
+    virtual void recvFunctional(PacketPtr pkt) = 0;
+};
+
+#endif //__MEM_GEM5_PROTOCOL_FUNCTIONAL_HH__
diff --git a/src/mem/protocol/timing.cc b/src/mem/protocol/timing.cc
new file mode 100644 (file)
index 0000000..b3efcfb
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2012,2015,2017 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 2002-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * 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: Steve Reinhardt
+ *          Andreas Hansson
+ *          William Wang
+ */
+
+#include "mem/protocol/timing.hh"
+
+/* The request protocol. */
+
+bool
+TimingRequestProtocol::sendReq(TimingResponseProtocol *peer, PacketPtr pkt)
+{
+    assert(pkt->isRequest());
+    return peer->recvTimingReq(pkt);
+}
+
+bool
+TimingRequestProtocol::trySend(
+        TimingResponseProtocol *peer, PacketPtr pkt) const
+{
+  assert(pkt->isRequest());
+  return peer->tryTiming(pkt);
+}
+
+bool
+TimingRequestProtocol::sendSnoopResp(
+        TimingResponseProtocol *peer, PacketPtr pkt)
+{
+    assert(pkt->isResponse());
+    return peer->recvTimingSnoopResp(pkt);
+}
+
+void
+TimingRequestProtocol::sendRetryResp(TimingResponseProtocol *peer)
+{
+    peer->recvRespRetry();
+}
+
+/* The response protocol. */
+
+bool
+TimingResponseProtocol::sendResp(TimingRequestProtocol *peer, PacketPtr pkt)
+{
+    assert(pkt->isResponse());
+    return peer->recvTimingResp(pkt);
+}
+
+void
+TimingResponseProtocol::sendSnoopReq(
+        TimingRequestProtocol *peer, PacketPtr pkt)
+{
+    assert(pkt->isRequest());
+    peer->recvTimingSnoopReq(pkt);
+}
+
+void
+TimingResponseProtocol::sendRetryReq(TimingRequestProtocol *peer)
+{
+    peer->recvReqRetry();
+}
+
+void
+TimingResponseProtocol::sendRetrySnoopResp(TimingRequestProtocol *peer)
+{
+    peer->recvRetrySnoopResp();
+}
diff --git a/src/mem/protocol/timing.hh b/src/mem/protocol/timing.hh
new file mode 100644 (file)
index 0000000..108ac97
--- /dev/null
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2011-2012,2015,2017 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 2002-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * 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: Ron Dreslinski
+ *          Andreas Hansson
+ *          William Wang
+ */
+
+#ifndef __MEM_GEM5_PROTOCOL_TIMING_HH__
+#define __MEM_GEM5_PROTOCOL_TIMING_HH__
+
+#include "mem/packet.hh"
+
+class TimingResponseProtocol;
+
+class TimingRequestProtocol
+{
+    friend class TimingResponseProtocol;
+
+  protected:
+    /**
+     * Attempt to send a timing request to the peer by calling
+     * its corresponding receive function. If the send does not
+     * succeed, as indicated by the return value, then the sender must
+     * wait for a recvReqRetry at which point it can re-issue a
+     * sendTimingReq.
+     *
+     * @param peer Peer to send packet to.
+     * @param pkt Packet to send.
+     *
+     * @return If the send was succesful or not.
+     */
+    bool sendReq(TimingResponseProtocol *peer, PacketPtr pkt);
+
+    /**
+     * Check if the peer can handle a timing request.
+     *
+     * If the send cannot be handled at the moment, as indicated by
+     * the return value, then the sender will receive a recvReqRetry
+     * at which point it can re-issue a sendTimingReq.
+     *
+     * @param peer Peer to send packet to.
+     * @param pkt Packet to send.
+     *
+     * @return If the send was succesful or not.
+     */
+    bool trySend(TimingResponseProtocol *peer, PacketPtr pkt) const;
+
+    /**
+     * Attempt to send a timing snoop response packet to it's peer
+     * by calling its corresponding receive function. If the send
+     * does not succeed, as indicated by the return value, then the
+     * sender must wait for a recvRetrySnoop at which point it can
+     * re-issue a sendTimingSnoopResp.
+     *
+     * @param pkt Packet to send.
+     */
+    bool sendSnoopResp(TimingResponseProtocol *peer, PacketPtr pkt);
+
+    /**
+     * Send a retry to the peer that previously attempted a
+     * sendTimingResp to this protocol and failed.
+     */
+    void sendRetryResp(TimingResponseProtocol *peer);
+
+    /**
+     * Receive a timing response from the peer.
+     */
+    virtual bool recvTimingResp(PacketPtr pkt) = 0;
+
+    /**
+     * Receive a timing snoop request from the peer.
+     */
+    virtual void recvTimingSnoopReq(PacketPtr pkt) = 0;
+
+    /**
+     * Called by the peer if sendTimingReq was called on this peer (causing
+     * recvTimingReq to be called on the peer) and was unsuccessful.
+     */
+    virtual void recvReqRetry() = 0;
+
+    /**
+     * Called by the peer if sendTimingSnoopResp was called on this
+     * protocol (causing recvTimingSnoopResp to be called on the peer)
+     * and was unsuccessful.
+     */
+    virtual void recvRetrySnoopResp() = 0;
+};
+
+class TimingResponseProtocol
+{
+    friend class TimingRequestProtocol;
+
+  protected:
+    /**
+     * Attempt to send a timing response to the peer by calling
+     * its corresponding receive function. If the send does not
+     * succeed, as indicated by the return value, then the sender must
+     * wait for a recvRespRetry at which point it can re-issue a
+     * sendTimingResp.
+     *
+     * @param peer Peer to send the packet to.
+     * @param pkt Packet to send.
+     *
+     * @return If the send was succesful or not.
+    */
+    bool sendResp(TimingRequestProtocol *peer, PacketPtr pkt);
+
+    /**
+     * Attempt to send a timing snoop request packet to the peer
+     * by calling its corresponding receive function. Snoop requests
+     * always succeed and hence no return value is needed.
+     *
+     * @param peer Peer to send the packet to.
+     * @param pkt Packet to send.
+     */
+    void sendSnoopReq(TimingRequestProtocol *peer, PacketPtr pkt);
+
+    /**
+     * Send a retry to the peer that previously attempted a
+     * sendTimingReq to this protocol and failed.
+     */
+    void sendRetryReq(TimingRequestProtocol *peer);
+
+    /**
+     * Send a retry to the peer that previously attempted a
+     * sendTimingSnoopResp to this peer and failed.
+     */
+    void sendRetrySnoopResp(TimingRequestProtocol *peer);
+
+    /**
+     * Receive a timing request from the peer.
+     */
+    virtual bool recvTimingReq(PacketPtr pkt) = 0;
+
+    /**
+     * Availability request from the peer.
+     */
+    virtual bool tryTiming(PacketPtr pkt) = 0;
+
+    /**
+     * Receive a timing snoop response from the peer.
+     */
+    virtual bool recvTimingSnoopResp(PacketPtr pkt) = 0;
+
+    /**
+     * Called by the peer if sendTimingResp was called on this
+     * protocol (causing recvTimingResp to be called on the peer)
+     * and was unsuccessful.
+     */
+    virtual void recvRespRetry() = 0;
+};
+
+#endif //__MEM_GEM5_PROTOCOL_TIMING_HH__
diff --git a/src/mem/timing_protocol.cc b/src/mem/timing_protocol.cc
deleted file mode 100644 (file)
index bc56ce2..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 2012,2015,2017 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Copyright (c) 2002-2005 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * 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: Steve Reinhardt
- *          Andreas Hansson
- *          William Wang
- */
-
-#include "mem/timing_protocol.hh"
-
-/* The request protocol. */
-
-bool
-TimingRequestProtocol::sendReq(TimingResponseProtocol *peer, PacketPtr pkt)
-{
-    assert(pkt->isRequest());
-    return peer->recvTimingReq(pkt);
-}
-
-bool
-TimingRequestProtocol::trySend(
-        TimingResponseProtocol *peer, PacketPtr pkt) const
-{
-  assert(pkt->isRequest());
-  return peer->tryTiming(pkt);
-}
-
-bool
-TimingRequestProtocol::sendSnoopResp(
-        TimingResponseProtocol *peer, PacketPtr pkt)
-{
-    assert(pkt->isResponse());
-    return peer->recvTimingSnoopResp(pkt);
-}
-
-void
-TimingRequestProtocol::sendRetryResp(TimingResponseProtocol *peer)
-{
-    peer->recvRespRetry();
-}
-
-/* The response protocol. */
-
-bool
-TimingResponseProtocol::sendResp(TimingRequestProtocol *peer, PacketPtr pkt)
-{
-    assert(pkt->isResponse());
-    return peer->recvTimingResp(pkt);
-}
-
-void
-TimingResponseProtocol::sendSnoopReq(
-        TimingRequestProtocol *peer, PacketPtr pkt)
-{
-    assert(pkt->isRequest());
-    peer->recvTimingSnoopReq(pkt);
-}
-
-void
-TimingResponseProtocol::sendRetryReq(TimingRequestProtocol *peer)
-{
-    peer->recvReqRetry();
-}
-
-void
-TimingResponseProtocol::sendRetrySnoopResp(TimingRequestProtocol *peer)
-{
-    peer->recvRetrySnoopResp();
-}
diff --git a/src/mem/timing_protocol.hh b/src/mem/timing_protocol.hh
deleted file mode 100644 (file)
index 4223573..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (c) 2011-2012,2015,2017 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Copyright (c) 2002-2005 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * 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: Ron Dreslinski
- *          Andreas Hansson
- *          William Wang
- */
-
-#ifndef __MEM_TIMING_PROTOCOL_HH__
-#define __MEM_TIMING_PROTOCOL_HH__
-
-#include "mem/packet.hh"
-
-class TimingResponseProtocol;
-
-class TimingRequestProtocol
-{
-    friend class TimingResponseProtocol;
-
-  protected:
-    /**
-     * Attempt to send a timing request to the peer by calling
-     * its corresponding receive function. If the send does not
-     * succeed, as indicated by the return value, then the sender must
-     * wait for a recvReqRetry at which point it can re-issue a
-     * sendTimingReq.
-     *
-     * @param peer Peer to send packet to.
-     * @param pkt Packet to send.
-     *
-     * @return If the send was succesful or not.
-     */
-    bool sendReq(TimingResponseProtocol *peer, PacketPtr pkt);
-
-    /**
-     * Check if the peer can handle a timing request.
-     *
-     * If the send cannot be handled at the moment, as indicated by
-     * the return value, then the sender will receive a recvReqRetry
-     * at which point it can re-issue a sendTimingReq.
-     *
-     * @param peer Peer to send packet to.
-     * @param pkt Packet to send.
-     *
-     * @return If the send was succesful or not.
-     */
-    bool trySend(TimingResponseProtocol *peer, PacketPtr pkt) const;
-
-    /**
-     * Attempt to send a timing snoop response packet to it's peer
-     * by calling its corresponding receive function. If the send
-     * does not succeed, as indicated by the return value, then the
-     * sender must wait for a recvRetrySnoop at which point it can
-     * re-issue a sendTimingSnoopResp.
-     *
-     * @param pkt Packet to send.
-     */
-    bool sendSnoopResp(TimingResponseProtocol *peer, PacketPtr pkt);
-
-    /**
-     * Send a retry to the peer that previously attempted a
-     * sendTimingResp to this protocol and failed.
-     */
-    void sendRetryResp(TimingResponseProtocol *peer);
-
-    /**
-     * Receive a timing response from the peer.
-     */
-    virtual bool recvTimingResp(PacketPtr pkt) = 0;
-
-    /**
-     * Receive a timing snoop request from the peer.
-     */
-    virtual void recvTimingSnoopReq(PacketPtr pkt) = 0;
-
-    /**
-     * Called by the peer if sendTimingReq was called on this peer (causing
-     * recvTimingReq to be called on the peer) and was unsuccessful.
-     */
-    virtual void recvReqRetry() = 0;
-
-    /**
-     * Called by the peer if sendTimingSnoopResp was called on this
-     * protocol (causing recvTimingSnoopResp to be called on the peer)
-     * and was unsuccessful.
-     */
-    virtual void recvRetrySnoopResp() = 0;
-};
-
-class TimingResponseProtocol
-{
-    friend class TimingRequestProtocol;
-
-  protected:
-    /**
-     * Attempt to send a timing response to the peer by calling
-     * its corresponding receive function. If the send does not
-     * succeed, as indicated by the return value, then the sender must
-     * wait for a recvRespRetry at which point it can re-issue a
-     * sendTimingResp.
-     *
-     * @param peer Peer to send the packet to.
-     * @param pkt Packet to send.
-     *
-     * @return If the send was succesful or not.
-    */
-    bool sendResp(TimingRequestProtocol *peer, PacketPtr pkt);
-
-    /**
-     * Attempt to send a timing snoop request packet to the peer
-     * by calling its corresponding receive function. Snoop requests
-     * always succeed and hence no return value is needed.
-     *
-     * @param peer Peer to send the packet to.
-     * @param pkt Packet to send.
-     */
-    void sendSnoopReq(TimingRequestProtocol *peer, PacketPtr pkt);
-
-    /**
-     * Send a retry to the peer that previously attempted a
-     * sendTimingReq to this protocol and failed.
-     */
-    void sendRetryReq(TimingRequestProtocol *peer);
-
-    /**
-     * Send a retry to the peer that previously attempted a
-     * sendTimingSnoopResp to this peer and failed.
-     */
-    void sendRetrySnoopResp(TimingRequestProtocol *peer);
-
-    /**
-     * Receive a timing request from the peer.
-     */
-    virtual bool recvTimingReq(PacketPtr pkt) = 0;
-
-    /**
-     * Availability request from the peer.
-     */
-    virtual bool tryTiming(PacketPtr pkt) = 0;
-
-    /**
-     * Receive a timing snoop response from the peer.
-     */
-    virtual bool recvTimingSnoopResp(PacketPtr pkt) = 0;
-
-    /**
-     * Called by the peer if sendTimingResp was called on this
-     * protocol (causing recvTimingResp to be called on the peer)
-     * and was unsuccessful.
-     */
-    virtual void recvRespRetry() = 0;
-};
-
-#endif //__MEM_TIMING_PROTOCOL_HH__