Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h)
Have multiple extension sections in the bld.inf, one for each version
of the compiler. The RVCT version building the tools will build the
runtime libraries for its version, but make sure we extract all the other
versions from zip archives. Also add the archive for RVCT4.
// 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:
// f32test\demandpaging\t_paginginfo.cpp
//
//
#include <e32test.h>
RTest test(_L("t_paginginfo"));
#include <e32rom.h>
#include <e32svr.h>
#include <u32hal.h>
#include <f32file.h>
#include <f32dbg.h>
#include <d32locd.h>
#include "testdefs.h"
#include <hal.h>
TInt DriveNumber=-1; // Parameter - Which drive? -1 = autodetect.
TInt locDriveNumber;
TBusLocalDrive Drive;
TBool DisplayStats = ETrue;
TBool ManualTest = EFalse;
TInt findDataPagingDrive()
/**
Find the drive containing a swap partition.
@return Local drive identifier.
*/
{
TInt drive = KErrNotFound;
test.Printf(_L("Searching for data paging drive:\n"));
for(TInt i = 0; i < KMaxLocalDrives && drive < 0; ++i)
{
RLocalDrive d;
TBool change = EFalse;
if(d.Connect(i, change) == KErrNone)
{
test.Printf(_L("Connected to local drive %d\n"), i);
TLocalDriveCapsV4 dc;
TPckg<TLocalDriveCapsV4> capsPack(dc);
if(d.Caps(capsPack) == KErrNone)
{
if ((dc.iMediaAtt & KMediaAttPageable) &&
(dc.iPartitionType == KPartitionTypePagedData))
{
test.Printf(_L("Found swap partition on local drive %d\n"), i);
drive = i;
TPageDeviceInfo pageDeviceInfo;
TPtr8 pageDeviceInfoBuf((TUint8*) &pageDeviceInfo, sizeof(pageDeviceInfo));
pageDeviceInfoBuf.FillZ();
TInt r = d.QueryDevice(RLocalDrive::EQueryPageDeviceInfo, pageDeviceInfoBuf);
test.Printf(_L("EQueryPageDeviceInfo on local drive %d returned %d\n"), i, r);
}
}
d.Close();
}
}
return drive;
}
void DisplayPageDeviceInfo(TInt aDataPagingDrive)
{
test.Printf(_L("Stats: \n"));
SMediaPagingInfo info;
TInt r = UserSvr::HalFunction(EHalGroupMedia,EMediaHalGetPagingInfo,(TAny*) aDataPagingDrive, &info);
test.Printf(_L("HAL: EMediaHalGetPagingInfo returned %d\n"), r);
if (r == KErrNone)
{
test.Printf(_L("iRomPageInCount %d\n"), info.iRomPageInCount);
test.Printf(_L("iCodePageInCount %d\n"), info.iCodePageInCount);
test.Printf(_L("iDataPageInCount %d\n"), info.iDataPageInCount);
test.Printf(_L("iDataPageOutCount %d\n"), info.iDataPageOutCount);
test.Printf(_L("iDataPageOutBackgroundCount %d\n"), info.iDataPageOutBackgroundCount);
}
RLocalDrive d;
TBool change = EFalse;
r = d.Connect(aDataPagingDrive, change);
test (r == KErrNone);
TPageDeviceInfo pageDeviceInfo;
TPtr8 pageDeviceInfoBuf((TUint8*) &pageDeviceInfo, sizeof(pageDeviceInfo));
pageDeviceInfoBuf.FillZ();
r = d.QueryDevice(RLocalDrive::EQueryPageDeviceInfo, pageDeviceInfoBuf);
test (r == KErrNone || r == KErrNotSupported);
d.Close();
test.Printf(_L("iReservoirBlockCount %d\n"), pageDeviceInfo.iReservoirBlockCount);
test.Printf(_L("iBadBlockCount %d\n"), pageDeviceInfo.iBadBlockCount);
}
//
// The gubbins that starts all the tests
//
// ParseCommandLine reads the arguments and sets globals accordingly.
//
void ParseCommandLine()
{
TBuf<32> args;
User::CommandLine(args);
TLex lex(args);
FOREVER
{
TPtrC token=lex.NextToken();
if(token.Length()!=0)
{
if ((token.Length()==2) && (token[1]==':'))
DriveNumber=User::UpperCase(token[0])-'A';
else if (token.Length()==1)
{
TChar driveLetter = User::UpperCase(token[0]);
if ((driveLetter>='A') && (driveLetter<='Z'))
DriveNumber=driveLetter - (TChar) 'A';
else
test.Printf(_L("Unknown argument '%S' was ignored.\n"), &token);
}
else if ((token==_L("help")) || (token==_L("-h")) || (token==_L("-?")))
{
test.Printf(_L("\nUsage: t_paginginfo [enable] [disable] [stats]\n\n"));
test.Getch();
}
else if (token==_L("stats"))
{
DisplayStats = ETrue;
}
else if (token==_L("-m"))
{
ManualTest = ETrue;
}
else
test.Printf(_L("Unknown argument '%S' was ignored.\n"), &token);
}
else
break;
}
}
//
// E32Main
//
TInt E32Main()
{
test.Title();
test.Start(_L("Check that the rom is paged"));
TRomHeader* romHeader = (TRomHeader*)UserSvr::RomHeaderAddress();
if (romHeader->iPageableRomStart==NULL)
{
test.Printf(_L("Test ROM is not paged - test skipped!\r\n"));
test.End();
return 0;
}
ParseCommandLine();
TInt dataPagingDrive = findDataPagingDrive();
if (dataPagingDrive == KErrNotFound)
{
test.Printf(_L("Swap partition not found - test skipped!\r\n"));
test.End();
return 0;
}
if (DisplayStats)
{
DisplayPageDeviceInfo(dataPagingDrive);
if (ManualTest)
test.Getch();
test.End();
return 0;
}
test.End();
return 0;
}