openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

cosq.h (5484B)


      1 /*
      2  * 
      3  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4  * 
      5  * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      6  *
      7  * This file defines COSQ constants 
      8  *
      9  * Its contents are not used directly by applications; it is used only
     10  * by header files of parent APIs which need to share  COSQ constants.
     11  */
     12 
     13 #ifndef _SHR_COSQ_H
     14 #define _SHR_COSQ_H
     15 
     16 #define _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTIL_WHOLE_SHIFT    0
     17 #define _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTIL_WHOLE_MASK     0xFFFF
     18 #define _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTIL_FRACT_SHIFT    (16)
     19 #define _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTIL_FRACT_MASK     0xFFFF
     20 
     21 #define _SHR_COSQ_GPORT_PRIORITY_PROFILE_SHIFT                  16
     22 #define _SHR_COSQ_GPORT_PRIORITY_PROFILE_MASK			        0x07
     23 
     24 /* 
     25  *  COSQ macros for bcm_cosq_control_t types
     26  */
     27 #define _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTILIZATION_SET(whole_utilization, fractional_utilization) \
     28               (((whole_utilization & _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTIL_WHOLE_MASK) <<           \
     29                                         _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTIL_WHOLE_SHIFT) |        \
     30                ((fractional_utilization & _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTIL_FRACT_MASK) <<      \
     31                                         _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTIL_FRACT_SHIFT))
     32 
     33 #define _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTILIZATION_WHOLE_GET(utilization)                         \
     34                 ((utilization >> _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTIL_WHOLE_SHIFT) & _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTIL_WHOLE_MASK)
     35 
     36 
     37 #define _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTILIZATION_FRACTIONAL_GET(utilization)                    \
     38                 ((utilization >> _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTIL_FRACT_SHIFT) & _SHR_COSQ_CONTROL_FABRIC_CONNECT_MIN_UTIL_FRACT_MASK)
     39 
     40 
     41 /*
     42  * priority profile template
     43  */
     44 #define _SHR_COSQ_GPORT_PRIORITY_PROFILE_SET(_flags, _profile)             \
     45     _flags = _flags | ((_profile & _SHR_COSQ_GPORT_PRIORITY_PROFILE_MASK) << _SHR_COSQ_GPORT_PRIORITY_PROFILE_SHIFT)
     46 #define _SHR_COSQ_GPORT_PRIORITY_PROFILE_GET(_flags)                       \
     47     ((_flags >> _SHR_COSQ_GPORT_PRIORITY_PROFILE_SHIFT) & _SHR_COSQ_GPORT_PRIORITY_PROFILE_MASK)
     48 
     49 typedef enum _shr_cosq_threshold_type_e {
     50     _SHR_COSQ_THRESHOLD_BYTES,
     51     _SHR_COSQ_THRESHOLD_PACKET_DESCRIPTORS,
     52     _SHR_COSQ_THRESHOLD_PACKETS,
     53     _SHR_COSQ_THRESHOLD_DATA_BUFFERS,
     54     _SHR_COSQ_THRESHOLD_AVAILABLE_PACKET_DESCRIPTORS,
     55     _SHR_COSQ_THRESHOLD_AVAILABLE_DATA_BUFFERS,
     56     _SHR_COSQ_THRESHOLD_BUFFER_DESCRIPTOR_BUFFERS,
     57     _SHR_COSQ_THRESHOLD_BUFFER_DESCRIPTORS,
     58     _SHR_COSQ_THRESHOLD_DBUFFS,
     59     _SHR_COSQ_THRESHOLD_FULL_DBUFFS,
     60     _SHR_COSQ_THRESHOLD_MINI_DBUFFS,
     61     _SHR_COSQ_THRESHOLD_DYNAMIC_WEIGHT,
     62     _SHR_COSQ_THRESHOLD_PACKET_DESCRIPTORS_MIN,
     63     _SHR_COSQ_THRESHOLD_PACKET_DESCRIPTORS_MAX,
     64     _SHR_COSQ_THRESHOLD_PACKET_DESCRIPTORS_ALPHA,
     65     _SHR_COSQ_THRESHOLD_DATA_BUFFERS_MIN,
     66     _SHR_COSQ_THRESHOLD_DATA_BUFFERS_MAX,
     67     _SHR_COSQ_THERESHOLD_DATA_BUFFERS_ALPHA,
     68     _SHR_COSQ_THRESHOLD_OCB_DBUFFS,
     69     _SHR_COSQ_THRESHOLD_PACKET_DESCRIPTOR_BUFFERS,
     70     _SHR_COSQ_THRESHOLD_BUNDLE_DESCRIPTOR_BUFFERS,
     71     _SHR_COSQ_THERESHOLD_DATA_BUFFERS_ALPHA1,
     72     _SHR_COSQ_THRESHOLD_OCB_PACKET_DESCRIPTOR_BUFFERS,
     73     _SHR_COSQ_THRESHOLD_NUM
     74 } _shr_cosq_threshold_type_t;
     75 
     76 
     77 /*
     78  * COSQ_TH_INDEX support 
     79  */
     80 #define _SHR_COSQ_TH_INDEX_DP_INDICATION           (0x01000000)
     81 #define _SHR_COSQ_TH_INDEX_TC_INDICATION           (0x02000000)
     82 #define _SHR_COSQ_TH_INDEX_POOL_DP_INDICATION      (0x03000000)
     83 #define _SHR_COSQ_TH_INDEX_CLASS_FWDACT_INDICATION (0x04000000)
     84 #define _SHR_COSQ_TH_INDEX_PRIO_INDICATION         (0x05000000)
     85 #define _SHR_COSQ_TH_INDEX_POOL_PRIO_INDICATION    (0x06000000)
     86 
     87 #define _SHR_COSQ_TH_INDEX_INDICATION_MASK         (0xff000000)
     88 
     89 /** Each field is assigned 4 bits which is more than required for each of the fields */
     90 #define _SHR_COSQ_TH_INDEX_FIELD_NOF_BITS              (4)
     91 #define _SHR_COSQ_TH_INDEX_FIELD_MASK                  ( (1 << _SHR_COSQ_TH_INDEX_FIELD_NOF_BITS) - 1) /** unshifted mask */
     92 
     93 #define _SHR_COSQ_TH_INDEX_DP_SET(dp) \
     94         (_SHR_COSQ_TH_INDEX_DP_INDICATION | (dp & _SHR_COSQ_TH_INDEX_FIELD_MASK))
     95 
     96 #define _SHR_COSQ_TH_INDEX_TC_SET(tc) \
     97         (_SHR_COSQ_TH_INDEX_TC_INDICATION | (tc & _SHR_COSQ_TH_INDEX_FIELD_MASK))
     98 
     99 #define _SHR_COSQ_TH_INDEX_POOL_DP_SET(pool_id, dp) \
    100         (_SHR_COSQ_TH_INDEX_POOL_DP_INDICATION | \
    101         ((pool_id & _SHR_COSQ_TH_INDEX_FIELD_MASK) << _SHR_COSQ_TH_INDEX_FIELD_NOF_BITS) | \
    102          (dp & _SHR_COSQ_TH_INDEX_FIELD_MASK))
    103 
    104 #define _SHR_COSQ_TH_INDEX_CAST_PRIO_FWDACT_SET(cast, priority, forward_action) \
    105         (_SHR_COSQ_TH_INDEX_CLASS_FWDACT_INDICATION | \
    106          ((cast & _SHR_COSQ_TH_INDEX_FIELD_MASK) << (2 * _SHR_COSQ_TH_INDEX_FIELD_NOF_BITS)) | \
    107          ((priority & _SHR_COSQ_TH_INDEX_FIELD_MASK) << _SHR_COSQ_TH_INDEX_FIELD_NOF_BITS) | \
    108          (forward_action & _SHR_COSQ_TH_INDEX_FIELD_MASK))
    109 
    110 #define _SHR_COSQ_TH_INDEX_PRIO_SET(prio) \
    111         (_SHR_COSQ_TH_INDEX_PRIO_INDICATION | (prio & _SHR_COSQ_TH_INDEX_FIELD_MASK))
    112 
    113 #define _SHR_COSQ_TH_INDEX_POOL_PRIO_SET(pool_id, prio) \
    114         (_SHR_COSQ_TH_INDEX_POOL_PRIO_INDICATION | \
    115         ((pool_id & _SHR_COSQ_TH_INDEX_FIELD_MASK) << _SHR_COSQ_TH_INDEX_FIELD_NOF_BITS) | \
    116          (prio & _SHR_COSQ_TH_INDEX_FIELD_MASK))
    117 
    118 
    119 #endif /* !_SHR_COSQ_H */