kerneltest/f32test/bench/t_trimbm.cpp
author hgs
Mon, 11 Oct 2010 19:11:06 +0100
changeset 287 ddfd5aa0d58f
permissions -rw-r--r--
201041_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
287
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
     1
// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
     2
// All rights reserved.
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
     4
// under the terms of the License "Eclipse Public License v1.0"
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
     7
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
     8
// Initial Contributors:
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    10
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    11
// Contributors:
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    12
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    13
// Description:
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    14
// f32test/bench/t_fsysbm.cpp
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    15
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    16
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    17
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    18
#define __E32TEST_EXTENSION__
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    19
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    20
#include <f32file.h>
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    21
#include <e32test.h>
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    22
#include <e32hal.h>
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    23
#include <hal.h>
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    24
#include <e32math.h>
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    25
#include <e32ldr.h>
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    26
#include <e32ldr_private.h>
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    27
#include "t_server.h"
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    28
#include "../../e32test/mmu/d_sharedchunk.h"
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    29
#include "../../e32utils/pccd/d_mmcif.h"
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    30
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    31
#define SYMBIAN_TEST_EXTENDED_BUFFER_SIZES	// test using a greater number of buffer sizes
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    32
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    33
RTest test(_L("eMMC 4.4 TRIM Benchmark"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    34
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    35
static const TUint K1K = 1024;								// 1K
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    36
static const TUint K1M = K1K * K1K  ;						// 1M
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    37
static const TUint K2M = 2 * K1M;						    // 2M
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    38
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    39
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    40
#if defined(__WINS__)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    41
static TInt KMaxFileSize = 256 * K1K;					// 256K
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    42
#else
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    43
static TInt KMaxFileSize = K2M;							// 2M
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    44
#endif
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    45
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    46
const TTimeIntervalMicroSeconds32 KFloatingPointTestTime = 10000000;	// 10 seconds
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    47
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    48
static TPtr8 DataBuf(NULL, KMaxFileSize,KMaxFileSize);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    49
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    50
static RSharedChunkLdd Ldd;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    51
static RChunk TheChunk;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    52
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    53
GLDEF_D	RFs TheFs;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    54
GLDEF_D TFileName gSessionPath;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    55
GLDEF_D TChar gDriveToTest;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    56
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    57
static RMmcCntrlIf iDriver;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    58
static TInt iStack = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    59
static TInt iCard = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    60
static TBool iDriverOpen = EFalse;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    61
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    62
enum TPanic {ECreatingConsole,ELoaderCheck,ELoadingMmcDriver,EStartingMmcDriver};
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    63
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    64
LOCAL_C void Panic(TPanic aPanic)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    65
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    66
// Panic
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    67
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    68
	{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    69
	User::Panic(_L("MMCTEST"),aPanic);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    70
	}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    71
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    72
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    73
static RFile File;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    74
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    75
static TInt gFastCounterFreq;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    76
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    77
const TUint KMMCExtendedCSDLength=512;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    78
class TExtendedCSD
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    79
	{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    80
public:
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    81
	enum TExtCSDAccessBits {ECmdSet, ESetBits, EClearBits, EWriteByte};
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    82
	enum TExtCSDModesFieldIndex 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    83
		{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    84
		ECmdSetIndex = 191, 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    85
		ECmdSetRevIndex = 189, 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    86
		EPowerClassIndex = 187,
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    87
		EHighSpeedInterfaceTimingIndex = 185,
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    88
		EBusWidthModeIndex = 183
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    89
		};
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    90
	enum TExtCSDBusWidths
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    91
		{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    92
		EExtCsdBusWidth1 = 0x00,
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    93
		EExtCsdBusWidth4 = 0x01,
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    94
		EExtCsdBusWidth8 = 0x02
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    95
		};
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    96
	enum TCardTypes
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    97
		{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    98
		EHighSpeedCard26Mhz = 0x01,
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
    99
		EHighSpeedCard52Mhz = 0x02
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   100
		};
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   101
public:
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   102
	inline TExtendedCSD();				// Default constructor
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   103
	inline TExtendedCSD(const TUint8*);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   104
	inline TExtendedCSD& operator=(const TExtendedCSD&);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   105
	inline TExtendedCSD& operator=(const TUint8*);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   106
	inline TUint8 At(TUint anIndex) const;	// Byte from CSD at anIndex
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   107
public:
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   108
	inline TUint SupportedCmdSet() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   109
	inline TUint MinPerfWrite8Bit52Mhz() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   110
	inline TUint MinPerfRead8Bit52Mhz() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   111
	inline TUint MinPerfWrite8Bit26Mhz_4Bit52Mhz() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   112
	inline TUint MinPerfRead8Bit26Mhz_4Bit52Mhz() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   113
	inline TUint MinPerfWrite4Bit26Mhz() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   114
	inline TUint MinPerfRead4Bit26Mhz() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   115
	inline TUint PowerClass26Mhz360V() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   116
	inline TUint PowerClass52Mhz360V() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   117
	inline TUint PowerClass26Mhz195V() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   118
	inline TUint PowerClass52Mhz195V() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   119
	inline TUint CardType() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   120
	inline TUint CSDStructureVer() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   121
	inline TUint ExtendedCSDRev() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   122
	inline TUint CmdSet() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   123
	inline TUint CmdSetRev() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   124
	inline TUint PowerClass() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   125
	inline TUint HighSpeedTiming() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   126
	inline TUint BusWidth() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   127
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   128
	inline TUint TrimMultiplier() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   129
	inline TUint SecureFeatureSupport() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   130
	inline TUint SecureEraseMultiplier() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   131
	inline TUint SecureTrimMultiplier() const;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   132
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   133
private:
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   134
	/**< @internalComponent little endian 512 byte field representing extended CSD	*/
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   135
	TUint8 iData[KMMCExtendedCSDLength];
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   136
	};
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   137
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   138
inline TExtendedCSD::TExtendedCSD()	// Default constructor
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   139
	{}				
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   140
inline TExtendedCSD::TExtendedCSD(const TUint8* aPtr)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   141
	{memcpy(&iData[0], aPtr, KMMCExtendedCSDLength);}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   142
inline TExtendedCSD& TExtendedCSD::operator=(const TExtendedCSD& aCSD)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   143
	{memcpy(&iData[0], &aCSD.iData[0], KMMCExtendedCSDLength); return(*this);}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   144
inline TExtendedCSD& TExtendedCSD::operator=(const TUint8* aPtr)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   145
	{memcpy(&iData[0], aPtr, KMMCExtendedCSDLength); return(*this);}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   146
// field accessors.  
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   147
// "Properties Segment" of Extended CSD - i.e. read-only fields
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   148
inline TUint TExtendedCSD::SupportedCmdSet() const {return iData[504];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   149
inline TUint TExtendedCSD::MinPerfWrite8Bit52Mhz() const {return iData[210];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   150
inline TUint TExtendedCSD::MinPerfRead8Bit52Mhz() const {return iData[209];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   151
inline TUint TExtendedCSD::MinPerfWrite8Bit26Mhz_4Bit52Mhz() const {return iData[208];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   152
inline TUint TExtendedCSD::MinPerfRead8Bit26Mhz_4Bit52Mhz() const {return iData[207];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   153
inline TUint TExtendedCSD::MinPerfWrite4Bit26Mhz() const {return iData[206];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   154
inline TUint TExtendedCSD::MinPerfRead4Bit26Mhz() const {return iData[205];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   155
inline TUint TExtendedCSD::PowerClass26Mhz360V() const {return iData[203];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   156
inline TUint TExtendedCSD::PowerClass52Mhz360V() const {return iData[202];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   157
inline TUint TExtendedCSD::PowerClass26Mhz195V() const {return iData[201];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   158
inline TUint TExtendedCSD::PowerClass52Mhz195V() const {return iData[200];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   159
inline TUint TExtendedCSD::CardType() const {return iData[196];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   160
inline TUint TExtendedCSD::CSDStructureVer() const {return iData[194];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   161
inline TUint TExtendedCSD::ExtendedCSDRev() const {return iData[192];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   162
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   163
inline TUint TExtendedCSD::TrimMultiplier() const {return iData[232]; }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   164
inline TUint TExtendedCSD::SecureFeatureSupport() const {return iData[231]; }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   165
inline TUint TExtendedCSD::SecureEraseMultiplier() const {return iData[230]; }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   166
inline TUint TExtendedCSD::SecureTrimMultiplier() const {return iData[229]; }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   167
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   168
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   169
// "Modes Segment" of Extended CSD - i.e. modifiable fields
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   170
inline TUint TExtendedCSD::CmdSet() const {return iData[191];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   171
inline TUint TExtendedCSD::CmdSetRev() const {return iData[189];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   172
inline TUint TExtendedCSD::PowerClass() const {return iData[187];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   173
inline TUint TExtendedCSD::HighSpeedTiming() const {return iData[185];}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   174
typedef TPckg<TExtendedCSD> TExtendedCSDPckg;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   175
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   176
static TExtendedCSD extCSD;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   177
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   178
GLDEF_C TInt CurrentDrive()
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   179
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   180
// Return the current drive number
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   181
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   182
	{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   183
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   184
	TInt driveNum;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   185
	TInt r=TheFs.CharToDrive(gSessionPath[0],driveNum);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   186
	test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   187
	return(driveNum);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   188
	}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   189
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   190
GLDEF_C void Format(TInt aDrive)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   191
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   192
// Format current drive
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   193
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   194
	{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   195
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   196
	TUint initTicks = User::FastCounter();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   197
    TUint finalTicks = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   198
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   199
	TBuf<4> driveBuf=_L("?:\\");
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   200
	driveBuf[0]=(TText)(aDrive+'A');
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   201
	RFormat format;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   202
	TInt count;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   203
	    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   204
	TInt r=format.Open(TheFs,driveBuf, EFullFormat,count);  // EQuickFormat
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   205
	test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   206
	while(count)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   207
		{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   208
		TInt r=format.Next(count);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   209
		test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   210
		}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   211
	format.Close();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   212
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   213
	finalTicks = User::FastCounter();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   214
	TTimeIntervalMicroSeconds duration = TInt64(finalTicks - initTicks) * TInt64(1000000) / TInt64(gFastCounterFreq) ;   
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   215
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   216
	TInt timeTakenInMs = I64LOW(duration.Int64() / 1000);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   217
	test.Printf(_L("Time taken to format %d ms)\n"), timeTakenInMs); 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   218
	}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   219
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   220
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   221
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   222
static TInt getExtendedCSD()
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   223
	{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   224
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   225
	if (!iDriverOpen)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   226
		return(KErrNotSupported);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   227
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   228
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   229
	// Power the stack down & up to make sure the CardInfo is up to date
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   230
	iDriver.Reset();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   231
	User::After(1000); 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   232
	iDriver.PwrDownStack();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   233
	User::After(1000); 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   234
	TRequestStatus status;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   235
	iDriver.PwrUpAndInitStack(status);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   236
	User::WaitForRequest(status);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   237
    TInt err;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   238
	if ((err=status.Int())!=KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   239
		{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   240
		test.Printf(_L("Error Powering Stack"),err);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   241
		return(err);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   242
		}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   243
	iDriver.SelectCard(iCard);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   244
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   245
	// Get the CSD first to check whether the ExtCSD is supported
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   246
	TMmcCardInfo ci;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   247
	if ((err = iDriver.CardInfo(ci))!=KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   248
        {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   249
		test.Printf(_L("Error getting card info"),err);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   250
        return(err);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   251
        }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   252
	//test.Printf(_L("CSD Spec version: %u\n"), ci.iSpecVers);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   253
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   254
	if (ci.iSpecVers < 4) 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   255
		{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   256
		test.Printf(_L("Error: Extended CSD not supported\n"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   257
		return KErrNotSupported;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   258
		}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   259
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   260
	TExtendedCSDPckg extCSDPckg(extCSD);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   261
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   262
	iDriver.ReadExtCSD(status, extCSDPckg);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   263
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   264
	User::WaitForRequest(status);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   265
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   266
	if (status.Int() != KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   267
        {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   268
		test.Printf(_L("Error getting Extended CSD\n"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   269
        return(KErrGeneral);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   270
        }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   271
    return err;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   272
    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   273
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   274
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   275
static TUint GetSecEraseMultValue(void)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   276
    {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   277
        TUint retVal = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   278
        
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   279
        getExtendedCSD();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   280
        retVal = extCSD.SecureEraseMultiplier();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   281
        
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   282
        return retVal;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   283
    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   284
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   285
static TUint GetSecTrimMultValue(void)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   286
    {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   287
        TUint retVal = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   288
        
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   289
        getExtendedCSD();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   290
        retVal = extCSD.SecureTrimMultiplier();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   291
        
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   292
        return retVal;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   293
    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   294
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   295
static TUint GetTrimMultValue(void)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   296
    {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   297
        TUint retVal = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   298
        
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   299
        getExtendedCSD();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   300
        retVal = extCSD.TrimMultiplier();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   301
        
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   302
        return retVal;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   303
    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   304
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   305
static TInt64 DiskSize(TInt aDrive)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   306
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   307
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   308
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   309
	{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   310
	TVolumeInfo v;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   311
	TInt r=TheFs.Volume(v,aDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   312
	test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   313
	return(v.iSize);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   314
	}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   315
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   316
static TInt CalcEntries(TInt64 aDiskSize, TUint& aEntrySize)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   317
    {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   318
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   319
    aEntrySize = KMaxFileSize;    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   320
    TInt numFiles = (TInt)(aDiskSize / aEntrySize);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   321
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   322
    while ( numFiles > 1000 )
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   323
        {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   324
          aEntrySize = aEntrySize << 2 ;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   325
          numFiles = (TUint)(aDiskSize / aEntrySize);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   326
        }    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   327
    return numFiles;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   328
        
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   329
    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   330
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   331
static void WriteFull(TInt aDrive)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   332
    {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   333
    TInt64 diskSize = DiskSize(aDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   334
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   335
	RFile f;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   336
    TUint initTicks = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   337
    TUint finalTicks = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   338
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   339
	TFileName sessionPath;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   340
	TInt r=TheFs.SessionPath(sessionPath);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   341
	test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   342
	TBuf8<8> WriteData =_L8("Wibbleuy");
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   343
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   344
	r=TheFs.MkDirAll(gSessionPath);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   345
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   346
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   347
    TUint entrySize = KMaxFileSize;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   348
    TInt numFiles = CalcEntries(diskSize, entrySize);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   349
    test.Printf(_L("Disk size:%ld bytes, file size: %d bytes \n"), diskSize, entrySize) ; 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   350
    test.Printf(_L("Create %d entries\n"),numFiles);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   351
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   352
    test.Printf(_L("TRIM_MULT     :%d\n"), GetTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   353
    test.Printf(_L("SEC_TRIM_MULT :%d\n"), GetSecTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   354
    test.Printf(_L("SEC_ERASE_MULT:%d\n"), GetSecEraseMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   355
    initTicks = User::FastCounter();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   356
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   357
    for( TInt i = 0; i < numFiles; ++i)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   358
        {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   359
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   360
		test.Printf(_L("Create FILE%d\t(%3d%%)\r"), i, (100*i/numFiles) );
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   361
		TFileName baseName= gSessionPath;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   362
		baseName.Append(_L("FILE"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   363
		baseName.AppendNum(i);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   364
		r=f.Replace(TheFs,baseName,EFileWrite);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   365
		test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   366
		r = f.SetSize(entrySize);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   367
		if( r == KErrDiskFull)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   368
		    {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   369
		        numFiles = i;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   370
		        break;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   371
		    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   372
		test_Value(r, r == KErrNone || r==KErrDiskFull);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   373
		r=f.Write((entrySize-30),WriteData);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   374
		test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   375
		f.Flush();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   376
		f.Close();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   377
		}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   378
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   379
    test.Printf(_L("\nTRIM_MULT     :%d\n"), GetTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   380
    test.Printf(_L("SEC_TRIM_MULT :%d\n"), GetSecTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   381
    test.Printf(_L("SEC_ERASE_MULT:%d\n"), GetSecEraseMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   382
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   383
	test.Printf(_L("Test all entries have been created successfully\n"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   384
	TBuf8<8> ReadData;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   385
	TInt Size=0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   386
	for (TInt j=0; j < numFiles; j++)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   387
		{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   388
		
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   389
        test.Printf(_L("Check FILE%d\t(%3d%%)\r"), j, (100*j/numFiles) );
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   390
		TFileName baseName = gSessionPath;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   391
		baseName.Append(_L("FILE"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   392
		baseName.AppendNum(j);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   393
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   394
		TInt r=f.Open(TheFs,baseName,EFileRead);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   395
		if (r!=KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   396
			{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   397
			test_Value(r, r == KErrNotFound && j==numFiles);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   398
			return;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   399
			}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   400
		ReadData.FillZ();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   401
		r=f.Read((entrySize-30),ReadData);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   402
		test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   403
		test(f.Size(Size)==KErrNone);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   404
		test(entrySize == (TUint)Size);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   405
		test(ReadData==WriteData);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   406
		f.Close();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   407
		}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   408
		
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   409
	finalTicks = User::FastCounter();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   410
	TTimeIntervalMicroSeconds duration = TInt64(finalTicks - initTicks) * TInt64(1000000) / TInt64(gFastCounterFreq) ;    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   411
   
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   412
    TInt timeTakenInMs = I64LOW(duration.Int64() / 1000);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   413
	test.Printf(_L("Time taken to create %d entries = %d ms (%d ms/entry)\n"), numFiles, timeTakenInMs, timeTakenInMs/numFiles );     
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   414
	test.Printf(_L("TRIM_MULT     :%d\n"), GetTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   415
    test.Printf(_L("SEC_TRIM_MULT :%d\n"), GetSecTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   416
    test.Printf(_L("SEC_ERASE_MULT:%d\n"), GetSecEraseMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   417
    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   418
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   419
static void ReWriteHalf(TInt aDrive)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   420
    {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   421
    TInt64 diskSize = DiskSize(aDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   422
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   423
    RFile f;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   424
    TUint initTicks = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   425
    TUint finalTicks = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   426
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   427
	TFileName sessionPath;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   428
	TInt r=TheFs.SessionPath(sessionPath);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   429
	test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   430
	TBuf8<8> WriteData =_L8("Wibbleuy");
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   431
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   432
	r=TheFs.MkDirAll(gSessionPath);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   433
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   434
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   435
    TUint entrySize = KMaxFileSize;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   436
    TInt numFiles = CalcEntries(diskSize, entrySize);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   437
    test.Printf(_L("Disk size:%ld bytes, file size: %d bytes \n"), diskSize, entrySize) ; 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   438
    test.Printf(_L("Create %d entries\n"),numFiles/2);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   439
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   440
    test.Printf(_L("TRIM_MULT     :%d\n"), GetTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   441
    test.Printf(_L("SEC_TRIM_MULT :%d\n"), GetSecTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   442
    test.Printf(_L("SEC_ERASE_MULT:%d\n"), GetSecEraseMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   443
    initTicks = User::FastCounter();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   444
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   445
    for( TInt i = 0; i < numFiles; i += 2)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   446
        {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   447
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   448
        test.Printf(_L("Create FILE%d\t(%3d%%)\r"), i, (100*i/numFiles) );
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   449
		TFileName baseName= gSessionPath;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   450
		baseName.Append(_L("FILE"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   451
		baseName.AppendNum(i);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   452
		r=f.Replace(TheFs,baseName,EFileWrite);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   453
		test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   454
		r = f.SetSize(entrySize);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   455
		if( r == KErrDiskFull)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   456
		    {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   457
		        numFiles = i;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   458
		        break;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   459
		    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   460
		test_Value(r, r == KErrNone || r==KErrDiskFull);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   461
		r=f.Write((entrySize-30),WriteData);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   462
		test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   463
		f.Flush();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   464
		f.Close();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   465
		}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   466
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   467
    test.Printf(_L("\nTRIM_MULT     :%d\n"), GetTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   468
    test.Printf(_L("SEC_TRIM_MULT :%d\n"), GetSecTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   469
    test.Printf(_L("SEC_ERASE_MULT:%d\n"), GetSecEraseMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   470
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   471
	test.Printf(_L("Test all entries have been created successfully\n"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   472
	TBuf8<8> ReadData;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   473
	TInt Size=0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   474
	for (TInt j=0; j < numFiles; j += 2)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   475
		{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   476
		
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   477
        test.Printf(_L("Check FILE%d\t(%3d%%)\r"), j, (100*j/numFiles) );
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   478
		TFileName baseName = gSessionPath;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   479
		baseName.Append(_L("FILE"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   480
		baseName.AppendNum(j);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   481
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   482
		TInt r=f.Open(TheFs,baseName,EFileRead);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   483
		if (r!=KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   484
			{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   485
			test_Value(r, r == KErrNotFound && j==numFiles);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   486
			return;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   487
			}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   488
		ReadData.FillZ();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   489
		r=f.Read((entrySize-30),ReadData);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   490
		test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   491
		test(f.Size(Size)==KErrNone);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   492
		test(entrySize == (TUint)Size);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   493
		test(ReadData==WriteData);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   494
		f.Close();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   495
		}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   496
		
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   497
	finalTicks = User::FastCounter();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   498
	TTimeIntervalMicroSeconds duration = TInt64(finalTicks - initTicks) * TInt64(1000000) / TInt64(gFastCounterFreq) ;    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   499
   
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   500
    TInt timeTakenInMs = I64LOW(duration.Int64() / 1000);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   501
	test.Printf(_L("Time taken to create %d entries = %d ms (%d ms/entry)\n"), numFiles/2, timeTakenInMs, timeTakenInMs/numFiles/2 );     
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   502
	test.Printf(_L("TRIM_MULT     :%d\n"), GetTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   503
    test.Printf(_L("SEC_TRIM_MULT :%d\n"), GetSecTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   504
    test.Printf(_L("SEC_ERASE_MULT:%d\n"), GetSecEraseMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   505
    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   506
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   507
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   508
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   509
static void DeleteAll(TInt aDrive)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   510
    {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   511
    TInt64 diskSize = DiskSize(aDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   512
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   513
    TUint initTicks = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   514
    TUint finalTicks = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   515
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   516
	TFileName sessionPath;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   517
	TInt r=TheFs.SessionPath(sessionPath);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   518
	test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   519
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   520
    TUint entrySize = KMaxFileSize;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   521
    TInt numFiles = CalcEntries(diskSize, entrySize);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   522
    test.Printf(_L("Disk size:%ld bytes, file size: %d bytes \n"), diskSize, entrySize) ; 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   523
    test.Printf(_L("Delete %d entries\n"),numFiles);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   524
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   525
    test.Printf(_L("TRIM_MULT     :%d\n"), GetTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   526
    test.Printf(_L("SEC_TRIM_MULT :%d\n"), GetSecTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   527
    test.Printf(_L("SEC_ERASE_MULT:%d\n"), GetSecEraseMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   528
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   529
    initTicks = User::FastCounter();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   530
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   531
    for( TInt i = 2; i < numFiles; ++i)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   532
        {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   533
        test.Printf(_L("Delete FILE%d\t(%3d%%)\r"), i, (100*i/numFiles) );
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   534
		TFileName baseName = gSessionPath;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   535
		baseName.Append(_L("FILE"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   536
		baseName.AppendNum(i);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   537
		TInt r=TheFs.Delete(baseName);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   538
		test_Value(r, r == KErrNotFound || r == KErrNone);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   539
		}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   540
		
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   541
	finalTicks = User::FastCounter();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   542
	TTimeIntervalMicroSeconds duration = TInt64(finalTicks - initTicks) * TInt64(1000000) / TInt64(gFastCounterFreq) ;   
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   543
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   544
	TInt timeTakenInMs = I64LOW(duration.Int64() / 1000);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   545
	test.Printf(_L("Time taken to delete %d entries = %d ms (%d ms/entry)\n"), numFiles, timeTakenInMs, timeTakenInMs/numFiles); 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   546
	test.Printf(_L("TRIM_MULT     :%d\n"), GetTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   547
    test.Printf(_L("SEC_TRIM_MULT :%d\n"), GetSecTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   548
    test.Printf(_L("SEC_ERASE_MULT:%d\n"), GetSecEraseMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   549
    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   550
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   551
static void DeleteHalf(TInt aDrive)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   552
    {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   553
    TInt64 diskSize = DiskSize(aDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   554
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   555
    TUint initTicks = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   556
    TUint finalTicks = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   557
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   558
	TFileName sessionPath;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   559
	TInt r=TheFs.SessionPath(sessionPath);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   560
	test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   561
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   562
    TUint entrySize = KMaxFileSize;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   563
    TInt numFiles = CalcEntries(diskSize, entrySize);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   564
    test.Printf(_L("Disk size:%ld bytes, file size: %d bytes \n"), diskSize, entrySize) ; 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   565
    test.Printf(_L("Delete %d entries\n"),numFiles/2);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   566
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   567
    test.Printf(_L("TRIM_MULT     :%d\n"), GetTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   568
    test.Printf(_L("SEC_TRIM_MULT :%d\n"), GetSecTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   569
    test.Printf(_L("SEC_ERASE_MULT:%d\n"), GetSecEraseMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   570
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   571
    initTicks = User::FastCounter();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   572
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   573
    for( TInt i = 0; i < numFiles; i +=2)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   574
        {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   575
        test.Printf(_L("Delete FILE%d\t(%3d%%)\r"), i, (100*i/numFiles) );
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   576
		TFileName baseName = gSessionPath;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   577
		baseName.Append(_L("FILE"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   578
		baseName.AppendNum(i);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   579
		TInt r=TheFs.Delete(baseName);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   580
		test_Value(r, r == KErrNotFound || r == KErrNone);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   581
		}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   582
		
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   583
	finalTicks = User::FastCounter();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   584
	TTimeIntervalMicroSeconds duration = TInt64(finalTicks - initTicks) * TInt64(1000000) / TInt64(gFastCounterFreq) ;   
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   585
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   586
	TInt timeTakenInMs = I64LOW(duration.Int64() / 1000);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   587
	test.Printf(_L("Time taken to delete %d entries = %d ms (%d ms/entry)\n"), numFiles/2, timeTakenInMs, timeTakenInMs/numFiles/2); 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   588
	test.Printf(_L("TRIM_MULT     :%d\n"), GetTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   589
    test.Printf(_L("SEC_TRIM_MULT :%d\n"), GetSecTrimMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   590
    test.Printf(_L("SEC_ERASE_MULT:%d\n"), GetSecEraseMultValue());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   591
    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   592
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   593
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   594
static void WaitUntilTrimDone()
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   595
    {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   596
     
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   597
    TUint initTicks = User::FastCounter();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   598
    TUint finalTicks = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   599
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   600
#define READ_TO_KEEP_CARD_ON
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   601
#ifdef READ_TO_KEEP_CARD_ON
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   602
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   603
    const TInt readSize = 4096;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   604
    const TInt timeToRead = 30;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   605
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   606
	test.Printf(_L("Read a file for %d sec to keep card power on\n"), timeToRead );
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   607
	TBuf8<4096> ReadData;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   608
		
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   609
	RTimer timer;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   610
	timer.CreateLocal();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   611
	TRequestStatus reqStat;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   612
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   613
    //test.Printf(_L("Timer started.\n"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   614
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   615
	TFileName baseName = gSessionPath;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   616
	baseName.Append(_L("FILE1"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   617
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   618
    RFile f;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   619
	TInt r=f.Open(TheFs,baseName,EFileRead);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   620
	if (r!=KErrNone)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   621
		{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   622
		return;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   623
		}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   624
	TInt alreadyRead = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   625
	TInt fileSize;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   626
	test(f.Size(fileSize)==KErrNone);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   627
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   628
	//test.Printf(_L("File size:%d.\n"), fileSize);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   629
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   630
	timer.After(reqStat, timeToRead*1000000); // After 30 secs
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   631
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   632
	while( reqStat==KRequestPending )
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   633
	    {   
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   634
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   635
	    test.Printf(_L("Read pos:%d\r"), alreadyRead );
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   636
	    ReadData.FillZ();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   637
	    r=f.Read(readSize,ReadData);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   638
	    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   639
	    test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   640
        alreadyRead += readSize;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   641
        if( alreadyRead == fileSize)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   642
            {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   643
             alreadyRead = 0;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   644
		     f.Seek(ESeekStart, alreadyRead);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   645
            }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   646
        User::After(1000);        // 1 ms
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   647
	    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   648
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   649
    timer.Close();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   650
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   651
	f.Close();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   652
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   653
    test.Printf(_L("\n"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   654
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   655
#else
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   656
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   657
    TInt trimMult = GetTrimMultValue(); // Get TRIM_MULT value from eMMC Extended CSD
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   658
    test.Printf(_L("TRIM_MULT:%d\r"), trimMult);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   659
    while( trimMult-- > 0  )
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   660
        {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   661
        // Wait for a while
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   662
        User::After(300000);        // TRIM Timeout = 300ms x TRIM_MULT
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   663
        test.Printf(_L("TRIM_MULT:%d\r"), trimMult);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   664
        TInt trim = GetTrimMultValue();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   665
        }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   666
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   667
#endif
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   668
        
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   669
    finalTicks = User::FastCounter(); 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   670
	TTimeIntervalMicroSeconds duration = TInt64(finalTicks - initTicks) * TInt64(1000000) / TInt64(gFastCounterFreq) ;   
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   671
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   672
	TInt timeTakenInMs = I64LOW(duration.Int64() / 1000);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   673
	test.Printf(_L("Time taken to TRIM done = %d ms\n"), timeTakenInMs); 
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   674
    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   675
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   676
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   677
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   678
void doExit()
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   679
    {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   680
    iDriver.Close();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   681
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   682
    User::FreeLogicalDevice(_L("MmcIf"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   683
        
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   684
	test.End();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   685
	test.Close();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   686
        
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   687
    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   688
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   689
GLDEF_C void CallTestsL(void)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   690
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   691
// Call all tests
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   692
//
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   693
	{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   694
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   695
	test.Next(gSessionPath);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   696
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   697
    TInt err;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   698
	err=User::LoadLogicalDevice(_L("D_MMCIF"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   699
	__ASSERT_ALWAYS((err==KErrNone||err==KErrAlreadyExists),Panic(ELoadingMmcDriver));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   700
    test.Printf(_L("MMCIF driver loaded\n"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   701
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   702
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   703
    iDriver.Close();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   704
	TInt r=iDriver.Open(iStack,iDriver.VersionRequired());
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   705
	iDriverOpen=(r==KErrNone)?(TBool)ETrue:(TBool)EFalse;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   706
	test.Printf(_L("iDriverOpen %d\n"), iDriverOpen);    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   707
	if( !iDriverOpen )
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   708
	    {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   709
	    doExit();   
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   710
	    return;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   711
	    }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   712
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   713
    test.Next(_L("Get extended CSD"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   714
    r = getExtendedCSD();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   715
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   716
    if( r != KErrNone )
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   717
        {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   718
        test.Next(_L("Extended CSD doesn't exists. Exit."));    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   719
        doExit();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   720
        return;    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   721
        }    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   722
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   723
    if( extCSD.ExtendedCSDRev() < 5 )
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   724
        {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   725
        test.Next(_L("TRIM feature doesn't exists. Exit!"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   726
        }
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   727
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   728
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   729
	r = HAL::Get(HAL::EFastCounterFrequency, gFastCounterFreq);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   730
	test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   731
	test.Printf(_L("HAL::EFastCounterFrequency %d\n"), gFastCounterFreq);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   732
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   733
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   734
    TInt currentDrive = CurrentDrive();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   735
  	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   736
  	//  1. Format drive
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   737
    test.Next(_L("Format drive"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   738
    Format(currentDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   739
        
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   740
    //  2. Set TRIM off
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   741
    //test.Next(_L("Set TRIM off"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   742
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   743
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   744
    //  3. Write full with files and measure elapsed time
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   745
    test.Next(_L("Write full"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   746
    WriteFull(currentDrive);    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   747
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   748
    //  4. Delete all files and measure elapsed time
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   749
    test.Next(_L("Delete all files"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   750
    DeleteAll(currentDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   751
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   752
    //  5. Rewrite all (or a set of) files and measure elapsed time
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   753
    test.Next(_L("Write full"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   754
    WriteFull(currentDrive);    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   755
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   756
    //  6. Format drive
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   757
    test.Next(_L("Format drive"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   758
    Format(currentDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   759
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   760
    //  7. Set TRIM on
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   761
    //test.Next(_L("Set TRIM on"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   762
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   763
    //  8. Write full with files and measure elapsed time
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   764
    test.Next(_L("Write full"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   765
    WriteFull(currentDrive);    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   766
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   767
    //  9. Delete all files and measure elapsed time
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   768
    test.Next(_L("Delete all files"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   769
    DeleteAll(currentDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   770
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   771
    // 10. Wait for a while (give time to eMMC to do its TRIM job)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   772
    test.Next(_L("Wait for TRIM done"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   773
    WaitUntilTrimDone();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   774
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   775
    // 11. Rewrite all (or same set of) files and measure elapsed time
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   776
    test.Next(_L("Write full"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   777
    WriteFull(currentDrive);    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   778
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   779
    // 12. Format drive
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   780
    test.Next(_L("Format drive"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   781
    Format(currentDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   782
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   783
    // 13. Write full with files and measure elapsed time
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   784
    test.Next(_L("Write full"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   785
    WriteFull(currentDrive);    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   786
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   787
    // 14. Delete half of files and measure elapsed time
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   788
    test.Next(_L("Delete half of files"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   789
    DeleteHalf(currentDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   790
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   791
    // 15. Re-write half of files and measure elapsed time
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   792
    test.Next(_L("Re-write half"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   793
    ReWriteHalf(currentDrive);    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   794
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   795
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   796
    // 16. Format drive
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   797
    test.Next(_L("Format drive"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   798
    Format(currentDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   799
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   800
    // 17. Write full with files and measure elapsed time
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   801
    test.Next(_L("Write full"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   802
    WriteFull(currentDrive);    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   803
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   804
    // 18. Delete half of files and measure elapsed time
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   805
    test.Next(_L("Delete half of files"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   806
    DeleteHalf(currentDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   807
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   808
    // 19. Wait for a while (give time to eMMC to do its TRIM job)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   809
    test.Next(_L("Wait for TRIM done"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   810
    WaitUntilTrimDone();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   811
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   812
    // 20. Re-write half of files and measure elapsed time
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   813
    test.Next(_L("Re-write half"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   814
    ReWriteHalf(currentDrive);    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   815
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   816
    // 21. Format drive
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   817
    test.Next(_L("Format drive"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   818
    Format(currentDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   819
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   820
    doExit();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   821
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   822
    return;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   823
	}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   824
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   825
GLDEF_C TInt E32Main()
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   826
    {
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   827
    TInt r=TheFs.Connect();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   828
	test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   829
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   830
    test.Title();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   831
	test.Start(_L("Start Benchmarking ..."));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   832
	
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   833
    TInt theDrive;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   834
    gDriveToTest='E';		
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   835
	r=TheFs.CharToDrive(gDriveToTest,theDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   836
	test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   837
    
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   838
    gSessionPath=_L("?:\\TRIMTEST\\");
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   839
	TChar driveLetter;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   840
	r=TheFs.DriveToChar(theDrive,driveLetter);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   841
	test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   842
	gSessionPath[0]=(TText)driveLetter;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   843
	r=TheFs.SetSessionPath(gSessionPath);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   844
	test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   845
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   846
    r=TheFs.MkDirAll(gSessionPath);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   847
	if(r == KErrCorrupt)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   848
		{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   849
		test.Printf(_L("Attempting to create directory \'%S\' failed, KErrCorrupt\n"), &gSessionPath);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   850
		test.Printf(_L("This could be caused by a previous failing test, or a test media defect\n"));
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   851
		test.Printf(_L("Formatting drive, retrying MkDirall\nShould subsequent tests fail with KErrCorrupt (%d) as well, replace test medium !\n"),
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   852
			r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   853
		Format(theDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   854
		r=TheFs.MkDirAll(gSessionPath);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   855
		test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   856
		}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   857
	else if (r == KErrNotReady)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   858
		{
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   859
		TDriveInfo d;
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   860
		r=TheFs.Drive(d, theDrive);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   861
		test_KErrNone(r);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   862
		if (d.iType == EMediaNotPresent)
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   863
			test.Printf(_L("%c: Medium not present - cannot perform test.\n"), (TUint)driveLetter);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   864
		else
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   865
			test.Printf(_L("medium found (type %d) but drive %c: not ready\nPrevious test may have hung; else, check hardware.\n"), (TInt)d.iType, (TUint)driveLetter);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   866
		}
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   867
	test_Value(r, r == KErrNone || r == KErrAlreadyExists);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   868
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   869
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   870
    CallTestsL();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   871
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   872
	TheFs.Close();
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   873
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   874
    return(KErrNone);
ddfd5aa0d58f 201041_01
hgs
parents:
diff changeset
   875
    }