03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER START
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The contents of this file are subject to the terms of the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Common Development and Distribution License (the "License").
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You may not use this file except in compliance with the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
03831d35f7499c87d51205817c93e9a8d42c4baestevel * or http://www.opensolaris.org/os/licensing.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * See the License for the specific language governing permissions
03831d35f7499c87d51205817c93e9a8d42c4baestevel * and limitations under the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * When distributing Covered Code, include this CDDL HEADER in each
03831d35f7499c87d51205817c93e9a8d42c4baestevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * If applicable, add the following below this CDDL HEADER, with the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * fields enclosed by brackets "[]" replaced with your own identifying
03831d35f7499c87d51205817c93e9a8d42c4baestevel * information: Portions Copyright [yyyy] [name of copyright owner]
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER END
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Use is subject to license terms.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifndef _SYS_SGSBBC_MAILBOX_H
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define _SYS_SGSBBC_MAILBOX_H
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#pragma ident "%Z%%M% %I% %E% SMI"
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/sgsbbc.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef __cplusplus
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern "C" {
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Message types - one per client!
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SBBC_BROADCAST_MSG 0x0
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define OBP_MBOX 0x1
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define DR_MBOX 0x2
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define WILDCAT_RSM_MBOX 0x3
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_ENV 0x4 /* environmental data */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define CPCI_MBOX 0x5
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define INFO_MBOX 0x6 /* for passing info to the SC */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SGFRU_MBOX 0x7 /* FRUID messages */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOX_EVENT_GENERIC 0x8
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOX_EVENT_KEY_SWITCH 0x9
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOX_EVENT_PANIC_SHUTDOWN 0xb
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOX_EVENT_ENV 0xc
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOX_EVENT_CPCI_ENUM 0xd
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define LW8_MBOX 0xe
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOX_EVENT_LW8 0xf
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOX_EVENT_DP_ERROR 0x10 /* datapath error */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOX_EVENT_DP_FAULT 0x11 /* datapath fault */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef DEBUG
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define DBG_MBOX 0x1f /* debug messages */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif /* DEBUG */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * INFO_MBOX message sub-types
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define INFO_MBOX_NODENAME 0x6000 /* for passing nodename to SC */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define INFO_MBOX_ERROR_NOTICE 0x6001 /* for logging ECC errors to SC */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define INFO_MBOX_ERROR_ECC 0x6003 /* updated interface for logging */
03831d35f7499c87d51205817c93e9a8d42c4baestevel /* ECC errors to SC */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define INFO_MBOX_ERROR_INDICT 0x6004 /* for logging ECC indictments to SC */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define INFO_MBOX_ECC 0x6005 /* new interface for logging */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define INFO_MBOX_ECC_CAP 0x6006 /* capability message */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Message status values returned by the SC to the various mailbox clients.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * These values need to be kept in sync with MailboxProtocol.java
03831d35f7499c87d51205817c93e9a8d42c4baestevel * in the SCAPP source code.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MBOX_STATUS_SUCCESS 0
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MBOX_STATUS_COMMAND_FAILURE (-1)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MBOX_STATUS_HARDWARE_FAILURE (-2)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MBOX_STATUS_ILLEGAL_PARAMETER (-3)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MBOX_STATUS_BOARD_ACCESS_DENIED (-4)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MBOX_STATUS_STALE_CONTENTS (-5)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MBOX_STATUS_STALE_OBJECT (-6)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MBOX_STATUS_NO_SEPROM_SPACE (-7)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MBOX_STATUS_NO_MEMORY (-8)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MBOX_STATUS_NOT_SUPPORTED (-9)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MBOX_STATUS_ILLEGAL_NODE (-10)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SG_MBOX_STATUS_ILLEGAL_SLOT (-11)
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Time out values in seconds.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * These definitions should not be used directly except by the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * sbbc_mbox_xxx_timeout variables. All clients should then use
03831d35f7499c87d51205817c93e9a8d42c4baestevel * these variables to allow running kernels to modify wait times.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOX_MIN_TIMEOUT 1 /* min time to wait before timeout */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOX_DEFAULT_TIMEOUT 30 /* suggested wait time */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Timeout variables
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern int sbbc_mbox_min_timeout; /* minimum wait time */
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern int sbbc_mbox_default_timeout; /* suggested wait time */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Message type consists of two parts
03831d35f7499c87d51205817c93e9a8d42c4baestevel * type - client ID
03831d35f7499c87d51205817c93e9a8d42c4baestevel * sub_type - client defined message type
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef struct {
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint16_t sub_type;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint16_t type;
03831d35f7499c87d51205817c93e9a8d42c4baestevel} sbbc_msg_type_t;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * this struct is used by client programs to request
03831d35f7499c87d51205817c93e9a8d42c4baestevel * mailbox message services
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef struct sbbc_msg {
03831d35f7499c87d51205817c93e9a8d42c4baestevel sbbc_msg_type_t msg_type; /* message type */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int msg_status; /* message return value */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int msg_len; /* size of message buffer */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int msg_bytes; /* number of bytes returned */
03831d35f7499c87d51205817c93e9a8d42c4baestevel caddr_t msg_buf; /* message buffer */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int32_t msg_data[2]; /* for junk mail */
03831d35f7499c87d51205817c93e9a8d42c4baestevel} sbbc_msg_t;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * This data structure is used for queueing up ECC event mailbox
03831d35f7499c87d51205817c93e9a8d42c4baestevel * messages through the SBBC taskq.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef struct sbbc_ecc_mbox {
03831d35f7499c87d51205817c93e9a8d42c4baestevel sbbc_msg_t ecc_req; /* request */
03831d35f7499c87d51205817c93e9a8d42c4baestevel sbbc_msg_t ecc_resp; /* response */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int ecc_log_error; /* Log errors to /var/adm/messages */
03831d35f7499c87d51205817c93e9a8d42c4baestevel} sbbc_ecc_mbox_t;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * ECC event mailbox taskq parameters
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define ECC_MBOX_TASKQ_MIN 2 /* minimum number of jobs */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define ECC_MBOX_TASKQ_MAX 512 /* maximum number of jobs */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * These are used to throttle error messages that may appear if
03831d35f7499c87d51205817c93e9a8d42c4baestevel * the attempt to enqueue an ECC event message to the SC fails.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * If set to N > 0, then only every Nth message will be output.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Set to 0 or 1 to disable this throttling and allow all error
03831d35f7499c87d51205817c93e9a8d42c4baestevel * messages to appear.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * ECC_MBOX_TASKQ_ERR_THROTTLE is the default value for
03831d35f7499c87d51205817c93e9a8d42c4baestevel * sbbc_ecc_mbox_err_throttle, which may be overridden in
03831d35f7499c87d51205817c93e9a8d42c4baestevel * /etc/system or at run time via debugger.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define ECC_MBOX_TASKQ_ERR_THROTTLE 64
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern int sbbc_ecc_mbox_err_throttle;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern int sbbc_mbox_reg_intr(uint32_t, sbbc_intrfunc_t,
03831d35f7499c87d51205817c93e9a8d42c4baestevel sbbc_msg_t *, uint_t *, kmutex_t *);
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern int sbbc_mbox_unreg_intr(uint32_t, sbbc_intrfunc_t);
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern int sbbc_mbox_request_response(sbbc_msg_t *,
03831d35f7499c87d51205817c93e9a8d42c4baestevel sbbc_msg_t *, time_t);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef __cplusplus
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif /* _SYS_SGSBBC_MAILBOX_H */