#include "mem/mem_object.hh"
#include "mem/port.hh"
-Port::Port(const std::string &_name, MemObject& _owner)
- : portName(_name), peer(NULL), owner(_owner)
+Port::Port(const std::string &_name, MemObject& _owner, PortID _id)
+ : portName(_name), id(_id), owner(_owner)
{
}
/**
* Master port
*/
-MasterPort::MasterPort(const std::string& name, MemObject* owner)
- : Port(name, *owner), _slavePort(NULL)
+MasterPort::MasterPort(const std::string& name, MemObject* owner, PortID _id)
+ : Port(name, *owner, _id), _slavePort(NULL)
{
}
return *_slavePort;
}
+void
+MasterPort::unBind()
+{
+ _slavePort = NULL;
+}
+
void
MasterPort::bind(SlavePort& slave_port)
{
// master port keeps track of the slave port
_slavePort = &slave_port;
- peer = &slave_port;
// slave port also keeps track of master port
_slavePort->bind(*this);
return _slavePort->deviceBlockSize();
}
+AddrRangeList
+MasterPort::getAddrRanges() const
+{
+ return _slavePort->getAddrRanges();
+}
+
Tick
MasterPort::sendAtomic(PacketPtr pkt)
{
+ assert(pkt->isRequest());
return _slavePort->recvAtomic(pkt);
}
void
MasterPort::sendFunctional(PacketPtr pkt)
{
+ assert(pkt->isRequest());
return _slavePort->recvFunctional(pkt);
}
+bool
+MasterPort::sendTimingReq(PacketPtr pkt)
+{
+ assert(pkt->isRequest());
+ return _slavePort->recvTimingReq(pkt);
+}
+
+bool
+MasterPort::sendTimingSnoopResp(PacketPtr pkt)
+{
+ assert(pkt->isResponse());
+ return _slavePort->recvTimingSnoopResp(pkt);
+}
+
+void
+MasterPort::sendRetry()
+{
+ _slavePort->recvRetry();
+}
+
void
MasterPort::printAddr(Addr a)
{
/**
* Slave port
*/
-SlavePort::SlavePort(const std::string& name, MemObject* owner)
- : Port(name, *owner), _masterPort(NULL)
+SlavePort::SlavePort(const std::string& name, MemObject* owner, PortID id)
+ : Port(name, *owner, id), _masterPort(NULL)
{
}
{
}
+void
+SlavePort::unBind()
+{
+ _masterPort = NULL;
+}
+
void
SlavePort::bind(MasterPort& master_port)
{
_masterPort = &master_port;
- peer = &master_port;
}
MasterPort&
Tick
SlavePort::sendAtomicSnoop(PacketPtr pkt)
{
+ assert(pkt->isRequest());
return _masterPort->recvAtomicSnoop(pkt);
}
void
SlavePort::sendFunctionalSnoop(PacketPtr pkt)
{
+ assert(pkt->isRequest());
return _masterPort->recvFunctionalSnoop(pkt);
}
+
+bool
+SlavePort::sendTimingResp(PacketPtr pkt)
+{
+ assert(pkt->isResponse());
+ return _masterPort->recvTimingResp(pkt);
+}
+
+void
+SlavePort::sendTimingSnoopReq(PacketPtr pkt)
+{
+ assert(pkt->isRequest());
+ _masterPort->recvTimingSnoopReq(pkt);
+}
+
+void
+SlavePort::sendRetry()
+{
+ _masterPort->recvRetry();
+}