openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

l3.c (2784B)


      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:    l3.c
      8  * Purpose: Helix5 L3 function implementations
      9  */
     10 
     11 #include <shared/bsl.h>
     12 
     13 #include <soc/defs.h>
     14 #if defined(INCLUDE_L3) && defined(BCM_HELIX5_SUPPORT)
     15 
     16 #include <bcm/debug.h>
     17 #include <bcm/error.h>
     18 /*
     19  * Function:
     20  *      _bcm_hx5_ecmp_rh_dynamic_size_encode
     21  * Purpose:
     22  *      Encode ECMP resilient hashing flow set size.
     23  * Parameters:
     24  *      dynamic_size  - (IN) Number of flow sets.
     25  *      encoded_value - (OUT) Encoded value.
     26  * Returns:
     27  *      BCM_E_xxx
     28  */
     29 int
     30 _bcm_hx5_ecmp_rh_dynamic_size_encode(int dynamic_size, int *encoded_value)
     31 {
     32     switch (dynamic_size) {
     33         case 64:
     34             *encoded_value = 1;
     35             break;
     36         case 128:
     37             *encoded_value = 2;
     38             break;
     39         case 256:
     40             *encoded_value = 3;
     41             break;
     42         case 512:
     43             *encoded_value = 4;
     44             break;
     45         case 1024:
     46             *encoded_value = 5;
     47             break;
     48         case 2048:
     49             *encoded_value = 6;
     50             break;
     51         case 4096:
     52             *encoded_value = 7;
     53             break;
     54         case 8192:
     55             *encoded_value = 8;
     56             break;
     57         case 16384:
     58             *encoded_value = 9;
     59             break;
     60         case 32768:
     61             *encoded_value = 10;
     62             break;
     63         default:
     64             return BCM_E_PARAM;
     65     }
     66 
     67     return BCM_E_NONE;
     68 }
     69 
     70 /*
     71  * Function:
     72  *      _bcm_hx5_ecmp_rh_dynamic_size_decode
     73  * Purpose:
     74  *      Decode ECMP resilient hashing flow set size.
     75  * Parameters:
     76  *      encoded_value - (IN) Encoded value.
     77  *      dynamic_size  - (OUT) Number of flow sets.
     78  * Returns:
     79  *      BCM_E_xxx
     80  */
     81 int
     82 _bcm_hx5_ecmp_rh_dynamic_size_decode(int encoded_value, int *dynamic_size)
     83 {
     84     switch (encoded_value) {
     85         case 1:
     86             *dynamic_size = 64;
     87             break;
     88         case 2:
     89             *dynamic_size = 128;
     90             break;
     91         case 3:
     92             *dynamic_size = 256;
     93             break;
     94         case 4:
     95             *dynamic_size = 512;
     96             break;
     97         case 5:
     98             *dynamic_size = 1024;
     99             break;
    100         case 6:
    101             *dynamic_size = 2048;
    102             break;
    103         case 7:
    104             *dynamic_size = 4096;
    105             break;
    106         case 8:
    107             *dynamic_size = 8192;
    108             break;
    109         case 9:
    110             *dynamic_size = 16384;
    111             break;
    112         case 10:
    113             *dynamic_size = 32768;
    114             break;
    115         default:
    116             return BCM_E_INTERNAL;
    117     }
    118 
    119     return BCM_E_NONE;
    120 }
    121 
    122 #endif /* INCLUDE_L3 && BCM_HELIX5_SUPPORT  */