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, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef	_SYS_SESIO_H
28 #define	_SYS_SESIO_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 /*
33  * Enclosure Services Interface Structures
34  */
35 
36 #ifdef	__cplusplus
37 extern "C" {
38 #endif
39 
40 /*
41  * Data Structures and definitions for SES Applications
42  */
43 
44 typedef struct {
45 	unsigned int obj_id;		/* Object Identifier */
46 	unsigned int		:  16,	/* reserved */
47 		subencid	:  8,	/* SubEnclosure ID */
48 		elem_type	:  8;	/* Element Type */
49 } ses_object;
50 
51 /* Known Enclosure Types */
52 #define	SESTYP_UNSPECIFIED	0x00
53 #define	SESTYP_DEVICE		0x01
54 #define	SESTYP_POWER		0x02
55 #define	SESTYP_FAN		0x03
56 #define	SESTYP_THERM		0x04
57 #define	SESTYP_DOORLOCK		0x05
58 #define	SESTYP_ALARM		0x06
59 #define	SESTYP_ESCC		0x07	/* Enclosure SCC */
60 #define	SESTYP_SCC		0x08	/* SCC */
61 #define	SESTYP_NVRAM		0x09
62 #define	SESTYP_UPS		0x0b
63 #define	SESTYP_DISPLAY		0x0c
64 #define	SESTYP_KEYPAD		0x0d
65 #define	SESTYP_SCSIXVR		0x0f
66 #define	SESTYP_LANGUAGE		0x10
67 #define	SESTYP_COMPORT		0x11
68 #define	SESTYP_VOM		0x12
69 #define	SESTYP_AMMETER		0x13
70 #define	SESTYP_SCSI_TGT		0x14
71 #define	SESTYP_SCSI_INI		0x15
72 #define	SESTYP_SUBENC		0x16
73 
74 /*
75  * Overall Enclosure Status
76  */
77 #define	ENCSTAT_UNRECOV		0x1
78 #define	ENCSTAT_CRITICAL	0x2
79 #define	ENCSTAT_NONCRITICAL	0x4
80 #define	ENCSTAT_INFO		0x8
81 
82 typedef struct {
83 	uint_t obj_id;
84 	uchar_t cstat[4];
85 } ses_objarg;
86 
87 /* Summary SES Status Defines, Common Status Codes */
88 #define	SESSTAT_UNSUPPORTED	0
89 #define	SESSTAT_OK		1
90 #define	SESSTAT_CRIT		2
91 #define	SESSTAT_NONCRIT		3
92 #define	SESSTAT_UNRECOV		4
93 #define	SESSTAT_NOTINSTALLED	5
94 #define	SESSTAT_UNKNOWN		6
95 #define	SESSTAT_NOTAVAIL	7
96 
97 /*
98  * For control pages, cstat[0] is the same for the
99  * enclosure and is common across all device types.
100  *
101  * If SESCTL_CSEL is set, then PRDFAIL, DISABLE and RSTSWAP
102  * are checked, otherwise bits that are specific to the device
103  * type in the other 3 bytes of cstat or checked.
104  */
105 #define	SESCTL_CSEL		0x80
106 #define	SESCTL_PRDFAIL		0x40
107 #define	SESCTL_DISABLE		0x20
108 #define	SESCTL_RSTSWAP		0x10
109 
110 
111 /* Control bits, Device Elements, byte 2 */
112 #define	SESCTL_DRVLCK	0x40	/* "DO NOT REMOVE" */
113 #define	SESCTL_RQSINS	0x08	/* RQST INSERT */
114 #define	SESCTL_RQSRMV	0x04	/* RQST REMOVE */
115 #define	SESCTL_RQSID	0x02	/* RQST IDENT */
116 /* Control bits, Device Elements, byte 3 */
117 #define	SESCTL_RQSFLT	0x20	/* RQST FAULT */
118 #define	SESCTL_DEVOFF	0x10	/* DEVICE OFF */
119 
120 /* Control bits, Generic, byte 3 */
121 #define	SESCTL_RQSTFAIL	0x40
122 #define	SESCTL_RQSTON	0x20
123 
124 
125 /*
126  * SES Driver ioctls
127  */
128 #define	SESIOC			('e'<<8)
129 #define	SESIOC_IOCTL_GETSTATE	(SESIOC|1)	/* get esi status */
130 #define	SESIOC_IOCTL_SETSTATE	(SESIOC|2)	/* set esi state */
131 #define	SESIOC_IOCTL_INQUIRY	(SESIOC|3)	/* get SCSI Inquiry info */
132 #define	SESIOC_GETNOBJ		(SESIOC|10)
133 #define	SESIOC_GETOBJMAP	(SESIOC|11)
134 #define	SESIOC_INIT		(SESIOC|12)
135 #define	SESIOC_GETENCSTAT	(SESIOC|13)
136 #define	SESIOC_SETENCSTAT	(SESIOC|14)
137 #define	SESIOC_GETOBJSTAT	(SESIOC|15)
138 #define	SESIOC_SETOBJSTAT	(SESIOC|16)
139 
140 /*
141  * The following structure is used by the SES_IOCTL_GETSTATE
142  * and the SES_IOCTL_SETSTATE ioctls
143  */
144 struct ses_ioctl {
145     uint32_t	page_size;	/* Size of page to be read/written */
146     uint8_t	page_code;	/* Page to be read/written */
147     caddr_t	page;		/* Address of page to be read/written */
148 };
149 
150 
151 #ifdef	__cplusplus
152 }
153 #endif
154 
155 #endif	/* _SYS_SESIO_H */
156