1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
23  */
24 
25 #ifndef _GMEM_MEM_H
26 #define	_GMEM_MEM_H
27 
28 /*
29  * Support routines for managing state related to memory modules.
30  * Correctable errors generally cause changes to the DIMM-related state.
31  */
32 
33 #include <gmem.h>
34 #include <gmem_page.h>
35 #include <gmem_state.h>
36 #include <gmem_fmri.h>
37 #include <sys/errclassify.h>
38 
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 #define	GMEM_ERPT_PAYLOAD_DIAGNOSE	"diagnose"
44 #define	GMEM_ERPT_PAYLOAD_RESOURCE	"resource"
45 #define	GMEM_ERPT_PAYLOAD_DETECTOR	"detector"
46 #define	GMEM_ERPT_PAYLOAD_PHYSADDR	"phys-addr"
47 #define	GMEM_ERPT_PAYLOAD_OFFSET	"offset"
48 #define	GMEM_ERPT_PAYLOAD_SERDN		"serd_n"
49 #define	GMEM_ERPT_PAYLOAD_SERDT		"serd_t"
50 #define	GMEM_ERPT_PAYLOAD_SYMBOLPOS	"symbol-pos"
51 #define	GMEM_ERPT_PAYLOAD_DRAM		"dram"
52 #define	GMEM_ERPT_PAYLOAD_FILTER_RATIO	"filter_ratio"
53 #define	GMEM_ERPT_PAYLOAD_CKW		"relative-ckword"
54 
55 #define	GMEM_F_FAULTING	0x1
56 #define	GMEM_FAULT_DIMM_PAGES	"fault.memory.dimm-page-retires-excessive"
57 #define	GMEM_FAULT_DIMM_4A	"fault.memory.dimm-ue-imminent"
58 #define	GMEM_FAULT_DIMM_4B	"fault.memory.dram-ue-imminent"
59 #define	GMEM_FAULT_PAGE		"fault.memory.page"
60 #define	INVALID_DRAM		-1
61 
62 #define	DEFAULT_SERDN	0x2
63 #define	DEFAULT_SERDT	0xebbdb3ed0000ULL
64 
65 typedef struct gmem_dimm gmem_dimm_t;
66 
67 /*
68  * Correctable memory errors
69  * "unknown symbol" (mem-us) and "intermittent symbol" (mem-is) CEs are
70  * not used in diagnosis, except for rules 4A & 4B checking.
71  *
72  * "clearable symbol" (mem-cs) CEs are added to the SERD engines. When the
73  * engine the page corresponding to the CE that caused the engine to
74  * fire is retired
75  *
76  * "sticky symbol" (mem-ss) CEs trigger immediate page retirement.
77  *
78  */
79 
80 extern gmem_evdisp_t gmem_ce(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
81     const char *);
82 extern void gmem_dimm_close(fmd_hdl_t *, void *);
83 
84 extern void gmem_mem_case_restore(fmd_hdl_t *, gmem_case_t *, fmd_case_t *,
85     const char *, const char *);
86 extern char *gmem_mem_serdnm_create(fmd_hdl_t *, const char *, const char *);
87 extern char *gmem_page_serdnm_create(fmd_hdl_t *, const char *, uint64_t);
88 extern char *gmem_mq_serdnm_create(fmd_hdl_t *, const char *, uint64_t,
89     uint16_t, uint16_t);
90 extern void gmem_page_serd_create(fmd_hdl_t *, gmem_page_t *, nvlist_t *);
91 extern uint32_t gmem_get_serd_filter_ratio(nvlist_t *);
92 extern int gmem_serd_record(fmd_hdl_t *, const char *, uint32_t, fmd_event_t *);
93 extern void gmem_mem_retirestat_create(fmd_hdl_t *, fmd_stat_t *, const char *,
94     uint64_t, const char *);
95 
96 extern void gmem_mem_gc(fmd_hdl_t *);
97 extern void gmem_mem_fini(fmd_hdl_t *);
98 
99 #ifdef __cplusplus
100 }
101 #endif
102 
103 #endif /* _GMEM_MEM_H */
104