kernel/eka/include/kernel/execs.h
author Mike Kinghan <mikek@symbian.org>
Tue, 16 Nov 2010 14:39:21 +0000
branchGCC_SURGE
changeset 303 9b85206a602c
parent 144 c5e01f2a4bfd
permissions -rw-r--r--
We need a way to pass flags to rombuilds in Raptor via extension flm interfaces, so that the CPP pass of the rom input files can be informed what toolchain we are building with and conditionally include or exclude files depending on whether the toolchain could build them.

// Copyright (c) 1998-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:
// e32\include\kernel\execs.h
// 
//

#ifndef __K32EXEC_H__
#define __K32EXEC_H__
#include <kernel/kern_priv.h>

class DObject;
class DTimer;
class DThread;
class DMutex;
class DSemaphore;
class DProcess;
class DChunk;
class DServer;
class DSession;
class DLibrary;
class DLogicalDevice;
class DPhysicalDevice;
class DLogicalChannelBase;
class DChangeNotifier;
class DUndertaker;
class DMsgQueue;
class DPropertyRef;
class DShPool;
class DShBuf;

#include <u32exec.h>

#define EF_C	KExecFlagClaim
#define	EF_R	KExecFlagRelease
#define	EF_P	KExecFlagPreprocess
#define EF_A2	KExecFlagExtraArgs2
#define EF_A3	KExecFlagExtraArgs3
#define EF_A4	KExecFlagExtraArgs4
#define EF_A5	KExecFlagExtraArgs5
#define EF_A6	KExecFlagExtraArgs6
#define EF_A7	KExecFlagExtraArgs7
#define EF_A8	KExecFlagExtraArgs8

#if defined(__WINS__)

// Executive call macros for WINS

#define	FAST_EXEC_BEGIN	\
	GLDEF_D const TUint32 EpocFastExecTable[] =		\
		{

#define FAST_EXEC_END	\
		0				\
		};

#define DECLARE_WORD(n)				(n),
#define	DECLARE_FUNC(f)				TLinAddr(&f),
#define	DECLARE_FAST_EXEC_INVALID	DECLARE_FUNC(InvalidFastExec)

#define	SLOW_EXEC_BEGIN	\
	GLDEF_D const TUint32 EpocSlowExecTable[] =		\
		{

#define SLOW_EXEC_END	\
		0				\
		};

#define DECLARE_INVALID_EXEC_HANDLER		DECLARE_FUNC(InvalidExecHandler)
#define	DECLARE_EXEC_PREPROCESS_HANDLER		DECLARE_FUNC(Win32PreprocessHandler)

#define	DECLARE_FLAGS_FUNC(flags, func)					(flags), DECLARE_FUNC(func)
#define	DECLARE_FLAGS_ASMFUNC(flags, asmfunc, cppfunc)	(flags), DECLARE_FUNC(cppfunc)
#define	DECLARE_SLOW_EXEC_INVALID			0, DECLARE_FUNC(InvalidExecHandler)

#elif defined(__CPU_X86)

// Executive call macros for X86

#define	FAST_EXEC_BEGIN	\
	GLDEF_D const TUint32 EpocFastExecTable[] =		\
		{

#define FAST_EXEC_END	\
		0				\
		};

#define DECLARE_WORD(n)				(n),
#define	DECLARE_FUNC(f)				TLinAddr(&f),
#define	DECLARE_FAST_EXEC_INVALID	DECLARE_FUNC(InvalidFastExec)

#define	SLOW_EXEC_BEGIN	\
	GLDEF_D const TUint32 EpocSlowExecTable[] =		\
		{

#define SLOW_EXEC_END	\
		0				\
		};

#define DECLARE_INVALID_EXEC_HANDLER		DECLARE_FUNC(InvalidExecHandler)
#define	DECLARE_EXEC_PREPROCESS_HANDLER		DECLARE_FUNC(PreprocessHandler)

#define	DECLARE_FLAGS_FUNC(flags, func)					(flags), DECLARE_FUNC(func)
#define	DECLARE_FLAGS_ASMFUNC(flags, asmfunc, cppfunc)	(flags), DECLARE_FUNC(cppfunc)
#define	DECLARE_SLOW_EXEC_INVALID			0, DECLARE_FUNC(InvalidExecHandler)


#elif defined(__CPU_ARM)

// Executive call macros for ARM

#define	FAST_EXEC_BEGIN	\
	__NAKED__ void dummy_function_for_exec_tables() {	\
		asm(".global EpocFastExecTable ");				\
		asm("EpocFastExecTable: ");

#define FAST_EXEC_END

#define DECLARE_WORD(n)				asm(".word %a0" : : "i" ((TInt)n));
#define	DECLARE_FUNC(f)				asm(".word %a0" : : "i" (&f));
#define	DECLARE_FAST_EXEC_INVALID	DECLARE_FUNC(InvalidFastExec)

#define	SLOW_EXEC_BEGIN	\
		asm(".global EpocSlowExecTable ");				\
		asm("EpocSlowExecTable: ");

#define SLOW_EXEC_END	\
		}

#define DECLARE_INVALID_EXEC_HANDLER		DECLARE_FUNC(InvalidExecHandler)
#define	DECLARE_EXEC_PREPROCESS_HANDLER		DECLARE_FUNC(PreprocessHandler)

#define	DECLARE_FLAGS_FUNC(flags, func)					DECLARE_WORD(flags)	DECLARE_FUNC(func)
#define	DECLARE_FLAGS_ASMFUNC(flags, asmfunc, cppfunc)	asm(".word %a0," #asmfunc : : "i" (flags));
#define	DECLARE_SLOW_EXEC_INVALID						DECLARE_FLAGS_FUNC(0, InvalidExecHandler)


#else
#error Unknown CPU
#endif

#include <kernel/exec_kernel.h>

#endif