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