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