os/kernelhwsrv/kernel/eka/include/memmodel/epoc/plat_priv.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of the License "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// e32\include\memmodel\epoc\plat_priv.h
sl@0
    15
// 
sl@0
    16
// WARNING: This file contains some APIs which are internal and are subject
sl@0
    17
//          to change without notice. Such APIs should therefore not be used
sl@0
    18
//          outside the Kernel and Hardware Services package.
sl@0
    19
//
sl@0
    20
sl@0
    21
#ifndef __M32KERN_H__
sl@0
    22
#define __M32KERN_H__
sl@0
    23
#include <kernel/kern_priv.h>
sl@0
    24
#include <platform.h>
sl@0
    25
#include <e32def_private.h>
sl@0
    26
sl@0
    27
/** Hardware Variant Discriminator
sl@0
    28
sl@0
    29
@internalTechnology
sl@0
    30
*/
sl@0
    31
class THardwareVariant
sl@0
    32
	{
sl@0
    33
public:
sl@0
    34
	inline THardwareVariant();
sl@0
    35
	inline THardwareVariant(TUint aVariant);
sl@0
    36
	inline operator TUint();
sl@0
    37
	inline TBool IsIndependent();
sl@0
    38
	inline TBool IsCpu();
sl@0
    39
	inline TBool IsCompatibleWith(TUint aCpu, TUint aAsic, TUint aVMask);
sl@0
    40
private:
sl@0
    41
	inline TUint Layer();
sl@0
    42
	inline TUint Parent();
sl@0
    43
	inline TUint VMask();
sl@0
    44
private:
sl@0
    45
	TUint iVariant;
sl@0
    46
	};
sl@0
    47
sl@0
    48
/**
sl@0
    49
@internalTechnology
sl@0
    50
*/
sl@0
    51
inline THardwareVariant::THardwareVariant()
sl@0
    52
	{iVariant=0x01000000;}
sl@0
    53
sl@0
    54
/**
sl@0
    55
@internalTechnology
sl@0
    56
*/
sl@0
    57
inline THardwareVariant::THardwareVariant(TUint aVariant)
sl@0
    58
	{iVariant=aVariant;}
sl@0
    59
sl@0
    60
/**
sl@0
    61
@internalTechnology
sl@0
    62
*/
sl@0
    63
inline THardwareVariant::operator TUint()
sl@0
    64
	{return iVariant;}
sl@0
    65
sl@0
    66
/**
sl@0
    67
@internalTechnology
sl@0
    68
*/
sl@0
    69
inline TUint THardwareVariant::Layer()
sl@0
    70
	{return iVariant>>24;}
sl@0
    71
sl@0
    72
/**
sl@0
    73
@internalTechnology
sl@0
    74
*/
sl@0
    75
inline TUint THardwareVariant::Parent()
sl@0
    76
	{return (iVariant>>16)&0xff;}
sl@0
    77
sl@0
    78
/**
sl@0
    79
@internalTechnology
sl@0
    80
*/
sl@0
    81
inline TUint THardwareVariant::VMask()
sl@0
    82
	{return iVariant&0xffff;}
sl@0
    83
sl@0
    84
/**
sl@0
    85
@internalTechnology
sl@0
    86
*/
sl@0
    87
inline TBool THardwareVariant::IsIndependent()
sl@0
    88
	{return (Layer()<=3);}
sl@0
    89
sl@0
    90
/**
sl@0
    91
@internalTechnology
sl@0
    92
*/
sl@0
    93
inline TBool THardwareVariant::IsCpu()
sl@0
    94
	{return (Parent()==3);}
sl@0
    95
sl@0
    96
/**
sl@0
    97
@internalTechnology
sl@0
    98
*/
sl@0
    99
inline TBool THardwareVariant::IsCompatibleWith(TUint aCpu, TUint aAsic, TUint aVMask)
sl@0
   100
	{ return(Layer()<=3 || (Parent()==3 && Layer()==aCpu) ||
sl@0
   101
		(Layer()==aAsic && (VMask() & aVMask)!=0) );}
sl@0
   102
sl@0
   103
sl@0
   104
/** Functions/Data defined in layer 2 or below of the kernel and not available to layer 1.
sl@0
   105
sl@0
   106
@internalComponent
sl@0
   107
*/
sl@0
   108
class PP
sl@0
   109
	{
sl@0
   110
public:
sl@0
   111
	enum TPlatPanic
sl@0
   112
		{
sl@0
   113
		EInitialSystemTimeInvalid=0,
sl@0
   114
		EInvalidStartupReason=1,
sl@0
   115
		EIncorrectDllDataAddress=2,
sl@0
   116
		ENoDllDataChunk=3,
sl@0
   117
		EUnsupportedOldBinary=4,
sl@0
   118
    	};
sl@0
   119
sl@0
   120
	static void Panic(TPlatPanic aPanic);
sl@0
   121
	static void InitSuperPageFromRom(TLinAddr aRomHeader, TLinAddr aSuperPage);
sl@0
   122
public:
sl@0
   123
	static TInt RamDriveMaxSize;
sl@0
   124
	static TInt RamDriveRange;
sl@0
   125
	static TUint32 NanoWaitCal;
sl@0
   126
	static DChunk* TheRamDriveChunk;
sl@0
   127
	static TLinAddr RamDriveStartAddress;
sl@0
   128
	static TInt MaxUserThreadStack;
sl@0
   129
	static TInt UserThreadStackGuard;
sl@0
   130
	static TInt MaxStackSpacePerProcess;
sl@0
   131
	static TInt SupervisorThreadStackGuard;
sl@0
   132
	static TUint32 MonitorEntryPoint[3];
sl@0
   133
	static TLinAddr RomRootDirAddress;
sl@0
   134
public:
sl@0
   135
	};
sl@0
   136
sl@0
   137
extern "C" {
sl@0
   138
extern TLinAddr RomHeaderAddress;
sl@0
   139
}
sl@0
   140
sl@0
   141
/********************************************
sl@0
   142
 * Code segment
sl@0
   143
 ********************************************/
sl@0
   144
sl@0
   145
/**
sl@0
   146
@internalComponent
sl@0
   147
*/
sl@0
   148
struct SRamCodeInfo
sl@0
   149
	{
sl@0
   150
	TInt iCodeSize;
sl@0
   151
	TInt iTextSize;
sl@0
   152
	TLinAddr iCodeRunAddr;
sl@0
   153
	TLinAddr iCodeLoadAddr;
sl@0
   154
	TInt iDataSize;
sl@0
   155
	TInt iBssSize;
sl@0
   156
	TLinAddr iDataRunAddr;
sl@0
   157
	TLinAddr iDataLoadAddr;
sl@0
   158
	TInt iConstOffset; // not used
sl@0
   159
	TLinAddr iExportDir;
sl@0
   160
	TInt iExportDirCount;
sl@0
   161
	TLinAddr iExceptionDescriptor;
sl@0
   162
	};
sl@0
   163
sl@0
   164
sl@0
   165
class DEpocCodeSeg;
sl@0
   166
sl@0
   167
/**
sl@0
   168
@internalComponent
sl@0
   169
*/
sl@0
   170
class DEpocCodeSegMemory : public DBase
sl@0
   171
	{
sl@0
   172
public:
sl@0
   173
	static DEpocCodeSegMemory* New(DEpocCodeSeg* aCodeSeg);
sl@0
   174
	TInt Open();
sl@0
   175
	TInt Close();
sl@0
   176
protected:
sl@0
   177
	DEpocCodeSegMemory(DEpocCodeSeg* aCodeSeg);
sl@0
   178
public:
sl@0
   179
	TInt iAccessCount;
sl@0
   180
	SRamCodeInfo iRamInfo;
sl@0
   181
	DEpocCodeSeg* iCodeSeg;
sl@0
   182
	};
sl@0
   183
sl@0
   184
sl@0
   185
/**
sl@0
   186
@internalComponent
sl@0
   187
*/
sl@0
   188
class DEpocCodeSeg : public DCodeSeg
sl@0
   189
	{
sl@0
   190
public:
sl@0
   191
	virtual ~DEpocCodeSeg();
sl@0
   192
	void Destruct();
sl@0
   193
public:
sl@0
   194
	virtual void Info(TCodeSegCreateInfo& aInfo);
sl@0
   195
	virtual TLibraryFunction Lookup(TInt aOrdinal);
sl@0
   196
	virtual TInt GetMemoryInfo(TModuleMemoryInfo& aInfo, DProcess* aProcess);
sl@0
   197
	virtual TInt DoCreate(TCodeSegCreateInfo& aInfo, DProcess* aProcess);
sl@0
   198
	virtual void InitData();
sl@0
   199
	virtual TInt Loaded(TCodeSegCreateInfo& aInfo);
sl@0
   200
	virtual TInt DoCreateRam(TCodeSegCreateInfo& aInfo, DProcess* aProcess)=0;
sl@0
   201
	virtual TInt DoCreateXIP(DProcess* aProcess)=0;
sl@0
   202
public:
sl@0
   203
	inline SRamCodeInfo& RamInfo()
sl@0
   204
		{return *(SRamCodeInfo*)iInfo;}
sl@0
   205
	inline const TRomImageHeader& RomInfo()
sl@0
   206
		{return *(const TRomImageHeader*)iInfo;}
sl@0
   207
	void GetDataSizeAndBase(TInt& aTotalDataSizeOut, TLinAddr& aDataBaseOut);
sl@0
   208
public:
sl@0
   209
	TUint8 iXIP;		// TRUE for XIP ROM code
sl@0
   210
	const TAny* iInfo;	// pointer to TRomImageHeader or SRamCodeInfo
sl@0
   211
	DEpocCodeSegMemory* iMemory;
sl@0
   212
	TCodeSegLoaderCookieList* iLoaderCookie;
sl@0
   213
	};
sl@0
   214
sl@0
   215
/********************************************
sl@0
   216
 * Process control block
sl@0
   217
 ********************************************/
sl@0
   218
sl@0
   219
/**
sl@0
   220
@internalComponent
sl@0
   221
*/
sl@0
   222
class DEpocProcess : public DProcess
sl@0
   223
	{
sl@0
   224
public:
sl@0
   225
	virtual TInt AttachExistingCodeSeg(TProcessCreateInfo& aInfo);
sl@0
   226
	};
sl@0
   227
sl@0
   228
/**
sl@0
   229
@internalComponent
sl@0
   230
*/
sl@0
   231
inline const TRomHeader& TheRomHeader()
sl@0
   232
	{return *((const TRomHeader *)RomHeaderAddress);}
sl@0
   233
sl@0
   234
#endif