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

memory.h (21328B)


      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:        memory.h
      8  * Purpose:     Base definitions for memory types
      9  * Requires:    
     10  */
     11 
     12 #ifndef _SOC_MEMORY_H
     13 #define _SOC_MEMORY_H
     14 
     15 #include <soc/defs.h>
     16 #if defined(BCM_ESW_SUPPORT) || defined(BCM_SAND_SUPPORT) || defined(PORTMOD_SUPPORT)
     17 #include <soc/mcm/allenum.h>
     18 #endif
     19 #include <soc/field.h>
     20 #include <soc/macipadr.h>
     21 
     22 #define SOC_MEM_FLAG_READONLY                0x00000001 /* True if table is read-only */
     23 #define SOC_MEM_FLAG_VALID                   0x00000002 /* Some tables don't really exist */
     24 #define SOC_MEM_FLAG_DEBUG                   0x00000004 /* Access requires CMIC DebugMode */
     25 #define SOC_MEM_FLAG_SORTED                  0x00000008 /* Table is kept in sorted order */
     26 #define SOC_MEM_FLAG_CBP                     0x00000010 /* Table is part of CBP */ /* Deprecated */
     27 #define SOC_MEM_FLAG_TCAM_ENCODING_LPT       0x00000010 /* LPT-encoding for TCAM */
     28 #define SOC_MEM_FLAG_CACHABLE                0x00000020 /* Reasonable to cache in S/W */
     29 #define SOC_MEM_FLAG_BISTCBP                 0x00000040 /* CBP has BIST for this memory */ /* Deprecated */
     30 #define SOC_MEM_FLAG_SER_ENTRY_CLEAR         0x00000040 /* Clear entry on error */
     31 #define SOC_MEM_FLAG_BISTEPIC                0x00000080 /* EPIC has BIST for this memory */ /* Deprecated */
     32 #define SOC_MEM_FLAG_SER_CACHE_RESTORE       0x00000080 /* Restore entry from a valid cache on error */
     33 #define SOC_MEM_FLAG_BISTBIT                 0x00003f00 /* Bit pos for BIST reg (0-63) */ /* Deprecated */
     34 #define SOC_MEM_FLAG_BISTBSHFT               8          /* Shift corresponding to BISTBIT */ /* Deprecated */
     35 #define SOC_MEM_FLAG_BISTFFP                 0x00004000 /* Use FFPBIST for this memory */ /* Deprecated */
     36 #define SOC_MEM_FLAG_SER_PARITY_ENABLE_SKIP  0x00004000 /* Skip parity enabling per memory */
     37 #define SOC_MEM_FLAG_SER_ECC_CORRECTABLE     0x00000100 /* Issue read+write to correct error */
     38 #define SOC_MEM_FLAG_SER_SPECIAL             0x00000200 /* Memory needs special correction handling */
     39 #define SOC_MEM_FLAG_SER_WRITE_CACHE_RESTORE 0x00000400 /* Maintain cache for correction purpose even 
     40                                                            for h/w updated memory. Cache updated on writes only */
     41 #define SOC_MEM_FLAG_SER_SRAM_CORRECTION     0x00000800 /* Do SRAM XOR correction */
     42 #define SOC_MEM_FLAG_SER_ENGINE              0x00001000 /* Memory protected by SER engine */
     43 #define SOC_MEM_FLAG_SCHAN_ERROR_RETURN      0x00002000 /* Return error on SCHAN NAK due to SER error */
     44 #define SOC_MEM_FLAG_IS_ARRAY                0x00008000 /* Is this a memory array */
     45 #define SOC_MEM_FLAG_UNIFIED                 0x00010000 /* Only one copy of table */
     46 #define SOC_MEM_FLAG_HASHED                  0x00020000 /* Hashed table */
     47 #define SOC_MEM_FLAG_WORDADR                 0x00040000 /* Requires special addressing */
     48 #define SOC_MEM_FLAG_CAM                     0x00080000 /* Memory is a CAM */
     49 #define SOC_MEM_FLAG_AGGR                    0x00100000 /* Memory is a AGGREGATE */
     50 #define SOC_MEM_FLAG_CMD                     0x00200000 /* Memory allows CMDMEM access */
     51 #define SOC_MEM_FLAG_ACC_TYPE                0x07c00000 /* Access type */
     52 /* #define SOC_MEM_FLAG_MONOLITH                0x04000000 */ /* no block in addressing */ /* Deprecated */
     53 #define SOC_MEM_FLAG_BE                      0x08000000 /* Big endian */
     54 #define SOC_MEM_FLAG_MULTIVIEW               0x10000000 /* Multiview memories */
     55 #define SOC_MEM_FLAG_DYNAMIC                 0x20000000 /* Memory field will be updated by hardware */
     56 #define SOC_MEM_FLAG_EXT_CAM                 0x40000000 /* Memory is a external CAM */
     57 #define SOC_MEM_FLAG_SIGNAL                  0x10000000 /* can be read/ can be write but not compare */
     58 #define SOC_MEM_FLAG_WRITEONLY               0x80000000 /* True if table is write-only */
     59 
     60 
     61 #define SOC_MEM_SER_FLAGS (SOC_MEM_FLAG_SER_ENTRY_CLEAR |\
     62                            SOC_MEM_FLAG_SER_CACHE_RESTORE |\
     63                            SOC_MEM_FLAG_SER_WRITE_CACHE_RESTORE |\
     64                            SOC_MEM_FLAG_SER_ECC_CORRECTABLE |\
     65                            SOC_MEM_FLAG_SER_SPECIAL)
     66 
     67 #define SOC_MEM_SER_CORRECTION_TYPE(unit, mem) \
     68     (SOC_MEM_INFO(unit, mem).flags & SOC_MEM_SER_FLAGS)
     69 
     70 #define SOC_MEM_FLAG_ACC_TYPE_MASK      0x1f
     71 #define SOC_MEM_FLAG_ACC_TYPE_SHIFT     22
     72 #define SOC_MEM_ACC_TYPE(unit, mem)  ((SOC_MEM_INFO(unit, mem).flags >> \
     73                                        SOC_MEM_FLAG_ACC_TYPE_SHIFT) &   \
     74                                       SOC_MEM_FLAG_ACC_TYPE_MASK)
     75 
     76 #define SOC_MEM_BASE_TYPE(unit, mem)  ((SOC_MEM_INFO(unit, mem).base >> \
     77  	 	 	                          23) & 0x7)
     78 
     79 #define SOC_MEM_RETURN_SCHAN_ERR(unit, mem) \
     80     (SOC_MEM_INFO(unit, mem).flags & SOC_MEM_FLAG_SCHAN_ERROR_RETURN)
     81 
     82 #define SOC_MEM_RETURN_SCHAN_ERR_SET(unit, mem, enable) \
     83      if (enable) SOC_MEM_INFO(unit, mem).flags |= SOC_MEM_FLAG_SCHAN_ERROR_RETURN; \
     84      else SOC_MEM_INFO(unit, mem).flags &= ~SOC_MEM_FLAG_SCHAN_ERROR_RETURN
     85 
     86 /* Flags for memory snooping callback register */
     87 #define SOC_MEM_SNOOP_WRITE         0x00000001 /* snooping write operations */
     88 #define SOC_MEM_SNOOP_READ          0x00000002 /* snooping read operations */
     89 #define SOC_MEM_SNOOP_WRITE_COUNT   0x00000004 /* counting all memory write */
     90 #define SOC_MEM_SNOOP_READ_COUNT    0x00000008 /* counting all memory read */
     91 #define SOC_MEM_SNOOP_UNREGISTER    0x10000000 /* unregister callback */
     92 
     93 /* Flags for showing memories that have been read/written */
     94 #define SOC_MEM_WATCH_SHOW_READ         0x00000001 /* show rd memories */
     95 #define SOC_MEM_WATCH_SHOW_WRITE        0x00000002 /* show wr memories */
     96 #define SOC_MEM_WATCH_SHOW_READ_WRITE   0x00000003 /* show rd/wr memories */
     97 
     98 /*
     99  * Declarations for null table entries.
    100  *
    101  * A null table entry is the data normally written to each entry when a
    102  * memory is cleared.  This is generally all zeroes, except for sorted
    103  * tables fields which make up the search key are generally all f's.
    104  */
    105 
    106 extern uint32   _soc_mem_entry_null_zeroes[SOC_MAX_MEM_WORDS];
    107 extern uint32   _soc_mem_entry_null_word0[SOC_MAX_MEM_WORDS];
    108 
    109 #if defined(BCM_PETRA_SUPPORT)
    110 /* DPP: Special entries format for specific tables */
    111 extern uint32		_soc_mem_entry_multicast_null[SOC_MAX_MEM_WORDS];
    112 extern uint32       _soc_mem_entry_jer_mcdb_null[SOC_MAX_MEM_WORDS];
    113 extern uint32		_soc_mem_entry_llr_llvp_null[SOC_MAX_MEM_WORDS];
    114 #endif /* BCM_PETRA_SUPPORT */
    115 
    116 typedef int (*soc_mem_cmp_t)(int, void *, void *);
    117 typedef void (*soc_mem_snoop_cb_t) (int unit, soc_mem_t mem, uint32 flags, 
    118                                     int copyno, int index_min, int index_max, 
    119                                     void *data_buffer, void *user_data);
    120 
    121 
    122 typedef uint8 soc_mem_severe_t;
    123 #define SOC_MEM_SEVERE_MISSING  0
    124 #define SOC_MEM_SEVERE_LOW      1
    125 #define SOC_MEM_SEVERE_MEDIUM   2
    126 #define SOC_MEM_SEVERE_HIGH     3
    127 
    128 
    129 /* 
    130 * 1.	single port memory: 
    131 * a memory that has one input port that can use for write or read. i.e, in each clock the user can access the memory only for one operation (write or read)
    132 * possible access by the user: 
    133 * idle
    134 * write
    135 * read
    136 * 2.	two port memory: 
    137 * a memory that has two ports. one port dedicated for write and one port dedicated for read. i.e, in each clock the user can access the memory for write and read (but not two writes/reads as ports are dedicated for specific operations)
    138 * possible access by the user: 
    139 * idle
    140 * write
    141 * read
    142 * write + read
    143 * 3.	dual port memory:
    144 * a memory that has two ports, each port can use for write and read. i.e, in each clock the user can access for w and r/ w and w/ r and r 
    145 * possible access by the user: 
    146 * idle
    147 * write
    148 * read
    149 * write + write 
    150 * read + read
    151 * write + read
    152 * 4.	xor memory: 
    153 * this memory has one port that dedicated to write operation and two ports that dedicated for read operations.
    154 * The writing in opportunistic and not available in each clock due to the internal implementation. 
    155 * This memory name is due to its internal implementation (it uses xor bank). it has also other specifications.
    156 */
    157 
    158 typedef uint8 soc_mem_type_t;
    159 #define SOC_MEM_TYPE_NORMAL      0
    160 #define SOC_MEM_TYPE_ONE_PORT    1
    161 #define SOC_MEM_TYPE_TWO_PORT    2
    162 #define SOC_MEM_TYPE_XOR         3
    163 
    164 
    165 typedef uint8 soc_mem_ecc_type_t;
    166 #define SOC_MEM_ECC_TYPE_WIDE    0
    167 #define SOC_MEM_ECC_TYPE_NORMAL  1
    168 #define SOC_MEM_ECC_TYPE_IN      2
    169 #define SOC_MEM_ECC_TYPE_OUT     3
    170 #define SOC_MEM_ECC_TYPE_NONE    4
    171 
    172 
    173 /*  Memory impementation type */
    174 typedef uint8 soc_mem_impl_t;
    175 #define SOC_MEM_IMPL_NORMAL      0
    176 #define SOC_MEM_IMPL_FLIPFLOP    1
    177 #define SOC_MEM_IMPL_EXTERNAL    2
    178 
    179 
    180 
    181 #define SOC_MEM_SEVERITY(unit, mem) \
    182     (SOC_MEM_INFO(unit, mem).severity)
    183 
    184 #define SOC_MEM_TYPE(unit, mem) \
    185     (SOC_MEM_INFO(unit, mem).type)
    186 
    187 
    188 #define SOC_MEM_ECC_TYPE(unit, mem) \
    189     (SOC_MEM_INFO(unit, mem).ecc_type)
    190 
    191 
    192 /* additional information for memories which are arrays */
    193 /* To be used if in soc_mem_info_t, the SOC_MEM_FLAG_IS_ARRAY bit is set */
    194 typedef struct soc_mem_array_info_t {
    195     unsigned int numels;       /* number of memory elements in the array. */
    196     uint32   element_skip; /* how many bytes to skip between array elements */
    197     uint32   first_array_index;
    198 } soc_mem_array_info_t;
    199 
    200 
    201 /* New unified soc memories structure */
    202 typedef struct soc_mem_info_s {
    203     uint32  flags;  /* Logical OR of SOC_MEM_FLAG_xxx */
    204     soc_mem_cmp_t   cmp_fn; /* Function to compare two entries */
    205     void    *null_entry;    /* Value when table entry is empty */
    206     int     index_min;  /* Minimum table index */
    207     int     index_max;  /* Maximum table index */
    208     uint16  minblock;   /* first block instance */
    209     uint16  maxblock;   /* last block instance */
    210     uint32  blocks;     /* bitmask of valid blocks */
    211     uint32  blocks_hi;  /* bitmask 32:64 of valid blocks */
    212     uint32  base;       /* Includes region offset */
    213     uint32              gran;           /* Phys addr granularity by index */
    214     uint16  bytes;
    215     uint16  nFields;
    216     soc_field_info_t    *fields;
    217     char                **views;
    218     int                 *views_num;
    219     soc_mem_snoop_cb_t  snoop_cb; /* User call back for snooping memory */
    220     void                *snoop_user_data; /* User data for callback function */
    221     uint32              snoop_flags;    /* Snooping flags SOC_MEM_SNOOP_* */
    222     soc_mem_severe_t  severity; 
    223     soc_mem_type_t  type; 
    224     soc_mem_ecc_type_t  ecc_type; 
    225     soc_mem_impl_t      implementation; 
    226     uint32              cmic_mor_clks; /*  pending clock value*/
    227     uint32              access_latency_mode; /* accessibility in latency mode */
    228 } soc_mem_info_t;
    229 
    230 /* soc format structure */
    231 
    232 typedef struct soc_format_info_s {
    233     uint16           nFields;
    234     soc_field_info_t *fields;
    235     uint16           bits; /* width of the format in number of bits */
    236     uint32           flags;
    237 } soc_format_info_t;
    238 
    239 typedef struct soc_dop_s {
    240     uint32             dop_id;
    241     uint16             n_data_phases;
    242     soc_format_t       dop_fmt;
    243 } soc_dop_t;
    244 
    245 #define SOC_MEM_IP6_FULL_ADDR       0   /* IPv6 address all 128 bits  */
    246 #define SOC_MEM_IP6_UPPER_ONLY      1   /* IPv6 address upper 64 bits */
    247 #define SOC_MEM_IP6_LOWER_ONLY      2   /* IPv6 address lower 64 bits */
    248 #define SOC_MEM_IP6_UPPER_96BIT     4   /* IPv6 address upper 96 bits */
    249 #define SOC_MEM_IP6_BITS_119_96     5   /* IPv6 address bits [119:96] */
    250 #define SOC_MEM_IP6_LOWER_96BIT     6   /* IPv6 address lower 96 bits */
    251 #define SOC_MEM_IP6_BITS_31_0       7   /* IPv6 address bits [31:0]   */
    252 #define SOC_MEM_IP6_BITS_63_32      8   /* IPv6 address bits [63:32]   */
    253 
    254 #define SOC_MEM_MAC_FULL_ADDR       0   /* Mac address all 48 bits  */
    255 #define SOC_MEM_MAC_UPPER_ONLY      1   /* Mac address upper 24 bits */
    256 #define SOC_MEM_MAC_LOWER_ONLY      2   /* Mac address lower 24 bits */
    257 
    258 typedef enum soc_mem_base_to_wide_conv_type_e {
    259     TYPE_1_TO_TYPE_2,
    260     TYPE_1_TO_TYPE_4,
    261     TYPE_2_TO_TYPE_4,
    262     TYPE_2_TO_TYPE_1,
    263     TYPE_4_TO_TYPE_1,
    264     TYPE_4_TO_TYPE_2
    265 } soc_mem_base_to_wide_conv_type_t;
    266 
    267 uint32 soc_mem_addr(int unit, soc_mem_t mem, unsigned memory_index, int block, int index);
    268 uint32 soc_mem_addr_get(int unit, soc_mem_t mem, unsigned memory_index, soc_block_t block, 
    269                         int index, uint8 *acc_type);
    270 soc_mem_t soc_addr_to_mem(int unit, uint32 address, uint32 *mem_block);
    271 soc_mem_t soc_addr_to_mem_extended(int unit, uint32 block, int acc_type, uint32 address);
    272 int soc_mem_addr_to_array_element_and_index(int unit, soc_mem_t mem, uint32 address, unsigned* array_index, int* index);
    273 
    274 uint32 *soc_mem_field_get(int unit, soc_mem_t mem, const uint32 *entbuf,
    275                           soc_field_t field, uint32 *fldbuf);
    276 void soc_mem_field_set(int unit, soc_mem_t mem, uint32 *entbuf,
    277                        soc_field_t field, uint32 *fldbuf);
    278 void soc_mem_field_width_fit_set(int unit, soc_mem_t mem, uint32 *entbuf,
    279                                  soc_field_t field, uint32 *fldbuf);
    280 
    281 extern int soc_mem_field_pbmp_fit(int unit, soc_mem_t mem, 
    282                                   soc_field_t field, uint32 *value);
    283 uint32 soc_mem_field32_get(int unit, soc_mem_t mem, const void *entbuf,
    284                            soc_field_t field);
    285 uint32
    286 soc_mem_field32_get_def(int         unit,
    287                         soc_mem_t   mem,
    288                         const void  *entbuf,
    289                         soc_field_t field,
    290                         uint32      def
    291                         );
    292 void soc_mem_field32_set(int unit, soc_mem_t mem, void *entbuf,
    293                          soc_field_t field, uint32 value);
    294 void soc_mem_field32_force(int unit, soc_mem_t mem, void *entbuf,
    295                            soc_field_t field, uint32 value);
    296 uint32 *soc_mem_mask_field_get(int unit, soc_mem_t mem, const uint32 *entbuf,
    297                                soc_field_t field, uint32 *fldbuf);
    298 void soc_mem_mask_field_set(int unit, soc_mem_t mem, uint32 *entbuf,
    299                             soc_field_t field, uint32 *fldbuf);
    300 uint32 soc_mem_mask_field32_get(int unit, soc_mem_t mem, const void *entbuf,
    301                                 soc_field_t field);
    302 void soc_mem_mask_field32_set(int unit, soc_mem_t mem, void *entbuf,
    303                               soc_field_t field, uint32 value);
    304 void soc_mem_mac_addr_set(int unit, soc_mem_t mem, void *entry,
    305                           soc_field_t field, const sal_mac_addr_t mac);
    306 void soc_mem_mac_addr_get(int unit, soc_mem_t mem, const void *entry,
    307                           soc_field_t field, sal_mac_addr_t mac);
    308 void soc_mem_ip6_addr_set(int unit, soc_mem_t mem, void *entry, 
    309                           soc_field_t field, const ip6_addr_t ip6, int flags);
    310 void soc_mem_ip6_addr_get(int unit, soc_mem_t mem, const void *entry, 
    311                           soc_field_t field, ip6_addr_t ip6, int flags);
    312 void soc_mem_ip6_addr_mask_set(int unit, soc_mem_t mem, void *entry, 
    313                                soc_field_t field, const ip6_addr_t ip6,
    314                                int flags);
    315 void soc_mem_ip6_addr_mask_get(int unit, soc_mem_t mem, const void *entry, 
    316                                soc_field_t field, ip6_addr_t ip6, int flags);
    317 void soc_mem_pbmp_field_set(int unit, soc_mem_t mem, void *entbuf,
    318                             soc_field_t field, soc_pbmp_t *pbmp);
    319 void soc_mem_pbmp_field_get(int unit, soc_mem_t mem, const void *entbuf,
    320                             soc_field_t field, soc_pbmp_t *pbmp);
    321 extern void soc_mem_field64_set(int unit, soc_mem_t mem, void *entry,
    322                                 soc_field_t field, const uint64 val64);
    323 extern void soc_mem_field64_get(int unit, soc_mem_t mem, void *entry,
    324                                 soc_field_t field, uint64 *val64);
    325 extern void soc_mem_datamask_get(int unit, soc_mem_t mem, uint32 *buf);
    326 extern void soc_mem_datamask_rw_get(int unit, soc_mem_t mem, uint32 *buf);
    327 
    328 extern void soc_mem_tcammask_get(int unit, soc_mem_t mem, uint32 *buf);
    329 extern void soc_mem_eccmask_get(int unit, soc_mem_t mem, uint32 *buf);
    330 extern void soc_mem_forcedata_get(int unit, soc_mem_t mem, uint32 *maskbuf,
    331                                   uint32 *databuf);
    332 
    333 /* These functions do not require a unit number to manipulate mem vars */
    334 uint32 *soc_meminfo_field_get(soc_mem_t mem, soc_mem_info_t *meminfo,
    335                               const uint32 *entbuf, soc_field_t field,
    336                               uint32 *fldbuf, uint32 fldbuf_size);
    337 void soc_meminfo_mac_addr_set(soc_mem_t mem, soc_mem_info_t *meminfo,
    338                               void *entry, soc_field_t field,
    339                               const sal_mac_addr_t mac);
    340 void soc_meminfo_field_set(soc_mem_t mem, soc_mem_info_t *meminfo,
    341                            uint32 *entbuf, soc_field_t field, uint32 *fldbuf);
    342 void soc_meminfo_field32_force(soc_mem_t mem, soc_mem_info_t *meminfo,
    343                                void *entry, soc_field_t field, uint32 value);
    344 void soc_mem_mac_address_set(int unit, soc_mem_t mem, void *entry,
    345                         soc_field_t field, const sal_mac_addr_t mac, int flags);
    346 void soc_mem_mac_address_get(int unit, soc_mem_t mem, const void *entry,
    347                         soc_field_t field, sal_mac_addr_t mac, int flags);
    348 
    349 void soc_mem_base_to_wide_entry_conv(int unit, soc_mem_t dest_mem, soc_mem_t src_mem, 
    350                                      uint32 *dest, uint32 *src[4], uint8 conv_type);
    351 
    352 /* These functions accelerate bulk memory operations to a single table */
    353 extern soc_field_info_t *soc_mem_fieldinfo_get(int unit, soc_mem_t mem,
    354                                                soc_field_t field);
    355 extern uint32 *soc_meminfo_fieldinfo_field_get(const uint32 *entbuf,
    356                                                soc_mem_info_t *meminfo,
    357                                                soc_field_info_t *fieldinfo,
    358                                                uint32 *fldbuf);
    359 extern uint32 soc_meminfo_fieldinfo_field32_get(soc_mem_info_t *meminfo,
    360                                                 void *entry,
    361                                                 soc_field_info_t *fieldinfo);
    362 extern void soc_meminfo_fieldinfo_field64_get(soc_mem_info_t *meminfo,
    363                                               void *entry,
    364                                               soc_field_info_t *fieldinfo,
    365                                               uint64 *val64);
    366 
    367 extern void soc_meminfo_fieldinfo_field_set(uint32 *entbuf,
    368                                                soc_mem_info_t *meminfo,
    369                                                soc_field_info_t *fieldinfo,
    370                                                uint32 *fldbuf);
    371 
    372 extern void soc_meminfo_fieldinfo_field32_set(soc_mem_info_t *meminfo,
    373                                                 void *entry,
    374                                                 soc_field_info_t *fieldinfo, 
    375                                                 uint32 value);
    376 
    377 extern void soc_meminfo_fieldinfo_field64_set(soc_mem_info_t *meminfo,
    378                                                 void *entry,
    379                                                 soc_field_info_t *fieldinfo, 
    380                                                 uint64 val64);
    381 
    382 /* Compacted memory access functions for bulk operations */
    383 typedef struct soc_memacc_s {
    384     soc_mem_info_t *minfo;
    385     soc_field_info_t *finfo;
    386 } soc_memacc_t;
    387 
    388 extern int soc_memacc_init(int unit, soc_mem_t mem, soc_field_t fld,
    389                            soc_memacc_t *memacc);
    390 
    391 extern uint32 *soc_memacc_field_get(soc_memacc_t *memacc,
    392                                     const uint32 *entbuf,
    393                                     uint32 *fldbuf);
    394 extern uint32 soc_memacc_field32_get(soc_memacc_t *memacc,
    395                                      void *entry);
    396 extern void soc_memacc_field64_get(soc_memacc_t *memacc,
    397                                    void *entry,
    398                                    uint64 *val64);
    399 extern void soc_memacc_mac_addr_get(soc_memacc_t *memacc, void *entry,
    400                                     sal_mac_addr_t mac);
    401 
    402 extern void soc_memacc_field_set(soc_memacc_t *memacc,
    403                                     uint32 *entbuf,
    404                                     uint32 *fldbuf);
    405 extern void soc_memacc_field32_set(soc_memacc_t *memacc,
    406                                      void *entry, uint32 value);
    407 extern void soc_memacc_field64_set(soc_memacc_t *memacc,
    408                                    void *entry,
    409                                    uint64 val64);
    410 extern void soc_memacc_mac_addr_set(soc_memacc_t *memacc, void *entry,
    411                                     const sal_mac_addr_t mac);
    412 
    413 #define SOC_MEMACC_FIELD_LENGTH(_memacc_) ((_memacc_)->finfo->len)
    414 #define SOC_MEMACC_VALID(_memacc_) \
    415         ((NULL != (_memacc_)->minfo) && (NULL != (_memacc_)->finfo))
    416 
    417 #define SOC_MEMACC_INVALID_SET(_memacc_) \
    418         ((_memacc_)->minfo) = NULL; \
    419         ((_memacc_)->finfo) = NULL
    420 
    421 /* Routines to register/unregister user call back routine for memory snooping */
    422 void soc_mem_snoop_register(int unit, soc_mem_t mem, uint32 flags,
    423                            soc_mem_snoop_cb_t snoop_cb, void *user_data);
    424 void soc_mem_snoop_unregister(int unit, soc_mem_t mem, uint32 flags);
    425 
    426 #endif	/* !_SOC_MEMORY_H */