summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/stmf_defines.h
blob: bb9e442677a3f9b003e662e17fce589bd36c7f2d (plain)
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
/*
 * 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 (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
 */
#ifndef	_STMF_DEFINES_H
#define	_STMF_DEFINES_H

#ifdef	__cplusplus
extern "C" {
#endif

#define	BIT_0	0x1
#define	BIT_1	0x2
#define	BIT_2	0x4
#define	BIT_3	0x8
#define	BIT_4	0x10
#define	BIT_5	0x20
#define	BIT_6	0x40
#define	BIT_7	0x80
#define	BIT_8	0x100
#define	BIT_9	0x200
#define	BIT_10	0x400
#define	BIT_11	0x800
#define	BIT_12	0x1000
#define	BIT_13	0x2000
#define	BIT_14	0x4000
#define	BIT_15	0x8000
#define	BIT_16	0x10000
#define	BIT_17	0x20000
#define	BIT_18	0x40000
#define	BIT_19	0x80000
#define	BIT_20	0x100000
#define	BIT_21	0x200000
#define	BIT_22	0x400000
#define	BIT_23	0x800000
#define	BIT_24	0x1000000
#define	BIT_25	0x2000000
#define	BIT_26	0x4000000
#define	BIT_27	0x8000000
#define	BIT_28	0x10000000
#define	BIT_29	0x20000000
#define	BIT_30	0x40000000
#define	BIT_31	0x80000000

/*
 * stmf status definitions
 */
typedef	uint64_t		stmf_status_t;
#define	STMF_SUCCESS		((uint64_t)0)
#define	STMF_FAILURE		((uint64_t)0x1000000000000000)
#define	STMF_TARGET_FAILURE	((uint64_t)0x2000000000000000)
#define	STMF_LU_FAILURE		((uint64_t)0x3000000000000000)
#define	STMF_FSC(x)		(((uint64_t)(x)) << 32)
#define	STMF_GET_FSC(x)		((((uint64_t)(x)) >> 32) & 0xFFFFFF)
#define	STMF_RETRY_BIT		((uint64_t)0x0080000000000000)
#define	STMF_BUSY		(STMF_FAILURE | STMF_RETRY_BIT | STMF_FSC(0))
#define	STMF_NOT_FOUND		(STMF_FAILURE | STMF_FSC(1))
#define	STMF_INVALID_ARG	(STMF_FAILURE | STMF_FSC(2))
#define	STMF_LUN_TAKEN		(STMF_FAILURE | STMF_FSC(3))
#define	STMF_ABORTED		(STMF_FAILURE | STMF_FSC(5))
#define	STMF_ABORT_SUCCESS	(STMF_FAILURE | STMF_FSC(6))
#define	STMF_ALLOC_FAILURE	(STMF_FAILURE | STMF_FSC(7))
#define	STMF_ALREADY		(STMF_FAILURE | STMF_FSC(8))
#define	STMF_TIMEOUT		(STMF_FAILURE | STMF_FSC(9))
#define	STMF_NOT_SUPPORTED	(STMF_FAILURE | STMF_FSC(10))
#define	STMF_BADSTATE		(STMF_FAILURE | STMF_FSC(11))

#define	GET_BYTE_OFFSET(ptr, off)	(((uint8_t *)(ptr)) + (off))
#define	GET_STRUCT_SIZE(s)		((sizeof (s) + 7) & 0xfffffff8)
#define	READ_SCSI16(addr, type)		((((type)(((uint8_t *)(addr))[0])) \
								<< 8) |\
					((type)(((uint8_t *)(addr))[1])))
#define	READ_SCSI21(addr, type)		((((type)(((uint8_t *)(addr))[0] & \
								0x1F)) << 16)\
					    | (READ_SCSI16(addr+1, type)))
#define	READ_SCSI32(addr, type)		(((READ_SCSI16(addr, type)) << 16) |\
					    (READ_SCSI16((addr+2), type)))
#define	READ_SCSI64(addr, type)		(((READ_SCSI32(addr, type)) << 32) |\
					    (READ_SCSI32((addr+4), type)))
#define	PTR2INT(p, t)	((t)((ulong_t)(p)))
#define	INT2PTR(i, t)	((t)((ulong_t)(i)))

/*
 * CDB definitions that don't exist in commands.h
 */
#define	SCMD_SYNCHRONIZE_CACHE_G4		0x91

/*
 * Common key, asc, ascq for stmf_scsilib_send_status
 */
#define	STMF_SAA_MEDIUM_NOT_PRESENT		0X023A00
#define	STMF_SAA_LU_NO_ACCESS_TRANSITION	0X02040A
#define	STMF_SAA_LU_NO_ACCESS_STANDBY		0X02040B
#define	STMF_SAA_LU_NO_ACCESS_UNAVAIL		0X02040C
#define	STMF_SAA_WRITE_ERROR			0x030C00
#define	STMF_SAA_READ_ERROR			0x031100
#define	STMF_SAA_OPERATION_IN_PROGRESS		0x050016
#define	STMF_SAA_INVALID_FIELD_IN_CMD_IU	0x050E03
#define	STMF_SAA_PARAM_LIST_LENGTH_ERROR	0x051A00
#define	STMF_SAA_INVALID_OPCODE			0x052000
#define	STMF_SAA_INVALID_LU			0x052009
#define	STMF_SAA_LBA_OUT_OF_RANGE		0x052100
#define	STMF_SAA_INVALID_FIELD_IN_CDB		0x052400
#define	STMF_SAA_INVALID_FIELD_IN_PARAM_LIST	0x052600
#define	STMF_SAA_INVALID_RELEASE_OF_PR		0x052604
#define	STMF_SAA_MEDIUM_REMOVAL_PREVENTED	0x055302
#define	STMF_SAA_INSUFFICIENT_REG_RESOURCES	0x055504
#define	STMF_SAA_POR				0x062900
#define	STMF_SAA_MODE_PARAMETERS_CHANGED	0x062A01
#define	STMF_SAA_ASYMMETRIC_ACCESS_CHANGED	0x062A06
#define	STMF_SAA_CAPACITY_DATA_HAS_CHANGED	0x062A09
#define	STMF_SAA_REPORT_LUN_DATA_HAS_CHANGED	0x063F0E
#define	STMF_SAA_WRITE_PROTECTED		0X072700

struct stmf_lu_provider;
struct stmf_lu;
struct stmf_port_provider;
struct stmf_local_port;
struct stmf_remote_port;
struct stmf_scsi_session;
struct scsi_task;
struct scsi_devid_desc;
struct scsi_transport_id;
struct stmf_data_buf;
struct stmf_lun_map;
struct scsi_devid_desc;

#ifdef	__cplusplus
}
#endif

#endif	/* _STMF_DEFINES_H */