// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.


/**
 * Tile-Link package
 */
package tl_package;
  // Bit-vector definitions
  typedef logic [2:0] opcode_t;
  typedef logic [2:0] param_t;
  typedef logic [3:0] combined_atomic_param_t;
  typedef logic [3:0] size_t;

  // Enum definitions
  typedef enum opcode_t {
    APutFullData    = 3'd0,
    APutPartialData = 3'd1,
    AArithmeticData = 3'd2,
    ALogicalData    = 3'd3,
    AGet            = 3'd4,
    AIntent         = 3'd5,
    AAcquireBlock   = 3'd6,
    AAcquirePerm    = 3'd7
  } a_opcode_e;

  typedef enum opcode_t {
    BPutFullData    = 3'd0,
    BPutPartialData = 3'd1,
    BArithmeticData = 3'd2,
    BLogicalData    = 3'd3,
    BGet            = 3'd4,
    BIntent         = 3'd5,
    BProbeBlock     = 3'd6,
    BProbePerm      = 3'd7
  } b_opcode_e;

  typedef enum opcode_t {
    CAccessAck     = 3'd0,
    CAccessAckData = 3'd1,
    CHintAck       = 3'd2,
    CProbeAck      = 3'd4,
    CProbeAckData  = 3'd5,
    CRelease       = 3'd6,
    CReleaseData   = 3'd7
  } c_opcode_e;

  typedef enum opcode_t {
    DAccessAck     = 3'd0,
    DAccessAckData = 3'd1,
    DHintAck       = 3'd2,
    DGrant         = 3'd4,
    DGrantData     = 3'd5,
    DReleaseAck    = 3'd6
  } d_opcode_e;

  typedef enum param_t {
    ArithmeticAtomicParamMin  = 3'd0,
    ArithmeticAtomicParamMax  = 3'd1,
    ArithmeticAtomicParamMinU = 3'd2,
    ArithmeticAtomicParamMaxU = 3'd3,
    ArithmeticAtomicParamAdd  = 3'd4
  } arithmetic_data_param_e;

  typedef enum param_t {
    LogicalAtomicParamXor  = 3'd0,
    LogicalAtomicParamOr   = 3'd1,
    LogicalAtomicParamAnd  = 3'd2,
    LogicalAtomicParamSwap = 3'd3
  } logical_data_param_e;


  typedef enum combined_atomic_param_t {
    CombinedAtomicParamMin  = 4'd0,
    CombinedAtomicParamMax  = 4'd1,
    CombinedAtomicParamMinU = 4'd2,
    CombinedAtomicParamMaxU = 4'd3,
    CombinedAtomicParamAdd  = 4'd4,
    CombinedAtomicParamXor  = 4'd8,
    CombinedAtomicParamOr   = 4'd9,
    CombinedAtomicParamAnd  = 4'd10,
    CombinedAtomicParamSwap = 4'd11
  } combined_atomic_param_e;

  typedef enum param_t {
    PrefetchRead  = 3'd0,
    PrefetchWrite = 3'd1
  } hint_param_e;

  typedef enum param_t {
    toT = 3'd0,
    toB = 3'd1,
    toN = 3'd2
  } cap_param_e;

  typedef enum param_t {
    NtoB = 3'd0,
    NtoT = 3'd1,
    BtoT = 3'd2
  } grow_param_e;

  typedef enum param_t {
    TtoB = 3'd0,
    TtoN = 3'd1,
    BtoN = 3'd2
  } prune_param_e;

  typedef enum param_t {
    TtoT = 3'd3,
    BtoB = 3'd4,
    NtoN = 3'd5
  } report_param_e;

endpackage
