xref: /illumos-gate/usr/src/uts/common/sys/fcoe/fcoeio.h (revision 5422785d352a2bb398daceab3d1898a8aa64d006)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 #ifndef	_FCOEIO_H_
26 #define	_FCOEIO_H_
27 
28 #include <sys/ethernet.h>
29 #include <sys/types.h>
30 
31 #ifdef	__cplusplus
32 extern "C" {
33 #endif
34 
35 /*
36  * ioctl cmd definitions
37  */
38 #define	FCOEIO_CMD			('G'<< 8 | 2009)
39 #define	FCOEIO_SUB_CMD			('X' << 8)
40 
41 /*
42  * fcoe ioctl sub-command
43  */
44 #define	FCOEIO_CREATE_FCOE_PORT			(FCOEIO_SUB_CMD + 0x01)
45 #define	FCOEIO_DELETE_FCOE_PORT			(FCOEIO_SUB_CMD + 0x02)
46 #define	FCOEIO_GET_FCOE_PORT_LIST		(FCOEIO_SUB_CMD + 0x03)
47 
48 /*
49  * define common-used constants
50  */
51 #define	FCOE_MAX_MAC_NAME_LEN	32
52 
53 /*
54  * fcoeio_xfer definitions
55  */
56 #define	FCOEIO_XFER_NONE		0x00
57 #define	FCOEIO_XFER_READ		0x01
58 #define	FCOEIO_XFER_WRITE		0x02
59 #define	FCOEIO_XFER_RW		(FCOEIO_XFER_READ | FCOEIO_XFER_WRITE)
60 
61 /*
62  * fcoeio_errno definitions
63  */
64 typedef enum {
65 	FCOEIOE_INVAL_ARG = 5,
66 	FCOEIOE_BUSY,
67 	FCOEIOE_ALREADY,
68 	FCOEIOE_PWWN_CONFLICTED,
69 	FCOEIOE_NWWN_CONFLICTED,
70 	FCOEIOE_CREATE_MAC,
71 	FCOEIOE_OPEN_MAC,
72 	FCOEIOE_CREATE_PORT,
73 	FCOEIOE_NEED_JUMBO_FRAME,
74 	FCOEIOE_MAC_NOT_FOUND,
75 	FCOEIOE_OFFLINE_FAILURE,
76 	FCOEIOE_MORE_DATA
77 } fcoeio_stat_t;
78 
79 /* Biggest buffer length, can hold up to 1024 port instances */
80 #define	FCOEIO_MAX_BUF_LEN	0x10000
81 
82 typedef struct fcoeio {
83 	uint16_t	fcoeio_xfer;		/* direction */
84 	uint16_t	fcoeio_cmd;		/* sub command */
85 	uint16_t	fcoeio_flags;		/* flags */
86 	uint16_t	fcoeio_cmd_flags;	/* command specific flags */
87 	uint32_t	fcoeio_ilen;		/* Input buffer length */
88 	uint32_t	fcoeio_olen;		/* Output buffer length */
89 	uint32_t	fcoeio_alen;		/* Auxillary buffer length */
90 	fcoeio_stat_t	fcoeio_status;		/* FC internal error status */
91 	uint64_t	fcoeio_ibuf;		/* Input buffer */
92 	uint64_t	fcoeio_obuf;		/* Output buffer */
93 	uint64_t	fcoeio_abuf;		/* Auxillary buffer */
94 } fcoeio_t;
95 
96 /*
97  * Client port type
98  */
99 typedef enum {
100 	FCOE_CLIENT_INITIATOR = 0,
101 	FCOE_CLIENT_TARGET
102 } fcoe_cli_type_t;
103 
104 /*
105  * Command for FCOEIO_CREATE_FCOET_PORT
106  */
107 #define	FCOE_WWN_SIZE		8
108 typedef struct fcoeio_create_port_param {
109 	uchar_t		fcp_pwwn[FCOE_WWN_SIZE];
110 	uchar_t		fcp_nwwn[FCOE_WWN_SIZE];
111 	uint32_t	fcp_nwwn_provided;
112 	uint32_t	fcp_pwwn_provided;
113 	uint32_t	fcp_force_promisc;
114 	fcoe_cli_type_t	fcp_port_type;
115 	datalink_id_t	fcp_mac_linkid;
116 	uint32_t	fcp_rsvd0;
117 } fcoeio_create_port_param_t;
118 
119 typedef struct fcoeio_delete_port_param {
120 	datalink_id_t	fdp_mac_linkid;
121 	uint32_t	fdp_rsvd0;
122 } fcoeio_delete_port_param_t;
123 
124 /*
125  * FCOE port instance
126  */
127 typedef struct fcoe_port_instance {
128 	uchar_t			fpi_pwwn[FCOE_WWN_SIZE];
129 	datalink_id_t		fpi_mac_linkid;
130 	uint32_t		fpi_rsvd0;
131 	uint8_t			fpi_mac_factory_addr[ETHERADDRL];
132 	uint16_t		fpi_mac_promisc;
133 	uint8_t			fpi_mac_current_addr[ETHERADDRL];
134 	uint16_t		fpi_rsvd1;
135 	fcoe_cli_type_t		fpi_port_type;
136 	uint32_t		fpi_mtu_size;
137 } fcoe_port_instance_t;
138 
139 /*
140  * FCOE port instance list
141  */
142 typedef struct fcoe_port_list {
143 	uint64_t		numPorts;
144 	fcoe_port_instance_t	ports[1];
145 } fcoe_port_list_t;
146 
147 #ifdef	__cplusplus
148 }
149 #endif
150 
151 #endif	/* _FCOEIO_H_ */
152