hash.h (23713B)
1 /* 2 * 3 * 4 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 5 * 6 * Copyright 2007-2020 Broadcom Inc. All rights reserved. 7 * 8 */ 9 10 #ifndef __BCM_HASH_H__ 11 #define __BCM_HASH_H__ 12 13 #include <bcm/types.h> 14 15 /* Flex bin selection APIs valid options. */ 16 #define BCM_HASH_FLEX_BIN_OPTION_REPLACE (1 << 0) /* Indicate a replace 17 operation. */ 18 #define BCM_HASH_FLEX_BIN_OPTION_WITH_ID (1 << 1) /* Write to the entry 19 pointed to by the 20 given entry_id. */ 21 #define BCM_HASH_FLEX_BIN_OPTION_SIZE_8BIT (1 << 2) /* Select 8bit instead of 22 16bit per bin command */ 23 24 /* Hash flex bin selection command object offset. */ 25 typedef enum bcm_hash_flex_bin_object_offset_e { 26 BCM_HASH_OBJ_OFFSET_BIT0 = 0, /* From start of the object. */ 27 BCM_HASH_OBJ_OFFSET_BIT4 = 1, /* Start at bit4 of the object. */ 28 BCM_HASH_OBJ_OFFSET_BIT8 = 2, /* Start at bit8 of the object. */ 29 BCM_HASH_OBJ_OFFSET_BIT12 = 3, /* Start at bit12 of the object. */ 30 BCM_HASH_OBJ_OFFSET_BIT16 = 4, /* Start at bit16 of the object. */ 31 BCM_HASH_OBJ_OFFSET_BIT20 = 5, /* Start at bit20 of the object. */ 32 BCM_HASH_OBJ_OFFSET_BIT24 = 6, /* Start at bit24 of the object. */ 33 BCM_HASH_OBJ_OFFSET_BIT28 = 7, /* Start at bit28 of the object. */ 34 BCM_HASH_OBJ_OFFSET_BIT32 = 8, /* Start at bit32 of the object. */ 35 BCM_HASH_OBJ_OFFSET_BIT36 = 9, /* Start at bit36 of the object. */ 36 BCM_HASH_OBJ_OFFSET_BIT40 = 10, /* Start at bit40 of the object. */ 37 BCM_HASH_OBJ_OFFSET_BIT44 = 11, /* Start at bit44 of the object. */ 38 BCM_HASH_OBJ_OFFSET_BIT48 = 12, /* Start at bit48 of the object. */ 39 BCM_HASH_OBJ_OFFSET_BIT52 = 13, /* Start at bit52 of the object. */ 40 BCM_HASH_OBJ_OFFSET_BIT56 = 14, /* Start at bit56 of the object. */ 41 BCM_HASH_OBJ_OFFSET_BIT60 = 15, /* Start at bit60 of the object. */ 42 BCM_HASH_OBJ_OFFSET_BIT64 = 16, /* Start at bit64 of the object. */ 43 BCM_HASH_OBJ_OFFSET_BIT68 = 17, /* Start at bit68 of the object. */ 44 BCM_HASH_OBJ_OFFSET_BIT72 = 18, /* Start at bit72 of the object. */ 45 BCM_HASH_OBJ_OFFSET_BIT76 = 19, /* Start at bit76 of the object. */ 46 BCM_HASH_OBJ_OFFSET_BIT80 = 20, /* Start at bit80 of the object. */ 47 BCM_HASH_OBJ_OFFSET_BIT84 = 21, /* Start at bit84 of the object. */ 48 BCM_HASH_OBJ_OFFSET_BIT88 = 22, /* Start at bit88 of the object. */ 49 BCM_HASH_OBJ_OFFSET_BIT92 = 23, /* Start at bit92 of the object. */ 50 BCM_HASH_OBJ_OFFSET_BIT96 = 24, /* Start at bit96 of the object. */ 51 BCM_HASH_OBJ_OFFSET_BIT100 = 25, /* Start at bit100 of the object. */ 52 BCM_HASH_OBJ_OFFSET_BIT104 = 26, /* Start at bit104 of the object. */ 53 BCM_HASH_OBJ_OFFSET_BIT108 = 27, /* Start at bit108 of the object. */ 54 BCM_HASH_OBJ_OFFSET_BIT112 = 28, /* Start at bit112 of the object. */ 55 BCM_HASH_OBJ_OFFSET_BIT116 = 29, /* Start at bit116 of the object. */ 56 BCM_HASH_OBJ_OFFSET_BIT120 = 30, /* Start at bit120 of the object. */ 57 BCM_HASH_OBJ_OFFSET_BIT124 = 31, /* Start at bit124 of the object. */ 58 BCM_HASH_OBJ_OFFSET_MAX = 32 /* Must be last. */ 59 } bcm_hash_flex_bin_object_offset_t; 60 61 /* Hash flex bin selection command bin ID. */ 62 typedef enum bcm_hash_flex_bin_id_e { 63 BCM_HASH_BIN_A_0 = 0, /* ID of the BIN_A 0. */ 64 BCM_HASH_BIN_A_1 = 1, /* ID of the BIN_A 1. */ 65 BCM_HASH_BIN_A_2 = 2, /* ID of the BIN_A 2. */ 66 BCM_HASH_BIN_A_3 = 3, /* ID of the BIN_A 3. */ 67 BCM_HASH_BIN_A_4 = 4, /* ID of the BIN_A 4. */ 68 BCM_HASH_BIN_A_5 = 5, /* ID of the BIN_A 5. */ 69 BCM_HASH_BIN_A_6 = 6, /* ID of the BIN_A 6. */ 70 BCM_HASH_BIN_A_7 = 7, /* ID of the BIN_A 7. */ 71 BCM_HASH_BIN_A_8 = 8, /* ID of the BIN_A 8. */ 72 BCM_HASH_BIN_A_9 = 9, /* ID of the BIN_A 9. */ 73 BCM_HASH_BIN_A_10 = 10, /* ID of the BIN_A 10. */ 74 BCM_HASH_BIN_A_11 = 11, /* ID of the BIN_A 11. */ 75 BCM_HASH_BIN_A_12 = 12, /* ID of the BIN_A 12. */ 76 BCM_HASH_BIN_A_MAX = 12, /* Max bin number in BIN_A set. */ 77 BCM_HASH_BIN_A_0_UPPER_HALF = 50, /* ID for the upper half of the BIN_A 0. */ 78 BCM_HASH_BIN_A_1_UPPER_HALF = 51, /* ID for the upper half of the BIN_A 1. */ 79 BCM_HASH_BIN_A_2_UPPER_HALF = 52, /* ID for the upper half of the BIN_A 2. */ 80 BCM_HASH_BIN_A_3_UPPER_HALF = 53, /* ID for the upper half of the BIN_A 3. */ 81 BCM_HASH_BIN_A_4_UPPER_HALF = 54, /* ID for the upper half of the BIN_A 4. */ 82 BCM_HASH_BIN_A_5_UPPER_HALF = 55, /* ID for the upper half of the BIN_A 5. */ 83 BCM_HASH_BIN_A_6_UPPER_HALF = 56, /* ID for the upper half of the BIN_A 6. */ 84 BCM_HASH_BIN_A_7_UPPER_HALF = 57, /* ID for the upper half of the BIN_A 7. */ 85 BCM_HASH_BIN_A_8_UPPER_HALF = 58, /* ID for the upper half of the BIN_A 8. */ 86 BCM_HASH_BIN_A_9_UPPER_HALF = 59, /* ID for the upper half of the BIN_A 9. */ 87 BCM_HASH_BIN_A_10_UPPER_HALF = 60, /* ID for the upper half of the BIN_A 88 10. */ 89 BCM_HASH_BIN_A_11_UPPER_HALF = 61, /* ID for the upper half of the BIN_A 90 11. */ 91 BCM_HASH_BIN_A_12_UPPER_HALF = 62, /* ID for the upper half of the BIN_A 92 12. */ 93 BCM_HASH_BIN_A_UPPER_HALF_MAX = 62, /* Max upper half bin number in the 94 BIN_A set. */ 95 BCM_HASH_BIN_B_0 = 100, /* ID of the BIN_B 0. */ 96 BCM_HASH_BIN_B_1 = 101, /* ID of the BIN_B 1. */ 97 BCM_HASH_BIN_B_2 = 102, /* ID of the BIN_B 2. */ 98 BCM_HASH_BIN_B_3 = 103, /* ID of the BIN_B 3. */ 99 BCM_HASH_BIN_B_4 = 104, /* ID of the BIN_B 4. */ 100 BCM_HASH_BIN_B_5 = 105, /* ID of the BIN_B 5. */ 101 BCM_HASH_BIN_B_6 = 106, /* ID of the BIN_B 6. */ 102 BCM_HASH_BIN_B_7 = 107, /* ID of the BIN_B 7. */ 103 BCM_HASH_BIN_B_8 = 108, /* ID of the BIN_B 8. */ 104 BCM_HASH_BIN_B_9 = 109, /* ID of the BIN_B 9. */ 105 BCM_HASH_BIN_B_10 = 110, /* ID of the BIN_B 10. */ 106 BCM_HASH_BIN_B_11 = 111, /* ID of the BIN_B 11. */ 107 BCM_HASH_BIN_B_12 = 112, /* ID of the BIN_B 12. */ 108 BCM_HASH_BIN_B_MAX = 112, /* Max bin number in BIN_B set. */ 109 BCM_HASH_BIN_B_0_UPPER_HALF = 150, /* ID for the upper half of the BIN_B 0. */ 110 BCM_HASH_BIN_B_1_UPPER_HALF = 151, /* ID for the upper half of the BIN_B 1. */ 111 BCM_HASH_BIN_B_2_UPPER_HALF = 152, /* ID for the upper half of the BIN_B 2. */ 112 BCM_HASH_BIN_B_3_UPPER_HALF = 153, /* ID for the upper half of the BIN_B 3. */ 113 BCM_HASH_BIN_B_4_UPPER_HALF = 154, /* ID for the upper half of the BIN_B 4. */ 114 BCM_HASH_BIN_B_5_UPPER_HALF = 155, /* ID for the upper half of the BIN_B 5. */ 115 BCM_HASH_BIN_B_6_UPPER_HALF = 156, /* ID for the upper half of the BIN_B 6. */ 116 BCM_HASH_BIN_B_7_UPPER_HALF = 157, /* ID for the upper half of the BIN_B 7. */ 117 BCM_HASH_BIN_B_8_UPPER_HALF = 158, /* ID for the upper half of the BIN_B 8. */ 118 BCM_HASH_BIN_B_9_UPPER_HALF = 159, /* ID for the upper half of the BIN_B 9. */ 119 BCM_HASH_BIN_B_10_UPPER_HALF = 160, /* ID for the upper half of the BIN_B 120 10. */ 121 BCM_HASH_BIN_B_11_UPPER_HALF = 161, /* ID for the upper half of the BIN_B 122 11. */ 123 BCM_HASH_BIN_B_12_UPPER_HALF = 162, /* ID for the upper half of the BIN_B 124 12. */ 125 BCM_HASH_BIN_B_UPPER_HALF_MAX = 162 /* Max upper half bin number in the 126 BIN_B set. */ 127 } bcm_hash_flex_bin_id_t; 128 129 /* Hash flex bin selection command object IDs. */ 130 typedef enum bcm_hash_flex_bin_object_id_e { 131 BCM_HASH_OBJ_SGPP = 0, /* Source Global Physical Port. */ 132 BCM_HASH_OBJ_SVP = 1, /* Source VP. */ 133 BCM_HASH_OBJ_OUTER_PROTO = 2, /* Outer header IP protocol. */ 134 BCM_HASH_OBJ_HG_LBID = 3, /* HG Load Balance ID. */ 135 BCM_HASH_OBJ_OUTER_SIP = 4, /* Outer IP source address. */ 136 BCM_HASH_OBJ_OUTER_DIP = 5, /* Outer IP destination address. */ 137 BCM_HASH_OBJ_OUTER_SIP_NORMALIZED = 6, /* Outer SIP normalized. */ 138 BCM_HASH_OBJ_OUTER_DIP_NORMALIZED = 7, /* Outer DIP normalized. */ 139 BCM_HASH_OBJ_INNER_SIP = 8, /* Inner SIP. */ 140 BCM_HASH_OBJ_INNER_DIP = 9, /* Inner DIP. */ 141 BCM_HASH_OBJ_INNER_SIP_NORMALIZED = 10, /* Inner SIP normalized. */ 142 BCM_HASH_OBJ_INNER_DIP_NORMALIZED = 11, /* Inner DIP normalized. */ 143 BCM_HASH_OBJ_OUTER_L4_SRC_PORT = 12, /* Outer L4 source port. */ 144 BCM_HASH_OBJ_OUTER_L4_DEST_PORT = 13, /* Outer L4 dest port. */ 145 BCM_HASH_OBJ_INNER_L4_SRC_PORT = 14, /* Inner L4 source port. */ 146 BCM_HASH_OBJ_INNER_L4_DEST_PORT = 15, /* Inner L4 dest port. */ 147 BCM_HASH_OBJ_OUTER_L4_SRC_PORT_NORMALIZED = 16, /* Outer L4 source port normalized. */ 148 BCM_HASH_OBJ_OUTER_L4_DEST_PORT_NORMALIZED = 17, /* Outer L4 dest port normalized. */ 149 BCM_HASH_OBJ_INNER_L4_SRC_PORT_NORMALIZED = 18, /* Inner L4 source port normalized. */ 150 BCM_HASH_OBJ_INNER_L4_DEST_PORT_NORMALIZED = 19, /* Inner L4 dest port normalized. */ 151 BCM_HASH_OBJ_INNER_PROTO = 20, /* Inner IP protocol. */ 152 BCM_HASH_OBJ_MPLS_LABEL_1 = 21, /* MPLS label 1. */ 153 BCM_HASH_OBJ_MPLS_LABEL_2 = 22, /* MPLS label 2. */ 154 BCM_HASH_OBJ_MPLS_LABEL_3 = 23, /* MPLS label 3. */ 155 BCM_HASH_OBJ_MPLS_LABEL_4 = 24, /* MPLS label 4. */ 156 BCM_HASH_OBJ_MPLS_LABEL_5 = 25, /* MPLS label 5. */ 157 BCM_HASH_OBJ_OUTER_MAC_SA = 26, /* MAC source address. */ 158 BCM_HASH_OBJ_OUTER_MAC_DA = 27, /* MAC destination address. */ 159 BCM_HASH_OBJ_OUTER_VNTAG_ETAG = 28, /* VNTAG. */ 160 BCM_HASH_OBJ_OUTER_OTAG = 29, /* OTAG. */ 161 BCM_HASH_OBJ_OUTER_ITAG = 30, /* ITAG. */ 162 BCM_HASH_OBJ_OUTER_CNTAG = 31, /* CNTAG. */ 163 BCM_HASH_OBJ_OUTER_ETHTYPE = 32, /* ETHTYPE. */ 164 BCM_HASH_OBJ_OUTER_VXLAN = 33, /* VXLAN 8 bytes. */ 165 BCM_HASH_OBJ_OUTER_IPV4_HEADER = 34, /* The first 12 bytes of IPv4 header. */ 166 BCM_HASH_OBJ_OUTER_IPV4_SIP = 35, /* The IPv4 source address. */ 167 BCM_HASH_OBJ_OUTER_IPV4_DIP = 36, /* The IPv4 destination address. */ 168 BCM_HASH_OBJ_OUTER_IPV6_DIP = 37, /* IPv6 destination address. */ 169 BCM_HASH_OBJ_OUTER_IPV6_SIP = 38, /* IPv6 source address. */ 170 BCM_HASH_OBJ_OUTER_IPV6_HEADER1 = 39, /* The first 4 bytes of IPv6 header. */ 171 BCM_HASH_OBJ_OUTER_IPV6_HEADER2 = 40, /* The second 4 bytes of IPv6 header. */ 172 BCM_HASH_OBJ_OUTER_GRE_HEADER = 41, /* GRE header. */ 173 BCM_HASH_OBJ_OUTER_L4 = 42, /* 8 bytes of L4 field. */ 174 BCM_HASH_OBJ_OUTER_L5 = 43, /* 8 bytes of L5 field. */ 175 BCM_HASH_OBJ_OUTER_UDF0_0 = 44, /* first 2 byte of UDF0. */ 176 BCM_HASH_OBJ_OUTER_UDF0_1 = 45, /* 2 byte UDF0. */ 177 BCM_HASH_OBJ_OUTER_UDF0_2 = 46, /* 2 byte UDF0. */ 178 BCM_HASH_OBJ_OUTER_UDF0_3 = 47, /* 2 byte UDF0. */ 179 BCM_HASH_OBJ_OUTER_UDF0_4 = 48, /* 2 byte UDF0. */ 180 BCM_HASH_OBJ_OUTER_UDF0_5 = 49, /* 2 byte UDF0. */ 181 BCM_HASH_OBJ_OUTER_UDF0_6 = 50, /* 2 byte UDF0. */ 182 BCM_HASH_OBJ_OUTER_UDF0_7 = 51, /* 2 byte UDF0. */ 183 BCM_HASH_OBJ_OUTER_UDF1_0 = 52, /* first 2 byte of UDF1. */ 184 BCM_HASH_OBJ_OUTER_UDF1_1 = 53, /* 2 byte UDF1. */ 185 BCM_HASH_OBJ_OUTER_UDF1_2 = 54, /* 2 byte UDF1. */ 186 BCM_HASH_OBJ_OUTER_UDF1_3 = 55, /* 2 byte UDF1. */ 187 BCM_HASH_OBJ_OUTER_UDF1_4 = 56, /* 3 byte UDF1. */ 188 BCM_HASH_OBJ_OUTER_UDF1_5 = 57, /* 3 byte UDF1. */ 189 BCM_HASH_OBJ_OUTER_UDF1_6 = 58, /* 4 byte UDF1. */ 190 BCM_HASH_OBJ_OUTER_UDF1_7 = 59, /* 4 byte UDF1. */ 191 BCM_HASH_OBJ_OUTER_TOS = 60, /* IP header Type Of Service. */ 192 BCM_HASH_OBJ_OUTER_TTL = 61, /* IP header TTL. */ 193 BCM_HASH_OBJ_INNER_MAC_SA = 62, /* MAC source address. */ 194 BCM_HASH_OBJ_INNER_MAC_DA = 63, /* MAC destination address. */ 195 BCM_HASH_OBJ_INNER_VNTAG_ETAG = 64, /* VNTAG. */ 196 BCM_HASH_OBJ_INNER_OTAG = 65, /* OTAG. */ 197 BCM_HASH_OBJ_INNER_ITAG = 66, /* ITAG. */ 198 BCM_HASH_OBJ_INNER_CNTAG = 67, /* CNTAG. */ 199 BCM_HASH_OBJ_INNER_ETHTYPE = 68, /* ETHTYPE. */ 200 BCM_HASH_OBJ_INNER_VXLAN = 69, /* VXLAN 8 bytes. */ 201 BCM_HASH_OBJ_INNER_IPV4_HEADER = 70, /* The first 12 bytes of IPv4 header. */ 202 BCM_HASH_OBJ_INNER_IPV4_SIP = 71, /* The IPv4 source address. */ 203 BCM_HASH_OBJ_INNER_IPV4_DIP = 72, /* The IPv4 destination address. */ 204 BCM_HASH_OBJ_INNER_IPV6_DIP = 73, /* IPv6 destination address. */ 205 BCM_HASH_OBJ_INNER_IPV6_SIP = 74, /* IPv6 source address. */ 206 BCM_HASH_OBJ_INNER_IPV6_HEADER1 = 75, /* The first 4 bytes of IPv6 header. */ 207 BCM_HASH_OBJ_INNER_IPV6_HEADER2 = 76, /* The second 4 bytes of IPv6 header. */ 208 BCM_HASH_OBJ_INNER_GRE_HEADER = 77, /* GRE header. */ 209 BCM_HASH_OBJ_INNER_L4 = 78, /* 8 bytes of Layer 4 field. */ 210 BCM_HASH_OBJ_INNER_L5 = 79, /* 8 bytes of Layer 5 field. */ 211 BCM_HASH_OBJ_INNER_UDF0_0 = 80, /* first 2 byte of UDF0. */ 212 BCM_HASH_OBJ_INNER_UDF0_1 = 81, /* 2 byte UDF0. */ 213 BCM_HASH_OBJ_INNER_UDF0_2 = 82, /* 2 byte UDF0. */ 214 BCM_HASH_OBJ_INNER_UDF0_3 = 83, /* 2 byte UDF0. */ 215 BCM_HASH_OBJ_INNER_UDF0_4 = 84, /* 2 byte UDF0. */ 216 BCM_HASH_OBJ_INNER_UDF0_5 = 85, /* 2 byte UDF0. */ 217 BCM_HASH_OBJ_INNER_UDF0_6 = 86, /* 2 byte UDF0. */ 218 BCM_HASH_OBJ_INNER_UDF0_7 = 87, /* 2 byte UDF0. */ 219 BCM_HASH_OBJ_INNER_UDF1_0 = 88, /* first 2 byte of UDF1. */ 220 BCM_HASH_OBJ_INNER_UDF1_1 = 89, /* 2 byte UDF1. */ 221 BCM_HASH_OBJ_INNER_UDF1_2 = 90, /* 2 byte UDF1. */ 222 BCM_HASH_OBJ_INNER_UDF1_3 = 91, /* 2 byte UDF1. */ 223 BCM_HASH_OBJ_INNER_UDF1_4 = 92, /* 3 byte UDF1. */ 224 BCM_HASH_OBJ_INNER_UDF1_5 = 93, /* 3 byte UDF1. */ 225 BCM_HASH_OBJ_INNER_UDF1_6 = 94, /* 4 byte UDF1. */ 226 BCM_HASH_OBJ_INNER_UDF1_7 = 95, /* 4 byte UDF1. */ 227 BCM_HASH_OBJ_INNER_TOS = 96, /* IP header Type Of Service. */ 228 BCM_HASH_OBJ_INNER_TTL = 97, /* IP header TTL. */ 229 BCM_HASH_OBJ_SUBPORT_TAG = 98, /* SUBPORT_TAG. */ 230 BCM_HASH_OBJ_ID_MAX = 99, /* Must be last. */ 231 BCM_HASH_OBJ_ID_INVALID = BCM_HASH_OBJ_ID_MAX /* Same as the BCM_HASH_OBJ_ID_MAX. */ 232 } bcm_hash_flex_bin_object_id_t; 233 234 /* Hash flex bin selection packet types. */ 235 typedef enum bcm_hash_pkt_type_e { 236 BCM_HASH_PKT_FLOW_TYPE_FRONT_PANEL = 0, /* Packet flow type: front panel port */ 237 BCM_HASH_PKT_FLOW_TYPE_FRONT_PANEL_SYSTEM_HDR_PROXY = 1, /* Packet flow type: front panel port, 238 system header proxy */ 239 BCM_HASH_PKT_FLOW_TYPE_FRONT_PANEL_LOOPBACK_GENERIC = 2, /* Packet flow type: front panel port, 240 loopback generic */ 241 BCM_HASH_PKT_FLOW_TYPE_FRONT_PANEL_LOOPBACK_TUNNEL_TERM = 3, /* Packet flow type: front panel port, 242 loopback tunnel termination */ 243 BCM_HASH_PKT_FLOW_TYPE_SYSTEM_HDR = 4, /* Packet flow type: system header */ 244 BCM_HASH_PKT_FLOW_TYPE_SYSTEM_HDR_CONTROL = 5, /* Packet flow type: system header 245 control */ 246 BCM_HASH_PKT_FLOW_TYPE_SYSTEM_HDR_UNICAST = 6, /* Packet flow type: system header 247 unicast */ 248 BCM_HASH_PKT_FLOW_TYPE_SYSTEM_HDR_FLOOD = 7, /* Packet flow type: system header flood */ 249 BCM_HASH_PKT_FLOW_TYPE_SYSTEM_HDR_L2_MULTICAST = 8, /* Packet flow type: system header L2 250 multicast */ 251 BCM_HASH_PKT_FLOW_TYPE_SYSTEM_HDR_L3_MULTICAST = 9, /* Packet flow type: system header L3 252 multicast */ 253 BCM_HASH_PKT_FLOW_TYPE_TUNNEL_VXLAN = 10, /* Packet flow tunnel type: VXLAN. */ 254 BCM_HASH_PKT_FLOW_TYPE_TUNNEL_NVGRE = 11, /* Packet flow tunnel type: NVGRE. */ 255 BCM_HASH_PKT_FLOW_TYPE_TUNNEL_MIM = 12, /* Packet flow tunnel type: MIM. */ 256 BCM_HASH_PKT_FLOW_TYPE_TUNNEL_IPINIP = 13, /* Packet flow tunnel type: IPINIP. */ 257 BCM_HASH_PKT_FLOW_TYPE_TUNNEL_MPLS = 14, /* Packet flow tunnel type: MPLS. */ 258 BCM_HASH_PKT_FLOW_TYPE_LAYER_L2 = 15, /* Packet flow type: L2. */ 259 BCM_HASH_PKT_FLOW_TYPE_LAYER_L3 = 16, /* Packet flow type: L3. */ 260 BCM_HASH_PKT_TYPE_MAX = 17, /* The current max number of packet 261 types. */ 262 BCM_HASH_PKT_TYPE_INVALID = 128 /* The number of packet types cannot 263 exceed this number. */ 264 } bcm_hash_pkt_type_t; 265 266 /* Hash flex bin selection packet processing status. */ 267 typedef enum bcm_hash_pkt_status_e { 268 BCM_HASH_PKT_STATUS_GTP_ENDPOINT_ID = 0, /* GTP endpoint id */ 269 BCM_HASH_PKT_STATUS_L3_FORWARDED = 1, /* L3 forward status */ 270 BCM_HASH_PKT_STATUS_TUNNEL_TERM = 2, /* Tunnel termination status */ 271 BCM_HASH_PKT_STATUS_MAX = 3, /* The current number of packet status. */ 272 BCM_HASH_PKT_STATUS_INVALID = 64 /* The number of status cannot exceed 273 this number. */ 274 } bcm_hash_pkt_status_t; 275 276 /* A list of flex objects. Do not change. Add new ones at end. */ 277 typedef enum bcm_hash_flex_object_e { 278 BCM_HASH_FLEX_OBJ_MATCH_ID_ZONE0 = 0, /* flex object match_id zone0 */ 279 BCM_HASH_FLEX_OBJ_MATCH_ID_ZONE1 = 1, /* flex object match_id zone1 */ 280 BCM_HASH_FLEX_OBJ_MATCH_ID_ZONE2 = 2, /* flex object match_id zone2 */ 281 BCM_HASH_FLEX_OBJ_MATCH_ID_ZONE3 = 3, /* flex object match_id zone3 */ 282 BCM_HASH_FLEX_OBJ_MATCH_ID_ZONE4 = 4, /* flex object match_id zone4 */ 283 BCM_HASH_FLEX_OBJ_FLOW_ID_0 = 5, /* flex object flow id 0 */ 284 BCM_HASH_FLEX_OBJ_FLOW_ID_1 = 6, /* flex object flow id 1 */ 285 BCM_HASH_FLEX_OBJ_FLOW_ID_2 = 7, /* flex object flow id 2 */ 286 BCM_HASH_FLEX_OBJ_HVE_CONTROL_1 = 8, /* flex object HVE_CONTROL_1. */ 287 BCM_HASH_FLEX_OBJ_HVE_CONTROL_2 = 9, /* flex object HVE_CONTROL_2. */ 288 BCM_HASH_FLEX_OBJ_MAX = 10 /* Number of flex objects. Must be last. */ 289 } bcm_hash_flex_object_t; 290 291 /* Size constants for array. */ 292 #define BCM_HASH_PKT_TYPE_BIT_MAX 128 293 #define BCM_HASH_PKT_STATUS_BIT_MAX 64 294 295 /* Hash flex bin selection command */ 296 typedef struct bcm_hash_flex_bin_cmd_s { 297 bcm_hash_flex_bin_id_t bin_id; /* The bin number for the selected 298 object. */ 299 bcm_hash_flex_bin_object_id_t obj_id; /* The selected object. */ 300 bcm_hash_flex_bin_object_offset_t obj_offset; /* The starting bit of the object. */ 301 uint16 bin_mask; /* Mask applied on the selected bin. */ 302 } bcm_hash_flex_bin_cmd_t; 303 304 /* Hash flex bin selection packet type configuration bitmap */ 305 typedef struct bcm_hash_pkt_type_set_s { 306 SHR_BITDCL q_bit[_SHR_BITDCLSIZE(BCM_HASH_PKT_TYPE_BIT_MAX)]; /* Packet type configuration bitmap. */ 307 } bcm_hash_pkt_type_set_t; 308 309 /* Hash flex bin selection packet status configuration bitmap */ 310 typedef struct bcm_hash_pkt_status_set_s { 311 SHR_BITDCL s_bit[_SHR_BITDCLSIZE(BCM_HASH_PKT_STATUS_BIT_MAX)]; /* Packet processing status 312 configuration bitmap. */ 313 } bcm_hash_pkt_status_set_t; 314 315 #define BCM_HASH_PKT_TYPE_SET_ADD(_set, _q) SHR_BITSET(((_set).q_bit), (_q)) 316 317 #define BCM_HASH_PKT_TYPE_SET_REMOVE(_set, _q) SHR_BITCLR(((_set).q_bit), (_q)) 318 319 #define BCM_HASH_PKT_TYPE_SET_TEST(_set, _q) SHR_BITGET(((_set).q_bit), (_q)) 320 321 #define BCM_HASH_PKT_STATUS_SET_ADD(_set, _q) SHR_BITSET(((_set).s_bit), (_q)) 322 323 #define BCM_HASH_PKT_STATUS_SET_REMOVE(_set, _q) SHR_BITCLR(((_set).s_bit), (_q)) 324 325 #define BCM_HASH_PKT_STATUS_SET_TEST(_set, _q) SHR_BITGET(((_set).s_bit), (_q)) 326 327 /* Hash flex field */ 328 typedef struct bcm_hash_flex_field_s { 329 uint32 field_id; /* Flex field ID. */ 330 uint32 value; /* Flex field value. */ 331 uint32 mask; /* Flex field mask. */ 332 } bcm_hash_flex_field_t; 333 334 /* Hash flex bin selection configuration */ 335 typedef struct bcm_hash_flex_bin_config_s { 336 bcm_hash_pkt_type_set_t tset; /* Packet type set bitmap. */ 337 bcm_hash_pkt_status_set_t sset; /* Packet processing status set bitmap. */ 338 bcm_hash_pkt_status_set_t sset_mask; /* Packet processing status set mask 339 bitmap. */ 340 uint16 sgpp_ctrl_id; /* SGPP hash ctrl id. */ 341 uint16 svp_ctrl_id; /* SVP hash ctrl id. */ 342 uint16 l3iif_ctrl_id; /* L3_IIF hash ctrl id. */ 343 uint16 vfi_ctrl_id; /* VFI hash ctrl id. */ 344 uint16 vlan_ctrl_id; /* VLAN hash ctrl id. */ 345 uint16 sgpp_ctrl_id_mask; /* sgpp_ctrl_id mask. */ 346 uint16 svp_ctrl_id_mask; /* svp_ctrl_id mask. */ 347 uint16 l3iif_ctrl_id_mask; /* l3iif_ctrl_id mask. */ 348 uint16 vfi_ctrl_id_mask; /* vfi_ctrl_id mask. */ 349 uint16 vlan_ctrl_id_mask; /* vlan_ctrl_id mask. */ 350 int entry_id; /* Higher entry ID has high priority. */ 351 uint32 option; /* Bitwise flags for operation options. */ 352 } bcm_hash_flex_bin_config_t; 353 354 /* bcm_hash_flex_bin_traverse callback */ 355 typedef int (*bcm_hash_flex_bin_traverse_cb)( 356 int unit, 357 bcm_hash_flex_bin_config_t *cfg, 358 int num_bins, 359 bcm_hash_flex_bin_cmd_t *bin_cmd, 360 int num_fields, 361 bcm_hash_flex_field_t *flex_field, 362 void *user_data); 363 364 /* Initialize the bcm_hash_flex_bin_config_t structure. */ 365 extern void bcm_hash_flex_bin_config_t_init( 366 bcm_hash_flex_bin_config_t *cfg); 367 368 #ifndef BCM_HIDE_DISPATCHABLE 369 370 /* Initialize hash module. */ 371 extern int bcm_hash_init( 372 int unit); 373 374 /* Add a hash flex bin selection rule. */ 375 extern int bcm_hash_flex_bin_add( 376 int unit, 377 bcm_hash_flex_bin_config_t *cfg, 378 int num_bins, 379 bcm_hash_flex_bin_cmd_t *bin_cmd, 380 int num_fields, 381 bcm_hash_flex_field_t *flex_field); 382 383 /* Delete a flex bin selection rule for the given entry_id. */ 384 extern int bcm_hash_flex_bin_delete( 385 int unit, 386 int entry_id); 387 388 /* Delete all flex bin selection rules. */ 389 extern int bcm_hash_flex_bin_delete_all( 390 int unit); 391 392 /* Get the flex bin selection rule for the given entry_id. */ 393 extern int bcm_hash_flex_bin_get( 394 int unit, 395 bcm_hash_flex_bin_config_t *cfg, 396 int num_bins, 397 bcm_hash_flex_bin_cmd_t *bin_cmd, 398 int num_fields, 399 bcm_hash_flex_field_t *flex_field); 400 401 /* Traverse flex bin selection entries. */ 402 extern int bcm_hash_flex_bin_traverse( 403 int unit, 404 uint32 option, 405 bcm_hash_flex_bin_traverse_cb cb, 406 void *user_data); 407 408 /* Get the field id from the field name for the given object. */ 409 extern int bcm_hash_flex_field_id_get( 410 int unit, 411 bcm_hash_flex_object_t object, 412 const char *field_name, 413 uint32 *field_id); 414 415 /* Get the field name and the flex object for the given field id. */ 416 extern int bcm_hash_flex_field_name_get( 417 int unit, 418 uint32 field_id, 419 bcm_hash_flex_object_t *object, 420 int size, 421 char *field_name); 422 423 #endif /* BCM_HIDE_DISPATCHABLE */ 424 425 #endif /* __BCM_HASH_H__ */