xref: /illumos-gate/usr/src/uts/common/sys/fc4/fc.h (revision 2d6eb4a5)
1*7c478bd9Sstevel@tonic-gate /*
2*7c478bd9Sstevel@tonic-gate  * CDDL HEADER START
3*7c478bd9Sstevel@tonic-gate  *
4*7c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*7c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*7c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*7c478bd9Sstevel@tonic-gate  * with the License.
8*7c478bd9Sstevel@tonic-gate  *
9*7c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*7c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*7c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*7c478bd9Sstevel@tonic-gate  * and limitations under the License.
13*7c478bd9Sstevel@tonic-gate  *
14*7c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*7c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*7c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*7c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*7c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*7c478bd9Sstevel@tonic-gate  *
20*7c478bd9Sstevel@tonic-gate  * CDDL HEADER END
21*7c478bd9Sstevel@tonic-gate  */
22*7c478bd9Sstevel@tonic-gate /*
23*7c478bd9Sstevel@tonic-gate  * Copyright (c) 1995,1997-1998 by Sun Microsystems, Inc.
24*7c478bd9Sstevel@tonic-gate  * All rights reserved.
25*7c478bd9Sstevel@tonic-gate  */
26*7c478bd9Sstevel@tonic-gate 
27*7c478bd9Sstevel@tonic-gate #ifndef _SYS_FC4_FC_H
28*7c478bd9Sstevel@tonic-gate #define	_SYS_FC4_FC_H
29*7c478bd9Sstevel@tonic-gate 
30*7c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
31*7c478bd9Sstevel@tonic-gate extern "C" {
32*7c478bd9Sstevel@tonic-gate #endif
33*7c478bd9Sstevel@tonic-gate 
34*7c478bd9Sstevel@tonic-gate /*
35*7c478bd9Sstevel@tonic-gate  * Fibre Channel Physical and Signaling Interface (FC-PH) definitions.
36*7c478bd9Sstevel@tonic-gate  *
37*7c478bd9Sstevel@tonic-gate  * NOTE: modifications of this file affect drivers, mpsas models, PLUTO
38*7c478bd9Sstevel@tonic-gate  *	firmware, SOC assembly code. Please be communicative.
39*7c478bd9Sstevel@tonic-gate  */
40*7c478bd9Sstevel@tonic-gate 
41*7c478bd9Sstevel@tonic-gate #define	FC_PH_VERSION	0x06	/* 0x06 means 4.0 ! */
42*7c478bd9Sstevel@tonic-gate #define	MAX_FRAME_SIZE	2112	/* maximum size of frame payload */
43*7c478bd9Sstevel@tonic-gate 
44*7c478bd9Sstevel@tonic-gate /*
45*7c478bd9Sstevel@tonic-gate  * This is the standard frame header for FC-PH frames.
46*7c478bd9Sstevel@tonic-gate  */
47*7c478bd9Sstevel@tonic-gate 
48*7c478bd9Sstevel@tonic-gate typedef struct FC2_FRAME_HDR {
49*7c478bd9Sstevel@tonic-gate 	uint_t	r_ctl:8,	d_id:24;
50*7c478bd9Sstevel@tonic-gate 	uint_t	reserved1:8,	s_id:24;
51*7c478bd9Sstevel@tonic-gate 	uint_t	type:8,		f_ctl:24;
52*7c478bd9Sstevel@tonic-gate 	uint_t	seq_id:8,	df_ctl:8,	seq_cnt:16;
53*7c478bd9Sstevel@tonic-gate 	ushort_t ox_id, rx_id;
54*7c478bd9Sstevel@tonic-gate 	uint_t	ro;
55*7c478bd9Sstevel@tonic-gate }aFC2_FRAME_HDR, *FC2_FRAME_HDRptr, fc_frame_header_t;
56*7c478bd9Sstevel@tonic-gate 
57*7c478bd9Sstevel@tonic-gate #define	WE_ARE_ORIGINATOR(fh)		(fh->f_ctl & F_CTL_XCHG_CONTEXT)
58*7c478bd9Sstevel@tonic-gate #define	UNSOLICITED_FRAME(fh)		(fh->rx_id == 0xffff)
59*7c478bd9Sstevel@tonic-gate #define	FIRST_SEQUENCE(fh)		(fh->f_ctl & F_CTL_FIRST_SEQ)
60*7c478bd9Sstevel@tonic-gate #define	LAST_FRAME_OF_SEQUENCE(fh)	(fh->f_ctl & F_CTL_END_SEQ)
61*7c478bd9Sstevel@tonic-gate #define	LAST_SEQUENCE_OF_EXCHANGE(fh)	(fh->f_ctl & F_CTL_LAST_SEQ)
62*7c478bd9Sstevel@tonic-gate #define	TRANSFER_INITIATIVE(fh)		(fh->f_ctl & F_CTL_SEQ_INITIATIVE)
63*7c478bd9Sstevel@tonic-gate 
64*7c478bd9Sstevel@tonic-gate 
65*7c478bd9Sstevel@tonic-gate /* legal values for r_ctl */
66*7c478bd9Sstevel@tonic-gate #define	R_CTL_ROUTING		0xf0 /* mask for routing bits */
67*7c478bd9Sstevel@tonic-gate #define	R_CTL_INFO		0x0f /* mask for information bits */
68*7c478bd9Sstevel@tonic-gate 
69*7c478bd9Sstevel@tonic-gate #define	R_CTL_DEVICE_DATA	0x00 /* all I/O related frames */
70*7c478bd9Sstevel@tonic-gate #define	R_CTL_EXTENDED_SVC	0x20 /* extended link services (PLOGI) */
71*7c478bd9Sstevel@tonic-gate #define	R_CTL_FC4_SVC		0x30 /* FC-4 link services (FCP_LOGI) */
72*7c478bd9Sstevel@tonic-gate #define	R_CTL_VIDEO_BUFF	0x40 /* not yet defined */
73*7c478bd9Sstevel@tonic-gate #define	R_CTL_BASIC_SVC		0x80 /* basic link services (NOP) */
74*7c478bd9Sstevel@tonic-gate #define	R_CTL_LINK_CTL		0xc0 /* ACKs, etc. */
75*7c478bd9Sstevel@tonic-gate 
76*7c478bd9Sstevel@tonic-gate /* legal values for r_ctl: Device Data */
77*7c478bd9Sstevel@tonic-gate #define	R_CTL_UNCATEGORIZED	0x00
78*7c478bd9Sstevel@tonic-gate #define	R_CTL_SOLICITED_DATA	0x01
79*7c478bd9Sstevel@tonic-gate #define	R_CTL_UNSOL_CONTROL	0x02
80*7c478bd9Sstevel@tonic-gate #define	R_CTL_SOLICITED_CONTROL	0x03
81*7c478bd9Sstevel@tonic-gate #define	R_CTL_UNSOL_DATA	0x04
82*7c478bd9Sstevel@tonic-gate #define	R_CTL_XFER_RDY		0x05
83*7c478bd9Sstevel@tonic-gate #define	R_CTL_COMMAND		0x06
84*7c478bd9Sstevel@tonic-gate #define	R_CTL_STATUS		0x07
85*7c478bd9Sstevel@tonic-gate 
86*7c478bd9Sstevel@tonic-gate /* legal values for r_ctl: Basic Link Services, type 0 */
87*7c478bd9Sstevel@tonic-gate #define	R_CTL_LS_NOP		0x80
88*7c478bd9Sstevel@tonic-gate #define	R_CTL_LS_ABTS		0x81
89*7c478bd9Sstevel@tonic-gate #define	R_CTL_LS_RMC		0x82
90*7c478bd9Sstevel@tonic-gate #define	R_CTL_LS_BA_ACC		0x84
91*7c478bd9Sstevel@tonic-gate #define	R_CTL_LS_BA_RJT		0x85
92*7c478bd9Sstevel@tonic-gate 
93*7c478bd9Sstevel@tonic-gate /* legal values for r_ctl: Extended Link Services, type 1 */
94*7c478bd9Sstevel@tonic-gate #define	R_CTL_ELS_REQ		0x22
95*7c478bd9Sstevel@tonic-gate #define	R_CTL_ELS_RSP		0x23
96*7c478bd9Sstevel@tonic-gate 
97*7c478bd9Sstevel@tonic-gate /* Extended Link Service command codes, type 1 */
98*7c478bd9Sstevel@tonic-gate #define	LS_RJT			0x01000000
99*7c478bd9Sstevel@tonic-gate #define	LS_ACC			0x02000000
100*7c478bd9Sstevel@tonic-gate #define	LS_PLOGI		0x03000000
101*7c478bd9Sstevel@tonic-gate #define	LS_FLOGI		0x04000000
102*7c478bd9Sstevel@tonic-gate #define	LS_LOGO			0x05000000
103*7c478bd9Sstevel@tonic-gate #define	LS_ABTX			0x06000000
104*7c478bd9Sstevel@tonic-gate #define	LS_RCS			0x07000000
105*7c478bd9Sstevel@tonic-gate #define	LS_RES			0x08000000
106*7c478bd9Sstevel@tonic-gate #define	LS_RSS			0x09000000
107*7c478bd9Sstevel@tonic-gate #define	LS_RSI			0x0a000000
108*7c478bd9Sstevel@tonic-gate #define	LS_ESTS			0x0b000000
109*7c478bd9Sstevel@tonic-gate #define	LS_ESTC			0x0c000000
110*7c478bd9Sstevel@tonic-gate #define	LS_ADVC			0x0d000000
111*7c478bd9Sstevel@tonic-gate #define	LS_RTV			0x0e000000
112*7c478bd9Sstevel@tonic-gate #define	LS_RLS			0x0f000000
113*7c478bd9Sstevel@tonic-gate #define	LS_ECHO			0x10000000
114*7c478bd9Sstevel@tonic-gate #define	LS_TEST			0x11000000
115*7c478bd9Sstevel@tonic-gate #define	LS_RRQ			0x12000000
116*7c478bd9Sstevel@tonic-gate #define	LS_IDENT		0x20000000	/* vendor unique */
117*7c478bd9Sstevel@tonic-gate #define	LS_DISPLAY		0x21000000	/* vendor unique */
118*7c478bd9Sstevel@tonic-gate 
119*7c478bd9Sstevel@tonic-gate /* legal values for r_ctl: Link Control */
120*7c478bd9Sstevel@tonic-gate #define	R_CTL_ACK_1		0xc0
121*7c478bd9Sstevel@tonic-gate #define	R_CTL_ACK_N		0xc1
122*7c478bd9Sstevel@tonic-gate #define	R_CTL_P_RJT		0xc2
123*7c478bd9Sstevel@tonic-gate #define	R_CTL_F_RJT		0xc3
124*7c478bd9Sstevel@tonic-gate #define	R_CTL_P_BSY		0xc4
125*7c478bd9Sstevel@tonic-gate #define	R_CTL_F_BSY_DF		0xc5
126*7c478bd9Sstevel@tonic-gate #define	R_CTL_F_BSY_LC		0xc6
127*7c478bd9Sstevel@tonic-gate #define	R_CTL_LCR		0xc7
128*7c478bd9Sstevel@tonic-gate 
129*7c478bd9Sstevel@tonic-gate /* type field definitions for Link Data frames: */
130*7c478bd9Sstevel@tonic-gate #define	TYPE_BASIC_LS		0x00
131*7c478bd9Sstevel@tonic-gate #define	TYPE_EXTENDED_LS	0x01
132*7c478bd9Sstevel@tonic-gate 
133*7c478bd9Sstevel@tonic-gate /* type field definitions for Device Data frames (from FC-PH 4.1): */
134*7c478bd9Sstevel@tonic-gate #define	TYPE_IS8802		0x04
135*7c478bd9Sstevel@tonic-gate #define	TYPE_IS8802_SNAP	0x05
136*7c478bd9Sstevel@tonic-gate #define	TYPE_SCSI_FCP		0x08 /* we use this one */
137*7c478bd9Sstevel@tonic-gate #define	TYPE_SCSI_GPP		0x09
138*7c478bd9Sstevel@tonic-gate #define	TYPE_HIPP_FP		0x0a
139*7c478bd9Sstevel@tonic-gate #define	TYPE_IPI3_MASTER	0x11
140*7c478bd9Sstevel@tonic-gate #define	TYPE_IPI3_SLAVE		0x12
141*7c478bd9Sstevel@tonic-gate #define	TYPE_IPI3_PEER		0x13
142*7c478bd9Sstevel@tonic-gate 
143*7c478bd9Sstevel@tonic-gate #define	F_CTL_XCHG_CONTEXT	0x800000 /* 0 if SID is XCHG originator */
144*7c478bd9Sstevel@tonic-gate #define	F_CTL_SEQ_CONTEXT	0x400000 /* 0 if SID is SEQ initiator */
145*7c478bd9Sstevel@tonic-gate #define	F_CTL_FIRST_SEQ		0x200000 /* 1 if first sequence of XCHG */
146*7c478bd9Sstevel@tonic-gate #define	F_CTL_LAST_SEQ		0x100000 /* 1 if last SEQ of XCHG */
147*7c478bd9Sstevel@tonic-gate #define	F_CTL_END_SEQ		0x080000 /* 1 if last frame of a SEQ */
148*7c478bd9Sstevel@tonic-gate #define	F_CTL_END_CONNECT	0x040000 /* always 0 */
149*7c478bd9Sstevel@tonic-gate #define	F_CTL_CHAINED_SEQ	0x020000 /* always 0 */
150*7c478bd9Sstevel@tonic-gate #define	F_CTL_SEQ_INITIATIVE	0x010000 /* when 1 xfrs SEQ initiative */
151*7c478bd9Sstevel@tonic-gate #define	F_CTL_XID_REASSIGNED	0x008000 /* always 0 */
152*7c478bd9Sstevel@tonic-gate #define	F_CTL_INVALIDATE_XID	0x004000 /* always 0 */
153*7c478bd9Sstevel@tonic-gate #define	F_CTL_CONTINUE_SEQ	0x0000C0 /* always 0 */
154*7c478bd9Sstevel@tonic-gate #define	F_CTL_ABORT_SEQ		0x000030 /* always 0 */
155*7c478bd9Sstevel@tonic-gate #define	F_CTL_RO_PRESENT	0x000008 /* 1 if param field == RO */
156*7c478bd9Sstevel@tonic-gate #define	F_CTL_XCHG_REASSEMBLE	0x000004 /* always 0 */
157*7c478bd9Sstevel@tonic-gate #define	F_CTL_FILL_BYTES	0x000003 /* # of fill bytes in this frame */
158*7c478bd9Sstevel@tonic-gate #define	F_CTL_RESERVED		0x003F00
159*7c478bd9Sstevel@tonic-gate #define	F_CTL_ALWAYS_ZERO	(F_CTL_RESERVED | F_CTL_XCHG_REASSEMBLE | \
160*7c478bd9Sstevel@tonic-gate 	F_CTL_ABORT_SEQ | F_CTL_CONTINUE_SEQ| F_CTL_INVALIDATE_XID | \
161*7c478bd9Sstevel@tonic-gate 	F_CTL_XID_REASSIGNED | F_CTL_CHAINED_SEQ | F_CTL_END_CONNECT)
162*7c478bd9Sstevel@tonic-gate 
163*7c478bd9Sstevel@tonic-gate /* Well known addresses ... */
164*7c478bd9Sstevel@tonic-gate #define	FS_GENERAL_MULTICAST	0xfffff7
165*7c478bd9Sstevel@tonic-gate #define	FS_WELL_KNOWN_MULTICAST	0xfffff8
166*7c478bd9Sstevel@tonic-gate #define	FS_HUNT_GROUP		0xfffff9
167*7c478bd9Sstevel@tonic-gate #define	FS_MANAGEMENT_SERVER	0xfffffa
168*7c478bd9Sstevel@tonic-gate #define	FS_TIME_SERVER		0xfffffb
169*7c478bd9Sstevel@tonic-gate #define	FS_NAME_SERVER		0xfffffc
170*7c478bd9Sstevel@tonic-gate #define	FS_FABRIC_CONTROLLER	0xfffffd
171*7c478bd9Sstevel@tonic-gate #define	FS_FABRIC_F_PORT	0xfffffe
172*7c478bd9Sstevel@tonic-gate #define	FS_BROADCAST		0xffffff
173*7c478bd9Sstevel@tonic-gate 
174*7c478bd9Sstevel@tonic-gate /* Fabric Busy Reason Codes */
175*7c478bd9Sstevel@tonic-gate #define	FABRIC_BUSY		0x01
176*7c478bd9Sstevel@tonic-gate #define	NPORT_BUSY		0x03
177*7c478bd9Sstevel@tonic-gate 
178*7c478bd9Sstevel@tonic-gate /* NPort Busy Reason Codes */
179*7c478bd9Sstevel@tonic-gate #define	PHYSICAL_BUSY		0x01
180*7c478bd9Sstevel@tonic-gate #define	RESOURSE_BUSY		0x03
181*7c478bd9Sstevel@tonic-gate 
182*7c478bd9Sstevel@tonic-gate /* Reject Reason Codes */
183*7c478bd9Sstevel@tonic-gate 
184*7c478bd9Sstevel@tonic-gate typedef struct FC2_RJT_PARAM {
185*7c478bd9Sstevel@tonic-gate 	uchar_t	rjt_action;
186*7c478bd9Sstevel@tonic-gate 	uchar_t	rjt_reason;
187*7c478bd9Sstevel@tonic-gate 	uchar_t	reserved[2];
188*7c478bd9Sstevel@tonic-gate } aFC2_RJT_PARAM;
189*7c478bd9Sstevel@tonic-gate 
190*7c478bd9Sstevel@tonic-gate #define	INVALID_D_ID		0x01
191*7c478bd9Sstevel@tonic-gate #define	INVALID_S_ID		0x02
192*7c478bd9Sstevel@tonic-gate #define	NPORT_NOT_AVAIL_TEMP	0x03
193*7c478bd9Sstevel@tonic-gate #define	NPORT_NOT_AVAIL_PERM	0x04
194*7c478bd9Sstevel@tonic-gate #define	CLASS_NOT_SUPPORTED	0x05
195*7c478bd9Sstevel@tonic-gate #define	DELIMITER_ERROR		0x06
196*7c478bd9Sstevel@tonic-gate #define	TYPE_NOT_SUPPORTED	0x07
197*7c478bd9Sstevel@tonic-gate #define	INVALID_LINK_CONTROL	0x08
198*7c478bd9Sstevel@tonic-gate #define	INVALID_R_CTL		0x09
199*7c478bd9Sstevel@tonic-gate #define	INVALID_F_CTL		0x0a
200*7c478bd9Sstevel@tonic-gate #define	INVALID_OX_ID		0x0b
201*7c478bd9Sstevel@tonic-gate #define	INVALID_RX_ID		0x0c
202*7c478bd9Sstevel@tonic-gate #define	INVALID_SEQ_ID		0x0d
203*7c478bd9Sstevel@tonic-gate #define	INVALID_DF_CTL		0x0e
204*7c478bd9Sstevel@tonic-gate #define	INVALID_SEQ_CNT		0x0f
205*7c478bd9Sstevel@tonic-gate #define	INVALID_PARAMETER	0x10
206*7c478bd9Sstevel@tonic-gate #define	EXCHANGE_ERROR		0x11
207*7c478bd9Sstevel@tonic-gate #define	PROTOCOL_ERROR		0x12
208*7c478bd9Sstevel@tonic-gate #define	INCORRECT_LENGTH	0x13
209*7c478bd9Sstevel@tonic-gate #define	UNEXPECTED_ACK		0x14
210*7c478bd9Sstevel@tonic-gate #define	UNEXPECTED_LINK_RESP	0x15
211*7c478bd9Sstevel@tonic-gate #define	LOGIN_REQUIRED		0x16
212*7c478bd9Sstevel@tonic-gate #define	EXCESSIVE_SEQUENCES	0x17
213*7c478bd9Sstevel@tonic-gate #define	CANT_ESTABLISH_EXCHANGE	0x18
214*7c478bd9Sstevel@tonic-gate #define	SECURITY_NOT_SUPPORTED	0x19
215*7c478bd9Sstevel@tonic-gate 
216*7c478bd9Sstevel@tonic-gate /* BA_RJT and LS_RJT reason codes */
217*7c478bd9Sstevel@tonic-gate #define	RJT_INVALID_CMD_CODE	0x01
218*7c478bd9Sstevel@tonic-gate #define	RJT_LOGICAL_ERROR	0x03
219*7c478bd9Sstevel@tonic-gate #define	RJT_LOGICAL_BUSY	0x05
220*7c478bd9Sstevel@tonic-gate #define	RJT_PROTOCOL_ERR	0x07
221*7c478bd9Sstevel@tonic-gate #define	RJT_CANT_PERFORM_RQST	0x09
222*7c478bd9Sstevel@tonic-gate #define	RJT_CMD_NOT_SUPPORTED	0x0b
223*7c478bd9Sstevel@tonic-gate 
224*7c478bd9Sstevel@tonic-gate 
225*7c478bd9Sstevel@tonic-gate /*
226*7c478bd9Sstevel@tonic-gate  * Frame Payloads that the SOC understands
227*7c478bd9Sstevel@tonic-gate  * Transfer Ready:
228*7c478bd9Sstevel@tonic-gate  */
229*7c478bd9Sstevel@tonic-gate 
230*7c478bd9Sstevel@tonic-gate typedef struct Xfer_Rdy {
231*7c478bd9Sstevel@tonic-gate 	int	seq_ro;
232*7c478bd9Sstevel@tonic-gate 	int	burst_len;
233*7c478bd9Sstevel@tonic-gate 	int	reserved;
234*7c478bd9Sstevel@tonic-gate } aXFER_RDY, *XFER_RDYptr;
235*7c478bd9Sstevel@tonic-gate 
236*7c478bd9Sstevel@tonic-gate /*
237*7c478bd9Sstevel@tonic-gate  * Link Error Status Block
238*7c478bd9Sstevel@tonic-gate  */
239*7c478bd9Sstevel@tonic-gate 
240*7c478bd9Sstevel@tonic-gate typedef struct LA_RLS_reply {
241*7c478bd9Sstevel@tonic-gate 	int	code;
242*7c478bd9Sstevel@tonic-gate 	int	link_failure;
243*7c478bd9Sstevel@tonic-gate 	int	loss_of_sync;
244*7c478bd9Sstevel@tonic-gate 	int	loss_of_signal;
245*7c478bd9Sstevel@tonic-gate 	int	primitive_error;
246*7c478bd9Sstevel@tonic-gate 	int	code_violations;
247*7c478bd9Sstevel@tonic-gate 	int	invalid_crc;
248*7c478bd9Sstevel@tonic-gate } aLA_RLS_reply, *LA_RLS_replyptr;
249*7c478bd9Sstevel@tonic-gate 
250*7c478bd9Sstevel@tonic-gate 
251*7c478bd9Sstevel@tonic-gate /*
252*7c478bd9Sstevel@tonic-gate  * Login
253*7c478bd9Sstevel@tonic-gate  */
254*7c478bd9Sstevel@tonic-gate 
255*7c478bd9Sstevel@tonic-gate typedef struct LOGI_PAYLOAD {
256*7c478bd9Sstevel@tonic-gate 	uint_t	code;
257*7c478bd9Sstevel@tonic-gate 	uchar_t	common_service_params[16];
258*7c478bd9Sstevel@tonic-gate 	uchar_t	port_name[8];
259*7c478bd9Sstevel@tonic-gate 	uchar_t	node_name[8];
260*7c478bd9Sstevel@tonic-gate 	uchar_t	class1_service_params[16];
261*7c478bd9Sstevel@tonic-gate 	uchar_t	class2_service_params[16];
262*7c478bd9Sstevel@tonic-gate 	uchar_t	class3_service_params[16];
263*7c478bd9Sstevel@tonic-gate } aLOGI_PAYLOAD, *LOGI_PAYLOADptr;
264*7c478bd9Sstevel@tonic-gate 
265*7c478bd9Sstevel@tonic-gate #define	SP_F_PORT_LOGIN	0x10
266*7c478bd9Sstevel@tonic-gate 
267*7c478bd9Sstevel@tonic-gate 
268*7c478bd9Sstevel@tonic-gate /*
269*7c478bd9Sstevel@tonic-gate  * Extended Link Service Payload
270*7c478bd9Sstevel@tonic-gate  */
271*7c478bd9Sstevel@tonic-gate 
272*7c478bd9Sstevel@tonic-gate /* Arbitrary upper limit for now... */
273*7c478bd9Sstevel@tonic-gate #define	FC_MAX_ELS	(60-4)
274*7c478bd9Sstevel@tonic-gate 
275*7c478bd9Sstevel@tonic-gate typedef struct ELS_payload {
276*7c478bd9Sstevel@tonic-gate 	union els_cmd_u {
277*7c478bd9Sstevel@tonic-gate 	    struct {
278*7c478bd9Sstevel@tonic-gate 		uchar_t	ls_command;
279*7c478bd9Sstevel@tonic-gate 		uchar_t	reserved[3];
280*7c478bd9Sstevel@tonic-gate 	    } c;
281*7c478bd9Sstevel@tonic-gate 	    uint_t i;
282*7c478bd9Sstevel@tonic-gate 	} els_cmd;
283*7c478bd9Sstevel@tonic-gate 	uchar_t	els_data[FC_MAX_ELS];
284*7c478bd9Sstevel@tonic-gate } els_payload_t;
285*7c478bd9Sstevel@tonic-gate 
286*7c478bd9Sstevel@tonic-gate /*
287*7c478bd9Sstevel@tonic-gate  * NOTE: This dataseg definition makes this file unique
288*7c478bd9Sstevel@tonic-gate  *	from the Pluto fc_ph file.
289*7c478bd9Sstevel@tonic-gate  */
290*7c478bd9Sstevel@tonic-gate 
291*7c478bd9Sstevel@tonic-gate /*
292*7c478bd9Sstevel@tonic-gate  * Data segment definition
293*7c478bd9Sstevel@tonic-gate  */
294*7c478bd9Sstevel@tonic-gate typedef struct fc_dataseg {
295*7c478bd9Sstevel@tonic-gate 	uint32_t	fc_base;	/* Address of buffer. */
296*7c478bd9Sstevel@tonic-gate 	uint32_t	fc_count;	/* Length of buffer. */
297*7c478bd9Sstevel@tonic-gate } fc_dataseg_t;
298*7c478bd9Sstevel@tonic-gate 
299*7c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
300*7c478bd9Sstevel@tonic-gate }
301*7c478bd9Sstevel@tonic-gate #endif
302*7c478bd9Sstevel@tonic-gate 
303*7c478bd9Sstevel@tonic-gate #endif	/* !_SYS_FC4_FC_H */
304