OpenSolaris_b135/lib/mpapi/libmpapi/common/mpapi-plugin.h

/******************************************************************************
 *
 * Description
 *  mpapi-plugin.h - interfaces for the MP API Version 1.0 plugin library.
 *  A compliant plugin library should implement interfaces with name without Fn
 *  suffix from function definitions below.
 *
 * License:
 *  The contents of this file are subject to the SNIA Public License
 *  Version 1.1 (the "License"); you may not use this file except in
 *  compliance with the License. You may obtain a copy of the License at
 *
 *  TBD
 *
 *  Software distributed under the License is distributed on an "AS IS"
 *  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 *  the License for the specific language governing rights and limitations
 *  under the License.
 *
 * The Original Code is iSCSI Management API and Multipath Management API
 * 	plugin header file
 *
 * The Initial Developer of the Original Code is:
 *	Benjamin F. Kuo Troika Networks, Inc. (benk@troikanetworks.com)
 *	David Dillard	VERITAS Software(david.dillard@veritas.com)
 *	Jeff Ding	Adaptec, Inc. (jding@corp.adaptec.com)
 *      Hyon Kim       	Sun Microsystems(hyon.kim@sun.com)
 *
 * Contributor(s):
 *	Paul von Behren	Sun Microsystems(paul.vonbehren@sun.com)
 *
 ******************************************************************************
 *
 *   Changes:
 *  1/15/2005 Implemented SNIA MP API specification 1.0
 *****************************************************************************/

#ifdef __cplusplus
extern "C" {
#endif


#ifndef MPPLUGIN_H
#define MPPLUGIN_H

/*
 * MP API common library calls InitaizeFn as part of dynamically loading
 * the plugins.  For this version of implementation the common library
 * passes the sequence number of the plugin oid through InitializeFn.  The
 * sequnece number will be used as the ownerId for the plugin generated OIDs.
 */
typedef MP_STATUS (* InitializeFn)  (
        MP_UINT32   pluginOwnerID
    );

/*
 * MP API common library calls TerminateFn as part of dynamically unloading
 * the plugins.
 */
typedef MP_STATUS (* TerminateFn) (void);

/**
 ******************************************************************************
 *
 * Function table for OID and properties discovery API
 *
 ******************************************************************************
 */

typedef MP_STATUS (* MP_GetPluginPropertiesPluginFn)(
        MP_PLUGIN_PROPERTIES *pProps
);

typedef MP_STATUS (* MP_GetDeviceProductOidListPluginFn)(
        MP_OID_LIST **ppList
);

typedef MP_STATUS (* MP_GetDeviceProductPropertiesFn)(
	MP_OID 				oid,
        MP_DEVICE_PRODUCT_PROPERTIES *pProps
);

typedef MP_STATUS (* MP_GetInitiatorPortOidListPluginFn)(
        MP_OID_LIST **ppList
);

typedef MP_STATUS (* MP_GetInitiatorPortPropertiesFn)(
        MP_OID                        oid,
        MP_INITIATOR_PORT_PROPERTIES *pProps
);

typedef MP_STATUS (* MP_GetMultipathLusPluginFn)(
        MP_OID_LIST **ppList
);

typedef MP_STATUS (* MP_GetMultipathLusDevProdFn)(
	MP_OID	oid,
        MP_OID_LIST **ppList
);

typedef MP_STATUS (* MP_GetMPLogicalUnitPropertiesFn)(
        MP_OID                                oid,
        MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES *pProps
);

typedef MP_STATUS (* MP_GetAssociatedPathOidListFn)(
        MP_OID        oid,
        MP_OID_LIST **ppList
);

typedef MP_STATUS (* MP_GetPathLogicalUnitPropertiesFn)(
        MP_OID                           oid,
        MP_PATH_LOGICAL_UNIT_PROPERTIES *pProps
);

typedef MP_STATUS (* MP_GetAssociatedTPGOidListFn)(
        MP_OID        oid,
        MP_OID_LIST **ppList
);

typedef MP_STATUS (* MP_GetTargetPortGroupPropertiesFn)(
        MP_OID                           oid,
        MP_TARGET_PORT_GROUP_PROPERTIES *pProps
);

typedef MP_STATUS (* MP_GetMPLuOidListFromTPGFn)(
        MP_OID        oid,
        MP_OID_LIST **ppList
);

typedef MP_STATUS (* MP_GetProprietaryLoadBalanceOidListPluginFn)(
        MP_OID_LIST **ppList
);

typedef MP_STATUS (* MP_GetProprietaryLoadBalancePropertiesFn)(
        MP_OID        oid,
	MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES *pProps
);

typedef MP_STATUS (* MP_GetTargetPortOidListFn)(
        MP_OID        oid,
        MP_OID_LIST **ppList
);

typedef MP_STATUS (* MP_GetTargetPortPropertiesFn)(
        MP_OID                     oid,
        MP_TARGET_PORT_PROPERTIES *pProps
);

/**
 ******************************************************************************
 *
 * Function table for path management API
 *
 ******************************************************************************
 */

typedef MP_STATUS (* MP_AssignLogicalUnitToTPGFn)(
        MP_OID tpgOid,
        MP_OID luOid
);

typedef MP_STATUS (* MP_SetOverridePathFn)(
    MP_OID logicalUnitOid,
    MP_OID pathOid
);

typedef MP_STATUS (* MP_CancelOverridePathFn)(
        MP_OID luOid
);

typedef MP_STATUS (* MP_EnableAutoFailbackPluginFn)(
);

typedef MP_STATUS (* MP_EnableAutoFailbackLuFn)(
    MP_OID oid
);

typedef MP_STATUS (* MP_EnableAutoProbingPluginFn)(
);

typedef MP_STATUS (* MP_EnableAutoProbingLuFn)(
    MP_OID oid
);

typedef MP_STATUS (* MP_DisableAutoFailbackPluginFn)(
);

typedef MP_STATUS (* MP_DisableAutoFailbackLuFn)(
    MP_OID oid
);

typedef MP_STATUS (* MP_DisableAutoProbingPluginFn)(
);

typedef MP_STATUS (* MP_DisableAutoProbingLuFn)(
    MP_OID oid
);

typedef MP_STATUS (* MP_EnablePathFn)(
    MP_OID oid
);

typedef MP_STATUS (* MP_DisablePathFn)(
    MP_OID oid
);

typedef MP_STATUS (* MP_SetLogicalUnitLoadBalanceTypeFn)(
    MP_OID               logicalUnitoid,
    MP_LOAD_BALANCE_TYPE loadBalance
);

typedef MP_STATUS (* MP_SetPathWeightFn)(
    MP_OID    pathOid,
    MP_UINT32 weight
);

typedef MP_STATUS (* MP_SetPluginLoadBalanceTypePluginFn)(
    MP_LOAD_BALANCE_TYPE loadBalance
);

typedef MP_STATUS (* MP_SetFailbackPollingRatePluginFn)(
    MP_UINT32 pollingRate
);

typedef MP_STATUS (* MP_SetFailbackPollingRateLuFn)(
    MP_OID	oid,
    MP_UINT32	pollingRate
);

typedef MP_STATUS (* MP_SetProbingPollingRatePluginFn)(
    MP_UINT32 pollingRate
);

typedef MP_STATUS (* MP_SetProbingPollingRateLuFn)(
    MP_OID	oid,
    MP_UINT32	pollingRate
);

typedef MP_STATUS (* MP_SetProprietaryPropertiesFn)(
    MP_OID             oid,
    MP_UINT32          count,
    MP_PROPRIETARY_PROPERTY *pPropertyList
);

typedef MP_STATUS (* MP_SetTPGAccessFn)(
    MP_OID             luOid,
    MP_UINT32          count,
    MP_TPG_STATE_PAIR *pTpgStateList
);

/**
 ******************************************************************************
 *
 * Function table for event support API
 *
 ******************************************************************************
 */

typedef MP_STATUS (* MP_RegisterForObjectPropertyChangesPluginFn)(
    MP_OBJECT_PROPERTY_FN   pClientFn,
    MP_OBJECT_TYPE	    objectType,
    void		    *pCallerData
);

typedef MP_STATUS (* MP_DeregisterForObjectPropertyChangesPluginFn)(
    MP_OBJECT_PROPERTY_FN   pClientFn,
    MP_OBJECT_TYPE	    objectType
);

typedef MP_STATUS (* MP_RegisterForObjectVisibilityChangesPluginFn)(
    MP_OBJECT_VISIBILITY_FN pClientFn,
    MP_OBJECT_TYPE	    objectType,
    void		    *pCallerData
);

typedef MP_STATUS (* MP_DeregisterForObjectVisibilityChangesPluginFn)(
    MP_OBJECT_VISIBILITY_FN pClientFn,
    MP_OBJECT_TYPE          objectType
);

typedef MP_STATUS (* Sun_MP_SendScsiCmdFn)(
    MP_OID oid, struct uscsi_cmd *cmd
);

#endif

#ifdef __cplusplus
};
#endif