Home | History | Annotate | Download | only in sys
      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 (the "License").
      6  * You may not use this file except in compliance with the License.
      7  *
      8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  * or http://www.opensolaris.org/os/licensing.
     10  * See the License for the specific language governing permissions
     11  * and limitations under the License.
     12  *
     13  * When distributing Covered Code, include this CDDL HEADER in each
     14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  * If applicable, add the following below this CDDL HEADER, with the
     16  * fields enclosed by brackets "[]" replaced with your own identifying
     17  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  *
     19  * CDDL HEADER END
     20  */
     21 
     22 /*
     23  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
     24  * Use is subject to license terms.
     25  */
     26 
     27 #ifndef	_SYS_SGSBBC_MAILBOX_H
     28 #define	_SYS_SGSBBC_MAILBOX_H
     29 
     30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     31 
     32 #include <sys/sgsbbc.h>
     33 
     34 #ifdef	__cplusplus
     35 extern "C" {
     36 #endif
     37 
     38 /*
     39  * Message types - one per client!
     40  */
     41 #define	SBBC_BROADCAST_MSG		0x0
     42 #define	OBP_MBOX			0x1
     43 #define	DR_MBOX				0x2
     44 #define	WILDCAT_RSM_MBOX		0x3
     45 #define	SG_ENV				0x4	/* environmental data */
     46 #define	CPCI_MBOX			0x5
     47 #define	INFO_MBOX			0x6	/* for passing info to the SC */
     48 #define	SGFRU_MBOX			0x7	/* FRUID messages */
     49 #define	MBOX_EVENT_GENERIC		0x8
     50 #define	MBOX_EVENT_KEY_SWITCH		0x9
     51 #define	MBOX_EVENT_PANIC_SHUTDOWN	0xb
     52 #define	MBOX_EVENT_ENV			0xc
     53 #define	MBOX_EVENT_CPCI_ENUM		0xd
     54 #define	LW8_MBOX			0xe
     55 #define	MBOX_EVENT_LW8			0xf
     56 #define	MBOX_EVENT_DP_ERROR		0x10	/* datapath error */
     57 #define	MBOX_EVENT_DP_FAULT		0x11	/* datapath fault */
     58 
     59 #ifdef	DEBUG
     60 #define	DBG_MBOX		0x1f	/* debug messages */
     61 #endif	/* DEBUG */
     62 
     63 /*
     64  * INFO_MBOX message sub-types
     65  */
     66 #define	INFO_MBOX_NODENAME	0x6000	/* for passing nodename to SC */
     67 #define	INFO_MBOX_ERROR_NOTICE	0x6001	/* for logging ECC errors to SC */
     68 #define	INFO_MBOX_ERROR_ECC	0x6003	/* updated interface for logging */
     69 					/* ECC errors to SC */
     70 #define	INFO_MBOX_ERROR_INDICT	0x6004	/* for logging ECC indictments to SC */
     71 #define	INFO_MBOX_ECC		0x6005	/* new interface for logging */
     72 #define	INFO_MBOX_ECC_CAP	0x6006	/* capability message */
     73 
     74 /*
     75  * Message status values returned by the SC to the various mailbox clients.
     76  *
     77  * These values need to be kept in sync with MailboxProtocol.java
     78  * in the SCAPP source code.
     79  */
     80 #define	SG_MBOX_STATUS_SUCCESS				0
     81 #define	SG_MBOX_STATUS_COMMAND_FAILURE			(-1)
     82 #define	SG_MBOX_STATUS_HARDWARE_FAILURE			(-2)
     83 #define	SG_MBOX_STATUS_ILLEGAL_PARAMETER		(-3)
     84 #define	SG_MBOX_STATUS_BOARD_ACCESS_DENIED		(-4)
     85 #define	SG_MBOX_STATUS_STALE_CONTENTS			(-5)
     86 #define	SG_MBOX_STATUS_STALE_OBJECT			(-6)
     87 #define	SG_MBOX_STATUS_NO_SEPROM_SPACE			(-7)
     88 #define	SG_MBOX_STATUS_NO_MEMORY			(-8)
     89 #define	SG_MBOX_STATUS_NOT_SUPPORTED			(-9)
     90 #define	SG_MBOX_STATUS_ILLEGAL_NODE			(-10)
     91 #define	SG_MBOX_STATUS_ILLEGAL_SLOT			(-11)
     92 
     93 
     94 /*
     95  * Time out values in seconds.
     96  *
     97  * These definitions should not be used directly except by the
     98  * sbbc_mbox_xxx_timeout variables. All clients should then use
     99  * these variables to allow running kernels to modify wait times.
    100  */
    101 #define	MBOX_MIN_TIMEOUT	1	/* min time to wait before timeout */
    102 #define	MBOX_DEFAULT_TIMEOUT	30	/* suggested wait time */
    103 
    104 /*
    105  * Timeout variables
    106  */
    107 extern int	sbbc_mbox_min_timeout;		/* minimum wait time */
    108 extern int	sbbc_mbox_default_timeout;	/* suggested wait time */
    109 
    110 
    111 /*
    112  * Message type consists of two parts
    113  * type - client ID
    114  * sub_type - client defined message type
    115  */
    116 typedef struct {
    117 	uint16_t	sub_type;
    118 	uint16_t	type;
    119 } sbbc_msg_type_t;
    120 
    121 /*
    122  * this struct is used by client programs to request
    123  * mailbox message services
    124  */
    125 typedef struct sbbc_msg {
    126 	sbbc_msg_type_t	msg_type;	/* message type */
    127 	int	msg_status;		/* message return value */
    128 	int	msg_len;		/* size of message buffer */
    129 	int	msg_bytes;		/* number of bytes returned */
    130 	caddr_t	msg_buf;		/* message buffer */
    131 	int32_t	msg_data[2];		/* for junk mail */
    132 } sbbc_msg_t;
    133 
    134 /*
    135  * This data structure is used for queueing up ECC event mailbox
    136  * messages through the SBBC taskq.
    137  */
    138 
    139 typedef struct sbbc_ecc_mbox {
    140 	sbbc_msg_t	ecc_req;	/* request */
    141 	sbbc_msg_t	ecc_resp;	/* response */
    142 	int		ecc_log_error;	/* Log errors to /var/adm/messages */
    143 } sbbc_ecc_mbox_t;
    144 
    145 /*
    146  * ECC event mailbox taskq parameters
    147  */
    148 #define	ECC_MBOX_TASKQ_MIN	2	/* minimum number of jobs */
    149 #define	ECC_MBOX_TASKQ_MAX	512	/* maximum number of jobs */
    150 
    151 /*
    152  * These are used to throttle error messages that may appear if
    153  * the attempt to enqueue an ECC event message to the SC fails.
    154  * If set to N > 0, then only every Nth message will be output.
    155  * Set to 0 or 1 to disable this throttling and allow all error
    156  * messages to appear.
    157  *
    158  * ECC_MBOX_TASKQ_ERR_THROTTLE is the default value for
    159  * sbbc_ecc_mbox_err_throttle, which may be overridden in
    160  * /etc/system or at run time via debugger.
    161  */
    162 #define	ECC_MBOX_TASKQ_ERR_THROTTLE	64
    163 extern int	sbbc_ecc_mbox_err_throttle;
    164 
    165 extern int	sbbc_mbox_reg_intr(uint32_t, sbbc_intrfunc_t,
    166 		sbbc_msg_t *, uint_t *, kmutex_t *);
    167 extern int	sbbc_mbox_unreg_intr(uint32_t, sbbc_intrfunc_t);
    168 extern int	sbbc_mbox_request_response(sbbc_msg_t *,
    169 		sbbc_msg_t *, time_t);
    170 
    171 #ifdef	__cplusplus
    172 }
    173 #endif
    174 
    175 #endif	/* _SYS_SGSBBC_MAILBOX_H */
    176