42 #ifndef __MEM_RUBY_SYSTEM_RUBYPORT_HH__
43 #define __MEM_RUBY_SYSTEM_RUBYPORT_HH__
48 #include "mem/protocol/RequestStatus.hh"
53 #include "params/RubyPort.hh"
83 bool _access_backing_store,
84 PortID id,
bool _no_retry_on_stall);
92 {
panic(
"RubyPort::MemSlavePort::recvAtomic() not implemented!\n"); }
131 {
panic(
"recvAtomic not supported with ruby!"); }
134 {
panic(
"recvFunctional should never be called on pio slave port!"); }
150 void init()
override;
228 #endif // __MEM_RUBY_SYSTEM_RUBYPORT_HH__
std::vector< MemSlavePort * > slave_ports
void recvRangeChange()
Called to receive an address range change from the peer slave port.
void evictionCallback(Addr address)
bool recvTimingReq(PacketPtr pkt)
Receive a timing request from the master port.
PioSlavePort(const std::string &_name, RubyPort *_port)
void setController(AbstractController *_cntrl)
const PortID InvalidPortID
DrainState
Object drain/handover states.
void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
AbstractController * m_controller
std::vector< MemSlavePort * > retryList
bool isPhysMemAddress(Addr addr) const
bool recvTimingResp(PacketPtr pkt)
Receive a timing response from the slave port.
The QueuedMasterPort combines two queues, a request queue and a snoop response queue, that both share the same port.
virtual int outstandingCount() const =0
SnoopRespPacketQueue snoopRespQueue
SenderState(MemSlavePort *_port)
A queued port is a port that has an infinite queue for outgoing packets and thus decouples the module...
bool recvTimingReq(PacketPtr pkt)
Receive a timing request from the master port.
A BaseSlavePort is a protocol-agnostic slave port, responsible only for the structural connection to ...
RubySystem * m_ruby_system
virtual RequestStatus makeRequest(PacketPtr pkt)=0
Declaration of SimpleTimingPort.
bool onRetryList(MemSlavePort *port)
void hitCallback(PacketPtr pkt)
void ruby_eviction_callback(Addr address)
void addToRetryList(MemSlavePort *port)
PioSlavePort pioSlavePort
MemMasterPort(const std::string &_name, RubyPort *_port)
bool access_backing_store
uint64_t Tick
Tick count type.
Tick recvAtomic(PacketPtr pkt)
Receive an atomic request packet from the master port.
AddrRangeList getAddrRanges() const
Get a list of the non-overlapping address ranges the owner is responsible for.
unsigned int gotAddrRanges
virtual bool isDeadlockEventScheduled() const =0
virtual void descheduleDeadlockEvent()=0
void recvRangeChange()
Called to receive an address range change from the peer slave port.
void ruby_hit_callback(PacketPtr pkt)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Tick recvAtomic(PacketPtr pkt)
Receive an atomic request packet from the master port.
SnoopRespPacketQueue snoopRespQueue
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
PioMasterPort(const std::string &_name, RubyPort *_port)
bool recvTimingResp(PacketPtr pkt, PortID master_port_id)
Called by the PIO port when receiving a timing response.
void recvFunctional(PacketPtr pkt)
Receive a functional request packet from the master port.
A virtual base opaque structure used to hold state associated with the packet (e.g., an MSHR), specific to a MemObject that sees the packet.
PioMasterPort pioMasterPort
MessageBuffer * m_mandatory_q_ptr
RubyPort(const Params *p)
The MemObject class extends the ClockedObject with accessor functions to get its master and slave por...
void recvFunctional(PacketPtr pkt)
Receive a functional request packet from the master port.
A BaseMasterPort is a protocol-agnostic master port, responsible only for the structural connection t...
MemMasterPort memMasterPort
std::vector< PioMasterPort * > master_ports
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
BaseSlavePort & getSlavePort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a slave port with a given name and index.
MemSlavePort memSlavePort
bool recvTimingResp(PacketPtr pkt)
Receive a timing response from the slave port.
AddrRangeList getAddrRanges() const
Get a list of the non-overlapping address ranges the owner is responsible for.
std::vector< MemSlavePort * >::iterator CpuPortIter
Vector of M5 Ports attached to this Ruby port.
BaseMasterPort & getMasterPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a master port with a given name and index.
DrainState drain() override
Notify an object that it needs to drain its state.
MemSlavePort(const std::string &_name, RubyPort *_port, bool _access_backing_store, PortID id, bool _no_retry_on_stall)