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

flow_db.h (13740B)


      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:    flow_db.h
      8  * Purpose: Header file for flow database module
      9  */
     10 #ifndef  FLOW_DB_H
     11 #define FLOW_DB_H
     12 #include <soc/esw/flow_db_enum.h>
     13 
     14 typedef enum soc_flow_db_mem_view_field_type_e {
     15     SOC_FLOW_DB_FIELD_TYPE_INVALID = 0,
     16     SOC_FLOW_DB_FIELD_TYPE_CONTROL,
     17     SOC_FLOW_DB_FIELD_TYPE_KEY,
     18     SOC_FLOW_DB_FIELD_TYPE_VALID,
     19     SOC_FLOW_DB_FIELD_TYPE_POLICY_DATA,
     20     SOC_FLOW_DB_FIELD_TYPE_POLICY_DATA_ENCODING,
     21     SOC_FLOW_DB_FIELD_TYPE_LOGICAL_KEY,
     22     SOC_FLOW_DB_FIELD_TYPE_LOGICAL_POLICY_DATA,
     23     SOC_FLOW_DB_FIELD_TYPE_DATA_FRAGMENT,
     24     SOC_FLOW_DB_FIELD_TYPE_MAX
     25 } soc_flow_db_mem_view_field_type_t;
     26 
     27 #define BCM_FEILD_TYPE_NAME_INITIALIZER \
     28 { \
     29     "SOC_FLOW_DB_FIELD_TYPE_INVALID",\
     30     "SOC_FLOW_DB_FIELD_TYPE_CONTROL",\
     31     "SOC_FLOW_DB_FIELD_TYPE_KEY",\
     32     "SOC_FLOW_DB_FIELD_TYPE_VALID",\
     33     "SOC_FLOW_DB_FIELD_TYPE_POLICY_DATA",\
     34     "SOC_FLOW_DB_FIELD_TYPE_POLICY_DATA_ENCODING",\
     35     "SOC_FLOW_DB_FIELD_TYPE_LOGICAL_KEY",\
     36     "SOC_FLOW_DB_FIELD_TYPE_LOGICAL_POLICY_DATA",\
     37     "SOC_FLOW_DB_FIELD_TYPE_DATA_FRAGMENT",\
     38     "SOC_FLOW_DB_FIELD_TYPE_MAX",\
     39 }
     40 
     41 
     42 typedef enum  soc_flow_db_mem_view_type_e {
     43     SOC_FLOW_DB_VIEW_TYPE_INVALID = 0,
     44     SOC_FLOW_DB_VIEW_TYPE_DIRECT,
     45     SOC_FLOW_DB_VIEW_TYPE_HASH,
     46     SOC_FLOW_DB_VIEW_TYPE_TCAM,
     47     SOC_FLOW_DB_VIEW_TYPE_MAX
     48 } soc_flow_db_mem_view_type_t;
     49 
     50 
     51 typedef struct soc_flow_db_mem_view_field_info_s {
     52     soc_field_t  field_id;  /* SOC or SYSTEM unique field ID*/
     53     soc_flow_db_mem_view_field_type_t  type;
     54     uint16  offset;    /* Least bit position of the field */
     55     uint16  v_offset;  /* offset within the virtual field */
     56     uint16  width;     /* Bits in field */
     57     uint16  flags;     /* Logical OR of SOCF_* */
     58     uint32  value;  /* Value for fixed fields */
     59 } soc_flow_db_mem_view_field_info_t;
     60 
     61 typedef struct soc_flow_db_mem_view_split_field_info_s {
     62     int width;   /* user field width */
     63     int num_fld; /* number of split fields */
     64     soc_flow_db_mem_view_field_info_t field[6]; /* split field 
     65                                                    info */
     66 } soc_flow_db_mem_view_split_field_info_t;
     67 
     68 typedef struct soc_flow_db_mem_view_info_s {
     69     uint32 mem_view_id; /* DB mem_view ID */
     70     soc_mem_t mem;      /* soc mem ID */
     71     uint32  width;      /* Entry Width */
     72     soc_flow_db_mem_view_type_t type;
     73 } soc_flow_db_mem_view_info_t;
     74 
     75 typedef struct soc_flow_db_ctrl_field_s{
     76     soc_field_t field_id;
     77     uint32 value;
     78 } soc_flow_db_ctrl_field_t;
     79 
     80 typedef struct soc_flow_db_ffo_s {
     81     uint32 flow_handle;  /* flow_handle */
     82     uint32 function_id;  /* function_id */
     83     uint32 option_id;    /* option_id */
     84 } soc_flow_db_ffo_t;
     85 
     86 /*
     87  * Function:
     88  *      soc_flow_db_flow_handle_get
     89  * Purpose:
     90  *      Get the flow handle
     91  * Parameters:
     92  *      unit           - (IN)     Unit.
     93  *      flow_name      - (IN)     Flow name.
     94  *      handle         - (IN/OUT) Flow hanlde.
     95  * Returns:
     96  *      SOC_E_NONE
     97  *      SOC_E_XXX
     98  */
     99 
    100 extern int
    101 soc_flow_db_flow_handle_get(int unit,
    102                        const char *flow_name,
    103                        uint32 *handle);
    104 /*
    105  * Function:
    106  *      soc_flow_db_flow_option_id_get
    107  * Purpose:
    108  *      Get the Flow option ID.
    109  * Parameters:
    110  *      unit             - (IN)     Unit
    111  *      flow_handle      - (IN)     Flow hanlde.
    112  *      flow_option_name - (IN)     Flow option name.
    113  *      option_id        - (IN/OUT) Flow Option ID.
    114  * Returns:
    115  *      SOC_E_NONE
    116  *      SOC_E_XXX
    117  */
    118 extern int
    119  soc_flow_db_flow_option_id_get(int unit,
    120                            uint32 flow_handle,
    121                            const char *flow_option_name,
    122                            uint32 *option_id);
    123 /*
    124  * Function:
    125  *      soc_flow_db_mem_view_entry_init
    126  * Purpose:
    127  *      Initialize the entry buffer.
    128  * Parameters:
    129  *      unit           - (IN)     Unit
    130  *      mem_view_id    - (IN)     Memory view ID.
    131  *      entry_buf      - (IN/OUT) View entry buffer
    132  * Returns:
    133  *      SOC_E_NONE
    134  *      SOC_E_XXX
    135  */
    136 
    137 extern int
    138  soc_flow_db_mem_view_entry_init(int unit,
    139                                  uint32 mem_view_id,
    140                                  uint32 *entry_buf);
    141 /*
    142  * Function:
    143  *      soc_flow_db_ffo_to_mem_view_id_get
    144  * Purpose:
    145  *      Given a flow,function,option ID's
    146  *      get the memory view ID.
    147  * Parameters:
    148  *      unit                - (IN)     unit
    149  *      flow_handle         - (IN)     flow handle
    150  *      flow_option_id      - (IN)     flow option id.
    151  *      function_id         - (IN)     function id.
    152  *      mem_view_id         - (IN/OUT) list of mem view ID.
    153  * Returns:
    154  *      SOC_E_NONE
    155  *      SOC_E_XXX
    156  */
    157 extern int
    158  soc_flow_db_ffo_to_mem_view_id_get(int    unit,
    159                              uint32 flow_handle,
    160                              uint32 flow_option_id,
    161                              uint32 function_id,
    162                              uint32 *mem_view_id);
    163 
    164 /*
    165  * Function:
    166  *      soc_flow_db_mem_view_to_ffo_get
    167  * Purpose:
    168  *      Given a memory view ID get the ffo tuple.
    169  * Parameters:
    170  *      unit                - (IN)     unit
    171  *      mem_view_id         - (IN)     list of mem view ID.
    172  *      size                - (IN)     Max array size
    173  *      ffo                 - (IN/OUT) ffo tuple
    174  *      num_ffo_entries     - (IN/OUT) num ffo tuples
    175  * Returns:
    176  *      SOC_E_NONE
    177  *      SOC_E_XXX
    178  */
    179 extern int
    180  soc_flow_db_mem_view_to_ffo_get(int  unit,
    181                              uint32 mem_view_id,
    182                              uint32 size,
    183                              soc_flow_db_ffo_t *ffo,
    184                              uint32 *num_ffo_entries);
    185 
    186 
    187 /*
    188  * Function:
    189  *      soc_flow_db_mem_to_view_id_get
    190  * Purpose:
    191  *      Given a memory , key_type, data_type and control_field
    192  *      list get the view id.
    193  *
    194  * Parameters:
    195  *      unit                - (IN)     unit
    196  *      mem                 - (IN)     mem
    197  *      mem_type            - (IN)     memory type.
    198  *      key_type            - (IN)     key type for HASH/TCAM
    199  *      data_type           - (IN)     data type for indexed
    200  *      num_fields          - (IN)     num of control fields
    201  *      field_list          - (IN)     control field list
    202  *      mem_view_id         - (IN/OUT) mem view ID.
    203  * Returns:
    204  *      SOC_E_NONE
    205  *      SOC_E_XXX
    206  */
    207 extern int
    208  soc_flow_db_mem_to_view_id_get(int                     unit,
    209                              uint32                     mem,
    210                              int                        key_type,
    211                              int                        data_type,
    212                              int                        num_fields,
    213                              soc_flow_db_ctrl_field_t   *field_list,
    214                              uint32                     *mem_view_id);
    215 
    216 /*
    217  * Function:
    218  *      soc_flow_db_mem_view_field_list_get
    219  * Purpose:
    220  *      Get the list of field IDs
    221  *      of specific type such as CONTROL/KEY/
    222  *      for a given mem_view ID, field_type parameter is
    223  *      a classifier.
    224  *
    225  *   Parameters
    226  *      unit           - (IN)     unit
    227  *      mem_view_id    - (IN)     Memory view ID.
    228  *      field_type     - (IN)     field type
    229  *      size           - (IN)     Max array size
    230  *      field_id       - (IN/OUT) Field ID list
    231  *      field_count    - (IN.OUT) field count
    232  * Returns:
    233  *      SOC_E_NONE
    234  *      SOC_E_XXX
    235  */
    236 extern int
    237 soc_flow_db_mem_view_field_list_get(int unit,
    238                                     uint32 mem_view_id,
    239                                     int field_type,
    240                                     int size,
    241                                     uint32  *field_id,
    242                                     uint32  *field_count);
    243 /*
    244  * Function:
    245  *      soc_flow_db_mem_view_field_info_get
    246  * Purpose:
    247  *      Get a field information for a given mem_view ID and field ID.
    248  *   Parameters:
    249  *      unit          - (IN)  unit.
    250  *      view_id       - (IN)  Memory mem_view ID.
    251  *      field_id      - (IN)  Field ID.
    252  *      field_info    - (OUT) Field information
    253  * Returns:
    254  *      SOC_E_NONE
    255  *      SOC_E_XXX
    256  */
    257 extern int
    258 soc_flow_db_mem_view_field_info_get(int unit,
    259                                 uint32 mem_view_id,
    260                                 uint32 field_id,
    261                                 soc_flow_db_mem_view_field_info_t *field_info);
    262 
    263 /*
    264  * Function:
    265  *      soc_flow_db_mem_view_split_field_info_get
    266  * Purpose:
    267  *      Get a split field information for a given mem_view ID and field ID.
    268  *   Parameters:
    269  *      unit          - (IN)  unit.
    270  *      view_id       - (IN)  Memory mem_view ID.
    271  *      field_id      - (IN)  Field ID.
    272  *      sf_info       - (OUT) split field information
    273  * Returns:
    274  *      SOC_E_NONE
    275  *      SOC_E_XXX
    276  */
    277 extern int
    278 soc_flow_db_mem_view_split_field_info_get(int unit,
    279                                 uint32 mem_view_id,
    280                                 uint32 field_id,
    281                             soc_flow_db_mem_view_split_field_info_t *sf_info);
    282 
    283 /*
    284  * Function:
    285  *      soc_flow_db_mem_view_info_get
    286  * Purpose:
    287  *      Get a mem view information for a given memory view ID
    288  *   Parameters:
    289  *      mem_view_id       - (IN)  Physical table view ID.
    290  *      mem_view_info     - (OUT) Physical table view information.
    291  * Returns:
    292  *      SOC_E_NONE
    293  *      SOC_E_XXX
    294  */
    295 extern int
    296 soc_flow_db_mem_view_info_get(int unit,
    297                           int mem_view_id,
    298                           soc_flow_db_mem_view_info_t *mem_view_info);
    299 
    300 
    301 
    302 /*
    303  * Function:
    304  *      soc_flow_db_mem_view_logical_field_id_get
    305  * Purpose:
    306  *      Given flow handle and logical field name
    307  *      get the  field ID
    308  *   Parameters:
    309  *      unit                -  (IN)    unit.
    310  *      flow_handle         -  (IN)    flow_handle.
    311  *      logical_field_name  -  (IN)    logical field Name.
    312  *      field ID            -  (OUT)   field ID.
    313  * Returns:
    314  *      SOC_E_NONE
    315  *      SOC_E_XXX
    316  */
    317 extern int
    318 soc_flow_db_mem_view_logical_field_id_get(int unit,
    319                                     uint32 flow_handle,
    320                                     const char *logical_field_name,
    321                                     uint32  *field_id);
    322 
    323 /*
    324  * Function:
    325  *      soc_flow_db_mem_view_field_is_valid
    326  * Purpose:
    327  *      Check if field ID is valid for the view.
    328  *   Parameters:
    329  *      unit                -  (IN)    unit.
    330  *      mem_view_id         -  (IN)    View ID.
    331  *      field ID            -  (IN)    field ID.
    332  * Returns:
    333  *      TRUE/FALSE
    334  */
    335 extern int
    336 soc_flow_db_mem_view_field_is_valid(int unit,
    337                                 uint32 mem_view_id,
    338                                 uint32 field_id);
    339 extern int
    340 soc_flow_db_mem_view_field_is_virtual(int unit,
    341                                 uint32 mem_view_id,
    342                                 uint32 field_id);
    343 
    344 /*
    345  * Function:
    346  *      soc_flow_db_mem_view_is_valid
    347  * Purpose:
    348  *      Check if view index is valid.
    349  *   Parameters:
    350  *      unit                -  (IN)    unit.
    351  *      mem_view_id         -  (IN)    View ID.
    352  * Returns:
    353  *      TRUE/FALSE
    354  */
    355 extern int
    356 soc_flow_db_mem_view_is_valid(int unit,
    357                               uint32 mem_view_id);
    358 
    359 
    360 /*
    361  * Function:
    362  *      soc_flow_db_mem_view_field_name_get
    363  * Purpose:
    364  *      Get the fleld name for view ID and field ID.
    365  * Parameters:
    366  *      unit            - (IN)     Unit.
    367  *      mem_view_id     - (IN)     View ID.
    368  *      field ID        - (IN)     field ID.
    369  *      field_name      - (IN/OUT) Field name.
    370  * Returns:
    371  *      SOC_E_NONE
    372  *      SOC_E_XXX
    373  */
    374 
    375 extern int
    376 soc_flow_db_mem_view_field_name_get(int unit,
    377                        uint32 mem_view_id,
    378                        uint32 field_id,
    379                        char **field_name);
    380 /*
    381  * Function:
    382  *      soc_flow_db_mem_view_mem_name_get
    383  * Purpose:
    384  *      Get the memory name for view ID.
    385  * Parameters:
    386  *      unit            - (IN)     Unit.
    387  *      mem_view_id     - (IN)     View ID.
    388  *      mem_name        - (IN/OUT) Physical memory name.
    389  * Returns:
    390  *      SOC_E_NONE
    391  *      SOC_E_XXX
    392  */
    393 
    394 extern int
    395 soc_flow_db_mem_view_mem_name_get(int unit,
    396                        uint32 mem_view_id,
    397                        char **mem_name);
    398 
    399 /*
    400  * Function:
    401  *      soc_flow_db_mem_view_option_name_get
    402  * Purpose:
    403  *      Get option name given flow handle and option ID.
    404  * Parameters:
    405  *      unit               - (IN)     Unit.
    406  *      flow_handle        - (IN)     Flow handle.
    407  *      flow_option_id     - (IN)     Flow option ID.
    408  *      option_name        - (IN/OUT) Flow option name.
    409  * Returns:
    410  *      SOC_E_NONE
    411  *      SOC_E_XXX
    412  */
    413 
    414 extern int
    415 soc_flow_db_mem_view_option_name_get(int unit,
    416                        uint32 flow_handle,
    417                        uint32 flow_option_id,
    418                        char **option_name);
    419 /*
    420  * Function:
    421  *      soc_flow_db_mem_view_entry_is_valid
    422  * Purpose:
    423  *      Check if flex view entry is valid
    424  * Parameters:
    425  *      unit           - (IN)     Unit
    426  *      mem_view_id    - (IN)     Memory view ID.
    427  *      entry_buf      - (IN/OUT) View entry buffer
    428  * Returns:
    429  *      TRUE
    430  *      FALSE
    431  */
    432 extern int
    433 soc_flow_db_mem_view_entry_is_valid(int unit,
    434                                  uint32 mem_view_id,
    435                                  uint32 *entry_buf);
    436 /*
    437  * Function:
    438  *      soc_flow_db_mem_view_flow_handle_valid
    439  * Purpose:
    440  *      Verify the flow handle if valid
    441  * Parameters:
    442  *      unit             - (IN)     Unit
    443  *      flow_handle      - (IN)     Flow handle.
    444  * Returns:
    445  *      SOC_E_NONE
    446  *      SOC_E_XXX
    447  */
    448 
    449 extern int
    450  soc_flow_db_mem_view_flow_handle_valid(int unit,
    451                                    uint32 flow_handle);
    452 
    453 #endif /* FLOW_DB_H */