X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmem%2Fport.cc;h=4d44d486ddd2c4d37820e39f7925a3d049b8b766;hb=897247d63bf2ae8b799a867e891d862eec2bfa5d;hp=ba4f2366816d1ea14adf358aa3309f022429c328;hpb=8da3e0548e76795f74af5ff8f4ffadf3d0b5191b;p=gem5.git diff --git a/src/mem/port.cc b/src/mem/port.cc index ba4f23668..4d44d486d 100644 --- a/src/mem/port.cc +++ b/src/mem/port.cc @@ -39,13 +39,83 @@ #include "mem/mem_object.hh" #include "mem/port.hh" +class DefaultPeerPort : public Port +{ + protected: + void blowUp() const + { + fatal("%s: Unconnected port!", peer->name()); + } + + public: + DefaultPeerPort() + : Port("default_port", NULL) + { } + + bool recvTiming(PacketPtr) + { + blowUp(); + return false; + } + + Tick recvAtomic(PacketPtr) + { + blowUp(); + return 0; + } + + void recvFunctional(PacketPtr) + { + blowUp(); + } + + void recvStatusChange(Status) + { + blowUp(); + } + + unsigned + deviceBlockSize() const + { + blowUp(); + return 0; + } + + void getDeviceAddressRanges(AddrRangeList &, bool &) + { + blowUp(); + } + + bool isDefaultPort() const { return true; } +}; + +DefaultPeerPort defaultPeerPort; + +Port::Port(const std::string &_name, MemObject *_owner) + : EventManager(_owner), portName(_name), peer(&defaultPeerPort), + owner(_owner) +{ +} + +Port::~Port() +{ +} + void Port::setPeer(Port *port) { DPRINTF(Config, "setting peer to %s\n", port->name()); + peer = port; } +void +Port::setOwner(MemObject *_owner) +{ + eventq = _owner->queue(); + owner = _owner; +} + void Port::removeConn() { @@ -92,3 +162,15 @@ Port::memsetBlob(Addr addr, uint8_t val, int size) delete [] buf; } + + +void +Port::printAddr(Addr a) +{ + Request req(a, 1, 0); + Packet pkt(&req, MemCmd::PrintReq, Packet::Broadcast); + Packet::PrintReqState prs(std::cerr); + pkt.senderState = &prs; + + sendFunctional(&pkt); +}