diff -r 000000000000 -r a41df078684a kerneltest/e32test/nkernsa/x86/x86utils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/nkernsa/x86/x86utils.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,103 @@ +// Copyright (c) 2006-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: +// e32test\nkernsa\x86\x86utils.cpp +// +// + +#include +#include + +extern "C" { + +void __fastcall thread_request_signal(NThread* aThread); + +TUint64 fcf; +TUint32 nfcf; +TUint32 nfcfs; + + +TUint32 round_to_page(TUint32 x) + { + return (x + KPageSize - 1) &~ (KPageSize - 1); + } + + +TLinAddr __initial_stack_base() + { + return __stack_pointer() & ~0xfff; + } + +TInt __initial_stack_size() + { + return 0x1000; + } + +TUint64 fast_counter_freq() + { + return fcf; + } + +TUint32 norm_fast_counter_freq() + { + return nfcf; + } + +void init_fast_counter() + { + NKern::Sleep(2); + TUint64 initial = fast_counter(); + NKern::Sleep(1000); + TUint64 final = fast_counter(); + fcf = final - initial; + TUint64 f = fcf; + nfcfs = 0; + while (f > 2000000) + f>>=1, ++nfcfs; + nfcf = (TUint32)(fcf >> nfcfs); + + DEBUGPRINT("fcf=%lx",fcf); + DEBUGPRINT("nfcf=%d",nfcf); + } + +TInt __microseconds_to_fast_counter(TInt us) + { + TUint64 x = TUint64(TUint32(us)); + x *= fcf; + x += TUint64(500000); + x /= TUint64(1000000); + + return (TInt)x; + } + +TInt __microseconds_to_norm_fast_counter(TInt us) + { + TUint64 x = TUint64(TUint32(us)); + x *= nfcf; + x += TUint64(500000); + x /= TUint64(1000000); + + return (TInt)x; + } + +extern TUint32 __eflags(); +void CheckPoint() + { + KPrintf("EFLAGS=%08x", __eflags()); + } + +void __fastcall thread_request_signal(NThread* aThread) + { + NKern::ThreadRequestSignal(aThread); + } +}