diff options
Diffstat (limited to 'src/mem/port.hh')
-rw-r--r-- | src/mem/port.hh | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/mem/port.hh b/src/mem/port.hh index 2154da007..72a02711c 100644 --- a/src/mem/port.hh +++ b/src/mem/port.hh @@ -51,6 +51,7 @@ #define __MEM_PORT_HH__ #include "base/addr_range.hh" +#include "mem/backdoor.hh" #include "mem/packet.hh" #include "sim/port.hh" @@ -153,6 +154,18 @@ class MasterPort : public BaseMasterPort Tick sendAtomic(PacketPtr pkt); /** + * Send an atomic request packet like above, but also request a backdoor + * to the data being accessed. + * + * @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 sendAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor); + + /** * 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. @@ -300,6 +313,7 @@ class SlavePort : public BaseSlavePort private: MasterPort* _masterPort; + bool defaultBackdoorWarned; protected: @@ -416,6 +430,12 @@ class SlavePort : public BaseSlavePort virtual Tick recvAtomic(PacketPtr pkt) = 0; /** + * Receive an atomic request packet from the master port, and optionally + * provide a backdoor to the data being accessed. + */ + virtual Tick recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor); + + /** * Receive a functional request packet from the master port. */ virtual void recvFunctional(PacketPtr pkt) = 0; |