17532SSean.Ye@Sun.COM /* 27532SSean.Ye@Sun.COM * CDDL HEADER START 37532SSean.Ye@Sun.COM * 47532SSean.Ye@Sun.COM * The contents of this file are subject to the terms of the 57532SSean.Ye@Sun.COM * Common Development and Distribution License (the "License"). 67532SSean.Ye@Sun.COM * You may not use this file except in compliance with the License. 77532SSean.Ye@Sun.COM * 87532SSean.Ye@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97532SSean.Ye@Sun.COM * or http://www.opensolaris.org/os/licensing. 107532SSean.Ye@Sun.COM * See the License for the specific language governing permissions 117532SSean.Ye@Sun.COM * and limitations under the License. 127532SSean.Ye@Sun.COM * 137532SSean.Ye@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 147532SSean.Ye@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157532SSean.Ye@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 167532SSean.Ye@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 177532SSean.Ye@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 187532SSean.Ye@Sun.COM * 197532SSean.Ye@Sun.COM * CDDL HEADER END 207532SSean.Ye@Sun.COM */ 217532SSean.Ye@Sun.COM 227532SSean.Ye@Sun.COM /* 23*10049SVuong.Nguyen@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 247532SSean.Ye@Sun.COM * Use is subject to license terms. 257532SSean.Ye@Sun.COM */ 267532SSean.Ye@Sun.COM 277532SSean.Ye@Sun.COM #ifndef _NB_LOG_H 287532SSean.Ye@Sun.COM #define _NB_LOG_H 297532SSean.Ye@Sun.COM 307532SSean.Ye@Sun.COM #ifdef __cplusplus 317532SSean.Ye@Sun.COM extern "C" { 327532SSean.Ye@Sun.COM #endif 337532SSean.Ye@Sun.COM 347532SSean.Ye@Sun.COM #include <sys/cpu_module.h> 357532SSean.Ye@Sun.COM #include "nb5000.h" 367532SSean.Ye@Sun.COM 377532SSean.Ye@Sun.COM #define NB_MAX_ERRORS 4 387532SSean.Ye@Sun.COM 397532SSean.Ye@Sun.COM /* North Bridge front side bus error registers */ 407532SSean.Ye@Sun.COM 417532SSean.Ye@Sun.COM typedef struct nb_fsb_regs { 427532SSean.Ye@Sun.COM uint8_t fsb; /* cpu slot */ 437532SSean.Ye@Sun.COM uint8_t ferr_fat_fsb; 447532SSean.Ye@Sun.COM uint8_t nerr_fat_fsb; 457532SSean.Ye@Sun.COM uint8_t ferr_nf_fsb; 467532SSean.Ye@Sun.COM uint8_t nerr_nf_fsb; 477532SSean.Ye@Sun.COM uint64_t nrecfsb_addr; 487532SSean.Ye@Sun.COM uint32_t nrecfsb; 497532SSean.Ye@Sun.COM uint32_t recfsb; 507532SSean.Ye@Sun.COM } nb_fsb_regs_t; 517532SSean.Ye@Sun.COM 527532SSean.Ye@Sun.COM /* PCI express ESI (South Bridge) error registers */ 537532SSean.Ye@Sun.COM 547532SSean.Ye@Sun.COM typedef struct nb_pex_regs { 557532SSean.Ye@Sun.COM uint8_t pex; /* pci express slot */ 567532SSean.Ye@Sun.COM uint32_t pex_fat_ferr; 577532SSean.Ye@Sun.COM uint32_t pex_fat_nerr; 587532SSean.Ye@Sun.COM uint32_t pex_nf_corr_ferr; 597532SSean.Ye@Sun.COM uint32_t pex_nf_corr_nerr; 607532SSean.Ye@Sun.COM uint32_t uncerrsev; /* uncorrectable error severity */ 617532SSean.Ye@Sun.COM uint32_t rperrsts; /* root error status */ 627532SSean.Ye@Sun.COM uint32_t rperrsid; /* error source identification */ 637532SSean.Ye@Sun.COM uint32_t uncerrsts; /* uncorrectable error status */ 647532SSean.Ye@Sun.COM uint32_t aerrcapctrl; /* advanced error capabilities and control */ 657532SSean.Ye@Sun.COM uint32_t corerrsts; /* correctable error status */ 667532SSean.Ye@Sun.COM uint16_t pexdevsts; /* pci express device status */ 677532SSean.Ye@Sun.COM } nb_pex_regs_t; 687532SSean.Ye@Sun.COM 697532SSean.Ye@Sun.COM /* North Bridge memory controller hub internal error registers */ 707532SSean.Ye@Sun.COM 717532SSean.Ye@Sun.COM typedef struct nb_int { 727532SSean.Ye@Sun.COM uint16_t ferr_fat_int; /* first fatal error */ 737532SSean.Ye@Sun.COM uint16_t ferr_nf_int; /* first non-fatal error */ 747532SSean.Ye@Sun.COM uint16_t nerr_fat_int; /* next fatal error */ 757532SSean.Ye@Sun.COM uint16_t nerr_nf_int; /* next non-fatal error */ 767532SSean.Ye@Sun.COM uint32_t nrecint; /* non recoverable error log */ 777532SSean.Ye@Sun.COM uint32_t recint; /* recoverable error log */ 787532SSean.Ye@Sun.COM uint64_t nrecsf; /* non recoverable control information */ 797532SSean.Ye@Sun.COM uint64_t recsf; /* recoverable control information */ 807532SSean.Ye@Sun.COM } nb_int_t; 817532SSean.Ye@Sun.COM 827532SSean.Ye@Sun.COM /* memory errors */ 837532SSean.Ye@Sun.COM 847532SSean.Ye@Sun.COM typedef struct nb_fat_fbd { 857532SSean.Ye@Sun.COM uint32_t ferr_fat_fbd; /* fb-dimm first fatal error */ 867532SSean.Ye@Sun.COM uint32_t nerr_fat_fbd; /* fb-dimm next fatal error */ 877532SSean.Ye@Sun.COM uint32_t nrecmema; /* non recoverable memory error log */ 887532SSean.Ye@Sun.COM uint32_t nrecmemb; /* non recoverable memory error log */ 897532SSean.Ye@Sun.COM uint32_t nrecfglog; /* non recoverable dimm configuration */ 907532SSean.Ye@Sun.COM uint32_t nrecfbda; /* non recoverable dimm log A */ 917532SSean.Ye@Sun.COM uint32_t nrecfbdb; /* non recoverable dimm log B */ 927532SSean.Ye@Sun.COM uint32_t nrecfbdc; /* non recoverable dimm log C */ 937532SSean.Ye@Sun.COM uint32_t nrecfbdd; /* non recoverable dimm log D */ 947532SSean.Ye@Sun.COM uint32_t nrecfbde; /* non recoverable dimm log E */ 957532SSean.Ye@Sun.COM uint32_t nrecfbdf; /* non recoverable dimm log F */ 967532SSean.Ye@Sun.COM uint32_t spcpc; /* spare copy control */ 977532SSean.Ye@Sun.COM uint8_t spcps; /* spare copy status */ 987532SSean.Ye@Sun.COM uint32_t uerrcnt; /* uncorrectable error count */ 997532SSean.Ye@Sun.COM uint32_t uerrcnt_last; /* saved copy of uncorrectable error count */ 1007532SSean.Ye@Sun.COM uint32_t badrama; /* bad dram marker A */ 1017532SSean.Ye@Sun.COM uint16_t badramb; /* bad dram marker B */ 1027532SSean.Ye@Sun.COM uint32_t badcnt; /* bad dram counter */ 1037532SSean.Ye@Sun.COM } nb_fat_fbd_t; 1047532SSean.Ye@Sun.COM 1057532SSean.Ye@Sun.COM typedef struct nb_nf_fbd { 1067532SSean.Ye@Sun.COM uint32_t ferr_nf_fbd; /* fb-dimm first non-fatal error */ 1077532SSean.Ye@Sun.COM uint32_t nerr_nf_fbd; /* fb-dimm next non-fatal error */ 1087532SSean.Ye@Sun.COM uint32_t redmemb; /* recoverable dimm data error log */ 1097532SSean.Ye@Sun.COM uint32_t recmema; /* recoverable memory error log A */ 1107532SSean.Ye@Sun.COM uint32_t recmemb; /* recoverable memory error log B */ 1117532SSean.Ye@Sun.COM uint32_t recfglog; /* recoverable dimm configuration */ 1127532SSean.Ye@Sun.COM uint32_t recfbda; /* recoverable dimm log A */ 1137532SSean.Ye@Sun.COM uint32_t recfbdb; /* recoverable dimm log B */ 1147532SSean.Ye@Sun.COM uint32_t recfbdc; /* recoverable dimm log C */ 1157532SSean.Ye@Sun.COM uint32_t recfbdd; /* recoverable dimm log D */ 1167532SSean.Ye@Sun.COM uint32_t recfbde; /* recoverable dimm log E */ 1177532SSean.Ye@Sun.COM uint32_t recfbdf; /* recoverable dimm log F */ 1187532SSean.Ye@Sun.COM uint32_t spcpc; /* spare copy control */ 1197532SSean.Ye@Sun.COM uint8_t spcps; /* spare copy status */ 1207532SSean.Ye@Sun.COM uint32_t cerrcnta; /* correctable error count A */ 1217532SSean.Ye@Sun.COM uint32_t cerrcntb; /* correctable error count B */ 1227532SSean.Ye@Sun.COM uint32_t cerrcntc; /* correctable error count C */ 1237532SSean.Ye@Sun.COM uint32_t cerrcntd; /* correctable error count D */ 1247532SSean.Ye@Sun.COM uint32_t cerrcnta_last; /* saved copy of correctable error count A */ 1257532SSean.Ye@Sun.COM uint32_t cerrcntb_last; /* saved copy of correctable error count B */ 1267532SSean.Ye@Sun.COM uint32_t cerrcntc_last; /* saved copy of correctable error count C */ 1277532SSean.Ye@Sun.COM uint32_t cerrcntd_last; /* saved copy of correctable error count D */ 1287532SSean.Ye@Sun.COM uint32_t badrama; /* bad dram marker A */ 1297532SSean.Ye@Sun.COM uint16_t badramb; /* bad dram marker B */ 1307532SSean.Ye@Sun.COM uint32_t badcnt; /* bad dram counter */ 1317532SSean.Ye@Sun.COM } nb_nf_fbd_t; 1327532SSean.Ye@Sun.COM 133*10049SVuong.Nguyen@Sun.COM typedef struct nb_nf_mem { 134*10049SVuong.Nguyen@Sun.COM /* Memory registers */ 135*10049SVuong.Nguyen@Sun.COM uint32_t ferr_nf_mem; /* MC first non-fatal error */ 136*10049SVuong.Nguyen@Sun.COM uint32_t nerr_nf_mem; /* MC next non-fatal error */ 137*10049SVuong.Nguyen@Sun.COM uint32_t nrecmema; /* non-recoverable memory error log A */ 138*10049SVuong.Nguyen@Sun.COM uint32_t nrecmemb; /* non-recoverable memory error log B */ 139*10049SVuong.Nguyen@Sun.COM uint32_t redmema; /* recoverable memory data error log A */ 140*10049SVuong.Nguyen@Sun.COM uint32_t redmemb; /* recoverable memory data error log B */ 141*10049SVuong.Nguyen@Sun.COM uint32_t recmema; /* recoverable memory error log A */ 142*10049SVuong.Nguyen@Sun.COM uint32_t recmemb; /* recoverable memory error log B */ 143*10049SVuong.Nguyen@Sun.COM 144*10049SVuong.Nguyen@Sun.COM /* Spare rank */ 145*10049SVuong.Nguyen@Sun.COM uint32_t spcpc; /* spare copy control */ 146*10049SVuong.Nguyen@Sun.COM uint8_t spcps; /* spare copy status */ 147*10049SVuong.Nguyen@Sun.COM 148*10049SVuong.Nguyen@Sun.COM /* RAS */ 149*10049SVuong.Nguyen@Sun.COM uint32_t cerrcnt; /* correctable error count A */ 150*10049SVuong.Nguyen@Sun.COM uint32_t cerrcnt_ext; /* correctable error count B */ 151*10049SVuong.Nguyen@Sun.COM uint32_t cerrcnt_last; /* correctable error count A */ 152*10049SVuong.Nguyen@Sun.COM uint32_t cerrcnt_ext_last; /* correctable error count B */ 153*10049SVuong.Nguyen@Sun.COM uint32_t badram; /* bad dram marker */ 154*10049SVuong.Nguyen@Sun.COM uint32_t badcnt; /* bad dram counter */ 155*10049SVuong.Nguyen@Sun.COM uint32_t validlog; /* valid log markers */ 156*10049SVuong.Nguyen@Sun.COM } nb_nf_mem_t; 157*10049SVuong.Nguyen@Sun.COM 1587532SSean.Ye@Sun.COM typedef struct nb_dma { 1597532SSean.Ye@Sun.COM uint16_t pcists; 1607532SSean.Ye@Sun.COM uint16_t pexdevsts; 1617532SSean.Ye@Sun.COM } nb_dma_t; 1627532SSean.Ye@Sun.COM 1637532SSean.Ye@Sun.COM typedef struct nb_thr { 1647532SSean.Ye@Sun.COM uint8_t ferr_fat_thr; 1657532SSean.Ye@Sun.COM uint8_t ferr_nf_thr; 1667532SSean.Ye@Sun.COM uint8_t nerr_fat_thr; 1677532SSean.Ye@Sun.COM uint8_t nerr_nf_thr; 1687532SSean.Ye@Sun.COM uint8_t ctsts; 1697532SSean.Ye@Sun.COM uint16_t thrtsts; 1707532SSean.Ye@Sun.COM } nb_thr_t; 1717532SSean.Ye@Sun.COM 1727532SSean.Ye@Sun.COM typedef struct nb_regs { 1737532SSean.Ye@Sun.COM int flag; 1747532SSean.Ye@Sun.COM uint32_t chipset; 1757532SSean.Ye@Sun.COM uint64_t ferr; 1767532SSean.Ye@Sun.COM uint32_t nerr; 1777532SSean.Ye@Sun.COM union { 1787532SSean.Ye@Sun.COM nb_fsb_regs_t fsb_regs; 1797532SSean.Ye@Sun.COM nb_pex_regs_t pex_regs; 1807532SSean.Ye@Sun.COM nb_int_t int_regs; 1817532SSean.Ye@Sun.COM nb_fat_fbd_t fat_fbd_regs; 1827532SSean.Ye@Sun.COM nb_nf_fbd_t nf_fbd_regs; 183*10049SVuong.Nguyen@Sun.COM nb_nf_mem_t nf_mem_regs; 1847532SSean.Ye@Sun.COM nb_dma_t dma_regs; 1857532SSean.Ye@Sun.COM nb_thr_t thr_regs; 1867532SSean.Ye@Sun.COM } nb; 1877532SSean.Ye@Sun.COM } nb_regs_t; 1887532SSean.Ye@Sun.COM 1897532SSean.Ye@Sun.COM #define NB_REG_LOG_FREE 0 1907532SSean.Ye@Sun.COM #define NB_REG_LOG_FSB 1 1917532SSean.Ye@Sun.COM #define NB_REG_LOG_PEX 2 1927532SSean.Ye@Sun.COM #define NB_REG_LOG_INT 3 1937532SSean.Ye@Sun.COM #define NB_REG_LOG_FAT_FBD 4 1947532SSean.Ye@Sun.COM #define NB_REG_LOG_NF_FBD 5 1957532SSean.Ye@Sun.COM #define NB_REG_LOG_DMA 6 1967532SSean.Ye@Sun.COM #define NB_REG_LOG_THR 7 197*10049SVuong.Nguyen@Sun.COM #define NB_REG_LOG_NF_MEM 8 1987532SSean.Ye@Sun.COM 1997532SSean.Ye@Sun.COM typedef struct nb_logout { 2007532SSean.Ye@Sun.COM uint64_t acl_timestamp; 2017532SSean.Ye@Sun.COM char *type; 2027532SSean.Ye@Sun.COM nb_regs_t nb_regs; 2037532SSean.Ye@Sun.COM } nb_logout_t; 2047532SSean.Ye@Sun.COM 2057532SSean.Ye@Sun.COM typedef struct nb_mem_scatchpad { 2067532SSean.Ye@Sun.COM int intel_error_list; /* error number in Chipset Error List */ 2077532SSean.Ye@Sun.COM int branch; 2087532SSean.Ye@Sun.COM int channel; 2097532SSean.Ye@Sun.COM int rank; 2107532SSean.Ye@Sun.COM int dimm; 2117532SSean.Ye@Sun.COM int bank; 2127532SSean.Ye@Sun.COM int cas; 2137532SSean.Ye@Sun.COM int ras; 2147532SSean.Ye@Sun.COM uint64_t offset; 2157532SSean.Ye@Sun.COM uint64_t pa; 2167532SSean.Ye@Sun.COM } nb_mem_scatchpad_t; 2177532SSean.Ye@Sun.COM 2187532SSean.Ye@Sun.COM typedef union nb_scatchpad { 2197532SSean.Ye@Sun.COM nb_mem_scatchpad_t ms; 2207532SSean.Ye@Sun.COM int intel_error_list; /* error number in Chipset Error List */ 2217532SSean.Ye@Sun.COM } nb_scatchpad_t; 2227532SSean.Ye@Sun.COM 2237532SSean.Ye@Sun.COM typedef struct nb_dimm { 2247532SSean.Ye@Sun.COM uint64_t dimm_size; 2257532SSean.Ye@Sun.COM uint8_t mtr_present; 226*10049SVuong.Nguyen@Sun.COM uint8_t start_rank; /* id of the 1st rank */ 227*10049SVuong.Nguyen@Sun.COM uint8_t nranks; /* number of ranks */ 2287532SSean.Ye@Sun.COM uint8_t nbanks; 2297532SSean.Ye@Sun.COM uint8_t ncolumn; 2307532SSean.Ye@Sun.COM uint8_t nrow; 2317532SSean.Ye@Sun.COM uint8_t width; 2327532SSean.Ye@Sun.COM uint8_t manufacture_location; 2337532SSean.Ye@Sun.COM uint8_t manufacture_week; 2347532SSean.Ye@Sun.COM uint8_t manufacture_year; /* years from 2000 */ 2357532SSean.Ye@Sun.COM uint16_t manufacture_id; 2367532SSean.Ye@Sun.COM uint32_t serial_number; 2377532SSean.Ye@Sun.COM char part_number[16]; 2387532SSean.Ye@Sun.COM char revision[2]; 2397532SSean.Ye@Sun.COM char label[64]; 2407532SSean.Ye@Sun.COM } nb_dimm_t; 2417532SSean.Ye@Sun.COM 2427532SSean.Ye@Sun.COM typedef struct bank_select { 2437532SSean.Ye@Sun.COM uint64_t base; 2447532SSean.Ye@Sun.COM uint64_t limit; 2457532SSean.Ye@Sun.COM uint8_t way[2]; 2467532SSean.Ye@Sun.COM } bank_select_t; 2477532SSean.Ye@Sun.COM 2487532SSean.Ye@Sun.COM typedef struct rank_select { 2497532SSean.Ye@Sun.COM uint64_t base; 2507532SSean.Ye@Sun.COM uint64_t limit; 2517532SSean.Ye@Sun.COM uint32_t hole_base; 2527532SSean.Ye@Sun.COM uint32_t hole_size; 2537532SSean.Ye@Sun.COM uint8_t rank[4]; 2547532SSean.Ye@Sun.COM uint8_t interleave; 2557532SSean.Ye@Sun.COM uint8_t branch_interleave; 2567532SSean.Ye@Sun.COM } rank_select_t; 2577532SSean.Ye@Sun.COM 2587532SSean.Ye@Sun.COM enum nb_memory_mode { NB_MEMORY_SINGLE_CHANNEL, NB_MEMORY_NORMAL, 2597532SSean.Ye@Sun.COM NB_MEMORY_SPARE_RANK, NB_MEMORY_MIRROR }; 2607532SSean.Ye@Sun.COM 2617532SSean.Ye@Sun.COM extern int nb_5000_memory_controller; 2627532SSean.Ye@Sun.COM extern int nb_number_memory_controllers; 263*10049SVuong.Nguyen@Sun.COM extern int nb_channels_per_branch; 2647532SSean.Ye@Sun.COM extern int nb_dimms_per_channel; 2657532SSean.Ye@Sun.COM 2667532SSean.Ye@Sun.COM extern nb_dimm_t **nb_dimms; 2677532SSean.Ye@Sun.COM extern uint32_t nb_chipset; 2687532SSean.Ye@Sun.COM 2697532SSean.Ye@Sun.COM extern int nb_init(void); 2707532SSean.Ye@Sun.COM extern int nb_dev_init(void); 2717532SSean.Ye@Sun.COM extern void nb_dev_reinit(void); 2727532SSean.Ye@Sun.COM extern void nb_unload(void); 2737532SSean.Ye@Sun.COM extern void nb_dev_unload(void); 2747532SSean.Ye@Sun.COM extern uint32_t top_of_low_memory; 2757532SSean.Ye@Sun.COM extern bank_select_t nb_banks[NB_MAX_MEM_BRANCH_SELECT]; 2767532SSean.Ye@Sun.COM extern rank_select_t nb_ranks[NB_5000_MAX_MEM_CONTROLLERS] 2777532SSean.Ye@Sun.COM [NB_MAX_MEM_RANK_SELECT]; 2787532SSean.Ye@Sun.COM extern uint8_t spare_rank[NB_5000_MAX_MEM_CONTROLLERS]; 2797532SSean.Ye@Sun.COM extern enum nb_memory_mode nb_mode; 280*10049SVuong.Nguyen@Sun.COM extern int nb_rank2dimm(int, int); 2817532SSean.Ye@Sun.COM 2827532SSean.Ye@Sun.COM extern int inb_mc_register(cmi_hdl_t, void *, void *, void *); 2837532SSean.Ye@Sun.COM extern void nb_scrubber_enable(void); 2847532SSean.Ye@Sun.COM extern void nb_error_trap(cmi_hdl_t, boolean_t, boolean_t); 2857532SSean.Ye@Sun.COM 2867532SSean.Ye@Sun.COM extern void nb_pci_cfg_setup(dev_info_t *); 2877532SSean.Ye@Sun.COM extern void nb_pci_cfg_free(void); 2887532SSean.Ye@Sun.COM 2897532SSean.Ye@Sun.COM extern void *ras_regs; 2907532SSean.Ye@Sun.COM 2917532SSean.Ye@Sun.COM extern uint8_t nb_pci_getb(int, int, int, int, int *); 2927532SSean.Ye@Sun.COM extern uint16_t nb_pci_getw(int, int, int, int, int *); 2937532SSean.Ye@Sun.COM extern uint32_t nb_pci_getl(int, int, int, int, int *); 2947532SSean.Ye@Sun.COM extern void nb_pci_putb(int, int, int, int, uint8_t); 2957532SSean.Ye@Sun.COM extern void nb_pci_putw(int, int, int, int, uint16_t); 2967532SSean.Ye@Sun.COM extern void nb_pci_putl(int, int, int, int, uint32_t); 2977532SSean.Ye@Sun.COM 2987532SSean.Ye@Sun.COM extern void nb_fsb_mask_mc(int, uint16_t); 2997532SSean.Ye@Sun.COM extern void nb_fbd_mask_mc(uint32_t); 300*10049SVuong.Nguyen@Sun.COM extern void nb_mem_mask_mc(uint32_t); 3017532SSean.Ye@Sun.COM extern void nb_int_mask_mc(uint32_t); 3027532SSean.Ye@Sun.COM extern void nb_thr_mask_mc(uint16_t); 3037532SSean.Ye@Sun.COM extern void nb_mask_mc_reset(void); 3047532SSean.Ye@Sun.COM 3057532SSean.Ye@Sun.COM extern int nb_mask_mc_set; 3067532SSean.Ye@Sun.COM 3077532SSean.Ye@Sun.COM extern errorq_t *nb_queue; 3087532SSean.Ye@Sun.COM extern kmutex_t nb_mutex; 3097532SSean.Ye@Sun.COM 3107532SSean.Ye@Sun.COM extern void nb_drain(void *, const void *, const errorq_elem_t *); 3117532SSean.Ye@Sun.COM extern void nb_used_spare_rank(int, int); 3127532SSean.Ye@Sun.COM 3137532SSean.Ye@Sun.COM extern uint_t nb_config_gen; 3147532SSean.Ye@Sun.COM 3157532SSean.Ye@Sun.COM #ifdef __cplusplus 3167532SSean.Ye@Sun.COM } 3177532SSean.Ye@Sun.COM #endif 3187532SSean.Ye@Sun.COM 3197532SSean.Ye@Sun.COM #endif /* _NB_LOG_H */ 320