xref: /illumos-gate/usr/src/uts/sun/sys/dkmpio.h (revision 581cede61ac9c14d8d4ea452562a567189eead78)
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 (c) 1991,1997-1998 by Sun Microsystems, Inc.
24  * All rights reserved.
25  */
26 
27 #ifndef	_SYS_DKMPIO_H
28 #define	_SYS_DKMPIO_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 /* from dualport: dkmpio.h 1.5 91/04/11 SMI	*/
32 
33 /*
34  * Structures and definitions for multi port disk io control commands
35  */
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
41 /*
42  * Disk driver multi port state.
43  * dk_gmpstate.dkg_mpstate and dk_smpstate.dks_mpstate values.
44  */
45 enum dk_mpstate { DKS_INITIAL, DKS_OFFLINE, DKS_ONLINE, DKS_FREEZE};
46 
47 /*
48  * Disk drive protocol types
49  * dk_mpinfo.dke_mptype values.
50  */
51 enum dk_mptype { DKT_IPI, DKT_SCSI, DKT_UNKNOWN };
52 
53 /*
54  * Used for getting disk driver multi port state and status
55  */
56 struct dk_gmpstate {
57 	enum dk_mpstate	dkg_mpstate;		/* output: current state */
58 	uint_t		dkg_fail_state;		/* output: fail state */
59 	uint_t		dkg_current_status; /* output: current drive status */
60 	int		dkg_pad[4];		/* Pads for future use */
61 };
62 
63 /*
64  * Used for setting driver multi port state and status
65  */
66 struct dk_smpstate {
67 	enum dk_mpstate	dks_mpstate;		/* input: requested state */
68 	int		dks_pad[2];		/* Pads for future use */
69 };
70 
71 /*
72  * flags for current status, ro
73  * dk_gmpstate.dkg_current_status definitions.
74  */
75 #define	DKF_DRV_RESERVED	0x00000001	/* drive reserved */
76 #define	DKF_DRV_DUAL_ENABLED	0x00000002	/* both ports are enabled */
77 #define	DKF_DRV_RESET		0x00000004	/* drive was reset */
78 #define	DKF_DRV_WRTPROT		0x00000008	/* drive was write protect */
79 #define	DKF_DRV_BUSY		0x00000010	/* drive seems busy */
80 #define	DKF_DRV_TIMEOUT		0x00000020	/* drive timed out */
81 #define	DKF_DRV_DUALPORTED	0x00000040	/* drive is used dual ported */
82 #define	DKF_DRV_ALTRSVD		0x00000080	/* Alternate port reserved */
83 #define	DKF_ADAPT_RESERVED	0x00000100	/* host adaptor reserved */
84 #define	DKF_ADAPT_RESET		0x00000400	/* host adaptor was reset */
85 #define	DKF_ADAPT_BUSY		0x00001000	/* host adaptor seems busy */
86 #define	DKF_ADAPT_TIMEOUT	0x00002000	/* host adaptor timed out */
87 #define	DKF_CTLR_RESERVED	0x00010000	/* ctlr reserved */
88 #define	DKF_CTLR_RESET		0x00040000	/* ctlr was reset */
89 #define	DKF_CTLR_BUSY		0x00100000	/* host adaptor seems busy */
90 #define	DKF_CTLR_TIMEOUT	0x02000000	/* host adaptor timed out */
91 
92 /*
93  * Volatile disk drive fail state flags, ro
94  * dk_gmpstate.dkg_fail_state flags definitions.
95  */
96 #define	DKF_DRV_RSV_LOST	0x00000001	/* drive lost reservation */
97 #define	DKF_CTLR_RSV_LOST	0x00000002	/* ctlr lost reservation */
98 #define	DKF_DRV_DIAGNOSED	0x00000004	/* drive self diag. */
99 						/* reports error */
100 #define	DKF_CTLR_DIAGNOSED	0x00000008	/* ctlr self diag. */
101 						/* reports error */
102 #define	DKF_ADAPT_DIAGNOSED	0x00000010	/* host adapt. self diag. */
103 						/* reports error */
104 #define	DKF_DRV_FAILED		0x00001000	/* drive failure */
105 #define	DKF_CTLR_FAILED		0x00100000	/* controller failure */
106 #define	DKF_ADAPT_FAILED	0x10000000	/* host adaptor failure */
107 
108 /*
109  * Used for getting disk drive error counts
110  */
111 struct dk_mpdrv_status {
112 	uint_t	dkd_cum_drv_soft_errors; /* cumulative drive soft errors */
113 	uint_t	dkd_cum_drv_hard_errors; /* cumulative drive media errors */
114 	uint_t	dkd_cum_drv_retries;	/* cumulative successful drive */
115 					/* retries on media errors */
116 	int	dkd_pad[4];		/* Pads for future use */
117 };
118 
119 /*
120  * Used to set/get the configuration and control/status flags
121  */
122 struct dk_mpflags {
123 	uint_t	dkf_config_flags;		/* config flags, ro */
124 	uint_t	dkf_control_flags;		/* control flags, rw */
125 	int	dkf_pad[4];			/* Pads for future use */
126 };
127 
128 /*
129  * Volatile disk drive configuration status flags, ro
130  * dk_mpflags.dkf_config_flags definitions.
131  */
132 #define	DKF_DRV_NOEXIST		0x00000001	/* non-existent drive */
133 #define	DKF_CTLR_NOEXIST	0x00000002	/* non-existent controller */
134 #define	DKF_ADAPT_NOEXIST	0x00000004	/* non-existent host adaptor */
135 
136 /*
137  * Non-destructive configuration control flags, r/w
138  * dk_mpflags.dkf_control_flags definitions.
139  */
140 #define	DKF_ORDERED		0x00000001	/* write ordering of sectors */
141 #define	DKF_PANIC_ABORT		0x00000002	/* commands aborted at panic */
142 #define	DKF_RERUN_UNR_CMDS	0x00000004	/* rerun commands after reset */
143 						/* on unreserved unit occurs */
144 #define	DKF_RERUN_RSV_CMDS	0x00000008	/* rerun commands after reset */
145 						/* on reserved unit occurs */
146 #define	DKF_AUTOFAIL		0x00000010	/* make drive/ctlr/adapter */
147 						/* unavailable after a */
148 						/* failure */
149 
150 
151 
152 /*
153  * Extended info: used for getting all the multi port info
154  */
155 struct dk_mpinfo {
156 	struct dk_gmpstate	dke_mpstate; /* current state & drive status */
157 	struct dk_mpflags	dke_mpflags;	/* config/control flags */
158 	struct dk_mpdrv_status	dke_mpdrv_status; /* cumulative for errors */
159 	enum dk_mptype		dke_mptype;	/* drive type */
160 	int			dke_qcapacity;	/* min freeze queue capacity */
161 	uint_t			dke_max_quiesce; /* maxtime to quiesce drive */
162 	int			dke_pad[4];	/* Pads for future use */
163 };
164 
165 /*
166  * Used for reserve, release, reset, abort, probe and reinitialization.
167  * May use with the "common command list" flags.
168  */
169 struct dk_mpcmd {
170 	uint_t		dkc_mpcmd;		/* command */
171 	uint_t		dkc_mpflags;		/* execution flags */
172 	caddr_t		dkc_bufaddr;		/* user's buffer address */
173 	uint_t 		dkc_buflen;		/* size of user's buffer */
174 	int		dkc_pad[4];		/* Pads for future use */
175 };
176 
177 /*
178  * Common command list, for all protocols.
179  * dk_mpcmd.dkc_mpcmd definitions.
180  */
181 #define	DKF_RESERVE	0x00000001		/* reserve drive */
182 #define	DKF_RELEASE	0x00000002		/* release drive */
183 #define	DKF_RESET	0x00000004		/* reset drive */
184 #define	DKF_ABORT	0x00000008		/* abort all cmds */
185 #define	DKF_PROBE	0x00000010		/* ping drive */
186 #define	DKF_REINIT	0x00000020		/* reinitialize drive */
187 
188 /*
189  * Execution flags.
190  * dk_mpcmd.dkc_mpflags definitions.
191  */
192 #define	DKF_DIAGNOSE	0x00000001	/* fail if any error occurs */
193 #define	DKF_ISOLATE	0x00000002	/* isolate from normal commands */
194 #define	DKF_READ	0x00000004	/* get data from device */
195 #define	DKF_WRITE	0x00000008	/* send data to device */
196 #define	DKF_DESTRUCTIVE	0x00000010	/* destructive action ok */
197 
198 /*
199  * Disk io control commands
200  */
201 #define	DKIOCGMPINFO	(DIOC | 90) /* struct dk_mpinfo Get mp info */
202 #define	DKIOCGMPSTATE	(DIOC | 91) /* struct dk_gmpstate Get mp state */
203 #define	DKIOCSMPSTATE	(DIOC | 92) /* struct dk_smpstate Set mp state */
204 #define	DKIOCGSTATUS	(DIOC | 93) /* struct dk_mpdrv_status Get drv status */
205 #define	DKIOCGMPFLAGS	(DIOC | 94) /* struct dk_mpflags Get mp flags */
206 #define	DKIOCSMPFLAGS	(DIOC | 95) /* struct dk_mpflags Set mp flags */
207 #define	DKIOCSMPCMD	(DIOC | 96) /* struct dk_mpcmd Set generic mp cmd */
208 
209 #ifdef __cplusplus
210 }
211 #endif
212 
213 #endif	/* !_SYS_DKMPIO_H */
214