d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga/*
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * CDDL HEADER START
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga *
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * The contents of this file are subject to the terms of the
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * Common Development and Distribution License, Version 1.0 only
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * (the "License"). You may not use this file except in compliance
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * with the License.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga *
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * or http://www.opensolaris.org/os/licensing.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * See the License for the specific language governing permissions
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * and limitations under the License.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga *
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * When distributing Covered Code, include this CDDL HEADER in each
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * If applicable, add the following below this CDDL HEADER, with the
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * fields enclosed by brackets "[]" replaced with your own identifying
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * information: Portions Copyright [yyyy] [name of copyright owner]
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga *
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * CDDL HEADER END
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga/*
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * Use is subject to license terms.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#ifndef _CMD_DATAPATH_H
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define _CMD_DATAPATH_H
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#pragma ident "%Z%%M% %I% %E% SMI"
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#include <cmd_fmri.h>
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga/*
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * Member Name Data Type Comments
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * ----------- --------- -----------
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * version uint8 0
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * class string "asic"
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * ENA uint64 ENA Format 1
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * detector fmri aggregated ID data for SC-DE
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga *
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * Datapath ereport subclasses and data payloads:
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * There will be two types of ereports (error and fault) which will be
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * identified by the "type" member.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga *
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * ereport.asic.*.cds.cds-dp
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * ereport.asic.*.dx.dx-dp
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * ereport.asic.*.sdi.sdi-dp
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * ereport.asic.*.cp.cp-dp
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * ereport.asic.*.rp.rp-dp
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga *
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * Member Name Data Type Comments
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * ----------- --------- -----------
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * erptype uint16 derived from message type: error or
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * fault
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * t-value uint32 SC's datapath SERD timeout threshold
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * dp-list-sz uint8 number of dp-list array elements
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * dp-list array of uint16 Safari IDs of affected cpus
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga * sn-list array of uint64 Serial numbers of affected cpus
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define DP_MAX_FRU 23 /* maximum char length of dp FRUs */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define DP_MAX_ASRUS 12 /* maximum number of dp ASRUs */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define DP_MAX_CLASS 32 /* max length of dp fault class */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define DP_MAX_BUF 16 /* max len for general purpose buffer */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define DP_MAX_NUM_CPUS 8 /* max number of CPUs in a DP ereport */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define DP_MAX_MCS 4 /* max # of MCs per memory page */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define CMD_DP_VERSION_0 0
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define CMD_DP_VERSION CMD_DP_VERSION_0
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga/* Portion of datapath structure to be persisted */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagatypedef struct cmd_dp_pers {
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga cmd_header_t dpp_header; /* Nodetype must be CMD_NT_DP */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga uint_t dpp_version; /* struct version */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga uint16_t dpp_erpt_type; /* ereport type (fault or error) */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga uint8_t dpp_err; /* CDS, DX, EX, CP (xc), RP (sg) */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga uint32_t dpp_t_value; /* SERD timeout threshold (seconds) */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga uint32_t dpp_ncpus; /* number of associated CPUs */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga uint16_t dpp_cpuid_list[DP_MAX_NUM_CPUS]; /* array of CPU ids */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga uint64_t dpp_serid_list[DP_MAX_NUM_CPUS]; /* CPU serial #'s */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga} cmd_dp_pers_t;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagatypedef struct cmd_dp {
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga cmd_dp_pers_t dp_pers;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga fmd_case_t *dp_case; /* fmd case pointer */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga id_t dp_id; /* timer id */
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga} cmd_dp_t;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define CMD_DP_MAXSIZE sizeof (cmd_dp_pers_t)
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define CMD_DP_MINSIZE sizeof (cmd_dp_pers_t)
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define dp_header dp_pers.dpp_header
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define dp_nodetype dp_pers.dpp_header.hdr_nodetype
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define dp_bufname dp_pers.dpp_header.hdr_bufname
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define dp_version dp_pers.dpp_version
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define dp_erpt_type dp_pers.dpp_erpt_type
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define dp_err dp_pers.dpp_err
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define dp_cpuid dp_pers.dpp_cpuid
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define dp_ncpus dp_pers.dpp_ncpus
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define dp_t_value dp_pers.dpp_t_value
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define dp_cpuid_list dp_pers.dpp_cpuid_list
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#define dp_serid_list dp_pers.dpp_serid_list
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern cmd_evdisp_t cmd_dp_cds(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga const char *, cmd_errcl_t);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern cmd_evdisp_t cmd_dp_dx(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga const char *, cmd_errcl_t);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern cmd_evdisp_t cmd_dp_ex(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga const char *, cmd_errcl_t);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern cmd_evdisp_t cmd_dp_cp(fmd_hdl_t *, fmd_event_t *, nvlist_t *,
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga const char *, cmd_errcl_t);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern void cmd_dp_close(fmd_hdl_t *, void *);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern void cmd_dp_timeout(fmd_hdl_t *, id_t);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern cmd_dp_t *cmd_dp_lookup_fault(fmd_hdl_t *, uint32_t);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern void *cmd_dp_restore(fmd_hdl_t *, fmd_case_t *, cmd_case_ptr_t *);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern void cmd_dp_validate(fmd_hdl_t *);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern void cmd_dp_destroy(fmd_hdl_t *, cmd_dp_t *);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern nvlist_t *cmd_dp_setasru(fmd_hdl_t *, cmd_dp_t *);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern cmd_dp_t *cmd_dp_lookup_error(cmd_dp_t *);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern void dp_buf_write(fmd_hdl_t *, cmd_dp_t *);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern int cmd_dp_error(fmd_hdl_t *);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern int cmd_dp_fault(fmd_hdl_t *, uint64_t);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern int cmd_dp_get_mcid(uint64_t, int *);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaextern void cmd_dp_fini(fmd_hdl_t *);
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga#endif /* _CMD_DATAPATH_H */