ft_drop.h (9172B)
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-2020 Broadcom Inc. All rights reserved. 6 * 7 * File: ft_drop.h 8 * Purpose: Function declarations for flowtracker drop reason groups. 9 */ 10 #ifndef _BCM_INT_FT_DROP_REASON_H_ 11 #define _BCM_INT_FT_DROP_REASON_H_ 12 13 #if defined(BCM_FLOWTRACKER_SUPPORT) && defined(BCM_FLOWTRACKER_V2_SUPPORT) 14 15 /* Flowtracker drop reason global enum */ 16 #define BCMI_FT_DROP_REASON_GROUP_ID_ING_MMU_MAX(unit) 16 17 #define BCMI_FT_DROP_REASON_GROUP_ID_EGR_MAX(unit) 16 18 19 /* Drop reason bits in bs2.0 hardware */ 20 #define BCMI_FT_DROP_BIT_ING_MMU_MAX 192 21 #define BCMI_FT_DROP_BIT_EGR_MAX 64 22 23 /* Flowtracker drop reason index generation */ 24 #define BCMI_FT_DROP_REASON_GROUP_ID_TYPE_ING_MMU 1 25 #define BCMI_FT_DROP_REASON_GROUP_ID_TYPE_EGR 2 26 #define BCMI_FT_DROP_REASON_GROUP_ID_TYPE_AGG_ING_MMU 3 27 #define BCMI_FT_DROP_REASON_GROUP_ID_TYPE_AGG_EGR 4 28 #define BCMI_FT_DROP_REASON_GROUP_ID_TYPE_SHIFT 16 29 #define BCMI_FT_DROP_REASON_GROUP_ID_TYPE_MASK 0xffff 30 31 #define BCMI_FT_DROP_REASON_GROUP_ID_SET(index, type) \ 32 (((type) << BCMI_FT_DROP_REASON_GROUP_ID_TYPE_SHIFT) | (index)) 33 34 #define BCMI_FT_DROP_REASON_GROUP_INDEX_GET(id) \ 35 ((id) & BCMI_FT_DROP_REASON_GROUP_ID_TYPE_MASK) 36 37 #define BCMI_FT_DROP_REASON_GROUP_ID_IS_ING_MMU(id) \ 38 (((id) >> BCMI_FT_DROP_REASON_GROUP_ID_TYPE_SHIFT) == \ 39 BCMI_FT_DROP_REASON_GROUP_ID_TYPE_ING_MMU) 40 41 #define BCMI_FT_DROP_REASON_GROUP_ID_IS_EGR(id) \ 42 (((id) >> BCMI_FT_DROP_REASON_GROUP_ID_TYPE_SHIFT) == \ 43 BCMI_FT_DROP_REASON_GROUP_ID_TYPE_EGR) 44 45 #define BCMI_FT_DROP_REASON_GROUP_ID_IS_AGG_ING_MMU(id) \ 46 (((id) >> BCMI_FT_DROP_REASON_GROUP_ID_TYPE_SHIFT) == \ 47 BCMI_FT_DROP_REASON_GROUP_ID_TYPE_AGG_ING_MMU) 48 49 #define BCMI_FT_DROP_REASON_GROUP_ID_IS_AGG_EGR(id) \ 50 (((id) >> BCMI_FT_DROP_REASON_GROUP_ID_TYPE_SHIFT) == \ 51 BCMI_FT_DROP_REASON_GROUP_ID_TYPE_AGG_EGR) 52 53 /* Flowtracker software check slice state */ 54 typedef struct bcmi_ft_drop_reason_group_state_s { 55 56 /* Ingress/Mmu drop reason group index bitmap. */ 57 SHR_BITDCL *drop_ing_mmu_idx_bitmap; 58 59 /* Egress drop reason group index bitmap. */ 60 SHR_BITDCL *drop_egr_idx_bitmap; 61 62 /* Ingress/Mmu drop reason group index reference count. */ 63 uint16 *drop_ing_mmu_idx_refcount; 64 65 /* Egress drop reason group index reference count. */ 66 uint16 *drop_egr_idx_refcount; 67 68 /* Ingress/Mmu drop reason group maximum index. */ 69 uint16 drop_ing_mmu_max_idx; 70 71 /* Egress drop reason group maximum index. */ 72 uint16 drop_egr_max_idx; 73 74 /* Software drop enum to hardware bit value mapping. */ 75 int16 *drop_reason_sw_to_hw; 76 77 /* Ingress/Mmu drop hardware bit value to sw enum mapping. */ 78 int16 *drop_reason_ing_mmu_hw_to_sw; 79 80 /* Egress drop hardware bit value to sw enum mapping. */ 81 int16 *drop_reason_egr_hw_to_sw; 82 83 #if defined(BCM_FLOWTRACKER_V3_SUPPORT) 84 /* Aggregate Ingress/Mmu drop reason group index bitmap. */ 85 SHR_BITDCL *drop_agg_ing_mmu_idx_bitmap; 86 87 /* Aggregate Egress drop reason group index bitmap. */ 88 SHR_BITDCL *drop_agg_egr_idx_bitmap; 89 90 /* Aggregate Ingress/Mmu drop reason group index reference count. */ 91 uint16 *drop_agg_ing_mmu_idx_refcount; 92 93 /* Aggregate Egress drop reason group index reference count. */ 94 uint16 *drop_agg_egr_idx_refcount; 95 #endif 96 97 } bcmi_ft_drop_reason_group_state_t; 98 99 extern bcmi_ft_drop_reason_group_state_t 100 bcmi_ft_drop_reason_group_state[BCM_MAX_NUM_UNITS]; 101 102 #define BCMI_FT_DROP_REASON_ING_MMU_BITMAP(unit) \ 103 (bcmi_ft_drop_reason_group_state[unit].drop_ing_mmu_idx_bitmap) 104 105 #define BCMI_FT_DROP_REASON_EGR_BITMAP(unit) \ 106 (bcmi_ft_drop_reason_group_state[unit].drop_egr_idx_bitmap) 107 108 #define BCMI_FT_DROP_REASON_GROUP_ING_MMU_REFCOUNT_STATE(unit) \ 109 (bcmi_ft_drop_reason_group_state[unit].drop_ing_mmu_idx_refcount) 110 111 #define BCMI_FT_DROP_REASON_GROUP_ING_MMU_REFCOUNT(unit, index) \ 112 (bcmi_ft_drop_reason_group_state[unit].drop_ing_mmu_idx_refcount[index]) 113 114 #define BCMI_FT_DROP_REASON_GROUP_ING_MMU_REFCOUNT_DEC(unit, index) \ 115 ((bcmi_ft_drop_reason_group_state[unit].drop_ing_mmu_idx_refcount[index])--) 116 117 #define BCMI_FT_DROP_REASON_GROUP_ING_MMU_REFCOUNT_INC(unit, index) \ 118 ((bcmi_ft_drop_reason_group_state[unit].drop_ing_mmu_idx_refcount[index])++) 119 120 #define BCMI_FT_DROP_REASON_GROUP_EGR_REFCOUNT_STATE(unit) \ 121 (bcmi_ft_drop_reason_group_state[unit].drop_egr_idx_refcount) 122 123 #define BCMI_FT_DROP_REASON_GROUP_EGR_REFCOUNT(unit, index) \ 124 (bcmi_ft_drop_reason_group_state[unit].drop_egr_idx_refcount[index]) 125 126 #define BCMI_FT_DROP_REASON_GROUP_EGR_REFCOUNT_DEC(unit, index) \ 127 ((bcmi_ft_drop_reason_group_state[unit].drop_egr_idx_refcount[index])--) 128 129 #define BCMI_FT_DROP_REASON_GROUP_EGR_REFCOUNT_INC(unit, index) \ 130 ((bcmi_ft_drop_reason_group_state[unit].drop_egr_idx_refcount[index])++) 131 132 #if defined(BCM_FLOWTRACKER_V3_SUPPORT) 133 #define BCMI_FT_DROP_REASON_AGG_ING_MMU_BITMAP(unit) \ 134 (bcmi_ft_drop_reason_group_state[unit].drop_agg_ing_mmu_idx_bitmap) 135 136 #define BCMI_FT_DROP_REASON_AGG_EGR_BITMAP(unit) \ 137 (bcmi_ft_drop_reason_group_state[unit].drop_agg_egr_idx_bitmap) 138 139 #define BCMI_FT_DROP_REASON_GROUP_AGG_ING_MMU_REFCOUNT_STATE(unit) \ 140 (bcmi_ft_drop_reason_group_state[unit].drop_agg_ing_mmu_idx_refcount) 141 142 #define BCMI_FT_DROP_REASON_GROUP_AGG_ING_MMU_REFCOUNT(unit, index) \ 143 (bcmi_ft_drop_reason_group_state[unit].drop_agg_ing_mmu_idx_refcount[index]) 144 145 #define BCMI_FT_DROP_REASON_GROUP_AGG_ING_MMU_REFCOUNT_DEC(unit, index) \ 146 ((bcmi_ft_drop_reason_group_state[unit].drop_agg_ing_mmu_idx_refcount[index])--) 147 148 #define BCMI_FT_DROP_REASON_GROUP_AGG_ING_MMU_REFCOUNT_INC(unit, index) \ 149 ((bcmi_ft_drop_reason_group_state[unit].drop_agg_ing_mmu_idx_refcount[index])++) 150 151 #define BCMI_FT_DROP_REASON_GROUP_AGG_EGR_REFCOUNT_STATE(unit) \ 152 (bcmi_ft_drop_reason_group_state[unit].drop_agg_egr_idx_refcount) 153 154 #define BCMI_FT_DROP_REASON_GROUP_AGG_EGR_REFCOUNT(unit, index) \ 155 (bcmi_ft_drop_reason_group_state[unit].drop_agg_egr_idx_refcount[index]) 156 157 #define BCMI_FT_DROP_REASON_GROUP_AGG_EGR_REFCOUNT_DEC(unit, index) \ 158 ((bcmi_ft_drop_reason_group_state[unit].drop_agg_egr_idx_refcount[index])--) 159 160 #define BCMI_FT_DROP_REASON_GROUP_AGG_EGR_REFCOUNT_INC(unit, index) \ 161 ((bcmi_ft_drop_reason_group_state[unit].drop_agg_egr_idx_refcount[index])++) 162 163 #endif 164 165 166 #define BCMI_FT_DROP_REASON_ING_MMU_MAX_IDX(unit) \ 167 (bcmi_ft_drop_reason_group_state[unit].drop_ing_mmu_max_idx) 168 169 #define BCMI_FT_DROP_REASON_EGR_MAX_IDX(unit) \ 170 (bcmi_ft_drop_reason_group_state[unit].drop_egr_max_idx) 171 172 #define BCMI_FT_DROP_REASON_SW_TO_HW_STATE(unit) \ 173 (bcmi_ft_drop_reason_group_state[unit].drop_reason_sw_to_hw) 174 175 #define BCMI_FT_DROP_REASON_ING_MMU_HW_TO_SW_STATE(unit) \ 176 (bcmi_ft_drop_reason_group_state[unit].drop_reason_ing_mmu_hw_to_sw) 177 178 #define BCMI_FT_DROP_REASON_EGR_HW_TO_SW_STATE(unit) \ 179 (bcmi_ft_drop_reason_group_state[unit].drop_reason_egr_hw_to_sw) 180 181 #define BCMI_FT_DROP_REASON_SW_TO_HW(unit, sw_enum) \ 182 (bcmi_ft_drop_reason_group_state[unit].drop_reason_sw_to_hw[sw_enum]) 183 184 #define BCMI_FT_DROP_REASON_ING_MMU_HW_TO_SW(unit, hw_bit) \ 185 (bcmi_ft_drop_reason_group_state[unit].drop_reason_ing_mmu_hw_to_sw[hw_bit]) 186 187 #define BCMI_FT_DROP_REASON_EGR_HW_TO_SW(unit, hw_bit) \ 188 (bcmi_ft_drop_reason_group_state[unit].drop_reason_egr_hw_to_sw[hw_bit]) 189 190 extern void 191 bcmi_ftv2_drop_reason_group_incr_ref_count(int unit, 192 bcm_flowtracker_drop_reason_group_t id); 193 194 extern void 195 bcmi_ftv2_drop_reason_group_decr_ref_count(int unit, 196 bcm_flowtracker_drop_reason_group_t id); 197 198 extern int 199 bcmi_ftv2_drop_reason_group_id_is_invalid(int unit, 200 bcm_flowtracker_drop_reason_group_t id); 201 202 extern int 203 bcmi_ftv2_drop_reason_group_vector_get(int unit, 204 bcmi_flowtracker_flowchecker_info_t *fc_info, 205 int *dg_check_pri_vector_value, 206 int *dg_check_sec_vector_value); 207 208 extern int 209 bcmi_ftv2_drop_reason_group_init(int unit); 210 211 extern void 212 bcmi_ftv2_drop_reason_group_cleanup(int unit); 213 214 extern int 215 bcmi_ftv2_drop_reason_group_create(int unit, 216 uint32 flags, 217 bcm_flowtracker_drop_reasons_t drop_reasons, 218 bcm_flowtracker_drop_reason_group_t *id); 219 220 extern int 221 bcmi_ftv2_drop_reason_group_get(int unit, 222 bcm_flowtracker_drop_reason_group_t id, 223 bcm_flowtracker_drop_reasons_t *drop_reasons); 224 225 extern int 226 bcmi_ftv2_drop_reason_group_delete(int unit, 227 bcm_flowtracker_drop_reason_group_t id); 228 229 #endif /* BCM_FLOWTRACKER_SUPPORT && BCM_FLOWTRACKER_V2_SUPPORT */ 230 #endif /* _BCM_INT_FT_DROP_REASON_H_ */