Go to the documentation of this file.
46 #ifndef __MEM_PORT_HH__
47 #define __MEM_PORT_HH__
225 panic(
"%s was not expecting an atomic snoop request\n",
name());
232 panic(
"%s was not expecting a functional snoop request\n",
name());
238 panic(
"%s was not expecting a timing snoop request.\n",
name());
244 panic(
"%s was not expecting a snoop retry.\n",
name());
442 panic(
"%s was not expecting a %s\n",
name(), __func__);
448 panic(
"%s was not expecting a timing snoop response\n",
name());
531 #endif //__MEM_PORT_HH__
Tick sendAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor)
Send an atomic request packet like above, but also request a backdoor to the data being accessed.
A ResponsePort is a specialization of a port.
Tick recvAtomicSnoop(PacketPtr pkt) override
Default implementations.
bool sendTimingResp(PacketPtr pkt)
Attempt to send a timing response to the request port by calling its corresponding receive function.
const PortID InvalidPortID
uint64_t Tick
Tick count type.
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
Tick sendAtomicSnoop(PacketPtr pkt)
Send an atomic snoop request packet, where the data is moved and the state is updated in zero time,...
AddrRangeList getAddrRanges() const
Get the address ranges of the connected responder port.
void responderUnbind()
Called by the request port to unbind.
ResponsePort(const std::string &name, SimObject *_owner, PortID id=InvalidPortID)
Response port.
bool sendResp(TimingRequestProtocol *peer, PacketPtr pkt)
Attempt to send a timing response to the peer by calling its corresponding receive function.
void sendFunctional(PacketPtr pkt) const
Send a functional request packet, where the data is instantly updated everywhere in the memory system...
void bind(Port &peer) override
Bind this request port to a response port.
void reportUnbound() const
ResponsePort * _responsePort
void sendRetryResp(TimingResponseProtocol *peer)
Send a retry to the peer that previously attempted a sendTimingResp to this protocol and failed.
bool sendTimingSnoopResp(PacketPtr pkt)
Attempt to send a timing snoop response packet to the response port by calling its corresponding rece...
void sendSnoop(FunctionalRequestProtocol *peer, PacketPtr pkt) const
Send a functional snoop request packet, where the data is instantly updated everywhere in the memory ...
bool tryTiming(PacketPtr pkt) override
Availability request from the peer.
void responderBind(RequestPort &request_port)
Called by the request port to bind.
void sendTimingSnoopReq(PacketPtr pkt)
Attempt to send a timing snoop request packet to the request port by calling its corresponding receiv...
void recvRetrySnoopResp() override
Called by the peer if sendTimingSnoopResp was called on this protocol (causing recvTimingSnoopResp to...
void sendRetryReq(TimingRequestProtocol *peer)
Send a retry to the peer that previously attempted a sendTimingReq to this protocol and failed.
bool defaultBackdoorWarned
bool sendTimingReq(PacketPtr pkt)
Attempt to send a timing request to the responder port by calling its corresponding receive function.
void bind(Port &peer) override
Attach to a peer port.
Ports are used to interface objects to each other.
RequestPort(const std::string &name, SimObject *_owner, PortID id=InvalidPortID)
Request port.
SlavePort(const std::string &name, SimObject *_owner, PortID id=InvalidPortID)
virtual void sendRetryResp()
Send a retry to the response port that previously attempted a sendTimingResp to this request port and...
bool isSnooping() const
Find out if the peer request port is snooping or not.
virtual bool isSnooping() const
Determine if this request port is snooping or not.
A RequestPort is a specialisation of a Port, which implements the default protocol for the three diff...
bool recvTimingSnoopResp(PacketPtr pkt) override
Receive a timing snoop response from the peer.
virtual void recvRangeChange()
Called to receive an address range change from the peer response port.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
const std::string name() const
Return port name (for DPRINTF).
bool trySend(TimingResponseProtocol *peer, PacketPtr pkt) const
Check if the peer can handle a timing request.
MasterPort(const std::string &name, SimObject *_owner, PortID id=InvalidPortID)
const std::string & name()
virtual AddrRangeList getAddrRanges() const =0
Get a list of the non-overlapping address ranges the owner is responsible for.
void unbind() override
Unbind this request port and the associated response port.
void send(FunctionalResponseProtocol *peer, PacketPtr pkt) const
Send a functional request packet, where the data is instantly updated everywhere in the memory system...
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Tick send(AtomicResponseProtocol *peer, PacketPtr pkt)
Send an atomic request packet, where the data is moved and the state is updated in zero time,...
void printAddr(Addr a)
Inject a PrintReq for the given address to print the state of that address throughout the memory syst...
void sendRetrySnoopResp(TimingRequestProtocol *peer)
Send a retry to the peer that previously attempted a sendTimingSnoopResp to this peer and failed.
void sendFunctionalSnoop(PacketPtr pkt) const
Send a functional snoop request packet, where the data is instantly updated everywhere in the memory ...
Tick sendSnoop(AtomicRequestProtocol *peer, PacketPtr pkt)
Send an atomic snoop request packet, where the data is moved and the state is updated in zero time,...
void sendRetrySnoopResp()
Send a retry to the request port that previously attempted a sendTimingSnoopResp to this response por...
Tick recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor) override
Default implementations.
void sendRetryReq()
Send a retry to the request port that previously attempted a sendTimingReq to this response port and ...
Tick sendAtomic(PacketPtr pkt)
Send an atomic request packet, where the data is moved and the state is updated in zero time,...
void recvTimingSnoopReq(PacketPtr pkt) override
Receive a timing snoop request from the peer.
void sendRangeChange() const
Called by the owner to send a range change.
bool sendReq(TimingResponseProtocol *peer, PacketPtr pkt)
Attempt to send a timing request to the peer by calling its corresponding receive function.
Tick sendBackdoor(AtomicResponseProtocol *peer, PacketPtr pkt, MemBackdoorPtr &backdoor)
Send an atomic request packet like above, but also request a backdoor to the data being accessed.
void sendSnoopReq(TimingRequestProtocol *peer, PacketPtr pkt)
Attempt to send a timing snoop request packet to the peer by calling its corresponding receive functi...
void recvFunctionalSnoop(PacketPtr pkt) override
Receive a functional snoop request packet from the peer.
RequestPort * _requestPort
void unbind() override
We let the request port do the work, so these don't do anything.
bool tryTiming(PacketPtr pkt) const
Check if the responder can handle a timing request.
bool sendSnoopResp(TimingResponseProtocol *peer, PacketPtr pkt)
Attempt to send a timing snoop response packet to it's peer by calling its corresponding receive func...
#define panic(...)
This implements a cprintf based panic() function.
Abstract superclass for simulation objects.
Generated on Wed Sep 30 2020 14:02:13 for gem5 by doxygen 1.8.17