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 */