diff options
author | Andreas Hansson <andreas.hansson@arm.com> | 2012-05-30 05:29:42 -0400 |
---|---|---|
committer | Andreas Hansson <andreas.hansson@arm.com> | 2012-05-30 05:29:42 -0400 |
commit | cad802761a876c6dcd00d58e09c8984886c987f6 (patch) | |
tree | fcb327a8923631de61133c6ad14aeaffcc44761c /src/mem/packet.hh | |
parent | 6a54f7fc5ff1c33bc9f222014dc08c33248b0299 (diff) | |
download | gem5-cad802761a876c6dcd00d58e09c8984886c987f6.tar.xz |
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.
Diffstat (limited to 'src/mem/packet.hh')
-rw-r--r-- | src/mem/packet.hh | 32 |
1 files changed, 15 insertions, 17 deletions
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<FlagsType> 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 |