1 /*
2  * ****************************************************************************
3  *
4  * Description
5  *	vendorhbaapi.h - incombination with hbaapi.h, defines interface to
6  *		vendor specific API
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  *	12/12/2001 Original revision, code split out of hbaapi.h
35  *	(for other changes... see the CVS logs)
36  * ****************************************************************************
37  */
38 /*
39  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
40  * Use is subject to license terms.
41  */
42 
43 #ifndef _VENDORSMHBAAPI_H_
44 #define	_VENDORSMHBAAPI_H_
45 
46 #ifdef __cplusplus
47 extern "C" {
48 #endif
49 
50 #include <vendorhbaapi.h>
51 
52 /* SM-HBA-2 6.9.2 Function Prototypes */
53 typedef HBA_UINT32 (* SMHBAGetVersionFunc)();
54 typedef HBA_UINT32 (* SMHBAGetWrapperLibraryAttributesFunc)
55 	(HBA_UINT32, SMHBA_LIBRARYATTRIBUTES *);
56 typedef HBA_UINT32 (* SMHBAGetVendorLibraryAttributesFunc)
57 	(SMHBA_LIBRARYATTRIBUTES *);
58 typedef HBA_STATUS (* SMHBAGetAdapterAttributesFunc)
59 	(HBA_HANDLE, SMHBA_ADAPTERATTRIBUTES *);
60 typedef HBA_STATUS (* SMHBAGetNumberOfPortsFunc)
61 	(HBA_HANDLE, HBA_UINT32 *);
62 typedef HBA_STATUS (* SMHBAGetPortTypeFunc)
63 	(HBA_HANDLE, HBA_UINT32, HBA_PORTTYPE *);
64 typedef HBA_STATUS (* SMHBAGetAdapterPortAttributesFunc)
65 	(HBA_HANDLE, HBA_UINT32, SMHBA_PORTATTRIBUTES *);
66 typedef HBA_STATUS (* SMHBAGetDiscoveredPortAttributesFunc)
67 	(HBA_HANDLE, HBA_UINT32, HBA_UINT32, SMHBA_PORTATTRIBUTES *);
68 typedef HBA_STATUS (* SMHBAGetPortAttributesByWWNFunc)
69 	(HBA_HANDLE, HBA_WWN, HBA_WWN, SMHBA_PORTATTRIBUTES *);
70 typedef HBA_STATUS (* SMHBAGetFCPhyAttributesFunc)
71 	(HBA_HANDLE, HBA_UINT32, HBA_UINT32, SMHBA_FC_PHY *);
72 typedef HBA_STATUS (* SMHBAGetSASPhyAttributesFunc)
73 	(HBA_HANDLE, HBA_UINT32, HBA_UINT32, SMHBA_SAS_PHY *);
74 typedef HBA_STATUS (* SMHBAGetProtocolStatisticsFunc)
75 	(HBA_HANDLE, HBA_UINT32, HBA_UINT32, SMHBA_PROTOCOLSTATISTICS *);
76 typedef HBA_STATUS (* SMHBAGetPhyStatisticsFunc)
77 	(HBA_HANDLE, HBA_UINT32, HBA_UINT32, SMHBA_PHYSTATISTICS *);
78 typedef HBA_STATUS (* SMHBASendTESTFunc)
79 	(HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, void *, HBA_UINT32);
80 typedef HBA_STATUS (* SMHBASendECHOFunc)
81 	(HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_UINT32, void *, HBA_UINT32,
82 	void *, HBA_UINT32 *);
83 typedef HBA_STATUS (* SMHBASendSMPPassThruFunc)
84 	(HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_WWN, void *, HBA_UINT32, void *,
85 	HBA_UINT32 *);
86 typedef HBA_STATUS (* SMHBAGetBindingCapabilityFunc)
87 	(HBA_HANDLE, HBA_WWN, HBA_WWN, SMHBA_BIND_CAPABILITY *);
88 typedef HBA_STATUS (* SMHBAGetBindingSupportFunc)
89 	(HBA_HANDLE, HBA_WWN, HBA_WWN, SMHBA_BIND_CAPABILITY *);
90 typedef HBA_STATUS (* SMHBASetBindingSupportFunc)
91 	(HBA_HANDLE, HBA_WWN, HBA_WWN, SMHBA_BIND_CAPABILITY);
92 typedef HBA_STATUS (* SMHBAGetTargetMappingFunc)
93 	(HBA_HANDLE, HBA_WWN, HBA_WWN, SMHBA_TARGETMAPPING *);
94 typedef HBA_STATUS (* SMHBAGetPersistentBindingFunc)
95 	(HBA_HANDLE, HBA_WWN, HBA_WWN, SMHBA_BINDING *);
96 typedef HBA_STATUS (* SMHBASetPersistentBindingFunc)
97 	(HBA_HANDLE, HBA_WWN, HBA_WWN, const SMHBA_BINDING *);
98 typedef HBA_STATUS (* SMHBARemovePersistentBindingFunc)
99 	(HBA_HANDLE, HBA_WWN, HBA_WWN, const SMHBA_BINDING *);
100 typedef HBA_STATUS (* SMHBARemoveAllPersistentBindingsFunc)
101 	(HBA_HANDLE, HBA_WWN, HBA_WWN);
102 typedef HBA_STATUS (* SMHBAGetLUNStatisticsFunc)
103 	(HBA_HANDLE, const HBA_SCSIID *, SMHBA_PROTOCOLSTATISTICS *);
104 typedef HBA_STATUS (* SMHBARegisterForAdapterAddEventsFunc)
105 	(void (*)(void *, HBA_WWN, HBA_UINT32), void *, HBA_CALLBACKHANDLE *);
106 typedef HBA_STATUS (* SMHBARegisterForAdapterEventsFunc)
107 	(void (*)(void *, HBA_WWN, HBA_UINT32),
108 	void *, HBA_HANDLE, HBA_CALLBACKHANDLE *);
109 typedef HBA_STATUS    (* SMHBARegisterForAdapterPortEventsFunc)
110 	(void (*)(void *, HBA_WWN, HBA_UINT32, HBA_UINT32),
111 	void *, HBA_HANDLE, HBA_WWN, HBA_UINT32, HBA_CALLBACKHANDLE *);
112 typedef HBA_STATUS    (* SMHBARegisterForAdapterPortStatEventsFunc)
113 	(void (*)(void *, HBA_WWN, HBA_UINT32, HBA_UINT32),
114 	void *, HBA_HANDLE, HBA_WWN, HBA_UINT32, SMHBA_PROTOCOLSTATISTICS,
115 	HBA_UINT32, HBA_CALLBACKHANDLE *);
116 typedef HBA_STATUS    (* SMHBARegisterForAdapterPhyStatEventsFunc)
117 	(void (*)(void *, HBA_WWN, HBA_UINT32, HBA_UINT32),
118 	void *, HBA_HANDLE, HBA_WWN, HBA_UINT32, SMHBA_PHYSTATISTICS,
119 	HBA_UINT32, HBA_CALLBACKHANDLE *);
120 typedef HBA_STATUS    (* SMHBARegisterForTargetEventsFunc)
121 	(void (*)(void *, HBA_WWN, HBA_WWN, HBA_WWN, HBA_UINT32),
122 	void *, HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_WWN,
123 	HBA_CALLBACKHANDLE *, HBA_UINT32);
124 typedef HBA_STATUS    (* SMHBAScsiInquiryFunc)
125 	(HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_WWN, SMHBA_SCSILUN, HBA_UINT8,
126 	HBA_UINT8, void *, HBA_UINT32 *, HBA_UINT8 *, void *, HBA_UINT32 *);
127 typedef HBA_STATUS    (* SMHBAScsiReportLUNsFunc)
128 	(HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_WWN, void *, HBA_UINT32 *,
129 	HBA_UINT8 *, void *, HBA_UINT32 *);
130 typedef HBA_STATUS    (* SMHBAScsiReadCapacityFunc)
131 	(HBA_HANDLE, HBA_WWN, HBA_WWN, HBA_WWN, SMHBA_SCSILUN, void *,
132 	HBA_UINT32 *, HBA_UINT8 *, void *, HBA_UINT32 *);
133 
134 /* SM-HBA-2 6.9.3 Entry Point Data Declarations */
135 typedef struct SMHBA_EntryPoints {
136 	SMHBAGetVersionFunc			GetVersionHandler;
137 	HBALoadLibraryFunc			LoadLibraryHandler;
138 	HBAFreeLibraryFunc			FreeLibraryHandler;
139 	HBAGetNumberOfAdaptersFunc		GetNumberOfAdaptersHandler;
140 	HBARefreshInformationFunc		RefreshInformationHandler;
141 	SMHBAGetVendorLibraryAttributesFunc
142 		GetVendorLibraryAttributesHandler;
143 	HBAGetAdapterNameFunc			GetAdapterNameHandler;
144 	HBAOpenAdapterFunc			OpenAdapterHandler;
145 	HBACloseAdapterFunc			CloseAdapterHandler;
146 	SMHBAGetAdapterAttributesFunc		GetAdapterAttributesHandler;
147 	SMHBAGetNumberOfPortsFunc		GetNumberOfPortsHandler;
148 	SMHBAGetPortTypeFunc			GetPortTypeHandler;
149 	SMHBAGetAdapterPortAttributesFunc
150 		GetAdapterPortAttributesHandler;
151 	SMHBAGetDiscoveredPortAttributesFunc
152 		GetDiscoveredPortAttributesHandler;
153 	SMHBAGetPortAttributesByWWNFunc		GetPortAttributesByWWNHandler;
154 	SMHBAGetFCPhyAttributesFunc		GetFCPhyAttributesHandler;
155 	SMHBAGetSASPhyAttributesFunc		GetSASPhyAttributesHandler;
156 	SMHBAGetProtocolStatisticsFunc		GetProtocolStatisticsHandler;
157 	SMHBAGetPhyStatisticsFunc		GetPhyStatisticsHandler;
158 	HBASendCTPassThruV2Func			SendCTPassThruV2Handler;
159 	HBASetRNIDMgmtInfoFunc			SetRNIDMgmtInfoHandler;
160 	HBAGetRNIDMgmtInfoFunc			GetRNIDMgmtInfoHandler;
161 	HBASendRNIDV2Func			SendRNIDV2Handler;
162 	HBASendRPLFunc				SendRPLHandler;
163 	HBASendRPSFunc				SendRPSHandler;
164 	HBASendSRLFunc				SendSRLHandler;
165 	HBASendLIRRFunc				SendLIRRHandler;
166 	HBASendRLSFunc				SendRLSHandler;
167 	SMHBASendTESTFunc			SendTESTHandler;
168 	SMHBASendECHOFunc			SendECHOHandler;
169 	SMHBASendSMPPassThruFunc		SendSMPPassThruHandler;
170 	SMHBAGetBindingCapabilityFunc		GetBindingCapabilityHandler;
171 	SMHBAGetBindingSupportFunc		GetBindingSupportHandler;
172 	SMHBASetBindingSupportFunc		SetBindingSupportHandler;
173 	SMHBAGetTargetMappingFunc		GetTargetMappingHandler;
174 	SMHBAGetPersistentBindingFunc		GetPersistentBindingHandler;
175 	SMHBASetPersistentBindingFunc		SetPersistentBindingHandler;
176 	SMHBARemovePersistentBindingFunc	RemovePersistentBindingHandler;
177 	SMHBARemoveAllPersistentBindingsFunc
178 		RemoveAllPersistentBindingsHandler;
179 	SMHBAGetLUNStatisticsFunc		GetLUNStatisticsHandler;
180 	SMHBAScsiInquiryFunc			ScsiInquiryHandler;
181 	SMHBAScsiReportLUNsFunc			ScsiReportLUNsHandler;
182 	SMHBAScsiReadCapacityFunc		ScsiReadCapacityHandler;
183 	SMHBARegisterForAdapterAddEventsFunc
184 		RegisterForAdapterAddEventsHandler;
185 	SMHBARegisterForAdapterEventsFunc	RegisterForAdapterEventsHandler;
186 	SMHBARegisterForAdapterPortEventsFunc
187 		RegisterForAdapterPortEventsHandler;
188 	SMHBARegisterForAdapterPortStatEventsFunc
189 		RegisterForAdapterPortStatEventsHandler;
190 	SMHBARegisterForAdapterPhyStatEventsFunc
191 		RegisterForAdapterPhyStatEventsHandler;
192 	SMHBARegisterForTargetEventsFunc	RegisterForTargetEventsHandler;
193 	HBARegisterForLinkEventsFunc		RegisterForLinkEventsHandler;
194 	HBARemoveCallbackFunc			RemoveCallbackHandler;
195 } SMHBA_ENTRYPOINTS, *PSMHBA_ENTRYPOINTS;
196 
197 typedef HBA_UINT32 (* SMHBARegisterLibraryFunc)(SMHBA_ENTRYPOINTS *);
198 
199 HBA_STATUS SMHBA_RegisterLibrary(
200 	SMHBA_ENTRYPOINTS	*functionTable
201 );
202 
203 #ifdef __cplusplus
204 }
205 #endif
206 
207 #endif /* _VENDORSMHBAAPI_H_ */
208