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