*/
virtual MasterPort &getDataPort() = 0;
+ /**
+ * Returns a sendFunctional delegate for use with port proxies.
+ */
+ virtual PortProxy::SendFunctionalFunc
+ getSendFunctional()
+ {
+ MasterPort &port = getDataPort();
+ return [&port](PacketPtr pkt)->void { port.sendFunctional(pkt); };
+ }
+
/**
* Purely virtual method that returns a reference to the instruction
* port. All subclasses must implement this method.
assert(physProxy == NULL);
// This cannot be done in the constructor as the thread state
// itself is created in the base cpu constructor and the
- // getDataPort is a virtual function
- physProxy = new PortProxy(baseCpu->getDataPort(),
+ // getSendFunctional is a virtual function
+ physProxy = new PortProxy(baseCpu->getSendFunctional(),
baseCpu->cacheLineSize());
assert(virtProxy == NULL);
virtProxy = new FSTranslatingPortProxy(tc);
} else {
assert(virtProxy == NULL);
- virtProxy = new SETranslatingPortProxy(baseCpu->getDataPort(),
+ virtProxy = new SETranslatingPortProxy(baseCpu->getSendFunctional(),
process,
SETranslatingPortProxy::NextPage);
}
#include "sim/system.hh"
FSTranslatingPortProxy::FSTranslatingPortProxy(ThreadContext *tc)
- : PortProxy(tc->getCpuPtr()->getDataPort(),
+ : PortProxy(tc->getCpuPtr()->getSendFunctional(),
tc->getSystemPtr()->cacheLineSize()), _tc(tc)
{
}