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