xref: /onnv-gate/usr/src/uts/common/sys/scsi/adapters/mpapi_impl.h (revision 12087:0e8c10460a8b)
11018Srs135747 /*
21018Srs135747  * CDDL HEADER START
31018Srs135747  *
41018Srs135747  * The contents of this file are subject to the terms of the
51018Srs135747  * Common Development and Distribution License (the "License").
61018Srs135747  * You may not use this file except in compliance with the License.
71018Srs135747  *
81018Srs135747  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
91018Srs135747  * or http://www.opensolaris.org/os/licensing.
101018Srs135747  * See the License for the specific language governing permissions
111018Srs135747  * and limitations under the License.
121018Srs135747  *
131018Srs135747  * When distributing Covered Code, include this CDDL HEADER in each
141018Srs135747  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
151018Srs135747  * If applicable, add the following below this CDDL HEADER, with the
161018Srs135747  * fields enclosed by brackets "[]" replaced with your own identifying
171018Srs135747  * information: Portions Copyright [yyyy] [name of copyright owner]
181018Srs135747  *
191018Srs135747  * CDDL HEADER END
201018Srs135747  */
21893Srs135747 /*
22*12087SJiri.Svoboda@Sun.COM  * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
23893Srs135747  */
24893Srs135747 
25893Srs135747 #ifndef _SYS_SCSI_ADAPTERS_MPAPI_IMPL_H
26893Srs135747 #define	_SYS_SCSI_ADAPTERS_MPAPI_IMPL_H
27893Srs135747 
28893Srs135747 #include <sys/sunmdi.h>
29893Srs135747 #include <sys/sunddi.h>
30893Srs135747 #include <sys/mdi_impldefs.h>
31893Srs135747 
32893Srs135747 #ifdef __cplusplus
33893Srs135747 extern "C" {
34893Srs135747 #endif
35893Srs135747 
36893Srs135747 #if !defined(_BIT_FIELDS_LTOH) && !defined(_BIT_FIELDS_HTOL)
37893Srs135747 #error  One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
38893Srs135747 #endif  /* _BIT_FIELDS_LTOH */
39893Srs135747 
40893Srs135747 /*
41893Srs135747  * All the structures (except mp_iocdata_t) are 64-bit aligned (padded,
42893Srs135747  * where necessary) to facilitate the use of the same structure for
43893Srs135747  * handling ioctl calls made by both 32-bit and 64-bit applications.
44893Srs135747  * There are no pointers to other structures inside these structures
45893Srs135747  * as copyout to user land may not produce desired result.
46893Srs135747  * The caddr_t structure is kept at the end due to the undeterminstic
47893Srs135747  * size it could accrue to its parent structure.
48893Srs135747  */
49893Srs135747 
50893Srs135747 /* Structure for MP_PLUGIN_PROPERTIES */
51893Srs135747 
52893Srs135747 typedef struct mp_driver_prop {
53893Srs135747 	char		driverVersion[256];
54893Srs135747 	uint32_t	supportedLoadBalanceTypes;
55893Srs135747 	boolean_t	canSetTPGAccess;
56893Srs135747 	boolean_t	canOverridePaths;
57893Srs135747 	boolean_t	exposesPathDeviceFiles;
58893Srs135747 	char		deviceFileNamespace[256];
59893Srs135747 	uint32_t	onlySupportsSpecifiedProducts;
60893Srs135747 	uint32_t	maximumWeight;
61893Srs135747 	uint32_t	failbackPollingRateMax;
62893Srs135747 	uint32_t	currentFailbackPollingRate;
63893Srs135747 	uint32_t	autoFailbackSupport;
64893Srs135747 	uint32_t	autoFailbackEnabled;
65893Srs135747 	uint32_t	defaultLoadBalanceType;
66893Srs135747 	uint32_t	probingPollingRateMax;
67893Srs135747 	uint32_t	currentProbingPollingRate;
68893Srs135747 	uint32_t	autoProbingSupport;
69893Srs135747 	uint32_t	autoProbingEnabled;
70893Srs135747 	uint32_t	proprietaryPropSize;
71893Srs135747 	caddr_t		proprietaryProp;
72893Srs135747 } mp_driver_prop_t;
73893Srs135747 
74893Srs135747 
75893Srs135747 /* Size of "proprietaryProp" field */
76893Srs135747 
77893Srs135747 #define	MP_MAX_PROP_BUF_SIZE				1024
78893Srs135747 
79893Srs135747 
80893Srs135747 /* Constants for autoFailbackSupport */
81893Srs135747 
82893Srs135747 /*
83893Srs135747  * Both MP_DRVR_AUTO_FAILBACK_SUPPORT and
84893Srs135747  * MP_DRVR_AUTO_FAILBACK_SUPPORT_LU
85893Srs135747  * can be supported at the same time.
86893Srs135747  */
87893Srs135747 
88893Srs135747 #define	MP_DRVR_AUTO_FAILBACK_SUPPORT_NONE		0
89893Srs135747 #define	MP_DRVR_AUTO_FAILBACK_SUPPORT			(1<<0)
90893Srs135747 #define	MP_DRVR_AUTO_FAILBACK_SUPPORT_LU		(1<<1)
91893Srs135747 
92893Srs135747 
93893Srs135747 
941480Scm136836 /*
951480Scm136836  * Declaration of the MP_LOAD_BALANCE_TYPE constants - should be
961480Scm136836  * the same defines as in mpapi.h
971480Scm136836  */
981480Scm136836 #define	MP_DRVR_LOAD_BALANCE_TYPE_NONE			0
991480Scm136836 #define	MP_DRVR_LOAD_BALANCE_TYPE_UNKNOWN		(1<<0)
1001480Scm136836 #define	MP_DRVR_LOAD_BALANCE_TYPE_ROUNDROBIN		(1<<1)
1011480Scm136836 #define	MP_DRVR_LOAD_BALANCE_TYPE_LEASTBLOCKS		(1<<2)
1021480Scm136836 #define	MP_DRVR_LOAD_BALANCE_TYPE_LEASTIO		(1<<3)
1031480Scm136836 #define	MP_DRVR_LOAD_BALANCE_TYPE_DEVICE_PRODUCT	(1<<4)
1041480Scm136836 #define	MP_DRVR_LOAD_BALANCE_TYPE_LBA_REGION		(1<<5)
1051480Scm136836 #define	MP_DRVR_LOAD_BALANCE_TYPE_FAILOVER_ONLY		(1<<6)
1061480Scm136836 /*
1071480Scm136836  * Proprietary load balance type should start from 0x10000(1<<16) or greater.
1081480Scm136836  * It is exposed through API MP_GetProprietaryLoadBalanceProperties if exists.
1091480Scm136836  */
110893Srs135747 #define	MP_DRVR_LOAD_BALANCE_TYPE_PROPRIETARY1		(1<<16)
111893Srs135747 #define	MP_DRVR_LOAD_BALANCE_TYPE_PROPRIETARY2		(1<<17)
112893Srs135747 
113893Srs135747 /* Constants for autoProbingSupport */
114893Srs135747 
115893Srs135747 /*
116893Srs135747  * Both MP_DRVR_AUTO_PROBING_SUPPORT and
117893Srs135747  * MP_DRVR_AUTO_PROBING_SUPPORT_LU
118893Srs135747  * can be supported at the same time.
119893Srs135747  */
120893Srs135747 
121893Srs135747 #define	MP_DRVR_AUTO_PROBING_SUPPORT_NONE		0
122893Srs135747 #define	MP_DRVR_AUTO_PROBING_SUPPORT			(1<<0)
123893Srs135747 #define	MP_DRVR_AUTO_PROBING_SUPPORT_LU			(1<<1)
124893Srs135747 
125893Srs135747 
126893Srs135747 /* Structures for MP_DEVICE_PRODUCT_PROPERTIES */
127893Srs135747 
128893Srs135747 typedef struct mp_vendor_prod_info {
129893Srs135747 	char	vendor[8];
130893Srs135747 	char	product[16];
131893Srs135747 	char	revision[4];
132893Srs135747 	char	reserved[4]; /* padding for 64bit alignment */
133893Srs135747 } mp_vendor_prod_info_t;
134893Srs135747 
135893Srs135747 typedef struct mp_dev_prod_prop {
136893Srs135747 	struct mp_vendor_prod_info	prodInfo;
137893Srs135747 	uint32_t			supportedLoadBalanceTypes;
138893Srs135747 	uint32_t			reserved; /* 64bit alignment padding */
139893Srs135747 	uint64_t			id;
140893Srs135747 } mp_dev_prod_prop_t;
141893Srs135747 
142893Srs135747 
143893Srs135747 /* Structure for MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES */
144893Srs135747 
145893Srs135747 typedef struct mp_logical_unit_prop {
146893Srs135747 	struct mp_vendor_prod_info	prodInfo;
147893Srs135747 	char				name[256];  /* guid */
148893Srs135747 	uint32_t			nameType;
149893Srs135747 	uint32_t			luGroupID;
150893Srs135747 	char				deviceFileName[256];
151893Srs135747 	uint64_t			id;
152893Srs135747 	boolean_t			asymmetric;
153893Srs135747 	uint32_t			currentLoadBalanceType;
154893Srs135747 	boolean_t			autoFailbackEnabled;
155893Srs135747 	uint32_t			failbackPollingRateMax;
156893Srs135747 	uint32_t			currentFailBackPollingRate;
157893Srs135747 	uint32_t			autoProbingEnabled;
158893Srs135747 	uint32_t			probingPollingRateMax;
159893Srs135747 	uint32_t			currentProbingPollingRate;
160893Srs135747 	uint64_t			overridePathID;
161893Srs135747 	boolean_t			overridePathInUse;
162893Srs135747 	uint32_t			proprietaryPropSize;
163893Srs135747 	caddr_t				proprietaryProp;
164893Srs135747 } mp_logical_unit_prop_t;
165893Srs135747 
166893Srs135747 
167893Srs135747 /* Constants for nameType */
168893Srs135747 
169893Srs135747 #define	MP_DRVR_NAME_TYPE_UNKNOWN		0
170893Srs135747 #define	MP_DRVR_NAME_TYPE_VPD83_TYPE1		1
171893Srs135747 #define	MP_DRVR_NAME_TYPE_VPD83_TYPE2		2
172893Srs135747 #define	MP_DRVR_NAME_TYPE_VPD83_TYPE3		3
173893Srs135747 #define	MP_DRVR_NAME_TYPE_DEVICE_SPECIFIC	4
174893Srs135747 
175893Srs135747 
176893Srs135747 /* Structure for MP_INITIATOR_PORT_PROPERTIES */
177893Srs135747 
178893Srs135747 typedef struct mp_init_port_prop {
179893Srs135747 	char		portID[256];
180893Srs135747 	char		osDeviceFile[256];
181893Srs135747 	uint32_t	portType;
182893Srs135747 	uint32_t	reserved; /* padding for 64bit alignment */
183893Srs135747 	uint64_t	id;
184893Srs135747 } mp_init_port_prop_t;
185893Srs135747 
186893Srs135747 
187893Srs135747 /* Constants for portType */
188893Srs135747 
189893Srs135747 #define	MP_DRVR_TRANSPORT_TYPE_UNKNOWN	0
190893Srs135747 #define	MP_DRVR_TRANSPORT_TYPE_FC	2
191893Srs135747 #define	MP_DRVR_TRANSPORT_TYPE_SPI	3
192893Srs135747 #define	MP_DRVR_TRANSPORT_TYPE_ISCSI	4
193893Srs135747 #define	MP_DRVR_TRANSPORT_TYPE_IFB	5
194893Srs135747 
195893Srs135747 
196893Srs135747 /* Structure for MP_TARGET_PORT_PROPERTIES */
197893Srs135747 
198893Srs135747 typedef struct mp_target_port_prop {
199893Srs135747 	char		portName[256];
200893Srs135747 	uint32_t	relativePortID;
201893Srs135747 	uint32_t	reserved; /* padding for 64bit alignment */
202893Srs135747 	uint64_t	id;
203893Srs135747 } mp_target_port_prop_t;
204893Srs135747 
205893Srs135747 
206893Srs135747 /* Structure for MP_TARGET_PORT_GROUP_PROPERTIES */
207893Srs135747 
208893Srs135747 typedef struct mp_tpg_prop {
209893Srs135747 	uint32_t	accessState;
210893Srs135747 	boolean_t	explicitFailover;
211893Srs135747 	uint32_t	tpgId; /* T10 defined id in report/set TPG */
212893Srs135747 	boolean_t	preferredLuPath;
213893Srs135747 	boolean_t	supportsLuAssignment;
214893Srs135747 	uint32_t	reserved; /* padding for 64bit alignment */
215893Srs135747 	uint64_t	id;
216893Srs135747 } mp_tpg_prop_t;
217893Srs135747 
218893Srs135747 
219893Srs135747 /* Constants for accessState */
220893Srs135747 
221893Srs135747 #define	MP_DRVR_ACCESS_STATE_ACTIVE_OPTIMIZED		0
222893Srs135747 #define	MP_DRVR_ACCESS_STATE_ACTIVE_NONOPTIMIZED	0x1
223893Srs135747 #define	MP_DRVR_ACCESS_STATE_STANDBY			0x2
224893Srs135747 #define	MP_DRVR_ACCESS_STATE_UNAVAILABLE		0x3
225893Srs135747 #define	MP_DRVR_ACCESS_STATE_TRANSITIONING		0xf
226893Srs135747 #define	MP_DRVR_ACCESS_STATE_ACTIVE			0x10
227893Srs135747 
228893Srs135747 
229893Srs135747 /* Structure for MP_PATH_LOGICAL_UNIT_PROPERTIES */
230893Srs135747 
231893Srs135747 typedef struct mp_path_prop {
232893Srs135747 	uint32_t			weight;
233893Srs135747 	uint32_t			pathState;
234893Srs135747 	boolean_t			disabled;
235893Srs135747 	uint32_t			reserved; /* 64bit alignment padding */
236893Srs135747 	uint64_t			id;
237893Srs135747 	struct mp_init_port_prop	initPort;
238893Srs135747 	struct mp_target_port_prop	targetPort;
239893Srs135747 	struct mp_logical_unit_prop	logicalUnit;
240893Srs135747 } mp_path_prop_t;
241893Srs135747 
242893Srs135747 
243893Srs135747 /* Constants for pathState */
244893Srs135747 
245893Srs135747 #define	MP_DRVR_PATH_STATE_ACTIVE		0
246893Srs135747 #define	MP_DRVR_PATH_STATE_PASSIVE		1
247893Srs135747 #define	MP_DRVR_PATH_STATE_PATH_ERR		2
248893Srs135747 #define	MP_DRVR_PATH_STATE_LU_ERR		3
249893Srs135747 #define	MP_DRVR_PATH_STATE_RESERVED		4
250893Srs135747 #define	MP_DRVR_PATH_STATE_REMOVED		5
251893Srs135747 #define	MP_DRVR_PATH_STATE_TRANSITIONING	6
252893Srs135747 #define	MP_DRVR_PATH_STATE_UNKNOWN		7
25310696SDavid.Hollister@Sun.COM #define	MP_DRVR_PATH_STATE_UNINIT		8
254893Srs135747 
255893Srs135747 
256893Srs135747 /* Structure for MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES */
257893Srs135747 
258893Srs135747 typedef struct mp_proprietary_loadbalance_prop {
259893Srs135747 	char		name[256];
260893Srs135747 	char		vendorName[256];
261893Srs135747 	uint64_t	id;
262893Srs135747 	uint32_t	typeIndex;
263893Srs135747 	uint32_t	proprietaryPropSize;
264893Srs135747 	caddr_t		proprietaryProp;
265893Srs135747 } mp_proprietary_loadbalance_prop_t;
266893Srs135747 
267893Srs135747 
268893Srs135747 /*
269893Srs135747  * Structure used as input to
270893Srs135747  * MP_ASSIGN_LU_TO_TPG subcmd.
271893Srs135747  */
272893Srs135747 
273893Srs135747 typedef struct mp_lu_tpg_pair {
274893Srs135747 	uint64_t	luId;
275893Srs135747 	uint64_t	tpgId;
276893Srs135747 } mp_lu_tpg_pair_t;
277893Srs135747 
2783410Scm136836 /* used for uscsi commmands */
2793410Scm136836 typedef struct mp_uscsi_cmd {
2803410Scm136836 	struct scsi_address	*ap;		/* address of the path */
2813410Scm136836 	struct uscsi_cmd	*uscmdp;	/* uscsi command */
2823410Scm136836 	struct buf		*cmdbp;		/* original buffer */
2833410Scm136836 	struct buf		*rqbp;		/* auto-rqsense packet */
2843410Scm136836 	mdi_pathinfo_t		*pip;		/* path information */
2853410Scm136836 	int			arq_enabled;	/* auto-rqsense enable flag */
2863410Scm136836 }mp_uscsi_cmd_t;
287893Srs135747 
288893Srs135747 /*
289893Srs135747  * Structure used as input to
290893Srs135747  * MP_SET_TPG_ACCESS_STATE subcmd.
291893Srs135747  */
292893Srs135747 
293893Srs135747 typedef struct mp_set_tpg_state_req {
294893Srs135747 	struct mp_lu_tpg_pair	luTpgPair;
295893Srs135747 	uint32_t		desiredState;
296893Srs135747 	uint32_t		reserved; /* padding for 64bit boundary */
297893Srs135747 } mp_set_tpg_state_req_t;
298893Srs135747 
299893Srs135747 
300893Srs135747 /*
301893Srs135747  * Structure for ioctl data
302893Srs135747  */
303893Srs135747 typedef struct mp_iocdata {
304893Srs135747 	uint16_t	mp_xfer;	/* direction */
305893Srs135747 	uint16_t	mp_cmd;		/* sub command */
306893Srs135747 	uint16_t	mp_flags;	/* flags */
307893Srs135747 	uint16_t	mp_cmd_flags;	/* command specific flags */
308893Srs135747 	size_t		mp_ilen;	/* Input buffer length */
309893Srs135747 	caddr_t		mp_ibuf;	/* Input buffer */
310893Srs135747 	size_t		mp_olen;	/* Output buffer length */
311893Srs135747 	caddr_t		mp_obuf;	/* Output buffer */
312893Srs135747 	size_t		mp_alen;	/* Auxiliary buffer length */
313893Srs135747 	caddr_t		mp_abuf;	/* Auxiliary buffer */
314893Srs135747 	int		mp_errno;	/* MPAPI driver internal error code */
315893Srs135747 } mp_iocdata_t;
316893Srs135747 
317893Srs135747 
318893Srs135747 #ifdef _KERNEL
319893Srs135747 
320893Srs135747 #if defined(_SYSCALL32)
321893Srs135747 
322893Srs135747 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
323893Srs135747 #pragma pack(4)
324893Srs135747 #endif
325893Srs135747 
326893Srs135747 /*
327893Srs135747  * Structure for 32-bit ioctl data
328893Srs135747  */
329893Srs135747 
330893Srs135747 typedef struct mp_iocdata32 {
331893Srs135747 	uint16_t	mp_xfer;	/* direction */
332893Srs135747 	uint16_t	mp_cmd;		/* sub command */
333893Srs135747 	uint16_t	mp_flags;	/* flags */
334893Srs135747 	uint16_t	mp_cmd_flags;	/* command specific flags */
335893Srs135747 	uint32_t	mp_ilen;	/* Input buffer length */
336893Srs135747 	caddr32_t	mp_ibuf;	/* Input buffer */
337893Srs135747 	uint32_t	mp_olen;	/* Output buffer length */
338893Srs135747 	caddr32_t	mp_obuf;	/* Output buffer */
339893Srs135747 	uint32_t	mp_alen;	/* Auxiliary buffer length */
340893Srs135747 	caddr32_t	mp_abuf;	/* Auxiliary buffer */
341893Srs135747 	int32_t		mp_errno;	/* MPAPI driver internal error code */
342893Srs135747 } mp_iocdata32_t;
343893Srs135747 
344893Srs135747 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
345893Srs135747 #pragma pack()
346893Srs135747 #endif
347893Srs135747 
348893Srs135747 #endif  /* _SYSCALL32 */
349893Srs135747 
350893Srs135747 #endif /* _KERNEL */
351893Srs135747 
352893Srs135747 
353893Srs135747 /* Constants for MP_XFER */
354893Srs135747 
355893Srs135747 #define	MP_XFER_NONE	0x00
356893Srs135747 #define	MP_XFER_READ	0x01
357893Srs135747 #define	MP_XFER_WRITE	0x02
358893Srs135747 #define	MP_XFER_RW	(MP_XFER_READ | MP_XFER_WRITE)
359893Srs135747 
360893Srs135747 
361893Srs135747 /* Constants for MP_OBJECT_TYPE */
362893Srs135747 
363893Srs135747 #define	MP_OBJECT_TYPE_UNKNOWN			0
364893Srs135747 #define	MP_OBJECT_TYPE_PLUGIN			1
365893Srs135747 #define	MP_OBJECT_TYPE_INITIATOR_PORT		2
366893Srs135747 #define	MP_OBJECT_TYPE_TARGET_PORT		3
367893Srs135747 #define	MP_OBJECT_TYPE_MULTIPATH_LU		4
368893Srs135747 #define	MP_OBJECT_TYPE_PATH_LU			5
369893Srs135747 #define	MP_OBJECT_TYPE_DEVICE_PRODUCT		6
370893Srs135747 #define	MP_OBJECT_TYPE_TARGET_PORT_GROUP	7
371893Srs135747 #define	MP_OBJECT_TYPE_PROPRIETARY_LOAD_BALANCE	8
372893Srs135747 #define	MP_OBJECT_TYPE_LAST_ENTRY 	MP_OBJECT_TYPE_PROPRIETARY_LOAD_BALANCE
373893Srs135747 #define	MP_MAX_OBJECT_TYPE	(MP_OBJECT_TYPE_LAST_ENTRY + 1)
374893Srs135747 
375893Srs135747 
376893Srs135747 /* Constants for MP_CMD */
377893Srs135747 
378893Srs135747 #define	MPAPI_CTL				('m'<<8)
379893Srs135747 #define	MP_CMD					(MPAPI_CTL | 2005)
380893Srs135747 #define	MP_SUB_CMD				('M'<<8)
381893Srs135747 
382893Srs135747 #define	MP_API_SUBCMD_MIN			(MP_SUB_CMD + 0x01)
383893Srs135747 #define	MP_GET_DRIVER_PROP			(MP_SUB_CMD + 0x01)
384893Srs135747 #define	MP_GET_DEV_PROD_LIST			(MP_SUB_CMD + 0x02)
385893Srs135747 #define	MP_GET_DEV_PROD_PROP			(MP_SUB_CMD + 0x03)
386893Srs135747 #define	MP_GET_LU_LIST				(MP_SUB_CMD + 0x04)
387893Srs135747 #define	MP_GET_LU_LIST_FROM_TPG			(MP_SUB_CMD + 0x05)
388893Srs135747 #define	MP_GET_LU_PROP				(MP_SUB_CMD + 0x06)
389893Srs135747 #define	MP_GET_PATH_LIST_FOR_MP_LU		(MP_SUB_CMD + 0x07)
390893Srs135747 #define	MP_GET_PATH_LIST_FOR_INIT_PORT		(MP_SUB_CMD + 0x08)
391893Srs135747 #define	MP_GET_PATH_LIST_FOR_TARGET_PORT	(MP_SUB_CMD + 0x09)
392893Srs135747 #define	MP_GET_PATH_PROP			(MP_SUB_CMD + 0x0a)
393893Srs135747 #define	MP_GET_INIT_PORT_LIST			(MP_SUB_CMD + 0x0b)
394893Srs135747 #define	MP_GET_INIT_PORT_PROP			(MP_SUB_CMD + 0x0c)
395893Srs135747 #define	MP_GET_TARGET_PORT_PROP			(MP_SUB_CMD + 0x0d)
396893Srs135747 #define	MP_GET_TPG_LIST				(MP_SUB_CMD + 0x0e)
397893Srs135747 #define	MP_GET_TPG_PROP				(MP_SUB_CMD + 0x0f)
398893Srs135747 #define	MP_GET_TPG_LIST_FOR_LU			(MP_SUB_CMD + 0x10)
399893Srs135747 #define	MP_GET_TARGET_PORT_LIST_FOR_TPG		(MP_SUB_CMD + 0x11)
400893Srs135747 #define	MP_SET_TPG_ACCESS_STATE			(MP_SUB_CMD + 0x12)
401893Srs135747 #define	MP_ENABLE_AUTO_FAILBACK			(MP_SUB_CMD + 0x13)
402893Srs135747 #define	MP_DISABLE_AUTO_FAILBACK 		(MP_SUB_CMD + 0x14)
403893Srs135747 #define	MP_ENABLE_PATH				(MP_SUB_CMD + 0x15)
404893Srs135747 #define	MP_DISABLE_PATH				(MP_SUB_CMD + 0x16)
405893Srs135747 #define	MP_GET_PROPRIETARY_LOADBALANCE_LIST	(MP_SUB_CMD + 0x17)
406893Srs135747 #define	MP_GET_PROPRIETARY_LOADBALANCE_PROP	(MP_SUB_CMD + 0x18)
407893Srs135747 #define	MP_ASSIGN_LU_TO_TPG			(MP_SUB_CMD + 0x19)
4083410Scm136836 #define	MP_SEND_SCSI_CMD			(MP_SUB_CMD + 0x1a)
4093410Scm136836 #define	MP_API_SUBCMD_MAX			(MP_SEND_SCSI_CMD)
410893Srs135747 
411893Srs135747 
412893Srs135747 /*
413893Srs135747  * Typical MP API ioctl interface specific Return Values
414893Srs135747  */
415893Srs135747 
416893Srs135747 #define	MP_IOCTL_ERROR_START			0x5533
417893Srs135747 #define	MP_MORE_DATA				(MP_IOCTL_ERROR_START + 1)
418893Srs135747 #define	MP_DRVR_INVALID_ID			(MP_IOCTL_ERROR_START + 2)
419893Srs135747 #define	MP_DRVR_ID_OBSOLETE			(MP_IOCTL_ERROR_START + 3)
420893Srs135747 #define	MP_DRVR_ACCESS_SYMMETRIC		(MP_IOCTL_ERROR_START + 4)
421893Srs135747 #define	MP_DRVR_PATH_UNAVAILABLE		(MP_IOCTL_ERROR_START + 5)
422893Srs135747 #define	MP_DRVR_IDS_NOT_ASSOCIATED		(MP_IOCTL_ERROR_START + 6)
423893Srs135747 #define	MP_DRVR_ILLEGAL_ACCESS_STATE_REQUEST	(MP_IOCTL_ERROR_START + 7)
4243410Scm136836 #define	MP_DRVR_IO_ERROR			(MP_IOCTL_ERROR_START + 8)
425893Srs135747 
426893Srs135747 /*
427893Srs135747  * Macros for OID operations
428893Srs135747  */
429893Srs135747 #define	MP_ID_SHIFT4MAJOR		32
430893Srs135747 #define	MP_GET_MAJOR_FROM_ID(id)	((id) >> MP_ID_SHIFT4MAJOR)
431893Srs135747 #define	MP_GET_INST_FROM_ID(id)		((id) & 0x00000000ffffffff)
432893Srs135747 #define	MP_STORE_INST_TO_ID(inst, id)	(((uint64_t)(inst)) | id)
433893Srs135747 #define	MP_STORE_MAJOR_TO_ID(major, id)	\
434893Srs135747 	((((uint64_t)(major)) << MP_ID_SHIFT4MAJOR) | id)
435893Srs135747 
436893Srs135747 /*
437893Srs135747  * Event Class and Sub-Class definitions
438893Srs135747  */
439893Srs135747 #define	EC_SUN_MP			"EC_sun_mp"
440893Srs135747 
441*12087SJiri.Svoboda@Sun.COM #define	ESC_SUN_MP_PLUGIN_CHANGE	"ESC_sun_mp_plugin_change"
442*12087SJiri.Svoboda@Sun.COM 
443893Srs135747 #define	ESC_SUN_MP_LU_CHANGE		"ESC_sun_mp_lu_change"
444*12087SJiri.Svoboda@Sun.COM #define	ESC_SUN_MP_LU_ADD		"ESC_sun_mp_lu_add"
445*12087SJiri.Svoboda@Sun.COM #define	ESC_SUN_MP_LU_REMOVE		"ESC_sun_mp_lu_remove"
446893Srs135747 
447893Srs135747 #define	ESC_SUN_MP_PATH_CHANGE		"ESC_sun_mp_path_change"
448893Srs135747 #define	ESC_SUN_MP_PATH_ADD		"ESC_sun_mp_path_add"
449893Srs135747 #define	ESC_SUN_MP_PATH_REMOVE		"ESC_sun_mp_path_remove"
450893Srs135747 
451893Srs135747 #define	ESC_SUN_MP_INIT_PORT_CHANGE	"ESC_sun_mp_init_port_change"
452893Srs135747 
453893Srs135747 #define	ESC_SUN_MP_TPG_CHANGE		"ESC_sun_mp_tpg_change"
454893Srs135747 #define	ESC_SUN_MP_TPG_ADD		"ESC_sun_mp_tpg_add"
455893Srs135747 #define	ESC_SUN_MP_TPG_REMOVE		"ESC_sun_mp_tpg_remove"
456893Srs135747 
457893Srs135747 #define	ESC_SUN_MP_TARGET_PORT_CHANGE	"ESC_sun_mp_target_port_change"
458893Srs135747 #define	ESC_SUN_MP_TARGET_PORT_ADD	"ESC_sun_mp_target_port_add"
459893Srs135747 #define	ESC_SUN_MP_TARGET_PORT_REMOVE	"ESC_sun_mp_target_port_remove"
460893Srs135747 
461893Srs135747 #define	ESC_SUN_MP_DEV_PROD_CHANGE	"ESC_sun_mp_dev_prod_change"
462893Srs135747 #define	ESC_SUN_MP_DEV_PROD_ADD		"ESC_sun_mp_dev_prod_add"
463893Srs135747 #define	ESC_SUN_MP_DEV_PROD_REMOVE	"ESC_sun_mp_dev_prod_remove"
464893Srs135747 
465893Srs135747 #ifdef __cplusplus
466893Srs135747 }
467893Srs135747 #endif
468893Srs135747 
469893Srs135747 #endif /* _SYS_SCSI_ADAPTERS_MPAPI_IMPL_H */
470