qos.h (10851B)
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 * This file contains QOS module definitions internal to the BCM library. 8 */ 9 10 #ifndef _BCM_INT_DPP_QOS_H 11 #define _BCM_INT_DPP_QOS_H 12 13 #include <bcm/qos.h> 14 #include <shared/bitop.h> 15 16 /* QoS State structure */ 17 typedef struct bcm_dpp_qos_state_s { 18 int init; /* TRUE if port module has been initialized */ 19 PARSER_HINT_ARR SHR_BITDCL *ing_lif_cos_mpls_bitmap; 20 PARSER_HINT_ARR SHR_BITDCL *ing_lif_cos_ipv4_bitmap; 21 PARSER_HINT_ARR SHR_BITDCL *ing_lif_cos_ipv6_bitmap; 22 PARSER_HINT_ARR SHR_BITDCL *ing_lif_cos_l2_inner_bitmap; 23 PARSER_HINT_ARR SHR_BITDCL *ing_lif_cos_l2_outer_bitmap; 24 PARSER_HINT_ARR SHR_BITDCL *ing_lif_cos_l2_untag_bitmap; 25 PARSER_HINT_ARR SHR_BITDCL *ing_pcp_vlan_ctag_bitmap; 26 PARSER_HINT_ARR SHR_BITDCL *ing_pcp_vlan_utag_bitmap; 27 PARSER_HINT_ARR SHR_BITDCL *ing_pcp_vlan_stag_bitmap; 28 PARSER_HINT_ARR SHR_BITDCL *ing_pcp_vlan_color_bitmap; 29 PARSER_HINT_ARR SHR_BITDCL *egr_remark_encap_mpls_bitmap; 30 PARSER_HINT_ARR SHR_BITDCL *egr_remark_encap_ipv6_bitmap; 31 PARSER_HINT_ARR SHR_BITDCL *egr_remark_encap_ipv4_bitmap; 32 PARSER_HINT_ARR SHR_BITDCL *egr_remark_encap_l2_bitmap; 33 PARSER_HINT_ARR SHR_BITDCL *egr_remark_mpls_bitmap; 34 PARSER_HINT_ARR SHR_BITDCL *egr_remark_ipv6_bitmap; 35 PARSER_HINT_ARR SHR_BITDCL *egr_remark_ipv4_bitmap; 36 PARSER_HINT_ARR SHR_BITDCL *egr_mpls_php_ipv6_bitmap; 37 PARSER_HINT_ARR SHR_BITDCL *egr_mpls_php_ipv4_bitmap; 38 PARSER_HINT_ARR SHR_BITDCL *egr_pcp_vlan_ctag_bitmap; 39 PARSER_HINT_ARR SHR_BITDCL *egr_pcp_vlan_utag_bitmap; 40 PARSER_HINT_ARR SHR_BITDCL *egr_pcp_vlan_stag_bitmap; 41 PARSER_HINT_ARR SHR_BITDCL *egr_pcp_vlan_mpls_bitmap; 42 PARSER_HINT_ARR SHR_BITDCL *egr_pcp_vlan_ipv6_bitmap; 43 PARSER_HINT_ARR SHR_BITDCL *egr_pcp_vlan_ipv4_bitmap; 44 PARSER_HINT_ARR SHR_BITDCL *egr_l2_i_tag_bitmap; 45 #ifdef BCM_88660 46 PARSER_HINT_ARR SHR_BITDCL *egr_dscp_exp_marking_bitmap; 47 #endif /* BCM_88660 */ 48 PARSER_HINT_ARR int *ing_cos_opcode_flags; 49 int *egr_pcp_vlan_dscp_exp_profile_id; 50 int *egr_pcp_vlan_dscp_exp_enable; 51 int *egr_remark_encap_enable; 52 int *dp_max; 53 PARSER_HINT_ARR SHR_BITDCL *opcode_bmp; 54 } bcm_dpp_qos_state_t; 55 56 57 #define _BCM_QOS_MAP_ING_MPLS_EXP_MAX 8 58 #define _BCM_QOS_MAP_ING_L3_DSCP_MAX 256 59 #define _BCM_QOS_MAP_ING_L2_PRI_CFI_MAX 16 60 #define _BCM_QOS_MAP_ING_VLAN_PCP_STAG_MAX 16 61 #define _BCM_QOS_MAP_ING_VLAN_PCP_CTAG_MAX 8 62 #define _BCM_QOS_MAP_ING_VLAN_PCP_UTAG_MAX 32 63 #define _BCM_QOS_MAP_ING_COS_OPCODE_L3_MAX 256 64 #define _BCM_QOS_MAP_ING_COS_OPCODE_TC_DP_MAX 32 65 #define _BCM_QOS_MAP_ING_DP_ENTRY_MAX (_BCM_QOS_MAP_DP_MAX*_BCM_QOS_MAP_PCP_DEI_MAX) 66 #define _BCM_QOS_MAP_EGR_VLAN_PRI_MAX 8 67 #define _BCM_QOS_MAP_EGR_VLAN_CFI_MAX 2 68 #define _BCM_QOS_MAP_EGR_DSCP_MAX 256 69 #define _BCM_QOS_MAP_EGR_EXP_MAX 8 70 71 #ifdef BCM_88660 72 # define _BCM_QOS_MAP_EGR_RESOLVED_DP_MAX 2 73 /* The max qos profile allowed for use_layer2_pcp */ 74 # define _BCM_QOS_MAP_ING_USE_PCP_MAX_QOS_PROFILE 15 75 #endif /* BCM_88660 */ 76 77 #define _BCM_QOS_MAP_EGR_REMARK_MPLS_EXP_MAX 8 78 #define _BCM_QOS_MAP_EGR_REMARK_L3_DSCP_MAX 256 79 #define _BCM_QOS_MAP_EGR_REMARK_L2_MAX (8*4) 80 81 #define _BCM_QOS_MAP_EGR_REMARK_PROFILE_L2_MAX (SOC_IS_JERICHO(unit) ? 16 : 4) 82 83 #define _BCM_QOS_MAP_EXP_MAX 8 84 #define _BCM_QOS_MAP_DSCP_MAX 256 85 #define _BCM_QOS_MAP_PRI_MAX 8 86 #define _BCM_QOS_MAP_CFI_MAX 4 87 #define _BCM_QOS_MAP_PRI_CFI_MAX 16 88 #define _BCM_QOS_MAP_TC_DP_MAX (_BCM_QOS_MAP_TC_MAX * 4) 89 #define _BCM_QOS_MAP_TC_MAX 8 90 #define _BCM_QOS_MAP_UP_MAX 8 91 #define _BCM_QOS_MAP_PCP_MAX 8 92 #define _BCM_QOS_MAP_PORT_OFFSET_MAX 8 93 #define _BCM_QOS_MAP_DP_MAX 4 94 #define _BCM_QOS_MAP_PCP_DEI_MAX 16 95 96 #define BCM_INT_QOS_MAP_PROFILE_MASK 0xffff 97 #define BCM_INT_QOS_MAP_PROFILE_SHIFT 0 98 #define BCM_INT_QOS_MAP_TYPE_SHIFT 16 99 100 #define BCM_INT_QOS_MAP_LL_ARP_PROFILE_MASK 0x7 101 102 #define BCM_INT_QOS_MAP_TYPE_INGRESS 0x1000 103 #define BCM_INT_QOS_MAP_TYPE_EGRESS 0x2000 104 105 #define BCM_INT_QOS_MAP_TYPE_PCP_VLAN 0x0001 106 #define BCM_INT_QOS_MAP_TYPE_LIF_COS 0x0002 107 #define BCM_INT_QOS_MAP_TYPE_REMARK 0x0004 108 #define BCM_INT_QOS_MAP_TYPE_ENCAP 0x0008 109 #define BCM_INT_QOS_MAP_TYPE_MPLS_ELSP 0x0010 110 #define BCM_INT_QOS_MAP_TYPE_L2_I_TAG 0x0020 111 #define BCM_INT_QOS_MAP_TYPE_OPCODE 0x0040 112 #define BCM_INT_QOS_MAP_TYPE_MPLS_PHP 0x0080 113 #define BCM_INT_QOS_MAP_TYPE_DSCP_EXP_MARKING 0x0100 114 #define BCM_INT_QOS_MAP_TYPE_OAM_EGRESS_PROFILE 0x0200 115 #define BCM_INT_QOS_MAP_TYPE_ENCAP_INTPRI_COLOR 0x0400 116 #define BCM_INT_QOS_MAP_TYPE_COLOR_MAPPING_PCP 0x0800 117 118 extern bcm_dpp_qos_state_t *qos_state[SOC_MAX_NUM_DEVICES]; 119 120 121 #define BCM_QOS_MAP_PROFILE_GET(map_id) \ 122 (((map_id) >> BCM_INT_QOS_MAP_PROFILE_SHIFT) & BCM_INT_QOS_MAP_PROFILE_MASK) 123 124 #define BCM_INT_QOS_MAP_IS_INGRESS(map_id) \ 125 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) & BCM_INT_QOS_MAP_TYPE_INGRESS) 126 127 #define BCM_INT_QOS_MAP_IS_EGRESS(map_id) \ 128 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) & BCM_INT_QOS_MAP_TYPE_EGRESS) 129 130 #define BCM_INT_QOS_MAP_IS_PCP_VLAN(map_id) \ 131 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) & (BCM_INT_QOS_MAP_TYPE_PCP_VLAN)) 132 133 #define BCM_INT_QOS_MAP_IS_INGRESS_PCP_VLAN(map_id) \ 134 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) == (BCM_INT_QOS_MAP_TYPE_PCP_VLAN | BCM_INT_QOS_MAP_TYPE_INGRESS)) 135 136 #define BCM_INT_QOS_MAP_IS_EGRESS_PCP_VLAN(map_id) \ 137 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) == (BCM_INT_QOS_MAP_TYPE_PCP_VLAN | BCM_INT_QOS_MAP_TYPE_EGRESS)) 138 139 #define BCM_INT_QOS_MAP_IS_LIF_COS(map_id) \ 140 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) == (BCM_INT_QOS_MAP_TYPE_LIF_COS | BCM_INT_QOS_MAP_TYPE_INGRESS)) 141 142 #define BCM_INT_QOS_MAP_IS_REMARK(map_id) \ 143 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) == (BCM_INT_QOS_MAP_TYPE_REMARK | BCM_INT_QOS_MAP_TYPE_EGRESS)) 144 145 #define BCM_INT_QOS_MAP_IS_EGRESS_MPLS_PHP(map_id) \ 146 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) == (BCM_INT_QOS_MAP_TYPE_MPLS_PHP | BCM_INT_QOS_MAP_TYPE_EGRESS)) 147 148 #ifdef BCM_88660 149 # define BCM_INT_QOS_MAP_IS_EGRESS_DSCP_EXP_MARKING(map_id) \ 150 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) == (BCM_INT_QOS_MAP_TYPE_DSCP_EXP_MARKING | BCM_INT_QOS_MAP_TYPE_EGRESS)) 151 #endif /* BCM_88660 */ 152 153 #define BCM_INT_QOS_MAP_IS_ENCAP(map_id) \ 154 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) == (BCM_INT_QOS_MAP_TYPE_ENCAP | BCM_INT_QOS_MAP_TYPE_EGRESS)) 155 156 #define BCM_INT_QOS_MAP_IS_EGRESS_L2_I_TAG(map_id) \ 157 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) == (BCM_INT_QOS_MAP_TYPE_L2_I_TAG | BCM_INT_QOS_MAP_TYPE_EGRESS)) 158 159 #define BCM_INT_QOS_MAP_IS_OPCODE(map_id) \ 160 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) == (BCM_INT_QOS_MAP_TYPE_OPCODE | BCM_INT_QOS_MAP_TYPE_INGRESS)) 161 162 #define BCM_INT_QOS_MAP_INGRESS_PCP_VLAN_SET(map_id, profile_id) \ 163 (map_id) = (((BCM_INT_QOS_MAP_TYPE_PCP_VLAN | BCM_INT_QOS_MAP_TYPE_INGRESS) << BCM_INT_QOS_MAP_TYPE_SHIFT) \ 164 | (profile_id & BCM_INT_QOS_MAP_PROFILE_MASK)) 165 166 #define BCM_INT_QOS_MAP_EGRESS_PCP_VLAN_SET(map_id, profile_id) \ 167 (map_id) = (((BCM_INT_QOS_MAP_TYPE_PCP_VLAN | BCM_INT_QOS_MAP_TYPE_EGRESS) << BCM_INT_QOS_MAP_TYPE_SHIFT) \ 168 | (profile_id & BCM_INT_QOS_MAP_PROFILE_MASK)) 169 170 #define BCM_INT_QOS_MAP_LIF_COS_SET(map_id, profile_id) \ 171 (map_id) = (((BCM_INT_QOS_MAP_TYPE_LIF_COS | BCM_INT_QOS_MAP_TYPE_INGRESS) << BCM_INT_QOS_MAP_TYPE_SHIFT) \ 172 | (profile_id & BCM_INT_QOS_MAP_PROFILE_MASK)) 173 174 #define BCM_INT_QOS_MAP_REMARK_SET(map_id, profile_id) \ 175 (map_id) = (((BCM_INT_QOS_MAP_TYPE_REMARK | BCM_INT_QOS_MAP_TYPE_EGRESS) << BCM_INT_QOS_MAP_TYPE_SHIFT) \ 176 | (profile_id & BCM_INT_QOS_MAP_PROFILE_MASK)) 177 178 #define BCM_INT_QOS_MAP_EGRESS_MPLS_PHP_SET(map_id, profile_id) \ 179 (map_id) = (((BCM_INT_QOS_MAP_TYPE_MPLS_PHP | BCM_INT_QOS_MAP_TYPE_EGRESS) << BCM_INT_QOS_MAP_TYPE_SHIFT) \ 180 | (profile_id & BCM_INT_QOS_MAP_PROFILE_MASK)) 181 182 #ifdef BCM_88660 183 #define BCM_INT_QOS_MAP_EGRESS_DSCP_EXP_MARKING_SET(map_id, profile_id) \ 184 (map_id) = (((BCM_INT_QOS_MAP_TYPE_DSCP_EXP_MARKING | BCM_INT_QOS_MAP_TYPE_EGRESS) << BCM_INT_QOS_MAP_TYPE_SHIFT) \ 185 | (profile_id & BCM_INT_QOS_MAP_PROFILE_MASK)) 186 #endif 187 188 189 #define BCM_INT_QOS_MAP_EGRESS_L2_I_TAG_SET(map_id, profile_id) \ 190 (map_id) = (((BCM_INT_QOS_MAP_TYPE_L2_I_TAG | BCM_INT_QOS_MAP_TYPE_EGRESS) << BCM_INT_QOS_MAP_TYPE_SHIFT) \ 191 | (profile_id & BCM_INT_QOS_MAP_PROFILE_MASK)) 192 193 #define BCM_INT_QOS_MAP_TYPE_OPCODE_SET(map_id, profile_id) \ 194 (map_id) = (((BCM_INT_QOS_MAP_TYPE_OPCODE | BCM_INT_QOS_MAP_TYPE_INGRESS) << BCM_INT_QOS_MAP_TYPE_SHIFT) \ 195 | (profile_id & BCM_INT_QOS_MAP_PROFILE_MASK)) 196 197 #define BCM_INT_QOS_MAP_MPLS_ELSP_SET(map_id, profile_id) \ 198 (map_id) = (((BCM_INT_QOS_MAP_TYPE_MPLS_ELSP | BCM_INT_QOS_MAP_TYPE_INGRESS) << BCM_INT_QOS_MAP_TYPE_SHIFT) \ 199 | (profile_id & BCM_INT_QOS_MAP_PROFILE_MASK)) 200 201 #define BCM_INT_QOS_MAP_IS_MPLS_ELSP(map_id) \ 202 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) == (BCM_INT_QOS_MAP_TYPE_MPLS_ELSP | BCM_INT_QOS_MAP_TYPE_INGRESS)) 203 204 205 #define BCM_INT_QOS_MAP_OAM_EGRESS_PROFILE_SET(map_id, profile_id) \ 206 (map_id) = (((BCM_INT_QOS_MAP_TYPE_OAM_EGRESS_PROFILE | BCM_INT_QOS_MAP_TYPE_EGRESS) << BCM_INT_QOS_MAP_TYPE_SHIFT) \ 207 | (profile_id & BCM_INT_QOS_MAP_PROFILE_MASK)) 208 209 #define BCM_INT_QOS_MAP_IS_OAM_EGRESS_PROFILE(map_id) \ 210 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) == (BCM_INT_QOS_MAP_TYPE_OAM_EGRESS_PROFILE | BCM_INT_QOS_MAP_TYPE_EGRESS)) 211 212 #define BCM_INT_QOS_MAP_ENCAP_INTPRI_COLOR_SET(map_id, profile_id) \ 213 (map_id) = (((BCM_INT_QOS_MAP_TYPE_ENCAP_INTPRI_COLOR | BCM_INT_QOS_MAP_TYPE_EGRESS) << BCM_INT_QOS_MAP_TYPE_SHIFT) \ 214 | (profile_id & BCM_INT_QOS_MAP_PROFILE_MASK)) 215 216 #define BCM_INT_QOS_MAP_ENCAP_INTPRI_COLOR(map_id) \ 217 (((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) == (BCM_INT_QOS_MAP_TYPE_ENCAP_INTPRI_COLOR | BCM_INT_QOS_MAP_TYPE_EGRESS)) 218 219 #define BCM_INT_QOS_MAP_INGRESS_COLOR_SET(map_id, profile_id) \ 220 (map_id) = (((BCM_INT_QOS_MAP_TYPE_COLOR_MAPPING_PCP | BCM_INT_QOS_MAP_TYPE_INGRESS) << BCM_INT_QOS_MAP_TYPE_SHIFT) \ 221 | (profile_id & BCM_INT_QOS_MAP_PROFILE_MASK)) 222 223 #define BCM_INT_QOS_MAP_IS_INGRESS_COLOR(map_id) \ 224 ((((map_id) >> BCM_INT_QOS_MAP_TYPE_SHIFT) & (BCM_INT_QOS_MAP_TYPE_COLOR_MAPPING_PCP | BCM_INT_QOS_MAP_TYPE_INGRESS)) != 0) 225 226 227 #endif /* _BCM_INT_DPP_QOS_H */