From: Andy Shevchenko <ext-andriy.shevchenko@xxxxxxxxx> * Remove KFILE_Init(), KFILE_Exit() and tracing stuff * Simplify KFILE_Seek() * Simplify error checker in KFILE_Open after filp_open() call * Remove pid/tgid related code: it seems totally useless here * Get rid of KFILE_FileObj, use regular struct file instead * Remove kfile.c and kfile.h * Redefine necessary file operations in cod.c in a bit optimal way * Clean up errbase.h Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@xxxxxxxxx> --- arch/arm/plat-omap/include/dspbridge/errbase.h | 27 -- arch/arm/plat-omap/include/dspbridge/kfile.h | 216 --------------- drivers/dsp/bridge/Kbuild | 2 +- drivers/dsp/bridge/pmgr/cod.c | 108 +++++++- drivers/dsp/bridge/pmgr/dbl.c | 14 +- drivers/dsp/bridge/services/kfile.c | 337 ------------------------ drivers/dsp/bridge/services/services.c | 10 +- 7 files changed, 112 insertions(+), 602 deletions(-) delete mode 100644 arch/arm/plat-omap/include/dspbridge/kfile.h delete mode 100644 drivers/dsp/bridge/services/kfile.c diff --git a/arch/arm/plat-omap/include/dspbridge/errbase.h b/arch/arm/plat-omap/include/dspbridge/errbase.h index 47b9a0b..271315a 100644 --- a/arch/arm/plat-omap/include/dspbridge/errbase.h +++ b/arch/arm/plat-omap/include/dspbridge/errbase.h @@ -464,31 +464,4 @@ /* Insufficient space to hold data in registry value. */ #define REG_E_MOREDATA (REG_EBASE + 0x03) -/* FAILURE Codes : KFILE */ -#define KFILE_EBASE (DSP_COMP_EBASE + 0x900) - -/* Invalid file handle. */ -#define E_KFILE_INVALIDHANDLE (KFILE_EBASE + 0x01) - -/* Bad file name. */ -#define E_KFILE_BADFILENAME (KFILE_EBASE + 0x02) - -/* Invalid file mode. */ -#define E_KFILE_INVALIDMODE (KFILE_EBASE + 0x03) - -/* No resources available. */ -#define E_KFILE_NORESOURCES (KFILE_EBASE + 0x04) - -/* Invalid file buffer . */ -#define E_KFILE_INVALIDBUFFER (KFILE_EBASE + 0x05) - -/* Bad origin argument. */ -#define E_KFILE_BADORIGINFLAG (KFILE_EBASE + 0x06) - -/* Invalid file offset value. */ -#define E_KFILE_INVALIDOFFSET (KFILE_EBASE + 0x07) - -/* General KFILE error condition */ -#define E_KFILE_ERROR (KFILE_EBASE + 0x08) - #endif /* ERRBASE_ */ diff --git a/arch/arm/plat-omap/include/dspbridge/kfile.h b/arch/arm/plat-omap/include/dspbridge/kfile.h deleted file mode 100644 index 23c89b0..0000000 --- a/arch/arm/plat-omap/include/dspbridge/kfile.h +++ /dev/null @@ -1,216 +0,0 @@ -/* - * kfile.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. - */ - - -/* - * ======== kfile.h ======== - * Purpose: - * Provide file I/O management capabilities. - * - * Public Functions: - * KFILE_Close - * KFILE_Exit - * KFILE_Init - * KFILE_Open - * KFILE_Read - * KFILE_Seek - * KFILE_Tell - * KFILE_Write - * - * Notes: - * The KFILE module is not like most of the other DSP/BIOS Bridge modules - * in that it doesn't return WSX_STATUS type values. Rather, it's - * prototypes are meant to match the stdio file prototypes - * (ie, fopen, fclose, etc.). - * - *! Revision History - *! ================ - *! 29-Oct-1999 kc: Clean up for code review. - *! 07-Jan-1998 cr: Clean up for code review. - *! 15-Aug-1997 cr: Added E_KFILE_ERROR for general error condition. - *! 04-Aug-1997 cr: Added explicit CDECL descriptions. - *! 11-Nov-1996 cr: Implemented changes based on code review. - *! 05-Nov-1996 cr: Cleaned up for code review. - *! 29-May-1996 gp: Added requirement that size != 0 in _Write() and _Read(). - *! 28-May-1996 mg: Changed return values for Read/Write. - *! 14-Dec-1995 cr: Created. - */ - -#ifndef KFILE_ -#define KFILE_ - -/* - * Constants for KFILE_Seek. Note that these MUST be the same definitions as - * those defined for fseek. - */ -#define KFILE_SEEK_SET 0x00 /* seek from beginning of file */ -#define KFILE_SEEK_CUR 0x01 /* seek from current position */ -#define KFILE_SEEK_END 0x02 /* seek from end of file */ - - struct KFILE_FileObj; - -/* - * ======== KFILE_Close ======== - * Purpose: - * This function closes a file's stream. - * Parameters: - * hFile: Handle of the file stream returned by KFILE_Open. - * Returns: - * E_KFILE_INVALIDHANDLE: bad handle. - * 0: success. - * E_KFILE_ERROR: unable to close specified handle. - * Requires: - * KFILE initialized. - * Ensures: - */ - extern s32 KFILE_Close(IN struct KFILE_FileObj *hFile); - -/* - * ======== KFILE_Exit ======== - * Purpose: - * Discontinue usage of module; free resources when reference count - * reaches 0. - * Parameters: - * Returns: - * Requires: - * KFILE initialized. - * Ensures: - * Resources used by module are freed when cRef reaches zero. - */ - extern void KFILE_Exit(void); - -/* - * ======== KFILE_Init ======== - * Purpose: - * Initializes private state of KFILE module. - * Parameters: - * Returns: - * TRUE if success, else FALSE. - * Requires: - * Ensures: - * KFILE initialized. - */ - extern bool KFILE_Init(void); - -/* - * ======== KFILE_Open ======== - * Purpose: - * Opens a file for use. - * Parameters: - * pszFileName: Full path to name of the file to open. - * pszMode: String containing open status. Only the first - * character of the string is examined, for either - * "r" (read) or "w" (write) mode. - * Returns: - * A valid file handle if success, else NULL. - * Requires: - * - KFILE initialized. - * - pszMode != NULL. - * - pszFileName != NULL. - * Ensures: - */ - extern struct KFILE_FileObj *KFILE_Open(IN CONST char *filename, - IN CONST char *mode); - -/* - * ======== KFILE_Read ======== - * Purpose: - * This function reads a specified number of bytes into a buffer. - * Parameters: - * pBuffer: Array to which the file data is copied. - * cSize: Number of characters in each object. - * cCount: Number of objects to read in. - * hFile: Handle of the file stream returned by KFILE_Open. - * Returns: - * E_KFILE_INVALIDHANDLE: bad file handle. - * E_KFILE_ERROR: general failure. - * > 0: success; # of objects read from file. - * Requires: - * KFILE initialized. - * pBuffer is a valid pointer. - * Ensures: - */ - extern s32 KFILE_Read(OUT void __user*buffer, - IN s32 size, IN s32 count, - IN struct KFILE_FileObj *hFile); - -/* - * ======== KFILE_Seek ======== - * Purpose: - * This function sets the file position indicator. NOTE: we don't - * support seeking beyond the boundaries of a file. - * Parameters: - * hFile: Handle of the file stream returned by KFILE_Open. - * offset: Number of bytes from the origin to move. - * origin: File reference point, one of the following values: - * KFILE_SEEK_SET: Seek from beginning of file. - * KFILE_SEEK_CUR: Seek from current position. - * KFILE_SEEK_END: Seek from end of file. - * Returns: - * 0: success. - * E_KFILE_INVALIDHANDLE: bad handle. - * E_KFILE_BADORIGIN: invalid origin paramater. - * E_KFILE_ERROR: general failure. - * Requires: - * KFILE initialized. - * Ensures: - */ - extern s32 KFILE_Seek(IN struct KFILE_FileObj *hFile, - IN s32 offset, IN s32 origin); - -/* - * ======== KFILE_Tell ======== - * Purpose: - * This function reports the current value of the position indicator. - * Parameters: - * hFile: Handle of the file stream returned by KFILE_Open. - * Return value: - * > 0: success; returns # of bytes the position indicator is from - * beginning of file. - * E_KFILE_ERROR: general failure. - * E_KFILE_INVALIDHANDLE: bad file handle. - * Requires: - * KFILE initialized. - * Ensures: - */ - extern s32 KFILE_Tell(IN struct KFILE_FileObj *hFile); - -/* - * ======== KFILE_Write ======== - * Purpose: - * This function writes a number of objects to the stream. - * Parameters: - * pBuffer: Array from which the file data is written. - * cSize: Number of characters in each object. - * cCount: Number of objects to write out. - * hFile: Handle of the file stream returned by KFILE_Open. - * Returns: - * E_KFILE_INVALIDHANDLE: bad file handle. - * E_KFILE_ERROR: general failure. - * > 0: success; # of objects written to file. - * Requires: - * KFILE initialized. - * pBuffer != NULL. - * Postcondition: - * The file position indicator is advanced by the number of - * characters written. - */ - extern s32 KFILE_Write(OUT void *buffer, - IN s32 size, - IN s32 count, - IN struct KFILE_FileObj *hFile); - -#endif /* KFILE_ */ diff --git a/drivers/dsp/bridge/Kbuild b/drivers/dsp/bridge/Kbuild index 838cc13..f0b1972 100644 --- a/drivers/dsp/bridge/Kbuild +++ b/drivers/dsp/bridge/Kbuild @@ -2,7 +2,7 @@ obj-$(CONFIG_MPU_BRIDGE) += bridgedriver.o libgen = gen/gb.o gen/gt.o gen/gs.o gen/gh.o gen/_gt_para.o gen/uuidutil.o libservices = services/mem.o services/dpc.o \ - services/kfile.o services/sync.o \ + services/sync.o \ services/clk.o services/cfg.o services/reg.o \ services/regsup.o services/ntfy.o \ services/dbg.o services/services.o diff --git a/drivers/dsp/bridge/pmgr/cod.c b/drivers/dsp/bridge/pmgr/cod.c index e26d115..c3ee2a3 100644 --- a/drivers/dsp/bridge/pmgr/cod.c +++ b/drivers/dsp/bridge/pmgr/cod.c @@ -57,6 +57,8 @@ /* ----------------------------------- Host OS */ #include <dspbridge/host_os.h> +#include <linux/fs.h> +#include <linux/uaccess.h> /* ----------------------------------- DSP/BIOS Bridge */ #include <dspbridge/std.h> @@ -68,7 +70,6 @@ #include <dspbridge/gt.h> /* ----------------------------------- OS Adaptation Layer */ -#include <dspbridge/kfile.h> #include <dspbridge/ldr.h> #include <dspbridge/mem.h> @@ -136,6 +137,101 @@ static struct DBLL_Fxns dbllFxns = { static bool NoOp(void); /* + * File operations (originally were under kfile.c) + */ +static s32 COD_fClose(struct file *hFile) +{ + /* Check for valid handle */ + if (!hFile) + return DSP_EHANDLE; + + filp_close(hFile, NULL); + + /* we can't use DSP_SOK here */ + return 0; +} + +static struct file *COD_fOpen(CONST char *pszFileName, CONST char *pszMode) +{ + mm_segment_t fs; + struct file *hFile; + + fs = get_fs(); + set_fs(get_ds()); + + /* ignore given mode and open file as read-only */ + hFile = filp_open(pszFileName, O_RDONLY, 0); + + if (IS_ERR(hFile)) + hFile = NULL; + + set_fs(fs); + + return hFile; +} + +static s32 COD_fRead(void __user *pBuffer, s32 cSize, s32 cCount, + struct file *hFile) +{ + /* check for valid file handle */ + if (!hFile) + return DSP_EHANDLE; + + if ((cSize > 0) && (cCount > 0) && pBuffer) { + u32 dwBytesRead; + mm_segment_t fs; + + /* read from file */ + fs = get_fs(); + set_fs(get_ds()); + dwBytesRead = hFile->f_op->read(hFile, pBuffer, cSize * cCount, + &(hFile->f_pos)); + set_fs(fs); + + if (!dwBytesRead) + return DSP_EFREAD; + + return dwBytesRead / cSize; + } + + return DSP_EINVALIDARG; +} + +static s32 COD_fSeek(struct file *hFile, s32 lOffset, s32 cOrigin) +{ + u32 dwCurPos; + + /* check for valid file handle */ + if (!hFile) + return DSP_EHANDLE; + + /* based on the origin flag, move the internal pointer */ + dwCurPos = hFile->f_op->llseek(hFile, lOffset, cOrigin); + + if ((s32)dwCurPos < 0) + return DSP_EFAIL; + + /* we can't use DSP_SOK here */ + return 0; +} + +static s32 COD_fTell(struct file *hFile) +{ + u32 dwCurPos; + + if (!hFile) + return DSP_EHANDLE; + + /* Get current position */ + dwCurPos = hFile->f_op->llseek(hFile, 0, SEEK_CUR); + + if ((s32)dwCurPos < 0) + return DSP_EFAIL; + + return dwCurPos; +} + +/* * ======== COD_Close ======== */ void COD_Close(struct COD_LIBRARYOBJ *lib) @@ -199,11 +295,11 @@ DSP_STATUS COD_Create(OUT struct COD_MANAGER **phMgr, char *pstrDummyFile, zlAttrs.alloc = (DBLL_AllocFxn)NoOp; zlAttrs.free = (DBLL_FreeFxn)NoOp; - zlAttrs.fread = (DBLL_ReadFxn)KFILE_Read; - zlAttrs.fseek = (DBLL_SeekFxn)KFILE_Seek; - zlAttrs.ftell = (DBLL_TellFxn)KFILE_Tell; - zlAttrs.fclose = (DBLL_FCloseFxn)KFILE_Close; - zlAttrs.fopen = (DBLL_FOpenFxn)KFILE_Open; + zlAttrs.fread = (DBLL_ReadFxn)COD_fRead; + zlAttrs.fseek = (DBLL_SeekFxn)COD_fSeek; + zlAttrs.ftell = (DBLL_TellFxn)COD_fTell; + zlAttrs.fclose = (DBLL_FCloseFxn)COD_fClose; + zlAttrs.fopen = (DBLL_FOpenFxn)COD_fOpen; zlAttrs.symLookup = NULL; zlAttrs.baseImage = true; zlAttrs.logWrite = NULL; diff --git a/drivers/dsp/bridge/pmgr/dbl.c b/drivers/dsp/bridge/pmgr/dbl.c index af0b89b..19aac41 100644 --- a/drivers/dsp/bridge/pmgr/dbl.c +++ b/drivers/dsp/bridge/pmgr/dbl.c @@ -38,6 +38,7 @@ /* ----------------------------------- Host OS */ #include <dspbridge/host_os.h> #include <linux/kernel.h> +#include <linux/fs.h> /* ----------------------------------- DSP/BIOS Bridge */ #include <dspbridge/std.h> @@ -50,7 +51,6 @@ /* ----------------------------------- OS Adaptation Layer */ #include <dspbridge/mem.h> -#include <dspbridge/kfile.h> /* ----------------------------------- This */ #include <dspbridge/dbof.h> @@ -161,7 +161,7 @@ struct TargetInfo { struct DBL_LibraryObj { u32 dwSignature; /* For object validation */ struct DBL_TargetObj *pTarget; /* Target for this library */ - struct KFILE_FileObj *file; /* DBOF file handle */ + struct file *file; /* DBOF file handle */ bool byteSwapped; /* Are bytes swapped? */ struct DBOF_FileHdr fileHdr; /* Header of DBOF file */ u16 nSymbols; /* Number of DSP/Bridge symbols */ @@ -1024,7 +1024,7 @@ static DSP_STATUS loadSect(struct DBL_TargetObj *dbl, { struct DBOF_SectHdr sectHdr; char *pBuf; - struct KFILE_FileObj *file; + struct file *file; u32 space; u32 addr; u32 total; @@ -1090,7 +1090,7 @@ static DSP_STATUS readDCDSects(struct DBL_TargetObj *dbl, { struct DBOF_DCDSectHdr *pSectHdr; struct DCDSect *pSect; - struct KFILE_FileObj *file; + struct file *file; u16 nSects; u16 i; u16 mauSize; @@ -1144,7 +1144,7 @@ static DSP_STATUS readDCDSects(struct DBL_TargetObj *dbl, static DSP_STATUS readHeader(struct DBL_TargetObj *dbl, struct DBL_LibraryObj *pdblLib) { - struct KFILE_FileObj *file; + struct file *file; s32 i; struct DBOF_FileHdr *pHdr; u32 swapMagic; @@ -1218,7 +1218,7 @@ static DSP_STATUS readOvlySects(struct DBL_TargetObj *dbl, struct DBOF_OvlySectData *pData; struct OvlyData *pOvlyData; char *pName; - struct KFILE_FileObj *file; + struct file *file; u16 i, j; u16 nSects; u16 n; @@ -1333,7 +1333,7 @@ static DSP_STATUS readSymbols(struct DBL_TargetObj *dbl, struct DBL_LibraryObj *pdblLib) { struct DBOF_SymbolHdr symHdr; - struct KFILE_FileObj *file; + struct file *file; u16 i; u16 nSymbols; u16 len; diff --git a/drivers/dsp/bridge/services/kfile.c b/drivers/dsp/bridge/services/kfile.c deleted file mode 100644 index d1e262c..0000000 --- a/drivers/dsp/bridge/services/kfile.c +++ /dev/null @@ -1,337 +0,0 @@ -/* - * kfile.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. - */ - - -/* - * ======== kfilece.c ======== - * Purpose: - * This module provides file i/o services. - * - * Public Functions: - * KFILE_Close - * KFILE_Exit - * KFILE_Init - * KFILE_Open - * KFILE_Read - * KFILE_Seek - * KFILE_Tell - * - *! Revision History - *! ================ - *! 03-Feb-2000 rr: Module init/exit is handled by SERVICES Init/Exit. - *! GT Changes. - *! 22-Nov-1999 kc: Added changes from code review. - *! 12-Nov-1999 kc: Enabled CSL for UNICODE/ANSI string conversions. - *! 30-Sep-1999 ag: Changed KFILE_Read() GT level from _ENTER to _4CLASS. - *! Removed GT_set(). - *! 25-Aug-1999 ag: Changed MEM_Calloc allocation type to MEM_PAGED. - *! 13-Jul-1999 a0216266(ww - TID): Stubbed from kfilent.c. - */ - -/* ----------------------------------- 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/mem.h> - -/* ----------------------------------- This */ -#include <dspbridge/kfile.h> - -/* ----------------------------------- Defines, Data Structures, Typedefs */ -#define SIGNATURE 0x4c49464b /* hex code of KFIL (reversed) */ -#define MAXFILENAMELENGTH 256 -#define GENERAL_FAILURE 0xffffffff /* SetFilePointer error */ - -/* The KFILE_FileObj abstracts the true file handle from a KFILE handle. */ -struct KFILE_FileObj { - u32 dwSignature; - __kernel_pid_t owner_pid; /* PID of process that opened this file */ - char *fileName ; - bool isOpen ; - u32 size ; - u32 curPos ; - long hInternal; /* internal handle of file */ - struct file *fileDesc; - -}; - -/* ----------------------------------- Globals */ -#if GT_TRACE -static struct GT_Mask KFILE_debugMask = { NULL, NULL }; /* Debug mask */ -#endif - -/* - * ======== KFILE_Close ======== - * Purpose: - * This function closes a file's stream. - */ -s32 KFILE_Close(struct KFILE_FileObj *hFile) -{ - s32 cRetVal = 0; /* 0 indicates success */ - s32 fRetVal = 0; - __kernel_pid_t curr_pid; - - GT_1trace(KFILE_debugMask, GT_ENTER, "KFILE_Close: hFile 0x%x\n", - hFile); - - /* Check for valid handle */ - if (MEM_IsValidHandle(hFile, SIGNATURE)) { - /* Close file only if opened by the same process (id). Otherwise - * Linux closes all open file handles when process exits.*/ - /* Return TGID instead of process handle */ - curr_pid = (__kernel_pid_t)current->tgid; - fRetVal = filp_close(hFile->fileDesc, NULL) ; - if (fRetVal) { - cRetVal = E_KFILE_ERROR; - GT_1trace(KFILE_debugMask, GT_6CLASS, - "KFILE_Close: sys_close " - "returned %d\n", fRetVal); - } - MEM_FreeObject(hFile); - } else { - cRetVal = E_KFILE_INVALIDHANDLE; - GT_0trace(KFILE_debugMask, GT_6CLASS, "KFILE_Close: " - "invalid file handle\n"); - } - return cRetVal; -} - -/* - * ======== KFILE_Exit ======== - * Purpose: - * Decrement reference count, and free resources when reference count - * is 0. - */ -void KFILE_Exit(void) -{ - GT_0trace(KFILE_debugMask, GT_5CLASS, "KFILE_Exit\n"); -} - -/* - * ======== KFILE_Init ======== - */ -bool KFILE_Init(void) -{ - GT_create(&KFILE_debugMask, "KF"); /* "KF" for KFile */ - - GT_0trace(KFILE_debugMask, GT_5CLASS, "KFILE_Init\n"); - - return true; -} - -/* - * ======== KFILE_Open ======== - * Purpose: - * Open a file for reading ONLY - */ -struct KFILE_FileObj *KFILE_Open(CONST char *pszFileName, CONST char *pszMode) -{ - struct KFILE_FileObj *hFile; /* file handle */ - DSP_STATUS status; - mm_segment_t fs; - - struct file*fileDesc = NULL; - DBC_Require(pszMode != NULL); - DBC_Require(pszFileName != NULL); - - GT_2trace(KFILE_debugMask, GT_ENTER, - "KFILE_Open: pszFileName %s, pszMode " - "%s\n", pszFileName, pszMode); - - /* create a KFILE object */ - MEM_AllocObject(hFile, struct KFILE_FileObj, SIGNATURE); - - if (hFile) { - fs = get_fs(); - set_fs(get_ds()); - /* Third argument is mode (permissions). Ignored unless creating file */ - fileDesc = filp_open(pszFileName, O_RDONLY, 0); - if ((IS_ERR(fileDesc)) || (fileDesc == NULL) || - (fileDesc->f_op == NULL) || (fileDesc->f_op->read == NULL) - || (fileDesc->f_op->llseek == NULL)) { - status = DSP_EFILE; - } else { - hFile->fileDesc = fileDesc; - hFile->fileName = (char *)pszFileName; - hFile->isOpen = true; - hFile->curPos = 0; - hFile->size = fileDesc->f_op->llseek(fileDesc, 0, - SEEK_END); - fileDesc->f_op->llseek(fileDesc, 0, SEEK_SET); - /* Return TGID instead of process handle */ - hFile->owner_pid = current->tgid; - - status = DSP_SOK; - } - set_fs(fs); - if (DSP_FAILED(status)) { - /* free memory, and clear handle */ - MEM_FreeObject(hFile); - hFile = NULL; - } - } else { - GT_0trace(KFILE_debugMask, GT_6CLASS, - "KFILE_Open: MEM_AllocObject failed\n"); - status = DSP_EMEMORY; - } - return hFile; -} - -/* - * ======== KFILE_Read ======== - * Purpose: - * Reads a specified number of bytes into a buffer. - */ -s32 -KFILE_Read(void __user*pBuffer, s32 cSize, s32 cCount, - struct KFILE_FileObj *hFile) -{ - u32 dwBytesRead = 0; - s32 cRetVal = 0; - mm_segment_t fs; - - DBC_Require(pBuffer != NULL); - - GT_4trace(KFILE_debugMask, GT_4CLASS, - "KFILE_Read: buffer 0x%x, cSize 0x%x," - "cCount 0x%x, hFile 0x%x\n", pBuffer, cSize, cCount, hFile); - - /* check for valid file handle */ - if (MEM_IsValidHandle(hFile, SIGNATURE)) { - if ((cSize > 0) && (cCount > 0) && pBuffer) { - /* read from file */ - fs = get_fs(); - set_fs(get_ds()); - dwBytesRead = hFile->fileDesc->f_op->read(hFile-> - fileDesc, pBuffer, cSize *cCount, - &(hFile->fileDesc->f_pos)); - set_fs(fs); - if (dwBytesRead) { - cRetVal = dwBytesRead / cSize; - hFile->curPos += dwBytesRead; - DBC_Assert((dwBytesRead / cSize) <= \ - (u32)cCount); - } else { - cRetVal = E_KFILE_ERROR; - GT_0trace(KFILE_debugMask, GT_6CLASS, - "KFILE_Read: sys_read() failed\n"); - } - } else { - cRetVal = DSP_EINVALIDARG; - GT_0trace(KFILE_debugMask, GT_6CLASS, - "KFILE_Read: Invalid argument(s)\n"); - } - } else { - cRetVal = E_KFILE_INVALIDHANDLE; - GT_0trace(KFILE_debugMask, GT_6CLASS, - "KFILE_Read: invalid file handle\n"); - } - - return cRetVal; -} - -/* - * ======== KFILE_Seek ======== - * Purpose: - * Sets the file position indicator. NOTE: we don't support seeking - * beyond the boundaries of a file. - */ -s32 KFILE_Seek(struct KFILE_FileObj *hFile, s32 lOffset, s32 cOrigin) -{ - s32 cRetVal = 0; /* 0 for success */ - u32 dwCurPos = 0; - - struct file *fileDesc = NULL; - - GT_3trace(KFILE_debugMask, GT_ENTER, "KFILE_Seek: hFile 0x%x, " - "lOffset 0x%x, cOrigin 0x%x\n", - hFile, lOffset, cOrigin); - - /* check for valid file handle */ - if (MEM_IsValidHandle(hFile, SIGNATURE)) { - /* based on the origin flag, move the internal pointer */ - - fileDesc = hFile->fileDesc; - switch (cOrigin) { - case KFILE_SEEK_SET: - dwCurPos = hFile->fileDesc->f_op->llseek(hFile-> - fileDesc, lOffset, SEEK_SET); - cRetVal = ((dwCurPos >= 0) ? 0 : E_KFILE_ERROR); - break; - - case KFILE_SEEK_CUR: - dwCurPos = hFile->fileDesc->f_op->llseek(hFile-> - fileDesc, lOffset, SEEK_CUR); - cRetVal = ((dwCurPos >= 0) ? 0 : E_KFILE_ERROR); - break; - case KFILE_SEEK_END: - dwCurPos = hFile->fileDesc->f_op->llseek(hFile-> - fileDesc, lOffset, SEEK_END); - cRetVal = ((dwCurPos >= 0) ? 0 : E_KFILE_ERROR); - break; - default: - cRetVal = E_KFILE_BADORIGINFLAG; - GT_0trace(KFILE_debugMask, GT_6CLASS, - "KFILE_Seek:bad origin flag\n"); - break; - } - } else { - cRetVal = E_KFILE_INVALIDHANDLE; - GT_0trace(KFILE_debugMask, GT_6CLASS, - "KFILE_Seek:invalid file handle\n"); - } - return cRetVal; -} - -/* - * ======== KFILE_Tell ======== - * Purpose: - * Reports the current value of the position indicator. We did not - * consider 64 bit long file size, which implies a 4GB file limit - * (2 to 32 power). - */ -s32 KFILE_Tell(struct KFILE_FileObj *hFile) -{ - u32 dwCurPos = 0; - s32 lRetVal = E_KFILE_ERROR; - - GT_1trace(KFILE_debugMask, GT_ENTER, "KFILE_Tell: hFile 0x%x\n", hFile); - - if (MEM_IsValidHandle(hFile, SIGNATURE)) { - - /* Get current position. */ - dwCurPos = hFile->fileDesc->f_op->llseek(hFile->fileDesc, 0, - SEEK_CUR); - if (dwCurPos >= 0) - lRetVal = dwCurPos; - - } else { - lRetVal = E_KFILE_INVALIDHANDLE; - GT_0trace(KFILE_debugMask, GT_6CLASS, - "KFILE_Seek:invalid file handle\n"); - } - return lRetVal; -} - diff --git a/drivers/dsp/bridge/services/services.c b/drivers/dsp/bridge/services/services.c index 7df9920..639b7fb 100644 --- a/drivers/dsp/bridge/services/services.c +++ b/drivers/dsp/bridge/services/services.c @@ -46,7 +46,6 @@ #include <dspbridge/cfg.h> #include <dspbridge/dbg.h> #include <dspbridge/dpc.h> -#include <dspbridge/kfile.h> #include <dspbridge/mem.h> #include <dspbridge/ntfy.h> #include <dspbridge/reg.h> @@ -83,7 +82,6 @@ void SERVICES_Exit(void) SYNC_Exit(); CLK_Exit(); REG_Exit(); - KFILE_Exit(); DPC_Exit(); DBG_Exit(); CFG_Exit(); @@ -103,7 +101,7 @@ void SERVICES_Exit(void) bool SERVICES_Init(void) { bool fInit = true; - bool fCFG, fDBG, fDPC, fKFILE, fMEM; + bool fCFG, fDBG, fDPC, fMEM; bool fREG, fSYNC, fCLK, fNTFY; DBC_Require(cRefs >= 0); @@ -122,12 +120,11 @@ bool SERVICES_Init(void) fCFG = CFG_Init(); fDBG = DBG_Init(); fDPC = DPC_Init(); - fKFILE = KFILE_Init(); fSYNC = SYNC_Init(); fCLK = CLK_Init(); fNTFY = NTFY_Init(); - fInit = fCFG && fDBG && fDPC && fKFILE && + fInit = fCFG && fDBG && fDPC && fMEM && fREG && fSYNC && fCLK; if (!fInit) { @@ -143,9 +140,6 @@ bool SERVICES_Init(void) if (fREG) REG_Exit(); - if (fKFILE) - KFILE_Exit(); - if (fDPC) DPC_Exit(); -- 1.5.6.5 -- 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