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 2014 Garrett D'Amore <garrett@damore.org> 23 * 24 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 25 * Use is subject to license terms. 26 */ 27 28 #ifndef _FC_TYPES_H 29 #define _FC_TYPES_H 30 31 32 33 /* 34 * Types for FC Transport subsystems. 35 * 36 * This file picks up specific as well as generic type 37 * defines, and also serves as a wrapper for many common 38 * includes. 39 */ 40 41 #include <sys/types.h> 42 #include <sys/param.h> 43 44 #ifdef __cplusplus 45 extern "C" { 46 #endif 47 48 #if !defined(_BIT_FIELDS_LTOH) && !defined(_BIT_FIELDS_HTOL) 49 #error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined 50 #endif /* _BIT_FIELDS_LTOH */ 51 52 #ifdef _KERNEL 53 #include <sys/systm.h> 54 #include <sys/cmn_err.h> 55 #include <sys/debug.h> 56 #include <sys/devops.h> 57 #include <sys/callb.h> 58 #include <sys/disp.h> 59 #include <sys/taskq.h> 60 #endif /* _KERNEL */ 61 62 #ifndef _SYS_SCSI_SCSI_TYPES_H 63 64 65 typedef void *opaque_t; 66 67 #endif /* _SYS_SCSI_SCSI_TYPES_H */ 68 69 /* Sysevent defs */ 70 #define EC_SUNFC "EC_sunfc" 71 #define ESC_SUNFC_PORT_ATTACH "ESC_sunfc_port_attach" 72 #define ESC_SUNFC_PORT_DETACH "ESC_sunfc_port_detach" 73 #define ESC_SUNFC_PORT_ONLINE "ESC_sunfc_port_online" 74 #define ESC_SUNFC_PORT_OFFLINE "ESC_sunfc_port_offline" 75 #define ESC_SUNFC_PORT_RSCN "ESC_sunfc_port_rscn" 76 #define ESC_SUNFC_TARGET_ADD "ESC_sunfc_target_add" 77 #define ESC_SUNFC_TARGET_REMOVE "ESC_sunfc_target_remove" 78 #define ESC_SUNFC_DEVICE_ONLINE "ESC_sunfc_device_online" 79 #define ESC_SUNFC_DEVICE_OFFLINE "ESC_sunfc_device_offline" 80 81 /* T11 FC-HBA state change tracking */ 82 typedef uint64_t fc_hba_state_change_t; 83 84 typedef struct port_id { 85 #if defined(_BIT_FIELDS_LTOH) 86 uint32_t port_id : 24, /* Port Identifier */ 87 priv_lilp_posit : 8; /* LILP map position */ 88 #else 89 uint32_t priv_lilp_posit : 8, /* LILP map position */ 90 port_id : 24; /* Port Identifier */ 91 #endif /* _BIT_FIELDS_LTOH */ 92 } fc_portid_t; 93 94 typedef struct hard_addr { 95 #if defined(_BIT_FIELDS_LTOH) 96 uint32_t hard_addr : 24, /* hard address */ 97 rsvd : 8; /* reserved */ 98 #else 99 uint32_t rsvd : 8, 100 hard_addr : 24; /* hard address */ 101 #endif /* _BIT_FIELDS_LTOH */ 102 } fc_hardaddr_t; 103 104 typedef struct port_type { 105 #if defined(_BIT_FIELDS_LTOH) 106 uint32_t rsvd : 24, 107 port_type : 8; 108 #else 109 uint32_t port_type : 8, 110 rsvd : 24; 111 #endif /* _BIT_FIELDS_LTOH */ 112 } fc_porttype_t; 113 114 /* 115 * FCA post reset behavior 116 */ 117 typedef enum fc_reset_action { 118 FC_RESET_RETURN_NONE, /* Can't return any */ 119 FC_RESET_RETURN_ALL, /* Return all commands reached here */ 120 FC_RESET_RETURN_OUTSTANDING /* Return ones that haven't gone out */ 121 } fc_reset_action_t; 122 123 /* 124 * FCA DMA behavior on Unaligned buffers 125 */ 126 typedef enum fc_dma_behavior { 127 FC_ALLOW_STREAMING, /* Streaming mode for all xfers */ 128 FC_NO_STREAMING /* Disable Streaming on unaligned */ 129 /* buffer or byte counts */ 130 } fc_dma_behavior_t; 131 132 133 /* 134 * FCA FCP command and response allocation in DVMA space 135 */ 136 typedef enum fc_fcp_dma { 137 FC_DVMA_SPACE, /* allocation should be in DVMA mem */ 138 FC_NO_DVMA_SPACE /* allocation shouldn't be DVMA mem */ 139 } fc_fcp_dma_t; 140 141 142 /* 143 * struct to track rscn info both within the transport layer 144 * and between the ULPs and transport. 145 */ 146 typedef struct fc_ulp_rscn_info { 147 uint32_t ulp_rscn_count; 148 } fc_ulp_rscn_info_t; 149 150 /* 151 * Define a value for ulp_rscn_count to indicate that the contents 152 * of the fc_ulp_rscn_info_t struct are invalid. Note that some parts of the 153 * code assume that this value is zero, i.e., they use kmem_zalloc(). 154 */ 155 #define FC_INVALID_RSCN_COUNT ((uint32_t)0) 156 157 /* 158 * FC Transport exported header files to all Consumers 159 */ 160 161 #ifdef _KERNEL 162 #include <sys/fibre-channel/impl/fcph.h> 163 #include <sys/fibre-channel/fc_appif.h> 164 #include <sys/fibre-channel/impl/fc_linkapp.h> 165 #include <sys/fibre-channel/impl/fcgs2.h> 166 #include <sys/fibre-channel/impl/fc_fla.h> 167 #include <sys/fibre-channel/impl/fcal.h> 168 #include <sys/fibre-channel/impl/fctl.h> 169 #include <sys/fibre-channel/impl/fc_error.h> 170 #include <sys/fibre-channel/fcio.h> 171 #include <sys/fibre-channel/ulp/fcp.h> 172 #include <sys/fibre-channel/ulp/fcp_util.h> 173 174 /* 175 * For drivers which do not include these - must be last 176 */ 177 #include <sys/ddi.h> 178 #include <sys/sunddi.h> 179 #include <sys/stat.h> 180 #include <sys/sunndi.h> 181 #include <sys/devctl.h> 182 #endif /* _KERNEL */ 183 184 #ifdef __cplusplus 185 } 186 #endif 187 188 #endif /* _FC_TYPES_H */ 189