diff options
Diffstat (limited to 'src/mem/port.hh')
-rw-r--r-- | src/mem/port.hh | 53 |
1 files changed, 29 insertions, 24 deletions
diff --git a/src/mem/port.hh b/src/mem/port.hh index c70733bf6..b93d5d444 100644 --- a/src/mem/port.hh +++ b/src/mem/port.hh @@ -70,10 +70,7 @@ class MemObject; /** * Ports are used to interface memory objects to each other. A port is * either a master or a slave and the connected peer is always of the - * opposite role. - * - * Each port has a name and an owner, and enables three basic types of - * accesses to the peer port: functional, atomic and timing. + * opposite role. Each port has a name, an owner, and an identifier. */ class Port { @@ -91,9 +88,6 @@ class Port */ const PortID id; - /** A pointer to the peer port. */ - Port* peer; - /** A reference to the MemObject that owns this port. */ MemObject& owner; @@ -119,23 +113,6 @@ class Port /** Get the port id. */ PortID getId() const { return id; } - protected: - - /** - * Called by a peer port if sendTimingReq, sendTimingResp or - * sendTimingSnoopResp was unsuccesful, and had to wait. - */ - virtual void recvRetry() = 0; - - public: - - /** - * Send a retry to a peer port that previously attempted a - * sendTimingReq, sendTimingResp or sendTimingSnoopResp which was - * unsuccessful. - */ - void sendRetry() { return peer->recvRetry(); } - }; /** Forward declaration */ @@ -211,6 +188,12 @@ class MasterPort : public Port bool sendTimingSnoopResp(PacketPtr pkt); /** + * Send a retry to the slave port that previously attempted a + * sendTimingResp to this master port and failed. + */ + void sendRetry(); + + /** * Determine if this master port is snooping or not. The default * implementation returns false and thus tells the neighbour we * are not snooping. Any master port that wants to receive snoop @@ -270,6 +253,14 @@ class MasterPort : public Port } /** + * Called by the slave port if sendTimingReq or + * sendTimingSnoopResp was called on this master port (causing + * recvTimingReq and recvTimingSnoopResp to be called on the + * slave port) and was unsuccesful. + */ + virtual void recvRetry() = 0; + + /** * Called to receive an address range change from the peer slave * port. the default implementation ignored the change and does * nothing. Override this function in a derived class if the owner @@ -347,6 +338,13 @@ class SlavePort : public Port void sendTimingSnoopReq(PacketPtr pkt); /** + * Send a retry to the master port that previously attempted a + * sendTimingReq or sendTimingSnoopResp to this slave port and + * failed. + */ + void sendRetry(); + + /** * Called by a peer port in order to determine the block size of * the owner of this port. */ @@ -396,6 +394,13 @@ class SlavePort : public Port panic("%s was not expecting a timing snoop response\n", name()); } + /** + * Called by the master port if sendTimingResp was called on this + * slave port (causing recvTimingResp to be called on the master + * port) and was unsuccesful. + */ + virtual void recvRetry() = 0; + }; #endif //__MEM_PORT_HH__ |