/* * Copyright 2001-2008 Texas Instruments - http://www.ti.com/ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * ======== dbdcd.h ======== * DSP-BIOS Bridge driver support functions for TI OMAP processors. * Description: * Defines the DSP/BIOS Bridge Configuration Database (DCD) API. * *! Revision History *! ================ *! 03-Dec-2003 map Changed DCD_OBJTYPE to DSP_DCDOBJTYPE *! 24-Feb-2003 kc Updated DCD_AutoUnregister and DCD_GetObjects to simplify *! DCD implementation. *! 05-Aug-2002 jeh Added DCD_GetObjects(). *! 11-Jul-2002 jeh Added DCD_GetDepLibs(), DCD_GetNumDepLibs(). *! 22-Apr-2002 jeh Added DCD_GetLibraryName(). *! 03-Apr-2001 sg Changed error names to have DCD_E* format. *! 13-Feb-2001 kc Name changed from dcdbs.h to dbdcd.h. *! 12-Dec-2000 kc Added DCD_AutoUnregister. *! 09-Nov-2000 kc Updated usage of DCD_EnumerateObject. *! 30-Oct-2000 kc Added DCD_AutoRegister. Updated error DCD error codes. *! 29-Sep-2000 kc Incorporated code review comments. See *! /src/reviews/dcd_review.txt. *! 26-Jul-2000 kc Created. *! */ #ifndef DBDCD_ #define DBDCD_ #ifdef __cplusplus extern "C" { #endif #include <dbdcddef.h> #include <nldrdefs.h> /* * ======== DCD_AutoRegister ======== * Purpose: * This function automatically registers DCD objects specified in a * special COFF section called ".dcd_register" * Parameters: * hDcdMgr: A DCD manager handle. * pszCoffPath: Pointer to name of COFF file containing DCD * objects to be registered. * Returns: * DSP_SOK: Success. * DSP_EDCDNOAUTOREGISTER: Unable to find auto-registration section. * DSP_EDCDREADSECT: Unable to read object code section. * DSP_EDCDLOADBASE: Unable to load code base. * DSP_EHANDLE: 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 DSP_STATUS DCD_AutoRegister(IN struct DCD_MANAGER* hDcdMgr, IN CHAR * pszCoffPath); /* * ======== DCD_AutoUnregister ======== * Purpose: * This function automatically unregisters DCD objects specified in a * special COFF section called ".dcd_register" * Parameters: * hDcdMgr: A DCD manager handle. * pszCoffPath: Pointer to name of COFF file containing * DCD objects to be unregistered. * Returns: * DSP_SOK: Success. * DSP_EDCDNOAUTOREGISTER: Unable to find auto-registration section. * DSP_EDCDREADSECT: Unable to read object code section. * DSP_EDCDLOADBASE: Unable to load code base. * DSP_EHANDLE: 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 DSP_STATUS DCD_AutoUnregister(IN struct DCD_MANAGER* hDcdMgr, IN CHAR * pszCoffPath); /* * ======== DCD_CreateManager ======== * 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: * DSP_SOK: Success. * DSP_EMEMORY: Unable to allocate memory for DCD manager handle. * DSP_EFAIL: General failure. * Requires: * DCD initialized. * pszZlDllName is non-NULL. * phDcdMgr is non-NULL. * Ensures: * A DCD manager handle is created. */ extern DSP_STATUS DCD_CreateManager(IN CHAR * pszZlDllName, OUT struct DCD_MANAGER* * phDcdMgr); /* * ======== DCD_DestroyManager ======== * Purpose: * This function destroys a DCD module manager. * Parameters: * hDcdMgr: A DCD manager handle. * Returns: * DSP_SOK: Success. * DSP_EHANDLE: Invalid DCD manager handle. * Requires: * DCD initialized. * Ensures: */ extern DSP_STATUS DCD_DestroyManager(IN struct DCD_MANAGER* hDcdMgr); /* * ======== DCD_EnumerateObject ======== * Purpose: * This function enumerates currently visible DSP/BIOS Bridge objects * and returns the UUID and type of each enumerated object. * Parameters: * cIndex: The object enumeration index. * objType: Type of object to enumerate. * pUuid: Pointer to a DSP_UUID object. * Returns: * DSP_SOK: Success. * DSP_EFAIL: Unable to enumerate through the DCD database. * DSP_SENUMCOMPLETE: Enumeration completed. This is not an error code. * Requires: * DCD initialized. * pUuid is a valid pointer. * Ensures: * Details: * This function can be used in conjunction with DCD_GetObjectDef to * retrieve object properties. */ extern DSP_STATUS DCD_EnumerateObject(IN INT cIndex, IN DSP_DCDOBJTYPE objType, OUT struct DSP_UUID * pUuid); /* * ======== DCD_Exit ======== * Purpose: * This function cleans up the DCD module. * Parameters: * Returns: * Requires: * DCD initialized. * Ensures: */ extern VOID DCD_Exit(); /* * ======== DCD_GetDepLibs ======== * 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: * hDcdMgr: A DCD manager handle. * pUuid: Pointer to a DSP_UUID for a library. * numLibs: 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: * DSP_SOK: Success. * DSP_EMEMORY: Memory allocation failure. * DSP_EDCDREADSECT: Failure to read section containing library info. * DSP_EFAIL: General failure. * Requires: * DCD initialized. * Valid hDcdMgr. * pUuid != NULL * pDepLibUuids != NULL. * Ensures: */ extern DSP_STATUS DCD_GetDepLibs(IN struct DCD_MANAGER* hDcdMgr, IN struct DSP_UUID * pUuid, USHORT numLibs, OUT struct DSP_UUID * pDepLibUuids, OUT bool * pPersistentDepLibs, IN NLDR_PHASE phase); /* * ======== DCD_GetNumDepLibs ======== * Purpose: * Given the uuid of a library, determine its number of dependent * libraries. * Parameters: * hDcdMgr: A DCD manager handle. * pUuid: 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: * DSP_SOK: Success. * DSP_EMEMORY: Memory allocation failure. * DSP_EDCDREADSECT: Failure to read section containing library info. * DSP_EFAIL: General failure. * Requires: * DCD initialized. * Valid hDcdMgr. * pUuid != NULL * pNumLibs != NULL. * Ensures: */ extern DSP_STATUS DCD_GetNumDepLibs(IN struct DCD_MANAGER* hDcdMgr, IN struct DSP_UUID * pUuid, OUT USHORT * pNumLibs, OUT USHORT * pNumPersLibs, IN NLDR_PHASE phase); /* * ======== DCD_GetLibraryName ======== * Purpose: * This function returns the name of a (dynamic) library for a given * UUID. * Parameters: * hDcdMgr: A DCD manager handle. * pUuid: 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 * fPhaseSplit: Are phases in multiple libraries * Returns: * DSP_SOK: Success. * DSP_EFAIL: General failure. * Requires: * DCD initialized. * Valid hDcdMgr. * pstrLibName != NULL. * pUuid != NULL * pdwSize != NULL. * Ensures: */ extern DSP_STATUS DCD_GetLibraryName(IN struct DCD_MANAGER* hDcdMgr, IN struct DSP_UUID * pUuid, IN OUT PSTR pstrLibName, IN OUT DWORD * pdwSize, IN NLDR_PHASE phase, OUT bool * fPhaseSplit); /* * ======== DCD_GetObjectDef ======== * Purpose: * This function returns the properties/attributes of a DSP/BIOS Bridge * object. * Parameters: * hDcdMgr: A DCD manager handle. * pUuid: Pointer to a DSP_UUID that represents a unique * DSP/BIOS Bridge object. * objType: 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: * DSP_SOK: Success. * DSP_EDCDPARSESECT: Unable to parse content of object code section. * DSP_EDCDREADSECT: Unable to read object code section. * DSP_EDCDGETSECT: Unable to access object code section. * DSP_EDCDLOADBASE: Unable to load code base. * DSP_EFAIL: General failure. * DSP_EHANDLE: Invalid DCD_HMANAGER handle. * Requires: * DCD initialized. * pObjUuid is non-NULL. * pObjDef is non-NULL. * Ensures: */ extern DSP_STATUS DCD_GetObjectDef(IN struct DCD_MANAGER* hDcdMgr, IN struct DSP_UUID * pObjUuid, IN DSP_DCDOBJTYPE objType, OUT struct DCD_GENERICOBJ *pObjDef); /* * ======== DCD_GetObjects ======== * 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: * hDcdMgr: 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: * DSP_SOK: Success. * DSP_EDCDNOAUTOREGISTER: Unable to find .dcd_register section. * DSP_EDCDREADSECT: Unable to read object code section. * DSP_EDCDLOADBASE: Unable to load code base. * DSP_EHANDLE: 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 DSP_STATUS DCD_GetObjects(IN struct DCD_MANAGER* hDcdMgr, IN CHAR * pszCoffPath, DCD_REGISTERFXN registerFxn, PVOID handle); /* * ======== DCD_Init ======== * Purpose: * This function initializes DCD. * Parameters: * Returns: * FALSE: Initialization failed. * TRUE: Initialization succeeded. * Requires: * Ensures: * DCD initialized. */ extern bool DCD_Init(); /* * ======== DCD_RegisterObject ======== * Purpose: * This function registers a DSP/BIOS Bridge object in the DCD database. * Parameters: * pUuid: Pointer to a DSP_UUID that identifies a DSP/BIOS * Bridge object. * objType: Type of object. * pszPathName: Path to the object's COFF file. * Returns: * DSP_SOK: Success. * DSP_EFAIL: Failed to register object. * Requires: * DCD initialized. * pUuid and szPathName are non-NULL values. * objType is a valid type value. * Ensures: */ extern DSP_STATUS DCD_RegisterObject(IN struct DSP_UUID * pUuid, IN DSP_DCDOBJTYPE objType, IN CHAR * pszPathName); /* * ======== DCD_UnregisterObject ======== * Purpose: * This function de-registers a valid DSP/BIOS Bridge object from the DCD * database. * Parameters: * pUuid: Pointer to a DSP_UUID that identifies a DSP/BIOS Bridge * object. * objType: Type of object. * Returns: * DSP_SOK: Success. * DSP_EFAIL: Unable to de-register the specified object. * Requires: * DCD initialized. * pUuid is a non-NULL value. * objType is a valid type value. * Ensures: */ extern DSP_STATUS DCD_UnregisterObject(IN struct DSP_UUID * pUuid, IN DSP_DCDOBJTYPE objType); #ifdef __cplusplus } #endif #endif /* _DBDCD_H */