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

range.h (6298B)


      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_RANGE_H__
     11 #define __BCM_RANGE_H__
     12 
     13 #include <bcm/types.h>
     14 #include <shared/switch.h>
     15 
     16 /* Range checker Types. */
     17 typedef enum bcm_range_type_e {
     18     bcmRangeTypeL4SrcPort = 0,      /* Check L4 Source port range. */
     19     bcmRangeTypeL4DstPort = 1,      /* Check L4 Destination port range. */
     20     bcmRangeTypeOuterVlan = 2,      /* Check Outer Vlan range. */
     21     bcmRangeTypePacketLength = 3,   /* Check IP payload length range. */
     22     bcmRangeTypeUdf = 4,            /* Check Udf range. */
     23     bcmRangeTypeVfi = 5,            /* Check VFI range. */
     24     bcmRangeTypeIcmpTypeCode = 6,   /* Check ICMP Type Code range. */
     25     bcmRangeTypeCount = 7           /* Always last. Not a usable value. */
     26 } bcm_range_type_t;
     27 
     28 #define BCM_RANGE_TYPE \
     29 { \
     30     "L4SrcPort", \
     31     "L4DstPort", \
     32     "OuterVlan", \
     33     "PacketLength", \
     34     "Udf", \
     35     "Vfi", \
     36     "IcmpTypeCode"  \
     37 }
     38 
     39 /* bcm_range_oper_mode_e */
     40 typedef enum bcm_range_oper_mode_e {
     41     bcmRangeOperModeGlobal = 0,     /* Range Checkers Operate in Global Mode
     42                                        Value. i.e. for a given packet on any
     43                                        port from any pipe will have the same
     44                                        range check Result. */
     45     bcmRangeOperModePipeLocal = 1,  /* Range Checkers Operate in Per Pipe Mode
     46                                        Value. i.e. for a given packet on ports
     47                                        from different pipes can have the
     48                                        different range check Result. */
     49     bcmRangeOperModeCount = 2       /* Always last. Not a usable value. */
     50 } bcm_range_oper_mode_t;
     51 
     52 #define BCM_RANGE_OPER_MODE \
     53 { \
     54     "Global", \
     55     "PipeLocal", \
     56     "Count"  \
     57 }
     58 
     59 /* Opaque handle to a range. */
     60 typedef uint32 bcm_range_t;
     61 
     62 /* 
     63  * Range configuration structure used to create a range with specific
     64  * attributes.
     65  */
     66 typedef struct bcm_range_config_s {
     67     bcm_range_t rid;        /* Range Check Id */
     68     bcm_range_type_t rtype; /* Range Check Type(bcmRangeTypeXXX) */
     69     uint32 min;             /* Lower limit of Range inclusive. */
     70     uint32 max;             /* Upper limit of Range inclusive. */
     71     uint8 offset;           /* Offset (in bits) for mask to apply before range
     72                                check comparison. */
     73     uint8 width;            /* Width(in bits) from offset specified for mask to
     74                                apply before range check comparison. */
     75     bcm_udf_id_t udf_id;    /* UDF id created using bcm_udf_create API. */
     76     bcm_pbmp_t ports;       /* Port bitmap to decide XGS pipe */
     77 } bcm_range_config_t;
     78 
     79 /* 
     80  * Range Module Flags. These flags can be passed to bcm_range_create API
     81  * via flags parameter.
     82  */
     83 #define BCM_RANGE_CREATE_WITH_ID    (1 << 0)   
     84 
     85 /* 
     86  * To initialize all members in bcm_range_config_t structure to default
     87  * values.
     88  */
     89 extern void bcm_range_config_t_init(
     90     bcm_range_config_t *range_cfg);
     91 
     92 #ifndef BCM_HIDE_DISPATCHABLE
     93 
     94 /* Create a Range checker */
     95 extern int bcm_range_create(
     96     int unit, 
     97     int flags, 
     98     bcm_range_config_t *range_cfg);
     99 
    100 /* Fetches the Range object created in the system */
    101 extern int bcm_range_get(
    102     int unit, 
    103     bcm_range_config_t *range_cfg);
    104 
    105 /* Destroy the range object */
    106 extern int bcm_range_destroy(
    107     int unit, 
    108     bcm_range_t rid);
    109 
    110 /* Set Operational mode for Range Module */
    111 extern int bcm_range_oper_mode_set(
    112     int unit, 
    113     bcm_range_oper_mode_t oper_mode);
    114 
    115 /* Get Operational mode of Range module */
    116 extern int bcm_range_oper_mode_get(
    117     int unit, 
    118     bcm_range_oper_mode_t *oper_mode);
    119 
    120 #endif /* BCM_HIDE_DISPATCHABLE */
    121 
    122 /* 
    123  * Device Range Id's traverse callback function. Customer Applications
    124  * can create function of this prototype and pass that function pointer
    125  * to bcm_range_travers API, so that for every valid range id ,  function
    126  * pointer will be called with some meta data
    127  */
    128 typedef int (*bcm_range_traverse_cb)(
    129     int unit, 
    130     bcm_range_config_t *range_cfg, 
    131     void *user_data);
    132 
    133 #ifndef BCM_HIDE_DISPATCHABLE
    134 
    135 /* 
    136  * Traverse all the valid range id's in the system, calling a specified
    137  * callback function for each one
    138  */
    139 extern int bcm_range_traverse(
    140     int unit, 
    141     bcm_range_traverse_cb callback, 
    142     void *user_data);
    143 
    144 #endif /* BCM_HIDE_DISPATCHABLE */
    145 
    146 #define BCM_RANGE_ID_MAX        ((64 * _SHR_SWITCH_MAX_PIPES) - 1) 
    147 
    148 /* Bitmap of Range IDs. */
    149 typedef struct bcm_range_id_bmp_s {
    150     SHR_BITDCL w[_SHR_BITDCLSIZE(BCM_RANGE_ID_MAX)]; 
    151 } bcm_range_id_bmp_t;
    152 
    153 /* Range group configuration structure. */
    154 typedef struct bcm_range_group_config_s {
    155     uint16 flags;                   /* To hold any specific flags. */
    156     bcm_pbmp_t ports;               /* Port bitmap for particular pipe 
    157                                        instance. */
    158     bcm_range_id_bmp_t range_bmp;   /* Bitmap to hold Range IDs. */
    159     uint32 range_group_id;          /* Range Group Identifier */
    160 } bcm_range_group_config_t;
    161 
    162 #define BCM_RANGE_ID_BMP_ADD(range_bmp, range_id)  SHR_BITSET(((range_bmp).w), (range_id)) 
    163 
    164 #define BCM_RANGE_ID_BMP_REMOVE(range_bmp, range_id)  SHR_BITCLR(((range_bmp).w), (range_id)) 
    165 
    166 #define BCM_RANGE_ID_BMP_TEST(range_bmp, range_id)  SHR_BITGET(((range_bmp).w), (range_id)) 
    167 
    168 #ifndef BCM_HIDE_DISPATCHABLE
    169 
    170 /* Create a Range checker Group */
    171 extern int bcm_range_group_create(
    172     int unit, 
    173     bcm_range_group_config_t *range_group_config);
    174 
    175 /* Delete a Range checker Group */
    176 extern int bcm_range_group_delete(
    177     int unit, 
    178     bcm_range_group_config_t *range_group_config);
    179 
    180 /* Update a Range checker Group's configuration. */
    181 extern int bcm_range_group_update(
    182     int unit, 
    183     bcm_range_group_config_t *range_group_config);
    184 
    185 /* Get/Fetch a Range checker Group */
    186 extern int bcm_range_group_get(
    187     int unit, 
    188     bcm_range_group_config_t *range_group_config);
    189 
    190 #endif /* BCM_HIDE_DISPATCHABLE */
    191 
    192 /* 
    193  * Initialize all members in bcm_range_group_config_t structure to
    194  * default values.
    195  */
    196 extern void bcm_range_group_config_t_init(
    197     bcm_range_group_config_t *range_group_config);
    198 
    199 #endif /* __BCM_RANGE_H__ */