trunk.c (5087B)
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 * File: trunk.c 8 * Purpose: Helix5 resilient hash function implementations 9 */ 10 11 #include <shared/bsl.h> 12 13 #include <soc/defs.h> 14 #if defined(BCM_HELIX5_SUPPORT) 15 16 #include <bcm/debug.h> 17 #include <bcm/error.h> 18 19 /* 20 * Function: 21 * _bcm_hx5_hg_rh_dynamic_size_encode 22 * Purpose: 23 * Encode Higig trunk resilient hashing flow set size. 24 * Parameters: 25 * dynamic_size - (IN) Number of flow sets. 26 * encoded_value - (OUT) Encoded value. 27 * Returns: 28 * BCM_E_xxx 29 */ 30 int 31 _bcm_hx5_hg_rh_dynamic_size_encode(int dynamic_size, int *encoded_value) 32 { 33 switch (dynamic_size) { 34 case 64: 35 *encoded_value = 1; 36 break; 37 case 128: 38 *encoded_value = 2; 39 break; 40 case 256: 41 *encoded_value = 3; 42 break; 43 case 512: 44 *encoded_value = 4; 45 break; 46 case 1024: 47 *encoded_value = 5; 48 break; 49 case 2048: 50 *encoded_value = 6; 51 break; 52 case 4096: 53 *encoded_value = 7; 54 break; 55 case 8192: 56 *encoded_value = 8; 57 break; 58 case 16384: 59 *encoded_value = 9; 60 break; 61 case 32768: 62 *encoded_value = 10; 63 break; 64 default: 65 return BCM_E_PARAM; 66 } 67 68 return BCM_E_NONE; 69 } 70 71 /* 72 * Function: 73 * _bcm_hx5_hg_rh_dynamic_size_decode 74 * Purpose: 75 * Decode Higig trunk resilient hashing flow set size. 76 * Parameters: 77 * encoded_value - (IN) Encoded value. 78 * dynamic_size - (OUT) Number of flow sets. 79 * Returns: 80 * BCM_E_xxx 81 */ 82 int 83 _bcm_hx5_hg_rh_dynamic_size_decode(int encoded_value, int *dynamic_size) 84 { 85 switch (encoded_value) { 86 case 1: 87 *dynamic_size = 64; 88 break; 89 case 2: 90 *dynamic_size = 128; 91 break; 92 case 3: 93 *dynamic_size = 256; 94 break; 95 case 4: 96 *dynamic_size = 512; 97 break; 98 case 5: 99 *dynamic_size = 1024; 100 break; 101 case 6: 102 *dynamic_size = 2048; 103 break; 104 case 7: 105 *dynamic_size = 4096; 106 break; 107 case 8: 108 *dynamic_size = 8192; 109 break; 110 case 9: 111 *dynamic_size = 16384; 112 break; 113 case 10: 114 *dynamic_size = 32768; 115 break; 116 default: 117 return BCM_E_INTERNAL; 118 } 119 120 return BCM_E_NONE; 121 } 122 123 /* 124 * Function: 125 * _bcm_hx5_lag_rh_dynamic_size_encode 126 * Purpose: 127 * Encode LAG trunk resilient hashing flow set size. 128 * Parameters: 129 * dynamic_size - (IN) Number of flow sets. 130 * encoded_value - (OUT) Encoded value. 131 * Returns: 132 * BCM_E_xxx 133 */ 134 int 135 _bcm_hx5_lag_rh_dynamic_size_encode(int dynamic_size, int *encoded_value) 136 { 137 switch (dynamic_size) { 138 case 64: 139 *encoded_value = 1; 140 break; 141 case 128: 142 *encoded_value = 2; 143 break; 144 case 256: 145 *encoded_value = 3; 146 break; 147 case 512: 148 *encoded_value = 4; 149 break; 150 case 1024: 151 *encoded_value = 5; 152 break; 153 case 2048: 154 *encoded_value = 6; 155 break; 156 case 4096: 157 *encoded_value = 7; 158 break; 159 case 8192: 160 *encoded_value = 8; 161 break; 162 case 16384: 163 *encoded_value = 9; 164 break; 165 case 32768: 166 *encoded_value = 10; 167 break; 168 default: 169 return BCM_E_PARAM; 170 } 171 172 return BCM_E_NONE; 173 } 174 175 /* 176 * Function: 177 * _bcm_hx5_lag_rh_dynamic_size_decode 178 * Purpose: 179 * Decode LAG trunk resilient hashing flow set size. 180 * Parameters: 181 * encoded_value - (IN) Encoded value. 182 * dynamic_size - (OUT) Number of flow sets. 183 * Returns: 184 * BCM_E_xxx 185 */ 186 int 187 _bcm_hx5_lag_rh_dynamic_size_decode(int encoded_value, int *dynamic_size) 188 { 189 switch (encoded_value) { 190 case 1: 191 *dynamic_size = 64; 192 break; 193 case 2: 194 *dynamic_size = 128; 195 break; 196 case 3: 197 *dynamic_size = 256; 198 break; 199 case 4: 200 *dynamic_size = 512; 201 break; 202 case 5: 203 *dynamic_size = 1024; 204 break; 205 case 6: 206 *dynamic_size = 2048; 207 break; 208 case 7: 209 *dynamic_size = 4096; 210 break; 211 case 8: 212 *dynamic_size = 8192; 213 break; 214 case 9: 215 *dynamic_size = 16384; 216 break; 217 case 10: 218 *dynamic_size = 32768; 219 break; 220 default: 221 return BCM_E_INTERNAL; 222 } 223 224 return BCM_E_NONE; 225 } 226 227 #endif /* BCM_HELIX5_SUPPORT */