blob: 6658b743bc35fbb3121ad81df6fbdb049948c05e [file] [log] [blame]
/*
* dbdcd.h
*
* DSP-BIOS Bridge driver support functions for TI OMAP processors.
*
* Defines the DSP/BIOS Bridge Configuration Database (DCD) API.
*
* Copyright (C) 2008 Texas Instruments, Inc.
*
* This package is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef DBDCD_
#define DBDCD_
#include <dspbridge/dbdcddef.h>
#include <dspbridge/host_os.h>
#include <dspbridge/nldrdefs.h>
/*
* ======== dcd_auto_register ========
* Purpose:
* This function automatically registers DCD objects specified in a
* special COFF section called ".dcd_register"
* Parameters:
* hdcd_mgr: A DCD manager handle.
* pszCoffPath: Pointer to name of COFF file containing DCD
* objects to be registered.
* Returns:
* 0: Success.
* -EACCES: Unable to find auto-registration/read/load section.
* -EFAULT: Invalid DCD_HMANAGER handle..
* Requires:
* DCD initialized.
* Ensures:
* Note:
* Due to the DCD database construction, it is essential for a DCD-enabled
* COFF file to contain the right COFF sections, especially
* ".dcd_register", which is used for auto registration.
*/
extern int dcd_auto_register(IN struct dcd_manager *hdcd_mgr,
IN char *pszCoffPath);
/*
* ======== dcd_auto_unregister ========
* Purpose:
* This function automatically unregisters DCD objects specified in a
* special COFF section called ".dcd_register"
* Parameters:
* hdcd_mgr: A DCD manager handle.
* pszCoffPath: Pointer to name of COFF file containing
* DCD objects to be unregistered.
* Returns:
* 0: Success.
* -EACCES: Unable to find auto-registration/read/load section.
* -EFAULT: Invalid DCD_HMANAGER handle..
* Requires:
* DCD initialized.
* Ensures:
* Note:
* Due to the DCD database construction, it is essential for a DCD-enabled
* COFF file to contain the right COFF sections, especially
* ".dcd_register", which is used for auto unregistration.
*/
extern int dcd_auto_unregister(IN struct dcd_manager *hdcd_mgr,
IN char *pszCoffPath);
/*
* ======== dcd_create_manager ========
* Purpose:
* This function creates a DCD module manager.
* Parameters:
* pszZlDllName: Pointer to a DLL name string.
* phDcdMgr: A pointer to a DCD manager handle.
* Returns:
* 0: Success.
* -ENOMEM: Unable to allocate memory for DCD manager handle.
* -EPERM: General failure.
* Requires:
* DCD initialized.
* pszZlDllName is non-NULL.
* phDcdMgr is non-NULL.
* Ensures:
* A DCD manager handle is created.
*/
extern int dcd_create_manager(IN char *pszZlDllName,
OUT struct dcd_manager **phDcdMgr);
/*
* ======== dcd_destroy_manager ========
* Purpose:
* This function destroys a DCD module manager.
* Parameters:
* hdcd_mgr: A DCD manager handle.
* Returns:
* 0: Success.
* -EFAULT: Invalid DCD manager handle.
* Requires:
* DCD initialized.
* Ensures:
*/
extern int dcd_destroy_manager(IN struct dcd_manager *hdcd_mgr);
/*
* ======== dcd_enumerate_object ========
* Purpose:
* This function enumerates currently visible DSP/BIOS Bridge objects
* and returns the UUID and type of each enumerated object.
* Parameters:
* index: The object enumeration index.
* obj_type: Type of object to enumerate.
* uuid_obj: Pointer to a dsp_uuid object.
* Returns:
* 0: Success.
* -EPERM: Unable to enumerate through the DCD database.
* ENODATA: Enumeration completed. This is not an error code.
* Requires:
* DCD initialized.
* uuid_obj is a valid pointer.
* Ensures:
* Details:
* This function can be used in conjunction with dcd_get_object_def to
* retrieve object properties.
*/
extern int dcd_enumerate_object(IN s32 index,
IN enum dsp_dcdobjtype obj_type,
OUT struct dsp_uuid *uuid_obj);
/*
* ======== dcd_exit ========
* Purpose:
* This function cleans up the DCD module.
* Parameters:
* Returns:
* Requires:
* DCD initialized.
* Ensures:
*/
extern void dcd_exit(void);
/*
* ======== dcd_get_dep_libs ========
* Purpose:
* Given the uuid of a library and size of array of uuids, this function
* fills the array with the uuids of all dependent libraries of the input
* library.
* Parameters:
* hdcd_mgr: A DCD manager handle.
* uuid_obj: Pointer to a dsp_uuid for a library.
* num_libs: Size of uuid array (number of library uuids).
* pDepLibUuids: Array of dependent library uuids to be filled in.
* pPersistentDepLibs: Array indicating if corresponding lib is persistent.
* phase: phase to obtain correct input library
* Returns:
* 0: Success.
* -ENOMEM: Memory allocation failure.
* -EACCES: Failure to read section containing library info.
* -EPERM: General failure.
* Requires:
* DCD initialized.
* Valid hdcd_mgr.
* uuid_obj != NULL
* pDepLibUuids != NULL.
* Ensures:
*/
extern int dcd_get_dep_libs(IN struct dcd_manager *hdcd_mgr,
IN struct dsp_uuid *uuid_obj,
u16 num_libs,
OUT struct dsp_uuid *pDepLibUuids,
OUT bool *pPersistentDepLibs,
IN enum nldr_phase phase);
/*
* ======== dcd_get_num_dep_libs ========
* Purpose:
* Given the uuid of a library, determine its number of dependent
* libraries.
* Parameters:
* hdcd_mgr: A DCD manager handle.
* uuid_obj: Pointer to a dsp_uuid for a library.
* pNumLibs: Size of uuid array (number of library uuids).
* pNumPersLibs: number of persistent dependent library.
* phase: Phase to obtain correct input library
* Returns:
* 0: Success.
* -ENOMEM: Memory allocation failure.
* -EACCES: Failure to read section containing library info.
* -EPERM: General failure.
* Requires:
* DCD initialized.
* Valid hdcd_mgr.
* uuid_obj != NULL
* pNumLibs != NULL.
* Ensures:
*/
extern int dcd_get_num_dep_libs(IN struct dcd_manager *hdcd_mgr,
IN struct dsp_uuid *uuid_obj,
OUT u16 *pNumLibs,
OUT u16 *pNumPersLibs,
IN enum nldr_phase phase);
/*
* ======== dcd_get_library_name ========
* Purpose:
* This function returns the name of a (dynamic) library for a given
* UUID.
* Parameters:
* hdcd_mgr: A DCD manager handle.
* uuid_obj: Pointer to a dsp_uuid that represents a unique DSP/BIOS
* Bridge object.
* pstrLibName: Buffer to hold library name.
* pdwSize: Contains buffer size. Set to string size on output.
* phase: Which phase to load
* phase_split: Are phases in multiple libraries
* Returns:
* 0: Success.
* -EPERM: General failure.
* Requires:
* DCD initialized.
* Valid hdcd_mgr.
* pstrLibName != NULL.
* uuid_obj != NULL
* pdwSize != NULL.
* Ensures:
*/
extern int dcd_get_library_name(IN struct dcd_manager *hdcd_mgr,
IN struct dsp_uuid *uuid_obj,
IN OUT char *pstrLibName,
IN OUT u32 *pdwSize,
IN enum nldr_phase phase,
OUT bool *phase_split);
/*
* ======== dcd_get_object_def ========
* Purpose:
* This function returns the properties/attributes of a DSP/BIOS Bridge
* object.
* Parameters:
* hdcd_mgr: A DCD manager handle.
* uuid_obj: Pointer to a dsp_uuid that represents a unique
* DSP/BIOS Bridge object.
* obj_type: The type of DSP/BIOS Bridge object to be
* referenced (node, processor, etc).
* pObjDef: Pointer to an object definition structure. A
* union of various possible DCD object types.
* Returns:
* 0: Success.
* -EACCES: Unable to access/read/parse/load content of object code
* section.
* -EPERM: General failure.
* -EFAULT: Invalid DCD_HMANAGER handle.
* Requires:
* DCD initialized.
* pObjUuid is non-NULL.
* pObjDef is non-NULL.
* Ensures:
*/
extern int dcd_get_object_def(IN struct dcd_manager *hdcd_mgr,
IN struct dsp_uuid *pObjUuid,
IN enum dsp_dcdobjtype obj_type,
OUT struct dcd_genericobj *pObjDef);
/*
* ======== dcd_get_objects ========
* Purpose:
* This function finds all DCD objects specified in a special
* COFF section called ".dcd_register", and for each object,
* call a "register" function. The "register" function may perform
* various actions, such as 1) register nodes in the node database, 2)
* unregister nodes from the node database, and 3) add overlay nodes.
* Parameters:
* hdcd_mgr: A DCD manager handle.
* pszCoffPath: Pointer to name of COFF file containing DCD
* objects.
* registerFxn: Callback fxn to be applied on each located
* DCD object.
* handle: Handle to pass to callback.
* Returns:
* 0: Success.
* -EACCES: Unable to access/read/parse/load content of object code
* section.
* -EFAULT: Invalid DCD_HMANAGER handle..
* Requires:
* DCD initialized.
* Ensures:
* Note:
* Due to the DCD database construction, it is essential for a DCD-enabled
* COFF file to contain the right COFF sections, especially
* ".dcd_register", which is used for auto registration.
*/
extern int dcd_get_objects(IN struct dcd_manager *hdcd_mgr,
IN char *pszCoffPath,
dcd_registerfxn registerFxn, void *handle);
/*
* ======== dcd_init ========
* Purpose:
* This function initializes DCD.
* Parameters:
* Returns:
* FALSE: Initialization failed.
* TRUE: Initialization succeeded.
* Requires:
* Ensures:
* DCD initialized.
*/
extern bool dcd_init(void);
/*
* ======== dcd_register_object ========
* Purpose:
* This function registers a DSP/BIOS Bridge object in the DCD database.
* Parameters:
* uuid_obj: Pointer to a dsp_uuid that identifies a DSP/BIOS
* Bridge object.
* obj_type: Type of object.
* psz_path_name: Path to the object's COFF file.
* Returns:
* 0: Success.
* -EPERM: Failed to register object.
* Requires:
* DCD initialized.
* uuid_obj and szPathName are non-NULL values.
* obj_type is a valid type value.
* Ensures:
*/
extern int dcd_register_object(IN struct dsp_uuid *uuid_obj,
IN enum dsp_dcdobjtype obj_type,
IN char *psz_path_name);
/*
* ======== dcd_unregister_object ========
* Purpose:
* This function de-registers a valid DSP/BIOS Bridge object from the DCD
* database.
* Parameters:
* uuid_obj: Pointer to a dsp_uuid that identifies a DSP/BIOS Bridge
* object.
* obj_type: Type of object.
* Returns:
* 0: Success.
* -EPERM: Unable to de-register the specified object.
* Requires:
* DCD initialized.
* uuid_obj is a non-NULL value.
* obj_type is a valid type value.
* Ensures:
*/
extern int dcd_unregister_object(IN struct dsp_uuid *uuid_obj,
IN enum dsp_dcdobjtype obj_type);
#endif /* _DBDCD_H */