userlibandfileserver/fileserver/estart/estart.h
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/userlibandfileserver/fileserver/estart/estart.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,199 @@
+// Copyright (c) 2004-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:
+// f32\estart\estart.h
+// 
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef __ESTART_H__
+#define __ESTART_H__
+
+#include <f32file.h>
+#include <d32locd.h>
+
+GLREF_D TBool gMountRofsAlone;
+GLREF_D TBool gMountComposite;
+
+//#define AUTO_PROFILE
+//#define LOAD_PATCH_LDD
+
+#ifdef _DEBUG
+extern TBool DebugTraceEnabled();
+#define ____IF_DEBUG(s)			if (DebugTraceEnabled()) {s;}
+#else
+#define ____IF_DEBUG(s)
+#endif
+
+#define	DEBUGPRINT(s)			____IF_DEBUG(RDebug::Print(_L(s)))
+#define	DEBUGPRINT1(s,a)		____IF_DEBUG(RDebug::Print(_L(s),(a)))
+#define	DEBUGPRINT2(s,a,b)		____IF_DEBUG(RDebug::Print(_L(s),(a),(b)))
+#define	DEBUGPRINT3(s,a,b,c)	____IF_DEBUG(RDebug::Print(_L(s),(a),(b),(c)))
+#define	DEBUGPRINT4(s,a,b,c,d)	____IF_DEBUG(RDebug::Print(_L(s),(a),(b),(c),(d)))
+#define	DEBUGPRINT5(s,a,b,c,d,e)	____IF_DEBUG(RDebug::Print(_L(s),(a),(b),(c),(d),(e)))
+#define	DEBUGPRINT6(s,a,b,c,d,e,f)	____IF_DEBUG(RDebug::Print(_L(s),(a),(b),(c),(d),(e),(f)))
+#define	DEBUGPRINT7(s,a,b,c,d,e,f,g)	____IF_DEBUG(RDebug::Print(_L(s),(a),(b),(c),(d),(e),(f),(g)))
+
+const TInt KMaxLineLen=256;
+
+#define FS_FORMAT_ALWAYS		0x001	// Format the drive once mounted
+#define FS_FORMAT_COLD			0x002	// Format the drive on a cold boot
+#define FS_FORMAT_CORRUPT 		0x004  	// Format only if corrupt
+#define	FS_DISMNT_CORRUPT		0x008	// Dismount if corrupt
+#define FS_SWAP_CORRUPT			0x010	// Swap drive mappings with another (specified) drive if corrupt
+#define FS_SYNC_DRIVE			0x020	// Mount as a synchronous drive 
+#define FS_SCANDRIVE			0x040	// Run scandrive once mounted (if rugged file system enabled)
+#define FS_COMPOSITE			0x080	// Mount the composite FSY on this drive
+#define FS_NO_MOUNT				0x100	// Add the FSY, map the drive but don't actually mount the drive
+#define FS_ALLOW_REM_ACC  		0x200	// Allow this drive to be accessed directly via a remote host
+#define FS_NOT_RUGGED  			0x400	// The FAT mount is not rugged
+#define FS_SYSTEM_DRIVE			0x800	// The drive is System Drive
+
+const TInt KFsDetectMappingChangeReturnOffset=0x10;
+typedef TInt (*TFsDetect)(RLocalDrive, TInt, TLocalDriveCapsV2&);
+struct SFsMountInfo
+	{
+	const TText* iFsyName;		// Filename of .FSY without extension
+	const TText* iObjName;		// Object name of file system (NULL = same as iFsyName)
+	const TText* iExtName;     	// Name of primary extension if applicable
+	TUint32 iFlags;				// Mount options
+	};
+
+struct SFileSystemInfo
+	{
+	TFsDetect iDetect;			// Detection function
+	SFsMountInfo iFsInfo;
+	};
+
+struct SLocalDriveMappingInfo
+	{
+	TInt iDriveNumber;
+	TInt iLocalDriveNumber;
+	SFsMountInfo iFsInfo;
+	TInt iSpare;
+	TInt iCapsRetCode;
+	TBool iRemovable;
+	};
+	
+class TText8FileReader
+	{
+public:
+	TText8FileReader();
+	~TText8FileReader();
+	TInt Set(RFile& aFile);
+	TInt Read(TPtr& aPtr);	
+public:
+	RFile iFile;
+	TBuf8<KMaxLineLen> iBuf;
+	TInt iBufPos;
+	TText* iFileDataBuf;
+	TInt iFileSize;	
+	};	
+
+
+/**
+A class that implements the behaviour provided by ESTART.
+
+The class defines a number of virtual functions, which may be overridden
+by a customised versions of ESTART.  
+*/
+class TFSStartup
+	{
+public:	
+	TFSStartup();
+	virtual void Init();
+	virtual TInt Run();
+	virtual TInt LocalDriveInit();
+	virtual TInt InitialiseHAL();
+	virtual TInt LoadLocale();
+	virtual TInt StartSystem();
+	virtual TInt ParseCustomMountFlags(TPtrC* aFlagPtr,TUint32& aFlags,TInt& aSpare);
+	virtual TInt HandleCustomMountFlags(TInt& aMountRet,TInt& aFlags,TInt& aSpare,TInt aDrive);
+	virtual TInt DefaultLocalDrive(TInt aLocalDrive);
+	virtual TPtrC LocalDriveMappingFileName();
+    virtual void ShowFormatProgress(TInt aPercent, TInt aDrive);
+	virtual void Close();
+protected:
+	virtual TInt GetStartupMode();
+    virtual TInt GetStartupModeFromFile();
+	virtual TInt SysFileNames(RArray<TPtrC>& aFileNames);
+public:
+	TInt ProcessLocalDriveMappingFile();
+	TInt ParseMappingFileFlags(const TPtrC& aFlagDesc,TUint32& aFlagVar,TInt& aSpare);
+	TInt ParseMappingRecord(TPtr& aTextLine,SLocalDriveMappingInfo& anInfo);
+	void CheckAndReOrderArrayForSwapping(TInt aTotalEntries);
+	void SwapDriveMappings(TInt aCurrentEntry,TInt aTotalEntries);
+	TInt MountFileSystem(SLocalDriveMappingInfo& anInfo);
+	void SetFServLocalDriveMapping();
+	void SwapFServLocalDriveMapping(TInt aFirstDrive,TInt aSecondDrive);
+	TInt InitCompositeFileSystem();
+	void LoadCompositeFileSystem(TInt aDrive);
+	void LoadCompositeFileSystem(SLocalDriveMappingInfo& anInfo);
+	TBool CreateServer(const TDriveList& aDrives, const TDesC& aRootName);
+	TInt FormatDrive(TInt aDrive);
+    TInt MountRemovableDrives();
+    TInt ParseMappingFileLocalDrive(const TPtrC& aDriveDesc,TUint32 (&aDrives)[KMaxLocalDrives],TInt& aCount);
+	void LocalFSInitialisation();
+	TInt SearchForUnusedDriveNumber(TInt& aDrvNum);
+#if !defined(AUTODETECT_DISABLE)
+	virtual TInt GetNextStandardFSInfoEntry(const SFileSystemInfo** anEntry,TInt aPos);
+	TInt DetectFileSystem(TInt aLocalDriveNumber,SLocalDriveMappingInfo& anInfo);
+	TInt DetectAndMountFileSystems();
+#endif		
+#if defined(_LOCKABLE_MEDIA)
+	TInt WriteLocalPwStore(RFile& aFile);
+	TInt InitializeLocalPwStore();	
+#endif
+#ifdef LOAD_PATCH_LDD	
+	void LoadPatchLDDs();
+#endif	
+#ifdef AUTO_PROFILE
+	void StartProfiler();
+#endif
+private:
+	void SetSystemDrive();
+public:
+    TInt iStartupMode;                                              
+	TInt iMuid;                                                     
+	RFs iFs;                                                        
+	TInt iTotalSupportedDrives;                                     
+	TInt iRuggedFileSystem;                                         
+	TUint iRegisteredDriveBitmask;                                  
+	TInt iLocalDriveList[KMaxLocalDrives];                          
+	SLocalDriveMappingInfo iDriveMappingInfo[KMaxLocalDrives];		
+	TInt iDriveSwapCount;                                           
+	TBool iColdStart;                                               
+	TUint iUnmountedDriveBitmask;                                   
+    TInt iMapCount;                                                 
+    TText8FileReader* iMapFile;                                     
+	};
+
+TInt StartSysAgt2(); // launch system agent 2 server
+
+
+#if !defined(AUTODETECT_DISABLE)	
+GLREF_C TInt DetectELocal(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
+GLREF_C TInt DetectIRam(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
+GLREF_C TInt DetectRofs(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
+GLREF_C TInt DetectComposite(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
+GLREF_C TInt DetectEneaLFFS(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
+GLREF_C TInt DetectIso9660(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
+GLREF_C TInt DetectNtfs(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
+GLREF_C TInt DetectFtl(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
+#endif
+
+#endif