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

profile_mem.h (9505B)


      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  * Routines for managing HW profile tables.
      8  */
      9 
     10 #ifndef _SOC_PROFILE_MEM_H
     11 #define _SOC_PROFILE_MEM_H
     12 
     13 #include <soc/defs.h>
     14 #include <soc/mem.h>
     15 
     16 #define SOC_PROFILE_MEM_F_NO_SHARE      0x1
     17 #define SOC_PROFILE_MEM_DMA_THRESHHOLD  8
     18 #define SOC_PROFILE_MEM_WRITE_DMA_MODE  1
     19 #define SOC_PROFILE_MEM_WRITE_PIO_MODE  2
     20 
     21 typedef struct soc_profile_mem_entry_s {
     22     uint32     ref_count;       /* Reference counters */
     23     int        entries_per_set; /* Number of entries per set */
     24 } soc_profile_mem_entry_t;
     25 
     26 typedef struct soc_profile_mem_table_s {
     27     soc_mem_t  mem;             /* Memory id */
     28     int        index_min;
     29     int        index_max;
     30     int        entry_words;     /* Entry word size */
     31     uint32     *data_mask;      /* optional entry comparison mask */
     32     soc_profile_mem_entry_t *entries; /* Entry info array */
     33     uint32     *cache_p;        /* Pointer to concatenated cached entries */   
     34 } soc_profile_mem_table_t;
     35 
     36 typedef struct soc_profile_mem_s {
     37     soc_profile_mem_table_t *tables;  /* Table info array */
     38     int        table_count;           /* Number of entries in tables array */
     39     uint32     flags;                 /* SOC_PROFILE_MEM_F_xxx */
     40 } soc_profile_mem_t;
     41 
     42 typedef struct soc_profile_reg_entry_s {
     43     uint32     ref_count;       /* Reference counters */
     44     int        entries_per_set; /* Number of entries per set */
     45     uint64     *cache_p;        /* Pointer to cached entries */
     46 } soc_profile_reg_entry_t;
     47 
     48 #define SOC_PROFILE_FLAG_XPE_SINGLE_ACC 0x1
     49 typedef struct soc_profile_reg_s {
     50     soc_reg_t  *regs;                 /* Pointer to array of register id */
     51     int        regs_count;            /* Number of entries in regs */
     52     soc_profile_reg_entry_t *entries; /* Pointer to array of entries */
     53     int        profile_flag;          /* Profile flag */
     54 } soc_profile_reg_t;
     55 
     56 extern void soc_profile_mem_t_init(soc_profile_mem_t *profile);
     57 extern int soc_profile_mem_index_create(int unit,
     58                                         soc_mem_t *mem_array,
     59                                         int *entry_words_array,
     60                                         int *index_min_array,
     61                                         int *index_max_array,
     62                                         void **data_mask_array,
     63                                         int table_count,
     64                                         soc_profile_mem_t *profile);
     65 extern int soc_profile_mem_create(int unit,
     66                                   soc_mem_t *mem_array,
     67                                   int *entry_words_array,
     68                                   int table_count,
     69                                   soc_profile_mem_t *profile);
     70 extern int soc_profile_mem_destroy(int unit,
     71                                    soc_profile_mem_t *profile);
     72 
     73 extern int soc_profile_mem_add_unique(int unit,
     74                     soc_profile_mem_t *profile,
     75                     void **entries_array,
     76                     int entries_per_set0,
     77                     int pipe,
     78                     uint32 *index0);
     79 
     80 extern int soc_profile_mem_add(int unit,
     81                                soc_profile_mem_t *profile,
     82                                void **entries,
     83                                int entries_per_set0,
     84                                uint32 *index0);
     85 
     86 extern int soc_profile_mem_search(int unit,
     87                                soc_profile_mem_t *profile,
     88                                void **entries,
     89                                int entries_per_set0,
     90                                uint32 *index0);
     91 
     92 extern int soc_profile_mem_single_table_add(int unit,
     93                                             soc_profile_mem_t *profile,
     94                                             void *entries,
     95                                             int entries_per_set,
     96                                             int *index);
     97 extern int soc_profile_mem_delete_unique(int unit,
     98                                    soc_profile_mem_t *profile,
     99                                    uint32 index0, int pipe);
    100 extern int soc_profile_mem_delete(int unit,
    101                                   soc_profile_mem_t *profile,
    102                                   uint32 index);
    103 extern int soc_profile_mem_set(int unit,
    104                                soc_profile_mem_t *profile,
    105                                void **entries_array,
    106                                uint32 index0);
    107 extern int soc_profile_mem_get(int unit,
    108                                soc_profile_mem_t *profile,
    109                                int index0,
    110                                int count,
    111                                void **entries_array);
    112 extern int soc_profile_mem_index_get(int unit,
    113                                      soc_profile_mem_t *profile,
    114                                      soc_mem_t mem,
    115                                      int *index);
    116 extern int soc_profile_mem_single_table_get(int unit,
    117                                             soc_profile_mem_t *profile,
    118                                             int index,
    119                                             int count,
    120                                             void *entries);
    121 extern int soc_profile_mem_reference_unique(int unit,
    122                           soc_profile_mem_t *profile,
    123                           int index0,
    124                           int entries_per_set0,
    125                           int pipe);
    126 extern int soc_profile_mem_reference(int unit,
    127                                      soc_profile_mem_t *profile,
    128                                      int index0,
    129                                      int entries_per_set0);
    130 extern int soc_profile_mem_ref_count_get(int unit,
    131                                          soc_profile_mem_t *profile,
    132                                          int index, int *ref_count);
    133 extern int soc_profile_mem_fields32_modify_unique(int unit,
    134                                 soc_profile_mem_t *profile,
    135                                 int table_id,
    136                                 int field_count,
    137                                 soc_field_t *fields,
    138                                 uint32 *values);
    139 extern int soc_profile_mem_fields32_modify(int unit,
    140                                            soc_profile_mem_t *profile,
    141                                            int table_id,
    142                                            int field_count,
    143                                            soc_field_t *fields,
    144                                            uint32 *values);
    145 extern int soc_profile_mem_field32_modify(int unit,
    146                                           soc_profile_mem_t *profile,
    147                                           int table_id,
    148                                           soc_field_t field,
    149                                           uint32 value);
    150 
    151 extern void soc_profile_reg_t_init(soc_profile_reg_t *profile_reg);
    152 extern int soc_profile_reg_create(int unit,
    153                                   soc_reg_t *regs,
    154                                   int regs_count,
    155                                   soc_profile_reg_t *profile_reg);
    156 extern int soc_profile_reg_destroy(int unit,
    157                                    soc_profile_reg_t *profile_reg);
    158 extern int soc_profile_reg_add(int unit,
    159                                soc_profile_reg_t *profile_reg,
    160                                uint64 **entries,
    161                                int entries_per_set,
    162                                uint32 *index);
    163 extern int soc_profile_reg_delete(int unit,
    164                                   soc_profile_reg_t *profile_reg,
    165                                   uint32 index);
    166 extern int soc_profile_reg_get(int unit,
    167                                soc_profile_reg_t *profile_reg,
    168                                uint32 index,
    169                                int count,
    170                                uint64 **entries);
    171 extern int soc_profile_reg_reference(int unit,
    172                                      soc_profile_reg_t *profile_reg,
    173                                      uint32 index,
    174                                      int entries_per_set_override);
    175 extern int soc_profile_reg_ref_count_get(int unit,
    176                                          soc_profile_reg_t *profile_reg,
    177                                          uint32 index, int *ref_count);
    178 extern int soc_profile_mem_sw_state_set(int unit, soc_profile_mem_t *profile,
    179                                         void **entries_array, int ent_per_set0,
    180                                         uint32 index0);
    181 
    182 extern int soc_profile_mem_write_mode_get(int unit,
    183                                soc_profile_mem_t *profile,
    184                                uint32 index0, int *mode);
    185 
    186 /* Macro to get a pointer to the entry at the specified index */
    187 #define SOC_PROFILE_MEM_ENTRY(_unit, _profile_mem, _cast, _index) \
    188     ((_cast)&_profile_mem->tables[0].cache_p[(_index) * _profile_mem->tables[0].entry_words])
    189 
    190 /* Macro to adjust the ref count at the specifed index.
    191  * Positive and negative "_count" values are accepted.
    192  */
    193 #define SOC_PROFILE_MEM_REFERENCE(_unit, _profile_mem, _index, _count) \
    194     (_profile_mem->tables[0].entries[_index].ref_count += _count)
    195 
    196 /* Macro to set the number of entries per set */
    197 #define SOC_PROFILE_MEM_ENTRIES_PER_SET(_unit, _profile_mem, _index, _num) \
    198     (_profile_mem->tables[0].entries[_index].entries_per_set = _num)
    199 
    200 #endif /* !_SOC_PROFILE_MEM_H */