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

rate.c (6702B)


      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:    bcmx/rate.c
      8  * Purpose: BCMX Packet Rate Control APIs
      9  */
     10 
     11 #include <bcm/types.h>
     12 
     13 #include <bcmx/rate.h>
     14 #include <bcmx/lport.h>
     15 #include <bcmx/bcmx.h>
     16 
     17 #include "bcmx_int.h"
     18 
     19 #define BCMX_RATE_INIT_CHECK    BCMX_READY_CHECK
     20 
     21 #define BCMX_RATE_SET_ERROR_CHECK(_unit, _check, _rv)    \
     22     BCMX_SET_ERROR_CHECK(_unit, _check, _rv)
     23 
     24 #define BCMX_RATE_GET_IS_VALID(_unit, _rv)    \
     25     BCMX_ERROR_IS_VALID(_unit, _rv)
     26 
     27 
     28 /*
     29  * Function:
     30  *      bcmx_rate_set
     31  */
     32 
     33 int
     34 bcmx_rate_set(int val, int flags)
     35 {
     36     int rv = BCM_E_UNAVAIL, tmp_rv;
     37     int i, bcm_unit;
     38 
     39     BCMX_RATE_INIT_CHECK;
     40 
     41     BCMX_UNIT_ITER(bcm_unit, i) {
     42         tmp_rv = bcm_rate_set(bcm_unit, val, flags);
     43         BCM_IF_ERROR_RETURN(BCMX_RATE_SET_ERROR_CHECK(bcm_unit, tmp_rv, &rv));
     44     }
     45 
     46     return rv;
     47 }
     48 
     49 
     50 /*
     51  * Function:
     52  *      bcmx_rate_get
     53  */
     54 
     55 int
     56 bcmx_rate_get(int *val, int *flags)
     57 {
     58     int rv;
     59     int i, bcm_unit;
     60 
     61     BCMX_RATE_INIT_CHECK;
     62 
     63     BCMX_PARAM_NULL_CHECK(val);
     64     BCMX_PARAM_NULL_CHECK(flags);
     65 
     66     BCMX_UNIT_ITER(bcm_unit, i) {
     67         rv = bcm_rate_get(bcm_unit, val, flags);
     68         if (BCMX_RATE_GET_IS_VALID(bcm_unit, rv)) {
     69             return rv;
     70         }
     71     }
     72 
     73     return BCM_E_UNAVAIL;
     74 }
     75 
     76 
     77 /*
     78  * Function:
     79  *      bcmx_rate_mcast_set
     80  */
     81 
     82 int
     83 bcmx_rate_mcast_set(int limit, int flags, bcmx_lport_t port)
     84 {
     85     int         bcm_unit;
     86     bcm_port_t  bcm_port;
     87 
     88     BCMX_RATE_INIT_CHECK;
     89 
     90     BCM_IF_ERROR_RETURN
     91         (_bcmx_dest_to_unit_port(port, &bcm_unit, &bcm_port,
     92                                  BCMX_DEST_CONVERT_DEFAULT));
     93 
     94     return bcm_rate_mcast_set(bcm_unit,
     95                               limit,
     96                               flags,
     97                               bcm_port);
     98 }
     99 
    100 
    101 /*
    102  * Function:
    103  *      bcmx_rate_bcast_set
    104  */
    105 
    106 int
    107 bcmx_rate_bcast_set(int limit, int flags, bcmx_lport_t port)
    108 {
    109     int         bcm_unit;
    110     bcm_port_t  bcm_port;
    111 
    112     BCMX_RATE_INIT_CHECK;
    113 
    114     BCM_IF_ERROR_RETURN
    115         (_bcmx_dest_to_unit_port(port, &bcm_unit, &bcm_port,
    116                                  BCMX_DEST_CONVERT_DEFAULT));
    117 
    118     return bcm_rate_bcast_set(bcm_unit,
    119                               limit,
    120                               flags,
    121                               bcm_port);
    122 }
    123 
    124 
    125 /*
    126  * Function:
    127  *      bcmx_rate_dlfbc_set
    128  */
    129 
    130 int
    131 bcmx_rate_dlfbc_set(int limit, int flags, bcmx_lport_t port)
    132 {
    133     int         bcm_unit;
    134     bcm_port_t  bcm_port;
    135 
    136     BCMX_RATE_INIT_CHECK;
    137 
    138     BCM_IF_ERROR_RETURN
    139         (_bcmx_dest_to_unit_port(port, &bcm_unit, &bcm_port,
    140                                  BCMX_DEST_CONVERT_DEFAULT));
    141 
    142     return bcm_rate_dlfbc_set(bcm_unit,
    143                               limit,
    144                               flags,
    145                               bcm_port);
    146 }
    147 
    148 
    149 /*
    150  * Function:
    151  *      bcmx_rate_mcast_get
    152  */
    153 
    154 int
    155 bcmx_rate_mcast_get(int *limit, int *flags, bcmx_lport_t port)
    156 {
    157     int         bcm_unit;
    158     bcm_port_t  bcm_port;
    159 
    160     BCMX_RATE_INIT_CHECK;
    161 
    162     BCMX_PARAM_NULL_CHECK(limit);
    163     BCMX_PARAM_NULL_CHECK(flags);
    164 
    165     BCM_IF_ERROR_RETURN
    166         (_bcmx_dest_to_unit_port(port, &bcm_unit, &bcm_port,
    167                                  BCMX_DEST_CONVERT_DEFAULT));
    168 
    169     return bcm_rate_mcast_get(bcm_unit,
    170                               limit,
    171                               flags,
    172                               bcm_port);
    173 }
    174 
    175 
    176 /*
    177  * Function:
    178  *      bcmx_rate_dlfbc_get
    179  */
    180 
    181 int
    182 bcmx_rate_dlfbc_get(int *limit, int *flags, bcmx_lport_t port)
    183 {
    184     int         bcm_unit;
    185     bcm_port_t  bcm_port;
    186 
    187     BCMX_RATE_INIT_CHECK;
    188 
    189     BCMX_PARAM_NULL_CHECK(limit);
    190     BCMX_PARAM_NULL_CHECK(flags);
    191 
    192     BCM_IF_ERROR_RETURN
    193         (_bcmx_dest_to_unit_port(port, &bcm_unit, &bcm_port,
    194                                  BCMX_DEST_CONVERT_DEFAULT));
    195 
    196     return bcm_rate_dlfbc_get(bcm_unit,
    197                               limit,
    198                               flags,
    199                               bcm_port);
    200 }
    201 
    202 
    203 /*
    204  * Function:
    205  *      bcmx_rate_bcast_get
    206  */
    207 
    208 int
    209 bcmx_rate_bcast_get(int *limit, int *flags, bcmx_lport_t port)
    210 {
    211     int         bcm_unit;
    212     bcm_port_t  bcm_port;
    213 
    214     BCMX_RATE_INIT_CHECK;
    215 
    216     BCMX_PARAM_NULL_CHECK(limit);
    217     BCMX_PARAM_NULL_CHECK(flags);
    218 
    219     BCM_IF_ERROR_RETURN
    220         (_bcmx_dest_to_unit_port(port, &bcm_unit, &bcm_port,
    221                                  BCMX_DEST_CONVERT_DEFAULT));
    222 
    223     return bcm_rate_bcast_get(bcm_unit,
    224                               limit,
    225                               flags,
    226                               bcm_port);
    227 }
    228 
    229 
    230 /*
    231  * Function:
    232  *      bcmx_rate_type_get
    233  */
    234 
    235 int
    236 bcmx_rate_type_get(bcm_rate_limit_t *rl)
    237 {
    238     int rv;
    239     int i, bcm_unit;
    240 
    241     BCMX_RATE_INIT_CHECK;
    242 
    243     BCMX_PARAM_NULL_CHECK(rl);
    244 
    245     BCMX_UNIT_ITER(bcm_unit, i) {
    246         rv = bcm_rate_type_get(bcm_unit, rl);
    247         if (BCMX_RATE_GET_IS_VALID(bcm_unit, rv)) {
    248             return rv;
    249         }
    250     }
    251 
    252     return BCM_E_UNAVAIL;
    253 }
    254 
    255 
    256 /*
    257  * Function:
    258  *      bcmx_rate_type_set
    259  */
    260 
    261 int
    262 bcmx_rate_type_set(bcm_rate_limit_t *rl)
    263 {
    264     int rv = BCM_E_UNAVAIL, tmp_rv;
    265     int i, bcm_unit;
    266 
    267     BCMX_RATE_INIT_CHECK;
    268 
    269     BCMX_PARAM_NULL_CHECK(rl);
    270 
    271     BCMX_UNIT_ITER(bcm_unit, i) {
    272         tmp_rv = bcm_rate_type_set(bcm_unit, rl);
    273         BCM_IF_ERROR_RETURN(BCMX_RATE_SET_ERROR_CHECK(bcm_unit, tmp_rv, &rv));
    274     }
    275 
    276     return rv;
    277 }
    278 
    279 /*
    280  * Function:
    281  *      bcmx_rate_bandwidth_get
    282  */
    283 int
    284 bcmx_rate_bandwidth_get(bcmx_lport_t port, int flags,
    285                         uint32 *kbits_sec, uint32 *kbits_burst)
    286 {
    287     int         bcm_unit;
    288     bcm_port_t  bcm_port;
    289 
    290     BCMX_RATE_INIT_CHECK;
    291 
    292     BCMX_PARAM_NULL_CHECK(kbits_sec);
    293     BCMX_PARAM_NULL_CHECK(kbits_burst);
    294 
    295     BCM_IF_ERROR_RETURN
    296         (_bcmx_dest_to_unit_port(port, &bcm_unit, &bcm_port,
    297                                  BCMX_DEST_CONVERT_DEFAULT));
    298 
    299     return bcm_rate_bandwidth_get(bcm_unit, bcm_port,
    300                                   flags,
    301                                   kbits_sec,
    302                                   kbits_burst);
    303 }
    304 
    305 /*
    306  * Function:
    307  *      bcmx_rate_bandwidth_set
    308  */
    309 int
    310 bcmx_rate_bandwidth_set(bcmx_lport_t port, int flags,
    311                         uint32 kbits_sec, uint32 kbits_burst)
    312 {
    313     int         bcm_unit;
    314     bcm_port_t  bcm_port;
    315 
    316     BCMX_RATE_INIT_CHECK;
    317 
    318     BCM_IF_ERROR_RETURN
    319         (_bcmx_dest_to_unit_port(port, &bcm_unit, &bcm_port,
    320                                  BCMX_DEST_CONVERT_DEFAULT));
    321 
    322     return bcm_rate_bandwidth_set(bcm_unit, bcm_port,
    323                                   flags,
    324                                   kbits_sec,
    325                                   kbits_burst);
    326 }