114184Sgabeblack@google.com/*
214184Sgabeblack@google.com * Copyright (c) 1999-2012 Mark D. Hill and David A. Wood
314184Sgabeblack@google.com * Copyright (c) 2011 Advanced Micro Devices, Inc.
414184Sgabeblack@google.com * All rights reserved.
514184Sgabeblack@google.com *
614184Sgabeblack@google.com * Redistribution and use in source and binary forms, with or without
714184Sgabeblack@google.com * modification, are permitted provided that the following conditions are
814184Sgabeblack@google.com * met: redistributions of source code must retain the above copyright
914184Sgabeblack@google.com * notice, this list of conditions and the following disclaimer;
1014184Sgabeblack@google.com * redistributions in binary form must reproduce the above copyright
1114184Sgabeblack@google.com * notice, this list of conditions and the following disclaimer in the
1214184Sgabeblack@google.com * documentation and/or other materials provided with the distribution;
1314184Sgabeblack@google.com * neither the name of the copyright holders nor the names of its
1414184Sgabeblack@google.com * contributors may be used to endorse or promote products derived from
1514184Sgabeblack@google.com * this software without specific prior written permission.
1614184Sgabeblack@google.com *
1714184Sgabeblack@google.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1814184Sgabeblack@google.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1914184Sgabeblack@google.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2014184Sgabeblack@google.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2114184Sgabeblack@google.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2214184Sgabeblack@google.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2314184Sgabeblack@google.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2414184Sgabeblack@google.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2514184Sgabeblack@google.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2614184Sgabeblack@google.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2714184Sgabeblack@google.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2814184Sgabeblack@google.com */
2914184Sgabeblack@google.com
3014184Sgabeblack@google.com// Declarations of external types that are common to all protocols
3114184Sgabeblack@google.comexternal_type(int, primitive="yes", default="0");
3214184Sgabeblack@google.comexternal_type(bool, primitive="yes", default="false");
3314184Sgabeblack@google.comexternal_type(std::string, primitive="yes");
3414184Sgabeblack@google.comexternal_type(uint32_t, primitive="yes");
3514184Sgabeblack@google.comexternal_type(uint64_t, primitive="yes");
3614184Sgabeblack@google.comexternal_type(PacketPtr, primitive="yes");
3714184Sgabeblack@google.comexternal_type(Packet, primitive="yes");
3814184Sgabeblack@google.comexternal_type(Addr, primitive="yes");
3914184Sgabeblack@google.comexternal_type(Cycles, primitive="yes", default="Cycles(0)");
4014184Sgabeblack@google.comexternal_type(Tick, primitive="yes", default="0");
4114184Sgabeblack@google.com
4214184Sgabeblack@google.comstructure(WriteMask, external="yes", desc="...") {
4314184Sgabeblack@google.com  void clear();
4414184Sgabeblack@google.com  bool cmpMask(WriteMask);
4514184Sgabeblack@google.com  bool isEmpty();
4614184Sgabeblack@google.com  bool isFull();
4714184Sgabeblack@google.com  bool isOverlap(WriteMask);
4814184Sgabeblack@google.com  void orMask(WriteMask);
4914184Sgabeblack@google.com  void fillMask();
5014184Sgabeblack@google.com}
5114184Sgabeblack@google.com
5214184Sgabeblack@google.comstructure(DataBlock, external = "yes", desc="..."){
5314184Sgabeblack@google.com  void clear();
5414184Sgabeblack@google.com  void copyPartial(DataBlock, int, int);
5514184Sgabeblack@google.com  void copyPartial(DataBlock, WriteMask);
5614184Sgabeblack@google.com  void atomicPartial(DataBlock, WriteMask);
5714184Sgabeblack@google.com}
5814184Sgabeblack@google.com
5914184Sgabeblack@google.combool testAndRead(Addr addr, DataBlock datablk, Packet *pkt);
6014184Sgabeblack@google.combool testAndReadMask(Addr addr, DataBlock datablk, WriteMask mask, Packet *pkt);
6114184Sgabeblack@google.combool testAndWrite(Addr addr, DataBlock datablk, Packet *pkt);
6214184Sgabeblack@google.com
6314184Sgabeblack@google.com// AccessPermission
6414184Sgabeblack@google.com// The following five states define the access permission of all memory blocks.
6514184Sgabeblack@google.com// These permissions have multiple uses.  They coordinate locking and
6614184Sgabeblack@google.com// synchronization primitives, as well as enable functional accesses.
6714184Sgabeblack@google.com// One should not need to add any additional permission values and it is very
6814184Sgabeblack@google.com// risky to do so.
6914184Sgabeblack@google.comenumeration(AccessPermission, desc="...", default="AccessPermission_NotPresent") {
7014184Sgabeblack@google.com  // Valid data
7114184Sgabeblack@google.com  Read_Only,  desc="block is Read Only (modulo functional writes)";
7214184Sgabeblack@google.com  Read_Write, desc="block is Read/Write";
7314184Sgabeblack@google.com
7414184Sgabeblack@google.com  // Possibly Invalid data
7514184Sgabeblack@google.com  // The maybe stale permission indicates that accordingly to the protocol,
7614184Sgabeblack@google.com  // there is no guarantee the block contains valid data.  However, functional
7714184Sgabeblack@google.com  // writes should update the block because a dataless PUT request may
7814184Sgabeblack@google.com  // revalidate the block's data.
7914184Sgabeblack@google.com  Maybe_Stale, desc="block can be stale or revalidated by a dataless PUT";
8014184Sgabeblack@google.com  // In Broadcast/Snoop protocols, memory has no idea if it is exclusive owner
8114184Sgabeblack@google.com  // or not of a block, making it hard to make the logic of having only one
8214184Sgabeblack@google.com  // read_write block in the system impossible. This is to allow the memory to
8314184Sgabeblack@google.com  // say, "I have the block" and for the RubyPort logic to know that this is a
8414184Sgabeblack@google.com  // last-resort block if there are no writable copies in the caching hierarchy.
8514184Sgabeblack@google.com  // This is not supposed to be used in directory or token protocols where
8614184Sgabeblack@google.com  // memory/NB has an idea of what is going on in the whole system.
8714184Sgabeblack@google.com  Backing_Store, desc="for memory in Broadcast/Snoop protocols";
8814184Sgabeblack@google.com
8914184Sgabeblack@google.com  // Invalid data
9014184Sgabeblack@google.com  Invalid,    desc="block is in an Invalid base state";
9114184Sgabeblack@google.com  NotPresent, desc="block is NotPresent";
9214184Sgabeblack@google.com  Busy,       desc="block is in a transient state, currently invalid";
9314184Sgabeblack@google.com}
9414184Sgabeblack@google.com//HSA scopes
9514184Sgabeblack@google.comenumeration(HSAScope, desc="...", default="HSAScope_UNSPECIFIED") {
9614184Sgabeblack@google.com  UNSPECIFIED, desc="Unspecified scope";
9714184Sgabeblack@google.com  NOSCOPE,     desc="Explictly unscoped";
9814184Sgabeblack@google.com  WAVEFRONT,   desc="Wavefront scope";
9914184Sgabeblack@google.com  WORKGROUP,   desc="Workgroup scope";
10014184Sgabeblack@google.com  DEVICE,      desc="Device scope";
10114184Sgabeblack@google.com  SYSTEM,      desc="System scope";
10214184Sgabeblack@google.com}
10314184Sgabeblack@google.com
10414184Sgabeblack@google.com// HSA segment types
10514184Sgabeblack@google.comenumeration(HSASegment, desc="...", default="HSASegment_GLOBAL") {
10614184Sgabeblack@google.com  GLOBAL,   desc="Global segment";
10714184Sgabeblack@google.com  GROUP,    desc="Group segment";
10814184Sgabeblack@google.com  PRIVATE,  desc="Private segment";
10914184Sgabeblack@google.com  KERNARG,  desc="Kernarg segment";
11014184Sgabeblack@google.com  READONLY, desc="Readonly segment";
11114184Sgabeblack@google.com  SPILL,    desc="Spill segment";
11214184Sgabeblack@google.com  ARG,      desc="Arg segment";
11314184Sgabeblack@google.com}
11414184Sgabeblack@google.com
11514184Sgabeblack@google.com// TesterStatus
11614184Sgabeblack@google.comenumeration(TesterStatus, desc="...") {
11714184Sgabeblack@google.com  Idle,            desc="Idle";
11814184Sgabeblack@google.com  Action_Pending,  desc="Action Pending";
11914184Sgabeblack@google.com  Ready,           desc="Ready";
12014184Sgabeblack@google.com  Check_Pending,   desc="Check Pending";
12114184Sgabeblack@google.com}
12214184Sgabeblack@google.com
12314184Sgabeblack@google.com// InvalidateGeneratorStatus
12414184Sgabeblack@google.comenumeration(InvalidateGeneratorStatus, desc="...") {
12514184Sgabeblack@google.com  Load_Waiting,    desc="Load waiting to be issued";
12614184Sgabeblack@google.com  Load_Pending,    desc="Load issued";
12714184Sgabeblack@google.com  Inv_Waiting,     desc="Store (invalidate) waiting to be issued";
12814184Sgabeblack@google.com  Inv_Pending,     desc="Store (invalidate) issued";
12914184Sgabeblack@google.com}
13014184Sgabeblack@google.com
13114184Sgabeblack@google.com// SeriesRequestGeneratorStatus
13214184Sgabeblack@google.comenumeration(SeriesRequestGeneratorStatus, desc="...") {
13314184Sgabeblack@google.com  Thinking,        desc="Doing work before next action";
13414184Sgabeblack@google.com  Request_Pending, desc="Request pending";
13514184Sgabeblack@google.com}
13614184Sgabeblack@google.com
13714184Sgabeblack@google.com// LockStatus
13814184Sgabeblack@google.comenumeration(LockStatus, desc="...") {
13914184Sgabeblack@google.com  Unlocked,        desc="Lock is not held";
14014184Sgabeblack@google.com  Locked,          desc="Lock is held";
14114184Sgabeblack@google.com}
14214184Sgabeblack@google.com
14314184Sgabeblack@google.com// SequencerStatus
14414184Sgabeblack@google.comenumeration(SequencerStatus, desc="...") {
14514184Sgabeblack@google.com  Idle,            desc="Idle";
14614184Sgabeblack@google.com  Pending,         desc="Pending";
14714184Sgabeblack@google.com}
14814184Sgabeblack@google.com
14914184Sgabeblack@google.comenumeration(TransitionResult, desc="...") {
15014184Sgabeblack@google.com  Valid,         desc="Valid transition";
15114184Sgabeblack@google.com  ResourceStall, desc="Stalled due to insufficient resources";
15214184Sgabeblack@google.com  ProtocolStall, desc="Protocol specified stall";
15314184Sgabeblack@google.com  Reject,        desc="Rejected because of a type mismatch";
15414184Sgabeblack@google.com}
15514184Sgabeblack@google.com
15614184Sgabeblack@google.com// RubyRequestType
15714184Sgabeblack@google.comenumeration(RubyRequestType, desc="...", default="RubyRequestType_NULL") {
15814184Sgabeblack@google.com  LD,                desc="Load";
15914184Sgabeblack@google.com  ST,                desc="Store";
16014184Sgabeblack@google.com  ATOMIC,            desc="Atomic Load/Store -- depricated. use ATOMIC_RETURN or ATOMIC_NO_RETURN";
16114184Sgabeblack@google.com  ATOMIC_RETURN,     desc="Atomic Load/Store, return data";
16214184Sgabeblack@google.com  ATOMIC_NO_RETURN,  desc="Atomic Load/Store, do not return data";
16314184Sgabeblack@google.com  IFETCH,            desc="Instruction fetch";
16414184Sgabeblack@google.com  IO,                desc="I/O";
16514184Sgabeblack@google.com  REPLACEMENT,       desc="Replacement";
16614184Sgabeblack@google.com  Load_Linked,       desc="";
16714184Sgabeblack@google.com  Store_Conditional, desc="";
16814184Sgabeblack@google.com  RMW_Read,          desc="";
16914184Sgabeblack@google.com  RMW_Write,         desc="";
17014184Sgabeblack@google.com  Locked_RMW_Read,   desc="";
17114184Sgabeblack@google.com  Locked_RMW_Write,  desc="";
17214184Sgabeblack@google.com  COMMIT,            desc="Commit version";
17314184Sgabeblack@google.com  NULL,              desc="Invalid request type";
17414184Sgabeblack@google.com  FLUSH,             desc="Flush request type";
17514184Sgabeblack@google.com  Release,           desc="Release operation";
17614184Sgabeblack@google.com  Acquire,           desc="Acquire opertion";
17714184Sgabeblack@google.com  AcquireRelease,    desc="Acquire and Release opertion";
17814184Sgabeblack@google.com}
17914184Sgabeblack@google.com
18014184Sgabeblack@google.comenumeration(SequencerRequestType, desc="...", default="SequencerRequestType_NULL") {
18114184Sgabeblack@google.com  Default,     desc="Replace this with access_types passed to the DMA Ruby object";
18214184Sgabeblack@google.com  LD,          desc="Load";
18314184Sgabeblack@google.com  ST,          desc="Store";
18414184Sgabeblack@google.com  ATOMIC,      desc="Atomic Load/Store";
18514184Sgabeblack@google.com  REPLACEMENT, desc="Replacement";
18614184Sgabeblack@google.com  FLUSH,       desc="Flush request type";
18714184Sgabeblack@google.com  NULL,        desc="Invalid request type";
18814184Sgabeblack@google.com}
18914184Sgabeblack@google.com
19014184Sgabeblack@google.comenumeration(CacheRequestType, desc="...", default="CacheRequestType_NULL") {
19114184Sgabeblack@google.com  DataArrayRead,    desc="Read access to the cache's data array";
19214184Sgabeblack@google.com  DataArrayWrite,   desc="Write access to the cache's data array";
19314184Sgabeblack@google.com  TagArrayRead,     desc="Read access to the cache's tag array";
19414184Sgabeblack@google.com  TagArrayWrite,    desc="Write access to the cache's tag array";
19514184Sgabeblack@google.com}
19614184Sgabeblack@google.com
19714184Sgabeblack@google.comenumeration(CacheResourceType, desc="...", default="CacheResourceType_NULL") {
19814184Sgabeblack@google.com  DataArray,    desc="Access to the cache's data array";
19914184Sgabeblack@google.com  TagArray,     desc="Access to the cache's tag array";
20014184Sgabeblack@google.com}
20114184Sgabeblack@google.com
20214184Sgabeblack@google.comenumeration(DirectoryRequestType, desc="...", default="DirectoryRequestType_NULL") {
20314184Sgabeblack@google.com  Default,    desc="Replace this with access_types passed to the Directory Ruby object";
20414184Sgabeblack@google.com}
20514184Sgabeblack@google.com
20614184Sgabeblack@google.comenumeration(DMASequencerRequestType, desc="...", default="DMASequencerRequestType_NULL") {
20714184Sgabeblack@google.com  Default,    desc="Replace this with access_types passed to the DMA Ruby object";
20814184Sgabeblack@google.com}
20914184Sgabeblack@google.com
21014184Sgabeblack@google.comenumeration(MemoryControlRequestType, desc="...", default="MemoryControlRequestType_NULL") {
21114184Sgabeblack@google.com  Default,    desc="Replace this with access_types passed to the DMA Ruby object";
21214184Sgabeblack@google.com}
21314184Sgabeblack@google.com
21414184Sgabeblack@google.com
21514184Sgabeblack@google.com// These are statically defined types of states machines that we can have.
21614184Sgabeblack@google.com// If you want to add a new machine type, edit this enum.  It is not necessary
21714184Sgabeblack@google.com// for a protocol to have state machines defined for the all types here.  But
21814184Sgabeblack@google.com// you cannot use anything other than the ones defined here.  Also, a protocol
21914184Sgabeblack@google.com// can have only one state machine for a given type.
22014184Sgabeblack@google.comenumeration(MachineType, desc="...", default="MachineType_NULL") {
22114184Sgabeblack@google.com    L0Cache,     desc="L0 Cache Mach";
22214184Sgabeblack@google.com    L1Cache,     desc="L1 Cache Mach";
22314184Sgabeblack@google.com    L2Cache,     desc="L2 Cache Mach";
22414184Sgabeblack@google.com    L3Cache,     desc="L3 Cache Mach";
22514184Sgabeblack@google.com    Directory,   desc="Directory Mach";
22614184Sgabeblack@google.com    DMA,         desc="DMA Mach";
22714184Sgabeblack@google.com    Collector,   desc="Collector Mach";
22814184Sgabeblack@google.com    L1Cache_wCC, desc="L1 Cache Mach to track cache-to-cache transfer (used for miss latency profile)";
22914184Sgabeblack@google.com    L2Cache_wCC, desc="L2 Cache Mach to track cache-to-cache transfer (used for miss latency profile)";
23014184Sgabeblack@google.com    CorePair,    desc="Cache Mach (2 cores, Private L1Ds, Shared L1I & L2)";
23114184Sgabeblack@google.com    TCP,         desc="GPU L1 Data Cache (Texture Cache per Pipe)";
23214184Sgabeblack@google.com    TCC,         desc="GPU L2 Shared Cache (Texture Cache per Channel)";
23314184Sgabeblack@google.com    TCCdir,      desc="Directory at the GPU L2 Cache (TCC)";
23414184Sgabeblack@google.com    SQC,         desc="GPU L1 Instr Cache (Sequencer Cache)";
23514184Sgabeblack@google.com    RegionDir,   desc="Region-granular directory";
23614184Sgabeblack@google.com    RegionBuffer,desc="Region buffer for CPU and GPU";
23714184Sgabeblack@google.com    NULL,        desc="null mach type";
23814184Sgabeblack@google.com}
23914184Sgabeblack@google.com
24014184Sgabeblack@google.com// MessageSizeType
24114184Sgabeblack@google.comenumeration(MessageSizeType, desc="...") {
24214184Sgabeblack@google.com  Control,    desc="Control Message";
24314184Sgabeblack@google.com  Data,       desc="Data Message";
24414184Sgabeblack@google.com  Request_Control, desc="Request";
24514184Sgabeblack@google.com  Reissue_Control, desc="Reissued request";
24614184Sgabeblack@google.com  Response_Data, desc="data response";
24714184Sgabeblack@google.com  ResponseL2hit_Data, desc="data response";
24814184Sgabeblack@google.com  ResponseLocal_Data, desc="data response";
24914184Sgabeblack@google.com  Response_Control, desc="non-data response";
25014184Sgabeblack@google.com  Writeback_Data, desc="Writeback data";
25114184Sgabeblack@google.com  Writeback_Control, desc="Writeback control";
25214184Sgabeblack@google.com  Broadcast_Control, desc="Broadcast control";
25314184Sgabeblack@google.com  Multicast_Control, desc="Multicast control";
25414184Sgabeblack@google.com  Forwarded_Control, desc="Forwarded control";
25514184Sgabeblack@google.com  Invalidate_Control, desc="Invalidate control";
25614184Sgabeblack@google.com  Unblock_Control, desc="Unblock control";
25714184Sgabeblack@google.com  Persistent_Control, desc="Persistent request activation messages";
25814184Sgabeblack@google.com  Completion_Control, desc="Completion messages";
25914184Sgabeblack@google.com}
26014184Sgabeblack@google.com
26114184Sgabeblack@google.com// AccessType
26214184Sgabeblack@google.comenumeration(AccessType, desc="...") {
26314184Sgabeblack@google.com  Read, desc="Reading from cache";
26414184Sgabeblack@google.com  Write, desc="Writing to cache";
26514184Sgabeblack@google.com}
26614184Sgabeblack@google.com
26714184Sgabeblack@google.com// RubyAccessMode
26814184Sgabeblack@google.comenumeration(RubyAccessMode, default="RubyAccessMode_User", desc="...") {
26914184Sgabeblack@google.com  Supervisor, desc="Supervisor mode";
27014184Sgabeblack@google.com  User,       desc="User mode";
27114184Sgabeblack@google.com  Device, desc="Device mode";
27214184Sgabeblack@google.com}
27314184Sgabeblack@google.com
27414184Sgabeblack@google.comenumeration(PrefetchBit, default="PrefetchBit_No", desc="...") {
27514184Sgabeblack@google.com  No,    desc="No, not a prefetch";
27614184Sgabeblack@google.com  Yes,   desc="Yes, a prefetch";
27714184Sgabeblack@google.com  L1_HW, desc="This is a L1 hardware prefetch";
27814184Sgabeblack@google.com  L2_HW, desc="This is a L2 hardware prefetch";
27914184Sgabeblack@google.com}
28014184Sgabeblack@google.com
28114184Sgabeblack@google.com// CacheMsg
28214184Sgabeblack@google.comstructure(SequencerMsg, desc="...", interface="Message") {
28314184Sgabeblack@google.com  Addr LineAddress,       desc="Line address for this request";
28414184Sgabeblack@google.com  Addr PhysicalAddress,   desc="Physical address for this request";
28514184Sgabeblack@google.com  SequencerRequestType Type,     desc="Type of request (LD, ST, etc)";
28614184Sgabeblack@google.com  Addr ProgramCounter,    desc="Program counter of the instruction that caused the miss";
28714184Sgabeblack@google.com  RubyAccessMode AccessMode, desc="user/supervisor access type";
28814184Sgabeblack@google.com  DataBlock DataBlk,         desc="Data";
28914184Sgabeblack@google.com  int Len,                   desc="size in bytes of access";
29014184Sgabeblack@google.com  PrefetchBit Prefetch,      desc="Is this a prefetch request";
29114184Sgabeblack@google.com  MessageSizeType MessageSize, default="MessageSizeType_Request_Control";
29214184Sgabeblack@google.com
29314184Sgabeblack@google.com  bool functionalRead(Packet *pkt) {
29414184Sgabeblack@google.com    return testAndRead(PhysicalAddress, DataBlk, pkt);
29514184Sgabeblack@google.com  }
29614184Sgabeblack@google.com
29714184Sgabeblack@google.com  bool functionalWrite(Packet *pkt) {
29814184Sgabeblack@google.com    return testAndWrite(PhysicalAddress, DataBlk, pkt);
29914184Sgabeblack@google.com  }
30014184Sgabeblack@google.com}
30114184Sgabeblack@google.com
30214184Sgabeblack@google.com// MaskPredictorType
30314184Sgabeblack@google.comenumeration(MaskPredictorType, "MaskPredictorType_Undefined", desc="...") {
30414184Sgabeblack@google.com  Undefined, desc="Undefined";
30514184Sgabeblack@google.com  AlwaysUnicast, desc="AlwaysUnicast";
30614184Sgabeblack@google.com  TokenD, desc="TokenD";
30714184Sgabeblack@google.com  AlwaysBroadcast, desc="AlwaysBroadcast";
30814184Sgabeblack@google.com  TokenB, desc="TokenB";
30914184Sgabeblack@google.com  TokenNull, desc="TokenNull";
31014184Sgabeblack@google.com  Random, desc="Random";
31114184Sgabeblack@google.com  Pairwise, desc="Pairwise";
31214184Sgabeblack@google.com  Owner, desc="Owner";
31314184Sgabeblack@google.com  BroadcastIfShared, desc="Broadcast-If-Shared";
31414184Sgabeblack@google.com  BroadcastCounter, desc="Broadcast Counter";
31514184Sgabeblack@google.com  Group, desc="Group";
31614184Sgabeblack@google.com  Counter, desc="Counter";
31714184Sgabeblack@google.com  StickySpatial, desc="StickySpatial";
31814184Sgabeblack@google.com  OwnerBroadcast, desc="Owner/Broadcast Hybrid";
31914184Sgabeblack@google.com  OwnerGroup, desc="Owner/Group Hybrid";
32014184Sgabeblack@google.com  OwnerBroadcastMod, desc="Owner/Broadcast Hybrid-Mod";
32114184Sgabeblack@google.com  OwnerGroupMod, desc="Owner/Group Hybrid-Mod";
32214184Sgabeblack@google.com  LastNMasks, desc="Last N Masks";
32314184Sgabeblack@google.com  BandwidthAdaptive, desc="Bandwidth Adaptive";
32414184Sgabeblack@google.com}
32514184Sgabeblack@google.com
32614184Sgabeblack@google.com// MaskPredictorIndex
32714184Sgabeblack@google.comenumeration(MaskPredictorIndex, "MaskPredictorIndex_Undefined", desc="...") {
32814184Sgabeblack@google.com  Undefined, desc="Undefined";
32914184Sgabeblack@google.com  DataBlock, desc="Data Block";
33014184Sgabeblack@google.com  PC, desc="Program Counter";
33114184Sgabeblack@google.com}
33214184Sgabeblack@google.com
33314184Sgabeblack@google.com// MaskPredictorTraining
33414184Sgabeblack@google.comenumeration(MaskPredictorTraining, "MaskPredictorTraining_Undefined", desc="...") {
33514184Sgabeblack@google.com  Undefined, desc="Undefined";
33614184Sgabeblack@google.com  None, desc="None";
33714184Sgabeblack@google.com  Implicit, desc="Implicit";
33814184Sgabeblack@google.com  Explicit, desc="Explicit";
33914184Sgabeblack@google.com  Both, desc="Both";
34014184Sgabeblack@google.com}
34114184Sgabeblack@google.com
34214184Sgabeblack@google.com// Request Status
34314184Sgabeblack@google.comenumeration(RequestStatus, desc="...", default="RequestStatus_NULL")  {
34414184Sgabeblack@google.com  Ready, desc="The sequencer is ready and the request does not alias";
34514184Sgabeblack@google.com  Issued, desc="The sequencer successfully issued the request";
34614184Sgabeblack@google.com  BufferFull, desc="Can not issue because the sequencer is full";
34714184Sgabeblack@google.com  Aliased, desc="This request aliased with a currently outstanding request";
34814184Sgabeblack@google.com  NULL, desc="";
34914184Sgabeblack@google.com}
35014184Sgabeblack@google.com
35114184Sgabeblack@google.com// LinkDirection
35214184Sgabeblack@google.comenumeration(LinkDirection, desc="...") {
35314184Sgabeblack@google.com  In, desc="Inward link direction";
35414184Sgabeblack@google.com  Out, desc="Outward link direction";
35514184Sgabeblack@google.com}
356