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 */