1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
/*
* 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 <sys/sgsbbc.h>
#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 */
|