From cad802761a876c6dcd00d58e09c8984886c987f6 Mon Sep 17 00:00:00 2001 From: Andreas Hansson Date: Wed, 30 May 2012 05:29:42 -0400 Subject: Packet: Unify the use of PortID in packet and port This patch removes the Packet::NodeID typedef and unifies it with the Port::PortId. The src and dest fields in the packet are used to hold a port id (e.g. in the bus), and thus the two should actually be the same. The typedef PortID is now global (in base/types.hh) and aligned with the ThreadID in terms of capitalisation and naming of the InvalidPortID constant. Before this patch, two flags were used for valid destination and source, rather than relying on a named value (InvalidPortID), and this is now redundant, as the src and dest field themselves are sufficient to tell whether the current value is a valid port identifier or not. Consequently, the VALID_SRC and VALID_DST are removed. As part of the cleaning up, a number of int parameters and local variables are updated to use PortID. Note that Ruby still has its own NodeID typedef. Furthermore, the MemObject getMaster/SlavePort still has an int idx parameter with a default value of -1 which should eventually change to PortID idx = InvalidPortID. --- src/mem/packet.hh | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) (limited to 'src/mem/packet.hh') diff --git a/src/mem/packet.hh b/src/mem/packet.hh index 50a6f3d5a..8e3ef9456 100644 --- a/src/mem/packet.hh +++ b/src/mem/packet.hh @@ -41,6 +41,7 @@ * Authors: Ron Dreslinski * Steve Reinhardt * Ali Saidi + * Andreas Hansson */ /** @@ -231,7 +232,6 @@ class Packet : public FastAlloc, public Printable public: typedef uint32_t FlagsType; typedef ::Flags Flags; - typedef short NodeID; private: static const FlagsType PUBLIC_FLAGS = 0x00000000; @@ -250,9 +250,6 @@ class Packet : public FastAlloc, public Printable /// Are the 'addr' and 'size' fields valid? static const FlagsType VALID_ADDR = 0x00000100; static const FlagsType VALID_SIZE = 0x00000200; - /// Is the 'src' field valid? - static const FlagsType VALID_SRC = 0x00000400; - static const FlagsType VALID_DST = 0x00000800; /// Is the data pointer set to a value that shouldn't be freed /// when the packet is destroyed? static const FlagsType STATIC_DATA = 0x00001000; @@ -306,7 +303,7 @@ class Packet : public FastAlloc, public Printable * for example by using an appropriate sender state. The latter is * done in the cache and bridge. */ - NodeID src; + PortID src; /** * Destination port identifier that is present on all response @@ -316,7 +313,7 @@ class Packet : public FastAlloc, public Printable * response, and the destination is used, e.g. by the bus, to * select the appropriate path through the interconnect. */ - NodeID dest; + PortID dest; /** * The original value of the command field. Only valid when the @@ -487,21 +484,21 @@ class Packet : public FastAlloc, public Printable bool hadBadAddress() const { return cmd == MemCmd::BadAddressError; } void copyError(Packet *pkt) { assert(pkt->isError()); cmd = pkt->cmd; } - bool isSrcValid() { return flags.isSet(VALID_SRC); } + bool isSrcValid() const { return src != InvalidPortID; } /// Accessor function to get the source index of the packet. - NodeID getSrc() const { assert(flags.isSet(VALID_SRC)); return src; } + PortID getSrc() const { assert(isSrcValid()); return src; } /// Accessor function to set the source index of the packet. - void setSrc(NodeID _src) { src = _src; flags.set(VALID_SRC); } + void setSrc(PortID _src) { src = _src; } /// Reset source field, e.g. to retransmit packet on different bus. - void clearSrc() { flags.clear(VALID_SRC); } + void clearSrc() { src = InvalidPortID; } - bool isDestValid() { return flags.isSet(VALID_DST); } + bool isDestValid() const { return dest != InvalidPortID; } /// Accessor function for the destination index of the packet. - NodeID getDest() const { assert(flags.isSet(VALID_DST)); return dest; } + PortID getDest() const { assert(isDestValid()); return dest; } /// Accessor function to set the destination index of the packet. - void setDest(NodeID _dest) { dest = _dest; flags.set(VALID_DST); } + void setDest(PortID _dest) { dest = _dest; } /// Reset destination field, e.g. to turn a response into a request again. - void clearDest() { flags.clear(VALID_DST); } + void clearDest() { dest = InvalidPortID; } Addr getAddr() const { assert(flags.isSet(VALID_ADDR)); return addr; } unsigned getSize() const { assert(flags.isSet(VALID_SIZE)); return size; } @@ -538,6 +535,7 @@ class Packet : public FastAlloc, public Printable */ Packet(Request *_req, MemCmd _cmd) : cmd(_cmd), req(_req), data(NULL), + src(InvalidPortID), dest(InvalidPortID), bytesValidStart(0), bytesValidEnd(0), time(curTick()), senderState(NULL) { @@ -558,6 +556,7 @@ class Packet : public FastAlloc, public Printable */ Packet(Request *_req, MemCmd _cmd, int _blkSize) : cmd(_cmd), req(_req), data(NULL), + src(InvalidPortID), dest(InvalidPortID), bytesValidStart(0), bytesValidEnd(0), time(curTick()), senderState(NULL) { @@ -586,7 +585,7 @@ class Packet : public FastAlloc, public Printable if (!clearFlags) flags.set(pkt->flags & COPY_FLAGS); - flags.set(pkt->flags & (VALID_ADDR|VALID_SIZE|VALID_SRC|VALID_DST)); + flags.set(pkt->flags & (VALID_ADDR|VALID_SIZE)); flags.set(pkt->flags & STATIC_DATA); } @@ -644,8 +643,7 @@ class Packet : public FastAlloc, public Printable flags.clear(EXPRESS_SNOOP); dest = src; - flags.set(VALID_DST, flags.isSet(VALID_SRC)); - flags.clear(VALID_SRC); + clearSrc(); } void -- cgit v1.2.3