xref: /illumos-gate/usr/src/uts/common/sys/fibre-channel/fca/emlxs/emlxs_hbaapi.h (revision 93c20f2609342fd05f6625f16dfcb9348e7977f2)
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 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 
44 #ifndef _EMLXS_HBAAPI_H
45 #define _EMLXS_HBAAPI_H
46 
47 /* Library version string */
48 #define HBA_LIBVERSION 2
49 
50 /* DLL imports for WIN32 operation */
51 #ifdef WIN32
52 #ifdef HBAAPI_EXPORTS
53 #define HBA_API __declspec(dllexport)
54 #else
55 #define HBA_API __declspec(dllimport)
56 #endif
57 #else
58 #define HBA_API
59 #endif
60 
61 /* OS specific definitions */
62 
63 #ifdef WIN32
64 typedef unsigned char	HBA_UINT8;	// Unsigned  8 bits
65 typedef		 char	HBA_INT8;	// Signed    8 bits
66 typedef unsigned short	HBA_UINT16;	// Unsigned 16 bits
67 typedef		 short	HBA_INT16;	// Signed   16 bits
68 typedef unsigned int	HBA_UINT32;	// Unsigned 32 bits
69 typedef		 int	HBA_INT32;	// Signed   32 bits
70 typedef void*		HBA_PVOID;	// Pointer  to void
71 typedef HBA_UINT32	HBA_VOID32;	// Opaque   32 bits
72 
73 
74 /* Don't confuse, _WIN32 with WIN32... OK, how do you accompish that */
75 #ifdef _WIN32
76 typedef			_int64		HBA_INT64;
77 typedef			unsigned _int64	HBA_UINT64;
78 #else
79 typedef struct {
80 	TN_UINT32	lo_val;
81 	TN_UINT32	hi_val;
82 } HBA_INT64;
83 
84 typedef struct {
85 	TN_UINT32	lo_val;
86 	TN_UINT32	hi_val;
87 } HBA_UINT64;
88 #endif	/*	#ifdef _WIN32	*/
89 
90 
91 #else
92 #ifndef	_KERNEL
93 #include <time.h> /* Needed for struct tm */
94 #endif /* ifndef _KERNEL */
95 
96 /* Note this section needs to be cleaned up for various Unix platforms */
97 typedef unsigned char	HBA_UINT8;	/* Unsigned  8 bits */
98 typedef		 char	HBA_INT8;	/* Signed    8 bits */
99 typedef unsigned short	HBA_UINT16;	/* Unsigned 16 bits */
100 typedef		 short	HBA_INT16;	/* Signed   16 bits */
101 typedef unsigned int	HBA_UINT32;	/* Unsigned 32 bits */
102 typedef		 int	HBA_INT32;	/* Signed   32 bits */
103 typedef void*		HBA_PVOID;	/* Pointer  to void */
104 typedef HBA_UINT32	HBA_VOID32;	/* Opaque   32 bits */
105 typedef long long	HBA_INT64;
106 typedef long long	HBA_UINT64;
107 
108 #endif  /*  #ifdef WIN32 */
109 
110 
111 /* 4.2.1	Handle to Device */
112 typedef HBA_UINT32	HBA_HANDLE;
113 
114 #define HBA_HANDLE_INVALID		0
115 
116 /* 4.2.2	Status Return Values */
117 typedef HBA_UINT32	HBA_STATUS;
118 
119 #define HBA_STATUS_OK			0
120 #define HBA_STATUS_ERROR		1   /* Error */
121 #define HBA_STATUS_ERROR_NOT_SUPPORTED	2   /* Function not supported.*/
122 #define HBA_STATUS_ERROR_INVALID_HANDLE	3   /* invalid handle */
123 #define HBA_STATUS_ERROR_ARG		4   /* Bad argument */
124 #define HBA_STATUS_ERROR_ILLEGAL_WWN	5   /* WWN not recognized */
125 #define HBA_STATUS_ERROR_ILLEGAL_INDEX	6   /* Index not recognized */
126 #define HBA_STATUS_ERROR_MORE_DATA	7   /* Larger buffer required */
127 #define HBA_STATUS_ERROR_STALE_DATA	8   /* Information has changed since
128 					     * last call to
129 					     * HBA_Refreshinformation */
130 #define HBA_STATUS_SCSI_CHECK_CONDITION	9   /* Obvious */
131 #define HBA_STATUS_ERROR_BUSY		10  /* Adapter busy or reserved,
132 					     * retry may be effective */
133 #define HBA_STATUS_ERROR_TRY_AGAIN	11  /* Request timedout,
134 					     * retry may be effective */
135 #define HBA_STATUS_ERROR_UNAVAILABLE	12  /* Referenced HBA has been removed
136 					     * or deactivated */
137 #define HBA_STATUS_ERROR_ELS_REJECT	13  /* The requested ELS was rejected by
138 					     * the local adapter */
139 #define HBA_STATUS_ERROR_INVALID_LUN	14  /* The specified LUN is not provided
140 					     *  the specified adapter */
141 #define HBA_STATUS_ERROR_INCOMPATIBLE	15  /* An incompatibility has been
142 				* detected among the library and driver modules
143 				* invoked which will cause one or more functions
144 				* in the highest version that all support to
145 				* operate incorrectly.  The differing function
146 				* sets of software modules implementing different
147 				* versions of the HBA API specification does not
148 				* in itself constitute an incompatibility.  Known
149 				* interoperability bugs among supposedly
150 				* compatible versions should be reported as
151 				* incompatibilities, but not all such
152 				* interoperability bugs may be known.  This value
153 				* may be returned by any function that calls a
154 				* Vendor Specific Library and returns an
155 				* HBA_STATUS, and by HBA_LoadLibrary and
156 				* HBA_GetAdapterName. */
157 
158 #define HBA_STATUS_ERROR_AMBIGUOUS_WWN	16  /* Multiple adapters have a matching
159 					     * WWN. This could occur if the
160 					     * NodeWWN of multiple adapters is
161 					     * identical */
162 #define HBA_STATUS_ERROR_LOCAL_BUS	17  /* A persistent binding request
163 					     * included a bad local SCSI bus
164 					     * number */
165 #define HBA_STATUS_ERROR_LOCAL_TARGET	18  /* A persistent binding request
166 					     * included a bad local SCSI target
167 					     * number */
168 #define HBA_STATUS_ERROR_LOCAL_LUN	19  /* A persistent binding request
169 					     * included a bad local SCSI logical
170 					     * unit number */
171 #define HBA_STATUS_ERROR_LOCAL_SCSIID_BOUND 20
172 					    /* A persistent binding set request
173 					     * included a local SCSI ID that was
174 					     * already bound */
175 #define HBA_STATUS_ERROR_TARGET_FCID	21  /* A persistent binding request
176 					     * included a bad or unlocatable FCP
177 					     * Target FCID */
178 #define HBA_STATUS_ERROR_TARGET_NODE_WWN 22 /* A persistent binding request
179 					     * included a bad FCP Target Node
180 					     * WWN */
181 #define HBA_STATUS_ERROR_TARGET_PORT_WWN 23 /* A persistent binding request
182 					     * included a bad FCP Target Port
183 					     * WWN */
184 #define HBA_STATUS_ERROR_TARGET_LUN	24  /* A persistent binding request
185 					     * included an FCP Logical Unit Number
186 					     * not defined by the identified
187 					     * Target*/
188 #define HBA_STATUS_ERROR_TARGET_LUID	25  /* A persistent binding request
189 					     * included an undefined or otherwise
190 					     * inaccessible Logical Unit Unique
191 					     * Identifier */
192 #define HBA_STATUS_ERROR_NO_SUCH_BINDING 26 /* A persistent binding remove request
193 					     * included a binding which did not
194 					     * match a binding established by the
195 					     * specified port */
196 #define HBA_STATUS_ERROR_NOT_A_TARGET	27  /* A SCSI command was requested to an
197 					     * Nx_Port that was not a SCSI
198 					     * Target Port */
199 #define HBA_STATUS_ERROR_UNSUPPORTED_FC4 28 /* A request was made concerning an
200 					     * unsupported FC-4 protocol */
201 
202 
203 #define HBA_STATUS_ERROR_INCAPABLE	29  /* A request was made to enable
204 					     * unimplemented capabilities for a
205 					     * port */
206 
207 /* 4.2.3	Port Operational Modes Values */
208 typedef HBA_UINT32 HBA_PORTTYPE;
209 
210 #define HBA_PORTTYPE_UNKNOWN		1   /* Unknown */
211 #define HBA_PORTTYPE_OTHER		2   /* Other */
212 #define HBA_PORTTYPE_NOTPRESENT		3   /* Not present */
213 #define HBA_PORTTYPE_NPORT		5   /* Fabric  */
214 #define HBA_PORTTYPE_NLPORT		6   /* Public Loop */
215 #define HBA_PORTTYPE_FLPORT		7
216 #define HBA_PORTTYPE_FPORT		8   /* Fabric Port */
217 #define HBA_PORTTYPE_EPORT		9   /* Fabric expansion port */
218 #define HBA_PORTTYPE_GPORT		10  /* Generic Fabric Port */
219 #define HBA_PORTTYPE_LPORT		20  /* Private Loop */
220 #define HBA_PORTTYPE_PTP		21  /* Point to Point */
221 
222 
223 typedef HBA_UINT32 HBA_PORTSTATE;
224 #define HBA_PORTSTATE_UNKNOWN		1   /* Unknown */
225 #define HBA_PORTSTATE_ONLINE		2   /* Operational */
226 #define HBA_PORTSTATE_OFFLINE		3   /* User Offline */
227 #define HBA_PORTSTATE_BYPASSED		4   /* Bypassed */
228 #define HBA_PORTSTATE_DIAGNOSTICS	5   /* In diagnostics mode */
229 #define HBA_PORTSTATE_LINKDOWN		6   /* Link Down */
230 #define HBA_PORTSTATE_ERROR		7   /* Port Error */
231 #define HBA_PORTSTATE_LOOPBACK		8   /* Loopback */
232 
233 
234 typedef HBA_UINT32 HBA_PORTSPEED;
235 #define HBA_PORTSPEED_UNKNOWN		0   /* Unknown - transceiver incable
236 					     * of reporting */
237 #define HBA_PORTSPEED_1GBIT		1   /* 1 GBit/sec */
238 #define HBA_PORTSPEED_2GBIT		2   /* 2 GBit/sec */
239 #define HBA_PORTSPEED_10GBIT		4   /* 10 GBit/sec */
240 #define HBA_PORTSPEED_4GBIT		8   /* 4 GBit/sec */
241 #define HBA_PORTSPEED_8GBIT		16  /* 8 GBit/sec */
242 #define HBA_PORTSPEED_16GBIT		32  /* 16 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 #endif /* _EMLXS_HBAAPI_H */
956 
957 #ifdef __cplusplus
958 }
959 #endif
960 
961 
962