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

cosq_int.h (6105B)


      1 /* \file cosq_int.h
      2  *
      3  * ltsw COSQ module internal header file.
      4  * Include structure definitions and function declarations used by COSQ module.
      5  */
      6 /*
      7  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      8  * 
      9  * Copyright 2007-2020 Broadcom Inc. All rights reserved.
     10  */
     11 #ifndef BCMI_LTSW_COSQ_INT_H
     12 #define BCMI_LTSW_COSQ_INT_H
     13 
     14 #include <bcm/types.h>
     15 #include <sal/sal_types.h>
     16 
     17 /*
     18  * \brief HA subcomponent id for COSQ module.
     19  */
     20 #define BCMINT_COSQ_WRED_SUB_COMP_ID 0
     21 #define BCMINT_COSQ_PFC_DEADLOCK_SUB_COMP_ID 1
     22 #define BCMINT_COSQ_CPU_LIMIT_SUB_COMP_ID 2
     23 #define BCMINT_COSQ_CPU_SHARED_LIMIT_SUB_COMP_ID 3
     24 #define BCMINT_COSQ_CPU_DYNAMIC_SUB_COMP_ID 4
     25 #define BCMINT_COSQ_CPU_LIMIT_ENABLE_SUB_COMP_ID 5
     26 #define BCMINT_COSQ_CPU_COLOR_LIMIT_SUB_COMP_ID 6
     27 #define BCMINT_COSQ_EBST_ENABLE_SUB_COMP_ID 7
     28 #define BCMINT_COSQ_EBST_SCAN_INTERVAL_SUB_COMP_ID 8
     29 #define BCMINT_COSQ_MOD_PROFILE_BMP_SUB_COMP_ID 9
     30 
     31 /* Queue average offset for congestion profile. */
     32 #define COSQ_WRED_CNG_Q_AVG_OFFSET 0
     33 /* Queue minimum offset for congestion profile. */
     34 #define COSQ_WRED_CNG_Q_MIN_OFFSET 1
     35 /* Service pool offset for congestion profile. */
     36 #define COSQ_WRED_CNG_SERVICE_POOL_OFFSET 2
     37 /*
     38  * Number of entries per congestion profile.
     39  *  | SP | Q_MIN | Q_AVG
     40  *   3  2|   1   |   0
     41  * SP : 00 Low congestion
     42  *      01 Medium congestion
     43  *      11 High congestion
     44  * Q_MIN and Q_AVG: 0 (no congestion) and 1 (congestion).
     45  */
     46 #define COSQ_WRED_CNG_ENTRY_PER_PROFILE 12
     47 
     48 /*
     49  * \brief The classifier_id used by bcm_cosq_classifier_* APIs
     50  *        contains two fields, a 6-bit type field, followed by
     51  *        a 26-bit value field.
     52  */
     53 #define BCMINT_COSQ_CLASSIFIER_TYPE_FIELD     (1 << 2)
     54 #define BCMINT_COSQ_CLASSIFIER_TYPE_SHIFT     26
     55 #define BCMINT_COSQ_CLASSIFIER_FIELD_SHIFT    (0)
     56 #define BCMINT_COSQ_CLASSIFIER_FIELD_MASK     (0x3ffffff)
     57 
     58 #define BCMINT_COSQ_CLASSIFIER_IS_FIELD(_classifier)                   \
     59         (((_classifier) >> BCMINT_COSQ_CLASSIFIER_TYPE_SHIFT) ==       \
     60            BCMINT_COSQ_CLASSIFIER_TYPE_FIELD)
     61 
     62 #define BCMINT_COSQ_CLASSIFIER_FIELD_SET(_classifier, _id)             \
     63             ((_classifier) = (BCMINT_COSQ_CLASSIFIER_TYPE_FIELD            \
     64                               << BCMINT_COSQ_CLASSIFIER_TYPE_SHIFT) |      \
     65                               (((_id) & BCMINT_COSQ_CLASSIFIER_FIELD_MASK) \
     66                               << BCMINT_COSQ_CLASSIFIER_FIELD_SHIFT))
     67 
     68 #define BCMINT_COSQ_CLASSIFIER_FIELD_GET(_classifier)                  \
     69             (((_classifier) >> BCMINT_COSQ_CLASSIFIER_FIELD_SHIFT)         \
     70                & BCMINT_COSQ_CLASSIFIER_FIELD_MASK)
     71 
     72 #define BCMINT_COSQ_CLASSIFIER_TYPE_FIELD_HI     (1 << 3)
     73 
     74 #define BCMINT_COSQ_CLASSIFIER_IS_FIELD_HI(_classifier)                   \
     75         (((_classifier) >> BCMINT_COSQ_CLASSIFIER_TYPE_SHIFT) ==       \
     76            BCMINT_COSQ_CLASSIFIER_TYPE_FIELD_HI)
     77 
     78 #define BCMINT_COSQ_CLASSIFIER_FIELD_HI_SET(_classifier, _id)             \
     79             ((_classifier) = (BCMINT_COSQ_CLASSIFIER_TYPE_FIELD_HI            \
     80                               << BCMINT_COSQ_CLASSIFIER_TYPE_SHIFT) |      \
     81                               (((_id) & BCMINT_COSQ_CLASSIFIER_FIELD_MASK) \
     82                               << BCMINT_COSQ_CLASSIFIER_FIELD_SHIFT))
     83 
     84 #define BCMINT_COSQ_CLASSIFIER_FIELD_HI_GET(_classifier)                  \
     85             (((_classifier) >> BCMINT_COSQ_CLASSIFIER_FIELD_SHIFT)         \
     86                & BCMINT_COSQ_CLASSIFIER_FIELD_MASK)
     87 
     88 /*
     89  * \brief TM_Q_ASSIGNMENT_INFO_ID_T type enum.
     90  */
     91 typedef enum bcmint_tm_q_assignment_info_id_type_s {
     92     /* Enumeration for TM_UNICAST_VIEW. */
     93     BCMINT_TM_UNICAST_VIEW = 0,
     94 
     95     /* Enumeration for TM_NON_UNICAST_VIEW. */
     96     BCMINT_TM_NON_UNICAST_VIEW = 1,
     97 
     98     /* Enumeration for TM_IFP_UNICAST_VIEW. */
     99     BCMINT_TM_IFP_UNICAST_VIEW = 2,
    100 
    101     /* Enumeration for TM_IFP_NON_UNICAST_VIEW. */
    102     BCMINT_TM_IFP_NON_UNICAST_VIEW = 3,
    103 
    104     /* Enumeration for TM_DST_FP_UNICAST_VIEW. */
    105     BCMINT_TM_DST_FP_UNICAST_VIEW = 4,
    106 
    107     /* Enumeration for TM_DST_FP_NON_UNICAST_VIEW. */
    108     BCMINT_TM_DST_FP_NON_UNICAST_VIEW = 5,
    109 
    110     /* Enumeration for TM_IFP_UNICAST_HI_VIEW_INDEX. */
    111     BCMINT_TM_IFP_UNICAST_HI_VIEW = 6,
    112 
    113     /* Enumeration for TM_IFP_NON_UNICAST_HI_VIEW_INDEX. */
    114     BCMINT_TM_IFP_NON_UNICAST_HI_VIEW = 7,
    115 
    116     /* The last one, not valid. */
    117     BCMINT_TM_Q_ASSIGN_ID_TYPE_COUNT = 8
    118 
    119 } bcmint_tm_q_assignment_info_id_type_t;
    120 
    121 /*
    122  * \brief Cosq string map structure.
    123  */
    124 typedef struct bcmint_cosq_str_map_s {
    125 
    126     /*! Index of the mapped object. */
    127     int idx;
    128 
    129     /*! Map string. */
    130     const char * str;
    131 
    132     /*! Profile id. */
    133     int profile_id;
    134 
    135     /*! base index. */
    136     int base_index;
    137 
    138     /*! Enable to use multicast COS from mirroring. */
    139     bool mc_cos_mirror;
    140 } bcmint_cosq_str_map_t;
    141 
    142 /*
    143  * \brief Cosq string map handle.
    144  */
    145 /* TM_Q_ASSIGNMENT_INFO_ID_T type handle. */
    146 #define BCMINT_TM_Q_ASSIGNMENT_INFO_ID_T 0
    147 
    148 /*
    149  * \brief Cosq string map database structure.
    150  */
    151 typedef struct bcmint_cosq_str_map_db_s {
    152 
    153     /* Cosq string map handle(BCMINT_L2_MAP_SH_XXX). */
    154     int hdl;
    155 
    156     /* Map info. */
    157     const bcmint_cosq_str_map_t *info;
    158 
    159     /* Num of elements in map info. */
    160     int num;
    161 
    162 } bcmint_cosq_str_map_db_t;
    163 
    164 /*
    165  * \brief Cosq map database structure.
    166  */
    167 typedef struct bcmint_cosq_map_db_s {
    168 
    169     /*! String database. */
    170     const bcmint_cosq_str_map_db_t *str_db;
    171 
    172     /*! Num of elements in string database. */
    173     int str_num;
    174 
    175 } bcmint_cosq_map_db_t;
    176 
    177 #define TM_Q_ASSIGNMENT_INFO_MAX_POLICY 4
    178 
    179 typedef struct bcmint_cosq_assignment_info_s {
    180 
    181     /* ipost_scratch_bus_unicast_flow[0:0], no overlay. */
    182     const char *unicast;
    183 
    184     /* ipost_scratch_bus_switch_to_cpu[0:0], no overlay. */
    185     const char *switchtocpu;
    186 
    187     /* number of policy indices. */
    188     uint32_t num_tm_q_assignment_profile_id;
    189 
    190     /* tm_q_assignment_policy logical table indices. */
    191     const char * tm_q_assignment_profile_id[TM_Q_ASSIGNMENT_INFO_MAX_POLICY];
    192 } bcmint_cosq_assignment_info_t;
    193 
    194 #endif /* !BCMI_LTSW_COSQ_INT_H */