cosq_int.h (6105B)
1 /* \file cosq_int.h 2 * 3 * ltsw COSQ module internal header file. 4 * Include structure definitions and function declarations used by COSQ module. 5 */ 6 /* 7 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 8 * 9 * Copyright 2007-2020 Broadcom Inc. All rights reserved. 10 */ 11 #ifndef BCMI_LTSW_COSQ_INT_H 12 #define BCMI_LTSW_COSQ_INT_H 13 14 #include <bcm/types.h> 15 #include <sal/sal_types.h> 16 17 /* 18 * \brief HA subcomponent id for COSQ module. 19 */ 20 #define BCMINT_COSQ_WRED_SUB_COMP_ID 0 21 #define BCMINT_COSQ_PFC_DEADLOCK_SUB_COMP_ID 1 22 #define BCMINT_COSQ_CPU_LIMIT_SUB_COMP_ID 2 23 #define BCMINT_COSQ_CPU_SHARED_LIMIT_SUB_COMP_ID 3 24 #define BCMINT_COSQ_CPU_DYNAMIC_SUB_COMP_ID 4 25 #define BCMINT_COSQ_CPU_LIMIT_ENABLE_SUB_COMP_ID 5 26 #define BCMINT_COSQ_CPU_COLOR_LIMIT_SUB_COMP_ID 6 27 #define BCMINT_COSQ_EBST_ENABLE_SUB_COMP_ID 7 28 #define BCMINT_COSQ_EBST_SCAN_INTERVAL_SUB_COMP_ID 8 29 #define BCMINT_COSQ_MOD_PROFILE_BMP_SUB_COMP_ID 9 30 31 /* Queue average offset for congestion profile. */ 32 #define COSQ_WRED_CNG_Q_AVG_OFFSET 0 33 /* Queue minimum offset for congestion profile. */ 34 #define COSQ_WRED_CNG_Q_MIN_OFFSET 1 35 /* Service pool offset for congestion profile. */ 36 #define COSQ_WRED_CNG_SERVICE_POOL_OFFSET 2 37 /* 38 * Number of entries per congestion profile. 39 * | SP | Q_MIN | Q_AVG 40 * 3 2| 1 | 0 41 * SP : 00 Low congestion 42 * 01 Medium congestion 43 * 11 High congestion 44 * Q_MIN and Q_AVG: 0 (no congestion) and 1 (congestion). 45 */ 46 #define COSQ_WRED_CNG_ENTRY_PER_PROFILE 12 47 48 /* 49 * \brief The classifier_id used by bcm_cosq_classifier_* APIs 50 * contains two fields, a 6-bit type field, followed by 51 * a 26-bit value field. 52 */ 53 #define BCMINT_COSQ_CLASSIFIER_TYPE_FIELD (1 << 2) 54 #define BCMINT_COSQ_CLASSIFIER_TYPE_SHIFT 26 55 #define BCMINT_COSQ_CLASSIFIER_FIELD_SHIFT (0) 56 #define BCMINT_COSQ_CLASSIFIER_FIELD_MASK (0x3ffffff) 57 58 #define BCMINT_COSQ_CLASSIFIER_IS_FIELD(_classifier) \ 59 (((_classifier) >> BCMINT_COSQ_CLASSIFIER_TYPE_SHIFT) == \ 60 BCMINT_COSQ_CLASSIFIER_TYPE_FIELD) 61 62 #define BCMINT_COSQ_CLASSIFIER_FIELD_SET(_classifier, _id) \ 63 ((_classifier) = (BCMINT_COSQ_CLASSIFIER_TYPE_FIELD \ 64 << BCMINT_COSQ_CLASSIFIER_TYPE_SHIFT) | \ 65 (((_id) & BCMINT_COSQ_CLASSIFIER_FIELD_MASK) \ 66 << BCMINT_COSQ_CLASSIFIER_FIELD_SHIFT)) 67 68 #define BCMINT_COSQ_CLASSIFIER_FIELD_GET(_classifier) \ 69 (((_classifier) >> BCMINT_COSQ_CLASSIFIER_FIELD_SHIFT) \ 70 & BCMINT_COSQ_CLASSIFIER_FIELD_MASK) 71 72 #define BCMINT_COSQ_CLASSIFIER_TYPE_FIELD_HI (1 << 3) 73 74 #define BCMINT_COSQ_CLASSIFIER_IS_FIELD_HI(_classifier) \ 75 (((_classifier) >> BCMINT_COSQ_CLASSIFIER_TYPE_SHIFT) == \ 76 BCMINT_COSQ_CLASSIFIER_TYPE_FIELD_HI) 77 78 #define BCMINT_COSQ_CLASSIFIER_FIELD_HI_SET(_classifier, _id) \ 79 ((_classifier) = (BCMINT_COSQ_CLASSIFIER_TYPE_FIELD_HI \ 80 << BCMINT_COSQ_CLASSIFIER_TYPE_SHIFT) | \ 81 (((_id) & BCMINT_COSQ_CLASSIFIER_FIELD_MASK) \ 82 << BCMINT_COSQ_CLASSIFIER_FIELD_SHIFT)) 83 84 #define BCMINT_COSQ_CLASSIFIER_FIELD_HI_GET(_classifier) \ 85 (((_classifier) >> BCMINT_COSQ_CLASSIFIER_FIELD_SHIFT) \ 86 & BCMINT_COSQ_CLASSIFIER_FIELD_MASK) 87 88 /* 89 * \brief TM_Q_ASSIGNMENT_INFO_ID_T type enum. 90 */ 91 typedef enum bcmint_tm_q_assignment_info_id_type_s { 92 /* Enumeration for TM_UNICAST_VIEW. */ 93 BCMINT_TM_UNICAST_VIEW = 0, 94 95 /* Enumeration for TM_NON_UNICAST_VIEW. */ 96 BCMINT_TM_NON_UNICAST_VIEW = 1, 97 98 /* Enumeration for TM_IFP_UNICAST_VIEW. */ 99 BCMINT_TM_IFP_UNICAST_VIEW = 2, 100 101 /* Enumeration for TM_IFP_NON_UNICAST_VIEW. */ 102 BCMINT_TM_IFP_NON_UNICAST_VIEW = 3, 103 104 /* Enumeration for TM_DST_FP_UNICAST_VIEW. */ 105 BCMINT_TM_DST_FP_UNICAST_VIEW = 4, 106 107 /* Enumeration for TM_DST_FP_NON_UNICAST_VIEW. */ 108 BCMINT_TM_DST_FP_NON_UNICAST_VIEW = 5, 109 110 /* Enumeration for TM_IFP_UNICAST_HI_VIEW_INDEX. */ 111 BCMINT_TM_IFP_UNICAST_HI_VIEW = 6, 112 113 /* Enumeration for TM_IFP_NON_UNICAST_HI_VIEW_INDEX. */ 114 BCMINT_TM_IFP_NON_UNICAST_HI_VIEW = 7, 115 116 /* The last one, not valid. */ 117 BCMINT_TM_Q_ASSIGN_ID_TYPE_COUNT = 8 118 119 } bcmint_tm_q_assignment_info_id_type_t; 120 121 /* 122 * \brief Cosq string map structure. 123 */ 124 typedef struct bcmint_cosq_str_map_s { 125 126 /*! Index of the mapped object. */ 127 int idx; 128 129 /*! Map string. */ 130 const char * str; 131 132 /*! Profile id. */ 133 int profile_id; 134 135 /*! base index. */ 136 int base_index; 137 138 /*! Enable to use multicast COS from mirroring. */ 139 bool mc_cos_mirror; 140 } bcmint_cosq_str_map_t; 141 142 /* 143 * \brief Cosq string map handle. 144 */ 145 /* TM_Q_ASSIGNMENT_INFO_ID_T type handle. */ 146 #define BCMINT_TM_Q_ASSIGNMENT_INFO_ID_T 0 147 148 /* 149 * \brief Cosq string map database structure. 150 */ 151 typedef struct bcmint_cosq_str_map_db_s { 152 153 /* Cosq string map handle(BCMINT_L2_MAP_SH_XXX). */ 154 int hdl; 155 156 /* Map info. */ 157 const bcmint_cosq_str_map_t *info; 158 159 /* Num of elements in map info. */ 160 int num; 161 162 } bcmint_cosq_str_map_db_t; 163 164 /* 165 * \brief Cosq map database structure. 166 */ 167 typedef struct bcmint_cosq_map_db_s { 168 169 /*! String database. */ 170 const bcmint_cosq_str_map_db_t *str_db; 171 172 /*! Num of elements in string database. */ 173 int str_num; 174 175 } bcmint_cosq_map_db_t; 176 177 #define TM_Q_ASSIGNMENT_INFO_MAX_POLICY 4 178 179 typedef struct bcmint_cosq_assignment_info_s { 180 181 /* ipost_scratch_bus_unicast_flow[0:0], no overlay. */ 182 const char *unicast; 183 184 /* ipost_scratch_bus_switch_to_cpu[0:0], no overlay. */ 185 const char *switchtocpu; 186 187 /* number of policy indices. */ 188 uint32_t num_tm_q_assignment_profile_id; 189 190 /* tm_q_assignment_policy logical table indices. */ 191 const char * tm_q_assignment_profile_id[TM_Q_ASSIGNMENT_INFO_MAX_POLICY]; 192 } bcmint_cosq_assignment_info_t; 193 194 #endif /* !BCMI_LTSW_COSQ_INT_H */