1*fcf3ce44SJohn Forte /*
2*fcf3ce44SJohn Forte  * CDDL HEADER START
3*fcf3ce44SJohn Forte  *
4*fcf3ce44SJohn Forte  * The contents of this file are subject to the terms of the
5*fcf3ce44SJohn Forte  * Common Development and Distribution License (the "License").
6*fcf3ce44SJohn Forte  * You may not use this file except in compliance with the License.
7*fcf3ce44SJohn Forte  *
8*fcf3ce44SJohn Forte  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*fcf3ce44SJohn Forte  * or http://www.opensolaris.org/os/licensing.
10*fcf3ce44SJohn Forte  * See the License for the specific language governing permissions
11*fcf3ce44SJohn Forte  * and limitations under the License.
12*fcf3ce44SJohn Forte  *
13*fcf3ce44SJohn Forte  * When distributing Covered Code, include this CDDL HEADER in each
14*fcf3ce44SJohn Forte  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*fcf3ce44SJohn Forte  * If applicable, add the following below this CDDL HEADER, with the
16*fcf3ce44SJohn Forte  * fields enclosed by brackets "[]" replaced with your own identifying
17*fcf3ce44SJohn Forte  * information: Portions Copyright [yyyy] [name of copyright owner]
18*fcf3ce44SJohn Forte  *
19*fcf3ce44SJohn Forte  * CDDL HEADER END
20*fcf3ce44SJohn Forte  */
21*fcf3ce44SJohn Forte /*
22*fcf3ce44SJohn Forte  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23*fcf3ce44SJohn Forte  * Use is subject to license terms.
24*fcf3ce44SJohn Forte  */
25*fcf3ce44SJohn Forte 
26*fcf3ce44SJohn Forte #ifndef	_FCIO_H
27*fcf3ce44SJohn Forte #define	_FCIO_H
28*fcf3ce44SJohn Forte 
29*fcf3ce44SJohn Forte 
30*fcf3ce44SJohn Forte #include <sys/note.h>
31*fcf3ce44SJohn Forte #include <sys/fibre-channel/fc_types.h>
32*fcf3ce44SJohn Forte #include <sys/fibre-channel/fc_appif.h>
33*fcf3ce44SJohn Forte 
34*fcf3ce44SJohn Forte #ifdef	__cplusplus
35*fcf3ce44SJohn Forte extern "C" {
36*fcf3ce44SJohn Forte #endif
37*fcf3ce44SJohn Forte 
38*fcf3ce44SJohn Forte /*
39*fcf3ce44SJohn Forte  * ioctl definitions
40*fcf3ce44SJohn Forte  */
41*fcf3ce44SJohn Forte #define	FCTIO				('F'<< 8)
42*fcf3ce44SJohn Forte 
43*fcf3ce44SJohn Forte /*
44*fcf3ce44SJohn Forte  * New ioctl definitions
45*fcf3ce44SJohn Forte  */
46*fcf3ce44SJohn Forte #define	FCIO_CMD			(FCTIO | 1998)
47*fcf3ce44SJohn Forte #define	FCIO_SUB_CMD			('Z' << 8)
48*fcf3ce44SJohn Forte #define	FCIO_GET_NUM_DEVS		(FCIO_SUB_CMD + 0x01)
49*fcf3ce44SJohn Forte #define	FCIO_GET_DEV_LIST		(FCIO_SUB_CMD + 0x02)
50*fcf3ce44SJohn Forte #define	FCIO_GET_SYM_PNAME		(FCIO_SUB_CMD + 0x03)
51*fcf3ce44SJohn Forte #define	FCIO_GET_SYM_NNAME		(FCIO_SUB_CMD + 0x04)
52*fcf3ce44SJohn Forte #define	FCIO_SET_SYM_PNAME		(FCIO_SUB_CMD + 0x05)
53*fcf3ce44SJohn Forte #define	FCIO_SET_SYM_NNAME		(FCIO_SUB_CMD + 0x06)
54*fcf3ce44SJohn Forte #define	FCIO_GET_LOGI_PARAMS		(FCIO_SUB_CMD + 0x07)
55*fcf3ce44SJohn Forte #define	FCIO_DEV_LOGIN			(FCIO_SUB_CMD + 0x08)
56*fcf3ce44SJohn Forte #define	FCIO_DEV_LOGOUT			(FCIO_SUB_CMD + 0x09)
57*fcf3ce44SJohn Forte #define	FCIO_GET_STATE			(FCIO_SUB_CMD + 0x0A)
58*fcf3ce44SJohn Forte #define	FCIO_DEV_REMOVE			(FCIO_SUB_CMD + 0x0B)
59*fcf3ce44SJohn Forte #define	FCIO_GET_FCODE_REV		(FCIO_SUB_CMD + 0x0C)
60*fcf3ce44SJohn Forte #define	FCIO_GET_FW_REV			(FCIO_SUB_CMD + 0x0D)
61*fcf3ce44SJohn Forte #define	FCIO_GET_DUMP_SIZE		(FCIO_SUB_CMD + 0x0E)
62*fcf3ce44SJohn Forte #define	FCIO_FORCE_DUMP			(FCIO_SUB_CMD + 0x0F)
63*fcf3ce44SJohn Forte #define	FCIO_GET_DUMP			(FCIO_SUB_CMD + 0x10)
64*fcf3ce44SJohn Forte #define	FCIO_GET_TOPOLOGY		(FCIO_SUB_CMD + 0x11)
65*fcf3ce44SJohn Forte #define	FCIO_RESET_LINK			(FCIO_SUB_CMD + 0x12)
66*fcf3ce44SJohn Forte #define	FCIO_RESET_HARD			(FCIO_SUB_CMD + 0x13)
67*fcf3ce44SJohn Forte #define	FCIO_RESET_HARD_CORE		(FCIO_SUB_CMD + 0x14)
68*fcf3ce44SJohn Forte #define	FCIO_DIAG			(FCIO_SUB_CMD + 0x15)
69*fcf3ce44SJohn Forte #define	FCIO_NS				(FCIO_SUB_CMD + 0x16)
70*fcf3ce44SJohn Forte #define	FCIO_DOWNLOAD_FW		(FCIO_SUB_CMD + 0x17)
71*fcf3ce44SJohn Forte #define	FCIO_GET_HOST_PARAMS		(FCIO_SUB_CMD + 0x18)
72*fcf3ce44SJohn Forte #define	FCIO_LINK_STATUS		(FCIO_SUB_CMD + 0x19)
73*fcf3ce44SJohn Forte #define	FCIO_DOWNLOAD_FCODE		(FCIO_SUB_CMD + 0x1A)
74*fcf3ce44SJohn Forte #define	FCIO_GET_NODE_ID		(FCIO_SUB_CMD + 0x1B)
75*fcf3ce44SJohn Forte #define	FCIO_SET_NODE_ID		(FCIO_SUB_CMD + 0x1C)
76*fcf3ce44SJohn Forte #define	FCIO_SEND_NODE_ID		(FCIO_SUB_CMD + 0x1D)
77*fcf3ce44SJohn Forte 
78*fcf3ce44SJohn Forte /*
79*fcf3ce44SJohn Forte  * IOCTLs to handle T11's FC-HBA library
80*fcf3ce44SJohn Forte  */
81*fcf3ce44SJohn Forte #define	FCIO_GET_ADAPTER_ATTRIBUTES	(FCIO_SUB_CMD + 0x1E)
82*fcf3ce44SJohn Forte #define	FCIO_GET_OTHER_ADAPTER_PORTS	(FCIO_SUB_CMD + 0x1F)
83*fcf3ce44SJohn Forte #define	FCIO_GET_ADAPTER_PORT_ATTRIBUTES    (FCIO_SUB_CMD + 0x20)
84*fcf3ce44SJohn Forte #define	FCIO_GET_DISCOVERED_PORT_ATTRIBUTES (FCIO_SUB_CMD + 0x21)
85*fcf3ce44SJohn Forte #define	FCIO_GET_PORT_ATTRIBUTES	(FCIO_SUB_CMD + 0x22)
86*fcf3ce44SJohn Forte #define	FCIO_GET_ADAPTER_PORT_STATS	(FCIO_SUB_CMD + 0x23)
87*fcf3ce44SJohn Forte #define	FCIO_GET_ADAPTER_PORT_NPIV_ATTRIBUTES   (FCIO_SUB_CMD + 0x24)
88*fcf3ce44SJohn Forte #define	FCIO_CREATE_NPIV_PORT		(FCIO_SUB_CMD + 0x25)
89*fcf3ce44SJohn Forte #define	FCIO_GET_NPIV_ATTRIBUTES	(FCIO_SUB_CMD + 0x26)
90*fcf3ce44SJohn Forte #define	FCIO_GET_DISCOVERED_NPIV_ATTRIBUTES	(FCIO_SUB_CMD + 0x27)
91*fcf3ce44SJohn Forte #define	FCIO_GET_NPIV_PORT_LIST		(FCIO_SUB_CMD + 0x28)
92*fcf3ce44SJohn Forte #define	FCIO_DELETE_NPIV_PORT		(FCIO_SUB_CMD + 0x29)
93*fcf3ce44SJohn Forte #define	FCIO_NPIV_GET_ADAPTER_ATTRIBUTES	(FCIO_SUB_CMD + 0x2a)
94*fcf3ce44SJohn Forte 
95*fcf3ce44SJohn Forte 
96*fcf3ce44SJohn Forte /*
97*fcf3ce44SJohn Forte  * Fixed diag_codes for FCIO_DIAG. These is supported by all FCAs.
98*fcf3ce44SJohn Forte  * No FCA should define ioctls in this range.
99*fcf3ce44SJohn Forte  */
100*fcf3ce44SJohn Forte #define	FCIO_DIAG_PORT_DISABLE		(FCIO_SUB_CMD + 0x80)
101*fcf3ce44SJohn Forte #define	FCIO_DIAG_PORT_ENABLE		(FCIO_SUB_CMD + 0x81)
102*fcf3ce44SJohn Forte 
103*fcf3ce44SJohn Forte /* cmd_flags for FCIO_LINK_STATUS ioctl */
104*fcf3ce44SJohn Forte #define	FCIO_CFLAGS_RLS_DEST_NPORT	0x0000
105*fcf3ce44SJohn Forte #define	FCIO_CFLAGS_RLS_DEST_FPORT	0x0001
106*fcf3ce44SJohn Forte 
107*fcf3ce44SJohn Forte /*
108*fcf3ce44SJohn Forte  * Note about fc_port_dev_t structure : The dev_did.priv_lilp_posit field will
109*fcf3ce44SJohn Forte  * return the lilp map position of the port for diagnostics to use.
110*fcf3ce44SJohn Forte  * It is important to note that dev_did.priv_lilp_posit field will only have
111*fcf3ce44SJohn Forte  * valid loop position for Private Loop devices ONLY and the value
112*fcf3ce44SJohn Forte  * contained in this field for other topologies will be undetermined.
113*fcf3ce44SJohn Forte  */
114*fcf3ce44SJohn Forte typedef struct fc_port_dev {
115*fcf3ce44SJohn Forte 	uchar_t		dev_dtype;		/* SCSI device type */
116*fcf3ce44SJohn Forte 	uint32_t	dev_type[8];		/* protocol specific */
117*fcf3ce44SJohn Forte 	uint32_t	dev_state;		/* port state */
118*fcf3ce44SJohn Forte 	fc_portid_t	dev_did;		/* Destination Identifier */
119*fcf3ce44SJohn Forte 	fc_hardaddr_t	dev_hard_addr;		/* Hard address */
120*fcf3ce44SJohn Forte 	la_wwn_t	dev_pwwn;		/* port WWN */
121*fcf3ce44SJohn Forte 	la_wwn_t	dev_nwwn;		/* node WWN */
122*fcf3ce44SJohn Forte } fc_port_dev_t;
123*fcf3ce44SJohn Forte 
124*fcf3ce44SJohn Forte #if defined(_SYSCALL32)
125*fcf3ce44SJohn Forte 
126*fcf3ce44SJohn Forte #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
127*fcf3ce44SJohn Forte #pragma pack(4)
128*fcf3ce44SJohn Forte #endif
129*fcf3ce44SJohn Forte 
130*fcf3ce44SJohn Forte typedef struct fc_port_dev32 {
131*fcf3ce44SJohn Forte 	uchar_t		dev_dtype;		/* SCSI device type */
132*fcf3ce44SJohn Forte 	uint32_t	dev_type[8];		/* protocol specific */
133*fcf3ce44SJohn Forte 	uint32_t	dev_state;		/* port state */
134*fcf3ce44SJohn Forte 	fc_portid_t	dev_did;		/* Destination Identifier */
135*fcf3ce44SJohn Forte 	fc_hardaddr_t	dev_hard_addr;		/* Hard address */
136*fcf3ce44SJohn Forte 	la_wwn_t	dev_pwwn;		/* port WWN */
137*fcf3ce44SJohn Forte 	la_wwn_t	dev_nwwn;		/* node WWN */
138*fcf3ce44SJohn Forte } fc_port_dev32_t;
139*fcf3ce44SJohn Forte 
140*fcf3ce44SJohn Forte #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
141*fcf3ce44SJohn Forte #pragma pack()
142*fcf3ce44SJohn Forte #endif
143*fcf3ce44SJohn Forte 
144*fcf3ce44SJohn Forte #endif	/* _SYSCALL32 */
145*fcf3ce44SJohn Forte 
146*fcf3ce44SJohn Forte typedef struct fc_port_dev fc_ns_map_entry_t;
147*fcf3ce44SJohn Forte 
148*fcf3ce44SJohn Forte /*
149*fcf3ce44SJohn Forte  * fcio_xfer definitions
150*fcf3ce44SJohn Forte  */
151*fcf3ce44SJohn Forte #define	FCIO_XFER_NONE		0x00
152*fcf3ce44SJohn Forte #define	FCIO_XFER_READ		0x01
153*fcf3ce44SJohn Forte #define	FCIO_XFER_WRITE		0x02
154*fcf3ce44SJohn Forte #define	FCIO_XFER_RW		(FCIO_XFER_READ | FCIO_XFER_WRITE)
155*fcf3ce44SJohn Forte 
156*fcf3ce44SJohn Forte typedef struct fcio {
157*fcf3ce44SJohn Forte 	uint16_t	fcio_xfer;	/* direction */
158*fcf3ce44SJohn Forte 	uint16_t	fcio_cmd;	/* sub command */
159*fcf3ce44SJohn Forte 	uint16_t	fcio_flags;	/* flags */
160*fcf3ce44SJohn Forte 	uint16_t	fcio_cmd_flags;	/* command specific flags */
161*fcf3ce44SJohn Forte 	size_t		fcio_ilen;	/* Input buffer length */
162*fcf3ce44SJohn Forte 	caddr_t		fcio_ibuf;	/* Input buffer */
163*fcf3ce44SJohn Forte 	size_t		fcio_olen;	/* Output buffer length */
164*fcf3ce44SJohn Forte 	caddr_t		fcio_obuf;	/* Output buffer */
165*fcf3ce44SJohn Forte 	size_t		fcio_alen;	/* Auxillary buffer length */
166*fcf3ce44SJohn Forte 	caddr_t		fcio_abuf;	/* Auxillary buffer */
167*fcf3ce44SJohn Forte 	int		fcio_errno;	/* FC internal error code */
168*fcf3ce44SJohn Forte } fcio_t;
169*fcf3ce44SJohn Forte 
170*fcf3ce44SJohn Forte /*
171*fcf3ce44SJohn Forte  * T11 FC-HBA exchange structures
172*fcf3ce44SJohn Forte  */
173*fcf3ce44SJohn Forte #define	FC_HBA_LIST_VERSION		    1
174*fcf3ce44SJohn Forte typedef struct fc_hba_list {
175*fcf3ce44SJohn Forte 	uint32_t		version;    /* Set to FC_HBA_LIST_VERSION */
176*fcf3ce44SJohn Forte 	uint32_t		numAdapters;
177*fcf3ce44SJohn Forte 	uint64_t		reserved;
178*fcf3ce44SJohn Forte 	char			hbaPaths[1][MAXPATHLEN]; /* numAdapters long */
179*fcf3ce44SJohn Forte } fc_hba_list_t;
180*fcf3ce44SJohn Forte 
181*fcf3ce44SJohn Forte #define	FC_HBA_NPIV_PORT_LIST_VERSION	1
182*fcf3ce44SJohn Forte typedef struct fc_hba_npiv_port_list {
183*fcf3ce44SJohn Forte 	uint32_t		version;
184*fcf3ce44SJohn Forte 	uint32_t		numAdapters;
185*fcf3ce44SJohn Forte 	uint64_t		reserved;
186*fcf3ce44SJohn Forte 	char			hbaPaths[1][MAXPATHLEN];
187*fcf3ce44SJohn Forte } fc_hba_npiv_port_list_t;
188*fcf3ce44SJohn Forte 
189*fcf3ce44SJohn Forte #define	FC_HBA_NPIV_ATTRIBUTES_VERSION	1
190*fcf3ce44SJohn Forte typedef struct fc_hba_npiv_attributes {
191*fcf3ce44SJohn Forte 	uint32_t		version;
192*fcf3ce44SJohn Forte 	la_wwn_t		NodeWWN;
193*fcf3ce44SJohn Forte 	la_wwn_t		PortWWN;
194*fcf3ce44SJohn Forte 	fc_hba_state_change_t	lastChange;
195*fcf3ce44SJohn Forte } fc_hba_npiv_attributes_t;
196*fcf3ce44SJohn Forte 
197*fcf3ce44SJohn Forte #define	FC_HBA_PORT_NPIV_ATTRIBUTES_VERSION	1
198*fcf3ce44SJohn Forte typedef struct fc_hba_port_npiv_attributes {
199*fcf3ce44SJohn Forte 	uint32_t		version;
200*fcf3ce44SJohn Forte 	int			npivflag;
201*fcf3ce44SJohn Forte 	fc_hba_state_change_t	lastChange;
202*fcf3ce44SJohn Forte 	la_wwn_t		NodeWWN;
203*fcf3ce44SJohn Forte 	la_wwn_t		PortWWN;
204*fcf3ce44SJohn Forte 	uint32_t		MaxNumberOfNPIVPorts;
205*fcf3ce44SJohn Forte 	uint32_t		NumberOfNPIVPorts;
206*fcf3ce44SJohn Forte } fc_hba_port_npiv_attributes_t;
207*fcf3ce44SJohn Forte 
208*fcf3ce44SJohn Forte #define	FC_HBA_SINGLE_VERSION		    1
209*fcf3ce44SJohn Forte typedef struct fc_hba_single {
210*fcf3ce44SJohn Forte 	uint32_t		version;    /* Set to FC_HBA_SINGLE_VERSION */
211*fcf3ce44SJohn Forte 	uint64_t		reserved;
212*fcf3ce44SJohn Forte 	char			hbaPath[MAXPATHLEN];
213*fcf3ce44SJohn Forte } fc_hba_single_t;
214*fcf3ce44SJohn Forte 
215*fcf3ce44SJohn Forte #define	FC_HBA_ADAPTER_ATTRIBUTES_VERSION   1
216*fcf3ce44SJohn Forte typedef struct fc_hba_adapter_attributes {
217*fcf3ce44SJohn Forte 	uint32_t    version;	/* Set to FC_HBA_ADAPTER_ATTRIBUTES_VERSION */
218*fcf3ce44SJohn Forte 	char	    Manufacturer[64];
219*fcf3ce44SJohn Forte 	char	    SerialNumber[64];
220*fcf3ce44SJohn Forte 	char	    Model[256];
221*fcf3ce44SJohn Forte 	char	    ModelDescription[256];
222*fcf3ce44SJohn Forte 	la_wwn_t    NodeWWN;
223*fcf3ce44SJohn Forte 	char	    NodeSymbolicName[256];
224*fcf3ce44SJohn Forte 	char	    HardwareVersion[256];
225*fcf3ce44SJohn Forte 	char	    DriverVersion[256];
226*fcf3ce44SJohn Forte 	char	    OptionROMVersion[256];
227*fcf3ce44SJohn Forte 	char	    FirmwareVersion[256];
228*fcf3ce44SJohn Forte 	uint32_t    VendorSpecificID;
229*fcf3ce44SJohn Forte 	uint32_t    NumberOfPorts;
230*fcf3ce44SJohn Forte 	char	    DriverName[256];
231*fcf3ce44SJohn Forte 	uint64_t    reserved;
232*fcf3ce44SJohn Forte } fc_hba_adapter_attributes_t;
233*fcf3ce44SJohn Forte 
234*fcf3ce44SJohn Forte #if defined(_SYSCALL32)
235*fcf3ce44SJohn Forte 
236*fcf3ce44SJohn Forte #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
237*fcf3ce44SJohn Forte #pragma pack(4)
238*fcf3ce44SJohn Forte #endif
239*fcf3ce44SJohn Forte 
240*fcf3ce44SJohn Forte typedef struct fc_hba_adapter_attributes32 {
241*fcf3ce44SJohn Forte 	uint32_t    version;	/* Set to FC_HBA_ADAPTER_ATTRIBUTES_VERSION */
242*fcf3ce44SJohn Forte 	char	    Manufacturer[64];
243*fcf3ce44SJohn Forte 	char	    SerialNumber[64];
244*fcf3ce44SJohn Forte 	char	    Model[256];
245*fcf3ce44SJohn Forte 	char	    ModelDescription[256];
246*fcf3ce44SJohn Forte 	la_wwn_t    NodeWWN;
247*fcf3ce44SJohn Forte 	char	    NodeSymbolicName[256];
248*fcf3ce44SJohn Forte 	char	    HardwareVersion[256];
249*fcf3ce44SJohn Forte 	char	    DriverVersion[256];
250*fcf3ce44SJohn Forte 	char	    OptionROMVersion[256];
251*fcf3ce44SJohn Forte 	char	    FirmwareVersion[256];
252*fcf3ce44SJohn Forte 	uint32_t    VendorSpecificID;
253*fcf3ce44SJohn Forte 	uint32_t    NumberOfPorts;
254*fcf3ce44SJohn Forte 	char	    DriverName[256];
255*fcf3ce44SJohn Forte 	uint64_t    reserved;
256*fcf3ce44SJohn Forte } fc_hba_adapter_attributes32_t;
257*fcf3ce44SJohn Forte 
258*fcf3ce44SJohn Forte #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
259*fcf3ce44SJohn Forte #pragma pack()
260*fcf3ce44SJohn Forte #endif
261*fcf3ce44SJohn Forte 
262*fcf3ce44SJohn Forte #endif	/* defined(_SYSCALL32) */
263*fcf3ce44SJohn Forte 
264*fcf3ce44SJohn Forte #define	FC_HBA_PORT_ATTRIBUTES_VERSION	    1
265*fcf3ce44SJohn Forte typedef struct fc_hba_port_attributes {
266*fcf3ce44SJohn Forte 	uint32_t		version; /* FC_HBA_PORT_ATTRIBUTES_VERSION */
267*fcf3ce44SJohn Forte 	fc_hba_state_change_t	lastChange;
268*fcf3ce44SJohn Forte 	minor_t			fp_minor;
269*fcf3ce44SJohn Forte 	la_wwn_t		NodeWWN;
270*fcf3ce44SJohn Forte 	la_wwn_t		PortWWN;
271*fcf3ce44SJohn Forte 	uint32_t		PortFcId;
272*fcf3ce44SJohn Forte 	uint32_t		PortType;
273*fcf3ce44SJohn Forte 	uint32_t		PortState;
274*fcf3ce44SJohn Forte 	uint32_t		PortSupportedClassofService;
275*fcf3ce44SJohn Forte 	uint8_t			PortSupportedFc4Types[32];
276*fcf3ce44SJohn Forte 	uint8_t			PortActiveFc4Types[32];
277*fcf3ce44SJohn Forte 	char			PortSymbolicName[256];
278*fcf3ce44SJohn Forte 	uint32_t		PortSupportedSpeed;
279*fcf3ce44SJohn Forte 	uint32_t		PortSpeed;
280*fcf3ce44SJohn Forte 	uint32_t		PortMaxFrameSize;
281*fcf3ce44SJohn Forte 	la_wwn_t		FabricName;
282*fcf3ce44SJohn Forte 	uint32_t		NumberofDiscoveredPorts;
283*fcf3ce44SJohn Forte 	uint64_t		reserved;
284*fcf3ce44SJohn Forte } fc_hba_port_attributes_t;
285*fcf3ce44SJohn Forte 
286*fcf3ce44SJohn Forte #if defined(_SYSCALL32)
287*fcf3ce44SJohn Forte 
288*fcf3ce44SJohn Forte #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
289*fcf3ce44SJohn Forte #pragma pack(4)
290*fcf3ce44SJohn Forte #endif
291*fcf3ce44SJohn Forte 
292*fcf3ce44SJohn Forte typedef struct fc_hba_port_attributes32 {
293*fcf3ce44SJohn Forte 	uint32_t		version; /* FC_HBA_PORT_ATTRIBUTES_VERSION */
294*fcf3ce44SJohn Forte 	fc_hba_state_change_t	lastChange;
295*fcf3ce44SJohn Forte 	minor_t			fp_minor;
296*fcf3ce44SJohn Forte 	la_wwn_t		NodeWWN;
297*fcf3ce44SJohn Forte 	la_wwn_t		PortWWN;
298*fcf3ce44SJohn Forte 	uint32_t		PortFcId;
299*fcf3ce44SJohn Forte 	uint32_t		PortType;
300*fcf3ce44SJohn Forte 	uint32_t		PortState;
301*fcf3ce44SJohn Forte 	uint32_t		PortSupportedClassofService;
302*fcf3ce44SJohn Forte 	uint8_t			PortSupportedFc4Types[32];
303*fcf3ce44SJohn Forte 	uint8_t			PortActiveFc4Types[32];
304*fcf3ce44SJohn Forte 	char			PortSymbolicName[256];
305*fcf3ce44SJohn Forte 	uint32_t		PortSupportedSpeed;
306*fcf3ce44SJohn Forte 	uint32_t		PortSpeed;
307*fcf3ce44SJohn Forte 	uint32_t		PortMaxFrameSize;
308*fcf3ce44SJohn Forte 	la_wwn_t		FabricName;
309*fcf3ce44SJohn Forte 	uint32_t		NumberofDiscoveredPorts;
310*fcf3ce44SJohn Forte 	uint64_t		reserved;
311*fcf3ce44SJohn Forte } fc_hba_port_attributes32_t;
312*fcf3ce44SJohn Forte 
313*fcf3ce44SJohn Forte #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
314*fcf3ce44SJohn Forte #pragma pack()
315*fcf3ce44SJohn Forte #endif
316*fcf3ce44SJohn Forte 
317*fcf3ce44SJohn Forte #endif	/* defined(_SYSCALL32) */
318*fcf3ce44SJohn Forte 
319*fcf3ce44SJohn Forte #define	FC_HBA_ADAPTER_PORT_STATS_VERSION   1
320*fcf3ce44SJohn Forte typedef struct fc_hba_adapter_port_stats {
321*fcf3ce44SJohn Forte 	uint32_t	    version; /* FC_HBA_ADAPTER_PORT_STATS_VERSION */
322*fcf3ce44SJohn Forte 	uint64_t	    SecondsSinceLastReset;
323*fcf3ce44SJohn Forte 	uint64_t	    TxFrames;
324*fcf3ce44SJohn Forte 	uint64_t	    TxWords;
325*fcf3ce44SJohn Forte 	uint64_t	    RxFrames;
326*fcf3ce44SJohn Forte 	uint64_t	    RxWords;
327*fcf3ce44SJohn Forte 	uint64_t	    LIPCount;
328*fcf3ce44SJohn Forte 	uint64_t	    NOSCount;
329*fcf3ce44SJohn Forte 	uint64_t	    ErrorFrames;
330*fcf3ce44SJohn Forte 	uint64_t	    DumpedFrames;
331*fcf3ce44SJohn Forte 	uint64_t	    LinkFailureCount;
332*fcf3ce44SJohn Forte 	uint64_t	    LossOfSyncCount;
333*fcf3ce44SJohn Forte 	uint64_t	    LossOfSignalCount;
334*fcf3ce44SJohn Forte 	uint64_t	    PrimitiveSeqProtocolErrCount;
335*fcf3ce44SJohn Forte 	uint64_t	    InvalidTxWordCount;
336*fcf3ce44SJohn Forte 	uint64_t	    InvalidCRCCount;
337*fcf3ce44SJohn Forte 	uint64_t	    reserved;
338*fcf3ce44SJohn Forte } fc_hba_adapter_port_stats_t;
339*fcf3ce44SJohn Forte 
340*fcf3ce44SJohn Forte 
341*fcf3ce44SJohn Forte /*
342*fcf3ce44SJohn Forte  * Constant values derived from T11 FC-HBA
343*fcf3ce44SJohn Forte  */
344*fcf3ce44SJohn Forte #define	FC_HBA_PORTTYPE_UNKNOWN		1   /* Unknown */
345*fcf3ce44SJohn Forte #define	FC_HBA_PORTTYPE_OTHER		2   /* Other */
346*fcf3ce44SJohn Forte #define	FC_HBA_PORTTYPE_NOTPRESENT	3   /* Not present */
347*fcf3ce44SJohn Forte #define	FC_HBA_PORTTYPE_NPORT		5   /* Fabric  */
348*fcf3ce44SJohn Forte #define	FC_HBA_PORTTYPE_NLPORT		6   /* Public Loop */
349*fcf3ce44SJohn Forte #define	FC_HBA_PORTTYPE_FLPORT		7
350*fcf3ce44SJohn Forte #define	FC_HBA_PORTTYPE_FPORT		8   /* Fabric Port */
351*fcf3ce44SJohn Forte #define	FC_HBA_PORTTYPE_EPORT		9   /* Fabric expansion port */
352*fcf3ce44SJohn Forte #define	FC_HBA_PORTTYPE_GPORT		10  /* Generic Fabric Port */
353*fcf3ce44SJohn Forte #define	FC_HBA_PORTTYPE_LPORT		20  /* Private Loop */
354*fcf3ce44SJohn Forte #define	FC_HBA_PORTTYPE_PTP		21  /* Point to Point */
355*fcf3ce44SJohn Forte 
356*fcf3ce44SJohn Forte #define	FC_HBA_PORTSTATE_UNKNOWN	1   /* Unknown */
357*fcf3ce44SJohn Forte #define	FC_HBA_PORTSTATE_ONLINE		2   /* Operational */
358*fcf3ce44SJohn Forte #define	FC_HBA_PORTSTATE_OFFLINE	3   /* User Offline */
359*fcf3ce44SJohn Forte #define	FC_HBA_PORTSTATE_BYPASSED	4   /* Bypassed */
360*fcf3ce44SJohn Forte #define	FC_HBA_PORTSTATE_DIAGNOSTICS	5   /* In diagnostics mode */
361*fcf3ce44SJohn Forte #define	FC_HBA_PORTSTATE_LINKDOWN	6   /* Link Down */
362*fcf3ce44SJohn Forte #define	FC_HBA_PORTSTATE_ERROR		7   /* Port Error */
363*fcf3ce44SJohn Forte #define	FC_HBA_PORTSTATE_LOOPBACK	8   /* Loopback */
364*fcf3ce44SJohn Forte 
365*fcf3ce44SJohn Forte 
366*fcf3ce44SJohn Forte 
367*fcf3ce44SJohn Forte #if defined(_SYSCALL32)
368*fcf3ce44SJohn Forte /*
369*fcf3ce44SJohn Forte  * 32 bit varient of fcio_t; to be used
370*fcf3ce44SJohn Forte  * only in the driver and NOT applications
371*fcf3ce44SJohn Forte  */
372*fcf3ce44SJohn Forte struct fcio32 {
373*fcf3ce44SJohn Forte 	uint16_t	fcio_xfer;	/* direction */
374*fcf3ce44SJohn Forte 	uint16_t	fcio_cmd;	/* sub command */
375*fcf3ce44SJohn Forte 	uint16_t	fcio_flags;	/* flags */
376*fcf3ce44SJohn Forte 	uint16_t	fcio_cmd_flags;	/* command specific flags */
377*fcf3ce44SJohn Forte 	size32_t	fcio_ilen;	/* Input buffer length */
378*fcf3ce44SJohn Forte 	caddr32_t	fcio_ibuf;	/* Input buffer */
379*fcf3ce44SJohn Forte 	size32_t	fcio_olen;	/* Output buffer length */
380*fcf3ce44SJohn Forte 	caddr32_t	fcio_obuf;	/* Output buffer */
381*fcf3ce44SJohn Forte 	size32_t	fcio_alen;	/* Auxillary buffer length */
382*fcf3ce44SJohn Forte 	caddr32_t	fcio_abuf;	/* Auxillary buffer */
383*fcf3ce44SJohn Forte 	int		fcio_errno;	/* FC internal error code */
384*fcf3ce44SJohn Forte };
385*fcf3ce44SJohn Forte 
386*fcf3ce44SJohn Forte #if	!defined(__lint)
387*fcf3ce44SJohn Forte _NOTE(SCHEME_PROTECTS_DATA("unique per request", fcio32))
388*fcf3ce44SJohn Forte #endif /* __lint */
389*fcf3ce44SJohn Forte 
390*fcf3ce44SJohn Forte #endif /* _SYSCALL32 */
391*fcf3ce44SJohn Forte 
392*fcf3ce44SJohn Forte #if	!defined(__lint)
393*fcf3ce44SJohn Forte _NOTE(SCHEME_PROTECTS_DATA("unique per request", fcio fc_port_dev))
394*fcf3ce44SJohn Forte #endif /* __lint */
395*fcf3ce44SJohn Forte 
396*fcf3ce44SJohn Forte #ifdef	__cplusplus
397*fcf3ce44SJohn Forte }
398*fcf3ce44SJohn Forte #endif
399*fcf3ce44SJohn Forte 
400*fcf3ce44SJohn Forte #endif	/* _FCIO_H */