xref: /illumos-gate/usr/src/uts/common/sys/fibre-channel/fca/emlxs/emlxs_hbaapi.h (revision bb63f56ebeb244bd34f5e8d50900e3420f01b394)
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 */
959