Print this page
NEX-8705 Drivers for ATTO Celerity FC-162E Gen 5 and Celerity FC-162P Gen 6 16GB FC cards support
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/uts/common/sys/fibre-channel/impl/fctl.h
+++ new/usr/src/uts/common/sys/fibre-channel/impl/fctl.h
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
12 12 *
13 13 * When distributing Covered Code, include this CDDL HEADER in each
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
19 19 * CDDL HEADER END
20 20 */
21 21 /*
22 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 23 * Use is subject to license terms.
24 24 */
25 25
26 26 #ifndef _FCTL_H
27 27 #define _FCTL_H
28 28
29 29
30 30 #include <sys/note.h>
31 31 #include <sys/time.h>
32 32
33 33 #ifdef __cplusplus
34 34 extern "C" {
35 35 #endif
36 36
37 37 /*
38 38 * These are the legal values for the fp_state member of the fc_local_port_t
39 39 * struct. These values are understood by ULPs, FCA drivers, and fp/fctl.
40 40 *
41 41 * The link state value is kept the least significant byte, and the link speed
42 42 * value is kept in the next most significant byte:
43 43 *
44 44 * +------------+------------+
45 45 * | link speed | link state |
46 46 * +------------+------------+
47 47 */
48 48 /* Values for the link state (least significant byte as above) */
49 49 #define FC_STATE_OFFLINE 0x0000 /* Link is offline or not */
50 50 /* initialized. */
51 51 #define FC_STATE_ONLINE 0x0001 /* Link is up, the topology */
52 52 /* is given in fp_topology. */
53 53 #define FC_STATE_LOOP 0x0002 /* Link is up, the topology */
54 54 /* is a private loop. */
55 55 #define FC_STATE_NAMESERVICE 0x0003 /* Not really used */
56 56 #define FC_STATE_RESET 0x0004
57 57 #define FC_STATE_RESET_REQUESTED 0x0005
58 58 #define FC_STATE_LIP 0x0006
59 59 #define FC_STATE_LIP_LBIT_SET 0x0007
|
↓ open down ↓ |
59 lines elided |
↑ open up ↑ |
60 60 #define FC_STATE_DEVICE_CHANGE 0x0008 /* For ULPs */
61 61 #define FC_STATE_TARGET_PORT_RESET 0x0009
62 62
63 63 /* Values for the link speed (next least significant byte as above) */
64 64 #define FC_STATE_1GBIT_SPEED 0x0100 /* 1 Gbit/sec */
65 65 #define FC_STATE_2GBIT_SPEED 0x0400 /* 2 Gbit/sec */
66 66 #define FC_STATE_4GBIT_SPEED 0x0500 /* 4 Gbit/sec */
67 67 #define FC_STATE_10GBIT_SPEED 0x0600 /* 10 Gbit/sec */
68 68 #define FC_STATE_8GBIT_SPEED 0x0700 /* 8 Gbit/sec */
69 69 #define FC_STATE_16GBIT_SPEED 0x0800 /* 16 Gbit/sec */
70 +#define FC_STATE_32GBIT_SPEED 0x0900 /* 32 Gbit/sec */
70 71 #define FC_STATE_FULL_SPEED FC_STATE_1GBIT_SPEED
71 72 #define FC_STATE_DOUBLE_SPEED FC_STATE_2GBIT_SPEED
72 73
73 74 /* pi_port_state, used only when binding port */
74 75 #define FC_STATE_FCA_IS_NODMA 0x80000000
75 76
76 77 /*
77 78 * Macros to discriminate between the link state byte and the link speed
78 79 * byte in fp_state (also good for improved code obfuscation and job security
79 80 * even during a good economy).
80 81 */
81 82 #define FC_PORT_SPEED_MASK(state) ((state) & 0xFF00)
82 83 #define FC_PORT_STATE_MASK(state) ((state) & 0xFF)
83 84
84 85
85 86 /*
86 87 * Notify flags passed between ULPs and FCAs
87 88 *
88 89 * 3 bytes 1 byte
89 90 * +-----------------------+---------------+
90 91 * | Flag specific values | Notify flag |
91 92 * +-----------------------+---------------+
92 93 */
93 94 #define FC_NOTIFY_RECOVERY_DONE 0x01
94 95 #define FC_NOTIFY_TARGET_MODE 0x02
95 96 #define FC_NOTIFY_NO_TARGET_MODE 0x03
96 97 #define FC_NOTIFY_RECOVERY_CLEANUP 0x04
97 98 #define FC_NOTIFY_THROTTLE 0x80
98 99
99 100 #define FC_NOTIFY_FLAG_MASK(cmd) ((cmd) & 0xFF)
100 101 #define FC_NOTIFY_VALUE_MASK(cmd) ((cmd) & 0xFFFFFF00)
101 102 #define FC_NOTIFY_GET_FLAG(cmd) FC_NOTIFY_FLAG_MASK(cmd)
102 103 #define FC_NOTIFY_GET_VALUE(cmd) (FC_NOTIFY_VALUE_MASK(cmd) >> 8)
103 104
104 105 /*
105 106 * pkt_tran_flags definitions
106 107 */
107 108 #define FC_TRAN_CLASS(flag) ((flag) & 0xF0)
108 109 #define FC_TRAN_INTR 0x01
109 110 #define FC_TRAN_NO_INTR 0x02
110 111 #define FC_TRAN_HI_PRIORITY 0x04
111 112 #define FC_TRAN_DUMPING 0x08
112 113 #define FC_TRAN_CLASS1 0x10
113 114 #define FC_TRAN_CLASS2 0x20
114 115 #define FC_TRAN_CLASS3 0x30
115 116 #define FC_TRAN_CLASS_INVALID 0xF0
116 117 #define FC_TRAN_IMMEDIATE_CB 0x100
117 118
118 119
119 120 /*
120 121 * pkt_tran_type definitions
121 122 */
122 123 #define FC_PKT_NOP 0
123 124 #define FC_PKT_INBOUND 1
124 125 #define FC_PKT_OUTBOUND 2
125 126 #define FC_PKT_EXCHANGE 3
126 127 #define FC_PKT_FCP_READ 4
127 128 #define FC_PKT_FCP_WRITE 5
128 129 #define FC_PKT_IP_WRITE 6
129 130 #define FC_PKT_BROADCAST 7
130 131
131 132
132 133 #define FC_TRACE_LOG_MASK 0xF00000
133 134 #define FC_TRACE_LOG_MSG 0x100000
134 135 #define FC_TRACE_LOG_CONSOLE 0x200000
135 136 #define FC_TRACE_LOG_CONSOLE_MSG 0x400000
136 137 #define FC_TRACE_LOG_BUF 0x080000
137 138
138 139
139 140 /*
140 141 * The fc_packet_t represents an FC Exchange and is the primary unit of
141 142 * information exchange between FC driver modules.
142 143 */
143 144 typedef struct fc_packet {
144 145 uint16_t pkt_tran_flags; /* transport flag */
145 146 uint16_t pkt_tran_type; /* transport type */
146 147 uint32_t pkt_timeout; /* time-out length */
147 148 uint32_t pkt_cmdlen; /* command length */
148 149 uint32_t pkt_rsplen; /* response length */
149 150 uint32_t pkt_datalen; /* data length */
150 151 caddr_t pkt_cmd; /* command */
151 152 caddr_t pkt_resp; /* response */
152 153 caddr_t pkt_data; /* data */
153 154 struct buf *pkt_data_buf; /* reserved */
154 155 void (*pkt_ulp_comp)(struct fc_packet *);
155 156 /* framework private */
156 157 opaque_t pkt_ulp_private; /* caller's private */
157 158 void (*pkt_comp)(struct fc_packet *); /* callback */
158 159 struct fc_remote_port *pkt_pd; /* port device */
159 160 ddi_dma_handle_t pkt_cmd_dma; /* command DMA */
160 161 ddi_acc_handle_t pkt_cmd_acc; /* command access */
161 162 ddi_dma_cookie_t *pkt_cmd_cookie; /* command cookie */
162 163 ddi_dma_handle_t pkt_resp_dma; /* response DMA */
163 164 ddi_acc_handle_t pkt_resp_acc; /* response access */
164 165 ddi_dma_cookie_t *pkt_resp_cookie; /* response cookie */
165 166 ddi_dma_handle_t pkt_data_dma; /* data DMA */
166 167 ddi_acc_handle_t pkt_data_acc; /* data access */
167 168 ddi_dma_cookie_t *pkt_data_cookie; /* data cookie */
168 169 uint_t pkt_cmd_cookie_cnt;
169 170 uint_t pkt_resp_cookie_cnt;
170 171 uint_t pkt_data_cookie_cnt; /* of a window */
171 172 fc_frame_hdr_t pkt_cmd_fhdr; /* command frame hdr */
172 173 opaque_t pkt_fca_private; /* FCA private */
173 174 uchar_t pkt_state; /* packet state */
174 175 uchar_t pkt_action; /* packet action */
175 176 uchar_t pkt_expln; /* reason explanation */
176 177 uint32_t pkt_reason; /* expln of state */
177 178 uint64_t pkt_ena; /* ENA in case of err */
178 179 fc_frame_hdr_t pkt_resp_fhdr; /* response frame hdr */
179 180 uint32_t pkt_data_resid; /* data resid length */
180 181 uint32_t pkt_resp_resid; /* resp resid length */
181 182 opaque_t pkt_fca_device; /* FCA device ptr */
182 183 opaque_t pkt_ub_resp_token; /* UB resp token */
183 184 opaque_t pkt_session; /* reserved */
184 185 opaque_t pkt_security1; /* reserved */
185 186 opaque_t pkt_security2; /* reserved */
186 187 opaque_t pkt_qos1; /* reserved */
187 188 opaque_t pkt_qos2; /* reserved */
188 189 opaque_t pkt_ulp_rsvd1; /* ULP reserved */
189 190
190 191 /*
191 192 * The pkt_ulp_rscn_infop (aka pkt_ulp_rsvd1) field is used to carry
192 193 * the rscn info (of type fc_ulp_rscn_info_t) down to the transport so
193 194 * that the transport can determine (in some cases) whether or not the
194 195 * requested operation was aware of the latest state change
195 196 * notification.
196 197 *
197 198 * If not NULL, then the pkt_ulp_rscn_infop (aka pkt_ulp_rsvd1) may
198 199 * point to an fc_ulp_rscn_info_t struct that contains the rscn count
199 200 * information for this fc_packet_t.
200 201 */
201 202 #define pkt_ulp_rscn_infop pkt_ulp_rsvd1 /* tracks rscn counts */
202 203
203 204 opaque_t pkt_ulp_rsvd2; /* ULP reserved */
204 205 opaque_t pkt_fctl_rsvd1; /* Transport reserved */
205 206 opaque_t pkt_fctl_rsvd2; /* Transport reserved */
206 207 opaque_t pkt_fca_rsvd1; /* FCA reserved */
207 208 opaque_t pkt_fca_rsvd2; /* FCA reserved */
208 209 uint64_t pkt_rsvd; /* should be last */
209 210 } fc_packet_t;
210 211
211 212 #if !defined(__lint)
212 213 _NOTE(SCHEME_PROTECTS_DATA("not messed with after transport", fc_packet))
213 214 #endif /* __lint */
214 215
215 216
216 217 typedef struct fca_hba_fru_details {
217 218 uint32_t port_index;
218 219 uint64_t high;
219 220 uint64_t low;
220 221 } fca_hba_fru_details_t;
221 222
222 223 /*
223 224 * HBA/Port attributes tracked for the T11 FC-HBA specification
224 225 */
225 226 #define FC_HBA_PORTSPEED_UNKNOWN 0 /* Unknown - transceiver incable */
226 227 /* of reporting */
227 228 #define FC_HBA_PORTSPEED_1GBIT 1 /* 1 GBit/sec */
228 229 #define FC_HBA_PORTSPEED_2GBIT 2 /* 2 GBit/sec */
229 230 #define FC_HBA_PORTSPEED_10GBIT 4 /* 10 GBit/sec */
230 231 #define FC_HBA_PORTSPEED_4GBIT 8 /* 4 GBit/sec */
231 232 #define FC_HBA_PORTSPEED_8GBIT 16 /* 8 GBit/sec */
232 233 #define FC_HBA_PORTSPEED_16GBIT 32 /* 16 GBit/sec */
233 234 #define FC_HBA_PORTSPEED_NOT_NEGOTIATED (1<<15) /* Speed not established */
234 235
235 236 #define FCHBA_MANUFACTURER_LEN 64
236 237 #define FCHBA_SERIAL_NUMBER_LEN 64
237 238 #define FCHBA_MODEL_LEN 256
238 239 #define FCHBA_MODEL_DESCRIPTION_LEN 256
239 240 #define FCHBA_HARDWARE_VERSION_LEN 256
240 241 #define FCHBA_DRIVER_VERSION_LEN 256
241 242 #define FCHBA_OPTION_ROM_VERSION_LEN 256
242 243 #define FCHBA_FIRMWARE_VERSION_LEN 256
243 244 #define FCHBA_DRIVER_NAME_LEN 256
244 245 #define FCHBA_SYMB_NAME_LEN 255
245 246
246 247 typedef struct fca_port_attrs {
247 248 char manufacturer[FCHBA_MANUFACTURER_LEN];
248 249 char serial_number[FCHBA_SERIAL_NUMBER_LEN];
249 250 char model[FCHBA_MODEL_LEN];
250 251 char model_description[FCHBA_MODEL_DESCRIPTION_LEN];
251 252 char hardware_version[FCHBA_HARDWARE_VERSION_LEN];
252 253 char driver_version[FCHBA_DRIVER_VERSION_LEN];
253 254 char option_rom_version[FCHBA_OPTION_ROM_VERSION_LEN];
254 255 char firmware_version[FCHBA_FIRMWARE_VERSION_LEN];
255 256 char driver_name[FCHBA_DRIVER_NAME_LEN];
256 257 uint32_t vendor_specific_id;
257 258 uint32_t supported_cos;
258 259 uint32_t supported_speed;
259 260 uint32_t max_frame_size;
260 261 fca_hba_fru_details_t hba_fru_details;
261 262 uchar_t sym_node_name[FCHBA_SYMB_NAME_LEN];
262 263 uchar_t sym_port_name[FCHBA_SYMB_NAME_LEN];
263 264 } fca_port_attrs_t;
264 265
265 266
266 267
267 268 typedef struct unsolicited_buffer {
268 269 uchar_t ub_class;
269 270 uchar_t ub_resvd1;
270 271 ushort_t ub_resp_flags; /* ULP-specific flags */
271 272 ushort_t ub_resp_key; /* ULP-specific key */
272 273 ushort_t ub_resvd2;
273 274 uint32_t ub_bufsize;
274 275 caddr_t ub_buffer;
275 276 void *ub_port_private;
276 277 void *ub_fca_private;
277 278 opaque_t ub_port_handle;
278 279 opaque_t ub_resp_token; /* Response token */
279 280 uint64_t ub_token;
280 281 fc_frame_hdr_t ub_frame;
281 282 } fc_unsol_buf_t;
282 283
283 284 #define FC_UB_RESP_LOGIN_REQUIRED 0x4000
284 285
285 286 typedef struct fc_trace_dmsg {
286 287 int id_size; /* message size */
287 288 int id_flag; /* for future */
288 289 timespec_t id_time; /* timestamp */
289 290 caddr_t id_buf; /* message buffer */
290 291 struct fc_trace_dmsg *id_next; /* next message in queue */
291 292 } fc_trace_dmsg_t;
292 293
293 294 #define FC_TRACE_LOGQ_V2 0x1
294 295
295 296 typedef struct fc_trace_logq {
296 297 kmutex_t il_lock; /* lock to avoid clutter */
297 298 int il_hiwat; /* maximum queue size */
298 299 int il_flags;
299 300 int il_size; /* current size */
300 301 int il_afail; /* count of allocation failures */
301 302 int il_lfail; /* general logging failures */
302 303 int il_id; /* message Id */
303 304 fc_trace_dmsg_t *il_msgh; /* messages head */
304 305 fc_trace_dmsg_t *il_msgt; /* messages tail */
305 306 } fc_trace_logq_t;
306 307
307 308
308 309 /*
309 310 * Values for the pd_type field in the fc_remote_port_t struct below.
310 311 * (Also used in map_type and changelist determination)
311 312 */
312 313 #define PORT_DEVICE_NOCHANGE 0x0 /* Event occurred on link, but */
313 314 /* no change on the remote port */
314 315 #define PORT_DEVICE_NEW 0x1 /* Newly created remote port, or */
315 316 /* port has come back after being */
316 317 /* marked as PORT_DEVICE_OLD */
317 318 #define PORT_DEVICE_OLD 0x2 /* RSCN or Reset has occurred, */
318 319 /* the remote port may come back */
319 320 #define PORT_DEVICE_CHANGED 0x3 /* D_ID, PWWN, or other change */
320 321 /* has occurred (hot swap?) */
321 322 #define PORT_DEVICE_DELETE 0x4 /* Not used? */
322 323 #define PORT_DEVICE_USER_LOGIN 0x5 /* only for changelist->map_type */
323 324 #define PORT_DEVICE_USER_LOGOUT 0x6 /* only for changelist->map_type */
324 325 #define PORT_DEVICE_USER_CREATE 0x7 /* only for changelist->map_type */
325 326 #define PORT_DEVICE_USER_DELETE 0x8 /* only for changelist->map_type */
326 327 #define PORT_DEVICE_REPORTLUN_CHANGED 0x9 /* only for changelist->map_type */
327 328
328 329 /*
329 330 * Flags used for fc_portmap->map_type
330 331 */
331 332
332 333 #define PORT_DEVICE_DUPLICATE_MAP_ENTRY 0x00000001 /* map entry has another */
333 334 /* entry for this target */
334 335 /* later in the list */
335 336 #define PORT_DEVICE_NO_SKIP_DEVICE_DISCOVERY 0x00000002
336 337
337 338
338 339 /*
339 340 * Logging and Debugging support
340 341 */
341 342 void fc_trace_debug(fc_trace_logq_t *logq, caddr_t name, int dflag, int dlevel,
342 343 int errno, const char *fmt, ...);
343 344
344 345 fc_trace_logq_t *fc_trace_alloc_logq(int maxsize);
345 346 void fc_trace_free_logq(fc_trace_logq_t *logq);
346 347 void fc_trace_logmsg(fc_trace_logq_t *logq, caddr_t buf, int level);
347 348 caddr_t fc_trace_msg(int fc_trace_error);
348 349
349 350 /*
350 351 * Common utility routines
351 352 */
352 353
353 354 void fc_wwn_to_str(la_wwn_t *wwn, caddr_t string);
354 355 void fc_str_to_wwn(caddr_t string, la_wwn_t *wwn);
355 356
356 357 #if !defined(__lint)
357 358 _NOTE(SCHEME_PROTECTS_DATA("unique per request", unsolicited_buffer))
358 359 #endif /* __lint */
359 360
360 361 #ifdef __cplusplus
361 362 }
362 363 #endif
363 364
364 365 #endif /* _FCTL_H */
|
↓ open down ↓ |
285 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX