1 /*
2 * *****************************************************************************
3 *
4 * Description
5 * hbaapi.h - general header file for client
6 * and library developers
7 *
8 * License:
9 * The contents of this file are subject to the SNIA Public License
10 * Version 1.0 (the "License"); you may not use this file except in
11 * compliance with the License. You may obtain a copy of the License at
12 *
13 * /http://www.snia.org/English/Resources/Code/OpenSource.html
14 *
15 * Software distributed under the License is distributed on an "AS IS"
16 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17 * the License for the specific language governing rights and limitations
18 * under the License.
19 *
20 * The Original Code is SNIA HBA API general header file
21 *
22 * The Initial Developer of the Original Code is:
23 * Benjamin F. Kuo, Troika Networks, Inc. (benk@troikanetworks.com)
24 *
25 * Contributor(s):
26 * Tuan Lam, QLogic Corp. (t_lam@qlc.com)
27 * Dan Willie, Emulex Corp. (Dan.Willie@emulex.com)
28 * Dixon Hutchinson, Legato Systems, Inc. (dhutchin@legato.com)
29 * David Dillard, VERITAS Software Corp. (david.dillard@veritas.com)
30 *
31 *******************************************************************************
32 *
33 * Changes:
34 * 03/09/2000 Initial Draft
35 * (for other changes... see the CVS logs)
36 *******************************************************************************
37 */
38
39 #ifndef _EMLXS_HBAAPI_H
40 #define _EMLXS_HBAAPI_H
41
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45
46 /* Library version string */
47 #define HBA_LIBVERSION 2
48
49 /* DLL imports for WIN32 operation */
50 #ifdef WIN32
51 #ifdef HBAAPI_EXPORTS
52 #define HBA_API __declspec(dllexport)
53 #else
54 #define HBA_API __declspec(dllimport)
55 #endif
56 #else
57 #define HBA_API
58 #endif
59
60 /* OS specific definitions */
61
62 #ifdef WIN32
63 typedef unsigned char HBA_UINT8; // Unsigned 8 bits
64 typedef char HBA_INT8; // Signed 8 bits
65 typedef unsigned short HBA_UINT16; // Unsigned 16 bits
66 typedef short HBA_INT16; // Signed 16 bits
67 typedef unsigned int HBA_UINT32; // Unsigned 32 bits
68 typedef int HBA_INT32; // Signed 32 bits
69 typedef void* HBA_PVOID; // Pointer to void
70 typedef HBA_UINT32 HBA_VOID32; // Opaque 32 bits
71
72
73 /* Don't confuse, _WIN32 with WIN32... OK, how do you accompish that */
74 #ifdef _WIN32
75 typedef _int64 HBA_INT64;
76 typedef unsigned _int64 HBA_UINT64;
77 #else
78 typedef struct {
79 TN_UINT32 lo_val;
80 TN_UINT32 hi_val;
81 } HBA_INT64;
82
83 typedef struct {
84 TN_UINT32 lo_val;
85 TN_UINT32 hi_val;
86 } HBA_UINT64;
87 #endif /* #ifdef _WIN32 */
88
89
90 #else
91 #ifndef _KERNEL
92 #include <time.h> /* Needed for struct tm */
93 #endif /* ifndef _KERNEL */
94
95 /* Note this section needs to be cleaned up for various Unix platforms */
96 typedef unsigned char HBA_UINT8; /* Unsigned 8 bits */
97 typedef char HBA_INT8; /* Signed 8 bits */
98 typedef unsigned short HBA_UINT16; /* Unsigned 16 bits */
99 typedef short HBA_INT16; /* Signed 16 bits */
100 typedef unsigned int HBA_UINT32; /* Unsigned 32 bits */
101 typedef int HBA_INT32; /* Signed 32 bits */
102 typedef void* HBA_PVOID; /* Pointer to void */
103 typedef HBA_UINT32 HBA_VOID32; /* Opaque 32 bits */
104 typedef long long HBA_INT64;
105 typedef long long HBA_UINT64;
106
107 #endif /* #ifdef WIN32 */
108
109
110 /* 4.2.1 Handle to Device */
111 typedef HBA_UINT32 HBA_HANDLE;
112
113 #define HBA_HANDLE_INVALID 0
114
115 /* 4.2.2 Status Return Values */
116 typedef HBA_UINT32 HBA_STATUS;
117
118 #define HBA_STATUS_OK 0
119 #define HBA_STATUS_ERROR 1 /* Error */
120 #define HBA_STATUS_ERROR_NOT_SUPPORTED 2 /* Function not supported.*/
121 #define HBA_STATUS_ERROR_INVALID_HANDLE 3 /* invalid handle */
122 #define HBA_STATUS_ERROR_ARG 4 /* Bad argument */
123 #define HBA_STATUS_ERROR_ILLEGAL_WWN 5 /* WWN not recognized */
124 #define HBA_STATUS_ERROR_ILLEGAL_INDEX 6 /* Index not recognized */
125 #define HBA_STATUS_ERROR_MORE_DATA 7 /* Larger buffer required */
126 #define HBA_STATUS_ERROR_STALE_DATA 8 /* Information has changed since
127 * last call to
128 * HBA_Refreshinformation */
129 #define HBA_STATUS_SCSI_CHECK_CONDITION 9 /* Obvious */
130 #define HBA_STATUS_ERROR_BUSY 10 /* Adapter busy or reserved,
131 * retry may be effective */
132 #define HBA_STATUS_ERROR_TRY_AGAIN 11 /* Request timedout,
133 * retry may be effective */
134 #define HBA_STATUS_ERROR_UNAVAILABLE 12 /* Referenced HBA has been removed
135 * or deactivated */
136 #define HBA_STATUS_ERROR_ELS_REJECT 13 /* The requested ELS was rejected by
137 * the local adapter */
138 #define HBA_STATUS_ERROR_INVALID_LUN 14 /* The specified LUN is not provided
139 * the specified adapter */
140 #define HBA_STATUS_ERROR_INCOMPATIBLE 15 /* An incompatibility has been
141 * detected among the library and driver modules
142 * invoked which will cause one or more functions
143 * in the highest version that all support to
144 * operate incorrectly. The differing function
145 * sets of software modules implementing different
146 * versions of the HBA API specification does not
147 * in itself constitute an incompatibility. Known
148 * interoperability bugs among supposedly
149 * compatible versions should be reported as
150 * incompatibilities, but not all such
151 * interoperability bugs may be known. This value
152 * may be returned by any function that calls a
153 * Vendor Specific Library and returns an
154 * HBA_STATUS, and by HBA_LoadLibrary and
155 * HBA_GetAdapterName. */
156
157 #define HBA_STATUS_ERROR_AMBIGUOUS_WWN 16 /* Multiple adapters have a matching
158 * WWN. This could occur if the
159 * NodeWWN of multiple adapters is
160 * identical */
161 #define HBA_STATUS_ERROR_LOCAL_BUS 17 /* A persistent binding request
162 * included a bad local SCSI bus
163 * number */
164 #define HBA_STATUS_ERROR_LOCAL_TARGET 18 /* A persistent binding request
165 * included a bad local SCSI target
166 * number */
167 #define HBA_STATUS_ERROR_LOCAL_LUN 19 /* A persistent binding request
168 * included a bad local SCSI logical
169 * unit number */
170 #define HBA_STATUS_ERROR_LOCAL_SCSIID_BOUND 20
171 /* A persistent binding set request
172 * included a local SCSI ID that was
173 * already bound */
174 #define HBA_STATUS_ERROR_TARGET_FCID 21 /* A persistent binding request
175 * included a bad or unlocatable FCP
176 * Target FCID */
177 #define HBA_STATUS_ERROR_TARGET_NODE_WWN 22 /* A persistent binding request
178 * included a bad FCP Target Node
179 * WWN */
180 #define HBA_STATUS_ERROR_TARGET_PORT_WWN 23 /* A persistent binding request
181 * included a bad FCP Target Port
182 * WWN */
183 #define HBA_STATUS_ERROR_TARGET_LUN 24 /* A persistent binding request
184 * included an FCP Logical Unit Number
185 * not defined by the identified
186 * Target*/
187 #define HBA_STATUS_ERROR_TARGET_LUID 25 /* A persistent binding request
188 * included an undefined or otherwise
189 * inaccessible Logical Unit Unique
190 * Identifier */
191 #define HBA_STATUS_ERROR_NO_SUCH_BINDING 26 /* A persistent binding remove request
192 * included a binding which did not
193 * match a binding established by the
194 * specified port */
195 #define HBA_STATUS_ERROR_NOT_A_TARGET 27 /* A SCSI command was requested to an
196 * Nx_Port that was not a SCSI
197 * Target Port */
198 #define HBA_STATUS_ERROR_UNSUPPORTED_FC4 28 /* A request was made concerning an
199 * unsupported FC-4 protocol */
200
201
202 #define HBA_STATUS_ERROR_INCAPABLE 29 /* A request was made to enable
203 * unimplemented capabilities for a
204 * port */
205
206 /* 4.2.3 Port Operational Modes Values */
207 typedef HBA_UINT32 HBA_PORTTYPE;
208
209 #define HBA_PORTTYPE_UNKNOWN 1 /* Unknown */
210 #define HBA_PORTTYPE_OTHER 2 /* Other */
211 #define HBA_PORTTYPE_NOTPRESENT 3 /* Not present */
212 #define HBA_PORTTYPE_NPORT 5 /* Fabric */
213 #define HBA_PORTTYPE_NLPORT 6 /* Public Loop */
214 #define HBA_PORTTYPE_FLPORT 7
215 #define HBA_PORTTYPE_FPORT 8 /* Fabric Port */
216 #define HBA_PORTTYPE_EPORT 9 /* Fabric expansion port */
217 #define HBA_PORTTYPE_GPORT 10 /* Generic Fabric Port */
218 #define HBA_PORTTYPE_LPORT 20 /* Private Loop */
219 #define HBA_PORTTYPE_PTP 21 /* Point to Point */
220
221
222 typedef HBA_UINT32 HBA_PORTSTATE;
223 #define HBA_PORTSTATE_UNKNOWN 1 /* Unknown */
224 #define HBA_PORTSTATE_ONLINE 2 /* Operational */
225 #define HBA_PORTSTATE_OFFLINE 3 /* User Offline */
226 #define HBA_PORTSTATE_BYPASSED 4 /* Bypassed */
227 #define HBA_PORTSTATE_DIAGNOSTICS 5 /* In diagnostics mode */
228 #define HBA_PORTSTATE_LINKDOWN 6 /* Link Down */
229 #define HBA_PORTSTATE_ERROR 7 /* Port Error */
230 #define HBA_PORTSTATE_LOOPBACK 8 /* Loopback */
231
232
233 typedef HBA_UINT32 HBA_PORTSPEED;
234 #define HBA_PORTSPEED_UNKNOWN 0 /* Unknown - transceiver incable
235 * of reporting */
236 #define HBA_PORTSPEED_1GBIT 1 /* 1 GBit/sec */
237 #define HBA_PORTSPEED_2GBIT 2 /* 2 GBit/sec */
238 #define HBA_PORTSPEED_10GBIT 4 /* 10 GBit/sec */
239 #define HBA_PORTSPEED_4GBIT 8 /* 4 GBit/sec */
240 #define HBA_PORTSPEED_8GBIT 16 /* 8 GBit/sec */
241 #define HBA_PORTSPEED_16GBIT 32 /* 16 GBit/sec */
242 #define HBA_PORTSPEED_NOT_NEGOTIATED (1<<15) /* Speed not established */
243
244
245
246 /* 4.2.4 Class of Service Values - See GS-2 Spec.*/
247
248 typedef HBA_UINT32 HBA_COS;
249
250
251 /* 4.2.5 Fc4Types Values */
252
253 typedef struct HBA_fc4types {
254 HBA_UINT8 bits[32]; /* 32 bytes of FC-4 per GS-2 */
255 } HBA_FC4TYPES, *PHBA_FC4TYPES;
256
257 /* 4.2.6 Basic Types */
258
259 typedef struct HBA_wwn {
260 HBA_UINT8 wwn[8];
261 } HBA_WWN, *PHBA_WWN;
262
263 typedef struct HBA_ipaddress {
264 int ipversion; /* see enumerations in RNID */
265 union
266 {
267 unsigned char ipv4address[4];
268 unsigned char ipv6address[16];
269 } ipaddress;
270 } HBA_IPADDRESS, *PHBA_IPADDRESS;
271
272 typedef HBA_INT8 HBA_BOOLEAN;
273
274 /* 4.2.7 Adapter Attributes */
275 typedef struct hba_AdapterAttributes {
276 char Manufacturer[64]; /*Emulex */
277 char SerialNumber[64]; /* A12345 */
278 char Model[256]; /* QLA2200 */
279 char ModelDescription[256]; /* Agilent TachLite */
280 HBA_WWN NodeWWN;
281 char NodeSymbolicName[256]; /* From GS-3 */
282 char HardwareVersion[256]; /* Vendor use */
283 char DriverVersion[256]; /* Vendor use */
284 char OptionROMVersion[256]; /* Vendor use - i.e. hardware boot ROM*/
285 char FirmwareVersion[256]; /* Vendor use */
286 HBA_UINT32 VendorSpecificID; /* Vendor specific */
287 HBA_UINT32 NumberOfPorts;
288 char DriverName[256]; /* Binary path and/or name of driver
289 *file */
290 } HBA_ADAPTERATTRIBUTES, *PHBA_ADAPTERATTRIBUTES;
291
292 /* 4.2.8 Port Attributes */
293 typedef struct HBA_PortAttributes {
294 HBA_WWN NodeWWN;
295 HBA_WWN PortWWN;
296 HBA_UINT32 PortFcId;
297 HBA_PORTTYPE PortType; /*PTP, Fabric, etc. */
298 HBA_PORTSTATE PortState;
299 HBA_COS PortSupportedClassofService;
300 HBA_FC4TYPES PortSupportedFc4Types;
301 HBA_FC4TYPES PortActiveFc4Types;
302 char PortSymbolicName[256];
303 char OSDeviceName[256]; /* \device\ScsiPort3 */
304 HBA_PORTSPEED PortSupportedSpeed;
305 HBA_PORTSPEED PortSpeed;
306 HBA_UINT32 PortMaxFrameSize;
307 HBA_WWN FabricName;
308 HBA_UINT32 NumberofDiscoveredPorts;
309 } HBA_PORTATTRIBUTES, *PHBA_PORTATTRIBUTES;
310
311
312
313 /* 4.2.9 Port Statistics */
314
315 typedef struct HBA_PortStatistics {
316 HBA_INT64 SecondsSinceLastReset;
317 HBA_INT64 TxFrames;
318 HBA_INT64 TxWords;
319 HBA_INT64 RxFrames;
320 HBA_INT64 RxWords;
321 HBA_INT64 LIPCount;
322 HBA_INT64 NOSCount;
323 HBA_INT64 ErrorFrames;
324 HBA_INT64 DumpedFrames;
325 HBA_INT64 LinkFailureCount;
326 HBA_INT64 LossOfSyncCount;
327 HBA_INT64 LossOfSignalCount;
328 HBA_INT64 PrimitiveSeqProtocolErrCount;
329 HBA_INT64 InvalidTxWordCount;
330 HBA_INT64 InvalidCRCCount;
331 } HBA_PORTSTATISTICS, *PHBA_PORTSTATISTICS;
332
333
334
335 /* 4.2.10 FCP Attributes */
336
337 typedef enum HBA_fcpbindingtype { TO_D_ID, TO_WWN, TO_OTHER } HBA_FCPBINDINGTYPE;
338
339 typedef struct HBA_ScsiId {
340 char OSDeviceName[256]; /* \device\ScsiPort3 */
341 HBA_UINT32 ScsiBusNumber; /* Bus on the HBA */
342 HBA_UINT32 ScsiTargetNumber; /* SCSI Target ID to OS */
343 HBA_UINT32 ScsiOSLun;
344 } HBA_SCSIID, *PHBA_SCSIID;
345
346 typedef struct HBA_FcpId {
347 HBA_UINT32 FcId;
348 HBA_WWN NodeWWN;
349 HBA_WWN PortWWN;
350 HBA_UINT64 FcpLun;
351 } HBA_FCPID, *PHBA_FCPID;
352
353 typedef struct HBA_LUID {
354 char buffer[256]; /* Unique Device Identifier */
355 } HBA_LUID, *PHBA_LUID;
356
357 typedef struct HBA_FcpScsiEntry {
358 HBA_SCSIID ScsiId;
359 HBA_FCPID FcpId;
360 } HBA_FCPSCSIENTRY, *PHBA_FCPSCSIENTRY;
361
362 typedef struct HBA_FcpScsiEntryV2 {
363 HBA_SCSIID ScsiId;
364 HBA_FCPID FcpId;
365 HBA_LUID LUID;
366 } HBA_FCPSCSIENTRYV2, *PHBA_FCPSCSIENTRYV2;
367
368 typedef struct HBA_FCPTargetMapping {
369 HBA_UINT32 NumberOfEntries;
370 HBA_FCPSCSIENTRY entry[1]; /* Variable length array
371 * containing mappings */
372 } HBA_FCPTARGETMAPPING, *PHBA_FCPTARGETMAPPING;
373
374 typedef struct HBA_FCPTargetMappingV2 {
375 HBA_UINT32 NumberOfEntries;
376 HBA_FCPSCSIENTRYV2 entry[1]; /* Variable length array
377 * containing mappings */
378 } HBA_FCPTARGETMAPPINGV2, *PHBA_FCPTARGETMAPPINGV2;
379
380 typedef struct HBA_FCPBindingEntry {
381 HBA_FCPBINDINGTYPE type;
382 HBA_SCSIID ScsiId;
383 HBA_FCPID FcpId; /* WWN valid only if type is
384 * to WWN, FcpLun always valid */
385 HBA_UINT32 FcId;
386 } HBA_FCPBINDINGENTRY, *PHBA_FCPBINDINGENTRY;
387
388 typedef struct HBA_FCPBinding {
389 HBA_UINT32 NumberOfEntries;
390 HBA_FCPBINDINGENTRY entry[1]; /* Variable length array */
391 } HBA_FCPBINDING, *PHBA_FCPBINDING;
392
393 /* 4.2.11 FC-3 Management Atrributes */
394
395 typedef enum HBA_wwntype { NODE_WWN, PORT_WWN } HBA_WWNTYPE;
396
397 typedef struct HBA_MgmtInfo {
398 HBA_WWN wwn;
399 HBA_UINT32 unittype;
400 HBA_UINT32 PortId;
401 HBA_UINT32 NumberOfAttachedNodes;
402 HBA_UINT16 IPVersion;
403 HBA_UINT16 UDPPort;
404 HBA_UINT8 IPAddress[16];
405 HBA_UINT16 reserved;
406 HBA_UINT16 TopologyDiscoveryFlags;
407 } HBA_MGMTINFO, *PHBA_MGMTINFO;
408
409 /* Event Codes */
410 #define HBA_EVENT_LIP_OCCURRED 1
411 #define HBA_EVENT_LINK_UP 2
412 #define HBA_EVENT_LINK_DOWN 3
413 #define HBA_EVENT_LIP_RESET_OCCURRED 4
414 #define HBA_EVENT_RSCN 5
415 #define HBA_EVENT_PROPRIETARY 0xFFFF
416
417 typedef struct HBA_Link_EventInfo {
418 HBA_UINT32 PortFcId; /* Port where event occurred */
419 HBA_UINT32 Reserved[3];
420 } HBA_LINK_EVENTINFO, *PHBA_LINK_EVENTINFO;
421
422 typedef struct HBA_RSCN_EventInfo {
423 HBA_UINT32 PortFcId; /* Port where event occurred */
424 HBA_UINT32 NPortPage; /* Reference FC-FS for RSCN ELS
425 * "Affected N-Port Pages"*/
426 HBA_UINT32 Reserved[2];
427 } HBA_RSCN_EVENTINFO, *PHBA_RSCN_EVENTINFO;
428
429 typedef struct HBA_Pty_EventInfo {
430 HBA_UINT32 PtyData[4]; /* Proprietary data */
431 } HBA_PTY_EVENTINFO, *PHBA_PTY_EVENTINFO;
432
433 typedef struct HBA_EventInfo {
434 HBA_UINT32 EventCode;
435 union {
436 HBA_LINK_EVENTINFO Link_EventInfo;
437 HBA_RSCN_EVENTINFO RSCN_EventInfo;
438 HBA_PTY_EVENTINFO Pty_EventInfo;
439 } Event;
440 } HBA_EVENTINFO, *PHBA_EVENTINFO;
441
442 #ifndef _KERNEL
443 typedef struct HBA_LibraryAttributes {
444 HBA_BOOLEAN final;
445 char LibPath[256];
446 char VName[256];
447 char VVersion[256];
448 struct tm build_date;
449 } HBA_LIBRARYATTRIBUTES, *PHBA_LIBRARYATTRIBUTES;
450 #endif /* ifndef _KERNEL */
451
452 /* Persistant Binding... */
453 typedef HBA_UINT32 HBA_BIND_TYPE;
454 #define HBA_BIND_TO_D_ID 0x0001
455 #define HBA_BIND_TO_WWPN 0x0002
456 #define HBA_BIND_TO_WWNN 0x0004
457 #define HBA_BIND_TO_LUID 0x0008
458 #define HBA_BIND_TARGETS 0x0800
459
460 /* A bit mask of Rev 2.0 persistent binding capabilities */
461 typedef HBA_UINT32 HBA_BIND_CAPABILITY;
462 /* The following are bit flags indicating persistent binding capabilities */
463 #define HBA_CAN_BIND_TO_D_ID 0x0001
464 #define HBA_CAN_BIND_TO_WWPN 0x0002
465 #define HBA_CAN_BIND_TO_WWNN 0x0004
466 #define HBA_CAN_BIND_TO_LUID 0x0008
467 #define HBA_CAN_BIND_ANY_LUNS 0x0400
468 #define HBA_CAN_BIND_TARGETS 0x0800
469 #define HBA_CAN_BIND_AUTOMAP 0x1000
470 #define HBA_CAN_BIND_CONFIGURED 0x2000
471
472 #define HBA_BIND_STATUS_DISABLED 0x00
473 #define HBA_BIND_STATUS_ENABLED 0x01
474
475 typedef HBA_UINT32 HBA_BIND_STATUS;
476
477 #define HBA_BIND_EFFECTIVE_AT_REBOOT 0x00
478 #define HBA_BIND_EFFECTIVE_IMMEDIATE 0x01
479
480 typedef HBA_UINT32 HBA_BIND_EFFECTIVE;
481
482 typedef struct HBA_FCPBindingEntry2 {
483 HBA_BIND_TYPE type;
484 HBA_SCSIID ScsiId;
485 HBA_FCPID FcpId;
486 HBA_LUID LUID;
487 HBA_STATUS status;
488 } HBA_FCPBINDINGENTRY2, *PHBA_FCPBINDINGENTRY2;
489
490 typedef struct HBA_FcpBinding2 {
491 HBA_UINT32 NumberOfEntries;
492 HBA_FCPBINDINGENTRY2
493 entry[1]; /* Variable length array */
494 } HBA_FCPBINDING2, *PHBA_FCPBINDING2;
495
496 /* FC-4 Instrumentation */
497 typedef struct HBA_FC4Statistics {
498 HBA_INT64 InputRequests;
499 HBA_INT64 OutputRequests;
500 HBA_INT64 ControlRequests;
501 HBA_INT64 InputMegabytes;
502 HBA_INT64 OutputMegabytes;
503 } HBA_FC4STATISTICS, *PHBA_FC4STATISTICS;
504
505
506 typedef void * HBA_CALLBACKHANDLE;
507 /* Adapter Level Events */
508 #define HBA_EVENT_ADAPTER_UNKNOWN 0x100
509 #define HBA_EVENT_ADAPTER_ADD 0x101
510 #define HBA_EVENT_ADAPTER_REMOVE 0x102
511 #define HBA_EVENT_ADAPTER_CHANGE 0x103
512
513 /* Port Level Events */
514 #define HBA_EVENT_PORT_UNKNOWN 0x200
515 #define HBA_EVENT_PORT_OFFLINE 0x201
516 #define HBA_EVENT_PORT_ONLINE 0x202
517 #define HBA_EVENT_PORT_NEW_TARGETS 0x203
518 #define HBA_EVENT_PORT_FABRIC 0x204
519
520 /* Port Statistics Events */
521 #define HBA_EVENT_PORT_STAT_THRESHOLD 0x301
522 #define HBA_EVENT_PORT_STAT_GROWTH 0x302
523
524 /* Target Level Events */
525 #define HBA_EVENT_TARGET_UNKNOWN 0x400
526 #define HBA_EVENT_TARGET_OFFLINE 0x401
527 #define HBA_EVENT_TARGET_ONLINE 0x402
528 #define HBA_EVENT_TARGET_REMOVED 0x403
529
530 /* Fabric Link Events */
531 #define HBA_EVENT_LINK_UNKNOWN 0x500
532 #define HBA_EVENT_LINK_INCIDENT 0x501
533
534 HBA_API HBA_UINT32 HBA_GetVersion();
535
536 /*
537 * Make sure HBA_LoadLibrary returns before any other threads
538 * make calls to the library
539 */
540 HBA_API HBA_STATUS HBA_LoadLibrary();
541
542 HBA_API HBA_STATUS HBA_FreeLibrary();
543
544 HBA_API HBA_UINT32 HBA_GetNumberOfAdapters();
545
546 HBA_API HBA_STATUS HBA_GetAdapterName(
547 HBA_UINT32 adapterindex,
548 char *adaptername
549 );
550
551 HBA_API HBA_HANDLE HBA_OpenAdapter(
552 char* adaptername
553 );
554
555 HBA_API HBA_STATUS HBA_OpenAdapterByWWN(
556 HBA_HANDLE *handle,
557 HBA_WWN wwn
558 );
559
560 HBA_API void HBA_CloseAdapter(
561 HBA_HANDLE handle
562 );
563
564 HBA_API HBA_STATUS HBA_GetAdapterAttributes(
565 HBA_HANDLE handle,
566 HBA_ADAPTERATTRIBUTES
567 *hbaattributes
568 );
569
570 HBA_API HBA_STATUS HBA_GetAdapterPortAttributes(
571 HBA_HANDLE handle,
572 HBA_UINT32 portindex,
573 HBA_PORTATTRIBUTES *portattributes
574 );
575
576 HBA_API HBA_STATUS HBA_GetPortStatistics(
577 HBA_HANDLE handle,
578 HBA_UINT32 portindex,
579 HBA_PORTSTATISTICS *portstatistics
580 );
581
582 HBA_API HBA_STATUS HBA_GetDiscoveredPortAttributes(
583 HBA_HANDLE handle,
584 HBA_UINT32 portindex,
585 HBA_UINT32 discoveredportindex,
586 HBA_PORTATTRIBUTES *portattributes
587 );
588
589 HBA_API HBA_STATUS HBA_GetPortAttributesByWWN(
590 HBA_HANDLE handle,
591 HBA_WWN PortWWN,
592 HBA_PORTATTRIBUTES *portattributes
593 );
594
595 HBA_API HBA_STATUS HBA_SendCTPassThruV2(
596 HBA_HANDLE handle,
597 HBA_WWN hbaPortWWN,
598 void *pReqBuffer,
599 HBA_UINT32 ReqBufferSize,
600 void *pRspBuffer,
601 HBA_UINT32 *pRspBufferSize
602 );
603
604 /* Depricated, but supported */
605 HBA_API HBA_STATUS HBA_SendCTPassThru(
606 HBA_HANDLE handle,
607 void *pReqBuffer,
608 HBA_UINT32 ReqBufferSize,
609 void *pRspBuffer,
610 HBA_UINT32 RspBufferSize
611 );
612
613 HBA_API void HBA_RefreshAdapterConfiguration();
614
615 HBA_API HBA_STATUS HBA_GetEventBuffer(
616 HBA_HANDLE handle,
617 HBA_EVENTINFO *EventBuffer,
618 HBA_UINT32 *EventBufferCount
619 );
620
621 HBA_API HBA_STATUS HBA_SetRNIDMgmtInfo(
622 HBA_HANDLE handle,
623 HBA_MGMTINFO Info
624 );
625
626 HBA_API HBA_STATUS HBA_GetRNIDMgmtInfo(
627 HBA_HANDLE handle,
628 HBA_MGMTINFO *pInfo
629 );
630
631 HBA_API HBA_STATUS HBA_SendRNIDV2(
632 HBA_HANDLE handle,
633 HBA_WWN hbaPortWWN,
634 HBA_WWN destWWN,
635 HBA_UINT32 destFCID,
636 HBA_UINT32 NodeIdDataFormat,
637 void *pRspBuffer,
638 HBA_UINT32 *pRspBufferSize
639 );
640
641 /* Depricated, but supported */
642 HBA_API HBA_STATUS HBA_SendRNID(
643 HBA_HANDLE handle,
644 HBA_WWN wwn,
645 HBA_WWNTYPE wwntype,
646 void *pRspBuffer,
647 HBA_UINT32 *pRspBufferSize
648 );
649
650 HBA_API HBA_STATUS HBA_SendRLS (
651 HBA_HANDLE handle,
652 HBA_WWN hbaPortWWN,
653 HBA_WWN destWWN,
654 void *pRspBuffer,
655 HBA_UINT32 *pRspBufferSize
656 );
657
658 HBA_API HBA_STATUS HBA_SendRPL (
659 HBA_HANDLE handle,
660 HBA_WWN hbaPortWWN,
661 HBA_WWN agent_wwn,
662 HBA_UINT32 agent_domain,
663 HBA_UINT32 portindex,
664 void *pRspBuffer,
665 HBA_UINT32 *pRspBufferSize
666 );
667
668 HBA_API HBA_STATUS HBA_SendRPS (
669 HBA_HANDLE handle,
670 HBA_WWN hbaPortWWN,
671 HBA_WWN agent_wwn,
672 HBA_UINT32 agent_domain,
673 HBA_WWN object_wwn,
674 HBA_UINT32 object_port_number,
675 void *pRspBuffer,
676 HBA_UINT32 *pRspBufferSize
677 );
678
679 HBA_API HBA_STATUS HBA_SendSRL (
680 HBA_HANDLE handle,
681 HBA_WWN hbaPortWWN,
682 HBA_WWN wwn,
683 HBA_UINT32 domain,
684 void *pRspBuffer,
685 HBA_UINT32 *pRspBufferSize
686 );
687
688 HBA_API HBA_STATUS HBA_SendLIRR (
689 HBA_HANDLE handle,
690 HBA_WWN sourceWWN,
691 HBA_WWN destWWN,
692 HBA_UINT8 function,
693 HBA_UINT8 type,
694 void *pRspBuffer,
695 HBA_UINT32 *pRspBufferSize
696 );
697
698
699 HBA_API HBA_STATUS HBA_GetFC4Statistics (
700 HBA_HANDLE handle,
701 HBA_WWN portWWN,
702 HBA_UINT8 FC4type,
703 HBA_FC4STATISTICS *pstatistics
704 );
705
706 HBA_API HBA_STATUS HBA_GetFCPStatistics (
707 HBA_HANDLE handle,
708 const HBA_SCSIID *lunit,
709 HBA_FC4STATISTICS *pstatistics);
710
711 HBA_API void HBA_RefreshInformation(
712 HBA_HANDLE handle
713 );
714
715 HBA_API void HBA_ResetStatistics(
716 HBA_HANDLE handle,
717 HBA_UINT32 portindex
718 );
719
720 HBA_API HBA_STATUS HBA_GetFcpTargetMapping(
721 HBA_HANDLE handle,
722 HBA_FCPTARGETMAPPING
723 *pmapping
724 );
725
726 HBA_API HBA_STATUS HBA_GetFcpTargetMappingV2(
727 HBA_HANDLE handle,
728 HBA_WWN hbaPortWWN,
729 HBA_FCPTARGETMAPPINGV2
730 *pmapping
731 );
732
733 HBA_API HBA_STATUS HBA_GetBindingCapability(
734 HBA_HANDLE handle,
735 HBA_WWN hbaPortWWN,
736 HBA_BIND_CAPABILITY *pcapability
737 );
738
739 HBA_API HBA_STATUS HBA_GetBindingSupport(
740 HBA_HANDLE handle,
741 HBA_WWN hbaPortWWN,
742 HBA_BIND_CAPABILITY *pcapability
743 );
744
745 HBA_API HBA_STATUS HBA_SetBindingSupport(
746 HBA_HANDLE handle,
747 HBA_WWN hbaPortWWN,
748 HBA_BIND_CAPABILITY capability
749 );
750
751 HBA_API HBA_STATUS HBA_SetPersistentBindingV2(
752 HBA_HANDLE handle,
753 HBA_WWN hbaPortWWN,
754 const HBA_FCPBINDING2
755 *pbinding
756 );
757
758 HBA_API HBA_STATUS HBA_GetPersistentBindingV2(
759 HBA_HANDLE handle,
760 HBA_WWN hbaPortWWN,
761 HBA_FCPBINDING2 *binding
762 );
763
764 HBA_API HBA_STATUS HBA_RemovePersistentBinding(
765 HBA_HANDLE handle,
766 HBA_WWN hbaPortWWN,
767 const HBA_FCPBINDING2
768 *pbinding
769 );
770
771 /* Depricated, but supported */
772 HBA_API HBA_STATUS HBA_GetFcpPersistentBinding(
773 HBA_HANDLE handle,
774 HBA_FCPBINDING *binding
775 );
776
777 HBA_API HBA_STATUS HBA_RemoveAllPersistentBindings(
778 HBA_HANDLE handle,
779 HBA_WWN hbaPortWWN
780 );
781
782 HBA_STATUS HBA_ScsiInquiryV2 (
783 HBA_HANDLE handle,
784 HBA_WWN hbaPortWWN,
785 HBA_WWN discoveredPortWWN,
786 HBA_UINT64 fcLUN,
787 HBA_UINT8 CDB_Byte1,
788 HBA_UINT8 CDB_BYte2,
789 void *pRspBuffer,
790 HBA_UINT32 *pRspBufferSize,
791 HBA_UINT8 *pScsiStatus,
792 void *pSenseBuffer,
793 HBA_UINT32 *pSenseBufferSize
794 );
795
796 /* Depricated, but supported */
797 HBA_API HBA_STATUS HBA_SendScsiInquiry (
798 HBA_HANDLE handle,
799 HBA_WWN PortWWN,
800 HBA_UINT64 fcLUN,
801 HBA_UINT8 EVPD,
802 HBA_UINT32 PageCode,
803 void *pRspBuffer,
804 HBA_UINT32 RspBufferSize,
805 void *pSenseBuffer,
806 HBA_UINT32 SenseBufferSize
807 );
808
809 HBA_API HBA_STATUS HBA_ScsiReportLUNsV2(
810 HBA_HANDLE handle,
811 HBA_WWN hbaPortWWN,
812 HBA_WWN discoveredPortWWN,
813 void *pRespBuffer,
814 HBA_UINT32 *pRespBufferSize,
815 HBA_UINT8 *pScsiStatus,
816 void *pSenseBuffer,
817 HBA_UINT32 *pSenseBufferSize
818 );
819
820 /* Depricated, but supported */
821 HBA_API HBA_STATUS HBA_SendReportLUNs (
822 HBA_HANDLE handle,
823 HBA_WWN portWWN,
824 void *pRspBuffer,
825 HBA_UINT32 RspBufferSize,
826 void *pSenseBuffer,
827 HBA_UINT32 SenseBufferSize
828 );
829
830 HBA_API HBA_STATUS HBA_ScsiReadCapacityV2(
831 HBA_HANDLE handle,
832 HBA_WWN hbaPortWWN,
833 HBA_WWN discoveredPortWWN,
834 HBA_UINT64 fcLUN,
835 void *pRspBuffer,
836 HBA_UINT32 *pRspBufferSize,
837 HBA_UINT8 *pScsiStatus,
838 void *pSenseBuffer,
839 HBA_UINT32 *SenseBufferSize
840 );
841
842 /* Depricated, but supported */
843 HBA_API HBA_STATUS HBA_SendReadCapacity (
844 HBA_HANDLE handle,
845 HBA_WWN portWWN,
846 HBA_UINT64 fcLUN,
847 void *pRspBuffer,
848 HBA_UINT32 RspBufferSize,
849 void *pSenseBuffer,
850 HBA_UINT32 SenseBufferSize
851 );
852
853 #ifndef _KERNEL
854 HBA_API HBA_UINT32 HBA_GetVendorLibraryAttributes (
855 HBA_UINT32 adapter_index,
856 HBA_LIBRARYATTRIBUTES
857 *attributes
858 );
859 #endif /* ifndef _KERNEL */
860
861 HBA_API HBA_STATUS HBA_RemoveCallback(
862 HBA_CALLBACKHANDLE callbackHandle
863 );
864
865 HBA_API HBA_STATUS HBA_RegisterForAdapterAddEvents(
866 void (*callback) (
867 void *data,
868 HBA_WWN PortWWN,
869 HBA_UINT32 eventType
870 ),
871 void *userData,
872 HBA_CALLBACKHANDLE *callbackHandle
873 );
874
875 HBA_API HBA_STATUS HBA_RegisterForAdapterEvents(
876 void (*callback)(
877 void *data,
878 HBA_WWN PortWWN,
879 HBA_UINT32 eventType
880 ),
881 void *userData,
882 HBA_HANDLE handle,
883 HBA_CALLBACKHANDLE *callbackHandle
884 );
885
886 HBA_API HBA_STATUS HBA_RegisterForAdapterPortEvents(
887 void (*callback)(
888 void *data,
889 HBA_WWN PortWWN,
890 HBA_UINT32 eventType,
891 HBA_UINT32 fabricPortID
892 ),
893 void *userData,
894 HBA_HANDLE handle,
895 HBA_WWN PortWWN,
896 HBA_CALLBACKHANDLE *callbackHandle
897 );
898
899 HBA_API HBA_STATUS HBA_RegisterForAdapterPortStatEvents(
900 void (*callback)(
901 void *data,
902 HBA_WWN PortWWN,
903 HBA_UINT32 eventType
904 ),
905 void *userData,
906 HBA_HANDLE handle,
907 HBA_WWN PortWWN,
908 HBA_PORTSTATISTICS stats,
909 HBA_UINT32 statType,
910 HBA_CALLBACKHANDLE *callbackHandle
911 );
912
913
914 HBA_API HBA_STATUS HBA_RegisterForTargetEvents(
915 void (*callback)(
916 void *data,
917 HBA_WWN hbaPortWWN,
918 HBA_WWN discoveredPortWWN,
919 HBA_UINT32 eventType
920 ),
921 void *userData,
922 HBA_HANDLE handle,
923 HBA_WWN hbaPortWWN,
924 HBA_WWN discoveredPortWWN,
925 HBA_CALLBACKHANDLE *callbackHandle,
926 HBA_UINT32 allTargets
927 );
928
929 HBA_API HBA_STATUS HBA_RegisterForLinkEvents(
930 void (*callback)
931 (
932 void *data,
933 HBA_WWN adapterWWN,
934 HBA_UINT32 eventType,
935 void *pRLIRBuffer,
936 HBA_UINT32 RLIRBufferSize
937 ),
938 void *userData,
939 void *pRLIRBuffer,
940 HBA_UINT32 RLIRBufferSize,
941 HBA_HANDLE handle,
942 HBA_CALLBACKHANDLE *callbackHandle
943 );
944
945 /* Wrapper library specific entry points */
946
947 #ifndef _KERNEL
948 HBA_API HBA_UINT32 HBA_GetWrapperLibraryAttributes (
949 HBA_LIBRARYATTRIBUTES
950 *attributes
951 );
952 #endif /* ifndef _KERNEL */
953
954 #ifdef __cplusplus
955 }
956 #endif
957
958 #endif /* _EMLXS_HBAAPI_H */