/* * 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 2014 Garrett D'Amore * * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _FC_TYPES_H #define _FC_TYPES_H /* * Types for FC Transport subsystems. * * This file picks up specific as well as generic type * defines, and also serves as a wrapper for many common * includes. */ #include #include #ifdef __cplusplus extern "C" { #endif #if !defined(_BIT_FIELDS_LTOH) && !defined(_BIT_FIELDS_HTOL) #error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined #endif /* _BIT_FIELDS_LTOH */ #ifdef _KERNEL #include #include #include #include #include #include #include #endif /* _KERNEL */ #ifndef _SYS_SCSI_SCSI_TYPES_H typedef void *opaque_t; #endif /* _SYS_SCSI_SCSI_TYPES_H */ /* Sysevent defs */ #define EC_SUNFC "EC_sunfc" #define ESC_SUNFC_PORT_ATTACH "ESC_sunfc_port_attach" #define ESC_SUNFC_PORT_DETACH "ESC_sunfc_port_detach" #define ESC_SUNFC_PORT_ONLINE "ESC_sunfc_port_online" #define ESC_SUNFC_PORT_OFFLINE "ESC_sunfc_port_offline" #define ESC_SUNFC_PORT_RSCN "ESC_sunfc_port_rscn" #define ESC_SUNFC_TARGET_ADD "ESC_sunfc_target_add" #define ESC_SUNFC_TARGET_REMOVE "ESC_sunfc_target_remove" #define ESC_SUNFC_DEVICE_ONLINE "ESC_sunfc_device_online" #define ESC_SUNFC_DEVICE_OFFLINE "ESC_sunfc_device_offline" /* T11 FC-HBA state change tracking */ typedef uint64_t fc_hba_state_change_t; typedef struct port_id { #if defined(_BIT_FIELDS_LTOH) uint32_t port_id : 24, /* Port Identifier */ priv_lilp_posit : 8; /* LILP map position */ #else uint32_t priv_lilp_posit : 8, /* LILP map position */ port_id : 24; /* Port Identifier */ #endif /* _BIT_FIELDS_LTOH */ } fc_portid_t; typedef struct hard_addr { #if defined(_BIT_FIELDS_LTOH) uint32_t hard_addr : 24, /* hard address */ rsvd : 8; /* reserved */ #else uint32_t rsvd : 8, hard_addr : 24; /* hard address */ #endif /* _BIT_FIELDS_LTOH */ } fc_hardaddr_t; typedef struct port_type { #if defined(_BIT_FIELDS_LTOH) uint32_t rsvd : 24, port_type : 8; #else uint32_t port_type : 8, rsvd : 24; #endif /* _BIT_FIELDS_LTOH */ } fc_porttype_t; /* * FCA post reset behavior */ typedef enum fc_reset_action { FC_RESET_RETURN_NONE, /* Can't return any */ FC_RESET_RETURN_ALL, /* Return all commands reached here */ FC_RESET_RETURN_OUTSTANDING /* Return ones that haven't gone out */ } fc_reset_action_t; /* * FCA DMA behavior on Unaligned buffers */ typedef enum fc_dma_behavior { FC_ALLOW_STREAMING, /* Streaming mode for all xfers */ FC_NO_STREAMING /* Disable Streaming on unaligned */ /* buffer or byte counts */ } fc_dma_behavior_t; /* * FCA FCP command and response allocation in DVMA space */ typedef enum fc_fcp_dma { FC_DVMA_SPACE, /* allocation should be in DVMA mem */ FC_NO_DVMA_SPACE /* allocation shouldn't be DVMA mem */ } fc_fcp_dma_t; /* * struct to track rscn info both within the transport layer * and between the ULPs and transport. */ typedef struct fc_ulp_rscn_info { uint32_t ulp_rscn_count; } fc_ulp_rscn_info_t; /* * Define a value for ulp_rscn_count to indicate that the contents * of the fc_ulp_rscn_info_t struct are invalid. Note that some parts of the * code assume that this value is zero, i.e., they use kmem_zalloc(). */ #define FC_INVALID_RSCN_COUNT ((uint32_t)0) /* * FC Transport exported header files to all Consumers */ #ifdef _KERNEL #include #include #include #include #include #include #include #include #include #include #include /* * For drivers which do not include these - must be last */ #include #include #include #include #include #endif /* _KERNEL */ #ifdef __cplusplus } #endif #endif /* _FC_TYPES_H */