Home | History | Annotate | Download | only in cpumem-diagnosis
      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 */
     73 typedef 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 
     84 typedef 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 
    105 extern cmd_evdisp_t cmd_dp_cds(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
    106     const char *, cmd_errcl_t);
    107 
    108 extern cmd_evdisp_t cmd_dp_dx(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
    109     const char *, cmd_errcl_t);
    110 
    111 extern cmd_evdisp_t cmd_dp_ex(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
    112     const char *, cmd_errcl_t);
    113 
    114 extern cmd_evdisp_t cmd_dp_cp(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
    115     const char *, cmd_errcl_t);
    116 
    117 extern void cmd_dp_close(fmd_hdl_t *, void *);
    118 extern void cmd_dp_timeout(fmd_hdl_t *, id_t);
    119 extern cmd_dp_t *cmd_dp_lookup_fault(fmd_hdl_t *, uint32_t);
    120 extern void *cmd_dp_restore(fmd_hdl_t *, fmd_case_t *, cmd_case_ptr_t *);
    121 extern void cmd_dp_validate(fmd_hdl_t *);
    122 extern void cmd_dp_destroy(fmd_hdl_t *, cmd_dp_t *);
    123 extern nvlist_t *cmd_dp_setasru(fmd_hdl_t *, cmd_dp_t *);
    124 extern cmd_dp_t *cmd_dp_lookup_error(cmd_dp_t *);
    125 extern void dp_buf_write(fmd_hdl_t *, cmd_dp_t *);
    126 extern int cmd_dp_error(fmd_hdl_t *);
    127 extern int cmd_dp_fault(fmd_hdl_t *, uint64_t);
    128 extern int cmd_dp_get_mcid(uint64_t, int *);
    129 extern void cmd_dp_fini(fmd_hdl_t *);
    130 
    131 #endif /* _CMD_DATAPATH_H */
    132