cmd_dp.h revision 1186:7791ded250f8
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, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*
23 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#ifndef _CMD_DATAPATH_H
28#define	_CMD_DATAPATH_H
29
30#pragma ident	"%Z%%M%	%I%	%E% SMI"
31
32#include <cmd_fmri.h>
33
34/*
35 * Member Name     Data Type          Comments
36 * -----------     ---------          -----------
37 * version         uint8              0
38 * class           string             "asic"
39 * ENA             uint64             ENA Format 1
40 * detector        fmri               aggregated ID data for SC-DE
41 *
42 * Datapath ereport subclasses and data payloads:
43 * There will be two types of ereports (error and fault) which will be
44 * identified by the "type" member.
45 *
46 * ereport.asic.*.cds.cds-dp
47 * ereport.asic.*.dx.dx-dp
48 * ereport.asic.*.sdi.sdi-dp
49 * ereport.asic.*.cp.cp-dp
50 * ereport.asic.*.rp.rp-dp
51 *
52 * Member Name     Data Type          Comments
53 * -----------     ---------          -----------
54 * erptype         uint16            derived from message type: error or
55 *                                   fault
56 * t-value         uint32            SC's datapath SERD timeout threshold
57 * dp-list-sz      uint8             number of dp-list array elements
58 * dp-list         array of uint16   Safari IDs of affected cpus
59 * sn-list         array of uint64   Serial numbers of affected cpus
60 */
61
62#define		DP_MAX_FRU	23	/* maximum char length of dp FRUs */
63#define		DP_MAX_ASRUS	12	/* maximum number of dp ASRUs */
64#define		DP_MAX_CLASS	32	/* max length of dp fault class */
65#define		DP_MAX_BUF	16	/* max len for general purpose buffer */
66#define		DP_MAX_NUM_CPUS	8	/* max number of CPUs in a DP ereport */
67#define		DP_MAX_MCS	4	/* max # of MCs per memory page */
68
69#define	CMD_DP_VERSION_0	0
70#define	CMD_DP_VERSION		CMD_DP_VERSION_0
71
72/* Portion of datapath structure to be persisted */
73typedef struct cmd_dp_pers {
74	cmd_header_t	dpp_header;	/* Nodetype must be CMD_NT_DP */
75	uint_t		dpp_version;	/* struct version */
76	uint16_t	dpp_erpt_type;	/* ereport type (fault or error) */
77	uint8_t		dpp_err;	/* CDS, DX, EX, CP (xc), RP (sg) */
78	uint32_t	dpp_t_value;	/* SERD timeout threshold (seconds) */
79	uint32_t	dpp_ncpus;	/* number of associated CPUs */
80	uint16_t	dpp_cpuid_list[DP_MAX_NUM_CPUS]; /* array of CPU ids */
81	uint64_t	dpp_serid_list[DP_MAX_NUM_CPUS]; /* CPU serial #'s */
82} cmd_dp_pers_t;
83
84typedef struct cmd_dp {
85	cmd_dp_pers_t	dp_pers;
86	fmd_case_t	*dp_case;	/* fmd case pointer */
87	id_t		dp_id;		/* timer id */
88} cmd_dp_t;
89
90#define	CMD_DP_MAXSIZE		sizeof (cmd_dp_pers_t)
91#define	CMD_DP_MINSIZE		sizeof (cmd_dp_pers_t)
92
93#define	dp_header		dp_pers.dpp_header
94#define	dp_nodetype		dp_pers.dpp_header.hdr_nodetype
95#define	dp_bufname		dp_pers.dpp_header.hdr_bufname
96#define	dp_version		dp_pers.dpp_version
97#define	dp_erpt_type		dp_pers.dpp_erpt_type
98#define	dp_err			dp_pers.dpp_err
99#define	dp_cpuid		dp_pers.dpp_cpuid
100#define	dp_ncpus		dp_pers.dpp_ncpus
101#define	dp_t_value		dp_pers.dpp_t_value
102#define	dp_cpuid_list		dp_pers.dpp_cpuid_list
103#define	dp_serid_list		dp_pers.dpp_serid_list
104
105extern cmd_evdisp_t cmd_dp_cds(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
106    const char *, cmd_errcl_t);
107
108extern cmd_evdisp_t cmd_dp_dx(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
109    const char *, cmd_errcl_t);
110
111extern cmd_evdisp_t cmd_dp_ex(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
112    const char *, cmd_errcl_t);
113
114extern cmd_evdisp_t cmd_dp_cp(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
115    const char *, cmd_errcl_t);
116
117extern void cmd_dp_close(fmd_hdl_t *, void *);
118extern void cmd_dp_timeout(fmd_hdl_t *, id_t);
119extern cmd_dp_t *cmd_dp_lookup_fault(fmd_hdl_t *, uint32_t);
120extern void *cmd_dp_restore(fmd_hdl_t *, fmd_case_t *, cmd_case_ptr_t *);
121extern void cmd_dp_validate(fmd_hdl_t *);
122extern void cmd_dp_destroy(fmd_hdl_t *, cmd_dp_t *);
123extern nvlist_t *cmd_dp_setasru(fmd_hdl_t *, cmd_dp_t *);
124extern cmd_dp_t *cmd_dp_lookup_error(cmd_dp_t *);
125extern void dp_buf_write(fmd_hdl_t *, cmd_dp_t *);
126extern int cmd_dp_error(fmd_hdl_t *);
127extern int cmd_dp_fault(fmd_hdl_t *, uint64_t);
128extern int cmd_dp_get_mcid(uint64_t, int *);
129extern void cmd_dp_fini(fmd_hdl_t *);
130
131#endif /* _CMD_DATAPATH_H */
132