summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/fct_defines.h
blob: 79db9f12934cb59cc7a9af7450945f51c9f8587d (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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
/*
 * 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 2009 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */
#ifndef	_FCT_DEFINES_H
#define	_FCT_DEFINES_H

#ifdef	__cplusplus
extern "C" {
#endif

typedef	stmf_status_t	fct_status_t;
/*
 * Error codes
 */
#define	FCT_SUCCESS		STMF_SUCCESS
#define	FCT_FAILURE		STMF_TARGET_FAILURE
#define	FCT_FCA_FAILURE		(FCT_FAILURE | (uint64_t)0x0100000000000000)
#define	FCT_BUSY		STMF_BUSY
#define	FCT_ABORT_SUCCESS	STMF_ABORT_SUCCESS
#define	FCT_ABORTED		STMF_ABORTED
#define	FCT_NOT_FOUND		STMF_NOT_FOUND
#define	FCT_TIMEOUT		STMF_TIMEOUT

#define	FCT_WORKER_STUCK	(FCT_FAILURE | STMF_FSC(1))
#define	FCT_ALLOC_FAILURE	(FCT_FAILURE | STMF_FSC(2))
#define	FCT_LOCAL_PORT_OFFLINE	(FCT_FAILURE | STMF_FSC(3))
#define	FCT_NO_XCHG_RESOURCE	(FCT_FAILURE | STMF_FSC(4))
#define	FCT_NOT_LOGGED_IN	(FCT_FAILURE | STMF_FSC(5))
#define	FCT_ABTS_RECEIVED	(FCT_FAILURE | STMF_FSC(6))
#define	FCT_RPORT_SENT_REJECT	(FCT_FAILURE | STMF_FSC(7))

#define	FCT_REJECT_STATUS(reason, expln)	\
	(FCT_RPORT_SENT_REJECT | (((uint64_t)(reason)) << 8) | \
	    ((uint64_t)(expln)))

/*
 * Event codes
 */
#define	FCT_EVENT_LINK_UP	0x01
#define	FCT_EVENT_LINK_DOWN	0x02
#define	FCT_EVENT_LINK_RESET	0x03
#define	FCT_EVENT_ADAPTER_FATAL	0x04

/*
 * ELS OP codes
 */
#define	ELS_OP_LSRJT		0x01
#define	ELS_OP_ACC		0x02
#define	ELS_OP_PLOGI		0x03
#define	ELS_OP_FLOGI		0x04
#define	ELS_OP_LOGO		0x05
#define	ELS_OP_ABTX		0x06
#define	ELS_OP_RLS		0x0f
#define	ELS_OP_ECHO		0x10
#define	ELS_OP_REC		0x13
#define	ELS_OP_SRR		0x14
#define	ELS_OP_PRLI		0x20
#define	ELS_OP_PRLO		0x21
#define	ELS_OP_SCN		0x22
#define	ELS_OP_TPRLO		0x24
#define	ELS_OP_PDISC		0x50
#define	ELS_OP_ADISC		0x52
#define	ELS_OP_RSCN		0x61
#define	ELS_OP_SCR		0x62
#define	ELS_OP_RNID		0x78

/*
 * BLS replies
 */
#define	BLS_OP_BA_ACC		0x84
#define	BLS_OP_BA_RJT		0x85

/*
 * Name Service Command Codes
 */
#define	NS_GA_NXT		0x0100	/* Get All next */
#define	NS_GPN_ID		0x0112	/* Get Port Name */
#define	NS_GNN_ID		0x0113	/* Get Node Name */
#define	NS_GCS_ID		0x0114	/* Get Class Of service */
#define	NS_GFT_ID		0x0117	/* Get FC-4 Types */
#define	NS_GSPN_ID		0x0118	/* Get Sym Port name */
#define	NS_GPT_ID		0x011A	/* Get Port Type */
#define	NS_GID_PN		0x0121	/* Get port id for PN */
#define	NS_GID_NN		0x0131	/* Get port id for NN */
#define	NS_GIP_NN		0x0135	/* Get IP address */
#define	NS_GIPA_NN		0x0136	/* Get I.P.A */
#define	NS_GSNN_NN		0x0139	/* Get Sym Node name */
#define	NS_GNN_IP		0x0153	/* Get Node name for IP */
#define	NS_GIPA_IP		0x0156	/* Get I.P.A for IP */
#define	NS_GID_FT		0x0171	/* Get port Id for FC-4 type */
#define	NS_GID_PT		0x01A1	/* Get port Id for type */
#define	NS_RPN_ID		0x0212	/* Reg port name */
#define	NS_RNN_ID		0x0213	/* Reg node name */
#define	NS_RCS_ID		0x0214	/* Reg C.O.S */
#define	NS_RFT_ID		0x0217	/* Reg FC-4 Types */
#define	NS_RSPN_ID		0x0218	/* Reg Sym Port name */
#define	NS_RPT_ID		0x021A	/* Reg Port Type */
#define	NS_RIP_NN		0x0235	/* Reg I.P address */
#define	NS_RIPA_NN		0x0236	/* Reg I.P.A */
#define	NS_RSNN_NN		0x0239	/* Reg Sym Node name */
#define	NS_DA_ID		0x0300	/* De-Register all */

#define	CT_OP_RJT		0x8001
#define	CT_OP_ACC		0x8002

/*
 * PRLI bits
 */
#define	PRLI_BIT_WRITE_XRDY_DISABLED		0x00000001
#define	PRLI_BIT_READ_XRDY_DISABLED		0x00000002
#define	PRLI_BIT_TARGET_FUNCTION		0x00000010
#define	PRLI_BIT_INITIATOR_FUNCTION		0x00000020
#define	PRLI_BIT_DATA_OVERLAY_ALLOWED		0x00000040
#define	PRLI_BIT_FCP_CONF_ALLOWED		0x00000080
#define	PRLI_BIT_RETRY				0x00000100
#define	PRLI_BIT_TASK_RETRY_IDENT_REQUESTED	0x00000200
#define	PRLI_BIT_REC_SUPPORT			0x00000400

#define	FC_NS_CLASSF		0x01
#define	FC_NS_CLASS1		0x02
#define	FC_NS_CLASS2		0x04
#define	FC_NS_CLASS3		0x08
#define	FC_NS_CLASS4		0x10
#define	FC_NS_CLASS5		0x20
#define	FC_NS_CLASS6		0x40

/*
 * SCR function code
 */
#define	FC_SCR_FABRIC_REGISTRATION	0x01
#define	FC_SCR_NPORT_REGISTRATION	0x02
#define	FC_SCR_FULL_REGISTRATION	0x03
#define	FC_SCR_CLEAR_REGISTRATION	0xFF

/*
 * FCP_CNTL bits
 */
#define	FCP_CNTL_TASK_ATTR(fcp_cntl)	((((uint32_t)(fcp_cntl)) >> 16) & 7)
#define	TASK_ATTR_SIMPLE_Q		0
#define	TASK_ATTR_HEAD_OF_Q		1
#define	TASK_ATTR_ORDERED_Q		2
#define	TASK_ATTR_ACA_Q			4
#define	TASK_ATTR_UNTAGGED		5
#define	FCP_CNTL_IS_TASK_MGMT(fcp_cntl)	(((uint32_t)(fcp_cntl)) & 0xff00)
#define	FCP_CNTL_TERMINATE_TASK		0x8000
#define	FCP_CNTL_CLEAR_ACA		0x4000
#define	FCP_CNTL_TARGET_RESET		0x2000
#define	FCP_CNTL_LUN_RESET		0x1000
#define	FCP_CNTL_CLEAR_TASK_SET		0x0400
#define	FCP_CNTL_ABORT_TASK_SET		0x0200
#define	FCP_CNTL_READ_DATA		0x2
#define	FCP_CNTL_WRITE_DATA		0x1

/*
 * SCSI STATUS BITS
 */
#define	FCP_BIDI_RESP		0x8000
#define	FCP_BIDI_UNDER		0x4000
#define	FCP_BIDI_OVER		0x2000
#define	FCP_CONF_REQ		0x1000
#define	FCP_RESID_UNDER		0x0800
#define	FCP_RESID_OVER		0x0400
#define	FCP_SNS_LEN_VALID	0x0200
#define	FCP_RESP_LEN_VALID	0x0100

/*
 * Well known addresses ...
 */
#define	NPORT_ID_DOM_CTLR_START	0xFFFC01
#define	NPORT_ID_DOM_CTLR_END	0xFFFCFE

#define	FS_GENERAL_MULTICAST	0xFFFFF7
#define	FS_WELL_KNOWN_MULTICAST	0xFFFFF8
#define	FS_HUNT_GROUP		0xFFFFF9
#define	FS_MANAGEMENT_SERVER	0xFFFFFA
#define	FS_TIME_SERVER		0xFFFFFB
#define	FS_NAME_SERVER		0xFFFFFC
#define	FS_FABRIC_CONTROLLER	0xFFFFFD
#define	FS_FABRIC_F_PORT	0xFFFFFE
#define	FS_BROADCAST		0xFFFFFF

#define	FC_WELL_KNOWN_START	0xFFFFF0
#define	FC_WELL_KNOWN_END	0xFFFFFF
#define	FC_WELL_KNOWN_ADDR(x)	\
	((((x) >= FC_WELL_KNOWN_START) && ((x) <= FC_WELL_KNOWN_END)) ||\
	(((x) >= NPORT_ID_DOM_CTLR_START) && ((x) <= NPORT_ID_DOM_CTLR_END)))

#define	FC_WWN_LEN		8
/*
 * NB: FC_WWN_BUFLEN should be 64-bit aligned (divisible by 8).
 */
#define	FC_WWN_BUFLEN		(FC_WWN_LEN * 3)
#define	FC_WWN_STRLEN		(FC_WWN_BUFLEN - 1)	/* add trailing null */

struct fct_cmd;
struct fct_local_port;
struct fct_els;
struct fct_link_info;
struct fct_flogi_xchg;
struct fct_dbuf_store;

#ifdef	__cplusplus
}
#endif

#endif /* _FCT_DEFINES_H */