baseport/syborg/svphostfs/inc/rsvphostfsdriver.h
author johnathan.white@2718R8BGH51.accenture.com
Mon, 08 Mar 2010 18:45:03 +0000
changeset 46 b6935a90ca64
parent 2 d55eb581a87c
permissions -rw-r--r--
Modify framebuffer and NGA framebuffer to read screen size from board model dtb file. Optimise memory usuage of frame buffer Add example minigui application with hooks to profiler (which writes results to S:\). Modified NGA framebuffer to run its own dfc queue at high priority

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/

#ifndef __RSVPHOSTFSDRIVER_H__
#define __RSVPHOSTFSDRIVER_H__

#include <e32des16.h>

typedef TDes16 THostFileName;

typedef enum 
	{
	EUnknown=0,
	EWindows,
	EUnix,
	EMac,
	} TFileTimeType;

class TSVPHostFsMkDirInfo
	{
public:
	inline TSVPHostFsMkDirInfo() :
		iDrive(0),
		iName(0),
		iLength(0),
		iFlags(0)
		{};
	inline TSVPHostFsMkDirInfo(TUint aDrive, const THostFileName & aName, TUint32 aFlags) :
		iDrive(aDrive),
		iName(aName.Ptr()),
		iLength(aName.Length()),
		iFlags(aFlags)
		{};
public:
	TUint iDrive; 
	const TUint16 * iName;
	TUint32 iLength;
	TUint32 iFlags;
	};

class TSVPHostFsRmDirInfo
	{
public:
	inline TSVPHostFsRmDirInfo() :
		iDrive(0),
		iName(0),
		iLength(0)
		{};
	inline TSVPHostFsRmDirInfo(TUint aDrive, const THostFileName & aName) :
		iDrive(aDrive),
		iName(aName.Ptr()),
		iLength(aName.Length())
		{};
public:
	TUint iDrive; 
	const TUint16 * iName;
	TUint32 iLength;
	};

class TSVPHostFsDeleteInfo
	{
public:
	inline TSVPHostFsDeleteInfo() :
		iDrive(0),
		iName(0),
		iLength(0)
		{};
	inline TSVPHostFsDeleteInfo(TUint aDrive, const THostFileName & aName) :
		iDrive(aDrive),
		iName(aName.Ptr()),
		iLength(aName.Length())
		{};
public:
	TUint iDrive; 
	const TUint16 * iName;
	TUint32 iLength;
	};

class TSVPHostFsRenameInfo
	{
public:
	inline TSVPHostFsRenameInfo() :
		iDrive(0),
		iOldName(0),
		iOldLength(0),
		iNewName(0),
		iNewLength(0)
		{};
	inline TSVPHostFsRenameInfo(TUint aDrive, const THostFileName & aOldName, const THostFileName & aNewName) :
		iDrive(aDrive),
		iOldName(aOldName.Ptr()),
		iOldLength(aOldName.Length()),
		iNewName(aNewName.Ptr()),
		iNewLength(aNewName.Length())
		{};
public:
	TUint iDrive; 
	const TUint16 * iOldName;
	TUint32 iOldLength;
	const TUint16 * iNewName;
	TUint32 iNewLength;
	};

class TSVPHostFsReplaceInfo
	{
public:
	inline TSVPHostFsReplaceInfo() :
		iDrive(0),
		iOldName(0),
		iOldLength(0),
		iNewName(0),
		iNewLength(0)
		{};
	inline TSVPHostFsReplaceInfo(TUint aDrive, const THostFileName & aOldName, const THostFileName & aNewName) :
		iDrive(aDrive),
		iOldName(aOldName.Ptr()),
		iOldLength(aOldName.Length()),
		iNewName(aNewName.Ptr()),
		iNewLength(aNewName.Length())
		{};
public:
	TUint iDrive; 
	const TUint16 * iOldName;
	TUint32 iOldLength;
	const TUint16 * iNewName;
	TUint32 iNewLength;
	};

class TSVPHostFsEntryInfo
	{
public:
	inline TSVPHostFsEntryInfo() :
		iDrive(0),
		iName(0),
		iLength(0),
		iAtt(0),
		iModified(0),
		iSize(0),
		iTimeType(EUnknown)
		{};
	inline TSVPHostFsEntryInfo(TUint aDrive, const THostFileName & aName) :
		iDrive(aDrive),
		iName(aName.Ptr()),
		iLength(aName.Length()),
		iAtt(0),
		iModified(0),
		iSize(0),
		iTimeType(EUnknown)
		{};
public:
	TUint iDrive; 
	const TUint16 * iName;
	TUint32 iLength;
	TUint iAtt;
	TUint32 iModified; // time in seconds since the epoc
	TInt iSize;
	TFileTimeType iTimeType;
	char iHostName[KMaxFileName];
};

class TSVPHostFsSetEntryInfo
	{
public:
	inline TSVPHostFsSetEntryInfo() :
		iDrive(0),
		iName(0),
		iModified(0),
		iNewAtt(0),
		iTimeType(EUnknown)
		{};
	inline TSVPHostFsSetEntryInfo(TUint aDrive, const THostFileName & aName, TUint32 aModified, TUint aNewAtt) :
		iDrive(aDrive),
		iName(aName.Ptr()),
		iModified(aModified),
		iNewAtt(aNewAtt),
		iTimeType(EUnknown)
		{};
public:
	TUint iDrive; 
	const TUint16 *iName;
	TUint32 iModified; // time in seconds since the epoc
	TUint iNewAtt;
	TFileTimeType iTimeType;
	};

class TSVPHostFsDirOpenInfo
	{
public:
	inline TSVPHostFsDirOpenInfo() :
		iDrive(0),
		iName(0),
		iLength(0),
		iHandle(0)
		{};
inline TSVPHostFsDirOpenInfo(TUint aDrive, const THostFileName & aName) :
		iDrive(aDrive),
		iName(aName.Ptr()),
		iLength(aName.Length()),
		iHandle(0)
		{};
public:
	TUint iDrive; 
	const TUint16 * iName;
	TUint32 iLength;
	TUint32 iHandle;
	};

#define SVP_HOST_FS_INVALID_FILE_HANDLE -1
class TSVPHostFsFileOpenInfo
	{
public:
	inline TSVPHostFsFileOpenInfo() :
		iDrive(0),
		iName(0),
		iLength(0), // of file name
		iMode(0),
		iOpen(0),
		iAtt(0),
		iModified(0), // time in seconds since the epoc
		iSize(0),     // of file
		iTimeType(EUnknown),
		iHandle(SVP_HOST_FS_INVALID_FILE_HANDLE)
		{};
	inline TSVPHostFsFileOpenInfo(TUint aDrive, const THostFileName & aName, TUint32 aMode, TUint32 anOpen) :
		iDrive(aDrive),
		iName(aName.Ptr()),
		iLength(aName.Length()),
		iMode(aMode),
		iOpen(anOpen),
		iAtt(0),
		iModified(0), // time in seconds since the epoc
		iSize(0),     // of file
		iTimeType(EUnknown),
		iHandle(SVP_HOST_FS_INVALID_FILE_HANDLE)
		{};
public:
	TUint iDrive; 
	const TUint16 * iName;
	TUint32 iLength;
	TUint32 iMode;
	TUint32 iOpen;
	TUint iAtt;
	TUint32 iModified; // time in seconds since the epoc
	TInt iSize;
	TFileTimeType iTimeType;
	TInt iHandle;
	};

class TSVPHostFsFileReadInfo
	{
public:
	inline TSVPHostFsFileReadInfo() :
		iDrive(0),
		iHandle(0),
		iLength(0),
		iPos(0),
		iBuf(0)
		{};
	inline TSVPHostFsFileReadInfo(TUint aDrive, TUint aHandle,TInt aLength,TInt aPos, char * aBuf):
		iDrive(aDrive),
		iHandle(aHandle),
		iLength(aLength),
		iPos(aPos),
		iBuf(aBuf)
		{};
public:
	TUint iDrive; 
	TUint iHandle;
	TInt iLength;
	TInt iPos;
	char * iBuf;
	};	

class TSVPHostFsFileWriteInfo
	{
public:
	inline TSVPHostFsFileWriteInfo() :
		iDrive(0),
		iHandle(0),
		iLength(0),
		iPos(0),
		iBuf(0)
		{};
	inline TSVPHostFsFileWriteInfo(TUint aDrive, TUint aHandle,TInt aLength,TInt aPos, char * aBuf):
		iDrive(aDrive),
		iHandle(aHandle),
		iLength(aLength),
		iPos(aPos),
		iBuf(aBuf)
		{};
public:
	TUint iDrive; 
	TUint iHandle;
	TInt iLength;
	TInt iPos;
	char * iBuf;
	};

class TSVPHostFsFileSetSizeInfo
	{
public:
	inline TSVPHostFsFileSetSizeInfo() :
		iDrive(0),
		iHandle(0),
		iLength(0)
		{};
	inline TSVPHostFsFileSetSizeInfo(TUint aDrive, TUint aHandle, TInt aLength) :
		iDrive(aDrive),
		iHandle(aHandle),
		iLength(aLength)
		{};
public:
	TUint iDrive; 
	TUint iHandle;
	TInt iLength;
	};

class TSVPHostFsDirReadInfo
{
public:
	inline TSVPHostFsDirReadInfo() :
		iDrive(0),
		iHandle(0),
		iLength(0),
		iAtt(0),
		iModified(0),
		iSize(0),
		iTimeType(EUnknown)
		{};
	inline TSVPHostFsDirReadInfo(TUint aDrive, TUint32 aHandle) :
		iDrive(aDrive),
		iHandle(aHandle),
		iLength(-1),
		iAtt(0),
		iModified(666),
		iSize(-1),
		iTimeType(EUnknown)
		{};
public:
	TUint iDrive; 
	TUint32 iHandle;
	TInt iLength;
	TUint16 iName[KMaxPath];
	TUint iAtt;
	TUint32 iModified; // time in seconds since the epoc
	TInt iSize;
	TFileTimeType iTimeType;
	};

class TCapsSVPHostFsDriver
	{
public:
	TVersion	iVersion;
	};

_LIT(KSVPHostFsDriverName,"SVP Host Filesystem Driver");
_LIT(KSVPHostFsDriverLDD, "svphostfsdriver.ldd");

// Version information
const TInt KMajorVersionNumber=0;
const TInt KMinorVersionNumber=0;
const TInt KBuildVersionNumber=1;

// keep in sync with the definitions in QEMU/hw/svphostfs.c 
#define LOWEST_DRIVE 'A'
#define HIGHEST_DRIVE 'Z'
#define DRIVE_MAP_SIZE (HIGHEST_DRIVE - LOWEST_DRIVE + 1)

class RSVPHostFsDriver : public RBusLogicalChannel
	{
public:

	enum TControl
		{
		EDummu = 0,

		// Codes for CMountCB operations
		EMkDir,
		ERmDir,
		EDelete,
		ERename,
		EReplace,
		EReadUid,
		EEntry,
		ESetEntry,
		EFileOpen,
		EDirOpen,
		
		// Code for CFileCB operations
		EFileClose, 
		EFileRead,
		EFileWrite,
		EFileSetSize,
		EFileFlushAll,

		// Code for CDirCB operations
		EDirClose, 
		EDirRead,

		// Device ops
		EGetDeviceID,
		EGetDriveMap,

		};
	
		
public:
#ifndef __KERNEL_MODE__  // don't need to see these in the driver
	TInt Open();
	TInt MkDir(TSVPHostFsMkDirInfo& aInfo);
	TInt RmDir(TSVPHostFsRmDirInfo& aInfo);
	TInt Delete(TSVPHostFsDeleteInfo& aInfo);
	TInt Rename(TSVPHostFsRenameInfo& aInfo);
	TInt Replace(TSVPHostFsReplaceInfo& aInfo);
	TInt ReadUid(const TDesC& aName,TEntry& anEntry);
	TInt Entry(TSVPHostFsEntryInfo& aInfo);
	TInt SetEntry(TSVPHostFsSetEntryInfo &aInfo);
	TInt FileOpen(TSVPHostFsFileOpenInfo &aInfo);
	TInt DirOpen(TSVPHostFsDirOpenInfo& aInfo);
	TInt FileClose(TUint32 aDrive, TUint32 aHandle);
	TInt FileRead(TSVPHostFsFileReadInfo& aInfo);		
	TInt FileWrite(TSVPHostFsFileWriteInfo& aInfo);
	TInt FileSetSize(TSVPHostFsFileSetSizeInfo &aInfo);
	TInt FileSetEntry(TSVPHostFsSetEntryInfo &aInfo);
	TInt FlushData(TUint32 aDrive);
	TInt FlushAll(TUint32 aDrive);

	TInt DirClose(TUint32 aDrive, TUint32 aHandle);
	TInt DirRead(TSVPHostFsDirReadInfo& aInfo);

	TUint32 GetDeviceID(TUint32 aDrive);

	TInt GetDriveMap(TUint32 * aMap);

private:
	inline TInt DoSVPRequest(TInt aReqNo, TAny * a1) 
		{
		TRequestStatus status;
		DoRequest(aReqNo, status, a1);
		User::WaitForRequest(status);
		return status.Int();
		}

	inline TInt DoSVPRequest(TInt aReqNo, TAny * a1, TAny * a2) 
		{
		TRequestStatus status;
		DoRequest(aReqNo, status, a1, a2);
		User::WaitForRequest(status);
		return status.Int();
		}
#endif
	};

#endif // __rsvphostfsdriver_H__