dmake: do not set MAKEFLAGS=k
[unleashed/tickless.git] / usr / src / lib / mpapi / libmpapi / common / mpapi.h
blob3c2e0f180c6afcbefb1722393bfc757499840673
1 /******************************************************************************
3 * Description
4 * mpapi.h - general header file for Multipath Management API Version 1.0
5 * client
7 * License:
8 * The contents of this file are subject to the SNIA Public License
9 * Version 1.1 (the "License"); you may not use this file except in
10 * compliance with the License. You may obtain a copy of the License at
12 * http://mp-mgmt-api.sourceforge.net
14 * Software distributed under the License is distributed on an "AS IS"
15 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
16 * the License for the specific language governing rights and limitations
17 * under the License.
19 * The Original Code is SNIA iSCSI Management API and Multipath Management API
20 * general header file
22 * The Initial Developer of the Original Code is:
23 * Benjamin F. Kuo Troika Networks, Inc. (benk@troikanetworks.com)
24 * David Dillard VERITAS Software(david.dillard@veritas.com)
25 * Jeff Ding Adaptec, Inc. (jding@corp.adaptec.com)
26 * Dave Wysochanski Network Appliance, Inc. (davidw@netapp.com)
27 * Hyon Kim Sun Microsystems(hyon.kim@sun.com)
29 * Contributor(s):
30 * Paul von Behren Sun Microsystems(paul.vonbehren@sun.com)
32 ******************************************************************************
34 * Changes:
35 * 1/15/2005 Implemented SNIA MP API specification 1.0
36 * 10/11/2005
37 * - Added the license location in the header comment.
38 * - Added an implementation note in constants and macros
39 * declarations section.
40 * - Fixed field name value in struct _MP_PROPRIETARY_PROPERTY.
41 * - Fixed typo in logicalUnitGroupID in
42 * _MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES
43 * - Fixed typo in desiredState in struct _MP_TPG_STATE_PAIR.
44 * - Fixed typo in API name MP_GetTargetPortGroupProperties.
45 * - Clarified description of MP_STATUS_INVALID_PARAMETER error
46 * in MP_GetObjectType().
47 * - Fixed typo in API name
48 * MP_GetProprietaryLoadBalanceProperties().
49 * 3/6/2006
50 * - mpapi.h header file is updated for
51 * MP_LOAD_BALANCE_TYPE change in the spec.
52 *****************************************************************************/
54 #ifdef __cplusplus
55 extern "C" {
56 #endif
59 #ifndef MPAPI_H
60 #define MPAPI_H
62 #include <time.h>
63 #include <wchar.h>
64 #include <string.h>
65 #include <stdlib.h>
68 /* Library version string */
69 #define MP_LIBVERSION 1
71 /**
72 *******************************************************************************
74 * Generic MP Constant Definitions
76 *******************************************************************************
78 #define RL_LIBRARY_SEQNUM 0
80 /**
81 * Value which can be assigned to an MP_BOOL and or an MP_XBOOL.
83 #define MP_TRUE 1
85 /**
86 * Value which can be assigned to an MP_BOOL and or an MP_XBOOL.
88 #define MP_FALSE 0
90 /**
91 * Value which can be assigned to an MP_XBOOL.
93 #define MP_UNKNOWN 0xFFFFFFFF
95 #define MP_MAX_NUM_PLUGINS 64
96 #define MP_OBJECT_TYPE_MATCH 1
97 #define MP_OBJECT_TYPE_ANY 2
98 #define MAX_NAME_SIZE 256
99 #define MAX_LINE_SIZE 515
103 ******************************************************************************
105 * Base MP API Type Definitions
107 ******************************************************************************
110 typedef unsigned char MP_UINT8; /* unsigned 8 bits */
111 typedef char MP_INT8; /* signed 8 bits */
112 typedef unsigned short MP_UINT16; /* unsigned 16 bits */
113 typedef short MP_INT16; /* signed 16 bits */
114 typedef unsigned int MP_UINT32; /* unsigned 32 bits */
115 typedef int MP_INT32; /* signed 32 bits */
116 typedef void* MP_PVOID; /* pointer to void */
117 typedef MP_UINT32 MP_VOID32; /* opaque 32 bits */
118 typedef long long MP_INT64; /* signed 64 bits */
119 typedef unsigned long long MP_UINT64; /* unsigned 64 bits */
122 * A character.
124 typedef char MP_CHAR;
127 * A wide character.
129 typedef wchar_t MP_WCHAR;
132 * An unsigned character.
134 typedef unsigned char MP_BYTE;
137 * A boolean.
139 typedef MP_UINT32 MP_BOOL;
142 * An extended boolean: can have the values @ref MP_TRUE, @ref MP_FALSE, and
143 * @ref MP_UNKNOWN.
145 typedef MP_UINT32 MP_XBOOL;
148 ******************************************************************************
150 * Constants and macros declarations related to MP_STATUS
151 * Implementation Notes: This library does validation for OID argument and
152 * returns the following errors.
154 * 1. MP_STATUS_INVALID_OBJECT_TYPE when input OID type is not
155 * one of legitimate types defined SNIA Multipath Management
156 * Spec.
157 * 2. MP_STATUS_INVALID_PARAMETER when input OID type is
158 * legitimate but not a proper type for API.
159 * 3. MP_STATUS_OBJECT_NOT_FOUND when the ownerId of input OID is
160 * not found or no object instance with matching
161 * sequenceNumber is found.
162 * The ownerId is validated by the common library and the
163 * sequence number is validated by the plugin library.
165 ******************************************************************************
167 typedef enum {
168 MP_STATUS_SUCCESS = 0,
169 MP_STATUS_INVALID_PARAMETER = 1,
170 MP_STATUS_UNKNOWN_FN = 2,
171 MP_STATUS_FAILED = 3,
172 MP_STATUS_INSUFFICIENT_MEMORY = 4,
173 MP_STATUS_INVALID_OBJECT_TYPE = 5,
174 MP_STATUS_OBJECT_NOT_FOUND = 6,
175 MP_STATUS_UNSUPPORTED = 7,
176 MP_STATUS_FN_REPLACED = 8,
177 MP_STATUS_ACCESS_STATE_INVALID = 9,
178 MP_STATUS_INVALID_WEIGHT = 10,
179 MP_STATUS_PATH_NONOPERATIONAL = 11,
180 MP_STATUS_TRY_AGAIN = 12,
181 MP_STATUS_NOT_PERMITTED = 13
183 } MP_STATUS;
186 ******************************************************************************
188 * Declaration of the MP_PATH_STATE constants
190 ******************************************************************************
192 #define MP_PATH_STATE_OKAY 0
193 #define MP_PATH_STATE_PATH_ERR 1
194 #define MP_PATH_STATE_LU_ERR 2
195 #define MP_PATH_STATE_RESERVED 3
196 #define MP_PATH_STATE_REMOVED 4
197 #define MP_PATH_STATE_TRANSITIONING 5
198 #define MP_PATH_STATE_OPERATIONAL_CLOSED 6
199 #define MP_PATH_STATE_INVALID_CLOSED 7
200 #define MP_PATH_STATE_OFFLINE_CLOSED 8
201 #define MP_PATH_STATE_UNKNOWN 9
203 typedef MP_UINT32 MP_PATH_STATE;
206 *******************************************************************************
208 * Declaration of the MP_OBJECT_TYPE constants
210 *******************************************************************************
212 #define MP_OBJECT_TYPE_UNKNOWN 0
213 #define MP_OBJECT_TYPE_PLUGIN 1
214 #define MP_OBJECT_TYPE_INITIATOR_PORT 2
215 #define MP_OBJECT_TYPE_TARGET_PORT 3
216 #define MP_OBJECT_TYPE_MULTIPATH_LU 4
217 #define MP_OBJECT_TYPE_PATH_LU 5
218 #define MP_OBJECT_TYPE_DEVICE_PRODUCT 6
219 #define MP_OBJECT_TYPE_TARGET_PORT_GROUP 7
220 #define MP_OBJECT_TYPE_PROPRIETARY_LOAD_BALANCE 8
222 /* set to the highest constant of object type. */
223 #define MP_OBJECT_TYPE_MAX 8
225 typedef MP_UINT32 MP_OBJECT_TYPE;
228 *******************************************************************************
230 * Declaration of the MP_PORT_TRANSPORT_TYPE
232 *******************************************************************************
234 #define MP_PORT_TRANSPORT_TYPE_UNKNOWN 0
235 #define MP_PORT_TRANSPORT_TYPE_MPNODE 1
236 #define MP_PORT_TRANSPORT_TYPE_FC 2
237 #define MP_PORT_TRANSPORT_TYPE_SPI 3
238 #define MP_PORT_TRANSPORT_TYPE_ISCSI 4
239 #define MP_PORT_TRANSPORT_TYPE_IFB 5
241 typedef MP_UINT32 MP_PORT_TRANSPORT_TYPE;
244 *******************************************************************************
246 * Declaration of the MP_ACCESS_STATE_TYPE constants
248 *******************************************************************************
250 #define MP_ACCESS_STATE_ACTIVE_OPTIMIZED (0x0)
251 #define MP_ACCESS_STATE_ACTIVE_NONOPTIMIZED (0x1)
252 #define MP_ACCESS_STATE_STANDBY (0x2)
253 #define MP_ACCESS_STATE_UNAVAILABLE (0x3)
254 #define MP_ACCESS_STATE_TRANSITIONING (0xF)
255 #define MP_ACCESS_STATE_ACTIVE (0x10)
257 typedef MP_UINT32 MP_ACCESS_STATE_TYPE;
260 *******************************************************************************
262 * Declaration of the MP_LOAD_BALANCE_TYPE constants
264 *******************************************************************************
266 #define MP_LOAD_BALANCE_TYPE_UNKNOWN (1<<0)
267 #define MP_LOAD_BALANCE_TYPE_ROUNDROBIN (1<<1)
268 #define MP_LOAD_BALANCE_TYPE_LEASTBLOCKS (1<<2)
269 #define MP_LOAD_BALANCE_TYPE_LEASTIO (1<<3)
270 #define MP_LOAD_BALANCE_TYPE_DEVICE_PRODUCT (1<<4)
271 #define MP_LOAD_BALANCE_TYPE_LBA_REGION (1<<5)
272 #define MP_LOAD_BALANCE_TYPE_FAILOVER_ONLY (1<<6)
274 * Proprietary load balance type should start from 0x10000(1<<16) or greater.
275 * It is exposed through API MP_GetProprietaryLoadBalanceProperties if exists.
278 typedef MP_UINT32 MP_LOAD_BALANCE_TYPE;
280 typedef struct mpPluginInfo {
281 MP_WCHAR pluginName[MAX_NAME_SIZE];
282 MP_CHAR pluginPath[MAX_NAME_SIZE];
283 void* hdlPlugin;
284 MP_UINT32 ownerId;
285 } MPPLUGININFO_T;
289 *******************************************************************************
291 * Declaration of the MP_PROPRIETARY_PROPERTY
293 *******************************************************************************
295 typedef struct _MP_PROPRIETARY_PROPERTY
297 MP_WCHAR name[16];
298 MP_WCHAR value[48];
300 } MP_PROPRIETARY_PROPERTY;
303 *******************************************************************************
305 * Declaration of the MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES
307 *******************************************************************************
309 typedef struct _MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES
311 MP_LOAD_BALANCE_TYPE typeIndex;
312 MP_WCHAR name[256];
313 MP_WCHAR vendorName[256];
314 MP_UINT32 proprietaryPropertyCount;
315 MP_PROPRIETARY_PROPERTY proprietaryProperties[8];
317 } MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES;
320 *******************************************************************************
322 * Declaration of the MP_UINT32 MP_LOGICAL_UNIT_NAME_TYPE constants
324 *******************************************************************************
326 #define MP_LU_NAME_TYPE_UNKNOWN 0
327 #define MP_LU_NAME_TYPE_VPD83_TYPE1 1
328 #define MP_LU_NAME_TYPE_VPD83_TYPE2 2
329 #define MP_LU_NAME_TYPE_VPD83_TYPE3 3
330 #define MP_LU_NAME_TYPE_DEVICE_SPECIFIC 4
332 typedef MP_UINT32 MP_LOGICAL_UNIT_NAME_TYPE;
335 *******************************************************************************
337 * Declaration of the MP_UINT32 MP_AUTOFAILBACK_SUPPORT constants
339 *******************************************************************************
341 #define MP_AUTOFAILBACK_SUPPORT_NONE 0
342 #define MP_AUTOFAILBACK_SUPPORT_PLUGIN 1
343 #define MP_AUTOFAILBACK_SUPPORT_MPLU 2
344 #define MP_AUTOFAILBACK_SUPPORT_PLUGINANDMPLU 3
346 typedef MP_UINT32 MP_AUTOFAILBACK_SUPPORT;
349 *******************************************************************************
351 * Declaration of the MP_UINT32 MP_AUTOPROBING_SUPPORT constants
353 *******************************************************************************
355 #define MP_AUTOPROBING_SUPPORT_NONE 0
356 #define MP_AUTOPROBING_SUPPORT_PLUGIN 1
357 #define MP_AUTORPOBING_SUPPORT_MPLU 2
358 #define MP_AUTORPOBING_SUPPORT_PLUGINANDMPLU 3
360 typedef MP_UINT32 MP_AUTOPROBING_SUPPORT;
363 *******************************************************************************
365 * Declaration of the MP_OID structure
367 * This structure should be treated as opaque by clients of the API.
368 * Appropriate APIs should be used to extract information from the structure.
370 * Also ZERO_OID is defined for APIs that may handle multiple plugin OIDs.
372 *******************************************************************************
374 typedef struct _MP_OID
377 * The type of the object. When an object ID is supplied as a parameter
378 * to an API the library uses this value to insure that the supplied
379 * object ID's type is appropriate for the API.
381 MP_OBJECT_TYPE objectType;
384 * A value determined by the library which it uses to uniquely identify the
385 * owner of an object. The owner of an object is either the library itself
386 * or a plugin. When an object ID is supplied as a parameter to an API the
387 * library uses this value to determine if it should handle the call itself
388 * or direct the call to one or more plugins.
390 MP_UINT32 ownerId;
393 * A value determined by a plugin which a plugin uses, perhaps in
394 * combination with the object type, to uniquely identify one of its
395 * objects.
397 MP_UINT64 objectSequenceNumber;
399 } MP_OID;
401 #define ZERO_OID ((const MP_OID){MP_OBJECT_TYPE_UNKNOWN,0,0})
404 *******************************************************************************
406 * Declaration of the MP_OID_LIST structure
408 * This structure is used by a number of APIs to return lists of objects. Any
409 * instance of this structure returned by an API must be freed by a client
410 * using the MP_FreeOidList API. Although oids is declared to be an
411 * array of one
412 * @ref MP_OID structure it can in fact contain any number of
413 * @ref MP_OID structures. The oidCount indicates the number of @ref MP_OID
414 * structures in the oids array.
416 * @note The @a oids array is a variable length array, despite its declaration
417 * below it can be of any length.
419 *******************************************************************************
421 typedef struct _MP_OID_LIST
424 * The number of object IDs in the @a oids array.
426 MP_UINT32 oidCount;
429 * A variable length array of zero or more object IDs. There are
430 * 'oidCount' object IDs in this array.
432 MP_OID oids[1];
434 } MP_OID_LIST;
437 *******************************************************************************
439 * Declaration of the MP_LIBRARY_PROPERTIES structure
441 * This structure is returned by the MP_GetLibraryProperties() API.
443 *******************************************************************************
445 typedef struct _MP_LIBRARY_PROPERTIES
448 * The version of the Multipath Management API implemented by the library.
450 MP_UINT32 supportedMpVersion;
453 * A null terminated ASCII string containing the name of the vendor that
454 * created the binary version of the library.
456 MP_WCHAR vendor[256];
459 * A null terminated ASCII string containing the implementation version
460 * of the library from the vendor specified in the 'vendor' field.
462 MP_WCHAR implementationVersion[256];
465 * A null terminated ASCII string ideally containing the path and file
466 * name of the library that is being used by the currently executing
467 * process can be found. If the path cannot be determined then it is
468 * acceptable to fill this field with only the name (and extension if
469 * applicable) of the file of the library. If this cannot be determined
470 * then this field should be an empty string.
472 MP_CHAR fileName[256];
475 * The time and date that the library that is executing was built.
477 MP_WCHAR buildTime[256];
479 } MP_LIBRARY_PROPERTIES;
482 *******************************************************************************
484 * Declaration of the MP_PLUGIN_PROPERTIES structure
486 * This structure is returned by the MP_GetPluginProperties() API.
488 *******************************************************************************
490 typedef struct _MP_PLUGIN_PROPERTIES
493 * The version of the Multipath Management API implemented by a plugin.
495 MP_UINT32 supportedMpVersion;
498 * A null terminated Unicode string containing the name of the vendor that
499 * created the binary version of the plugin.
501 MP_WCHAR vendor[256];
504 * A null terminated Unicode string containing the implementation version
505 * of the plugin from the vendor specified in vendor.
507 MP_WCHAR implementationVersion[256];
510 * A null terminated ASCII string ideally containing the path and file
511 * name of the plugin that is filling in this structure.
513 MP_CHAR fileName[256];
516 * The time and date that the plugin that is executing was built.
518 MP_WCHAR buildTime[256];
521 * A null terminated Unicode string containing the name of the multipath
522 * driver vendor associated with this plugin.
524 MP_WCHAR driverVendor[256];
527 * A null terminated Unicode string ideally containing the path and file
528 * name of the plugin that is filling in this structure.
530 MP_CHAR driverName[256];
533 * A null terminated Unicode string containing the version number of
534 * the multipath driver.
536 MP_WCHAR driverVersion[256];
539 * A set of flags representing the load balance types
540 * (MP_LOAD_BALANCE_TYPES) supported by the plugin/driver as a plugin-wide
541 * property.
543 MP_UINT32 supportedLoadBalanceTypes;
546 * boolean indicating whether the implementation supports activating target
547 * port groups.
549 MP_BOOL canSetTPGAccess;
552 * A Boolean indicating whether the implementations supports overriding
553 * paths. Setting this to true indicates MP_SetOverridePath and
554 * MP_CancelOverridePath are supported.
556 MP_BOOL canOverridePaths;
559 * A boolean indicating whether the implementation exposes (or leaves
560 * exposed) device files for the individual paths encapsulated by the
561 * multipath device file. This is typically true for MP drivers that sit
562 * near the top of the driver stack..
564 MP_BOOL exposesPathDeviceFiles;
567 * A string representing the primary file names the driver uses for
568 * multipath logical units.
570 MP_CHAR deviceFileNamespace[256];
573 * A boolean indicating whether the driver limits multipath capabilities
574 * to certain device types. If true, then the driver only provides multipath
575 * support to devices exposed through MP_DEVICE_PRODUCT_PROPERTIES
576 * instances. If false, then the driver supports any device that provides
577 * standard SCSI logical unit identifiers.
579 MP_BOOL onlySupportsSpecifiedProducts;
582 * Describes the range of administer settable path weights supported by the
583 * driver. A driver with no path preference capabilities should set
584 * this property to zero. A driver with the ability to enable/disable
585 * paths should set this property to 1. Drivers with more weight settings
586 * can set the property appropriately.
588 MP_UINT32 maximumWeight;
591 * The autofailback support indicates whether the implementation supports
592 * auto-failback (to reenable paths that revert to a good state) at the
593 * plugin level, the multipath logical unit level, both levels or whether
594 * auto-failback is unsupported.
596 MP_AUTOFAILBACK_SUPPORT autoFailbackSupport;
599 * A Boolean indicating whether plugin-wide autofailback is currently
600 * enabled. This parameter is undefined if autoFailbackSupport is
601 * MP_AUTOFAILBACK_SUPPORT_NONE or MP_AUTOFAILBACK_SUPPORT_MPLU.
603 MP_BOOL pluginAutoFailbackEnabled;
606 * The maximum plugin-wide polling rate (in seconds) for auto-failback
607 * supported by the driver. A value of zero indicates the driver/plugin
608 * does not support polling. Undefined if autoFailbackSupport is
609 * MP_AUTOFAILBACK_SUPPORT_NONE or MP_AUTOFAILBACK_SUPPORT_MPLU. If the
610 * plugin/driver supports auto-failback without polling or does not provide
611 * a way to set the polling rate, then this must be set to zero (0).
612 * This value is set by the plugin and cannot be modified by users.
614 MP_UINT32 failbackPollingRateMax;
617 * The current plugin-wide auto-failback polling rate (in seconds).
618 * Undefined if autofailbackSupport is MP_AUTOFAILBACK_SUPPORT_NONE or
619 * MP_AUTOFAILBACK_SUPPORT_MPLU. Cannot be more that plooingRateMax.
621 MP_UINT32 currentFailbackPollingRate;
624 * An enumerated type indicating whether the implementation supports
625 * auto-probing at the plugin level, the multipath logical unit level, both
626 * levels or whether auto-probing is unsupported.
628 MP_AUTOPROBING_SUPPORT autoProbingSupport;
631 * A boolean indicating that plugin-wide auto-probing is enabled. This
632 * property is undefined if autoProbingSupport is
633 * MP_AUTOPROBING_SUPPORT_NONE or MP_AUTOPROBING_SUPPORT_MPLU.
635 MP_BOOL pluginAutoProbingEnabled;
638 * The maximum plugin-wide polling rate (in seconds) for auto-probing
639 * supported by the driver. Undefined if autoProbingSupport is
640 * MP_AUTOPROBING_SUPPORT_NONE or MP_AUTOPROBING_SUPPORT_MPLU. If the
641 * plugin/driver supports auto-probing without polling or does not provide a
642 * way to set the probing polling rate, then this must be set to zero (0).
643 * This value is set by the plugin and cannot be modified by users.
645 MP_UINT32 probingPollingRateMax;
648 * The current plugin-wide auto-probing polling rate (in seconds).
649 * Undefined if autoProbingSupport is MP_AUTOPROBING_SUPPORT_NONE or
650 * MP_AUTOPROBING_SUPPORT_MPLU. Cannot be more that probingPollingRateMax.
652 MP_UINT32 currentProbingPollingRate;
655 * The load balance type that will be used by the driver for devices
656 * (without a corresponding MP_DEVICE_PRODUCT_PROPERTIES instance) unless
657 * overridden by the administrator. Any logical unit with vendor, product,
658 * and revision properties matching a MP_DEVICE_PRODUCT_PROPERTIES instance
659 * will default to a device-specific load balance type.
661 MP_LOAD_BALANCE_TYPE defaultloadBalanceType;
664 * The count of proprietary properties (less that or equal to eight)
665 * supported.
667 MP_UINT32 proprietaryPropertyCount;
670 * A list of proprietary property name/value pairs.
672 MP_PROPRIETARY_PROPERTY proprietaryProperties[8];
674 } MP_PLUGIN_PROPERTIES;
677 *******************************************************************************
679 * Declaration of the MP_DEVICE_PRODUCT_PROPERTIES structure.
681 * This structure is returned by the MP_GetDeviceProductProperties() API.
683 *******************************************************************************
685 typedef struct _MP_DEVICE_PRODUCT_PROPERTIES
687 MP_CHAR vendor[8];
688 MP_CHAR product[16];
689 MP_CHAR revision[4];
690 MP_UINT32 supportedLoadBalanceTypes;
692 } MP_DEVICE_PRODUCT_PROPERTIES;
695 *******************************************************************************
697 * Declaration of the MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES structure.
699 * This structure is returned by the MP_GetMPLogicalUnitProperties() API.
701 *******************************************************************************
703 typedef struct _MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES
705 MP_CHAR vendor[8];
706 MP_CHAR product[16];
707 MP_CHAR revision[4];
708 MP_CHAR name[256];
709 MP_LOGICAL_UNIT_NAME_TYPE nameType;
710 MP_CHAR deviceFileName[256];
711 MP_BOOL asymmetric;
712 MP_OID overridePath;
713 MP_LOAD_BALANCE_TYPE currentLoadBalanceType;
714 MP_UINT32 logicalUnitGroupID;
715 MP_XBOOL autoFailbackEnabled;
716 MP_UINT32 failbackPollingRateMax;
717 MP_UINT32 currentFailbackPollingRate;
718 MP_XBOOL autoProbingEnabled;
719 MP_UINT32 probingPollingRateMax;
720 MP_UINT32 currentProbingPollingRate;
721 MP_UINT32 proprietaryPropertyCount;
722 MP_PROPRIETARY_PROPERTY proprietaryProperties[8];
724 } MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES;
727 *******************************************************************************
729 * Declaration of the MP_PATH_LOGICAL_UNIT_PROPERTIES structure.
731 * This structure is returned by the MP_GetPathLogicalUnitProperties() API.
733 *******************************************************************************
735 typedef struct _MP_PATH_LOGICAL_UNIT_PROPERTIES
737 MP_UINT32 weight;
738 MP_PATH_STATE pathState;
739 MP_BOOL disabled;
740 MP_OID initiatorPortOid;
741 MP_OID targetPortOid;
742 MP_OID logicalUnitOid;
743 MP_UINT64 logicalUnitNumber;
744 MP_CHAR deviceFileName[256];
745 MP_UINT32 busNumber;
746 MP_UINT32 portNumber;
748 } MP_PATH_LOGICAL_UNIT_PROPERTIES;
751 *******************************************************************************
753 * Declaration of the MP_INITIATOR_PORT_PROPERTIES structure.
755 * This structure is returned by the MP_GetInitiatorPortProperties() API.
757 *******************************************************************************
759 typedef struct _MP_INITIATOR_PORT_PROPERTIES
761 MP_CHAR portID[256];
762 MP_PORT_TRANSPORT_TYPE portType;
763 MP_CHAR osDeviceFile[256];
764 MP_WCHAR osFriendlyName[256];
766 } MP_INITIATOR_PORT_PROPERTIES;
769 *******************************************************************************
771 * Declaration of the MP_TARGET_PORT_PROPERTIES structure.
773 * This structure is returned by the MP_GetTargetPortProperties() API.
775 *******************************************************************************
777 typedef struct _MP_TARGET_PORT_PROPERTIES
779 MP_CHAR portID[256];
780 MP_UINT32 relativePortID;
782 } MP_TARGET_PORT_PROPERTIES;
785 *******************************************************************************
787 * Declaration of the MP_TARGET_PORT_GROUP_PROPERTIES structure.
789 * This structure is returned by the MP_GetTargetPortGroupProperties() API.
791 *******************************************************************************
793 typedef struct _MP_TARGET_PORT_GROUP_PROPERTIES
795 MP_ACCESS_STATE_TYPE accessState;
796 MP_BOOL explicitFailover;
797 MP_BOOL supportsLuAssignment;
798 MP_BOOL preferredLuPath;
799 MP_UINT32 tpgID;
801 } MP_TARGET_PORT_GROUP_PROPERTIES;
804 *******************************************************************************
806 * Declaration of the MP_TPG_STATE_PAIR structure.
808 * This structure is used as an argument for the MP_SetTPGAcess() API.
810 *******************************************************************************
812 typedef struct _MP_TPG_STATE_PAIR
814 MP_OID tpgOid;
815 MP_ACCESS_STATE_TYPE desiredState;
817 } MP_TPG_STATE_PAIR;
820 *******************************************************************************
822 * Declaration of call back function type for event support
824 *******************************************************************************
826 typedef void (* MP_OBJECT_PROPERTY_FN) (
827 MP_OID_LIST *pOidList, void *pCallerData
830 typedef void (* MP_OBJECT_VISIBILITY_FN) (
831 MP_BOOL becomingVisible, MP_OID_LIST *pOidList, void *pCallerData
834 void InitLibrary();
835 void ExitLibrary();
838 ******************************************************************************
840 * The APIs for property and object related discovery.
842 * - MP_GetLibraryProperties
843 * - MP_GetPluginOidList
844 * - MP_GetPluginProperties
845 * - MP_GetAssociatedPluginOid
846 * - MP_GetObjectType
847 * - MP_GetDeviceProductOidList
848 * - MP_GetDeviceProductProperties
849 * - MP_GetInitiatorPortOidList
850 * - MP_GetInitiatorPortProperties
851 * - MP_GetMultipathLus
852 * - MP_GetMPLogicalUnitProperties
853 * - MP_GetAssociatedPathOidList
854 * - MP_GetPathLogicalUnitProperties
855 * - MP_GetAssociatedTPGOidList
856 * - MP_GetTargetPortGroupProperties
857 * - MP_GetMPLuOidListFromTPG
858 * - MP_GetProprietaryLoadBalanceOidList
859 * - MP_GetProprietaryLoadBalanceProperties
860 * - MP_GetTargetPortOidList
861 * - MP_GetTargetPortProperties
863 ******************************************************************************
867 *******************************************************************************
869 * Gets the properties of the MP API library that is being used.
871 * @param pProps
872 * A pointer to an MP_LIBRARY_PROPERTIES structure allocated by
873 * the caller. On successful return this structure will contain the
874 * properties of the MP API library.
876 * @return An MP_STATUS indicating if the operation was successful or if
877 * an error occurred.
879 * @retval MP_STATUS_SUCCESS
880 * Returned if the library properties were successfully returned.
882 * @retval MP_STATUS_INVALID_PARAMETER
883 * Returned if ppList pointer passed as placeholder for holding the
884 * library properties is found to be invalid.
886 * @retval MP_STATUS_UNSUPPORTED
887 * Returned when the implementation does not support the API.
889 ******************************************************************************
891 MP_STATUS MP_GetLibraryProperties(
892 MP_LIBRARY_PROPERTIES *pProps
896 ******************************************************************************
898 * Gets a list of the object IDs of all currently loaded plugins.
900 * @param ppList
901 * A pointer to a pointer to an MP_OID_LIST. On successful
902 * return this will contain a pointer to an @ref MP_OID_LIST
903 * which contains the object IDs of all of the plugins currently
904 * loaded by the library.
906 * @return MP_STATUS indicating if the operation was successful or
907 * if an error occurred.
909 * @retval MP_STATUS_INVALID_OBJECT_TYPE
910 * Returned if oid does not specify any valid object type. This is
911 * most likely to happen if an uninitialized object ID is passed to
912 * the API.
914 * @retval MP_STATUS_INVALID_PARAMETER
915 * Returned if ppList is NULL or specifies a memory area to which data
916 * cannot be written. MP_STATUS_SUCCESS Returned when the operation is
917 * successful.
919 * @retval MP_STATUS_INSUFFICIENT_MEMORY
920 * Returned when memory allocation failure occurs*
922 * @retval MP_STATUS_SUCCESS
923 * Returned if the plugin ID list was successfully returned.
925 ******************************************************************************
927 MP_STATUS MP_GetPluginOidList(
928 MP_OID_LIST **ppList
932 *******************************************************************************
934 * Gets the properties of the specified vendor plugin.
936 * @param oid
937 * The ID of the plugin whose properties are being retrieved.
939 * @param pProps
940 * A pointer to an @ref MP_PLUGIN_PROPERTIES structure allocated by
941 * the caller. On successful return this will contain the properties
942 * of the plugin specified by pluginOid.
944 * @return An MP_STATUS indicating if the operation was successful or if an
945 * error occurred.
947 * @retval MP_STATUS_SUCCESS
948 * Returned if the plugin properties were successfully returned.
950 * @retval MP_STATUS_INVALID_OBJECT_TYPE
951 * Returned if oid does not specify any valid object type.
953 * @retval MP_STATUS_OBJECT_NOT_FOUND
954 * Returned if oid has an owner that is not currently known to
955 * the system.
957 * @retval MP_STATUS_INVALID_PARAMETER
958 * Returned if 'pProps' is NULL or specifies a memory area to
959 * which data cannot be written.
961 *******************************************************************************
963 MP_STATUS MP_GetPluginProperties(
964 MP_OID oid,
965 MP_PLUGIN_PROPERTIES *pProps
970 *******************************************************************************
972 * Gets the object ID for the plugin associated with the specified object ID.
974 * @param oid
975 * The object ID of an object that has been received from a previous
976 * library call.
978 * @param pPluginOid
979 * A pointer to an MP_OID structure allocated by the caller. On
980 * successful return this will contain the object ID of the plugin
981 * associated with the object specified by @a objectId.
983 * @return An MP_STATUS indicating if the operation was successful or if
984 * an error occurred.
986 * @retval MP_STATUS_SUCCESS
987 * Returned if the associated plugin ID was successfully returned.
989 * @retval MP_STATUS_OBJECT_NOT_FOUND
990 * Returned if oid does not specify a plugin that is currently known to
991 * the system.
993 * @retval MP_STATUS_INVALID_PARAMETER
994 * Returned if 'oid' specifies an object not owned by a plugin or
995 * if pPluginOid is NULL or specifies a memory area to which data
996 * cannot be written.
998 * @retval MP_STATUS_INVALID_OBJECT_TYPE
999 * Returned if 'oid' specifies an object with an invalid type.
1001 *******************************************************************************
1003 MP_STATUS MP_GetAssociatedPluginOid(
1004 MP_OID oid,
1005 MP_OID *pPluginOid
1010 *******************************************************************************
1012 * Gets the object type of an initialized object ID.
1014 * @param oid
1015 * The object ID of an object that has been received from a previous
1016 * library call.
1018 * @param pObjectType
1019 * A pointer to an MP_OBJECT_TYPE variable allocated by the caller.
1020 * On successful return this will contain the object type of oid.
1022 * @return An MP_STATUS indicating if the operation was successful or
1023 * if an error occurred.
1025 * @retval MP_STATUS_OBJECT_NOT_FOUND
1026 * Returned if oid has an owner that is not currently known to
1027 * the system.
1029 * @retval MP_STATUS_INVALID_PARAMETER
1030 * Returned if oid does not specify any valid object type.
1032 * @retval MP_STATUS_SUCCESS
1033 * Returned when the operation is successful.
1035 *******************************************************************************
1037 MP_STATUS MP_GetObjectType(
1038 MP_OID oid,
1039 MP_OBJECT_TYPE *pObjectType
1044 *******************************************************************************
1046 * Gets a list of the object IDs of all the device product properties
1047 * associated with this plugin.
1049 * @param oid
1050 * The object ID of plugin.
1052 * @param ppList
1053 * A pointer to a pointer to an MP_OID_LIST structure.
1054 * On a successful return, this will contain a pointer to
1055 * an MP_OID_LIST that contains the object IDs of all the device
1056 * product descriptors associated with the specified plugin.
1058 * @return An MP_STATUS indicating if the operation was successful or if
1059 * an error occurred.
1061 * @retval MP_STATUS_SUCCESS
1062 * Returned when the operation is successful.
1064 * @retval MP_STATUS_INVALID_PARAMETER
1065 * Returned if ppList pointer passed as placeholder for holding
1066 * the device product list is found to be invalid.
1068 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1069 * Returned if oid does not specify any valid object type.
1071 * @retval MP_STATUS_FAILED
1072 * Returned when the plugin for the specified oid is not found.
1074 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1075 * Returned when memory allocation failure occurs
1077 * @retval MP_STATUS_UNSUPPORTED
1078 * Returned when the API is not supported.
1080 *******************************************************************************
1082 MP_STATUS MP_GetDeviceProductOidList(
1083 MP_OID oid,
1084 MP_OID_LIST **ppList
1088 *******************************************************************************
1090 * Gets the device product properties of the specified plugin oid.
1092 * @param oid
1093 * The object ID of the plugin.
1095 * @param ppProps
1096 * A pointer to an MP_DEVICE_PRODUCT_PROPERTIES structure
1097 * allocated by the caller. On successful return it will contain
1098 * a pointer to an MP_DEVICE_PRODUCT_PROPERTIES structure allocated
1099 * by the library.
1101 * @return An MP_STATUS indicating if the operation was successful or if
1102 * an error occurred.
1104 * @retval MP_STATUS_SUCCESS
1105 * Returned when the operation is successful.
1107 * @retval MP_STATUS_INVALID_PARAMETER
1108 * Returned if ppProps pointer passed as placeholder for holding
1109 * the device product properties is found to be invalid.
1111 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1112 * Returned if oid does not specify any valid object type.
1114 * @retval MP_STATUS_FAILED
1115 * Returned when the plugin for the specified oid is not found.
1117 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1118 * Returned when memory allocation failure occurs
1120 * @retval MP_STATUS_UNSUPPORTED
1121 * Returned when the API is not supported.
1123 *******************************************************************************
1125 MP_STATUS MP_GetDeviceProductProperties(
1126 MP_OID oid,
1127 MP_DEVICE_PRODUCT_PROPERTIES *pProps
1131 *******************************************************************************
1133 * Gets a list of the object IDs of all the initiator ports associated
1134 * with this plugin.
1136 * @param oid
1137 * The object ID of plugin.
1139 * @param ppList
1140 * A pointer to a pointer to an MP_OID_LIST structure.
1141 * On a successful return, this will contain a pointer to
1142 * an MP_OID_LIST that contains the object IDs of all the initiator
1143 * ports associated with the specified plugin.
1145 * @return An MP_STATUS indicating if the operation was successful or if
1146 * an error occurred.
1148 * @retval MP_STATUS_SUCCESS
1149 * Returned when the operation is successful.
1151 * @retval MP_STATUS_INVALID_PARAMETER
1152 * Returned if ppList pointer passed as placeholder for holding
1153 * the initiator port list is found to be invalid.
1155 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1156 * Returned if oid does not specify any valid object type.
1158 * @retval MP_STATUS_FAILED
1159 * Returned when the plugin for the specified oid is not found.
1161 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1162 * Returned when memory allocation failure occurs
1164 * @retval MP_STATUS_UNSUPPORTED
1165 * Returned when the API is not supported.
1167 *******************************************************************************
1169 MP_STATUS MP_GetInitiatorPortOidList(
1170 MP_OID oid,
1171 MP_OID_LIST **ppList
1175 *******************************************************************************
1177 * Gets the properties of the specified initiator port.
1179 * @param oid
1180 * The object ID of the initiator port.
1182 * @param pProps
1183 * A pointer to an MP_INITIATOR_PORT_PROPERTIES structure
1184 * allocated by the caller. On successful return, this structure
1185 * will contain the properties of the port specified by oid.
1187 * @return An MP_STATUS indicating if the operation was successful or if
1188 * an error occurred.
1190 * @retval MP_STATUS_SUCCESS
1191 * Returned when the operation is successful.
1193 * @retval MP_STATUS_INVALID_PARAMETER
1194 * Returned if pProps is NULL or specifies a memory area to
1195 * which data cannot be written.
1197 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1198 * Returned if oid does not specify any valid object type.
1200 * @retval MP_STATUS_OBJECT_NOT_FOUND
1201 * Returned if oid has an owner that is not currently known to
1202 * the system.
1204 *******************************************************************************
1206 MP_STATUS MP_GetInitiatorPortProperties(
1207 MP_OID oid,
1208 MP_INITIATOR_PORT_PROPERTIES *pProps
1212 *******************************************************************************
1214 * Gets a list of multipath logical units associated to a plugin.
1216 * @param oid
1217 * The object ID of plugin.
1219 * @param ppList
1220 * A pointer to a pointer to an MP_OID_LIST structure.
1221 * On a successful return, this will contain a pointer to
1222 * an MP_OID_LIST that contains the object IDs of all the multipath
1223 * logical units associated with the specified plugin.
1225 * @return An MP_STATUS indicating if the operation was successful or if
1226 * an error occurred.
1228 * @retval MP_STATUS_SUCCESS
1229 * Returned when the operation is successful.
1231 * @retval MP_STATUS_INVALID_PARAMETER
1232 * Returned if ppList pointer passed as placeholder for holding
1233 * the multipath logical unit list is found to be invalid.
1235 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1236 * Returned if oid does not specify any valid object type.
1238 * @retval MP_STATUS_FAILED
1239 * Returned when the plugin for the specified oid is not found.
1241 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1242 * Returned when memory allocation failure occurs
1244 * @retval MP_STATUS_UNSUPPORTED
1245 * Returned when the API is not supported.
1247 *******************************************************************************
1249 MP_STATUS MP_GetMultipathLus(
1250 MP_OID oid,
1251 MP_OID_LIST **ppList
1255 *******************************************************************************
1257 * Gets the properties of the specified logical unit.
1259 * @param oid
1260 * The object ID of the multipath logical unit.
1262 * @param pProps
1263 * A pointer to an MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES structure
1264 * allocated by the caller. On successful return, this structure
1265 * will contain the properties of the port specified by oid.
1267 * @return An MP_STATUS indicating if the operation was successful or if
1268 * an error occurred.
1270 * @retval MP_STATUS_SUCCESS
1271 * Returned when the operation is successful.
1273 * @retval MP_STATUS_INVALID_PARAMETER
1274 * Returned if pProps is NULL or specifies a memory area to
1275 * which data cannot be written.
1277 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1278 * Returned if oid does not specify any valid object type.
1280 * @retval MP_STATUS_OBJECT_NOT_FOUND
1281 * Returned if oid has an owner that is not currently known to
1282 * the system.
1284 *******************************************************************************
1286 MP_STATUS MP_GetMPLogicalUnitProperties(
1287 MP_OID oid,
1288 MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES *pProps
1292 *******************************************************************************
1294 * Gets a list of the object IDs of all the path logical units associated
1295 * with the specified multipath logical unit, initiator port, or target port.
1297 * @param oid
1298 * The object ID of multipath logical unit, initiator port, or
1299 * target port.
1301 * @param ppList
1302 * A pointer to a pointer to an MP_OID_LIST structure.
1303 * On a successful return, this will contain a pointer to
1304 * an MP_OID_LIST that contains the object IDs of all the mp path
1305 * logical units associated with the specified OID.
1307 * @return An MP_STATUS indicating if the operation was successful or if
1308 * an error occurred.
1310 * @retval MP_STATUS_SUCCESS
1311 * Returned when the operation is successful.
1313 * @retval MP_STATUS_INVALID_PARAMETER
1314 * Returned if ppList pointer passed as placeholder for holding
1315 * the device product list is found to be invalid.
1317 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1318 * Returned if oid does not specify any valid object type.
1320 * @retval MP_STATUS_FAILED
1321 * Returned when the plugin for the specified oid is not found.
1323 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1324 * Returned when memory allocation failure occurs
1326 * @retval MP_STATUS_OBJECT_NOT_FOUND
1327 * Returned if oid has an owner that is not currently known to
1328 * the system.
1330 *******************************************************************************
1332 MP_STATUS MP_GetAssociatedPathOidList(
1333 MP_OID oid,
1334 MP_OID_LIST **ppList
1338 *******************************************************************************
1340 * Gets the properties of the specified path logical unit.
1342 * @param oid
1343 * The object ID of the path logical unit.
1345 * @param pProps
1346 * A pointer to an MP_PATH_LOGICAL_UNIT_PROPERTIES structure
1347 * allocated by the caller. On successful return, this structure
1348 * will contain the properties of the port specified by oid.
1350 * @return An MP_STATUS indicating if the operation was successful or if
1351 * an error occurred.
1353 * @retval MP_STATUS_SUCCESS
1354 * Returned when the operation is successful.
1356 * @retval MP_STATUS_INVALID_PARAMETER
1357 * Returned if pProps is NULL or specifies a memory area to
1358 * which data cannot be written.
1360 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1361 * Returned if oid does not specify any valid object type.
1363 * @retval MP_STATUS_OBJECT_NOT_FOUND
1364 * Returned if oid has an owner that is not currently known to
1365 * the system.
1367 *******************************************************************************
1369 MP_STATUS MP_GetPathLogicalUnitProperties(
1370 MP_OID oid,
1371 MP_PATH_LOGICAL_UNIT_PROPERTIES *pProps
1375 *******************************************************************************
1377 * Gets a list of the object IDs of all the target port group associated
1378 * with the specified multipath logical unit.
1380 * @param oid
1381 * The object ID of the multiple logical unit.
1383 * @param ppList
1384 * A pointer to a pointer to an MP_OID_LIST structure.
1385 * On a successful return, this will contain a pointer to
1386 * an MP_OID_LIST that contains the object IDs of all the target
1387 * port group associated with the specified multipath logical unit.
1389 * @return An MP_STATUS indicating if the operation was successful or if
1390 * an error occurred.
1392 * @retval MP_STATUS_SUCCESS
1393 * Returned when the operation is successful.
1395 * @retval MP_STATUS_INVALID_PARAMETER
1396 * Returned if ppList pointer passed as placeholder for holding
1397 * the target port group list is found to be invalid.
1399 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1400 * Returned if oid does not specify any valid object type.
1402 * @retval MP_STATUS_FAILED
1403 * Returned when the plugin for the specified oid is not found.
1405 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1406 * Returned when memory allocation failure occurs
1409 *******************************************************************************
1411 MP_STATUS MP_GetAssociatedTPGOidList(
1412 MP_OID oid,
1413 MP_OID_LIST **ppList
1417 *******************************************************************************
1419 * Gets the properties of the specified target port group.
1421 * @param oid
1422 * The object ID of the target port group.
1424 * @param pProps
1425 * A pointer to an MP_TARGET_PORT_GROUP_PROPERTIES structure
1426 * allocated by the caller. On successful return, this structure
1427 * will contain the properties of the port specified by oid.
1429 * @return An MP_STATUS indicating if the operation was successful or if
1430 * an error occurred.
1432 * @retval MP_STATUS_SUCCESS
1433 * Returned when the operation is successful.
1435 * @retval MP_STATUS_INVALID_PARAMETER
1436 * Returned if pProps is NULL or specifies a memory area to
1437 * which data cannot be written.
1439 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1440 * Returned if oid does not specify any valid object type.
1442 * @retval MP_STATUS_OBJECT_NOT_FOUND
1443 * Returned if oid has an owner that is not currently known to
1444 * the system.
1446 *******************************************************************************
1448 MP_STATUS MP_GetTargetPortGroupProperties(
1449 MP_OID oid,
1450 MP_TARGET_PORT_GROUP_PROPERTIES *pProps
1454 *******************************************************************************
1456 * Gets a list of multipath logical units associated with the specific target
1457 * port group.
1459 * @param oid
1460 * The object ID of the target port group.
1462 * @param ppList
1463 * A pointer to a pointer to an MP_OID_LIST structure.
1464 * On a successful return, this will contain a pointer to
1465 * an MP_OID_LIST that contains the object IDs of all the multipath
1466 * logical units associated with the specified target port group.
1468 * @return An MP_STATUS indicating if the operation was successful or if
1469 * an error occurred.
1471 * @retval MP_STATUS_SUCCESS
1472 * Returned when the operation is successful.
1474 * @retval MP_STATUS_INVALID_PARAMETER
1475 * Returned if ppList pointer passed as placeholder for holding
1476 * the multipath logical unit list is found to be invalid.
1478 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1479 * Returned if oid does not specify any valid object type.
1481 * @retval MP_STATUS_FAILED
1482 * Returned when the plugin for the specified oid is not found.
1484 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1485 * Returned when memory allocation failure occurs
1487 *******************************************************************************
1489 MP_STATUS MP_GetMPLuOidListFromTPG(
1490 MP_OID oid,
1491 MP_OID_LIST **ppList
1495 *******************************************************************************
1497 * Gets a list of the object IDs of all the proprietary load balance
1498 * algorithms associated with this plugin.
1500 * @param oid
1501 * The object ID of the plugin.
1503 * @param ppList
1504 * A pointer to a pointer to an MP_OID_LIST structure.
1505 * On a successful return, this will contain a pointer to
1506 * an MP_OID_LIST that contains the object IDs of all the proprietary
1507 * load balance algorithms associated with the specified plugin.
1509 * @return An MP_STATUS indicating if the operation was successful or if
1510 * an error occurred.
1512 * @retval MP_STATUS_SUCCESS
1513 * Returned when the operation is successful.
1515 * @retval MP_STATUS_INVALID_PARAMETER
1516 * Returned if ppList pointer passed as placeholder for holding
1517 * the proprietary load balance oid list is found to be invalid.
1519 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1520 * Returned if oid does not specify any valid object type.
1522 * @retval MP_STATUS_FAILED
1523 * Returned when the plugin for the specified oid is not found.
1525 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1526 * Returned when memory allocation failure occurs
1528 * @retval MP_STATUS_UNSUPPORTED
1529 * Returned when the API is not supported.
1531 *******************************************************************************
1533 MP_STATUS MP_GetProprietaryLoadBalanceOidList(
1534 MP_OID oid,
1535 MP_OID_LIST **ppList
1539 *******************************************************************************
1541 * Gets the properties of the specified load balance properties structure.
1543 * @param oid
1544 * The object ID of the proprietary load balance structure.
1546 * @param pProps
1547 * A pointer to an MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES structure
1548 * allocated by the caller. On successful return, this structure
1549 * will contain the properties of the port specified by oid.
1551 * @return An MP_STATUS indicating if the operation was successful or if
1552 * an error occurred.
1554 * @retval MP_STATUS_SUCCESS
1555 * Returned when the operation is successful.
1557 * @retval MP_STATUS_INVALID_PARAMETER
1558 * Returned if pProps is NULL or specifies a memory area to
1559 * which data cannot be written.
1561 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1562 * Returned if oid does not specify any valid object type.
1564 * @retval MP_STATUS_OBJECT_NOT_FOUND
1565 * Returned if oid has an owner that is not currently known to
1566 * the system.
1568 *******************************************************************************
1570 MP_STATUS MP_GetProprietaryLoadBalanceProperties(
1571 MP_OID oid,
1572 MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES *pProps
1576 *******************************************************************************
1578 * Gets a list of the object IDs of the target ports in the specified target
1579 * port group.
1581 * @param oid
1582 * The object ID of the target port group.
1584 * @param ppList
1585 * A pointer to a pointer to an MP_OID_LIST structure.
1586 * On a successful return, this will contain a pointer to
1587 * an MP_OID_LIST that contains the object IDs of all the target ports
1588 * associated with the specified target port group.
1590 * @return An MP_STATUS indicating if the operation was successful or if
1591 * an error occurred.
1593 * @retval MP_STATUS_SUCCESS
1594 * Returned when the operation is successful.
1596 * @retval MP_STATUS_INVALID_PARAMETER
1597 * Returned if ppList pointer passed as placeholder for holding
1598 * the multipath logical unit list is found to be invalid.
1600 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1601 * Returned if oid does not specify any valid object type.
1603 * @retval MP_STATUS_FAILED
1604 * Returned when the plugin for the specified oid is not found.
1606 * @retval MP_STATUS_INSUFFICIENT_MEMORY
1607 * Returned when memory allocation failure occurs
1609 *******************************************************************************
1611 MP_STATUS MP_GetTargetPortOidList(
1612 MP_OID oid,
1613 MP_OID_LIST **ppList
1617 *******************************************************************************
1619 * Gets the properties of the specified target port.
1621 * @param oid
1622 * The object ID of the target port.
1624 * @param pProps
1625 * A pointer to an MP_TARGET_PORT_PROPERTIES structure
1626 * allocated by the caller. On successful return, this structure
1627 * will contain the properties of the port specified by oid.
1629 * @return An MP_STATUS indicating if the operation was successful or if
1630 * an error occurred.
1632 * @retval MP_STATUS_SUCCESS
1633 * Returned when the operation is successful.
1635 * @retval MP_STATUS_INVALID_PARAMETER
1636 * Returned if pProps is NULL or specifies a memory area to
1637 * which data cannot be written.
1639 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1640 * Returned if oid does not specify any valid object type.
1642 * @retval MP_STATUS_OBJECT_NOT_FOUND
1643 * Returned if oid has an owner that is not currently known to
1644 * the system.
1646 *******************************************************************************
1648 MP_STATUS MP_GetTargetPortProperties(
1649 MP_OID oid,
1650 MP_TARGET_PORT_PROPERTIES *pProps
1654 ******************************************************************************
1656 * The APIs for path management.
1658 * - MP_AssignLogicalUnitToTPG
1659 * - MP_SetOverridePath
1660 * - MP_CancelOverridePath
1661 * - MP_EnableAutoFailback
1662 * - MP_DisableAutoFailback
1663 * - MP_EnableAutoProbing
1664 * - MP_DisableAutoProbing
1665 * - MP_EnablePath
1666 * - MP_DisablePath
1667 * - MP_SetLogicalUnitLoadBalanceType
1668 * - MP_SetPluginLoadBalanceType
1669 * - MP_SetPathWeight
1670 * - MP_SetFailbackPollingRates
1671 * - MP_SetProbingPollingRates
1672 * - MP_SetProprietaryProperties
1673 * - MP_SetTPGAccess
1675 ******************************************************************************
1679 *******************************************************************************
1681 * Assign a multipath logical unit to a target port group.
1683 * @param tpgOid
1684 * An MP_TARGET_PORT_GROUP oid. The target port group currently in
1685 * active access state that the administrator would like the LU
1686 * assigned to.
1688 * @param luOid
1689 * An MP_MULTIPATH_LOGICAL_UNIT oid.
1691 * @return An MP_STATUS indicating if the operation was successful or if
1692 * an error occurred.
1694 * @retval MP_STATUS_SUCCESS
1695 * Returned when the operation is successful.
1697 * @retval MP_STATUS_INVALID_PARAMETER
1698 * Returned when luOid is not associated with tpgOid.
1700 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1701 * Returned if oid does not specify any valid object type.
1703 * @retval MP_STATUS_OBJECT_NOT_FOUND
1704 * Returned if oid has an owner that is not currently known to
1705 * the system.
1707 *******************************************************************************
1709 MP_STATUS MP_AssignLogicalUnitToTPG(
1710 MP_OID tpgOid,
1711 MP_OID luOid
1715 *******************************************************************************
1717 * Manually override the path for a logical unit. The path exclusively used to
1718 * access the logical unit until cleared.
1720 * @param logicalUnitOid
1721 * The object ID of the multipath logical unit.
1723 * @param pathOid
1724 * The object ID of the path logical unit.
1726 * @return An MP_STATUS indicating if the operation was successful or if
1727 * an error occurred.
1729 * @retval MP_STATUS_SUCCESS
1730 * Returned when the operation is successful.
1732 * @retval MP_STATUS_INVALID_PARAMETER
1733 * Returned if the oid of the object is not valid
1735 * @retval MP_STATUS_UNSUPPORTED
1736 * Returned when the implementation does not support the API
1738 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1739 * Returned if oid does not specify any valid object type.
1741 * @retval MP_STATUS_PATH_NONOPERATIONAL
1742 * Returned when the driver cannot communicate through selected path.
1744 *******************************************************************************
1746 MP_STATUS MP_SetOverridePath(
1747 MP_OID logicalUnitOid,
1748 MP_OID pathOid
1752 *******************************************************************************
1754 * Cancel a path override and re-enable load balancing.
1756 * @param luOid
1757 * An MP_MULTIPATH_LOGICAL_UNIT oid.
1759 * @return An MP_STATUS indicating if the operation was successful or if
1760 * an error occurred.
1762 * @retval MP_STATUS_SUCCESS
1763 * Returned when the operation is successful.
1765 * @retval MP_STATUS_INVALID_PARAMETER
1766 * Returned if MP_MULTIPATH_LOGICAL_UNIT with the luOid is not found.
1768 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1769 * Returned if oid does not specify any valid object type.
1771 * @retval MP_STATUS_OBJECT_NOT_FOUND
1772 * Returned if oid has an owner that is not currently known to
1773 * the system.
1775 *******************************************************************************
1777 MP_STATUS MP_CancelOverridePath(
1778 MP_OID logicalUnitOid
1782 *******************************************************************************
1784 * Enables Auto-failback.
1786 * @param oid
1787 * The oid of the plugin or the multipath logical unit.
1789 * @return An MP_STATUS indicating if the operation was successful or if
1790 * an error occurred.
1792 * @retval MP_STATUS_SUCCESS
1793 * Returned when the operation is successful.
1795 * @retval MP_STATUS_INVALID_PARAMETER
1796 * Returned if oid is NULL or specifies a memory area that is not
1797 * a valid plugin oid.
1799 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1800 * Returned if oid does not specify any valid object type.
1802 *******************************************************************************
1804 MP_STATUS MP_EnableAutoFailback(
1805 MP_OID oid
1809 *******************************************************************************
1811 * Disables Auto-failback.
1813 * @param oid
1814 * The oid of the plugin or the multipath logical unit..
1816 * @return An MP_STATUS indicating if the operation was successful or if
1817 * an error occurred.
1819 * @retval MP_STATUS_SUCCESS
1820 * Returned when the operation is successful.
1822 * @retval MP_STATUS_INVALID_PARAMETER
1823 * Returned if oid is NULL or specifies a memory area that is not
1824 * a valid plugin oid.
1826 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1827 * Returned if oid does not specify any valid object type.
1829 *******************************************************************************
1831 MP_STATUS MP_DisableAutoFailback(
1832 MP_OID oid
1836 *******************************************************************************
1838 * Enables Auto-probing.
1840 * @param oid
1841 * The oid of the plugin or the multipath logical unit.
1843 * @return An MP_STATUS indicating if the operation was successful or if
1844 * an error occurred.
1846 * @retval MP_STATUS_SUCCESS
1847 * Returned when the operation is successful.
1849 * @retval MP_STATUS_INVALID_PARAMETER
1850 * Returned if oid is NULL or specifies a memory area that is not
1851 * a valid plugin oid.
1853 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1854 * Returned if oid does not specify any valid object type.
1856 *******************************************************************************
1858 MP_STATUS MP_EnableAutoProbing(
1859 MP_OID oid
1863 *******************************************************************************
1865 * Disables Auto-probing.
1867 * @param oid
1868 * The oid of the plugin or the multipath logical unit.
1870 * @return An MP_STATUS indicating if the operation was successful or if
1871 * an error occurred.
1873 * @retval MP_STATUS_SUCCESS
1874 * Returned when the operation is successful.
1876 * @retval MP_STATUS_INVALID_PARAMETER
1877 * Returned if oid is NULL or specifies a memory area that is not
1878 * a valid plugin oid.
1880 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1881 * Returned if oid does not specify any valid object type.
1883 *******************************************************************************
1885 MP_STATUS MP_DisableAutoProbing(
1886 MP_OID oid
1890 *******************************************************************************
1892 * Enables a path. This API may cause failover in a logical unit with
1893 * asymmetric access.
1895 * @param oid
1896 * The oid of the path.
1898 * @return An MP_STATUS indicating if the operation was successful or if
1899 * an error occurred.
1901 * @retval MP_STATUS_SUCCESS
1902 * Returned when the operation is successful.
1904 * @retval MP_STATUS_INVALID_PARAMETER
1905 * Returned if oid is NULL or specifies a memory area that is not
1906 * a valid path oid.
1908 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1909 * Returned if oid does not specify any valid object type.
1911 *******************************************************************************
1913 MP_STATUS MP_EnablePath(
1914 MP_OID oid
1918 *******************************************************************************
1920 * Disables a path. This API may cause failover in a logical unit with
1921 * asymmetric access. This API may cause a logical unit to become unavailable.
1923 * @param oid
1924 * The oid of the path.
1926 * @return An MP_STATUS indicating if the operation was successful or if
1927 * an error occurred.
1929 * @retval MP_STATUS_SUCCESS
1930 * Returned when the operation is successful.
1932 * @retval MP_STATUS_INVALID_PARAMETER
1933 * Returned if oid is NULL or specifies a memory area that is not
1934 * a valid path oid.
1936 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1937 * Returned if oid does not specify any valid object type.
1939 * @retval MP_STATUS_UNSUPPORTED
1940 * Returned when the API is not supported.
1942 * @retval MP_STATUS_TRY_AGAIN
1943 * Returned when path cannot be disabled at this time.
1945 * @retval MP_STATUS_NOT_PERMITTED
1946 * Returned when disabling thsi path would cause the login unit to
1947 * become unavailable.
1949 *******************************************************************************
1951 MP_STATUS MP_DisablePath(
1952 MP_OID oid
1956 *******************************************************************************
1958 * Set the multipath logical unit s load balancing policy.
1960 * @param logicalUnitoid
1961 * The object ID of the multipath logical unit.
1963 * @param loadBanlance
1964 * The desired load balance policy for the specified logical unit.
1966 * @return An MP_STATUS indicating if the operation was successful or if
1967 * an error occurred.
1969 * @retval MP_STATUS_SUCCESS
1970 * Returned when the operation is successful.
1972 * @retval MP_STATUS_INVALID_PARAMETER
1973 * Returned if no MP_MULTIPATH_LOGICAL_UNIT associated with
1974 * @ref ligicalUnitrOid is found or invalid MP_LOAD_BALANCE_TYPE is
1975 * specified.
1977 * @retval MP_STATUS_FAILED
1978 * Returned when the specified loadBalance type cannot be handled
1979 * by the plugin.
1981 * @retval MP_STATUS_INVALID_OBJECT_TYPE
1982 * Returned if oid does not specify any valid object type.
1984 *******************************************************************************
1986 MP_STATUS MP_SetLogicalUnitLoadBalanceType(
1987 MP_OID logicalUnitOid,
1988 MP_LOAD_BALANCE_TYPE loadBalance
1992 *******************************************************************************
1994 * Set the weight to be assigned to a particular path.
1996 * @param pathOid
1997 * The object ID of the path logical unit.
1999 * @param weight
2000 * weight that will be assigned to the path logical unit.
2002 * @return An MP_STATUS indicating if the operation was successful or if
2003 * an error occurred.
2005 * @retval MP_STATUS_SUCCESS
2006 * Returned when the operation is successful.
2008 * @retval MP_STATUS_OBJECT_NOT_FOUND
2009 * Returned when the MP Path specified by the PathOid could not be
2010 * found.
2012 * @retval MP_STATUS_UNSUPPORTED
2013 * Returned when the implementation does not support the API
2015 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2016 * Returned if oid does not specify any valid object type.
2018 * @retval MP_STATUS_FAILED
2019 * Returned when the operation failed.
2021 * @retval MP_STATUS_INVALID_WEIGHT
2022 * Returned when the weight parameter is greater than the plugin's
2023 * maxWeight property.
2025 *******************************************************************************
2027 MP_STATUS MP_SetPathWeight(
2028 MP_OID pathOid,
2029 MP_UINT32 weight
2033 *******************************************************************************
2035 * Set the default load balance policy for the plugin.
2037 * @param oid
2038 * The object ID of the plugin
2040 * @param loadBalance
2041 * The desired default load balance policy for the specified plugin.
2043 * @return An MP_STATUS indicating if the operation was successful or if
2044 * an error occurred.
2046 * @retval MP_STATUS_SUCCESS
2047 * Returned when the operation is successful.
2049 * @retval MP_STATUS_OBJECT_NOT_FOUND
2050 * Returned when the the plugin specified by @ref oid could not be
2051 * found.
2053 * @retval MP_STATUS_INVALID_PARAMETER
2054 * Returned if the oid of the object is not valid.
2056 * @retval MP_STATUS_UNSUPPORTED
2057 * Returned when the implementation does not support the API
2059 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2060 * Returned if oid does not specify any valid object type.
2062 * @retval MP_STATUS_FAILED
2063 * Returned when the specified loadBalance type cannot be handled
2064 * by the plugin.
2066 *******************************************************************************
2068 MP_STATUS MP_SetPluginLoadBalanceType(
2069 MP_OID oid,
2070 MP_LOAD_BALANCE_TYPE loadBalance
2074 *******************************************************************************
2076 * Set the failback polling rates. Setting both rates to zero disables polling.
2078 * @param pluginOid
2079 * The object ID of either the plugin or a multipath logical unit.
2081 * @param pollingRate
2082 * The value to be set in MP_PLUGIN_PROPERTIES current pollingRate or
2083 * MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES pollingRate.
2085 * @return An MP_STATUS indicating if the operation was successful or if
2086 * an error occurred.
2088 * @retval MP_STATUS_SUCCESS
2089 * Returned when the operation is successful.
2091 * @retval MP_STATUS_OBJECT_NOT_FOUND
2092 * Returned when the the plugin specified by @ref oid could not be
2093 * found.
2095 * @retval MP_STATUS_INVALID_PARAMETER
2096 * Returned if one of the polling values is outside the range
2097 * supported by the driver.
2099 * @retval MP_STATUS_UNSUPPORTED
2100 * Returned when the implementation does not support the API
2102 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2103 * Returned if oid does not specify any valid object type.
2105 *******************************************************************************
2107 MP_STATUS MP_SetFailbackPollingRate(
2108 MP_OID oid,
2109 MP_UINT32 pollingRate
2113 *******************************************************************************
2115 * Set the probing polling rates. Setting both rates to zero disables polling.
2117 * @param pluginOid
2118 * The object ID of either the plugin or a multipath logical unit.
2120 * @param pollingRate
2121 * The value to be set in MP_PLUGIN_PROPERTIES current pollingRate or
2122 * MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES pollingRate.
2124 * @return An MP_STATUS indicating if the operation was successful or if
2125 * an error occurred.
2127 * @retval MP_STATUS_SUCCESS
2128 * Returned when the operation is successful.
2130 * @retval MP_STATUS_OBJECT_NOT_FOUND
2131 * Returned when the the plugin specified by @ref oid could not be
2132 * found.
2134 * @retval MP_STATUS_INVALID_PARAMETER
2135 * Returned if one of the polling values is outside the range
2136 * supported by the driver.
2138 * @retval MP_STATUS_UNSUPPORTED
2139 * Returned when the implementation does not support the API
2141 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2142 * Returned if oid does not specify any valid object type.
2144 *******************************************************************************
2146 MP_STATUS MP_SetProbingPollingRate(
2147 MP_OID oid,
2148 MP_UINT32 pollingRate
2152 *******************************************************************************
2154 * Set proprietary properties in supported object instances.
2156 * @param pluginOid
2157 * The object ID of MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES,
2158 * MP_PLUGIN_PROPERTIES or MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES.
2160 * @param count
2161 * The number of valid items in pPropertyList.
2163 * @param pPropertyList
2164 * A pointer to an array of property name/value pairs. This array must
2165 * contain the same number of elements as count.
2167 * @return An MP_STATUS indicating if the operation was successful or if
2168 * an error occurred.
2170 * @retval MP_STATUS_SUCCESS
2171 * Returned when the operation is successful.
2173 * @retval MP_STATUS_OBJECT_NOT_FOUND
2174 * Returned when the the plugin specified by @ref oid could not be
2175 * found.
2177 * @retval MP_STATUS_INVALID_PARAMETER
2178 * Returned if one of the polling values is outside the range
2179 * supported by the driver.
2181 * @retval MP_STATUS_UNSUPPORTED
2182 * Returned when the implementation does not support the API
2184 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2185 * Returned if oid does not specify any valid object type.
2187 *******************************************************************************
2189 MP_STATUS MP_SetProprietaryProperties(
2190 MP_OID oid,
2191 MP_UINT32 count,
2192 MP_PROPRIETARY_PROPERTY *pPropertyList
2196 *******************************************************************************
2198 * Set the access state for a list of target port groups. This allows
2199 * a client to force a failover or failback to a desired set of target port
2200 * groups.
2202 * @param luOid
2203 * The object ID of the logical unit where the command is sent.
2205 * @param count
2206 * The number of valid items in the pTpgStateList.
2208 * @param pTpgStateList
2209 * A pointer to an array of TPG/access-state values. This array must
2210 * contain the same number of elements as @ref count.
2212 * @return An MP_STATUS indicating if the operation was successful or if
2213 * an error occurred.
2215 * @retval MP_STATUS_SUCCESS
2216 * Returned when the operation is successful.
2218 * @retval MP_STATUS_OBJECT_NOT_FOUND
2219 * Returned when the MP_MULTIPATH_LOGICAL_UNIT associated with @ref
2220 * oid could not be found.
2222 * @retval MP_STATUS_INVALID_PARAMETER
2223 * Returned if pTpgStateList is null or if one of the TPGs referenced
2224 * in the list is not associated with the specified MP logical unit.
2226 * @retval MP_STATUS_UNSUPPORTED
2227 * Returned when the implementation does not support the API
2229 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2230 * Returned if oid does not specify any valid object type.
2232 * @retval MP_STATUS_ACCESS_STATE_INVALID
2233 * Returned if the target device returns a status indicating the caller
2234 * is attempting to establish an illegal combination of access states.
2236 * @retval MP_STATUS_FAILED
2237 * Returned if the underlying interface failed the commend for some
2238 * reason other than MP_STATUS_ACCESS_STATE_INVALID
2240 *******************************************************************************
2242 MP_STATUS MP_SetTPGAccess(
2243 MP_OID luOid,
2244 MP_UINT32 count,
2245 MP_TPG_STATE_PAIR *pTpgStateList
2249 ******************************************************************************
2251 * The APIs that are associated with event support.
2253 * - MP_RegisterForObjectPropertyChanges
2254 * - MP_DeregisterForObjectPropertyChanges
2255 * - MP_RegisterForObjectVisibilityChanges
2256 * - MP_DeregisterForObjectVisibilityChanges
2258 ******************************************************************************
2262 *******************************************************************************
2264 * Registers a client function that is to be called
2265 * whenever the property of an an object changes.
2267 * @param pClientFn,
2268 * A pointer to an MP_OBJECT_PROPERTY_FN function defined by the
2269 * client. On successful return this function will be called to
2270 * inform the client of objects that have had one or more properties
2271 * change.
2273 * @param objectType
2274 * The type of object the client wishes to deregister for
2275 * property change callbacks. If null, then all objects types are
2276 * deregistered.
2278 * @param pCallerData
2279 * A pointer that is passed to the callback routine with each event.
2280 * This may be used by the caller to correlate the event to source of
2281 * the registration.
2283 * @param pluginOid
2284 * A plugin oid that the client wishes to deregister for property change.
2286 * @return An MP_STATUS indicating if the operation was successful or if
2287 * an error occurred.
2289 * @retval MP_STATUS_SUCCESS
2290 * Returned when the operation is successful.
2292 * @retval MP_STATUS_INVALID_PARAMETER
2293 * Returned if pClientFn is NULL or specifies a memory area
2294 * that is not executable.
2296 * @retval MP_STATUS_FN_REPLACED
2297 * Returned when an existing client function is replaced with the one
2298 * specified in pClientFn.
2300 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2301 * Returned if objectType does not specify any valid object type.
2303 *******************************************************************************
2305 MP_STATUS MP_RegisterForObjectPropertyChanges(
2306 MP_OBJECT_PROPERTY_FN pClientFn,
2307 MP_OBJECT_TYPE objectType,
2308 void *pCallerData,
2309 MP_OID pluginOid
2313 *******************************************************************************
2315 * Deregisters a previously registered client function that is to be invoked
2316 * whenever an object's property changes.
2318 * @param pClientFn,
2319 * A pointer to an MP_OBJECT_PROPERTY_FN function defined by the
2320 * client that was previously registered using
2321 * the MP_RegisterForObjectPropertyChanges API. On successful return
2322 * this function will no longer be called to inform the client of
2323 * object property changes.
2325 * @param objectType
2326 * The type of object the client wishes to deregister for
2327 * property change callbacks. If null, then all objects types are
2328 * deregistered.
2330 * @param pluginOid
2331 * A plugin oid that the client wishes to deregister for property change.
2333 * @return An MP_STATUS indicating if the operation was successful or if
2334 * an error occurred.
2336 * @retval MP_STATUS_SUCCESS
2337 * Returned when the operation is successful.
2339 * @retval MP_STATUS_INVALID_PARAMETER
2340 * Returned if pClientFn is NULL or specifies a memory area
2341 * that is not executable.
2343 * @retval MP_STATUS_UNKNOWN_FN
2344 * Returned if pClientFn is not the same as the previously registered
2345 * function.
2347 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2348 * Returned if objectType does not specify any valid object type.
2350 * @retval MP_STATUS_FAILED
2351 * Returned if pClientFn deregistration is not possible at this time.
2353 *******************************************************************************
2355 MP_STATUS MP_DeregisterForObjectPropertyChanges(
2356 MP_OBJECT_PROPERTY_FN pClientFn,
2357 MP_OBJECT_TYPE objectType,
2358 MP_OID pluginOid
2362 *******************************************************************************
2364 * Registers a client function that is to be called
2365 * whenever a high level object appears or disappears.
2367 * @param pClientFn,
2368 * A pointer to an MP_OBJECT_VISIBILITY_FN function defined by the
2369 * client. On successful return this function will be called to
2370 * inform the client of objects whose visibility has changed.
2372 * @param objectType
2373 * The type of object the client wishes to deregister for
2374 * property change callbacks. If null, then all objects types are
2375 * deregistered.
2377 * @param pCallerData
2378 * A pointer that is passed to the callback routine with each event.
2379 * This may be used by the caller to correlate the event to source of
2380 * the registration.
2382 * @param pluginOid
2383 * A plugin oid that the client wishes to deregister for property change.
2385 * @return An MP_STATUS indicating if the operation was successful or if
2386 * an error occurred.
2388 * @retval MP_STATUS_SUCCESS
2389 * Returned when the operation is successful.
2391 * @retval MP_STATUS_INVALID_PARAMETER
2392 * Returned if pClientFn is NULL or specifies a memory area
2393 * that is not executable.
2395 * @retval MP_STATUS_FN_REPLACED
2396 * Returned when an existing client function is replaced with the one
2397 * specified in pClientFn.
2399 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2400 * Returned if objectType does not specify any valid object type.
2402 *******************************************************************************
2404 MP_STATUS MP_RegisterForObjectVisibilityChanges(
2405 MP_OBJECT_VISIBILITY_FN pClientFn,
2406 MP_OBJECT_TYPE objectType,
2407 void *pCallerData,
2408 MP_OID pluginOid
2412 *******************************************************************************
2414 * Deregisters a previously registered client function that is to be invoked
2415 * whenever a high level object appears or disappears.
2417 * @param pClientFn,
2418 * A pointer to an MP_OBJECT_VISIBILITY_FN function defined by the
2419 * client that was previously registered using
2420 * the MP_RegisterForObjectVisibilityChanges API. On successful return
2421 * this function will no longer be called to inform the client of
2422 * object property changes.
2424 * @param objectType
2425 * The type of object the client wishes to deregister for visibility
2426 * change callbacks. If null, then all objects types are
2427 * deregistered.
2429 * @param pluginOid
2430 * A plugin oid that the client wishes to deregister for property change.
2432 * @return An MP_STATUS indicating if the operation was successful or if
2433 * an error occurred.
2435 * @retval MP_STATUS_SUCCESS
2436 * Returned when the operation is successful.
2438 * @retval MP_STATUS_INVALID_PARAMETER
2439 * Returned if pClientFn is NULL or specifies a memory area
2440 * that is not executable.
2442 * @retval MP_STATUS_UNKNOWN_FN
2443 * Returned if pClientFn is not the same as the previously registered
2444 * function.
2446 * @retval MP_STATUS_INVALID_OBJECT_TYPE
2447 * Returned if objectType does not specify any valid object type.
2449 * @retval MP_STATUS_FAILED
2450 * Returned if pClientFn deregistration is not possible at this time.
2452 *******************************************************************************
2454 MP_STATUS MP_DeregisterForObjectVisibilityChanges(
2455 MP_OBJECT_VISIBILITY_FN pClientFn,
2456 MP_OBJECT_TYPE objectType,
2457 MP_OID pluginOid
2461 ******************************************************************************
2463 * The utility APIs
2465 * - MP_CompareOIDs
2466 * - MP_FreeOidList
2467 * - MP_RegisterPlugin
2468 * - MP_DeregisterPlugin
2470 ******************************************************************************
2474 *******************************************************************************
2476 * Compare two Oids for equality to see whether they refer to the same object.
2478 * @param oid1
2479 * Oid to compare.
2481 * @param oid2
2482 * Oid to compare.
2484 * @return An MP_STATUS indicating if the operation was successful or if
2485 * an error occurred.
2487 * @retval MP_STATUS_SUCCESS
2488 * Returned when the two Oids do refer to the same object.
2490 * @retval MP_STATUS_FAILED
2491 * Returned if the Oids don't compare.
2493 *******************************************************************************
2495 MP_STATUS MP_CompareOIDs(
2496 MP_OID oid1,
2497 MP_OID oid2
2501 *******************************************************************************
2503 * Frees memory returned by an MP API.
2505 * @param pMemory
2506 * A pointer to the memory returned by an MP API. On successful
2507 return, the allocated memory is freed.
2509 * @return An MP_STATUS indicating if the operation was successful or if
2510 * an error occurred.
2512 * @retval MP_STATUS_SUCCESS
2513 * Returned when pPluginId is deregistered successfully.
2515 * @retval MP_STATUS_INVALID_PARAMETER
2516 * Returned if pMemory is NULL or specifies a memory area to which
2517 * data cannot be written.
2519 *******************************************************************************
2521 MP_STATUS MP_FreeOidList(
2522 MP_OID_LIST *pOidList
2526 *******************************************************************************
2528 * Registers a plugin with common library. The implementation of this routine
2529 * is based on configuration file /etc/mpapi.conf that contains a list of
2530 * plugin libraries.
2532 * @param pPluginId
2533 * A pointer to the key name shall be the reversed domain name of
2534 * the vendor followed by followed by the vendor specific name for
2535 * the plugin that uniquely identifies the plugin.
2537 * @param pFileName
2538 * The full path to the plugin library.
2540 * @return An MP_STATUS indicating if the operation was successful or if
2541 * an error occurred.
2543 * @retval MP_STATUS_SUCCESS
2544 * Returned when pPluginId is deregistered successfully.
2546 * @retval MP_STATUS_INVALID_PARAMETER
2547 * Returned if pPluginId is NULL or specifies a memory area that
2548 * is not executable.
2550 * @retval MP_STATUS_FAILED
2551 * Returned if pClientFn deregistration is not possible at this time.
2553 *******************************************************************************
2555 MP_STATUS MP_RegisterPlugin(
2556 MP_WCHAR *pPluginId,
2557 MP_CHAR *pFileName
2561 *******************************************************************************
2563 * Deregisters a plugin from the common library.
2565 * @param pPluginId
2566 * A pointer to a Plugin ID previously registered using
2567 * the MP_RegisterPlugin API..
2569 * @return An MP_STATUS indicating if the operation was successful or if
2570 * an error occurred.
2572 * @retval MP_STATUS_SUCCESS
2573 * Returned when pPluginId is deregistered successfully.
2575 * @retval MP_STATUS_INVALID_PARAMETER
2576 * Returned if pPluginId is NULL or specifies a memory area that
2577 * is not executable.
2579 * @retval MP_STATUS_FAILED
2580 * Returned if pClientFn deregistration is not possible at this time.
2582 *******************************************************************************
2584 MP_STATUS MP_DeregisterPlugin(
2585 MP_WCHAR *pPluginId
2588 #endif
2590 #ifdef __cplusplus
2592 #endif