diff -r 000000000000 -r a41df078684a kerneltest/e32test/smr/t_smr.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/smr/t_smr.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,240 @@ +// 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: +// Bootstrap Shadow Memory Region Test Application +// + +#define __E32TEST_EXTENSION__ +#include +#include +#include +#include +#include +#include "d_smr.h" + +#define __TRACE_LINE__() test.Printf(_L("%d\n"),__LINE__) + +RTest test(_L("T_SMR")); + +RSMRTest SMRTest; + + +//--------------------------------------------- +//! @SYMTestCaseID +//! @SYMTestType +//! @SYMPREQ +//! @SYMTestCaseDesc +//! @SYMTestActions +//! +//! @SYMTestExpectedResults +//! +//! @SYMTestPriority +//! @SYMTestStatus +//--------------------------------------------- +TInt TestSMRIBPtr (TBool aEnforce) + { + /* These tests assume that the Core Loader does not load and user data areas + * as they are too large (>8Mb). Leaving the SMRIB undefined (==0) on NE1 and + * H4. + */ + + /* Print out the SMRIB Pointer in the Super Page. + * When enforce, zero entries will lead to a test failure. + */ + test.Next(_L("SMR Test: Test_CheckSMRIBPtr")); + test.Printf(_L("\n")); + test_KErrNone( SMRTest.Test_CheckSMRIBPtr(aEnforce)); + + return KErrNone; + } + +TInt TestSMRAccess (TBool aEnforce) + { + /* These tests assume that the Core Loader has been modified to treat the + * user data partitions as SMR partitions and load them into SMR memory area + * and updated teh SMRIB. Two SMRs are expected, each of 4Mb in size. + */ + + + /* Print out the SMRIB in the Super Page. + * When enforce, zero entries will lead to a test failure. + */ + test.Next(_L("SMR Test: Test_PrintSMRIB")); + test.Printf(_L("\n")); + test_KErrNone( SMRTest.Test_PrintSMRIB(aEnforce)); + + /* Print out the SMRIB and access and dump 1Kb of memory in each SMR. + * When enforce, zero SMR entries will lead to a test failure. + */ + test.Next(_L("SMR Test: Test_AccessAllSMRs")); + test.Printf(_L("\n")); + test_KErrNone( SMRTest.Test_AccessAllSMRs(aEnforce)); + + /* Print out the SMRIB in the Super Page. + * When enforce, zero entries will lead to a test failure. + */ + + return KErrNone; + } + + +TInt TestSMRAccessAndRAMFree (TBool aEnforce) + { + /* These tests assume that the Core Loader has been modified to treat the + * user data partitions as SMR partitions and load them into SMR memory area + * and updated teh SMRIB. Two SMRs are expected, each of 4Mb in size. + */ + + + /* Print out the SMRIB in the Super Page. + * When enforce, zero entries will lead to a test failure. + */ + test.Next(_L("SMR Test: Test_PrintSMRIB")); + test.Printf(_L("\n")); + test_KErrNone( SMRTest.Test_PrintSMRIB(aEnforce)); + + /* Print out the SMRIB and access and dump 1Kb of memory in each SMR. + * When enforce, zero SMR entries will lead to a test failure. + */ + test.Next(_L("SMR Test: Test_AccessAllSMRs")); + test.Printf(_L("\n")); + test_KErrNone( SMRTest.Test_AccessAllSMRs(aEnforce)); + + /* Print out the SMRIB in the Super Page. + * When enforce, zero entries will lead to a test failure. + */ + test.Next(_L("SMR Test: Test_FreeHalfSMR1PhysicalRam")); + test.Printf(_L("\n")); + test_KErrNone( SMRTest.Test_FreeHalfSMR1PhysicalRam(aEnforce)); + + /* Print out the SMRIB in the Super Page. + * When enforce, zero entries will lead to a test failure. + */ + test.Next(_L("SMR Test: Test_FreeAllSMR2PhysicalRam")); + test.Printf(_L("\n")); + test_KErrNone( SMRTest.Test_FreeAllSMR2PhysicalRam(aEnforce)); + + + + /* Print out the SMRIB in the Super Page to see how it has been modified. + * When enforce, zero entries will lead to a test failure. + */ + test.Next(_L("SMR Test: Test_PrintSMRIB")); + test.Printf(_L("\n")); + test_KErrNone( SMRTest.Test_PrintSMRIB(aEnforce)); + + return KErrNone; + } + + +GLDEF_C TInt E32Main() + { + TInt r; + TBuf<256> args; + TInt arglen = 0; + TBool enforce = EFalse; + TBool getch = EFalse; + TInt testcase = 0; + + test.Title(); + + test.Start(_L("=== SMR Test Suite")); + + arglen = User::CommandLineLength(); + if (arglen > 0) + { + /** Process command arguments */ + test_Compare(arglen,<,256); + User::CommandLine(args); + + test.Printf(_L("Arguments: %S\n"), &args); + + if (args.Find(_L("-1")) >= 0) + testcase = 1; + if (args.Find(_L("-2")) >= 0) + testcase = 2; + if (args.Find(_L("-3")) >= 0) + testcase = 3; + if (args.Find(_L("-4")) >= 0) + testcase = 4; + + if (args.Find(_L("-e")) >= 0) + enforce = ETrue; + + if (args.Find(_L("-g")) >= 0) + getch = ETrue; + + if (args.Find(_L("-h")) >= 0) + { + test.Printf(_L("usage: t_smr [-1|-2|-3|-4] [-e] [-h] [-g]\n")); + goto done; + } + } + + TInt muid = 0; + r = HAL::Get(HAL::EMachineUid, muid); + test_KErrNone(r); + if ((muid != HALData::EMachineUid_NE1_TB) && (testcase != 1)) + { + test.Printf (_L("Testing skipped as test only applies to NaviEngine platform\n")); + goto done; + } + + test.Next(_L("=== Open test LDD")); + r = User::LoadLogicalDevice(RSMRTest::Name()); + test_Assert((r==KErrNone || r==KErrAlreadyExists),void (0)); + + r = SMRTest.Open(); + test_KErrNone(r); + + + // Do test cases + // + if (testcase == 1) + { + TestSMRAccess(enforce); + } + else if (testcase == 2) + { + TestSMRAccessAndRAMFree(enforce); + } + else if (testcase == 3) + { + TestSMRIBPtr(enforce); + } + else if (testcase == 4) + { + TestSMRIBPtr(enforce); + } + else + { + test.Printf (_L("Just open and closing test driver, no test case argument supplied.")); + } + + test.Next(_L("=== Close LDD")); + SMRTest.Close(); + + r = User::FreeLogicalDevice(RSMRTest::Name()); + test_KErrNone(r); + +done: + test.End(); + + if (getch) + { + test.Printf(_L("Press any key to continue...\n")); + (void) test.Getch(); + } + return(0); + } +