xref: /onnv-gate/usr/src/uts/common/io/comstar/port/srpt/srp.h (revision 9684:2e0b0fc2d0d3)
1*9684SSusan.Gleeson@Sun.COM /*
2*9684SSusan.Gleeson@Sun.COM  * CDDL HEADER START
3*9684SSusan.Gleeson@Sun.COM  *
4*9684SSusan.Gleeson@Sun.COM  * The contents of this file are subject to the terms of the
5*9684SSusan.Gleeson@Sun.COM  * Common Development and Distribution License (the "License").
6*9684SSusan.Gleeson@Sun.COM  * You may not use this file except in compliance with the License.
7*9684SSusan.Gleeson@Sun.COM  *
8*9684SSusan.Gleeson@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*9684SSusan.Gleeson@Sun.COM  * or http://www.opensolaris.org/os/licensing.
10*9684SSusan.Gleeson@Sun.COM  * See the License for the specific language governing permissions
11*9684SSusan.Gleeson@Sun.COM  * and limitations under the License.
12*9684SSusan.Gleeson@Sun.COM  *
13*9684SSusan.Gleeson@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*9684SSusan.Gleeson@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*9684SSusan.Gleeson@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
16*9684SSusan.Gleeson@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
17*9684SSusan.Gleeson@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
18*9684SSusan.Gleeson@Sun.COM  *
19*9684SSusan.Gleeson@Sun.COM  * CDDL HEADER END
20*9684SSusan.Gleeson@Sun.COM  */
21*9684SSusan.Gleeson@Sun.COM 
22*9684SSusan.Gleeson@Sun.COM /*
23*9684SSusan.Gleeson@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24*9684SSusan.Gleeson@Sun.COM  * Use is subject to license terms.
25*9684SSusan.Gleeson@Sun.COM  */
26*9684SSusan.Gleeson@Sun.COM 
27*9684SSusan.Gleeson@Sun.COM #ifndef _SRP_H
28*9684SSusan.Gleeson@Sun.COM #define	_SRP_H
29*9684SSusan.Gleeson@Sun.COM 
30*9684SSusan.Gleeson@Sun.COM /*
31*9684SSusan.Gleeson@Sun.COM  * General SCSI RDMA Protocol generic defines
32*9684SSusan.Gleeson@Sun.COM  */
33*9684SSusan.Gleeson@Sun.COM 
34*9684SSusan.Gleeson@Sun.COM #ifdef	__cplusplus
35*9684SSusan.Gleeson@Sun.COM extern "C" {
36*9684SSusan.Gleeson@Sun.COM #endif
37*9684SSusan.Gleeson@Sun.COM 
38*9684SSusan.Gleeson@Sun.COM /*
39*9684SSusan.Gleeson@Sun.COM  * The following defines and structures are based on revision 16A of
40*9684SSusan.Gleeson@Sun.COM  * the T10 Project 1415-D SRP Protocol specification.
41*9684SSusan.Gleeson@Sun.COM  */
42*9684SSusan.Gleeson@Sun.COM 
43*9684SSusan.Gleeson@Sun.COM /* Protocol revsion information */
44*9684SSusan.Gleeson@Sun.COM enum {
45*9684SSusan.Gleeson@Sun.COM 	SRP_PROTOCOL		= 0x0108,
46*9684SSusan.Gleeson@Sun.COM 	SRP_PROTOCOL_VERSION	= 0x0001,
47*9684SSusan.Gleeson@Sun.COM 	SRP_REV_16A_IO_CLASS	= 0x0100,
48*9684SSusan.Gleeson@Sun.COM 	SRP_REV_10_IO_CLASS	= 0xFF00,	/* Old targets */
49*9684SSusan.Gleeson@Sun.COM 	SRP_IO_SUBCLASS		= 0x690E
50*9684SSusan.Gleeson@Sun.COM };
51*9684SSusan.Gleeson@Sun.COM 
52*9684SSusan.Gleeson@Sun.COM /* SRP memory descriptors; direct and indirect formats */
53*9684SSusan.Gleeson@Sun.COM typedef struct srp_direct_desc_s {
54*9684SSusan.Gleeson@Sun.COM 	uint64_t	dd_vaddr;
55*9684SSusan.Gleeson@Sun.COM 	uint32_t	dd_hdl;
56*9684SSusan.Gleeson@Sun.COM 	uint32_t	dd_len;
57*9684SSusan.Gleeson@Sun.COM } srp_direct_desc_t;
58*9684SSusan.Gleeson@Sun.COM 
59*9684SSusan.Gleeson@Sun.COM #pragma pack(1)
60*9684SSusan.Gleeson@Sun.COM typedef struct srp_indirect_desc_s {
61*9684SSusan.Gleeson@Sun.COM 	srp_direct_desc_t	id_table;
62*9684SSusan.Gleeson@Sun.COM 	uint32_t		id_len;
63*9684SSusan.Gleeson@Sun.COM 	srp_direct_desc_t	id_desc[1];
64*9684SSusan.Gleeson@Sun.COM } srp_indirect_desc_t;
65*9684SSusan.Gleeson@Sun.COM #pragma pack()
66*9684SSusan.Gleeson@Sun.COM enum {
67*9684SSusan.Gleeson@Sun.COM 	SRP_DIRECT_BUFR_DESC	= 1 << 1,
68*9684SSusan.Gleeson@Sun.COM 	SRP_INDIRECT_BUFR_DESC	= 1 << 2
69*9684SSusan.Gleeson@Sun.COM };
70*9684SSusan.Gleeson@Sun.COM 
71*9684SSusan.Gleeson@Sun.COM /* General constants */
72*9684SSusan.Gleeson@Sun.COM enum {
73*9684SSusan.Gleeson@Sun.COM 	SRP_CDB_SIZE		= 16,
74*9684SSusan.Gleeson@Sun.COM 	SRP_LUN_SIZE		= 8,
75*9684SSusan.Gleeson@Sun.COM 	SRP_PORT_ID_LEN		= 16,
76*9684SSusan.Gleeson@Sun.COM 	SRP_MIN_IU_SIZE		= 64
77*9684SSusan.Gleeson@Sun.COM };
78*9684SSusan.Gleeson@Sun.COM 
79*9684SSusan.Gleeson@Sun.COM /* SRP IU types */
80*9684SSusan.Gleeson@Sun.COM enum {
81*9684SSusan.Gleeson@Sun.COM 	SRP_IU_LOGIN_REQ	= 0x00,
82*9684SSusan.Gleeson@Sun.COM 	SRP_IU_TASK_MGMT	= 0x01,
83*9684SSusan.Gleeson@Sun.COM 	SRP_IU_CMD		= 0x02,
84*9684SSusan.Gleeson@Sun.COM 	SRP_IU_I_LOGOUT		= 0x03,
85*9684SSusan.Gleeson@Sun.COM 	SRP_IU_LOGIN_RSP	= 0xC0,
86*9684SSusan.Gleeson@Sun.COM 	SRP_IU_RSP		= 0xC1,
87*9684SSusan.Gleeson@Sun.COM 	SRP_IU_LOGIN_REJ	= 0xC2,
88*9684SSusan.Gleeson@Sun.COM 	SRP_IU_T_LOGOUT		= 0x80,
89*9684SSusan.Gleeson@Sun.COM 	SRP_IU_CRED_REQ		= 0x81,
90*9684SSusan.Gleeson@Sun.COM 	SRP_IU_AER_REQ		= 0x82,
91*9684SSusan.Gleeson@Sun.COM 	SRP_IU_CRED_RSP		= 0x41,
92*9684SSusan.Gleeson@Sun.COM 	SRP_IU_AER_RSP		= 0x42
93*9684SSusan.Gleeson@Sun.COM };
94*9684SSusan.Gleeson@Sun.COM 
95*9684SSusan.Gleeson@Sun.COM /* SRP Initiator Login IU, 64 bytes */
96*9684SSusan.Gleeson@Sun.COM enum {
97*9684SSusan.Gleeson@Sun.COM 	SRP_LOGIN_MULTI_CH_SINGLE		= 0,
98*9684SSusan.Gleeson@Sun.COM 	SRP_LOGIN_MULTI_CH_MULTIPLE		= 1,
99*9684SSusan.Gleeson@Sun.COM 	SRP_LOGIN_MULTI_CH_MASK			= 0x03,
100*9684SSusan.Gleeson@Sun.COM 	SRP_LOGIN_AESOL_NOTIFICATION		= 1 << 6,
101*9684SSusan.Gleeson@Sun.COM 	SRP_LOGIN_CRSOL_NOTIFICATION		= 1 << 5,
102*9684SSusan.Gleeson@Sun.COM 	SRP_LOGIN_LOSOL_NOTIFICATION		= 1 << 4
103*9684SSusan.Gleeson@Sun.COM };
104*9684SSusan.Gleeson@Sun.COM 
105*9684SSusan.Gleeson@Sun.COM typedef struct srp_login_req_s {
106*9684SSusan.Gleeson@Sun.COM 	uint8_t		lreq_type;
107*9684SSusan.Gleeson@Sun.COM 	uint8_t		lreq_rsvd[7];
108*9684SSusan.Gleeson@Sun.COM 	uint64_t	lreq_tag;
109*9684SSusan.Gleeson@Sun.COM 	uint32_t	lreq_req_it_iu_len;
110*9684SSusan.Gleeson@Sun.COM 	uint8_t		lreq_rsvd2[4];
111*9684SSusan.Gleeson@Sun.COM 	uint16_t	lreq_buf_format;
112*9684SSusan.Gleeson@Sun.COM 	uint8_t		lreq_req_flags;
113*9684SSusan.Gleeson@Sun.COM 	uint8_t		lreq_rsvd3[5];
114*9684SSusan.Gleeson@Sun.COM 	uint8_t		lreq_initiator_port_id[SRP_PORT_ID_LEN];
115*9684SSusan.Gleeson@Sun.COM 	uint8_t		lreq_target_port_id[SRP_PORT_ID_LEN];
116*9684SSusan.Gleeson@Sun.COM } srp_login_req_t;
117*9684SSusan.Gleeson@Sun.COM 
118*9684SSusan.Gleeson@Sun.COM /* SRP Task Management IU, 64 bytes. */
119*9684SSusan.Gleeson@Sun.COM enum {
120*9684SSusan.Gleeson@Sun.COM 	SRP_TSK_MGMT_SUCCESSFUL_COMP_SOLNT	= 1 << 1,
121*9684SSusan.Gleeson@Sun.COM 	SRP_TSK_MGMT_UNSUCCESSFUL_COMP_SOLNT	= 1 << 2
122*9684SSusan.Gleeson@Sun.COM };
123*9684SSusan.Gleeson@Sun.COM 
124*9684SSusan.Gleeson@Sun.COM enum {
125*9684SSusan.Gleeson@Sun.COM 	SRP_TSK_ATTR_QTYPE_SIMPLE	= 0,
126*9684SSusan.Gleeson@Sun.COM 	SRP_TSK_ATTR_QTYPE_HEAD_OF_Q	= 1,
127*9684SSusan.Gleeson@Sun.COM 	SRP_TSK_ATTR_QTYPE_ORDERED	= 2,
128*9684SSusan.Gleeson@Sun.COM 	SRP_TSK_ATTR_QTYPE_ACA_Q_TAG	= 4
129*9684SSusan.Gleeson@Sun.COM };
130*9684SSusan.Gleeson@Sun.COM 
131*9684SSusan.Gleeson@Sun.COM enum {
132*9684SSusan.Gleeson@Sun.COM 	SRP_TSK_MGMT_ABORT_TASK		= 1,
133*9684SSusan.Gleeson@Sun.COM 	SRP_TSK_MGMT_ABORT_TASK_SET	= 2,
134*9684SSusan.Gleeson@Sun.COM 	SRP_TSK_MGMT_CLEAR_TASK_SET	= 4,
135*9684SSusan.Gleeson@Sun.COM 	SRP_TSK_MGMT_LUN_RESET		= 8,
136*9684SSusan.Gleeson@Sun.COM 	SRP_TSK_MGMT_CLEAR_ACA		= 0x40
137*9684SSusan.Gleeson@Sun.COM };
138*9684SSusan.Gleeson@Sun.COM 
139*9684SSusan.Gleeson@Sun.COM typedef struct srp_tsk_mgmt_s {
140*9684SSusan.Gleeson@Sun.COM 	uint8_t		tm_type;
141*9684SSusan.Gleeson@Sun.COM 	uint8_t		tm_not_flags;
142*9684SSusan.Gleeson@Sun.COM 	uint8_t		tm_rsvd[6];
143*9684SSusan.Gleeson@Sun.COM 	uint64_t	tm_tag;
144*9684SSusan.Gleeson@Sun.COM 	uint8_t		tm_rsvd2[4];
145*9684SSusan.Gleeson@Sun.COM 	uint8_t		tm_lun[8];
146*9684SSusan.Gleeson@Sun.COM 	uint8_t		tm_rsvd3[2];
147*9684SSusan.Gleeson@Sun.COM 	uint8_t		tm_function;
148*9684SSusan.Gleeson@Sun.COM 	uint8_t		tm_rsvd4;
149*9684SSusan.Gleeson@Sun.COM 	uint64_t	tm_task_tag;
150*9684SSusan.Gleeson@Sun.COM 	uint8_t		tm_rsvd5[8];
151*9684SSusan.Gleeson@Sun.COM } srp_tsk_mgmt_t;
152*9684SSusan.Gleeson@Sun.COM 
153*9684SSusan.Gleeson@Sun.COM /* SRP Command Request IU, 48 bytes minimum */
154*9684SSusan.Gleeson@Sun.COM enum {
155*9684SSusan.Gleeson@Sun.COM 	SRP_DATA_DESC_NONE		= 0,
156*9684SSusan.Gleeson@Sun.COM 	SRP_DATA_DESC_DIRECT		= 1,
157*9684SSusan.Gleeson@Sun.COM 	SRP_DATA_DESC_INDIRECT		= 2
158*9684SSusan.Gleeson@Sun.COM };
159*9684SSusan.Gleeson@Sun.COM 
160*9684SSusan.Gleeson@Sun.COM #pragma pack(1)
161*9684SSusan.Gleeson@Sun.COM typedef struct srp_cmd_req_s {
162*9684SSusan.Gleeson@Sun.COM 	uint8_t		cr_type;
163*9684SSusan.Gleeson@Sun.COM 	uint8_t		cr_not_flags;
164*9684SSusan.Gleeson@Sun.COM 	uint8_t		cr_rsvd[3];
165*9684SSusan.Gleeson@Sun.COM 	uint8_t		cr_buf_fmt;
166*9684SSusan.Gleeson@Sun.COM 	uint8_t		cr_docnt;
167*9684SSusan.Gleeson@Sun.COM 	uint8_t		cr_dicnt;
168*9684SSusan.Gleeson@Sun.COM 	uint64_t	cr_tag;
169*9684SSusan.Gleeson@Sun.COM 	uint8_t		cr_rsvd2[4];
170*9684SSusan.Gleeson@Sun.COM 	uint8_t		cr_lun[8];
171*9684SSusan.Gleeson@Sun.COM 	uint8_t		cr_rsvd3;
172*9684SSusan.Gleeson@Sun.COM 	uint8_t		cr_task_attr;
173*9684SSusan.Gleeson@Sun.COM 	uint8_t		cr_rsvd4;
174*9684SSusan.Gleeson@Sun.COM 	uint8_t		cr_add_cdb_len;
175*9684SSusan.Gleeson@Sun.COM 	uint8_t		cr_cdb[SRP_CDB_SIZE];
176*9684SSusan.Gleeson@Sun.COM 	uint8_t		cr_add_data;
177*9684SSusan.Gleeson@Sun.COM } srp_cmd_req_t;
178*9684SSusan.Gleeson@Sun.COM #pragma pack()
179*9684SSusan.Gleeson@Sun.COM 
180*9684SSusan.Gleeson@Sun.COM /* SRP Initiator Logout IU, 16 bytes */
181*9684SSusan.Gleeson@Sun.COM typedef struct srp_i_logout_s {
182*9684SSusan.Gleeson@Sun.COM 	uint8_t		il_type;
183*9684SSusan.Gleeson@Sun.COM 	uint8_t		il_rsvd[7];
184*9684SSusan.Gleeson@Sun.COM 	uint64_t	il_tag;
185*9684SSusan.Gleeson@Sun.COM } srp_i_logout_t;
186*9684SSusan.Gleeson@Sun.COM 
187*9684SSusan.Gleeson@Sun.COM /* SRP Login Response IU, 52 bytes */
188*9684SSusan.Gleeson@Sun.COM enum {
189*9684SSusan.Gleeson@Sun.COM 	SRP_MULTI_CH_RESULT_NO_EXISTING		= 0,
190*9684SSusan.Gleeson@Sun.COM 	SRP_MULTI_CH_RESULT_TERM_EXISTING	= 1,
191*9684SSusan.Gleeson@Sun.COM 	SRP_MULTI_CH_RESULT_EXISTING_EXISTS  	= 1 << 1,
192*9684SSusan.Gleeson@Sun.COM 	SRP_SOLNT_SUPPORTED			= 1 << 4
193*9684SSusan.Gleeson@Sun.COM };
194*9684SSusan.Gleeson@Sun.COM 
195*9684SSusan.Gleeson@Sun.COM #define	SRP_LOGIN_RSP_SIZE	52
196*9684SSusan.Gleeson@Sun.COM 
197*9684SSusan.Gleeson@Sun.COM typedef struct srp_login_rsp_s {
198*9684SSusan.Gleeson@Sun.COM 	uint8_t		lrsp_type;
199*9684SSusan.Gleeson@Sun.COM 	uint8_t		lrsp_rsvd[3];
200*9684SSusan.Gleeson@Sun.COM 	uint32_t	lrsp_req_limit_delta;
201*9684SSusan.Gleeson@Sun.COM 	uint64_t	lrsp_tag;
202*9684SSusan.Gleeson@Sun.COM 	uint32_t	lrsp_max_it_iu_len;
203*9684SSusan.Gleeson@Sun.COM 	uint32_t	lrsp_max_ti_iu_len;
204*9684SSusan.Gleeson@Sun.COM 	uint16_t	lrsp_sup_buf_format;
205*9684SSusan.Gleeson@Sun.COM 	uint8_t		lrsp_rsp_flags;
206*9684SSusan.Gleeson@Sun.COM 	uint8_t		lrsp_rsvd2[25];
207*9684SSusan.Gleeson@Sun.COM } srp_login_rsp_t;
208*9684SSusan.Gleeson@Sun.COM 
209*9684SSusan.Gleeson@Sun.COM /* SRP Response IU, 36 byte minimum */
210*9684SSusan.Gleeson@Sun.COM enum {
211*9684SSusan.Gleeson@Sun.COM 	SRP_RSP_SOLICITED_NOTIFICATION = 1
212*9684SSusan.Gleeson@Sun.COM };
213*9684SSusan.Gleeson@Sun.COM 
214*9684SSusan.Gleeson@Sun.COM enum {
215*9684SSusan.Gleeson@Sun.COM 	SRP_RSP_VALID		= 1,
216*9684SSusan.Gleeson@Sun.COM 	SRP_RSP_SNS_VALID	= 1 << 1,
217*9684SSusan.Gleeson@Sun.COM 	SRP_RSP_DO_OVER		= 1 << 2,
218*9684SSusan.Gleeson@Sun.COM 	SRP_RSP_DO_UNDER	= 1 << 3,
219*9684SSusan.Gleeson@Sun.COM 	SRP_RSP_DI_OVER		= 1 << 4,
220*9684SSusan.Gleeson@Sun.COM 	SRP_RSP_DI_UNDER	= 1 << 5
221*9684SSusan.Gleeson@Sun.COM };
222*9684SSusan.Gleeson@Sun.COM 
223*9684SSusan.Gleeson@Sun.COM /* Additional response data used for task mgmt responses */
224*9684SSusan.Gleeson@Sun.COM enum {
225*9684SSusan.Gleeson@Sun.COM 	SRP_TM_SUCCESS		= 0,
226*9684SSusan.Gleeson@Sun.COM 	SRP_TM_REQ_INVALID	= 2,
227*9684SSusan.Gleeson@Sun.COM 	SRP_TM_NOT_SUPPORTED	= 4,
228*9684SSusan.Gleeson@Sun.COM 	SRP_TM_FAILED		= 5
229*9684SSusan.Gleeson@Sun.COM };
230*9684SSusan.Gleeson@Sun.COM 
231*9684SSusan.Gleeson@Sun.COM typedef struct srp_rsp_data_s {
232*9684SSusan.Gleeson@Sun.COM 	uint8_t		rd_rsvd[3];
233*9684SSusan.Gleeson@Sun.COM 	uint8_t		rd_rsp_status;
234*9684SSusan.Gleeson@Sun.COM } srp_rsp_data_t;
235*9684SSusan.Gleeson@Sun.COM 
236*9684SSusan.Gleeson@Sun.COM #define	SRP_RSP_SIZE		36
237*9684SSusan.Gleeson@Sun.COM 
238*9684SSusan.Gleeson@Sun.COM typedef struct srp_rsp_s {
239*9684SSusan.Gleeson@Sun.COM 	uint8_t		rsp_type;
240*9684SSusan.Gleeson@Sun.COM 	uint8_t		rsp_sol_not;
241*9684SSusan.Gleeson@Sun.COM 	uint8_t		rsp_rsvd[2];
242*9684SSusan.Gleeson@Sun.COM 	uint32_t	rsp_req_limit_delta;
243*9684SSusan.Gleeson@Sun.COM 	uint64_t	rsp_tag;
244*9684SSusan.Gleeson@Sun.COM 	uint8_t		rsp_rsvd2[2];
245*9684SSusan.Gleeson@Sun.COM 	uint8_t		rsp_flags;
246*9684SSusan.Gleeson@Sun.COM 	uint8_t		rsp_status;
247*9684SSusan.Gleeson@Sun.COM 	uint32_t	rsp_do_resid_cnt;
248*9684SSusan.Gleeson@Sun.COM 	uint32_t	rsp_di_resid_cnt;
249*9684SSusan.Gleeson@Sun.COM 	uint32_t	rsp_sense_data_len;
250*9684SSusan.Gleeson@Sun.COM 	uint32_t	rsp_data_len;
251*9684SSusan.Gleeson@Sun.COM } srp_rsp_t;
252*9684SSusan.Gleeson@Sun.COM 
253*9684SSusan.Gleeson@Sun.COM /* SRP Login Reject IU, 32 bytes */
254*9684SSusan.Gleeson@Sun.COM enum {
255*9684SSusan.Gleeson@Sun.COM 	SRP_LOGIN_REJ_NO_REASON				= 0x00010000,
256*9684SSusan.Gleeson@Sun.COM 	SRP_LOGIN_REJ_INSUFFICIENT_CH_RESOURCES		= 0x00010001,
257*9684SSusan.Gleeson@Sun.COM 	SRP_LOGIN_REJ_REQ_IT_IU_LENGTH_TOO_LARGE	= 0x00010002,
258*9684SSusan.Gleeson@Sun.COM 	SRP_LOGIN_REJ_UNABLE_TO_ASSOCIATE_I_T_NEXUS	= 0x00010003,
259*9684SSusan.Gleeson@Sun.COM 	SRP_LOGIN_REJ_REQ_BUF_FORMAT_NOT_SUPPORTED	= 0x00010004,
260*9684SSusan.Gleeson@Sun.COM 	SRP_LOGIN_REJ_MULTI_CH_NOT_SUPPORTED		= 0x00010005,
261*9684SSusan.Gleeson@Sun.COM 	SRP_LOGIN_REJ_INIT_CH_LIMIT			= 0x00010006
262*9684SSusan.Gleeson@Sun.COM };
263*9684SSusan.Gleeson@Sun.COM 
264*9684SSusan.Gleeson@Sun.COM typedef struct srp_login_rej_s {
265*9684SSusan.Gleeson@Sun.COM 	uint8_t		lrej_type;
266*9684SSusan.Gleeson@Sun.COM 	uint8_t		lrej_rsvd[3];
267*9684SSusan.Gleeson@Sun.COM 	uint32_t	lrej_reason;
268*9684SSusan.Gleeson@Sun.COM 	uint64_t	lrej_tag;
269*9684SSusan.Gleeson@Sun.COM 	uint8_t		lrej_rsvd2[8];
270*9684SSusan.Gleeson@Sun.COM 	uint16_t	lrej_sup_buf_format;
271*9684SSusan.Gleeson@Sun.COM 	uint8_t		lrej_rsvd3[6];
272*9684SSusan.Gleeson@Sun.COM } srp_login_rej_t;
273*9684SSusan.Gleeson@Sun.COM 
274*9684SSusan.Gleeson@Sun.COM /* SRP Target Logout IU, 16 bytes */
275*9684SSusan.Gleeson@Sun.COM enum {
276*9684SSusan.Gleeson@Sun.COM 	SRP_T_LOGOUT_NO_REASON			= 0,
277*9684SSusan.Gleeson@Sun.COM 	SRP_T_LOGOUT_INACTIVE			= 1,
278*9684SSusan.Gleeson@Sun.COM 	SRP_T_LOGOUT_INVALID_IU_TYPE		= 2,
279*9684SSusan.Gleeson@Sun.COM 	SRP_T_LOGOUT_UNEXPECTED_INITIATOR_RSP	= 3,
280*9684SSusan.Gleeson@Sun.COM 	SRP_T_LOGOUT_MULTI_CHANNEL_ACTION	= 4,
281*9684SSusan.Gleeson@Sun.COM 	SRP_T_LOGOUT_UNSUPPORTED_DO_FORMAT	= 6,
282*9684SSusan.Gleeson@Sun.COM 	SRP_T_LOGOUT_UNSUPPORTED_DI_FORMAT	= 7,
283*9684SSusan.Gleeson@Sun.COM 	SRP_T_LOGOUT_INVALID_IU_LENGTH		= 8
284*9684SSusan.Gleeson@Sun.COM };
285*9684SSusan.Gleeson@Sun.COM 
286*9684SSusan.Gleeson@Sun.COM typedef struct srp_t_logout_s {
287*9684SSusan.Gleeson@Sun.COM 	uint8_t		tl_type;
288*9684SSusan.Gleeson@Sun.COM 	uint8_t		tl_sol_not;
289*9684SSusan.Gleeson@Sun.COM 	uint8_t		tl_rsvd[2];
290*9684SSusan.Gleeson@Sun.COM 	uint32_t	tl_reason;
291*9684SSusan.Gleeson@Sun.COM 	uint64_t	tl_tag;
292*9684SSusan.Gleeson@Sun.COM } srp_t_logout_t;
293*9684SSusan.Gleeson@Sun.COM 
294*9684SSusan.Gleeson@Sun.COM #ifdef	__cplusplus
295*9684SSusan.Gleeson@Sun.COM }
296*9684SSusan.Gleeson@Sun.COM #endif
297*9684SSusan.Gleeson@Sun.COM 
298*9684SSusan.Gleeson@Sun.COM #endif /* _SRP_H */
299