fcoeio.h revision d4401b99a36e5170ccaa7defc0d2ac65b23f08c6
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _FCOEIO_H_
#define _FCOEIO_H_
#include <sys/ethernet.h>
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* ioctl cmd definitions
*/
#define FCOEIO_CMD ('G'<< 8 | 2009)
#define FCOEIO_SUB_CMD ('X' << 8)
/*
* fcoe ioctl sub-command
*/
#define FCOEIO_CREATE_FCOE_PORT (FCOEIO_SUB_CMD + 0x01)
#define FCOEIO_DELETE_FCOE_PORT (FCOEIO_SUB_CMD + 0x02)
#define FCOEIO_GET_FCOE_PORT_LIST (FCOEIO_SUB_CMD + 0x03)
/*
* define common-used constants
*/
#define FCOE_MAX_MAC_NAME_LEN 32
/*
* fcoeio_xfer definitions
*/
#define FCOEIO_XFER_NONE 0x00
#define FCOEIO_XFER_READ 0x01
#define FCOEIO_XFER_WRITE 0x02
#define FCOEIO_XFER_RW (FCOEIO_XFER_READ | FCOEIO_XFER_WRITE)
/*
* fcoeio_errno definitions
*/
typedef enum {
FCOEIOE_INVAL_ARG = 5,
FCOEIOE_BUSY,
FCOEIOE_ALREADY,
FCOEIOE_PWWN_CONFLICTED,
FCOEIOE_NWWN_CONFLICTED,
FCOEIOE_CREATE_MAC,
FCOEIOE_OPEN_MAC,
FCOEIOE_CREATE_PORT,
FCOEIOE_NEED_JUMBO_FRAME,
FCOEIOE_MAC_NOT_FOUND,
FCOEIOE_OFFLINE_FAILURE,
FCOEIOE_MORE_DATA
} fcoeio_stat_t;
/* Biggest buffer length, can hold up to 1024 port instances */
#define FCOEIO_MAX_BUF_LEN 0x10000
typedef struct fcoeio {
uint16_t fcoeio_xfer; /* direction */
uint16_t fcoeio_cmd; /* sub command */
uint16_t fcoeio_flags; /* flags */
uint16_t fcoeio_cmd_flags; /* command specific flags */
uint32_t fcoeio_ilen; /* Input buffer length */
uint32_t fcoeio_olen; /* Output buffer length */
uint32_t fcoeio_alen; /* Auxillary buffer length */
fcoeio_stat_t fcoeio_status; /* FC internal error status */
uint64_t fcoeio_ibuf; /* Input buffer */
uint64_t fcoeio_obuf; /* Output buffer */
uint64_t fcoeio_abuf; /* Auxillary buffer */
} fcoeio_t;
/*
* Client port type
*/
typedef enum {
FCOE_CLIENT_INITIATOR = 0,
FCOE_CLIENT_TARGET
} fcoe_cli_type_t;
/*
* Command for FCOEIO_CREATE_FCOET_PORT
*/
#define FCOE_WWN_SIZE 8
typedef struct fcoeio_create_port_param {
uchar_t fcp_pwwn[FCOE_WWN_SIZE];
uchar_t fcp_nwwn[FCOE_WWN_SIZE];
uint32_t fcp_nwwn_provided;
uint32_t fcp_pwwn_provided;
uint32_t fcp_force_promisc;
fcoe_cli_type_t fcp_port_type;
datalink_id_t fcp_mac_linkid;
uint32_t fcp_rsvd0;
} fcoeio_create_port_param_t;
typedef struct fcoeio_delete_port_param {
datalink_id_t fdp_mac_linkid;
uint32_t fdp_rsvd0;
} fcoeio_delete_port_param_t;
/*
* FCOE port instance
*/
typedef struct fcoe_port_instance {
uchar_t fpi_pwwn[FCOE_WWN_SIZE];
datalink_id_t fpi_mac_linkid;
uint32_t fpi_rsvd0;
uint8_t fpi_mac_factory_addr[ETHERADDRL];
uint16_t fpi_mac_promisc;
uint8_t fpi_mac_current_addr[ETHERADDRL];
uint16_t fpi_rsvd1;
fcoe_cli_type_t fpi_port_type;
uint32_t fpi_mtu_size;
} fcoe_port_instance_t;
/*
* FCOE port instance list
*/
typedef struct fcoe_port_list {
uint64_t numPorts;
fcoe_port_instance_t ports[1];
} fcoe_port_list_t;
#ifdef __cplusplus
}
#endif
#endif /* _FCOEIO_H_ */