/*
 * dspbridge/mpu_api/inc/DSPManager.h
 *
 * DSP-BIOS Bridge driver support functions for TI OMAP processors.
 *
 * Copyright (C) 2007 Texas Instruments, Inc.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published
 * by the Free Software Foundation version 2.1 of the License.
 *
 * This program is distributed .as is. WITHOUT ANY WARRANTY of any kind,
 * whether express or implied; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 */


/*
 *  ======== DSPManager.h ========
 *  Description:
 *      This is the header for the DSP/BIOS Bridge manager module.
 *
 *  Public Functions:
 *      DspManager_Open
 *      DspManager_Close
 *      DSPManager_EnumNodeInfo
 *      DSPManager_EnumProcessorInfo
 *      DSPManager_WaitForEvents
 *      DSPManager_RegisterObject
 *      DSPManager_UnregisterObject
 *
 *! Revision History:
 *! ================
 *! 03-Dec-2003 map Replaced include of dbdcddefs.h with dbdefs.h
 *! 22-Nov-2002 gp  Replaced include of dbdcd.h w/ dbdcddefs.h (hiding DCD APIs)
 *!                 Formatting cleanup.
 *! 15-Oct-2002 kc  Removed legacy PERF definitions.
 *! 16-Aug-2002 map Added DSPManager_RegisterObject/UnregisterObject for
 *!                     registering Dynamic Libraries
 *! 13-Feb-2001 kc: DSP/BIOS Bridge name updates.
 *! 22-Nov-2000 kc: Added DSPManager_PerfGetStat to acquire PERF stats.
 *! 25-Sep-2000 rr: Updated to Version 0.9
 *! 14-Aug-2000 rr: Cleaned up.
 *! 20-Jul-2000 rr: Updated to Version 0.8.
 *! 27-Jun-2000 rr: Created from dbapi.h
 */

#ifndef DSPMANAGER_
#define DSPMANAGER_

#ifdef __cplusplus
extern "C" {
#endif

#include <dbdefs.h>

/*
 *  ======== DspManager_Open ========
 *  Purpose:
 *      Open handle to the DSP/BIOS Bridge driver
 *  Parameters:
 *      argc:               Reserved, set to zero
 *      argp:               Reserved, set to NULL
 *                          in the database will be returned.
 *  Returns:
 *      DSP_SOK:            Success.
 *      DSP_EFAIL:          Failed to open handle to the DSP/BIOS Bridge driver
 *  Details:
 */
	extern DBAPI DspManager_Open(UINT argc, PVOID argp);

/*
 *  ======== DspManager_Close ========
 *  Purpose:
 *      Close handle to the DSP/BIOS Bridge driver
 *  Parameters:
 *      argc:               Reserved, set to zero
 *      argp:               Reserved, set to NULL
 *                          in the database will be returned.
 *  Returns:
 *      DSP_SOK:            Success.
 *      DSP_EFAIL:          Failed to close handle to the DSP/BIOS Bridge driver
 *  Details:
 */
	extern DBAPI DspManager_Close(UINT argc, PVOID argp);

/*
 *  ======== DSPManager_EnumNodeInfo ========
 *  Purpose:
 *      Enumerate and get configuration information about nodes configured
 *      in the node database.
 *  Parameters:
 *      uNode:              The node index, counting up from 0.
 *      pNDBProps:          Ptr to the DSP_NDBPROPS structure for output.
 *      uNDBPropsSize:      Size of the DSP_NDBPROPS structure.
 *      puNumNodes:         Location where the number of nodes configured
 *                          in the database will be returned.
 *  Returns:
 *      DSP_SOK:            Success.
 *      DSP_EINVALIDARG:    Parameter uNode is out of range
 *      DSP_EPOINTER:       Parameter pNDBProps or puNumNodes is not valid
 *      DSP_EFAIL:          Unable to get the node information.
 *      DSP_ESIZE:          The size of the specified DSP_NDBPROPS structure
 *                          is too small to hold all node information,
 *                          (i.e., uNDBPropsSize is too small).
 *      DSP_ECHANGEDURINGENUM:  During Enumeration there has been a change in
 *                          the number of nodes configured or in the
 *                          the properties of the enumerated nodes.
 *  Details:
 */
	extern DBAPI DSPManager_EnumNodeInfo(UINT uNode,
					     OUT struct DSP_NDBPROPS * pNDBProps,
					     UINT uNDBPropsSize,
					     OUT UINT * puNumNodes);

/*
 *  ======== DSPManager_EnumProcessorInfo ========
 *  Purpose:
 *      Enumerate and get configuration information about available DSP
 *      processors.
 *  Parameters:
 *      uProcessor:         The processor index, counting up from 0.
 *      pProcessorInfo:     Ptr to the DSP_PROCESSORINFO structure .
 *      uProcessorInfoSize: Size of DSP_PROCESSORINFO structure.
 *      puNumProcs:         Location where the number of DSPs configured
 *                          in the database will be returned
 *  Returns:
 *      DSP_SOK:            Success.
 *      DSP_EINVALIDARG:    Parameter uProcessor is out of range
 *      DSP_EPOINTER:       Parameter pProcessorInfo or puNumProcs is not valid.
 *      DSP_EFAIL:          Unable to get the processor information.
 *      DSP_ESIZE:          The size of the specified DSP_PROCESSORINFO struct
 *                          is too small to hold all the processor information,
 *                          (i.e., uProcessorInfoSize is too small).
 *  Details:
 */
	extern DBAPI DSPManager_EnumProcessorInfo(UINT uProcessor,
						  OUT struct DSP_PROCESSORINFO *
						  pProcessorInfo,
						  UINT uProcessorInfoSize,
						  OUT UINT * puNumProcs);

/*
 *  ======== DSPManager_WaitForEvents ========
 *  Purpose:
 *      Block on any Bridge event(s)
 *  Parameters:
 *      aNotifications  : array of pointers to notification objects.
 *      uCount          : number of elements in above array
 *      puIndex         : index of signaled event object
 *      uTimeout        : timeout interval in milliseocnds
 *  Returns:
 *      DSP_SOK         : Success.
 *      DSP_ETIMEOUT    : Wait timed out. *puIndex is undetermined.
 *  Details:
 */
	extern DBAPI DSPManager_WaitForEvents(struct DSP_NOTIFICATION**
					      aNotifications, UINT uCount,
					      OUT UINT * puIndex,
					      UINT uTimeout);

/*
 *  ======== DSPManager_RegisterObject ========
 *  Purpose:
 *     Register object with DSP/BIOS Bridge Configuration database (DCD).
 *  Parameters:
 *     pUuid:          Pointer to UUID structure.
 *     objType:        Library Type
 *     pszPathName:    Path to library
 *  Returns:
 *     DSP_SOK:        Success.
 *     DSP_EFAIL:      Unable to register object with the DCD.
 *  Details:
 */
	extern DBAPI DSPManager_RegisterObject(struct DSP_UUID * pUuid,
					       DSP_DCDOBJTYPE objType,
					       CHAR * pszPathName);

/*
 *  ======== DSPManager_UnregisterObject ========
 *  Purpose:
 *     Unregister object with DSP/BIOS Bridge Configuration Database (DCD).
 *  Parameters:
 *     pUuid:          Pointer to UUID structure.
 *     objType:        Library Type
 *  Returns:
 *     DSP_SOK:        Success.
 *     DSP_EFAIL:      Unable to unregister object from the DCD.
 *  Details:
 */
	extern DBAPI DSPManager_UnregisterObject(struct DSP_UUID * pUuid,
						 DSP_DCDOBJTYPE objType);

#ifndef RES_CLEANUP_DISABLE
/*
 *  ======== DSPManager_GetProcResourceInfo========
 *  Purpose:
 *     Get GPP process resource information.
 *  Parameters:
 *     pBuf:           Pointer to information buffer.
 *  Returns:
 *     DSP_SOK:        Success.
 *     DSP_EFAIL:      Unable to unregister object from the DCD.
 *  Details:
 */
	extern DBAPI DSPManager_GetProcResourceInfo(UINT *pBuf, UINT *pSize);
#endif


#ifdef __cplusplus
}
#endif
#endif				/* DSPManager_ */