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 */