These files seem to be unused, deleting them. Signed-off-by: Omar Ramirez Luna <omar.ramirez@xxxxxx> --- arch/arm/plat-omap/include/dspbridge/dbl.h | 354 ------- arch/arm/plat-omap/include/dspbridge/dbof.h | 117 --- drivers/dsp/bridge/dynload/dlclasses_hdr.h | 41 - drivers/dsp/bridge/pmgr/dbl.c | 1385 --------------------------- 4 files changed, 0 insertions(+), 1897 deletions(-) delete mode 100644 arch/arm/plat-omap/include/dspbridge/dbl.h delete mode 100644 arch/arm/plat-omap/include/dspbridge/dbof.h delete mode 100644 drivers/dsp/bridge/dynload/dlclasses_hdr.h delete mode 100644 drivers/dsp/bridge/pmgr/dbl.c diff --git a/arch/arm/plat-omap/include/dspbridge/dbl.h b/arch/arm/plat-omap/include/dspbridge/dbl.h deleted file mode 100644 index 19847f9..0000000 --- a/arch/arm/plat-omap/include/dspbridge/dbl.h +++ /dev/null @@ -1,354 +0,0 @@ -/* - * dbl.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 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. - */ - - -/* - * ======== dbl.h ======== - * - *! Revision History - *! ================ - *! 19-Mar-2002 jeh Pass DBL_Symbol pointer to DBL_getAddr, DBL_getCAddr - *! to accomodate dynamic loader library. - *! 20-Nov-2001 jeh Removed DBL_loadArgs(). - *! 24-Sep-2001 jeh Code review changes. - *! 07-Sep-2001 jeh Added DBL_LoadSect(), DBL_UnloadSect(). - *! 05-Jun-2001 jeh Created based on zl.h. - */ - -#ifndef DBL_ -#define DBL_ - -#include <dspbridge/dbdefs.h> -#include <dspbridge/dbldefs.h> - -/* - * ======== DBL_close ======== - * Close library opened with DBL_open. - * Parameters: - * lib - Handle returned from DBL_open(). - * Returns: - * Requires: - * DBL initialized. - * Valid lib. - * Ensures: - */ - extern void DBL_close(struct DBL_LibraryObj *lib); - -/* - * ======== DBL_create ======== - * Create a target object by specifying the alloc, free, and write - * functions for the target. - * Parameters: - * pTarget - Location to store target handle on output. - * pAttrs - Attributes. - * Returns: - * DSP_SOK: Success. - * DSP_EMEMORY: Memory allocation failed. - * Requires: - * DBL initialized. - * pAttrs != NULL. - * pTarget != NULL; - * Ensures: - * Success: *pTarget != NULL. - * Failure: *pTarget == NULL. - */ - extern DSP_STATUS DBL_create(struct DBL_TargetObj **pTarget, - struct DBL_Attrs *pAttrs); - -/* - * ======== DBL_delete ======== - * Delete target object and free resources for any loaded libraries. - * Parameters: - * target - Handle returned from DBL_Create(). - * Returns: - * Requires: - * DBL initialized. - * Valid target. - * Ensures: - */ - extern void DBL_delete(struct DBL_TargetObj *target); - -/* - * ======== DBL_exit ======== - * Discontinue use of DBL module. - * Parameters: - * Returns: - * Requires: - * cRefs > 0. - * Ensures: - * cRefs >= 0. - */ - extern void DBL_exit(void); - -/* - * ======== DBL_getAddr ======== - * Get address of name in the specified library. - * Parameters: - * lib - Handle returned from DBL_open(). - * name - Name of symbol - * ppSym - Location to store symbol address on output. - * Returns: - * TRUE: Success. - * FALSE: Symbol not found. - * Requires: - * DBL initialized. - * Valid lib. - * name != NULL. - * pAddr != NULL. - * Ensures: - */ - extern bool DBL_getAddr(struct DBL_LibraryObj *lib, char *name, - struct DBL_Symbol **ppSym); - -/* - * ======== DBL_getAttrs ======== - * Retrieve the attributes of the target. - * Parameters: - * target - Handle returned from DBL_Create(). - * pAttrs - Location to store attributes on output. - * Returns: - * Requires: - * DBL initialized. - * Valid target. - * pAttrs != NULL. - * Ensures: - */ - extern void DBL_getAttrs(struct DBL_TargetObj *target, - struct DBL_Attrs *pAttrs); - -/* - * ======== DBL_getCAddr ======== - * Get address of "C" name in the specified library. - * Parameters: - * lib - Handle returned from DBL_open(). - * name - Name of symbol - * ppSym - Location to store symbol address on output. - * Returns: - * TRUE: Success. - * FALSE: Symbol not found. - * Requires: - * DBL initialized. - * Valid lib. - * name != NULL. - * pAddr != NULL. - * Ensures: - */ - extern bool DBL_getCAddr(struct DBL_LibraryObj *lib, char *name, - struct DBL_Symbol **ppSym); - -/* - * ======== DBL_getEntry ======== - * Get program entry point. - * - * Parameters: - * lib - Handle returned from DBL_open(). - * pEntry - Location to store entry address on output. - * Returns: - * TRUE: Success. - * FALSE: Failure. - * Requires: - * DBL initialized. - * Valid lib. - * pEntry != NULL. - * Ensures: - */ - extern bool DBL_getEntry(struct DBL_LibraryObj *lib, u32 *pEntry); - -/* - * ======== DBL_getSect ======== - * Get address and size of a named section. - * Parameters: - * lib - Library handle returned from DBL_open(). - * name - Name of section. - * pAddr - Location to store section address on output. - * pSize - Location to store section size on output. - * Returns: - * DSP_SOK: Success. - * DSP_ENOSECT: Section not found. - * Requires: - * DBL initialized. - * Valid lib. - * name != NULL. - * pAddr != NULL; - * pSize != NULL. - * Ensures: - */ - extern DSP_STATUS DBL_getSect(struct DBL_LibraryObj *lib, char *name, - u32 *pAddr, u32 *pSize); - -/* - * ======== DBL_init ======== - * Initialize DBL module. - * Parameters: - * Returns: - * TRUE: Success. - * FALSE: Failure. - * Requires: - * cRefs >= 0. - * Ensures: - * Success: cRefs > 0. - * Failure: cRefs >= 0. - */ - extern bool DBL_init(void); - -/* - * ======== DBL_load ======== - * Add symbols/code/data defined in file to that already present on - * the target. - * - * Parameters: - * lib - Library handle returned from DBL_open(). - * flags - Specifies whether loading code, data, and/or symbols. - * attrs - May contain write, alloc, and free functions. - * pulEntry - Location to store program entry on output. - * Returns: - * DSP_SOK: Success. - * DSP_EFREAD: File read failed. - * DSP_EFWRITE: Write to target failed. - * Requires: - * DBL initialized. - * Valid lib. - * pEntry != NULL. - * Ensures: - */ - extern DSP_STATUS DBL_load(struct DBL_LibraryObj *lib, DBL_Flags flags, - struct DBL_Attrs *attrs, u32 *pEntry); - -/* - * ======== DBL_loadSect ======== - * Load a named section from an library (for overlay support). - * Parameters: - * lib - Handle returned from DBL_open(). - * sectName - Name of section to load. - * attrs - Contains write function and handle to pass to it. - * Returns: - * DSP_SOK: Success. - * DSP_ENOSECT: Section not found. - * DSP_EFWRITE: Write function failed. - * Requires: - * Valid lib. - * sectName != NULL. - * attrs != NULL. - * attrs->write != NULL. - * Ensures: - */ - extern DSP_STATUS DBL_loadSect(struct DBL_LibraryObj *lib, - char *sectName, - struct DBL_Attrs *attrs); - -/* - * ======== DBL_open ======== - * DBL_open() returns a library handle that can be used to load/unload - * the symbols/code/data via DBL_load()/DBL_unload(). - * Parameters: - * target - Handle returned from DBL_create(). - * file - Name of file to open. - * flags - Specifies whether to load symbols now. - * pLib - Location to store library handle on output. - * Returns: - * DSP_SOK: Success. - * DSP_EMEMORY: Memory allocation failure. - * DSP_EFOPEN: File open failure. - * DSP_EFREAD: File read failure. - * DSP_ECORRUPTFILE: Unable to determine target type. - * Requires: - * DBL initialized. - * Valid target. - * file != NULL. - * pLib != NULL. - * struct DBL_Attrs fopen function non-NULL. - * Ensures: - * Success: Valid *pLib. - * Failure: *pLib == NULL. - */ - extern DSP_STATUS DBL_open(struct DBL_TargetObj *target, char *file, - DBL_Flags flags, - struct DBL_LibraryObj **pLib); - -/* - * ======== DBL_readSect ======== - * Read COFF section into a character buffer. - * Parameters: - * lib - Library handle returned from DBL_open(). - * name - Name of section. - * pBuf - Buffer to write section contents into. - * size - Buffer size - * Returns: - * DSP_SOK: Success. - * DSP_ENOSECT: Named section does not exists. - * Requires: - * DBL initialized. - * Valid lib. - * name != NULL. - * pBuf != NULL. - * size != 0. - * Ensures: - */ - extern DSP_STATUS DBL_readSect(struct DBL_LibraryObj *lib, char *name, - char *pBuf, u32 size); - -/* - * ======== DBL_setAttrs ======== - * Set the attributes of the target. - * Parameters: - * target - Handle returned from DBL_create(). - * pAttrs - New attributes. - * Returns: - * Requires: - * DBL initialized. - * Valid target. - * pAttrs != NULL. - * Ensures: - */ - extern void DBL_setAttrs(struct DBL_TargetObj *target, - struct DBL_Attrs *pAttrs); - -/* - * ======== DBL_unload ======== - * Remove the symbols/code/data corresponding to the library lib. - * Parameters: - * lib - Handle returned from DBL_open(). - * attrs - Contains free() function and handle to pass to it. - * Returns: - * Requires: - * DBL initialized. - * Valid lib. - * Ensures: - */ - extern void DBL_unload(struct DBL_LibraryObj *lib, - struct DBL_Attrs *attrs); - -/* - * ======== DBL_unloadSect ======== - * Unload a named section from an library (for overlay support). - * Parameters: - * lib - Handle returned from DBL_open(). - * sectName - Name of section to load. - * attrs - Contains free() function and handle to pass to it. - * Returns: - * DSP_SOK: Success. - * DSP_ENOSECT: Named section not found. - * Requires: - * DBL initialized. - * Valid lib. - * sectName != NULL. - * Ensures: - */ - extern DSP_STATUS DBL_unloadSect(struct DBL_LibraryObj *lib, - char *sectName, - struct DBL_Attrs *attrs); - -#endif /* DBL_ */ diff --git a/arch/arm/plat-omap/include/dspbridge/dbof.h b/arch/arm/plat-omap/include/dspbridge/dbof.h deleted file mode 100644 index 54f4250..0000000 --- a/arch/arm/plat-omap/include/dspbridge/dbof.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * dbof.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 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. - */ - - -/* - * ======== dbof.h ======== - * Description: - * Defines and typedefs for DSP/BIOS Bridge Object File Format (DBOF). - * - *! Revision History - *! ================ - *! 12-Jul-2002 jeh Added defines for DBOF_SectHdr page. - *! 12-Oct-2001 jeh Converted to std.h format. - *! 07-Sep-2001 jeh Added overlay support. - *! 06-Jul-2001 jeh Created. - */ - -#ifndef DBOF_ -#define DBOF_ - -/* Enough to hold DCD section names: 32 digit ID + underscores */ -#define DBOF_DCDSECTNAMELEN 40 - -/* Values for DBOF_SectHdr page field. */ -#define DBOF_PROGRAM 0 -#define DBOF_DATA 1 -#define DBOF_CINIT 2 - -/* - * ======== DBOF_FileHdr ======== - */ - struct DBOF_FileHdr { - u32 magic; /* COFF magic number */ - u32 entry; /* Program entry point */ - u16 numSymbols; /* Number of bridge symbols */ - u16 numDCDSects; /* Number of DCD sections */ - u16 numSects; /* Number of sections to load */ - u16 numOvlySects; /* Number of overlay sections */ - u32 symOffset; /* Offset in file to symbols */ - u32 dcdSectOffset; /* Offset to DCD sections */ - u32 loadSectOffset; /* Offset to loadable sections */ - u32 ovlySectOffset; /* Offset to overlay data */ - u16 version; /* DBOF version number */ - u16 resvd; /* Reserved for future use */ - } ; - -/* - * ======== DBOF_DCDSectHdr ======== - */ - struct DBOF_DCDSectHdr { - u32 size; /* Sect size (target MAUs) */ - char name[DBOF_DCDSECTNAMELEN]; /* DCD section name */ - } ; - -/* - * ======== DBOF_OvlySectHdr ======== - */ - struct DBOF_OvlySectHdr { - u16 nameLen; /* Length of section name */ - u16 numCreateSects; /* # of sects loaded for create phase */ - u16 numDeleteSects; /* # of sects loaded for delete phase */ - u16 numExecuteSects; /* # of sects loaded for execute phase */ - - /* - * Number of sections where load/unload phase is not specified. - * These sections will be loaded when create phase sects are - * loaded, and unloaded when the delete phase is unloaded. - */ - u16 numOtherSects; - u16 resvd; /* Reserved for future use */ - }; - -/* - * ======== DBOF_OvlySectData ======== - */ - struct DBOF_OvlySectData { - u32 loadAddr; /* Section load address */ - u32 runAddr; /* Section run address */ - u32 size; /* Section size (target MAUs) */ - u16 page; /* Memory page number */ - u16 resvd; /* Reserved */ - } ; - -/* - * ======== DBOF_SectHdr ======== - */ - struct DBOF_SectHdr { - u32 addr; /* Section address */ - u32 size; /* Section size (target MAUs) */ - u16 page; /* Page number */ - u16 resvd; /* Reserved for future use */ - } ; - -/* - * ======== DBOF_SymbolHdr ======== - */ - struct DBOF_SymbolHdr { - u32 value; /* Symbol value */ - u16 nameLen; /* Length of symbol name */ - u16 resvd; /* Reserved for future use */ - } ; - -#endif /* DBOF_ */ - diff --git a/drivers/dsp/bridge/dynload/dlclasses_hdr.h b/drivers/dsp/bridge/dynload/dlclasses_hdr.h deleted file mode 100644 index 04f136e..0000000 --- a/drivers/dsp/bridge/dynload/dlclasses_hdr.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * dlclasses_hdr.h - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 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 _DLCLASSES_HDR_H -#define _DLCLASSES_HDR_H - -/***************************************************************************** - ***************************************************************************** - * - * DLCLASSES_HDR.H - * - * Sample classes in support of the dynamic loader - * - * These are just concrete derivations of the virtual ones in dynamic_loader.h - * with a few additional interfaces for init, etc. - ***************************************************************************** - *****************************************************************************/ - -#include <dspbridge/dynamic_loader.h> - -#include "DLstream.h" -#include "DLsymtab.h" -#include "DLalloc.h" -#include "DLinit.h" - -#endif /* _DLCLASSES_HDR_H */ diff --git a/drivers/dsp/bridge/pmgr/dbl.c b/drivers/dsp/bridge/pmgr/dbl.c deleted file mode 100644 index 641b011..0000000 --- a/drivers/dsp/bridge/pmgr/dbl.c +++ /dev/null @@ -1,1385 +0,0 @@ -/* - * dbl.c - * - * DSP-BIOS Bridge driver support functions for TI OMAP processors. - * - * Copyright (C) 2005-2006 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. - */ - - -/* - * ======== dbl.c ======== - * Dynamic BOF Loader library. Contains functions related to - * loading and unloading symbols/code/data on DSP. - * Also contains other support functions. - * - *! Revision History - *! ================ - *! 24-Feb-2003 swa PMGR Code review comments incorporated. - *! 24-May-2002 jeh Free DCD sects in DBL_close(). - *! 19-Mar-2002 jeh Changes made to match dynamic loader (dbll.c): Pass - *! DBL_Library to DBL_getAddr() instead of DBL_Target, - *! eliminate scope param, use DBL_Symbol. Pass attrs to - *! DBL_load(), DBL_unload(). - *! 20-Nov-2001 jeh Removed DBL_loadArgs(). - *! 07-Sep-2001 jeh Added overlay support. - *! 31-Jul-2001 jeh Include windows.h. - *! 06-Jun-2001 jeh Created. - */ - -/* ----------------------------------- Host OS */ -#include <dspbridge/host_os.h> - -/* ----------------------------------- DSP/BIOS Bridge */ -#include <dspbridge/std.h> -#include <dspbridge/dbdefs.h> -#include <dspbridge/errbase.h> - -/* ----------------------------------- Trace & Debug */ -#include <dspbridge/dbc.h> -#include <dspbridge/gt.h> - -/* ----------------------------------- OS Adaptation Layer */ -#include <dspbridge/csl.h> -#include <dspbridge/mem.h> -#include <dspbridge/kfile.h> - -/* ----------------------------------- This */ -#include <dspbridge/dbof.h> -#include <dspbridge/dbl.h> - -#define DBL_TARGSIGNATURE 0x544c4244 /* "TLBD" */ -#define DBL_LIBSIGNATURE 0x4c4c4244 /* "LLBD" */ - -#define C54TARG 0 -#define C55TARG 1 -#define NUMTARGS 2 - -#define C54MAGIC 0x98 /* Magic number for TI C54 COF */ -#define C55MAGIC 0x9c /* Magic number for LEAD3 (C55) COF */ - -/* Three task phases */ -#define CREATEPHASE 0 -#define DELETEPHASE 1 -#define EXECUTEPHASE 2 -#define NONE 3 /* For overlay section with phase not specified */ - -/* Default load buffer size */ -#define LOADBUFSIZE 0x800 - -#define SWAPLONG(x) ((((x) << 24) & 0xFF000000) | (((x) << 8) & 0xFF0000L) | \ - (((x) >> 8) & 0xFF00L) | (((x) >> 24) & 0xFF)) - -#define SWAPWORD(x) ((((x) << 8) & 0xFF00) | (((x) >> 8) & 0xFF)) - -/* - * Macros for accessing the following types of overlay data within a - * structure of type OvlyData: - * - Overlay data not associated with a particular phase - * - Create phase overlay data - * - Delete phase overlay data - * - Execute phase overlay data - */ -#define numOtherSects(pOvlyData) ((pOvlyData)->hdr.dbofHdr.numOtherSects) -#define numCreateSects(pOvlyData) ((pOvlyData)->hdr.dbofHdr.numCreateSects) -#define numDeleteSects(pOvlyData) ((pOvlyData)->hdr.dbofHdr.numDeleteSects) -#define numExecuteSects(pOvlyData) ((pOvlyData)->hdr.dbofHdr.numExecuteSects) -#define otherOffset(pOvlyData) 0 -#define createOffset(pOvlyData) ((pOvlyData)->hdr.dbofHdr.numOtherSects) -#define deleteOffset(pOvlyData) (createOffset(pOvlyData) + \ - (pOvlyData->hdr.dbofHdr.numCreateSects)) -#define executeOffset(pOvlyData) (deleteOffset(pOvlyData) + \ - (pOvlyData->hdr.dbofHdr.numDeleteSects)) -/* - * ======== OvlyHdr ======== - */ -struct OvlyHdr { - struct DBOF_OvlySectHdr dbofHdr; - char *pName; /* Name of overlay section */ - u16 createRef; /* Reference count for create phase */ - u16 deleteRef; /* Reference count for delete phase */ - u16 executeRef; /* Execute phase ref count */ - u16 otherRef; /* Unspecified phase ref count */ -} ; - -/* - * ======== OvlyData ======== - */ -struct OvlyData { - struct OvlyHdr hdr; - struct DBOF_OvlySectData data[1]; -} ; - -/* - * ======== Symbol ======== - */ -struct Symbol { - struct DBL_Symbol sym; - char *pSymName; -}; - -/* - * ======== DCDSect ======== - */ -struct DCDSect { - struct DBOF_DCDSectHdr sectHdr; - char *pData; -} ; - -/* - * ======== DBL_TargetObj ======== - */ -struct DBL_TargetObj { - u32 dwSignature; /* For object validation */ - struct DBL_Attrs dblAttrs; /* file read, write, etc. functions */ - char *pBuf; /* Load buffer */ -}; - -/* - * ======== TargetInfo ======== - */ -struct TargetInfo { - u16 dspType; /* eg, C54TARG, C55TARG */ - u32 magic; /* COFF magic number, identifies target type */ - u16 wordSize; /* Size of a DSP word */ - u16 mauSize; /* Size of minimum addressable unit */ - u16 charSize; /* For C55x, mausize = 1, but charsize = 2 */ -} ; - -/* - * ======== DBL_LibraryObj ======== - * Represents a library loaded on a target. - */ -struct DBL_LibraryObj { - u32 dwSignature; /* For object validation */ - struct DBL_TargetObj *pTarget; /* Target for this library */ - struct KFILE_FileObj *file; /* DBOF file handle */ - bool byteSwapped; /* Are bytes swapped? */ - struct DBOF_FileHdr fileHdr; /* Header of DBOF file */ - u16 nSymbols; /* Number of DSP/Bridge symbols */ - struct Symbol *symbols; /* Table of DSP/Bridge symbols */ - u16 nDCDSects; /* Number of DCD sections */ - u16 nOvlySects; /* Number of overlay nodes */ - struct DCDSect *dcdSects; /* DCD section data */ - struct OvlyData **ppOvlyData; /* Array of overlay section data */ - struct TargetInfo *pTargetInfo; /* Entry in targetTab[] below */ -} ; - -#if GT_TRACE -static struct GT_Mask DBL_debugMask = { NULL, NULL }; /* GT trace variable */ -#endif - -static u32 cRefs; /* module reference count */ - -static u32 magicTab[NUMTARGS] = { C54MAGIC, C55MAGIC }; - -static struct TargetInfo targetTab[] = { - /* targ magic wordsize mausize charsize */ - {C54TARG, C54MAGIC, 2, 2, 2}, /* C54 */ - {C55TARG, C55MAGIC, 2, 1, 2}, /* C55 */ -}; - -static void freeSects(struct DBL_TargetObj *dbl, struct OvlyData *pOvlyData, - s32 offset, s32 nSects); -static DSP_STATUS loadSect(struct DBL_TargetObj *dbl, - struct DBL_LibraryObj *pdblLib); -static DSP_STATUS readDCDSects(struct DBL_TargetObj *dbl, - struct DBL_LibraryObj *pdblLib); -static DSP_STATUS readHeader(struct DBL_TargetObj *dbl, - struct DBL_LibraryObj *pdblLib); -static DSP_STATUS readOvlySects(struct DBL_TargetObj *dbl, - struct DBL_LibraryObj *pdblLib); -static DSP_STATUS readSymbols(struct DBL_TargetObj *dbl, - struct DBL_LibraryObj *pdblLib); - -/* - * ======== DBL_close ======== - * Purpose: - * Close library opened with DBL_open. - */ -void DBL_close(struct DBL_LibraryObj *lib) -{ - struct DBL_LibraryObj *pdblLib = (struct DBL_LibraryObj *)lib; - u16 i; - - DBC_Require(cRefs > 0); - DBC_Require(MEM_IsValidHandle(pdblLib, DBL_LIBSIGNATURE)); - - GT_1trace(DBL_debugMask, GT_ENTER, "DBL_close: lib: 0x%x\n", lib); - - /* Free symbols */ - if (pdblLib->symbols) { - for (i = 0; i < pdblLib->nSymbols; i++) { - if (pdblLib->symbols[i].pSymName) - MEM_Free(pdblLib->symbols[i].pSymName); - - } - MEM_Free(pdblLib->symbols); - } - - /* Free DCD sects */ - if (pdblLib->dcdSects) { - for (i = 0; i < pdblLib->nDCDSects; i++) { - if (pdblLib->dcdSects[i].pData) - MEM_Free(pdblLib->dcdSects[i].pData); - - } - MEM_Free(pdblLib->dcdSects); - } - - /* Free overlay sects */ - if (pdblLib->ppOvlyData) { - for (i = 0; i < pdblLib->nOvlySects; i++) { - if (pdblLib->ppOvlyData[i]) { - if (pdblLib->ppOvlyData[i]->hdr.pName) { - MEM_Free(pdblLib->ppOvlyData[i]-> - hdr.pName); - } - MEM_Free(pdblLib->ppOvlyData[i]); - } - } - MEM_Free(pdblLib->ppOvlyData); - } - - /* Close the file */ - if (pdblLib->file) - (*pdblLib->pTarget->dblAttrs.fclose) (pdblLib->file); - - - MEM_FreeObject(pdblLib); -} - -/* - * ======== DBL_create ======== - * Purpose: - * Create a target object by specifying the alloc, free, and - * write functions for the target. - */ -DSP_STATUS DBL_create(struct DBL_TargetObj **pTarget, struct DBL_Attrs *pAttrs) -{ - struct DBL_TargetObj *pdblTarget = NULL; - DSP_STATUS status = DSP_SOK; - - DBC_Require(cRefs > 0); - DBC_Require(pAttrs != NULL); - DBC_Require(pTarget != NULL); - - GT_2trace(DBL_debugMask, GT_ENTER, - "DBL_create: pTarget: 0x%x pAttrs: 0x%x\n", - pTarget, pAttrs); - /* Allocate DBL target object */ - MEM_AllocObject(pdblTarget, struct DBL_TargetObj, DBL_TARGSIGNATURE); - if (pdblTarget == NULL) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "DBL_create: Memory allocation failed\n"); - status = DSP_EMEMORY; - } else { - pdblTarget->dblAttrs = *pAttrs; - /* Allocate buffer for loading target */ - pdblTarget->pBuf = MEM_Calloc(LOADBUFSIZE, MEM_PAGED); - if (pdblTarget->pBuf == NULL) - status = DSP_EMEMORY; - - } - if (DSP_SUCCEEDED(status)) { - *pTarget = pdblTarget; - } else { - *pTarget = NULL; - if (pdblTarget) - DBL_delete(pdblTarget); - - } - DBC_Ensure(DSP_SUCCEEDED(status) && - ((MEM_IsValidHandle((*pTarget), DBL_TARGSIGNATURE)) || - (DSP_FAILED(status) && *pTarget == NULL))); - return status; -} - -/* - * ======== DBL_delete ======== - * Purpose: - * Delete target object and free resources for any loaded libraries. - */ -void DBL_delete(struct DBL_TargetObj *target) -{ - DBC_Require(cRefs > 0); - DBC_Require(MEM_IsValidHandle(target, DBL_TARGSIGNATURE)); - - GT_1trace(DBL_debugMask, GT_ENTER, - "DBL_delete: target: 0x%x\n", target); - - if (target->pBuf) - MEM_Free(target->pBuf); - - MEM_FreeObject(target); -} - -/* - * ======== DBL_exit ======== - * Purpose - * Discontinue usage of DBL module. - */ -void DBL_exit() -{ - DBC_Require(cRefs > 0); - cRefs--; - GT_1trace(DBL_debugMask, GT_5CLASS, - "DBL_exit() ref count: 0x%x\n", cRefs); - DBC_Ensure(cRefs >= 0); -} - -/* - * ======== DBL_getAddr ======== - * Purpose: - * Get address of name in the specified library. - */ -bool DBL_getAddr(struct DBL_LibraryObj *lib, char *name, - struct DBL_Symbol **ppSym) -{ - bool retVal = false; - struct Symbol *symbol; - u16 i; - - DBC_Require(cRefs > 0); - DBC_Require(MEM_IsValidHandle(lib, DBL_LIBSIGNATURE)); - DBC_Require(name != NULL); - DBC_Require(ppSym != NULL); - - GT_3trace(DBL_debugMask, GT_ENTER, - "DBL_getAddr: libt: 0x%x name: %s pAddr: " - "0x%x\n", lib, name, ppSym); - for (i = 0; i < lib->nSymbols; i++) { - symbol = &lib->symbols[i]; - if (CSL_Strcmp(name, symbol->pSymName) == 0) { - /* Found it */ - *ppSym = &lib->symbols[i].sym; - retVal = true; - break; - } - } - return retVal; -} - -/* - * ======== DBL_getAttrs ======== - * Purpose: - * Retrieve the attributes of the target. - */ -void DBL_getAttrs(struct DBL_TargetObj *target, struct DBL_Attrs *pAttrs) -{ - DBC_Require(cRefs > 0); - DBC_Require(MEM_IsValidHandle(target, DBL_TARGSIGNATURE)); - DBC_Require(pAttrs != NULL); - GT_2trace(DBL_debugMask, GT_ENTER, "DBL_getAttrs: target: 0x%x pAttrs: " - "0x%x\n", target, pAttrs); - *pAttrs = target->dblAttrs; -} - -/* - * ======== DBL_getCAddr ======== - * Purpose: - * Get address of "C" name in the specified library. - */ -bool DBL_getCAddr(struct DBL_LibraryObj *lib, char *name, - struct DBL_Symbol **ppSym) -{ - bool retVal = false; - struct Symbol *symbol; - u16 i; - - DBC_Require(cRefs > 0); - DBC_Require(MEM_IsValidHandle(lib, DBL_LIBSIGNATURE)); - DBC_Require(name != NULL); - DBC_Require(ppSym != NULL); - - GT_3trace(DBL_debugMask, GT_ENTER, - "DBL_getCAddr: target: 0x%x name:%s pAddr:" - " 0x%x\n", lib, name, ppSym); - for (i = 0; i < lib->nSymbols; i++) { - symbol = &lib->symbols[i]; - if ((CSL_Strcmp(name, symbol->pSymName) == 0) || - (CSL_Strcmp(name, symbol->pSymName + 1) == 0 && - symbol->pSymName[0] == '_')) { - /* Found it */ - *ppSym = &lib->symbols[i].sym; - retVal = true; - break; - } - } - return retVal; -} - -/* - * ======== DBL_getEntry ======== - * Purpose: - * Get program entry point. - * - */ -bool DBL_getEntry(struct DBL_LibraryObj *lib, u32 *pEntry) -{ - struct DBL_LibraryObj *pdblLib = (struct DBL_LibraryObj *)lib; - - DBC_Require(cRefs > 0); - DBC_Require(MEM_IsValidHandle(pdblLib, DBL_LIBSIGNATURE)); - DBC_Require(pEntry != NULL); - - GT_2trace(DBL_debugMask, GT_ENTER, - "DBL_getEntry: lib: 0x%x pEntry: 0x%x\n", lib, pEntry); - *pEntry = pdblLib->fileHdr.entry; - - return true; -} - -/* - * ======== DBL_getSect ======== - * Purpose: - * Get address and size of a named section. - */ -DSP_STATUS DBL_getSect(struct DBL_LibraryObj *lib, char *name, u32 *pAddr, - u32 *pSize) -{ - struct DBL_LibraryObj *pdblLib = (struct DBL_LibraryObj *)lib; - u16 i; - DSP_STATUS status = DSP_ENOSECT; - - DBC_Require(cRefs > 0); - DBC_Require(name != NULL); - DBC_Require(pAddr != NULL); - DBC_Require(pSize != NULL); - DBC_Require(MEM_IsValidHandle(pdblLib, DBL_LIBSIGNATURE)); - - GT_4trace(DBL_debugMask, GT_ENTER, - "DBL_getSect: lib: 0x%x name: %s pAddr:" - " 0x%x pSize: 0x%x\n", lib, name, pAddr, pSize); - - /* - * Check for DCD and overlay sections. Overlay loader uses DBL_getSect - * to determine whether or not a node has overlay sections. - * DCD section names begin with '.' - */ - if (name[0] == '.') { - /* Get DCD section size (address is 0, since it's a NOLOAD). */ - for (i = 0; i < pdblLib->nDCDSects; i++) { - if (CSL_Strcmp(pdblLib->dcdSects[i].sectHdr.name, - name) == 0) { - *pAddr = 0; - *pSize = pdblLib->dcdSects[i].sectHdr.size * - pdblLib->pTargetInfo->mauSize; - status = DSP_SOK; - break; - } - } - } else { - /* Check for overlay section */ - for (i = 0; i < pdblLib->nOvlySects; i++) { - if (CSL_Strcmp(pdblLib->ppOvlyData[i]->hdr.pName, - name) == 0) { - /* Address and size are meaningless */ - *pAddr = 0; - *pSize = 0; - status = DSP_SOK; - break; - } - } - } - - return status; -} - -/* - * ======== DBL_init ======== - * Purpose: - * Initialize DBL module. - */ -bool DBL_init(void) -{ - bool retVal = true; - - DBC_Require(cRefs >= 0); - - if (cRefs == 0) { - DBC_Assert(!DBL_debugMask.flags); - GT_create(&DBL_debugMask, "BL"); /* "BL" for dBL */ - - } - - if (retVal) - cRefs++; - - - GT_1trace(DBL_debugMask, GT_5CLASS, "DBL_init(), ref count: 0x%x\n", - cRefs); - - DBC_Ensure((retVal && (cRefs > 0)) || (!retVal && (cRefs >= 0))); - - return retVal; -} - -/* - * ======== DBL_load ======== - * Purpose: - * Add symbols/code/data defined in file to that already present - * on the target. - */ -DSP_STATUS DBL_load(struct DBL_LibraryObj *lib, DBL_Flags flags, - struct DBL_Attrs *attrs, u32 *pEntry) -{ - struct DBL_LibraryObj *pdblLib = (struct DBL_LibraryObj *)lib; - struct DBL_TargetObj *dbl; - u16 i; - u16 nSects; - DSP_STATUS status = DSP_EFAIL; - - DBC_Require(cRefs > 0); - DBC_Require(MEM_IsValidHandle(pdblLib, DBL_LIBSIGNATURE)); - DBC_Require(pEntry != NULL); - DBC_Require(attrs != NULL); - - GT_4trace(DBL_debugMask, GT_ENTER, "DBL_load: lib: 0x%x flags: " - "0x%x attrs: 0x%x pEntry: 0x%x\n", lib, flags, attrs, pEntry); - - dbl = pdblLib->pTarget; - *pEntry = pdblLib->fileHdr.entry; - nSects = pdblLib->fileHdr.numSects; - dbl->dblAttrs = *attrs; - - for (i = 0; i < nSects; i++) { - /* Load the section at the current file offset */ - status = loadSect(dbl, lib); - if (DSP_FAILED(status)) - break; - - } - - /* Done with file, we can close it */ - if (pdblLib->file) { - (*pdblLib->pTarget->dblAttrs.fclose) (pdblLib->file); - pdblLib->file = NULL; - } - return status; -} - -/* - * ======== DBL_loadSect ======== - * Purpose: - * Load a named section from an library (for overlay support). - */ -DSP_STATUS DBL_loadSect(struct DBL_LibraryObj *lib, char *sectName, - struct DBL_Attrs *attrs) -{ - struct DBL_TargetObj *dbl; - s32 i; - s32 phase; - s32 offset = -1; - s32 nSects = -1; - s32 allocdSects = 0; - u32 loadAddr; - u32 runAddr; - u32 size; - u32 space; - u32 ulBytes; - u16 mauSize; - u16 wordSize; - u16 *phaseRef = NULL; - u16 *otherRef = NULL; - char *name = NULL; - struct OvlyData *pOvlyData; - DSP_STATUS status = DSP_ENOSECT; - - DBC_Require(cRefs > 0); - DBC_Require(MEM_IsValidHandle(lib, DBL_LIBSIGNATURE)); - DBC_Require(sectName != NULL); - DBC_Require(attrs != NULL); - DBC_Require(attrs->write != NULL); - GT_3trace(DBL_debugMask, GT_ENTER, - "DBL_loadSect: lib: 0x%x sectName: %s " - "attrs: 0x%x\n", lib, sectName, attrs); - dbl = lib->pTarget; - mauSize = lib->pTargetInfo->mauSize; - wordSize = lib->pTargetInfo->wordSize; - /* Check for match of sect name in overlay table */ - for (i = 0; i < lib->nOvlySects; i++) { - name = lib->ppOvlyData[i]->hdr.pName; - if (!CSL_Strncmp(name, sectName, CSL_Strlen(name))) { - /* Match found */ - status = DSP_SOK; - break; - } - } - if (DSP_SUCCEEDED(status)) { - DBC_Assert(i < lib->nOvlySects); - pOvlyData = lib->ppOvlyData[i]; - /* - * If node overlay, phase will be encoded in name. If not node - * overlay, set phase to NONE. - */ - phase = (CSL_Strcmp(name, sectName)) ? - CSL_Atoi(sectName + CSL_Strlen(sectName) - 1) : NONE; - /* Get reference count of node phase to be loaded, offset into - * overlay data array, and number of sections to overlay. */ - switch (phase) { - case NONE: - /* Not a node overlay */ - phaseRef = &pOvlyData->hdr.otherRef; - nSects = numOtherSects(pOvlyData); - offset = otherOffset(pOvlyData); - break; - case CREATEPHASE: - phaseRef = &pOvlyData->hdr.createRef; - otherRef = &pOvlyData->hdr.otherRef; - if (*otherRef) { - /* The overlay sections where node phase was - * not specified, have already been loaded. */ - nSects = numCreateSects(pOvlyData); - offset = createOffset(pOvlyData); - } else { - /* Overlay sections where node phase was not - * specified get loaded at create time, along - * with create sects. */ - nSects = numCreateSects(pOvlyData) + - numOtherSects(pOvlyData); - offset = otherOffset(pOvlyData); - } - break; - case DELETEPHASE: - phaseRef = &pOvlyData->hdr.deleteRef; - nSects = numDeleteSects(pOvlyData); - offset = deleteOffset(pOvlyData); - break; - case EXECUTEPHASE: - phaseRef = &pOvlyData->hdr.executeRef; - nSects = numExecuteSects(pOvlyData); - offset = executeOffset(pOvlyData); - break; - default: - /* ERROR */ - DBC_Assert(false); - break; - } - /* Do overlay if reference count is 0 */ - if (!(*phaseRef)) { - /* "Allocate" all sections */ - for (i = 0; i < nSects; i++) { - runAddr = pOvlyData->data[offset + i].runAddr; - size = pOvlyData->data[offset + i].size; - space = pOvlyData->data[offset + i].page; - status = (dbl->dblAttrs.alloc)(dbl->dblAttrs. - rmmHandle, space, size, 0, - &runAddr, true); - if (DSP_FAILED(status)) - break; - - allocdSects++; - } - if (DSP_SUCCEEDED(status)) { - /* Load sections */ - for (i = 0; i < nSects; i++) { - loadAddr = pOvlyData->data[offset + i]. - loadAddr; - runAddr = pOvlyData->data[offset + i]. - runAddr; - size = pOvlyData->data[offset + i]. - size; - space = pOvlyData->data[offset + i]. - page; - /* Convert to word address, call - * write function */ - loadAddr /= (wordSize / mauSize); - runAddr /= (wordSize / mauSize); - ulBytes = size * mauSize; - if ((*attrs->write)(attrs->wHandle, - runAddr, (void *)loadAddr, ulBytes, - space) != ulBytes) { - GT_0trace(DBL_debugMask, - GT_6CLASS, - "DBL_loadSect: write" - " failed\n"); - status = DSP_EFWRITE; - break; - } - } - } - /* Free sections on failure */ - if (DSP_FAILED(status)) - freeSects(dbl, pOvlyData, offset, allocdSects); - - } - } - if (DSP_SUCCEEDED(status)) { - /* Increment reference counts */ - if (otherRef) - *otherRef = *otherRef + 1; - - *phaseRef = *phaseRef + 1; - } - return status; -} - -/* - * ======== DBL_open ======== - * Purpose: - * DBL_open() returns a library handle that can be used to - * load/unload the symbols/code/data via DBL_load()/DBL_unload(). - */ -DSP_STATUS DBL_open(struct DBL_TargetObj *target, char *file, DBL_Flags flags, - struct DBL_LibraryObj **pLib) -{ - struct DBL_LibraryObj *pdblLib = NULL; - u16 nSymbols; - u16 nDCDSects; - DSP_STATUS status = DSP_SOK; - DBC_Require(cRefs > 0); - DBC_Require(MEM_IsValidHandle(target, DBL_TARGSIGNATURE)); - DBC_Require(target->dblAttrs.fopen != NULL); - DBC_Require(file != NULL); - DBC_Require(pLib != NULL); - - GT_3trace(DBL_debugMask, GT_ENTER, "DBL_open: target: 0x%x file: %s " - "pLib: 0x%x\n", target, file, pLib); - /* Allocate DBL library object */ - MEM_AllocObject(pdblLib, struct DBL_LibraryObj, DBL_LIBSIGNATURE); - if (pdblLib == NULL) - status = DSP_EMEMORY; - - /* Open the file */ - if (DSP_SUCCEEDED(status)) { - pdblLib->pTarget = target; - pdblLib->file = (*target->dblAttrs.fopen)(file, "rb"); - if (pdblLib->file == NULL) - status = DSP_EFOPEN; - - } - /* Read file header */ - if (DSP_SUCCEEDED(status)) { - status = readHeader(target, pdblLib); - if (DSP_FAILED(status)) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "DBL_open(): Failed to read file header\n"); - } - } - /* Allocate symbol table */ - if (DSP_SUCCEEDED(status)) { - nSymbols = pdblLib->nSymbols = pdblLib->fileHdr.numSymbols; - pdblLib->symbols = MEM_Calloc(nSymbols * sizeof(struct Symbol), - MEM_PAGED); - if (pdblLib->symbols == NULL) - status = DSP_EMEMORY; - - } - /* Read all the symbols */ - if (DSP_SUCCEEDED(status)) { - status = readSymbols(target, pdblLib); - if (DSP_FAILED(status)) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "DBL_open(): Failed to read symbols\n"); - } - } - /* Allocate DCD sect table */ - if (DSP_SUCCEEDED(status)) { - nDCDSects = pdblLib->nDCDSects = pdblLib->fileHdr.numDCDSects; - pdblLib->dcdSects = MEM_Calloc(nDCDSects * - sizeof(struct DCDSect), MEM_PAGED); - if (pdblLib->dcdSects == NULL) - status = DSP_EMEMORY; - - } - /* Read DCD sections */ - if (DSP_SUCCEEDED(status)) { - status = readDCDSects(target, pdblLib); - if (DSP_FAILED(status)) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "DBL_open(): Failed to read DCD sections\n"); - } - } - /* Read overlay sections */ - if (DSP_SUCCEEDED(status)) { - status = readOvlySects(target, pdblLib); - if (DSP_FAILED(status)) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "DBL_open(): Failed to read " - "overlay sections\n"); - } - } - if (DSP_FAILED(status)) { - *pLib = NULL; - if (pdblLib != NULL) - DBL_close((struct DBL_LibraryObj *) pdblLib); - - } else { - *pLib = pdblLib; - } - DBC_Ensure((DSP_SUCCEEDED(status) && - (MEM_IsValidHandle((*pLib), DBL_LIBSIGNATURE))) || - (DSP_FAILED(status) && *pLib == NULL)); - return status; -} - -/* - * ======== DBL_readSect ======== - * Purpose: - * Read COFF section into a character buffer. - */ -DSP_STATUS DBL_readSect(struct DBL_LibraryObj *lib, char *name, char *pContent, - u32 size) -{ - struct DBL_LibraryObj *pdblLib = (struct DBL_LibraryObj *)lib; - u16 i; - u32 mauSize; - u32 max; - DSP_STATUS status = DSP_ENOSECT; - - DBC_Require(cRefs > 0); - DBC_Require(MEM_IsValidHandle(pdblLib, DBL_LIBSIGNATURE)); - DBC_Require(name != NULL); - DBC_Require(pContent != NULL); - DBC_Require(size != 0); - GT_4trace(DBL_debugMask, GT_ENTER, "DBL_readSect: lib: 0x%x name: %s " - "pContent: 0x%x size: 0x%x\n", lib, name, pContent, size); - - mauSize = pdblLib->pTargetInfo->mauSize; - - /* Attempt to find match with DCD section names. */ - for (i = 0; i < pdblLib->nDCDSects; i++) { - if (CSL_Strcmp(pdblLib->dcdSects[i].sectHdr.name, name) == 0) { - /* Match found */ - max = pdblLib->dcdSects[i].sectHdr.size * mauSize; - max = (max > size) ? size : max; - memcpy(pContent, pdblLib->dcdSects[i].pData, max); - status = DSP_SOK; - break; - } - } - - return status; -} - -/* - * ======== DBL_setAttrs ======== - * Purpose: - * Set the attributes of the target. - */ -void DBL_setAttrs(struct DBL_TargetObj *target, struct DBL_Attrs *pAttrs) -{ - DBC_Require(cRefs > 0); - DBC_Require(MEM_IsValidHandle(target, DBL_TARGSIGNATURE)); - DBC_Require(pAttrs != NULL); - - GT_2trace(DBL_debugMask, GT_ENTER, "DBL_setAttrs: target: 0x%x pAttrs: " - "0x%x\n", target, pAttrs); - - target->dblAttrs = *pAttrs; -} - -/* - * ======== DBL_unload ======== - * Purpose: - * Remove the symbols/code/data corresponding to the library lib. - */ -void DBL_unload(struct DBL_LibraryObj *lib, struct DBL_Attrs *attrs) -{ - DBC_Require(cRefs > 0); - DBC_Require(MEM_IsValidHandle(lib, DBL_LIBSIGNATURE)); - - GT_1trace(DBL_debugMask, GT_ENTER, "DBL_unload: lib: 0x%x\n", lib); - - /* Nothing to do for static loading */ -} - -/* - * ======== DBL_unloadSect ======== - * Purpose: - * Unload a named section from an library (for overlay support). - */ -DSP_STATUS DBL_unloadSect(struct DBL_LibraryObj *lib, char *sectName, - struct DBL_Attrs *attrs) -{ - struct DBL_TargetObj *dbl; - s32 i; - s32 phase; - s32 offset = -1; - s32 nSects = -1; - u16 *phaseRef = NULL; - u16 *otherRef = NULL; - char *pName = NULL; - struct OvlyData *pOvlyData; - DSP_STATUS status = DSP_ENOSECT; - - DBC_Require(cRefs > 0); - DBC_Require(MEM_IsValidHandle(lib, DBL_LIBSIGNATURE)); - DBC_Require(sectName != NULL); - - GT_2trace(DBL_debugMask, GT_ENTER, - "DBL_unloadSect: lib: 0x%x sectName: %s\n", lib, sectName); - dbl = lib->pTarget; - /* Check for match of sect name in overlay table */ - for (i = 0; i < lib->nOvlySects; i++) { - pName = lib->ppOvlyData[i]->hdr.pName; - if (!CSL_Strncmp(pName, sectName, CSL_Strlen(pName))) { - /* Match found */ - status = DSP_SOK; - break; - } - } - if (DSP_SUCCEEDED(status)) { - DBC_Assert(i < lib->nOvlySects); - pOvlyData = lib->ppOvlyData[i]; - /* If node overlay, phase will be encoded in name. */ - phase = (CSL_Strcmp(pName, sectName)) ? - CSL_Atoi(sectName + CSL_Strlen(sectName) - 1) : NONE; - switch (phase) { - case NONE: - nSects = numOtherSects(pOvlyData); - phaseRef = &pOvlyData->hdr.otherRef; - offset = otherOffset(pOvlyData); - break; - case CREATEPHASE: - nSects = numCreateSects(pOvlyData); - offset = createOffset(pOvlyData); - phaseRef = &pOvlyData->hdr.createRef; - break; - case DELETEPHASE: - nSects = numDeleteSects(pOvlyData); - offset = deleteOffset(pOvlyData); - phaseRef = &pOvlyData->hdr.deleteRef; - otherRef = &pOvlyData->hdr.otherRef; - break; - case EXECUTEPHASE: - nSects = numExecuteSects(pOvlyData); - offset = executeOffset(pOvlyData); - phaseRef = &pOvlyData->hdr.executeRef; - break; - default: - /* ERROR */ - DBC_Assert(false); - break; - } - if (*phaseRef) { - *phaseRef = *phaseRef - 1; - if (*phaseRef == 0) { - /* Unload overlay sections for phase */ - freeSects(dbl, pOvlyData, offset, nSects); - } - if (phase == DELETEPHASE) { - DBC_Assert(*otherRef); - *otherRef = *otherRef - 1; - if (*otherRef == 0) { - /* Unload other overlay sections */ - nSects = numOtherSects(pOvlyData); - offset = otherOffset(pOvlyData); - freeSects(dbl, pOvlyData, offset, - nSects); - } - } - } - } - - return status; -} - -/* - * ======== freeSects ======== - * Purpose: - * Free section - */ -static void freeSects(struct DBL_TargetObj *dbl, struct OvlyData *pOvlyData, - s32 offset, s32 nSects) -{ - u32 runAddr; - u32 size; - u32 space; - s32 i; - - for (i = 0; i < nSects; i++) { - runAddr = pOvlyData->data[offset + i].runAddr; - size = pOvlyData->data[offset + i].size; - space = pOvlyData->data[offset + i].page; - if (!(dbl->dblAttrs.free) - (dbl->dblAttrs.rmmHandle, space, runAddr, size, true)) { - /* - * Free function will not fail for overlay, unless - * address passed in is bad. - */ - DBC_Assert(false); - } - } -} - -/* - * ======== loadSect ======== - * Purpose: - * Load section to target - */ -static DSP_STATUS loadSect(struct DBL_TargetObj *dbl, - struct DBL_LibraryObj *pdblLib) -{ - struct DBOF_SectHdr sectHdr; - char *pBuf; - struct KFILE_FileObj *file; - u32 space; - u32 addr; - u32 total; - u32 nWords = 0; - u32 nBytes = 0; - u16 mauSize; - u32 bufSize; - DSP_STATUS status = DSP_SOK; - - file = pdblLib->file; - mauSize = pdblLib->pTargetInfo->mauSize; - bufSize = LOADBUFSIZE / mauSize; - pBuf = dbl->pBuf; - - /* Read the section header */ - if ((*dbl->dblAttrs.fread)(§Hdr, sizeof(struct DBOF_SectHdr), - 1, file) != 1) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "Failed to read DCD sect header\n"); - status = DSP_EFREAD; - } else { - if (pdblLib->byteSwapped) { - sectHdr.size = SWAPLONG(sectHdr.size); - sectHdr.addr = SWAPLONG(sectHdr.addr); - sectHdr.page = SWAPWORD(sectHdr.page); - } - } - if (DSP_SUCCEEDED(status)) { - addr = sectHdr.addr; - space = sectHdr.page; - for (total = sectHdr.size; total > 0; total -= nWords) { - nWords = min(total, bufSize); - nBytes = nWords * mauSize; - /* Read section data */ - if ((*dbl->dblAttrs.fread)(pBuf, nBytes, 1, - file) != 1) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "Failed to read DCD sect header\n"); - status = DSP_EFREAD; - break; - } - /* Write section to target */ - if (!(*dbl->dblAttrs.write)(dbl->dblAttrs.wHandle, - addr, pBuf, nBytes, space)) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "Failed to write section data\n"); - status = DSP_EFWRITE; - break; - } - addr += nWords; - } - } - return status; -} - -/* - * ======== readDCDSects ======== - * Purpose: - * Read DCD sections. - */ -static DSP_STATUS readDCDSects(struct DBL_TargetObj *dbl, - struct DBL_LibraryObj *pdblLib) -{ - struct DBOF_DCDSectHdr *pSectHdr; - struct DCDSect *pSect; - struct KFILE_FileObj *file; - u16 nSects; - u16 i; - u16 mauSize; - DSP_STATUS status = DSP_SOK; - - file = pdblLib->file; - mauSize = pdblLib->pTargetInfo->mauSize; - nSects = pdblLib->fileHdr.numDCDSects; - for (i = 0; i < nSects; i++) { - pSect = &pdblLib->dcdSects[i]; - pSectHdr = &pdblLib->dcdSects[i].sectHdr; - /* Read sect header */ - if ((*dbl->dblAttrs.fread)(pSectHdr, - sizeof(struct DBOF_DCDSectHdr), 1, file) != 1) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "Failed to read DCD sect header\n"); - status = DSP_EFREAD; - break; - } - if (pdblLib->byteSwapped) - pSectHdr->size = SWAPLONG(pSectHdr->size); - - pSect->pData = (char *)MEM_Calloc(pSectHdr->size * - mauSize, MEM_PAGED); - if (pSect->pData == NULL) { - GT_2trace(DBL_debugMask, GT_6CLASS, - "Memory allocation for sect %s " - "data failed: Size: 0x%lx\n", pSectHdr->name, - pSectHdr->size); - status = DSP_EMEMORY; - break; - } - /* Read DCD sect data */ - if ((*dbl->dblAttrs.fread)(pSect->pData, mauSize, - pSectHdr->size, file) != pSectHdr->size) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "Failed to read DCD sect data\n"); - status = DSP_EFREAD; - break; - } - } - - return status; -} - -/* - * ======== readHeader ======== - * Purpose: - * Read Header. - */ -static DSP_STATUS readHeader(struct DBL_TargetObj *dbl, - struct DBL_LibraryObj *pdblLib) -{ - struct KFILE_FileObj *file; - s32 i; - struct DBOF_FileHdr *pHdr; - u32 swapMagic; - DSP_STATUS status = DSP_SOK; - - pdblLib->byteSwapped = false; - file = pdblLib->file; - pHdr = &pdblLib->fileHdr; - if ((*dbl->dblAttrs.fread)(pHdr, sizeof(struct DBOF_FileHdr), 1, - file) != 1) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "readHeader: Failed to read file header\n"); - status = DSP_EFREAD; - } - - if (DSP_SUCCEEDED(status)) { - /* Determine if byte swapped */ - for (i = 0; i < NUMTARGS; i++) { - swapMagic = SWAPLONG(pHdr->magic); - if (pHdr->magic == magicTab[i] || swapMagic == - magicTab[i]) { - if (swapMagic == magicTab[i]) { - pdblLib->byteSwapped = true; - pHdr->magic = SWAPLONG(pHdr->magic); - pHdr->entry = SWAPLONG(pHdr->entry); - pHdr->symOffset = SWAPLONG(pHdr-> - symOffset); - pHdr->dcdSectOffset = SWAPLONG(pHdr-> - dcdSectOffset); - pHdr->loadSectOffset = SWAPLONG(pHdr-> - loadSectOffset); - pHdr->ovlySectOffset = SWAPLONG(pHdr-> - ovlySectOffset); - pHdr->numSymbols = SWAPWORD(pHdr-> - numSymbols); - pHdr->numDCDSects = SWAPWORD(pHdr-> - numDCDSects); - pHdr->numSects = SWAPWORD(pHdr-> - numSects); - pHdr->numOvlySects = SWAPWORD(pHdr-> - numOvlySects); - } - break; - } - } - if (i == NUMTARGS) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "readHeader: Failed to determine" - " target type\n"); - status = DSP_ECORRUPTFILE; - } else { - pdblLib->pTargetInfo = &targetTab[i]; - GT_1trace(DBL_debugMask, GT_ENTER, - "COF type: 0x%lx\n", pHdr->magic); - GT_1trace(DBL_debugMask, GT_ENTER, - "Entry point:0x%lx\n", pHdr->entry); - } - } - return status; -} - -/* - * ======== readOvlySects ======== - * Purpose: - * Read Overlay Sections - */ -static DSP_STATUS readOvlySects(struct DBL_TargetObj *dbl, - struct DBL_LibraryObj *pdblLib) -{ - struct DBOF_OvlySectHdr hdr; - struct DBOF_OvlySectData *pData; - struct OvlyData *pOvlyData; - char *pName; - struct KFILE_FileObj *file; - u16 i, j; - u16 nSects; - u16 n; - DSP_STATUS status = DSP_SOK; - - pdblLib->nOvlySects = nSects = pdblLib->fileHdr.numOvlySects; - file = pdblLib->file; - if (nSects > 0) { - pdblLib->ppOvlyData = MEM_Calloc(nSects * sizeof(OvlyData *), - MEM_PAGED); - if (pdblLib->ppOvlyData == NULL) { - GT_0trace(DBL_debugMask, GT_7CLASS, - "Failed to allocatate overlay " - "data memory\n"); - status = DSP_EMEMORY; - } - } - if (DSP_SUCCEEDED(status)) { - /* Read overlay data for each node */ - for (i = 0; i < nSects; i++) { - /* Read overlay section header */ - if ((*dbl->dblAttrs.fread)(&hdr, - sizeof(struct DBOF_OvlySectHdr), 1, file) != 1) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "Failed to read overlay sect" - " header\n"); - status = DSP_EFREAD; - break; - } - if (pdblLib->byteSwapped) { - hdr.nameLen = SWAPWORD(hdr.nameLen); - hdr.numCreateSects = - SWAPWORD(hdr.numCreateSects); - hdr.numDeleteSects = - SWAPWORD(hdr.numDeleteSects); - hdr.numExecuteSects = - SWAPWORD(hdr.numExecuteSects); - hdr.numOtherSects = - SWAPWORD(hdr.numOtherSects); - hdr.resvd = SWAPWORD(hdr.resvd); - } - n = hdr.numCreateSects + hdr.numDeleteSects + - hdr.numExecuteSects + hdr.numOtherSects; - - /* Allocate memory for node's overlay data */ - pOvlyData = (struct OvlyData *)MEM_Calloc - (sizeof(struct OvlyHdr) + - n * sizeof(struct DBOF_OvlySectData), - MEM_PAGED); - if (pOvlyData == NULL) { - GT_0trace(DBL_debugMask, GT_7CLASS, - "Failed to allocatate ovlyay" - " data memory\n"); - status = DSP_EMEMORY; - break; - } - pOvlyData->hdr.dbofHdr = hdr; - pdblLib->ppOvlyData[i] = pOvlyData; - /* Allocate memory for section name */ - pName = (char *)MEM_Calloc(hdr.nameLen + 1, MEM_PAGED); - if (pName == NULL) { - GT_0trace(DBL_debugMask, GT_7CLASS, - "Failed to allocatate ovlyay" - " section name\n"); - status = DSP_EMEMORY; - break; - } - pOvlyData->hdr.pName = pName; - /* Read the overlay section name */ - if ((*dbl->dblAttrs.fread)(pName, sizeof(char), - hdr.nameLen, file) != hdr.nameLen) { - GT_0trace(DBL_debugMask, GT_7CLASS, - "readOvlySects: Unable to " - "read overlay name.\n"); - status = DSP_EFREAD; - break; - } - /* Read the overlay section data */ - pData = pOvlyData->data; - if ((*dbl->dblAttrs.fread)(pData, - sizeof(struct DBOF_OvlySectData), n, file) != n) { - GT_0trace(DBL_debugMask, GT_7CLASS, - "readOvlySects: Unable to " - "read overlay data.\n"); - status = DSP_EFREAD; - break; - } - /* Swap overlay data, if necessary */ - if (pdblLib->byteSwapped) { - for (j = 0; j < n; j++) { - pData[j].loadAddr = - SWAPLONG(pData[j].loadAddr); - pData[j].runAddr = - SWAPLONG(pData[j].runAddr); - pData[j].size = - SWAPLONG(pData[j].size); - pData[j].page = - SWAPWORD(pData[j].page); - } - } - } - } - return status; -} - -/* - * ======== readSymbols ======== - * Purpose: - * Read Symbols - */ -static DSP_STATUS readSymbols(struct DBL_TargetObj *dbl, - struct DBL_LibraryObj *pdblLib) -{ - struct DBOF_SymbolHdr symHdr; - struct KFILE_FileObj *file; - u16 i; - u16 nSymbols; - u16 len; - char *pName = NULL; - DSP_STATUS status = DSP_SOK; - - file = pdblLib->file; - - nSymbols = pdblLib->fileHdr.numSymbols; - - for (i = 0; i < nSymbols; i++) { - /* Read symbol value */ - if ((*dbl->dblAttrs.fread)(&symHdr, - sizeof(struct DBOF_SymbolHdr), 1, file) != 1) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "Failed to read symbol value\n"); - status = DSP_EFREAD; - break; - } - if (pdblLib->byteSwapped) { - symHdr.nameLen = SWAPWORD(symHdr.nameLen); - symHdr.value = SWAPLONG(symHdr.value); - } - /* Allocate buffer for symbol name */ - len = symHdr.nameLen; - pName = (char *)MEM_Calloc(len + 1, MEM_PAGED); - if (pName == NULL) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "Memory allocation failed\n"); - status = DSP_EMEMORY; - break; - } - pdblLib->symbols[i].pSymName = pName; - pdblLib->symbols[i].sym.value = symHdr.value; - /* Read symbol name */ - if ((*dbl->dblAttrs.fread) (pName, sizeof(char), len, file) != - len) { - GT_0trace(DBL_debugMask, GT_6CLASS, - "Failed to read symbol value\n"); - status = DSP_EFREAD; - break; - } else { - pName[len] = '\0'; - GT_2trace(DBL_debugMask, GT_ENTER, - "Symbol: %s Value: 0x%lx\n", - pName, symHdr.value); - } - } - return status; -} - -- 1.6.2.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html