/*
+ * Copyright (c) 2012 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder. You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
* Copyright (c) 2008 The Regents of The University of Michigan
* All rights reserved.
*
#ifndef __MEM_MPORT_HH__
#define __MEM_MPORT_HH__
+#include "mem/mem_object.hh"
#include "mem/tport.hh"
/*
* This file defines a port class which is used for sending and receiving
* messages. These messages are atomic units which don't interact and
- * should be smaller than a cache block. This class is based on
+ * should be smaller than a cache block. This class is based on
* the underpinnings of SimpleTimingPort, but it tweaks some of the external
* functions.
*/
-
-class MessagePort : public SimpleTimingPort
+class MessageSlavePort : public SimpleTimingPort
{
+
public:
- MessagePort(std::string pname, MemObject *_owner = NULL) :
- SimpleTimingPort(pname, _owner)
+ MessageSlavePort(const std::string &name, MemObject *owner) :
+ SimpleTimingPort(name, owner)
{}
- virtual ~MessagePort()
+ virtual ~MessageSlavePort()
{}
- void
- recvFunctional(PacketPtr pkt)
- {
- recvAtomic(pkt);
- }
+ protected:
Tick recvAtomic(PacketPtr pkt);
+ virtual Tick recvMessage(PacketPtr pkt) = 0;
+};
+
+class MessageMasterPort : public QueuedMasterPort
+{
+ public:
+
+ MessageMasterPort(const std::string &name, MemObject *owner) :
+ QueuedMasterPort(name, owner, reqQueue, snoopRespQueue),
+ reqQueue(*owner, *this), snoopRespQueue(*owner, *this)
+ {}
+
+ virtual ~MessageMasterPort()
+ {}
+
+ bool recvTimingResp(PacketPtr pkt) { recvResponse(pkt); return true; }
+
protected:
- virtual Tick recvMessage(PacketPtr pkt) = 0;
+ /** A packet queue for outgoing packets. */
+ ReqPacketQueue reqQueue;
+ SnoopRespPacketQueue snoopRespQueue;
// Accept and ignore responses.
virtual Tick recvResponse(PacketPtr pkt)