xref: /illumos-gate/usr/src/uts/common/sys/stmf_defines.h (revision d0f40dc6a997c84bacf5f9ba83d57a95495c399b)
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  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 #ifndef	_STMF_DEFINES_H
26 #define	_STMF_DEFINES_H
27 
28 #ifdef	__cplusplus
29 extern "C" {
30 #endif
31 
32 #define	BIT_0	0x1
33 #define	BIT_1	0x2
34 #define	BIT_2	0x4
35 #define	BIT_3	0x8
36 #define	BIT_4	0x10
37 #define	BIT_5	0x20
38 #define	BIT_6	0x40
39 #define	BIT_7	0x80
40 #define	BIT_8	0x100
41 #define	BIT_9	0x200
42 #define	BIT_10	0x400
43 #define	BIT_11	0x800
44 #define	BIT_12	0x1000
45 #define	BIT_13	0x2000
46 #define	BIT_14	0x4000
47 #define	BIT_15	0x8000
48 #define	BIT_16	0x10000
49 #define	BIT_17	0x20000
50 #define	BIT_18	0x40000
51 #define	BIT_19	0x80000
52 #define	BIT_20	0x100000
53 #define	BIT_21	0x200000
54 #define	BIT_22	0x400000
55 #define	BIT_23	0x800000
56 #define	BIT_24	0x1000000
57 #define	BIT_25	0x2000000
58 #define	BIT_26	0x4000000
59 #define	BIT_27	0x8000000
60 #define	BIT_28	0x10000000
61 #define	BIT_29	0x20000000
62 #define	BIT_30	0x40000000
63 #define	BIT_31	0x80000000
64 
65 /*
66  * stmf status definitions
67  */
68 typedef	uint64_t		stmf_status_t;
69 #define	STMF_SUCCESS		((uint64_t)0)
70 #define	STMF_FAILURE		((uint64_t)0x1000000000000000)
71 #define	STMF_TARGET_FAILURE	((uint64_t)0x2000000000000000)
72 #define	STMF_LU_FAILURE		((uint64_t)0x3000000000000000)
73 #define	STMF_FSC(x)		(((uint64_t)(x)) << 32)
74 #define	STMF_GET_FSC(x)		((((uint64_t)(x)) >> 32) & 0xFFFFFF)
75 #define	STMF_RETRY_BIT		((uint64_t)0x0080000000000000)
76 #define	STMF_BUSY		(STMF_FAILURE | STMF_RETRY_BIT | STMF_FSC(0))
77 #define	STMF_NOT_FOUND		(STMF_FAILURE | STMF_FSC(1))
78 #define	STMF_INVALID_ARG	(STMF_FAILURE | STMF_FSC(2))
79 #define	STMF_LUN_TAKEN		(STMF_FAILURE | STMF_FSC(3))
80 #define	STMF_ABORTED		(STMF_FAILURE | STMF_FSC(5))
81 #define	STMF_ABORT_SUCCESS	(STMF_FAILURE | STMF_FSC(6))
82 #define	STMF_ALLOC_FAILURE	(STMF_FAILURE | STMF_FSC(7))
83 #define	STMF_ALREADY		(STMF_FAILURE | STMF_FSC(8))
84 #define	STMF_TIMEOUT		(STMF_FAILURE | STMF_FSC(9))
85 #define	STMF_NOT_SUPPORTED	(STMF_FAILURE | STMF_FSC(10))
86 #define	STMF_BADSTATE		(STMF_FAILURE | STMF_FSC(11))
87 
88 #define	GET_BYTE_OFFSET(ptr, off)	(((uint8_t *)(ptr)) + (off))
89 #define	GET_STRUCT_SIZE(s)		((sizeof (s) + 7) & 0xfffffff8)
90 #define	READ_SCSI16(addr, type)		((((type)(((uint8_t *)(addr))[0])) \
91 								<< 8) |\
92 					((type)(((uint8_t *)(addr))[1])))
93 #define	READ_SCSI21(addr, type)		((((type)(((uint8_t *)(addr))[0] & \
94 								0x1F)) << 16)\
95 					    | (READ_SCSI16(addr+1, type)))
96 #define	READ_SCSI32(addr, type)		(((READ_SCSI16(addr, type)) << 16) |\
97 					    (READ_SCSI16((addr+2), type)))
98 #define	READ_SCSI64(addr, type)		(((READ_SCSI32(addr, type)) << 32) |\
99 					    (READ_SCSI32((addr+4), type)))
100 #define	PTR2INT(p, t)	((t)((ulong_t)(p)))
101 #define	INT2PTR(i, t)	((t)((ulong_t)(i)))
102 
103 /*
104  * CDB definitions that don't exist in commands.h
105  */
106 #define	SCMD_SYNCHRONIZE_CACHE_G4		0x91
107 
108 /*
109  * Common key, asc, ascq for stmf_scsilib_send_status
110  */
111 #define	STMF_SAA_MEDIUM_NOT_PRESENT		0X023A00
112 #define	STMF_SAA_LU_NO_ACCESS_TRANSITION	0X02040A
113 #define	STMF_SAA_LU_NO_ACCESS_STANDBY		0X02040B
114 #define	STMF_SAA_LU_NO_ACCESS_UNAVAIL		0X02040C
115 #define	STMF_SAA_WRITE_ERROR			0x030C00
116 #define	STMF_SAA_READ_ERROR			0x031100
117 #define	STMF_SAA_OPERATION_IN_PROGRESS		0x050016
118 #define	STMF_SAA_INVALID_FIELD_IN_CMD_IU	0x050E03
119 #define	STMF_SAA_PARAM_LIST_LENGTH_ERROR	0x051A00
120 #define	STMF_SAA_INVALID_OPCODE			0x052000
121 #define	STMF_SAA_INVALID_LU			0x052009
122 #define	STMF_SAA_LBA_OUT_OF_RANGE		0x052100
123 #define	STMF_SAA_INVALID_FIELD_IN_CDB		0x052400
124 #define	STMF_SAA_INVALID_FIELD_IN_PARAM_LIST	0x052600
125 #define	STMF_SAA_INVALID_RELEASE_OF_PR		0x052604
126 #define	STMF_SAA_MEDIUM_REMOVAL_PREVENTED	0x055302
127 #define	STMF_SAA_INSUFFICIENT_REG_RESOURCES	0x055504
128 #define	STMF_SAA_POR				0x062900
129 #define	STMF_SAA_MODE_PARAMETERS_CHANGED	0x062A01
130 #define	STMF_SAA_ASYMMETRIC_ACCESS_CHANGED	0x062A06
131 #define	STMF_SAA_CAPACITY_DATA_HAS_CHANGED	0x062A09
132 #define	STMF_SAA_REPORT_LUN_DATA_HAS_CHANGED	0x063F0E
133 #define	STMF_SAA_WRITE_PROTECTED		0X072700
134 
135 struct stmf_lu_provider;
136 struct stmf_lu;
137 struct stmf_port_provider;
138 struct stmf_local_port;
139 struct stmf_scsi_session;
140 struct scsi_task;
141 struct scsi_devid_desc;
142 struct stmf_data_buf;
143 struct stmf_lun_map;
144 struct scsi_devid_desc;
145 
146 #ifdef	__cplusplus
147 }
148 #endif
149 
150 #endif	/* _STMF_DEFINES_H */
151