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

wb_engine.h (24620B)


      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 #ifndef _SOC_WB_ENGINE_H_
      8 #define _SOC_WB_ENGINE_H_
      9 
     10 
     11 /* scache operations */
     12 typedef enum soc_wb_engine_scache_oper_e {
     13     socWbEngineScacheRetreive,
     14     socWbEngineScacheCreate,
     15     socWbEngineScacheRealloc,
     16     socWbEngineScacheFreeCreate
     17 } soc_wb_engine_scache_oper_t;
     18 
     19 /* NOTE: changing this enum may be not ISSUable, as its members are added to
     20          SOC_MODULE_WB_ENGINE_BASE to create unique scache handles           */
     21 typedef enum
     22 {
     23     SOC_WB_ENGINE_PRIMARY = 0,
     24     SOC_WB_ENGINE_PORTMOD,
     25     SOC_WB_ENGINE_NOF
     26 } SOC_WB_ENGINE;
     27 
     28 /* module space:
     29  * 0-79 - modules.h
     30  * 80-119 - bcm_int modules
     31  * 120-179 - common/wb_engine.h
     32  * 180-255 - other soc modules*
     33  */
     34 #define SOC_MODULE_WB_ENGINE_BASE                (120)
     35 
     36 /* consistency flags */
     37 #define SOC_WB_ENGINE_SCACHE_EXISTS_ERROR                0x00000001
     38 #define SOC_WB_ENGINE_SCACHE_DOWNGRADE_INVALID           0x00000002
     39 #define SOC_WB_ENGINE_SCACHE_UPGRADE_INVALID             0x00000004
     40 #define SOC_WB_ENGINE_SCACHE_DEFAULT                     (SOC_WB_ENGINE_SCACHE_DOWNGRADE_INVALID)
     41 
     42 #define SOC_WB_ENGINE_VAR_INITIALIZED                    (1)
     43 #define SOC_WB_ENGINE_VAR_DYNAMIC_SIZE_UPDATED           (2)
     44 
     45 #define SOC_WB_ENGINE_ALIGN_SIZE(size) \
     46         (size) = ((size) + 3) & (~3)
     47 
     48 #define SOC_WB_ENGINE_PRE_RELEASE (0x1)
     49 #define SOC_WB_ENGINE_POST_RELEASE (0x2)
     50 
     51 /* 
     52  * Upgrade function for version upgrade
     53  */
     54 typedef int (*soc_wb_upgrade_func_t)(
     55     int unit,
     56     void* arg,
     57     int recovered_version,
     58     int new_version);
     59 
     60 typedef struct soc_wb_engine_buffer_info_s {
     61     uint16                      buffer_name; /*unique buffer name */
     62     uint32                      flags;
     63     uint16                      version;
     64     uint8                       *scache_ptr; /* internaly handled, held pointer pointing straight to data (no header)*/
     65     soc_wb_upgrade_func_t       upgrade_func;
     66     void*                       upgrade_func_arg;
     67     int                         size; /*calculated*/
     68     int                         dirty; /* internaly handled*/
     69     char                        *buff_string;
     70     uint8                       is_dynamic;
     71     int                         init_done; /* internaly handled*/
     72     uint8                       is_only_copy; /* 1 if buffer holds the only copy of the data (instead of mirroring it) */
     73     uint8                       is_added_after_relase; /* indicate if buffer was added on sustained branch (implications on ISSU)*/
     74     uint16                      variable_num; /* variable number of the special buffer*/
     75 } soc_wb_engine_buffer_info_t;
     76 
     77 /* 
     78  * this struct is meant to support single variables, 1d arrays and 2d arrays. 
     79  * when inserting a single variable outer_arr_length and inner_arr_length should equal 1 and outer/inner_arr_jump are meaningless. 
     80  * when inserting a 1d array insert its length in inner_arr_length and put outer_arr_length=1                       .
     81  * when inserting a 2d array insert its outer indx length in outer_arr_length and its inner indx length in inner_arr_length                                                                                                     .
     82  * the inner/outer_arr_jump are used when arrays are implicit (explicit 2d N*M array is z[N][M]), for example:                                                                                                                                                                                                                    .
     83  * if we add variable z to the variables table and z is a member of some struct x[N].y[M].z then z is an implicit 2d array of size N*M but the                                                                                                                                                                                                                                                                            .
     84  * data of the array is not consecutive in memory (due to other fields of its parent struct), so we add outer_arr_jump=sizeof(x) inner_arr_jump=sizeof(y)                                                                                                                                                                                                                                                                                                                                                                                                      .
     85  * when array is explicit (z[][] or **z) we use the value DEFAULT for inner/outer_arr_jump                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .
     86  */ 
     87 typedef struct soc_wb_engine_var_info_s {
     88     uint32                      buffer; /*module*/
     89     uint32                      flags;
     90     uint16                      version_added; 
     91     uint16                      version_removed; 
     92     uint32                      data_size; /*in uint8s */
     93     uint8                       *data_orig;
     94     uint32                      outer_arr_length;
     95     uint32                      inner_arr_length;
     96     uint32                      outer_arr_jump;
     97     uint32                      inner_arr_jump;
     98     uint8                       *default_value; /*pointer to a member holding the default value for the data, to be restored on ISSU when data didnt exist in the old version */
     99     uint32                      offset; /*auto calculated*/
    100     char                        *var_string;
    101     uint8                       is_dynamic;
    102     uint8                       is_enabled;
    103     uint8                       init_done; /*handled internally*/
    104 } soc_wb_engine_var_info_t;
    105 
    106 typedef struct soc_wb_engine_dynamic_var_info_s {
    107     uint32                      flags;
    108     uint32                      data_size; /*in uint8s */
    109     uint32                      outer_arr_length;
    110     uint32                      inner_arr_length;
    111     uint32                      outer_arr_jump;
    112     uint32                      inner_arr_jump;
    113     uint32                      offset; /*within the buffer - auto calculated*/
    114     uint8                       is_enabled;
    115 } soc_wb_engine_dynamic_var_info_t;
    116 
    117 
    118 /* general definitions to be included at the beginning of engine's init_tables functiom  */
    119 /* these defs are later used by ADD_DYNAMIC_BUFF and ADD_DYNAMIC_VAR_WITH_FEATURES below */
    120 #define WB_ENGINE_INIT_TABLES_DEFS \
    121     soc_wb_engine_var_info_t            tmp_var_info;\
    122     soc_wb_engine_dynamic_var_info_t   *buffer_header = NULL;\
    123     uint8                               buffer_is_dynamic = 0;\
    124     int                                 dynamic_var_counter = 0;\
    125     soc_wb_engine_buffer_info_t         tmp_buffer_info;\
    126     int                                 buffer_init_count = 0;\
    127     int                                 var_init_count = 0
    128 
    129 #define SOC_WB_ENGINE_INIT_TABLES_SANITY(_rv)\
    130     if (buffer_init_count != 1 || var_init_count == 0) {\
    131         /*macros ++ the var and buffer count*/\
    132         /* exactly one buffer should be init */\
    133         /* at least one variable should be init */\
    134         _rv = SOC_E_INTERNAL;\
    135     }\
    136 
    137 #define SOC_WB_ENGINE_ADD_DYNAMIC_BUFF(_engine_id, _buff, _buff_string, _upgrade_func, _upgrade_func_arg, _version, _is_dynamic, _is_only_copy, _is_added_after_release)\
    138                      if (_buff == buffer_id) {\
    139                          buffer_is_dynamic = _is_dynamic;\
    140                          tmp_buffer_info.buff_string = _buff_string;\
    141                          tmp_buffer_info.buffer_name = _buff;\
    142                          tmp_buffer_info.upgrade_func = _upgrade_func;\
    143                          tmp_buffer_info.upgrade_func_arg = _upgrade_func_arg;\
    144                          tmp_buffer_info.version = _version;\
    145                          tmp_buffer_info.flags = 0;\
    146                          tmp_buffer_info.dirty = 0;\
    147                          tmp_buffer_info.init_done = 0;\
    148                          tmp_buffer_info.size = 0;\
    149                          tmp_buffer_info.is_dynamic = _is_dynamic;\
    150                          tmp_buffer_info.scache_ptr = NULL;\
    151                          tmp_buffer_info.is_only_copy = _is_only_copy;\
    152                          tmp_buffer_info.is_added_after_relase = _is_added_after_release;\
    153                          tmp_buffer_info.variable_num = 0;\
    154                          rv = soc_wb_engine_add_buff(unit, _engine_id, _buff, tmp_buffer_info);\
    155                          /*indicate that a var was initialized*/\
    156                          buffer_init_count++;\
    157                      }
    158 
    159 #ifndef VALGRIND_CHECK
    160 /* This is used from DPP to force a Valgrind memory initialized check when a wb array */
    161 /* is initialized. */
    162 /* This check makes sure that the passed array is initialized by going over it. */
    163 /* If a byte is uninitialized, then Valgrind will give an error there. */
    164 #define VALGRIND_CHECK(_orig_data_ptr, _outer_arr_length, _inner_arr_length, _outer_jump, _inner_jump, _data_size, _var) ((void)0)
    165 #endif
    166 
    167 /*most generic variable addition macro */
    168 #define SOC_WB_ENGINE_ADD_DYNAMIC_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _outer_arr_length, _inner_arr_length, _outer_jump, _inner_jump, _version_added, _version_removed, _default_value, _is_dynamic) \
    169     if (_buffer == buffer_id) {                                         \
    170         tmp_var_info.var_string = _var_string;                          \
    171         tmp_var_info.buffer = _buffer;                                  \
    172         tmp_var_info.version_added = _version_added;                    \
    173         tmp_var_info.version_removed = _version_removed;                \
    174         tmp_var_info.default_value = (_default_value);                  \
    175         tmp_var_info.flags = 0;                                         \
    176         tmp_var_info.init_done = SOC_WB_ENGINE_VAR_INITIALIZED;         \
    177         tmp_var_info.is_dynamic = _is_dynamic;                          \
    178         tmp_var_info.is_enabled = 0;                                    \
    179         tmp_var_info.data_size = 0; /* default (to be overriden)*/      \
    180         tmp_var_info.offset = 0;                                        \
    181                                                                         \
    182         if (!(_is_dynamic) || (SOC_WARM_BOOT(unit) && buffer_header && buffer_header[dynamic_var_counter].is_enabled)){ \
    183             VALGRIND_CHECK(_orig_data_ptr, _outer_arr_length, _inner_arr_length, _outer_jump, _inner_jump, _data_size, _var); \
    184             tmp_var_info.data_size = (_data_size)/sizeof(uint8); /* normalize size to uint8 size*/                \
    185             tmp_var_info.data_orig = (uint8 *) _orig_data_ptr;                                                    \
    186             tmp_var_info.outer_arr_length = (_outer_arr_length);            \
    187             tmp_var_info.inner_arr_length = (_inner_arr_length);            \
    188             if ((_outer_jump) == 0xffffffff)                                \
    189             {                                                               \
    190                 tmp_var_info.outer_arr_jump = (_inner_arr_length) * tmp_var_info.data_size;                       \
    191             }                                                               \
    192             else                                                            \
    193             {                                                               \
    194                 tmp_var_info.outer_arr_jump = (_outer_jump);                \
    195             }                                                               \
    196             if ((_inner_jump) == 0xffffffff)                                \
    197             {                                                               \
    198                 tmp_var_info.inner_arr_jump = tmp_var_info.data_size;       \
    199             }                                                               \
    200             else                                                            \
    201             {                                                               \
    202                 tmp_var_info.inner_arr_jump = (_inner_jump);                \
    203             }                                                               \
    204         }                                                                                                         \
    205         rv = soc_wb_engine_add_var(unit, _engine_id, _var,tmp_var_info);                                          \
    206                                                                                                                   \
    207         /*indicate that a var was initialized*/                                                                   \
    208         var_init_count++;                                                                                         \
    209                                                                                                                   \
    210         if (_is_dynamic){                                                                                         \
    211             dynamic_var_counter++;                                                                                \
    212         }                                                                                                         \
    213     }
    214 
    215 /********************************/
    216 /* dynamic vars addition macros */
    217 /********************************/
    218 #define SOC_WB_ENGINE_ADD_DYNAMIC_VAR(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _version_added)\
    219     SOC_WB_ENGINE_ADD_DYNAMIC_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, 1, 1, 0xffffffff, 0xffffffff, _version_added, 0xff, NULL, TRUE)
    220 
    221 #define SOC_WB_ENGINE_ADD_DYNAMIC_ARR(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _arr_length, _version_added)\
    222     SOC_WB_ENGINE_ADD_DYNAMIC_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, 1, _arr_length, 0xffffffff, 0xffffffff, _version_added, 0xff, NULL, TRUE)
    223 
    224 #define SOC_WB_ENGINE_ADD_DYNAMIC_2D_ARR(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _outer_arr_length, _inner_arr_length, _version_added)\
    225     SOC_WB_ENGINE_ADD_DYNAMIC_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _outer_arr_length, _inner_arr_length, 0xffffffff, 0xffffffff, _version_added, 0xff, NULL, TRUE)
    226 /* removal */
    227 #define SOC_WB_ENGINE_REMOVED_DYNAMIC_VAR(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _version_added, _version_removed)\
    228     SOC_WB_ENGINE_ADD_DYNAMIC_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, 1, 1, 0xffffffff, 0xffffffff, _version_added, _version_removed, NULL, TRUE)
    229 
    230 #define SOC_WB_ENGINE_REMOVED_DYNAMIC_ARR(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _arr_length, _version_added, _version_removed)\
    231     SOC_WB_ENGINE_ADD_DYNAMIC_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, 1, _arr_length, 0xffffffff, 0xffffffff, _version_added, _version_removed, NULL, TRUE)
    232 
    233 #define SOC_WB_ENGINE_REMOVED_DYNAMIC_2D_ARR(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _outer_arr_length, _inner_arr_length, _version_added, _version_removed)\
    234     SOC_WB_ENGINE_ADD_DYNAMIC_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _outer_arr_length, _inner_arr_length, 0xffffffff, 0xffffffff, _version_added, _version_removed, NULL, TRUE)
    235 
    236 /********************************/
    237 /* static vars addition macros  */
    238 /********************************/
    239 
    240 #define SOC_WB_ENGINE_ADD_BUFF(_engine_id, _buff, _buff_string, _upgrade_func, _upgrade_func_arg, _version, _is_only_copy, _is_added_after_release)\
    241     SOC_WB_ENGINE_ADD_DYNAMIC_BUFF(_engine_id, _buff, _buff_string, _upgrade_func, _upgrade_func_arg, _version, 0 /*not dynamic*/, _is_only_copy, _is_added_after_release)
    242 
    243 #define SOC_WB_ENGINE_ADD_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _outer_arr_length, _inner_arr_length, _outer_jump, _inner_jump, _version_added, _version_removed, _default_value) \
    244     SOC_WB_ENGINE_ADD_DYNAMIC_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _outer_arr_length, _inner_arr_length, _outer_jump, _inner_jump, _version_added, _version_removed, _default_value, 0)
    245 
    246 /* ---------most-usefull----------- */
    247 #define SOC_WB_ENGINE_ADD_VAR_WITH_DEFAULT(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _version_added, _default_value)\
    248     SOC_WB_ENGINE_ADD_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, 1, 1, 0xffffffff, 0xffffffff, _version_added, 0xff, _default_value)
    249 
    250 #define SOC_WB_ENGINE_ADD_VAR(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _version_added)\
    251     SOC_WB_ENGINE_ADD_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, 1, 1, 0xffffffff, 0xffffffff, _version_added, 0xff, NULL)
    252 
    253 #define SOC_WB_ENGINE_ADD_ARR(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _arr_length, _version_added)\
    254     SOC_WB_ENGINE_ADD_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, 1, _arr_length, 0xffffffff, 0xffffffff, _version_added, 0xff, NULL)
    255 
    256 #define SOC_WB_ENGINE_ADD_2D_ARR(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _outer_arr_length, _inner_arr_length, _version_added)\
    257     SOC_WB_ENGINE_ADD_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _outer_arr_length, _inner_arr_length, 0xffffffff, 0xffffffff, _version_added, 0xff, NULL)
    258 /* -------------------------------- */
    259 
    260 /* --------- remove ------------- */
    261 #define SOC_WB_ENGINE_REMOVED_VAR(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _version_added, _version_removed)\
    262     SOC_WB_ENGINE_ADD_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, 1, 1, 0xffffffff, 0xffffffff, _version_added, _version_removed, NULL)
    263 
    264 #define SOC_WB_ENGINE_REMOVED_ARR(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _arr_length, _version_added, _version_removed)\
    265     SOC_WB_ENGINE_ADD_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, 1, _arr_length, 0xffffffff, 0xffffffff, _version_added, _version_removed, NULL)
    266 
    267 #define SOC_WB_ENGINE_REMOVED_2D_ARR(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _outer_arr_length, _inner_arr_length, _version_added, _version_removed)\
    268     SOC_WB_ENGINE_ADD_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _outer_arr_length, _inner_arr_length, 0xffffffff, 0xffffffff, _version_added, _version_removed, NULL)
    269 /*--------------------------------- */
    270 
    271 #define SOC_WB_ENGINE_ADD_ARR_WITH_OFFSET(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _arr_length, _inner_jump, _version_added) \
    272     SOC_WB_ENGINE_ADD_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, 1, _arr_length, 0xffffffff, _inner_jump, _version_added, 0xff, NULL)
    273 
    274 /* implicit arrays */
    275 /* examle for an implicit array:
    276     x[3].y.z[4] is an implicit 2d array (as opposed to w[3][4] which is an explicit 2d array)
    277    these arrays require two more fields to instruct the engine how many bytes separate two consecutive array entries.
    278  */
    279 #define SOC_WB_ENGINE_ADD_IMPL_ARR(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _arr_length, _arr_jump, _version_added)\
    280     SOC_WB_ENGINE_ADD_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, 1, _arr_length, 0xffffffff, _arr_jump, _version_added, 0xff, NULL)
    281 
    282 #define SOC_WB_ENGINE_ADD_IMPL_2D_ARR(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _outer_arr_length, _inner_arr_length, _outer_arr_jump, _inner_arr_jump, _version_added)\
    283     SOC_WB_ENGINE_ADD_VAR_WITH_FEATURES(_engine_id, _var, _var_string, _buffer, _data_size, _orig_data_ptr, _outer_arr_length, _inner_arr_length, _outer_arr_jump, _inner_arr_jump, _version_added, 0xff, NULL)
    284 
    285 
    286 /********************************************************************************************/
    287 /* set/get macros to be used to set/get vars/array entries that are handled by wb_engine    */
    288 /* retun SOC_E_ERRORS                                                                       */
    289 /********************************************************************************************/
    290 
    291 #define SOC_WB_ENGINE_SET_DBL_ARR(unit, _engine_id, _var_id, _data_ptr, _outer_idx, _inner_idx)\
    292     soc_wb_engine_var_set(unit, _engine_id, (_var_id), (_outer_idx), (_inner_idx), (uint8 *)(_data_ptr));
    293 
    294 #define SOC_WB_ENGINE_GET_DBL_ARR(unit, _engine_id, _var_id, _data_ptr, _outer_idx, _inner_idx)\
    295     soc_wb_engine_var_get(unit, _engine_id, _var_id, _outer_idx, _inner_idx, (uint8 *)(_data_ptr));
    296 
    297 #define SOC_WB_ENGINE_SET_ARR(unit, _engine_id, _var_id, _data_ptr, _idx) \
    298     SOC_WB_ENGINE_SET_DBL_ARR(unit, _engine_id, _var_id, _data_ptr, 0, _idx)
    299 
    300 #define SOC_WB_ENGINE_GET_ARR(unit, _engine_id, _var_id, _data_ptr, _idx)\
    301     SOC_WB_ENGINE_GET_DBL_ARR(unit, _engine_id, _var_id, _data_ptr, 0, _idx)
    302 
    303 #define SOC_WB_ENGINE_SET_VAR(unit, _engine_id, _var_id, _data_ptr)\
    304     SOC_WB_ENGINE_SET_DBL_ARR(unit, _engine_id, _var_id, _data_ptr, 0, 0)
    305 
    306 #define SOC_WB_ENGINE_GET_VAR(unit, _engine_id, _var_id, _data_ptr)\
    307     SOC_WB_ENGINE_GET_DBL_ARR(unit, _engine_id, _var_id, _data_ptr, 0, 0)
    308 
    309 /* set/get macros for changing multiple array entries at once */
    310 #define SOC_WB_ENGINE_MEMCPY_ARR(unit, _engine_id, _var_id, _data_ptr, _inner_idx, _cpy_length) \
    311     soc_wb_engine_array_range_set_or_get(unit, _engine_id, (_var_id), (_inner_idx), (_cpy_length), 1, (uint8 *)(_data_ptr))
    312 
    313 #define SOC_WB_ENGINE_MEMCPY_ARR_GET(unit, _engine_id, _var_id, _data_ptr, _inner_idx, _cpy_length) \
    314     soc_wb_engine_array_range_set_or_get(unit, _engine_id, (_var_id), (_inner_idx), (_cpy_length), 0, (uint8 *)(_data_ptr))
    315 
    316 
    317 #define SOC_WB_ENGINE_MEMSET_ARR(unit, _engine_id, _var_id, _val) \
    318     soc_wb_engine_array_set(unit, _engine_id, (_var_id), (_val))
    319 
    320 
    321 /* if not compiled with wb define control size to be 0*/
    322 #ifndef BCM_WARM_BOOT_SUPPORT
    323 #define SOC_WB_SCACHE_CONTROL_SIZE          (0x0)
    324 #endif /*  BCM_WARM_BOOT_SUPPORT */
    325 
    326 #ifdef BCM_WARM_BOOT_SUPPORT
    327 int
    328 soc_wb_engine_dump(int unit, int engine_id, int flags, uint32 var_id, uint32 buffer_id, int print_orig_data, char *file_name, char *mode);
    329 
    330 int
    331 soc_wb_engine_buffer_dynamic_vars_state_get(int unit, int engine_id, int buffer_idx, soc_wb_engine_dynamic_var_info_t **var);
    332 #endif
    333 
    334 int
    335 soc_wb_engine_enable_dynamic_var(int unit, int engine_id, int var_idx, soc_wb_engine_dynamic_var_info_t var, uint8 *data_orig);
    336 
    337 int
    338 soc_wb_engine_disable_dynamic_var(int unit, int engine_id, int var_idx);
    339 
    340 int
    341 soc_wb_engine_add_var(int unit, int engine_id, int var_idx, soc_wb_engine_var_info_t var);
    342 
    343 int
    344 soc_wb_engine_add_buff(int unit, int engine_id, int buff_idx, soc_wb_engine_buffer_info_t buffer);
    345 
    346 int
    347 soc_wb_engine_update_var_info(int unit, int engine_id, int var_idx, uint32 data_size, uint32 outer_arr_length, uint32 inner_arr_length);
    348 
    349 int
    350 soc_wb_engine_init_tables(int unit, int engine_id, int nof_buffers, int nof_vars);
    351 
    352 int
    353 soc_wb_engine_deinit_tables(int unit, int engine_id);
    354 
    355 int
    356 soc_wb_engine_sync(int unit, int engine_id);
    357 
    358 int 
    359 soc_wb_engine_init_buffer(int unit, int engine_id, int buffer_id, uint8 is_reinit);
    360 
    361 int
    362 soc_wb_engine_var_set(int unit, int engine_id, int var_ndx, uint32 outer_arr_ndx, uint32 inner_arr_ndx, CONST uint8 *var);
    363 
    364 /* sets all array with value */
    365 int
    366 soc_wb_engine_array_set(int unit, int engine_id, int var_ndx, uint8 value);
    367 
    368 /* sets sub-array with src_arr */
    369 int
    370 soc_wb_engine_array_range_set_or_get(int unit, int engine_id, int var_ndx, uint32 arr_ndx, uint32 range_length, uint8 set_get, uint8 *src_arr);
    371 
    372 int
    373 soc_wb_engine_var_get(int unit, int engine_id, int var_ndx, uint32 outer_arr_ndx, uint32 inner_arr_ndx, uint8 *var);
    374 
    375 #endif /*_SOC_WB_ENGINE_H_*/
    376