1 /******************************************************************************
2  *
3  * Description
4  *  mpapi-plugin.h - interfaces for the MP API Version 1.0 plugin library.
5  *  A compliant plugin library should implement interfaces with name without Fn
6  *  suffix from function definitions below.
7  *
8  * License:
9  *  The contents of this file are subject to the SNIA Public License
10  *  Version 1.1 (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  *  TBD
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 iSCSI Management API and Multipath Management API
21  * 	plugin header file
22  *
23  * The Initial Developer of the Original Code is:
24  *	Benjamin F. Kuo Troika Networks, Inc. (benk@troikanetworks.com)
25  *	David Dillard	VERITAS Software(david.dillard@veritas.com)
26  *	Jeff Ding	Adaptec, Inc. (jding@corp.adaptec.com)
27  *      Hyon Kim       	Sun Microsystems(hyon.kim@sun.com)
28  *
29  * Contributor(s):
30  *	Paul von Behren	Sun Microsystems(paul.vonbehren@sun.com)
31  *
32  ******************************************************************************
33  *
34  *   Changes:
35  *  1/15/2005 Implemented SNIA MP API specification 1.0
36  *****************************************************************************/
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 
43 #ifndef MPPLUGIN_H
44 #define MPPLUGIN_H
45 
46 /*
47  * MP API common library calls InitaizeFn as part of dynamically loading
48  * the plugins.  For this version of implementation the common library
49  * passes the sequence number of the plugin oid through InitializeFn.  The
50  * sequnece number will be used as the ownerId for the plugin generated OIDs.
51  */
52 typedef MP_STATUS (* InitializeFn)  (
53         MP_UINT32   pluginOwnerID
54     );
55 
56 /*
57  * MP API common library calls TerminateFn as part of dynamically unloading
58  * the plugins.
59  */
60 typedef MP_STATUS (* TerminateFn) (void);
61 
62 /**
63  ******************************************************************************
64  *
65  * Function table for OID and properties discovery API
66  *
67  ******************************************************************************
68  */
69 
70 typedef MP_STATUS (* MP_GetPluginPropertiesPluginFn)(
71         MP_PLUGIN_PROPERTIES *pProps
72 );
73 
74 typedef MP_STATUS (* MP_GetDeviceProductOidListPluginFn)(
75         MP_OID_LIST **ppList
76 );
77 
78 typedef MP_STATUS (* MP_GetDeviceProductPropertiesFn)(
79 	MP_OID 				oid,
80         MP_DEVICE_PRODUCT_PROPERTIES *pProps
81 );
82 
83 typedef MP_STATUS (* MP_GetInitiatorPortOidListPluginFn)(
84         MP_OID_LIST **ppList
85 );
86 
87 typedef MP_STATUS (* MP_GetInitiatorPortPropertiesFn)(
88         MP_OID                        oid,
89         MP_INITIATOR_PORT_PROPERTIES *pProps
90 );
91 
92 typedef MP_STATUS (* MP_GetMultipathLusPluginFn)(
93         MP_OID_LIST **ppList
94 );
95 
96 typedef MP_STATUS (* MP_GetMultipathLusDevProdFn)(
97 	MP_OID	oid,
98         MP_OID_LIST **ppList
99 );
100 
101 typedef MP_STATUS (* MP_GetMPLogicalUnitPropertiesFn)(
102         MP_OID                                oid,
103         MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES *pProps
104 );
105 
106 typedef MP_STATUS (* MP_GetAssociatedPathOidListFn)(
107         MP_OID        oid,
108         MP_OID_LIST **ppList
109 );
110 
111 typedef MP_STATUS (* MP_GetPathLogicalUnitPropertiesFn)(
112         MP_OID                           oid,
113         MP_PATH_LOGICAL_UNIT_PROPERTIES *pProps
114 );
115 
116 typedef MP_STATUS (* MP_GetAssociatedTPGOidListFn)(
117         MP_OID        oid,
118         MP_OID_LIST **ppList
119 );
120 
121 typedef MP_STATUS (* MP_GetTargetPortGroupPropertiesFn)(
122         MP_OID                           oid,
123         MP_TARGET_PORT_GROUP_PROPERTIES *pProps
124 );
125 
126 typedef MP_STATUS (* MP_GetMPLuOidListFromTPGFn)(
127         MP_OID        oid,
128         MP_OID_LIST **ppList
129 );
130 
131 typedef MP_STATUS (* MP_GetProprietaryLoadBalanceOidListPluginFn)(
132         MP_OID_LIST **ppList
133 );
134 
135 typedef MP_STATUS (* MP_GetProprietaryLoadBalancePropertiesFn)(
136         MP_OID        oid,
137 	MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES *pProps
138 );
139 
140 typedef MP_STATUS (* MP_GetTargetPortOidListFn)(
141         MP_OID        oid,
142         MP_OID_LIST **ppList
143 );
144 
145 typedef MP_STATUS (* MP_GetTargetPortPropertiesFn)(
146         MP_OID                     oid,
147         MP_TARGET_PORT_PROPERTIES *pProps
148 );
149 
150 /**
151  ******************************************************************************
152  *
153  * Function table for path management API
154  *
155  ******************************************************************************
156  */
157 
158 typedef MP_STATUS (* MP_AssignLogicalUnitToTPGFn)(
159         MP_OID tpgOid,
160         MP_OID luOid
161 );
162 
163 typedef MP_STATUS (* MP_SetOverridePathFn)(
164     MP_OID logicalUnitOid,
165     MP_OID pathOid
166 );
167 
168 typedef MP_STATUS (* MP_CancelOverridePathFn)(
169         MP_OID luOid
170 );
171 
172 typedef MP_STATUS (* MP_EnableAutoFailbackPluginFn)(
173 );
174 
175 typedef MP_STATUS (* MP_EnableAutoFailbackLuFn)(
176     MP_OID oid
177 );
178 
179 typedef MP_STATUS (* MP_EnableAutoProbingPluginFn)(
180 );
181 
182 typedef MP_STATUS (* MP_EnableAutoProbingLuFn)(
183     MP_OID oid
184 );
185 
186 typedef MP_STATUS (* MP_DisableAutoFailbackPluginFn)(
187 );
188 
189 typedef MP_STATUS (* MP_DisableAutoFailbackLuFn)(
190     MP_OID oid
191 );
192 
193 typedef MP_STATUS (* MP_DisableAutoProbingPluginFn)(
194 );
195 
196 typedef MP_STATUS (* MP_DisableAutoProbingLuFn)(
197     MP_OID oid
198 );
199 
200 typedef MP_STATUS (* MP_EnablePathFn)(
201     MP_OID oid
202 );
203 
204 typedef MP_STATUS (* MP_DisablePathFn)(
205     MP_OID oid
206 );
207 
208 typedef MP_STATUS (* MP_SetLogicalUnitLoadBalanceTypeFn)(
209     MP_OID               logicalUnitoid,
210     MP_LOAD_BALANCE_TYPE loadBalance
211 );
212 
213 typedef MP_STATUS (* MP_SetPathWeightFn)(
214     MP_OID    pathOid,
215     MP_UINT32 weight
216 );
217 
218 typedef MP_STATUS (* MP_SetPluginLoadBalanceTypePluginFn)(
219     MP_LOAD_BALANCE_TYPE loadBalance
220 );
221 
222 typedef MP_STATUS (* MP_SetFailbackPollingRatePluginFn)(
223     MP_UINT32 pollingRate
224 );
225 
226 typedef MP_STATUS (* MP_SetFailbackPollingRateLuFn)(
227     MP_OID	oid,
228     MP_UINT32	pollingRate
229 );
230 
231 typedef MP_STATUS (* MP_SetProbingPollingRatePluginFn)(
232     MP_UINT32 pollingRate
233 );
234 
235 typedef MP_STATUS (* MP_SetProbingPollingRateLuFn)(
236     MP_OID	oid,
237     MP_UINT32	pollingRate
238 );
239 
240 typedef MP_STATUS (* MP_SetProprietaryPropertiesFn)(
241     MP_OID             oid,
242     MP_UINT32          count,
243     MP_PROPRIETARY_PROPERTY *pPropertyList
244 );
245 
246 typedef MP_STATUS (* MP_SetTPGAccessFn)(
247     MP_OID             luOid,
248     MP_UINT32          count,
249     MP_TPG_STATE_PAIR *pTpgStateList
250 );
251 
252 /**
253  ******************************************************************************
254  *
255  * Function table for event support API
256  *
257  ******************************************************************************
258  */
259 
260 typedef MP_STATUS (* MP_RegisterForObjectPropertyChangesPluginFn)(
261     MP_OBJECT_PROPERTY_FN   pClientFn,
262     MP_OBJECT_TYPE	    objectType,
263     void		    *pCallerData
264 );
265 
266 typedef MP_STATUS (* MP_DeregisterForObjectPropertyChangesPluginFn)(
267     MP_OBJECT_PROPERTY_FN   pClientFn,
268     MP_OBJECT_TYPE	    objectType
269 );
270 
271 typedef MP_STATUS (* MP_RegisterForObjectVisibilityChangesPluginFn)(
272     MP_OBJECT_VISIBILITY_FN pClientFn,
273     MP_OBJECT_TYPE	    objectType,
274     void		    *pCallerData
275 );
276 
277 typedef MP_STATUS (* MP_DeregisterForObjectVisibilityChangesPluginFn)(
278     MP_OBJECT_VISIBILITY_FN pClientFn,
279     MP_OBJECT_TYPE          objectType
280 );
281 
282 typedef MP_STATUS (* Sun_MP_SendScsiCmdFn)(
283     MP_OID oid, struct uscsi_cmd *cmd
284 );
285 
286 #endif
287 
288 #ifdef __cplusplus
289 };
290 #endif
291 
292