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/*
23 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#ifndef _CMD_OPL_H
28#define	_CMD_OPL_H
29
30#pragma ident	"%Z%%M%	%I%	%E% SMI"
31
32#include <cmd.h>
33#include <cmd_cpu.h>
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39typedef struct opl_cpu {
40	cmd_list_t oc_list;
41	cmd_cpu_t *oc_cmd_cpu;
42	uint32_t oc_cpuid;
43} opl_cpu_t;
44
45extern cmd_evdisp_t cmd_oplinv_urg(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
46    const char *, cmd_errcl_t);
47extern cmd_evdisp_t cmd_oplcre(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
48    const char *, cmd_errcl_t);
49extern cmd_evdisp_t cmd_opltsb_ctx(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
50    const char *, cmd_errcl_t);
51extern cmd_evdisp_t cmd_opltsbp(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
52    const char *, cmd_errcl_t);
53extern cmd_evdisp_t cmd_oplpstate(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
54    const char *, cmd_errcl_t);
55extern cmd_evdisp_t cmd_opltstate(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
56    const char *, cmd_errcl_t);
57extern cmd_evdisp_t cmd_opliug_f(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
58    const char *, cmd_errcl_t);
59extern cmd_evdisp_t cmd_opliug_r(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
60    const char *, cmd_errcl_t);
61extern cmd_evdisp_t cmd_oplsdc(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
62    const char *, cmd_errcl_t);
63extern cmd_evdisp_t cmd_oplwdt(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
64    const char *, cmd_errcl_t);
65extern cmd_evdisp_t cmd_opldtlb(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
66    const char *, cmd_errcl_t);
67extern cmd_evdisp_t cmd_oplitlb(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
68    const char *, cmd_errcl_t);
69extern cmd_evdisp_t cmd_oplcore_err(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
70    const char *, cmd_errcl_t);
71extern cmd_evdisp_t cmd_opldae(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
72    const char *, cmd_errcl_t);
73extern cmd_evdisp_t cmd_opliae(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
74    const char *, cmd_errcl_t);
75extern cmd_evdisp_t cmd_opluge(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
76    const char *, cmd_errcl_t);
77extern cmd_evdisp_t cmd_oplmtlb(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
78    const char *, cmd_errcl_t);
79extern cmd_evdisp_t cmd_opltlbp(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
80    const char *, cmd_errcl_t);
81extern cmd_evdisp_t cmd_oplinv_sfsr(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
82    const char *, cmd_errcl_t);
83extern cmd_evdisp_t cmd_opluecpu_detcpu(fmd_hdl_t *, fmd_event_t *,
84    nvlist_t *, const char *, cmd_errcl_t);
85extern cmd_evdisp_t cmd_opluecpu_detio(fmd_hdl_t *, fmd_event_t *,
86    nvlist_t *, const char *, cmd_errcl_t);
87
88extern cmd_evdisp_t cmd_opl_mac_common(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
89    const char *, cmd_errcl_t);
90extern cmd_evdisp_t cmd_opl_cpu_mem(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
91    const char *, cmd_errcl_t);
92extern cmd_evdisp_t cmd_opl_io_mem(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
93    const char *, cmd_errcl_t);
94
95extern nvlist_t *opl_cpursrc_create(fmd_hdl_t *, uint32_t);
96extern char *cmd_cpu_getfrustr_by_id(fmd_hdl_t *, uint32_t);
97extern cmd_list_t *opl_cpulist_insert(fmd_hdl_t *, uint32_t, int);
98extern void opl_cpulist_free(fmd_hdl_t *, cmd_list_t *);
99extern uint8_t opl_avg(uint_t, uint_t);
100
101extern cmd_evdisp_t cmd_opl_ue_cpu(fmd_hdl_t *, fmd_event_t *,
102    const char *, const char *, cmd_ptrsubtype_t, cmd_cpu_t *, cmd_case_t *,
103    uint8_t);
104
105extern cmd_list_t *opl_cpulist_insert(fmd_hdl_t *, uint32_t, int);
106extern int cmd_fmri_hc_set(fmd_hdl_t *, nvlist_t *, int, const nvlist_t *,
107    nvlist_t *, int, ...);
108extern nvlist_t *opl_mem_fru_create(fmd_hdl_t *, nvlist_t *);
109
110extern cmd_list_t opl_cpu_list;
111
112#define	OPL_CHASSIS_DEFAULT	"0"
113#define	OPL_CPU_FRU_FMRI_DC	FM_FMRI_SCHEME_HC":///" \
114    FM_FMRI_LEGACY_HC"=/CMU"
115#define	OPL_CPU_FRU_FMRI_FF1	FM_FMRI_SCHEME_HC":///" \
116    FM_FMRI_LEGACY_HC"=/MBU_A/CPUM"
117#define	OPL_CPU_FRU_FMRI_FF2	FM_FMRI_SCHEME_HC":///" \
118    FM_FMRI_LEGACY_HC"=/MBU_B/CPUM"
119#define	OPL_CPU_FRU_FMRI_IKKAKU	FM_FMRI_SCHEME_HC":///" \
120    FM_FMRI_LEGACY_HC"=/MBU_A"
121#define	STR_BUFLEN		32
122#define	NPAIRS			5
123
124/*
125 * Mask for getting the fault address
126 * from  MARKEDID in UBC Memory UE
127 * Log Register (Oberon)
128 */
129#define	UBC_UE_ADR_MASK		0x00007FFFFFFFFFFFULL
130
131/*
132 * To indicate if the CPU/IO handler is to be used.
133 */
134#define	CMD_OPL_HDLR_CPU	1
135#define	CMD_OPL_HDLR_IO		2
136
137/*
138 * Macors for dealing with "core", "chip"
139 * or "strand" related operations.
140 */
141#define	IS_STRAND		0
142#define	IS_CORE			1
143#define	IS_CHIP			2
144#define	STRAND_UPPER_BOUND	1
145#define	CORE_UPPER_BOUND	3
146
147#define	COREID_SHIFT		1
148#define	CHIPID_SHIFT		3
149#define	STRAND_MASK		1
150#define	CHIP_OR_CORE_MASK	3
151
152/*
153 * This is to reference the Oberon
154 * UBC memory UE log register payload.
155 */
156#define	OBERON_UBC_MUE		"ubc-mue"
157
158#ifdef __cplusplus
159}
160#endif
161
162#endif /* _CMD_OPL_H */
163