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