diff -r f6d3d9676ee4 -r d63d727ee0a6 userlibandfileserver/fileserver/sfat/sl_disk.cpp --- a/userlibandfileserver/fileserver/sfat/sl_disk.cpp Tue Dec 08 08:11:42 2009 +0100 +++ b/userlibandfileserver/fileserver/sfat/sl_disk.cpp Mon Jan 04 12:25:19 2010 +0100 @@ -15,6 +15,14 @@ // // +//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +//!! +//!! WARNING!! DO NOT edit this file !! '\sfat' component is obsolete and is not being used. '\sfat32'replaces it +//!! +//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + #include "sl_disk.h" #include "sl_cache.h" #include "sl_dir_cache.h" @@ -72,9 +80,9 @@ TInt CRawDisk::GetLastErrorInfo(TDes8& /*aErrorInfo*/) const - { - return KErrNotSupported; - } + { + return KErrNotSupported; + } //################################################################################################################################ //## CAtaDisk class implementation @@ -82,8 +90,8 @@ CAtaDisk::CAtaDisk(CFatMountCB& aFatMount) :CRawDisk(aFatMount), iDrive(aFatMount.DriveInterface()) - { - } + { + } CAtaDisk::~CAtaDisk() { @@ -102,8 +110,8 @@ @return pointer to the constructed object. */ CAtaDisk* CAtaDisk::NewL(CFatMountCB& aFatMount) - { - __PRINT1(_L("CAtaDisk::NewL() drv:%d"), aFatMount.DriveNumber()); + { + __PRINT1(_L("CAtaDisk::NewL() drv:%d"), aFatMount.DriveNumber()); CAtaDisk* pSelf = new (ELeave) CAtaDisk(aFatMount); @@ -114,8 +122,8 @@ CleanupStack::Pop(); - return pSelf; - } + return pSelf; + } //------------------------------------------------------------------------------------- @@ -155,43 +163,43 @@ //=========================== create Demand Paging type of the directory cache // initialize cache memory manager as all file systems have mounted by now - if(CCacheMemoryManagerFactory::CacheMemoryManager()) - { - // Note: the configuration data of min and max cache size are aligned with the memory size it - // occupies in kernel as we are using demand paging subsystem for dynamic cache size support. - // Therefore, they are refered as 'Mem Size' in following calculation. - // However, 'Data Size' refers to the logical size of a page, i.e. the actual data size each page - // contains. - // The constraints we have to consider when setting up the dynamic cache: - // 1. each page's data size is aligned with cluster size, unless cluster size is bigger than - // the default maximum page size allowed (typically 32 KB). - // 2. if page's data size is smaller than segment size (typically 4 KB), i.e. the unit size of - // demand paging subsystem's page management, we will still use up the whole segment for - // that page. - // 3. the default min and max cache's memory size is pre-defined in fat_config.cpp file. - // (see KDef_DynamicDirCacheMin & KDef_DynamicDirCacheMax). + if(CCacheMemoryManagerFactory::CacheMemoryManager()) + { + // Note: the configuration data of min and max cache size are aligned with the memory size it + // occupies in kernel as we are using demand paging subsystem for dynamic cache size support. + // Therefore, they are refered as 'Mem Size' in following calculation. + // However, 'Data Size' refers to the logical size of a page, i.e. the actual data size each page + // contains. + // The constraints we have to consider when setting up the dynamic cache: + // 1. each page's data size is aligned with cluster size, unless cluster size is bigger than + // the default maximum page size allowed (typically 32 KB). + // 2. if page's data size is smaller than segment size (typically 4 KB), i.e. the unit size of + // demand paging subsystem's page management, we will still use up the whole segment for + // that page. + // 3. the default min and max cache's memory size is pre-defined in fat_config.cpp file. + // (see KDef_DynamicDirCacheMin & KDef_DynamicDirCacheMax). - // calculate page data size (logical view of page size) - const TUint32 DefMaxCachePageLog2 = iFatMount->FatConfig().DynamicDirCacheMaxPageSizeLog2(); - const TUint32 PageDataSizeLog2 = clustSizeLog2 < DefMaxCachePageLog2 ? clustSizeLog2 : DefMaxCachePageLog2; - - // calculate page number, based on memory size we have reserved - const TUint32 SegmentSizeLog2 = CCacheMemoryManagerFactory::CacheMemoryManager()->SegmentSizeInBytesLog2(); - const TUint32 PageMemSizeLog2 = PageDataSizeLog2 < SegmentSizeLog2 ? SegmentSizeLog2 : PageDataSizeLog2; - TUint32 CacheSizeMinInPages = iFatMount->FatConfig().DynamicDirCacheSizeMin() >> PageMemSizeLog2; - TUint32 CacheSizeMaxInPages = iFatMount->FatConfig().DynamicDirCacheSizeMax() >> PageMemSizeLog2; + // calculate page data size (logical view of page size) + const TUint32 DefMaxCachePageLog2 = iFatMount->FatConfig().DynamicDirCacheMaxPageSizeLog2(); + const TUint32 PageDataSizeLog2 = clustSizeLog2 < DefMaxCachePageLog2 ? clustSizeLog2 : DefMaxCachePageLog2; + + // calculate page number, based on memory size we have reserved + const TUint32 SegmentSizeLog2 = CCacheMemoryManagerFactory::CacheMemoryManager()->SegmentSizeInBytesLog2(); + const TUint32 PageMemSizeLog2 = PageDataSizeLog2 < SegmentSizeLog2 ? SegmentSizeLog2 : PageDataSizeLog2; + TUint32 CacheSizeMinInPages = iFatMount->FatConfig().DynamicDirCacheSizeMin() >> PageMemSizeLog2; + TUint32 CacheSizeMaxInPages = iFatMount->FatConfig().DynamicDirCacheSizeMax() >> PageMemSizeLog2; - // cache memory client is connected via name - TBuf<0x20> clientName = _L("CACHE_MEM_CLIENT:"); - clientName.Append('A'+iFatMount->DriveNumber()); + // cache memory client is connected via name + TBuf<0x20> clientName = _L("CACHE_MEM_CLIENT:"); + clientName.Append('A'+iFatMount->DriveNumber()); - TRAPD(err, ipDirCache = CDynamicDirCache::NewL(iDrive, CacheSizeMinInPages, CacheSizeMaxInPages, PageDataSizeLog2, clientName)); - if (err == KErrNone) - { - __PRINT4(_L("CDynamicDirCache::NewL(drv:%C, minPageNum:%u, maxPageNum:%u, pageDataSize:%u)\n"), 'A'+iFatMount->DriveNumber(), CacheSizeMinInPages, CacheSizeMaxInPages, 1<DriveNumber(), CacheSizeMinInPages, CacheSizeMaxInPages, 1<ReadL(aPos, aLength, aDes); - } + } //------------------------------------------------------------------------------------- @@ -266,10 +274,10 @@ @leave on error */ void CAtaDisk::WriteCachedL(TInt64 aPos, const TDesC8& aDes) - { + { __PRINT3(_L("CAtaDisk::WriteL() pos:%u:%u, len:%u"), I64HIGH(aPos), I64LOW(aPos), aDes.Size()); iUidCache->WriteL(aPos, aDes); - } + } //------------------------------------------------------------------------------------- @@ -280,18 +288,18 @@ @param aPos absolute media position @param aLength how many bytes to read - @param aTrg Pointer to the data descriptor, i.e. (const TAny*)(&TDes8) - @param aMessage Refrence to server message from request - @param anOffset Offset into read data to write + @param aTrg Pointer to the data descriptor, i.e. (const TAny*)(&TDes8) + @param aMessage Refrence to server message from request + @param anOffset Offset into read data to write @leave on error */ void CAtaDisk::ReadL(TInt64 aPos,TInt aLength,const TAny* aTrg,const RMessagePtr2 &aMessage,TInt anOffset) const - { + { - __PRINT4(_L("CAtaDisk::ReadL() pos:%u:%u, len:%u, offset:%u"), I64HIGH(aPos), I64LOW(aPos), aLength, anOffset); - User::LeaveIfError(iDrive.ReadNonCritical(aPos,aLength,aTrg,aMessage,anOffset)); - } + __PRINT4(_L("CAtaDisk::ReadL() pos:%u:%u, len:%u, offset:%u"), I64HIGH(aPos), I64LOW(aPos), aLength, anOffset); + User::LeaveIfError(iDrive.ReadNonCritical(aPos,aLength,aTrg,aMessage,anOffset)); + } //------------------------------------------------------------------------------------- @@ -301,19 +309,19 @@ This method shall invalidate some data caches to keep them in synch with the media. - @param aPos Media position in bytes - @param aLength Length in bytes of write - @param aTrg Pointer to the data descriptor, i.e. (const TAny*)(&TDes8) - @param aMessage Refrence to server message from request, contains data - @param anOffset Offset into write data to use in write + @param aPos Media position in bytes + @param aLength Length in bytes of write + @param aTrg Pointer to the data descriptor, i.e. (const TAny*)(&TDes8) + @param aMessage Refrence to server message from request, contains data + @param anOffset Offset into write data to use in write @leave on error */ void CAtaDisk::WriteL(TInt64 aPos,TInt aLength,const TAny* aSrc,const RMessagePtr2 &aMessage,TInt anOffset) - { + { __PRINT4(_L("CAtaDisk::WriteL() pos:%u:%u, len:%u, offset:%u"), I64HIGH(aPos), I64LOW(aPos), aLength, anOffset); - //-- write data to the media directly + //-- write data to the media directly User::LeaveIfError(iDrive.WriteNonCritical(aPos,aLength,aSrc,aMessage,anOffset)); //-- we need to invalidate UID cache page that corresponds to aPos (if any). This is UID caching specific. UID is stored in the first few bytes of @@ -324,15 +332,15 @@ //-- invalidate affected(if any) part of the FAT cache in the case if someone used to write data to FAT area, which usually do not happen iFatMount->FAT().InvalidateCacheL(aPos,aLength); - } + } //------------------------------------------------------------------------------------- /** Get information for last disk error */ TInt CAtaDisk::GetLastErrorInfo(TDes8& aErrorInfo) const - { - return iDrive.GetLastErrorInfo(aErrorInfo); - } + { + return iDrive.GetLastErrorInfo(aErrorInfo); + } //------------------------------------------------------------------------------------- @@ -367,9 +375,9 @@ @return pointer to the constructed object. */ CRamDisk* CRamDisk::NewL(CFatMountCB& aFatMount) - { + { __PRINT1(_L("CRamDisk::NewL() drv:%d"), aFatMount.DriveNumber()); - CRamDisk* pSelf = new(ELeave)CRamDisk(aFatMount); + CRamDisk* pSelf = new(ELeave)CRamDisk(aFatMount); CleanupStack::PushL(pSelf); @@ -377,13 +385,13 @@ CleanupStack::Pop(); - return pSelf; - } + return pSelf; + } CRamDisk::CRamDisk(CFatMountCB& aFatMount) - :CRawDisk(aFatMount) + :CRawDisk(aFatMount) { - } + } //------------------------------------------------------------------------------------- @@ -410,61 +418,61 @@ /** @return the start address of the Ram Drive in low memory */ TUint8* CRamDisk::RamDiskBase() const - { - return iRamDiskBase; - } + { + return iRamDiskBase; + } //------------------------------------------------------------------------------------- // // Read aLength of data from the disk // void CRamDisk::ReadCachedL(TInt64 aPos,TInt aLength,TDes8& aDes) const - { - - __PRINT3(_L("CRamDisk::ReadL Base 0x%x Pos 0x%x, Len %d"),RamDiskBase(),I64LOW(aPos),aLength); - __ASSERT_ALWAYS((aPos+aLength<=I64INT(iFatMount->Size())) && (aLength>=0),User::Leave(KErrCorrupt)); - Mem::Copy((TUint8*)aDes.Ptr(),RamDiskBase()+I64LOW(aPos),aLength); - aDes.SetLength(aLength); - } + { + + __PRINT3(_L("CRamDisk::ReadL Base 0x%x Pos 0x%x, Len %d"),RamDiskBase(),I64LOW(aPos),aLength); + __ASSERT_ALWAYS((aPos+aLength<=I64INT(iFatMount->Size())) && (aLength>=0),User::Leave(KErrCorrupt)); + Mem::Copy((TUint8*)aDes.Ptr(),RamDiskBase()+I64LOW(aPos),aLength); + aDes.SetLength(aLength); + } //------------------------------------------------------------------------------------- // // Write aLength of data to the disk // void CRamDisk::WriteCachedL(TInt64 aPos,const TDesC8& aDes) - { + { - __PRINT3(_L("CRamDisk::WriteL Base 0x%x Pos 0x%x, Len %d"),RamDiskBase(),aPos,aDes.Length()); - __ASSERT_ALWAYS(aPos+aDes.Length()<=I64INT(iFatMount->Size()),User::Leave(KErrCorrupt)); - Mem::Copy(RamDiskBase()+I64LOW(aPos),(TUint8*)aDes.Ptr(),aDes.Length()); - } - + __PRINT3(_L("CRamDisk::WriteL Base 0x%x Pos 0x%x, Len %d"),RamDiskBase(),aPos,aDes.Length()); + __ASSERT_ALWAYS(aPos+aDes.Length()<=I64INT(iFatMount->Size()),User::Leave(KErrCorrupt)); + Mem::Copy(RamDiskBase()+I64LOW(aPos),(TUint8*)aDes.Ptr(),aDes.Length()); + } + //------------------------------------------------------------------------------------- // // Read from ramDrive into thread relative descriptor // void CRamDisk::ReadL(TInt64 aPos,TInt aLength,const TAny* /*aTrg*/,const RMessagePtr2 &aMessage,TInt anOffset) const - { - __PRINT2(_L("CRamDisk::ReadL TAny* Pos 0x%x, Len %d"),aPos,aLength); - __ASSERT_ALWAYS((aPos+aLength<=I64INT(iFatMount->Size())) && (aLength>=0),User::Leave(KErrCorrupt)); - TUint8* pos=RamDiskBase()+I64LOW(aPos); - TPtrC8 buf(pos,aLength); - aMessage.WriteL(0,buf,anOffset); - } + { + __PRINT2(_L("CRamDisk::ReadL TAny* Pos 0x%x, Len %d"),aPos,aLength); + __ASSERT_ALWAYS((aPos+aLength<=I64INT(iFatMount->Size())) && (aLength>=0),User::Leave(KErrCorrupt)); + TUint8* pos=RamDiskBase()+I64LOW(aPos); + TPtrC8 buf(pos,aLength); + aMessage.WriteL(0,buf,anOffset); + } //------------------------------------------------------------------------------------- // // Write from thread relative descriptor into ramDrive // void CRamDisk::WriteL(TInt64 aPos,TInt aLength,const TAny* /*aSrc*/,const RMessagePtr2 &aMessage,TInt anOffset) - { - __PRINT2(_L("CRamDisk::WriteL TAny* Pos 0x%x, Len %d"),aPos,aLength); - __ASSERT_ALWAYS(aPos+aLength<=I64INT(iFatMount->Size()),User::Leave(KErrCorrupt)); - TUint8* pos=RamDiskBase()+I64LOW(aPos); - TPtr8 buf(pos,aLength); - aMessage.ReadL(0,buf,anOffset); - } + { + __PRINT2(_L("CRamDisk::WriteL TAny* Pos 0x%x, Len %d"),aPos,aLength); + __ASSERT_ALWAYS(aPos+aLength<=I64INT(iFatMount->Size()),User::Leave(KErrCorrupt)); + TUint8* pos=RamDiskBase()+I64LOW(aPos); + TPtr8 buf(pos,aLength); + aMessage.ReadL(0,buf,anOffset); + }