kerneltest/e32test/nkernsa/nkutils.h
author mikek
Fri, 02 Jul 2010 09:53:45 +0100
branchGCC_SURGE
changeset 190 0d42d469e749
parent 0 a41df078684a
permissions -rw-r--r--
1) Swapping to c++ instead of assembly implementations of several kernel APIs to avoid calling probably broken implementations of __EH_FRAME_?? macros 2) Commenting out otherwise unavoidable calls to __EH_FRAME_?? macros in uc_exe.cia. This is a temporary hack. Both changes to see if they get past an early kernel panic in the Syborg ROM from the current build: EH ERROR: no exception descriptor for address 0x801eb277 Thread efile.exe::Main Panic USER-EXEC 3

// 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\nkutils.h
// 
//

#ifndef __NKUTILS_H__
#define __NKUTILS_H__
#include <nk_priv.h>
#include <nktest/utils.h>

#ifndef __SMP__
class NThreadGroup;
#endif


enum TExitCallBackInstance
	{
	EInContext=0,
	EBeforeFree=1,
	EAfterFree=2,
	};

typedef TInt NRequestStatus;

typedef void (*TExitFunc)(TAny*, NThread*, TInt);

extern NThread* CreateThread(const char* aName, NThreadFunction aFunc, TInt aPri, const TAny* aParams, TInt aPSize, TBool aResume, TInt aTimeslice, TExitFunc aExitFunc=0, TAny* aExitParam=0, TUint32 aCpuAffinity=0, NThreadGroup* aGroup=0);
extern NThread* CreateThreadSignalOnExit(const char* aName, NThreadFunction aFunc, TInt aPri, const TAny* aParams, TInt aPSize, TInt aTimeslice, NFastSemaphore* aExitSem, TUint32 aCpuAffinity, NThreadGroup* aGroup=0);
extern NThread* CreateUnresumedThreadSignalOnExit(const char* aName, NThreadFunction aFunc, TInt aPri, const TAny* aParams, TInt aPSize, TInt aTimeslice, NFastSemaphore* aExitSem, TUint32 aCpuAffinity, NThreadGroup* aGroup=0);
extern void CreateThreadAndWaitForExit(const char* aName, NThreadFunction aFunc, TInt aPri, const TAny* aParams, TInt aPSize, TInt aTimeslice, TUint32 aCpuAffinity=0, NThreadGroup* aGroup=0);
extern TDfcQue* CreateDfcQ(const char* aName, TInt aPri, TUint32 aCpuAffinity=0, NThreadGroup* aGroup=0);
extern void DestroyDfcQ(TDfcQue* aQ);

extern void FMWaitFull(NFastMutex* aMutex);
extern void FMSignalFull(NFastMutex* aMutex);

extern TInt WaitWithTimeout(NFastSemaphore* aS, TUint32 aTimeout);

extern "C" TInt __timer_period();
extern "C" TInt __microseconds_to_timeslice_ticks(TInt us);
extern "C" TInt __fast_counter_to_timeslice_ticks(TUint64 aFCdelta);

const TInt KStackSize = 4096;
const TInt KTimeslice = 20000;	// microseconds

const TUint32 KMinTimeout = 1;
#ifdef __SMP__
const TInt KSmallTimeslice = 500;
#else
const TInt KSmallTimeslice = 2;
#endif

extern void WaitForRequest(NRequestStatus& aStatus);
extern void RequestComplete(NThread* aThread, NRequestStatus*& aStatus, TInt aValue);

extern void InitBTraceHandler();
extern void DumpBTraceBuffer();
extern void StartBTrace();
extern void StopBTrace();

extern "C" void CheckPoint();

#define __CHECKPOINT()	CheckPoint()


#endif