os/kernelhwsrv/userlibandfileserver/fileserver/estart/estart.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of the License "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 // f32\estart\estart.h
    15 // 
    16 //
    17 
    18 /**
    19  @file
    20  @internalComponent
    21 */
    22 
    23 #ifndef __ESTART_H__
    24 #define __ESTART_H__
    25 
    26 #include <f32file.h>
    27 #include <d32locd.h>
    28 
    29 GLREF_D TBool gMountRofsAlone;
    30 GLREF_D TBool gMountComposite;
    31 
    32 //#define AUTO_PROFILE
    33 //#define LOAD_PATCH_LDD
    34 
    35 #ifdef _DEBUG
    36 extern TBool DebugTraceEnabled();
    37 #define ____IF_DEBUG(s)			if (DebugTraceEnabled()) {s;}
    38 #else
    39 #define ____IF_DEBUG(s)
    40 #endif
    41 
    42 #define	DEBUGPRINT(s)			____IF_DEBUG(RDebug::Print(_L(s)))
    43 #define	DEBUGPRINT1(s,a)		____IF_DEBUG(RDebug::Print(_L(s),(a)))
    44 #define	DEBUGPRINT2(s,a,b)		____IF_DEBUG(RDebug::Print(_L(s),(a),(b)))
    45 #define	DEBUGPRINT3(s,a,b,c)	____IF_DEBUG(RDebug::Print(_L(s),(a),(b),(c)))
    46 #define	DEBUGPRINT4(s,a,b,c,d)	____IF_DEBUG(RDebug::Print(_L(s),(a),(b),(c),(d)))
    47 #define	DEBUGPRINT5(s,a,b,c,d,e)	____IF_DEBUG(RDebug::Print(_L(s),(a),(b),(c),(d),(e)))
    48 #define	DEBUGPRINT6(s,a,b,c,d,e,f)	____IF_DEBUG(RDebug::Print(_L(s),(a),(b),(c),(d),(e),(f)))
    49 #define	DEBUGPRINT7(s,a,b,c,d,e,f,g)	____IF_DEBUG(RDebug::Print(_L(s),(a),(b),(c),(d),(e),(f),(g)))
    50 
    51 const TInt KMaxLineLen=256;
    52 
    53 #define FS_FORMAT_ALWAYS		0x001	// Format the drive once mounted
    54 #define FS_FORMAT_COLD			0x002	// Format the drive on a cold boot
    55 #define FS_FORMAT_CORRUPT 		0x004  	// Format only if corrupt
    56 #define	FS_DISMNT_CORRUPT		0x008	// Dismount if corrupt
    57 #define FS_SWAP_CORRUPT			0x010	// Swap drive mappings with another (specified) drive if corrupt
    58 #define FS_SYNC_DRIVE			0x020	// Mount as a synchronous drive 
    59 #define FS_SCANDRIVE			0x040	// Run scandrive once mounted (if rugged file system enabled)
    60 #define FS_COMPOSITE			0x080	// Mount the composite FSY on this drive
    61 #define FS_NO_MOUNT				0x100	// Add the FSY, map the drive but don't actually mount the drive
    62 #define FS_ALLOW_REM_ACC  		0x200	// Allow this drive to be accessed directly via a remote host
    63 #define FS_NOT_RUGGED  			0x400	// The FAT mount is not rugged
    64 #define FS_SYSTEM_DRIVE			0x800	// The drive is System Drive
    65 
    66 const TInt KFsDetectMappingChangeReturnOffset=0x10;
    67 typedef TInt (*TFsDetect)(RLocalDrive, TInt, TLocalDriveCapsV2&);
    68 struct SFsMountInfo
    69 	{
    70 	const TText* iFsyName;		// Filename of .FSY without extension
    71 	const TText* iObjName;		// Object name of file system (NULL = same as iFsyName)
    72 	const TText* iExtName;     	// Name of primary extension if applicable
    73 	TUint32 iFlags;				// Mount options
    74 	};
    75 
    76 struct SFileSystemInfo
    77 	{
    78 	TFsDetect iDetect;			// Detection function
    79 	SFsMountInfo iFsInfo;
    80 	};
    81 
    82 struct SLocalDriveMappingInfo
    83 	{
    84 	TInt iDriveNumber;
    85 	TInt iLocalDriveNumber;
    86 	SFsMountInfo iFsInfo;
    87 	TInt iSpare;
    88 	TInt iCapsRetCode;
    89 	TBool iRemovable;
    90 	};
    91 	
    92 class TText8FileReader
    93 	{
    94 public:
    95 	TText8FileReader();
    96 	~TText8FileReader();
    97 	TInt Set(RFile& aFile);
    98 	TInt Read(TPtr& aPtr);	
    99 public:
   100 	RFile iFile;
   101 	TBuf8<KMaxLineLen> iBuf;
   102 	TInt iBufPos;
   103 	TText* iFileDataBuf;
   104 	TInt iFileSize;	
   105 	};	
   106 
   107 
   108 /**
   109 A class that implements the behaviour provided by ESTART.
   110 
   111 The class defines a number of virtual functions, which may be overridden
   112 by a customised versions of ESTART.  
   113 */
   114 class TFSStartup
   115 	{
   116 public:	
   117 	TFSStartup();
   118 	virtual void Init();
   119 	virtual TInt Run();
   120 	virtual TInt LocalDriveInit();
   121 	virtual TInt InitialiseHAL();
   122 	virtual TInt LoadLocale();
   123 	virtual TInt StartSystem();
   124 	virtual TInt ParseCustomMountFlags(TPtrC* aFlagPtr,TUint32& aFlags,TInt& aSpare);
   125 	virtual TInt HandleCustomMountFlags(TInt& aMountRet,TInt& aFlags,TInt& aSpare,TInt aDrive);
   126 	virtual TInt DefaultLocalDrive(TInt aLocalDrive);
   127 	virtual TPtrC LocalDriveMappingFileName();
   128     virtual void ShowFormatProgress(TInt aPercent, TInt aDrive);
   129 	virtual void Close();
   130 protected:
   131 	virtual TInt GetStartupMode();
   132     virtual TInt GetStartupModeFromFile();
   133 	virtual TInt SysFileNames(RArray<TPtrC>& aFileNames);
   134 public:
   135 	TInt ProcessLocalDriveMappingFile();
   136 	TInt ParseMappingFileFlags(const TPtrC& aFlagDesc,TUint32& aFlagVar,TInt& aSpare);
   137 	TInt ParseMappingRecord(TPtr& aTextLine,SLocalDriveMappingInfo& anInfo);
   138 	void CheckAndReOrderArrayForSwapping(TInt aTotalEntries);
   139 	void SwapDriveMappings(TInt aCurrentEntry,TInt aTotalEntries);
   140 	TInt MountFileSystem(SLocalDriveMappingInfo& anInfo);
   141 	void SetFServLocalDriveMapping();
   142 	void SwapFServLocalDriveMapping(TInt aFirstDrive,TInt aSecondDrive);
   143 	TInt InitCompositeFileSystem();
   144 	void LoadCompositeFileSystem(TInt aDrive);
   145 	void LoadCompositeFileSystem(SLocalDriveMappingInfo& anInfo);
   146 	TBool CreateServer(const TDriveList& aDrives, const TDesC& aRootName);
   147 	TInt FormatDrive(TInt aDrive);
   148     TInt MountRemovableDrives();
   149     TInt ParseMappingFileLocalDrive(const TPtrC& aDriveDesc,TUint32 (&aDrives)[KMaxLocalDrives],TInt& aCount);
   150 	void LocalFSInitialisation();
   151 	TInt SearchForUnusedDriveNumber(TInt& aDrvNum);
   152 #if !defined(AUTODETECT_DISABLE)
   153 	virtual TInt GetNextStandardFSInfoEntry(const SFileSystemInfo** anEntry,TInt aPos);
   154 	TInt DetectFileSystem(TInt aLocalDriveNumber,SLocalDriveMappingInfo& anInfo);
   155 	TInt DetectAndMountFileSystems();
   156 #endif		
   157 #if defined(_LOCKABLE_MEDIA)
   158 	TInt WriteLocalPwStore(RFile& aFile);
   159 	TInt InitializeLocalPwStore();	
   160 #endif
   161 #ifdef LOAD_PATCH_LDD	
   162 	void LoadPatchLDDs();
   163 #endif	
   164 #ifdef AUTO_PROFILE
   165 	void StartProfiler();
   166 #endif
   167 private:
   168 	void SetSystemDrive();
   169 public:
   170     TInt iStartupMode;                                              
   171 	TInt iMuid;                                                     
   172 	RFs iFs;                                                        
   173 	TInt iTotalSupportedDrives;                                     
   174 	TInt iRuggedFileSystem;                                         
   175 	TUint iRegisteredDriveBitmask;                                  
   176 	TInt iLocalDriveList[KMaxLocalDrives];                          
   177 	SLocalDriveMappingInfo iDriveMappingInfo[KMaxLocalDrives];		
   178 	TInt iDriveSwapCount;                                           
   179 	TBool iColdStart;                                               
   180 	TUint iUnmountedDriveBitmask;                                   
   181     TInt iMapCount;                                                 
   182     TText8FileReader* iMapFile;                                     
   183 	};
   184 
   185 TInt StartSysAgt2(); // launch system agent 2 server
   186 
   187 
   188 #if !defined(AUTODETECT_DISABLE)	
   189 GLREF_C TInt DetectELocal(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
   190 GLREF_C TInt DetectIRam(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
   191 GLREF_C TInt DetectRofs(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
   192 GLREF_C TInt DetectComposite(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
   193 GLREF_C TInt DetectEneaLFFS(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
   194 GLREF_C TInt DetectIso9660(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
   195 GLREF_C TInt DetectNtfs(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
   196 GLREF_C TInt DetectFtl(RLocalDrive ld, TInt cr, TLocalDriveCapsV2& caps);
   197 #endif
   198 
   199 #endif