// Copyright (c) 2008-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\sfat\fat_config.inl
// FAT fsy configurator
// 
//

/**
 @file
 @internalTechnology
*/

#ifndef FAT_CONFIGURATOR_INL
#define FAT_CONFIGURATOR_INL

//-----------------------------------------------------------------------------
/**
    Meaning of this parameter:
    if not 0, ScanDrive will not run on finalised FAT volume, i.e. that has "CleanShutdown" flag set in FAT[1] by
    proper finalisation.
    See CFatMountCB::ScanDrive().
*/
TBool TFatConfig::ScanDrvSkipFinalisedVolume() const
    {
    ASSERT(iInitialised);
    return iScanDrvSkipFinalisedVolume;
    }

//-----------------------------------------------------------------------------
/**
    Meaning of this parameter:
    if not 0, enables asynchronous mounting of the FAT32 volumes.
    In particular background FAT32 scan for free clusters. See CAtaFatTable::CountFreeClustersL().
*/
TBool TFatConfig::FAT32_AsynchMount() const
    {
    ASSERT(iInitialised);
    return iFAT32_AsynchMount;
    }

//-----------------------------------------------------------------------------
/**
    Meaning of this parameter:
    if not 0, enables using FSInfo sector data during FAT32 volumes mounting to determine number of free clusters etc.
*/
TBool TFatConfig::FAT32_UseFSInfoOnMount() const
    {
    ASSERT(iInitialised);
    return iFAT32_UseFSInfoOnMount;
    }

//-----------------------------------------------------------------------------
/**
    Meaning of this parameter:
    if not 0, enables using FAT32 bit supercache that makes free FAT entries lookup faster
*/
TBool TFatConfig::FAT32_UseBitSupercache() const
    {
    ASSERT(iInitialised);
    return iFAT32_UseBitSupercache;
    }

//-----------------------------------------------------------------------------
/**
    Meaning of this parameter:
    Overall FAT directory cache size in bytes
*/
TUint32 TFatConfig::DirCacheSize() const
    {
    ASSERT(iInitialised);
    return iDirCacheSizeKB * K1KiloByte;
    }

//-----------------------------------------------------------------------------

/**
    Meaning of this parameter:
    Log2 of the maximal size of the dir. cache page in bytes. (Minimal size will be  current cluster size)
*/
TUint32 TFatConfig::DirCacheMaxPageSizeLog2() const
    {
    ASSERT(iInitialised);
    return iDirCacheMaxPageSizeLog2;
    }

/**
    Get FAT16 fixed cache parameters
    @param  aRdGrLog2 Log2(read granularity)
    @param  aWrGrLog2 Log2(write granularity)
*/
void TFatConfig::Fat16FixedCacheParams(TUint32& aRdGrLog2, TUint32& aWrGrLog2) const
    {
    ASSERT(iInitialised);
    aRdGrLog2 = iFat16FixedCacheReadGrLog2; 
    aWrGrLog2 = iFat16FixedCacheWriteGrLog2;
    }
/**
    Get FAT32 LRU cache parameters
    @param  aRdGrLog2 Log2(read granularity)
    @param  aWrGrLog2 Log2(write granularity)
    @param  aCacheSize maximal cache size, bytes
*/
void TFatConfig::Fat32LruCacheParams(TUint32& aRdGrLog2, TUint32& aWrGrLog2, TUint32& aCacheSize) const
    {
    ASSERT(iInitialised);
    aRdGrLog2 = iFat32LRUCacheReadGrLog2;
    aWrGrLog2 = iFat32LRUCacheWriteGrLog2;
    aCacheSize = iFat32LRUCacheSizeKB * K1KiloByte;
    }


/**
    Meaning of this parameter:
    if not 0, "clean shutdown mask" bit in FAT16[1] will be used during volume finalisation.
    Otherwise, FAT16[1] will not be affected during finalisation
*/
TBool TFatConfig::FAT16_UseCleanShutDownBit() const
    {
    ASSERT(iInitialised);
    return iFAT16_UseCleanShutDownBit;
    }



//-----------------------------------------------------------------------------
/**
    Get leaf dir cache size
	@return leaf dir cache size
*/
TUint32 TFatConfig::LeafDirCacheSize() const
    {
    ASSERT(iInitialised);
    return iLeafDirCacheSize;
    }

/**
	get the minimum cache size setting for dynamic dir cache
	@return minimum cache size in bytes				
*/
TUint32 TFatConfig::DynamicDirCacheSizeMin() const
	{
    ASSERT(iInitialised);
    ASSERT(iDynamicDirCacheSizeMinKB < (KMaxTUint32 >> K1KiloByteLog2));		//check data overflow
    return iDynamicDirCacheSizeMinKB << K1KiloByteLog2;
	}

/**
	get the maximum cache size setting for dynamic dir cache
	@return maximum cache size in bytes				
*/
TUint32 TFatConfig::DynamicDirCacheSizeMax() const
	{
    ASSERT(iInitialised);
    ASSERT(iDynamicDirCacheSizeMaxKB < (KMaxTUint32 >> K1KiloByteLog2));		//check data overflow
    return iDynamicDirCacheSizeMaxKB << K1KiloByteLog2;
	}

/**
    retrieve the size of the maximal size of the dynamic dir cache page in log2. 
    (Minimal size will be  current cluster size)
    @return maximum page size in bytes in log2
*/
TUint32 TFatConfig::DynamicDirCacheMaxPageSizeLog2() const
    {
    ASSERT(iInitialised);
    return iDynamicDirCacheMaxPageSizeLog2;
    }


#endif //FAT_CONFIGURATOR_INL






