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_32GBIT 64 /* 32 GBit/sec */
243 #define HBA_PORTSPEED_NOT_NEGOTIATED (1<<15) /* Speed not established */
244
245
246
247 /* 4.2.4 Class of Service Values - See GS-2 Spec.*/
248
249 typedef HBA_UINT32 HBA_COS;
250
251
252 /* 4.2.5 Fc4Types Values */
253
254 typedef struct HBA_fc4types {
255 HBA_UINT8 bits[32]; /* 32 bytes of FC-4 per GS-2 */
256 } HBA_FC4TYPES, *PHBA_FC4TYPES;
257
258 /* 4.2.6 Basic Types */
259
260 typedef struct HBA_wwn {
261 HBA_UINT8 wwn[8];
262 } HBA_WWN, *PHBA_WWN;
263
264 typedef struct HBA_ipaddress {
265 int ipversion; /* see enumerations in RNID */
266 union
267 {
268 unsigned char ipv4address[4];
269 unsigned char ipv6address[16];
270 } ipaddress;
271 } HBA_IPADDRESS, *PHBA_IPADDRESS;
272
273 typedef HBA_INT8 HBA_BOOLEAN;
274
275 /* 4.2.7 Adapter Attributes */
276 typedef struct hba_AdapterAttributes {
277 char Manufacturer[64]; /*Emulex */
278 char SerialNumber[64]; /* A12345 */
279 char Model[256]; /* QLA2200 */
280 char ModelDescription[256]; /* Agilent TachLite */
281 HBA_WWN NodeWWN;
282 char NodeSymbolicName[256]; /* From GS-3 */
283 char HardwareVersion[256]; /* Vendor use */
284 char DriverVersion[256]; /* Vendor use */
285 char OptionROMVersion[256]; /* Vendor use - i.e. hardware boot ROM*/
286 char FirmwareVersion[256]; /* Vendor use */
287 HBA_UINT32 VendorSpecificID; /* Vendor specific */
288 HBA_UINT32 NumberOfPorts;
289 char DriverName[256]; /* Binary path and/or name of driver
290 *file */
291 } HBA_ADAPTERATTRIBUTES, *PHBA_ADAPTERATTRIBUTES;
292
293 /* 4.2.8 Port Attributes */
294 typedef struct HBA_PortAttributes {
295 HBA_WWN NodeWWN;
296 HBA_WWN PortWWN;
297 HBA_UINT32 PortFcId;
298 HBA_PORTTYPE PortType; /*PTP, Fabric, etc. */
299 HBA_PORTSTATE PortState;
300 HBA_COS PortSupportedClassofService;
301 HBA_FC4TYPES PortSupportedFc4Types;
302 HBA_FC4TYPES PortActiveFc4Types;
303 char PortSymbolicName[256];
304 char OSDeviceName[256]; /* \device\ScsiPort3 */
305 HBA_PORTSPEED PortSupportedSpeed;
306 HBA_PORTSPEED PortSpeed;
307 HBA_UINT32 PortMaxFrameSize;
308 HBA_WWN FabricName;
309 HBA_UINT32 NumberofDiscoveredPorts;
310 } HBA_PORTATTRIBUTES, *PHBA_PORTATTRIBUTES;
311
312
313
314 /* 4.2.9 Port Statistics */
315
316 typedef struct HBA_PortStatistics {
317 HBA_INT64 SecondsSinceLastReset;
318 HBA_INT64 TxFrames;
319 HBA_INT64 TxWords;
320 HBA_INT64 RxFrames;
321 HBA_INT64 RxWords;
322 HBA_INT64 LIPCount;
323 HBA_INT64 NOSCount;
324 HBA_INT64 ErrorFrames;
325 HBA_INT64 DumpedFrames;
326 HBA_INT64 LinkFailureCount;
327 HBA_INT64 LossOfSyncCount;
328 HBA_INT64 LossOfSignalCount;
329 HBA_INT64 PrimitiveSeqProtocolErrCount;
330 HBA_INT64 InvalidTxWordCount;
331 HBA_INT64 InvalidCRCCount;
332 } HBA_PORTSTATISTICS, *PHBA_PORTSTATISTICS;
333
334
335
336 /* 4.2.10 FCP Attributes */
337
338 typedef enum HBA_fcpbindingtype { TO_D_ID, TO_WWN, TO_OTHER } HBA_FCPBINDINGTYPE;
339
340 typedef struct HBA_ScsiId {
341 char OSDeviceName[256]; /* \device\ScsiPort3 */
342 HBA_UINT32 ScsiBusNumber; /* Bus on the HBA */
343 HBA_UINT32 ScsiTargetNumber; /* SCSI Target ID to OS */
344 HBA_UINT32 ScsiOSLun;
345 } HBA_SCSIID, *PHBA_SCSIID;
346
347 typedef struct HBA_FcpId {
348 HBA_UINT32 FcId;
349 HBA_WWN NodeWWN;
350 HBA_WWN PortWWN;
351 HBA_UINT64 FcpLun;
352 } HBA_FCPID, *PHBA_FCPID;
353
354 typedef struct HBA_LUID {
355 char buffer[256]; /* Unique Device Identifier */
356 } HBA_LUID, *PHBA_LUID;
357
358 typedef struct HBA_FcpScsiEntry {
359 HBA_SCSIID ScsiId;
360 HBA_FCPID FcpId;
361 } HBA_FCPSCSIENTRY, *PHBA_FCPSCSIENTRY;
362
363 typedef struct HBA_FcpScsiEntryV2 {
364 HBA_SCSIID ScsiId;
365 HBA_FCPID FcpId;
366 HBA_LUID LUID;
367 } HBA_FCPSCSIENTRYV2, *PHBA_FCPSCSIENTRYV2;
368
369 typedef struct HBA_FCPTargetMapping {
370 HBA_UINT32 NumberOfEntries;
371 HBA_FCPSCSIENTRY entry[1]; /* Variable length array
372 * containing mappings */
373 } HBA_FCPTARGETMAPPING, *PHBA_FCPTARGETMAPPING;
374
375 typedef struct HBA_FCPTargetMappingV2 {
376 HBA_UINT32 NumberOfEntries;
377 HBA_FCPSCSIENTRYV2 entry[1]; /* Variable length array
378 * containing mappings */
379 } HBA_FCPTARGETMAPPINGV2, *PHBA_FCPTARGETMAPPINGV2;
380
381 typedef struct HBA_FCPBindingEntry {
382 HBA_FCPBINDINGTYPE type;
383 HBA_SCSIID ScsiId;
384 HBA_FCPID FcpId; /* WWN valid only if type is
385 * to WWN, FcpLun always valid */
386 HBA_UINT32 FcId;
387 } HBA_FCPBINDINGENTRY, *PHBA_FCPBINDINGENTRY;
388
389 typedef struct HBA_FCPBinding {
390 HBA_UINT32 NumberOfEntries;
391 HBA_FCPBINDINGENTRY entry[1]; /* Variable length array */
392 } HBA_FCPBINDING, *PHBA_FCPBINDING;
393
394 /* 4.2.11 FC-3 Management Atrributes */
395
396 typedef enum HBA_wwntype { NODE_WWN, PORT_WWN } HBA_WWNTYPE;
397
398 typedef struct HBA_MgmtInfo {
399 HBA_WWN wwn;
400 HBA_UINT32 unittype;
401 HBA_UINT32 PortId;
402 HBA_UINT32 NumberOfAttachedNodes;
403 HBA_UINT16 IPVersion;
404 HBA_UINT16 UDPPort;
405 HBA_UINT8 IPAddress[16];
406 HBA_UINT16 reserved;
407 HBA_UINT16 TopologyDiscoveryFlags;
408 } HBA_MGMTINFO, *PHBA_MGMTINFO;
409
410 /* Event Codes */
411 #define HBA_EVENT_LIP_OCCURRED 1
412 #define HBA_EVENT_LINK_UP 2
413 #define HBA_EVENT_LINK_DOWN 3
414 #define HBA_EVENT_LIP_RESET_OCCURRED 4
415 #define HBA_EVENT_RSCN 5
416 #define HBA_EVENT_PROPRIETARY 0xFFFF
417
418 typedef struct HBA_Link_EventInfo {
419 HBA_UINT32 PortFcId; /* Port where event occurred */
420 HBA_UINT32 Reserved[3];
421 } HBA_LINK_EVENTINFO, *PHBA_LINK_EVENTINFO;
422
423 typedef struct HBA_RSCN_EventInfo {
424 HBA_UINT32 PortFcId; /* Port where event occurred */
425 HBA_UINT32 NPortPage; /* Reference FC-FS for RSCN ELS
426 * "Affected N-Port Pages"*/
427 HBA_UINT32 Reserved[2];
428 } HBA_RSCN_EVENTINFO, *PHBA_RSCN_EVENTINFO;
429
430 typedef struct HBA_Pty_EventInfo {
431 HBA_UINT32 PtyData[4]; /* Proprietary data */
432 } HBA_PTY_EVENTINFO, *PHBA_PTY_EVENTINFO;
433
434 typedef struct HBA_EventInfo {
435 HBA_UINT32 EventCode;
436 union {
437 HBA_LINK_EVENTINFO Link_EventInfo;
438 HBA_RSCN_EVENTINFO RSCN_EventInfo;
439 HBA_PTY_EVENTINFO Pty_EventInfo;
440 } Event;
441 } HBA_EVENTINFO, *PHBA_EVENTINFO;
442
443 #ifndef _KERNEL
444 typedef struct HBA_LibraryAttributes {
445 HBA_BOOLEAN final;
446 char LibPath[256];
447 char VName[256];
448 char VVersion[256];
449 struct tm build_date;
450 } HBA_LIBRARYATTRIBUTES, *PHBA_LIBRARYATTRIBUTES;
451 #endif /* ifndef _KERNEL */
452
453 /* Persistant Binding... */
454 typedef HBA_UINT32 HBA_BIND_TYPE;
455 #define HBA_BIND_TO_D_ID 0x0001
456 #define HBA_BIND_TO_WWPN 0x0002
457 #define HBA_BIND_TO_WWNN 0x0004
458 #define HBA_BIND_TO_LUID 0x0008
459 #define HBA_BIND_TARGETS 0x0800
460
461 /* A bit mask of Rev 2.0 persistent binding capabilities */
462 typedef HBA_UINT32 HBA_BIND_CAPABILITY;
463 /* The following are bit flags indicating persistent binding capabilities */
464 #define HBA_CAN_BIND_TO_D_ID 0x0001
465 #define HBA_CAN_BIND_TO_WWPN 0x0002
466 #define HBA_CAN_BIND_TO_WWNN 0x0004
467 #define HBA_CAN_BIND_TO_LUID 0x0008
468 #define HBA_CAN_BIND_ANY_LUNS 0x0400
469 #define HBA_CAN_BIND_TARGETS 0x0800
470 #define HBA_CAN_BIND_AUTOMAP 0x1000
471 #define HBA_CAN_BIND_CONFIGURED 0x2000
472
473 #define HBA_BIND_STATUS_DISABLED 0x00
474 #define HBA_BIND_STATUS_ENABLED 0x01
475
476 typedef HBA_UINT32 HBA_BIND_STATUS;
477
478 #define HBA_BIND_EFFECTIVE_AT_REBOOT 0x00
479 #define HBA_BIND_EFFECTIVE_IMMEDIATE 0x01
480
481 typedef HBA_UINT32 HBA_BIND_EFFECTIVE;
482
483 typedef struct HBA_FCPBindingEntry2 {
484 HBA_BIND_TYPE type;
485 HBA_SCSIID ScsiId;
486 HBA_FCPID FcpId;
487 HBA_LUID LUID;
488 HBA_STATUS status;
489 } HBA_FCPBINDINGENTRY2, *PHBA_FCPBINDINGENTRY2;
490
491 typedef struct HBA_FcpBinding2 {
492 HBA_UINT32 NumberOfEntries;
493 HBA_FCPBINDINGENTRY2
494 entry[1]; /* Variable length array */
495 } HBA_FCPBINDING2, *PHBA_FCPBINDING2;
496
497 /* FC-4 Instrumentation */
498 typedef struct HBA_FC4Statistics {
499 HBA_INT64 InputRequests;
500 HBA_INT64 OutputRequests;
501 HBA_INT64 ControlRequests;
502 HBA_INT64 InputMegabytes;
503 HBA_INT64 OutputMegabytes;
504 } HBA_FC4STATISTICS, *PHBA_FC4STATISTICS;
505
506
507 typedef void * HBA_CALLBACKHANDLE;
508 /* Adapter Level Events */
509 #define HBA_EVENT_ADAPTER_UNKNOWN 0x100
510 #define HBA_EVENT_ADAPTER_ADD 0x101
511 #define HBA_EVENT_ADAPTER_REMOVE 0x102
512 #define HBA_EVENT_ADAPTER_CHANGE 0x103
513
514 /* Port Level Events */
515 #define HBA_EVENT_PORT_UNKNOWN 0x200
516 #define HBA_EVENT_PORT_OFFLINE 0x201
517 #define HBA_EVENT_PORT_ONLINE 0x202
518 #define HBA_EVENT_PORT_NEW_TARGETS 0x203
519 #define HBA_EVENT_PORT_FABRIC 0x204
520
521 /* Port Statistics Events */
522 #define HBA_EVENT_PORT_STAT_THRESHOLD 0x301
523 #define HBA_EVENT_PORT_STAT_GROWTH 0x302
524
525 /* Target Level Events */
526 #define HBA_EVENT_TARGET_UNKNOWN 0x400
527 #define HBA_EVENT_TARGET_OFFLINE 0x401
528 #define HBA_EVENT_TARGET_ONLINE 0x402
529 #define HBA_EVENT_TARGET_REMOVED 0x403
530
531 /* Fabric Link Events */
532 #define HBA_EVENT_LINK_UNKNOWN 0x500
533 #define HBA_EVENT_LINK_INCIDENT 0x501
534
535 HBA_API HBA_UINT32 HBA_GetVersion();
536
537 /*
538 * Make sure HBA_LoadLibrary returns before any other threads
539 * make calls to the library
540 */
541 HBA_API HBA_STATUS HBA_LoadLibrary();
542
543 HBA_API HBA_STATUS HBA_FreeLibrary();
544
545 HBA_API HBA_UINT32 HBA_GetNumberOfAdapters();
546
547 HBA_API HBA_STATUS HBA_GetAdapterName(
548 HBA_UINT32 adapterindex,
549 char *adaptername
550 );
551
552 HBA_API HBA_HANDLE HBA_OpenAdapter(
553 char* adaptername
554 );
555
556 HBA_API HBA_STATUS HBA_OpenAdapterByWWN(
557 HBA_HANDLE *handle,
558 HBA_WWN wwn
559 );
560
561 HBA_API void HBA_CloseAdapter(
562 HBA_HANDLE handle
563 );
564
565 HBA_API HBA_STATUS HBA_GetAdapterAttributes(
566 HBA_HANDLE handle,
567 HBA_ADAPTERATTRIBUTES
568 *hbaattributes
569 );
570
571 HBA_API HBA_STATUS HBA_GetAdapterPortAttributes(
572 HBA_HANDLE handle,
573 HBA_UINT32 portindex,
574 HBA_PORTATTRIBUTES *portattributes
575 );
576
577 HBA_API HBA_STATUS HBA_GetPortStatistics(
578 HBA_HANDLE handle,
579 HBA_UINT32 portindex,
580 HBA_PORTSTATISTICS *portstatistics
581 );
582
583 HBA_API HBA_STATUS HBA_GetDiscoveredPortAttributes(
584 HBA_HANDLE handle,
585 HBA_UINT32 portindex,
586 HBA_UINT32 discoveredportindex,
587 HBA_PORTATTRIBUTES *portattributes
588 );
589
590 HBA_API HBA_STATUS HBA_GetPortAttributesByWWN(
591 HBA_HANDLE handle,
592 HBA_WWN PortWWN,
593 HBA_PORTATTRIBUTES *portattributes
594 );
595
596 HBA_API HBA_STATUS HBA_SendCTPassThruV2(
597 HBA_HANDLE handle,
598 HBA_WWN hbaPortWWN,
599 void *pReqBuffer,
600 HBA_UINT32 ReqBufferSize,
601 void *pRspBuffer,
602 HBA_UINT32 *pRspBufferSize
603 );
604
605 /* Depricated, but supported */
606 HBA_API HBA_STATUS HBA_SendCTPassThru(
607 HBA_HANDLE handle,
608 void *pReqBuffer,
609 HBA_UINT32 ReqBufferSize,
610 void *pRspBuffer,
611 HBA_UINT32 RspBufferSize
612 );
613
614 HBA_API void HBA_RefreshAdapterConfiguration();
615
616 HBA_API HBA_STATUS HBA_GetEventBuffer(
617 HBA_HANDLE handle,
618 HBA_EVENTINFO *EventBuffer,
619 HBA_UINT32 *EventBufferCount
620 );
621
622 HBA_API HBA_STATUS HBA_SetRNIDMgmtInfo(
623 HBA_HANDLE handle,
624 HBA_MGMTINFO Info
625 );
626
627 HBA_API HBA_STATUS HBA_GetRNIDMgmtInfo(
628 HBA_HANDLE handle,
629 HBA_MGMTINFO *pInfo
630 );
631
632 HBA_API HBA_STATUS HBA_SendRNIDV2(
633 HBA_HANDLE handle,
634 HBA_WWN hbaPortWWN,
635 HBA_WWN destWWN,
636 HBA_UINT32 destFCID,
637 HBA_UINT32 NodeIdDataFormat,
638 void *pRspBuffer,
639 HBA_UINT32 *pRspBufferSize
640 );
641
642 /* Depricated, but supported */
643 HBA_API HBA_STATUS HBA_SendRNID(
644 HBA_HANDLE handle,
645 HBA_WWN wwn,
646 HBA_WWNTYPE wwntype,
647 void *pRspBuffer,
648 HBA_UINT32 *pRspBufferSize
649 );
650
651 HBA_API HBA_STATUS HBA_SendRLS (
652 HBA_HANDLE handle,
653 HBA_WWN hbaPortWWN,
654 HBA_WWN destWWN,
655 void *pRspBuffer,
656 HBA_UINT32 *pRspBufferSize
657 );
658
659 HBA_API HBA_STATUS HBA_SendRPL (
660 HBA_HANDLE handle,
661 HBA_WWN hbaPortWWN,
662 HBA_WWN agent_wwn,
663 HBA_UINT32 agent_domain,
664 HBA_UINT32 portindex,
665 void *pRspBuffer,
666 HBA_UINT32 *pRspBufferSize
667 );
668
669 HBA_API HBA_STATUS HBA_SendRPS (
670 HBA_HANDLE handle,
671 HBA_WWN hbaPortWWN,
672 HBA_WWN agent_wwn,
673 HBA_UINT32 agent_domain,
674 HBA_WWN object_wwn,
675 HBA_UINT32 object_port_number,
676 void *pRspBuffer,
677 HBA_UINT32 *pRspBufferSize
678 );
679
680 HBA_API HBA_STATUS HBA_SendSRL (
681 HBA_HANDLE handle,
682 HBA_WWN hbaPortWWN,
683 HBA_WWN wwn,
684 HBA_UINT32 domain,
685 void *pRspBuffer,
686 HBA_UINT32 *pRspBufferSize
687 );
688
689 HBA_API HBA_STATUS HBA_SendLIRR (
690 HBA_HANDLE handle,
691 HBA_WWN sourceWWN,
692 HBA_WWN destWWN,
693 HBA_UINT8 function,
694 HBA_UINT8 type,
695 void *pRspBuffer,
696 HBA_UINT32 *pRspBufferSize
697 );
698
699
700 HBA_API HBA_STATUS HBA_GetFC4Statistics (
701 HBA_HANDLE handle,
702 HBA_WWN portWWN,
703 HBA_UINT8 FC4type,
704 HBA_FC4STATISTICS *pstatistics
705 );
706
707 HBA_API HBA_STATUS HBA_GetFCPStatistics (
708 HBA_HANDLE handle,
709 const HBA_SCSIID *lunit,
710 HBA_FC4STATISTICS *pstatistics);
711
712 HBA_API void HBA_RefreshInformation(
713 HBA_HANDLE handle
714 );
715
716 HBA_API void HBA_ResetStatistics(
717 HBA_HANDLE handle,
718 HBA_UINT32 portindex
719 );
720
721 HBA_API HBA_STATUS HBA_GetFcpTargetMapping(
722 HBA_HANDLE handle,
723 HBA_FCPTARGETMAPPING
724 *pmapping
725 );
726
727 HBA_API HBA_STATUS HBA_GetFcpTargetMappingV2(
728 HBA_HANDLE handle,
729 HBA_WWN hbaPortWWN,
730 HBA_FCPTARGETMAPPINGV2
731 *pmapping
732 );
733
734 HBA_API HBA_STATUS HBA_GetBindingCapability(
735 HBA_HANDLE handle,
736 HBA_WWN hbaPortWWN,
737 HBA_BIND_CAPABILITY *pcapability
738 );
739
740 HBA_API HBA_STATUS HBA_GetBindingSupport(
741 HBA_HANDLE handle,
742 HBA_WWN hbaPortWWN,
743 HBA_BIND_CAPABILITY *pcapability
744 );
745
746 HBA_API HBA_STATUS HBA_SetBindingSupport(
747 HBA_HANDLE handle,
748 HBA_WWN hbaPortWWN,
749 HBA_BIND_CAPABILITY capability
750 );
751
752 HBA_API HBA_STATUS HBA_SetPersistentBindingV2(
753 HBA_HANDLE handle,
754 HBA_WWN hbaPortWWN,
755 const HBA_FCPBINDING2
756 *pbinding
757 );
758
759 HBA_API HBA_STATUS HBA_GetPersistentBindingV2(
760 HBA_HANDLE handle,
761 HBA_WWN hbaPortWWN,
762 HBA_FCPBINDING2 *binding
763 );
764
765 HBA_API HBA_STATUS HBA_RemovePersistentBinding(
766 HBA_HANDLE handle,
767 HBA_WWN hbaPortWWN,
768 const HBA_FCPBINDING2
769 *pbinding
770 );
771
772 /* Depricated, but supported */
773 HBA_API HBA_STATUS HBA_GetFcpPersistentBinding(
774 HBA_HANDLE handle,
775 HBA_FCPBINDING *binding
776 );
777
778 HBA_API HBA_STATUS HBA_RemoveAllPersistentBindings(
779 HBA_HANDLE handle,
780 HBA_WWN hbaPortWWN
781 );
782
783 HBA_STATUS HBA_ScsiInquiryV2 (
784 HBA_HANDLE handle,
785 HBA_WWN hbaPortWWN,
786 HBA_WWN discoveredPortWWN,
787 HBA_UINT64 fcLUN,
788 HBA_UINT8 CDB_Byte1,
789 HBA_UINT8 CDB_BYte2,
790 void *pRspBuffer,
791 HBA_UINT32 *pRspBufferSize,
792 HBA_UINT8 *pScsiStatus,
793 void *pSenseBuffer,
794 HBA_UINT32 *pSenseBufferSize
795 );
796
797 /* Depricated, but supported */
798 HBA_API HBA_STATUS HBA_SendScsiInquiry (
799 HBA_HANDLE handle,
800 HBA_WWN PortWWN,
801 HBA_UINT64 fcLUN,
802 HBA_UINT8 EVPD,
803 HBA_UINT32 PageCode,
804 void *pRspBuffer,
805 HBA_UINT32 RspBufferSize,
806 void *pSenseBuffer,
807 HBA_UINT32 SenseBufferSize
808 );
809
810 HBA_API HBA_STATUS HBA_ScsiReportLUNsV2(
811 HBA_HANDLE handle,
812 HBA_WWN hbaPortWWN,
813 HBA_WWN discoveredPortWWN,
814 void *pRespBuffer,
815 HBA_UINT32 *pRespBufferSize,
816 HBA_UINT8 *pScsiStatus,
817 void *pSenseBuffer,
818 HBA_UINT32 *pSenseBufferSize
819 );
820
821 /* Depricated, but supported */
822 HBA_API HBA_STATUS HBA_SendReportLUNs (
823 HBA_HANDLE handle,
824 HBA_WWN portWWN,
825 void *pRspBuffer,
826 HBA_UINT32 RspBufferSize,
827 void *pSenseBuffer,
828 HBA_UINT32 SenseBufferSize
829 );
830
831 HBA_API HBA_STATUS HBA_ScsiReadCapacityV2(
832 HBA_HANDLE handle,
833 HBA_WWN hbaPortWWN,
834 HBA_WWN discoveredPortWWN,
835 HBA_UINT64 fcLUN,
836 void *pRspBuffer,
837 HBA_UINT32 *pRspBufferSize,
838 HBA_UINT8 *pScsiStatus,
839 void *pSenseBuffer,
840 HBA_UINT32 *SenseBufferSize
841 );
842
843 /* Depricated, but supported */
844 HBA_API HBA_STATUS HBA_SendReadCapacity (
845 HBA_HANDLE handle,
846 HBA_WWN portWWN,
847 HBA_UINT64 fcLUN,
848 void *pRspBuffer,
849 HBA_UINT32 RspBufferSize,
850 void *pSenseBuffer,
851 HBA_UINT32 SenseBufferSize
852 );
853
854 #ifndef _KERNEL
855 HBA_API HBA_UINT32 HBA_GetVendorLibraryAttributes (
856 HBA_UINT32 adapter_index,
857 HBA_LIBRARYATTRIBUTES
858 *attributes
859 );
860 #endif /* ifndef _KERNEL */
861
862 HBA_API HBA_STATUS HBA_RemoveCallback(
863 HBA_CALLBACKHANDLE callbackHandle
864 );
865
866 HBA_API HBA_STATUS HBA_RegisterForAdapterAddEvents(
867 void (*callback) (
868 void *data,
869 HBA_WWN PortWWN,
870 HBA_UINT32 eventType
871 ),
872 void *userData,
873 HBA_CALLBACKHANDLE *callbackHandle
874 );
875
876 HBA_API HBA_STATUS HBA_RegisterForAdapterEvents(
877 void (*callback)(
878 void *data,
879 HBA_WWN PortWWN,
880 HBA_UINT32 eventType
881 ),
882 void *userData,
883 HBA_HANDLE handle,
884 HBA_CALLBACKHANDLE *callbackHandle
885 );
886
887 HBA_API HBA_STATUS HBA_RegisterForAdapterPortEvents(
888 void (*callback)(
889 void *data,
890 HBA_WWN PortWWN,
891 HBA_UINT32 eventType,
892 HBA_UINT32 fabricPortID
893 ),
894 void *userData,
895 HBA_HANDLE handle,
896 HBA_WWN PortWWN,
897 HBA_CALLBACKHANDLE *callbackHandle
898 );
899
900 HBA_API HBA_STATUS HBA_RegisterForAdapterPortStatEvents(
901 void (*callback)(
902 void *data,
903 HBA_WWN PortWWN,
904 HBA_UINT32 eventType
905 ),
906 void *userData,
907 HBA_HANDLE handle,
908 HBA_WWN PortWWN,
909 HBA_PORTSTATISTICS stats,
910 HBA_UINT32 statType,
911 HBA_CALLBACKHANDLE *callbackHandle
912 );
913
914
915 HBA_API HBA_STATUS HBA_RegisterForTargetEvents(
916 void (*callback)(
917 void *data,
918 HBA_WWN hbaPortWWN,
919 HBA_WWN discoveredPortWWN,
920 HBA_UINT32 eventType
921 ),
922 void *userData,
923 HBA_HANDLE handle,
924 HBA_WWN hbaPortWWN,
925 HBA_WWN discoveredPortWWN,
926 HBA_CALLBACKHANDLE *callbackHandle,
927 HBA_UINT32 allTargets
928 );
929
930 HBA_API HBA_STATUS HBA_RegisterForLinkEvents(
931 void (*callback)
932 (
933 void *data,
934 HBA_WWN adapterWWN,
935 HBA_UINT32 eventType,
936 void *pRLIRBuffer,
937 HBA_UINT32 RLIRBufferSize
938 ),
939 void *userData,
940 void *pRLIRBuffer,
941 HBA_UINT32 RLIRBufferSize,
942 HBA_HANDLE handle,
943 HBA_CALLBACKHANDLE *callbackHandle
944 );
945
946 /* Wrapper library specific entry points */
947
948 #ifndef _KERNEL
949 HBA_API HBA_UINT32 HBA_GetWrapperLibraryAttributes (
950 HBA_LIBRARYATTRIBUTES
951 *attributes
952 );
953 #endif /* ifndef _KERNEL */
954
955 #ifdef __cplusplus
956 }
957 #endif
958
959 #endif /* _EMLXS_HBAAPI_H */