xref: /onnv-gate/usr/src/uts/common/sys/fcoe/fcoeio.h (revision 9307:7d2e1e823986)
19087SZhong.Wang@Sun.COM /*
29087SZhong.Wang@Sun.COM  * CDDL HEADER START
39087SZhong.Wang@Sun.COM  *
49087SZhong.Wang@Sun.COM  * The contents of this file are subject to the terms of the
59087SZhong.Wang@Sun.COM  * Common Development and Distribution License (the "License").
69087SZhong.Wang@Sun.COM  * You may not use this file except in compliance with the License.
79087SZhong.Wang@Sun.COM  *
89087SZhong.Wang@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99087SZhong.Wang@Sun.COM  * or http://www.opensolaris.org/os/licensing.
109087SZhong.Wang@Sun.COM  * See the License for the specific language governing permissions
119087SZhong.Wang@Sun.COM  * and limitations under the License.
129087SZhong.Wang@Sun.COM  *
139087SZhong.Wang@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
149087SZhong.Wang@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
159087SZhong.Wang@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
169087SZhong.Wang@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
179087SZhong.Wang@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
189087SZhong.Wang@Sun.COM  *
199087SZhong.Wang@Sun.COM  * CDDL HEADER END
209087SZhong.Wang@Sun.COM  */
219087SZhong.Wang@Sun.COM /*
229087SZhong.Wang@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
239087SZhong.Wang@Sun.COM  * Use is subject to license terms.
249087SZhong.Wang@Sun.COM  */
259087SZhong.Wang@Sun.COM #ifndef	_FCOEIO_H_
269087SZhong.Wang@Sun.COM #define	_FCOEIO_H_
279087SZhong.Wang@Sun.COM 
289087SZhong.Wang@Sun.COM #include <sys/ethernet.h>
29*9307Skelly.hu@Sun.COM #include <sys/types.h>
309087SZhong.Wang@Sun.COM 
319087SZhong.Wang@Sun.COM #ifdef	__cplusplus
329087SZhong.Wang@Sun.COM extern "C" {
339087SZhong.Wang@Sun.COM #endif
349087SZhong.Wang@Sun.COM 
359087SZhong.Wang@Sun.COM /*
369087SZhong.Wang@Sun.COM  * ioctl cmd definitions
379087SZhong.Wang@Sun.COM  */
389087SZhong.Wang@Sun.COM #define	FCOEIO_CMD			('G'<< 8 | 2009)
399087SZhong.Wang@Sun.COM #define	FCOEIO_SUB_CMD			('X' << 8)
409087SZhong.Wang@Sun.COM 
419087SZhong.Wang@Sun.COM /*
429087SZhong.Wang@Sun.COM  * fcoe ioctl sub-command
439087SZhong.Wang@Sun.COM  */
449087SZhong.Wang@Sun.COM #define	FCOEIO_CREATE_FCOE_PORT			(FCOEIO_SUB_CMD + 0x01)
459087SZhong.Wang@Sun.COM #define	FCOEIO_DELETE_FCOE_PORT			(FCOEIO_SUB_CMD + 0x02)
469087SZhong.Wang@Sun.COM #define	FCOEIO_GET_FCOE_PORT_LIST		(FCOEIO_SUB_CMD + 0x03)
479087SZhong.Wang@Sun.COM 
489087SZhong.Wang@Sun.COM /*
499087SZhong.Wang@Sun.COM  * define common-used constants
509087SZhong.Wang@Sun.COM  */
519087SZhong.Wang@Sun.COM #define	FCOE_MAX_MAC_NAME_LEN	32
529087SZhong.Wang@Sun.COM 
539087SZhong.Wang@Sun.COM /*
549087SZhong.Wang@Sun.COM  * fcoeio_xfer definitions
559087SZhong.Wang@Sun.COM  */
569087SZhong.Wang@Sun.COM #define	FCOEIO_XFER_NONE		0x00
579087SZhong.Wang@Sun.COM #define	FCOEIO_XFER_READ		0x01
589087SZhong.Wang@Sun.COM #define	FCOEIO_XFER_WRITE		0x02
599087SZhong.Wang@Sun.COM #define	FCOEIO_XFER_RW		(FCOEIO_XFER_READ | FCOEIO_XFER_WRITE)
609087SZhong.Wang@Sun.COM 
619087SZhong.Wang@Sun.COM /*
629087SZhong.Wang@Sun.COM  * fcoeio_errno definitions
639087SZhong.Wang@Sun.COM  */
649087SZhong.Wang@Sun.COM typedef enum {
659087SZhong.Wang@Sun.COM 	FCOEIOE_INVAL_ARG = 5,
669087SZhong.Wang@Sun.COM 	FCOEIOE_BUSY,
679087SZhong.Wang@Sun.COM 	FCOEIOE_ALREADY,
689087SZhong.Wang@Sun.COM 	FCOEIOE_PWWN_CONFLICTED,
699087SZhong.Wang@Sun.COM 	FCOEIOE_NWWN_CONFLICTED,
709087SZhong.Wang@Sun.COM 	FCOEIOE_CREATE_MAC,
719087SZhong.Wang@Sun.COM 	FCOEIOE_OPEN_MAC,
729087SZhong.Wang@Sun.COM 	FCOEIOE_CREATE_PORT,
739087SZhong.Wang@Sun.COM 	FCOEIOE_NEED_JUMBO_FRAME,
749087SZhong.Wang@Sun.COM 	FCOEIOE_MAC_NOT_FOUND,
759087SZhong.Wang@Sun.COM 	FCOEIOE_OFFLINE_FAILURE,
76*9307Skelly.hu@Sun.COM 	FCOEIOE_MORE_DATA
779087SZhong.Wang@Sun.COM } fcoeio_stat_t;
789087SZhong.Wang@Sun.COM 
799087SZhong.Wang@Sun.COM /* Biggest buffer length, can hold up to 1024 port instances */
809087SZhong.Wang@Sun.COM #define	FCOEIO_MAX_BUF_LEN	0x10000
819087SZhong.Wang@Sun.COM 
829087SZhong.Wang@Sun.COM typedef struct fcoeio {
839087SZhong.Wang@Sun.COM 	uint16_t	fcoeio_xfer;		/* direction */
849087SZhong.Wang@Sun.COM 	uint16_t	fcoeio_cmd;		/* sub command */
859087SZhong.Wang@Sun.COM 	uint16_t	fcoeio_flags;		/* flags */
869087SZhong.Wang@Sun.COM 	uint16_t	fcoeio_cmd_flags;	/* command specific flags */
879087SZhong.Wang@Sun.COM 	uint32_t	fcoeio_ilen;		/* Input buffer length */
889087SZhong.Wang@Sun.COM 	uint32_t	fcoeio_olen;		/* Output buffer length */
899087SZhong.Wang@Sun.COM 	uint32_t	fcoeio_alen;		/* Auxillary buffer length */
909087SZhong.Wang@Sun.COM 	fcoeio_stat_t	fcoeio_status;		/* FC internal error status */
919087SZhong.Wang@Sun.COM 	uint64_t	fcoeio_ibuf;		/* Input buffer */
929087SZhong.Wang@Sun.COM 	uint64_t	fcoeio_obuf;		/* Output buffer */
939087SZhong.Wang@Sun.COM 	uint64_t	fcoeio_abuf;		/* Auxillary buffer */
949087SZhong.Wang@Sun.COM } fcoeio_t;
959087SZhong.Wang@Sun.COM 
969087SZhong.Wang@Sun.COM /*
979087SZhong.Wang@Sun.COM  * Client port type
989087SZhong.Wang@Sun.COM  */
999087SZhong.Wang@Sun.COM typedef enum {
1009087SZhong.Wang@Sun.COM 	FCOE_CLIENT_INITIATOR = 0,
1019087SZhong.Wang@Sun.COM 	FCOE_CLIENT_TARGET
1029087SZhong.Wang@Sun.COM } fcoe_cli_type_t;
1039087SZhong.Wang@Sun.COM 
1049087SZhong.Wang@Sun.COM /*
1059087SZhong.Wang@Sun.COM  * Command for FCOEIO_CREATE_FCOET_PORT
1069087SZhong.Wang@Sun.COM  */
1079087SZhong.Wang@Sun.COM #define	FCOE_WWN_SIZE		8
1089087SZhong.Wang@Sun.COM typedef struct fcoeio_create_port_param {
1099087SZhong.Wang@Sun.COM 	uchar_t		fcp_pwwn[FCOE_WWN_SIZE];
1109087SZhong.Wang@Sun.COM 	uchar_t		fcp_nwwn[FCOE_WWN_SIZE];
1119087SZhong.Wang@Sun.COM 	uint32_t	fcp_nwwn_provided;
1129087SZhong.Wang@Sun.COM 	uint32_t	fcp_pwwn_provided;
1139087SZhong.Wang@Sun.COM 	uint32_t	fcp_force_promisc;
1149087SZhong.Wang@Sun.COM 	fcoe_cli_type_t	fcp_port_type;
115*9307Skelly.hu@Sun.COM 	datalink_id_t	fcp_mac_linkid;
116*9307Skelly.hu@Sun.COM 	uint32_t	fcp_rsvd0;
1179087SZhong.Wang@Sun.COM } fcoeio_create_port_param_t;
1189087SZhong.Wang@Sun.COM 
119*9307Skelly.hu@Sun.COM typedef struct fcoeio_delete_port_param {
120*9307Skelly.hu@Sun.COM 	datalink_id_t	fdp_mac_linkid;
121*9307Skelly.hu@Sun.COM 	uint32_t	fdp_rsvd0;
122*9307Skelly.hu@Sun.COM } fcoeio_delete_port_param_t;
123*9307Skelly.hu@Sun.COM 
1249087SZhong.Wang@Sun.COM /*
1259087SZhong.Wang@Sun.COM  * FCOE port instance
1269087SZhong.Wang@Sun.COM  */
1279087SZhong.Wang@Sun.COM typedef struct fcoe_port_instance {
1289087SZhong.Wang@Sun.COM 	uchar_t			fpi_pwwn[FCOE_WWN_SIZE];
129*9307Skelly.hu@Sun.COM 	datalink_id_t		fpi_mac_linkid;
130*9307Skelly.hu@Sun.COM 	uint32_t		fpi_rsvd0;
1319087SZhong.Wang@Sun.COM 	uint8_t			fpi_mac_factory_addr[ETHERADDRL];
1329087SZhong.Wang@Sun.COM 	uint16_t		fpi_mac_promisc;
1339087SZhong.Wang@Sun.COM 	uint8_t			fpi_mac_current_addr[ETHERADDRL];
1349087SZhong.Wang@Sun.COM 	uint16_t		fpi_rsvd1;
1359087SZhong.Wang@Sun.COM 	fcoe_cli_type_t		fpi_port_type;
1369087SZhong.Wang@Sun.COM 	uint32_t		fpi_mtu_size;
1379087SZhong.Wang@Sun.COM } fcoe_port_instance_t;
1389087SZhong.Wang@Sun.COM 
1399087SZhong.Wang@Sun.COM /*
1409087SZhong.Wang@Sun.COM  * FCOE port instance list
1419087SZhong.Wang@Sun.COM  */
1429087SZhong.Wang@Sun.COM typedef struct fcoe_port_list {
1439087SZhong.Wang@Sun.COM 	uint64_t		numPorts;
1449087SZhong.Wang@Sun.COM 	fcoe_port_instance_t	ports[1];
1459087SZhong.Wang@Sun.COM } fcoe_port_list_t;
1469087SZhong.Wang@Sun.COM 
1479087SZhong.Wang@Sun.COM #ifdef	__cplusplus
1489087SZhong.Wang@Sun.COM }
1499087SZhong.Wang@Sun.COM #endif
1509087SZhong.Wang@Sun.COM 
1519087SZhong.Wang@Sun.COM #endif	/* _FCOEIO_H_ */
152