Update contrib.
1 // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of the License "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
14 // e32\include\memmodel\epoc\plat_priv.h
16 // WARNING: This file contains some APIs which are internal and are subject
17 // to change without notice. Such APIs should therefore not be used
18 // outside the Kernel and Hardware Services package.
23 #include <kernel/kern_priv.h>
25 #include <e32def_private.h>
27 /** Hardware Variant Discriminator
31 class THardwareVariant
34 inline THardwareVariant();
35 inline THardwareVariant(TUint aVariant);
36 inline operator TUint();
37 inline TBool IsIndependent();
39 inline TBool IsCompatibleWith(TUint aCpu, TUint aAsic, TUint aVMask);
42 inline TUint Parent();
51 inline THardwareVariant::THardwareVariant()
52 {iVariant=0x01000000;}
57 inline THardwareVariant::THardwareVariant(TUint aVariant)
63 inline THardwareVariant::operator TUint()
69 inline TUint THardwareVariant::Layer()
70 {return iVariant>>24;}
75 inline TUint THardwareVariant::Parent()
76 {return (iVariant>>16)&0xff;}
81 inline TUint THardwareVariant::VMask()
82 {return iVariant&0xffff;}
87 inline TBool THardwareVariant::IsIndependent()
88 {return (Layer()<=3);}
93 inline TBool THardwareVariant::IsCpu()
94 {return (Parent()==3);}
99 inline TBool THardwareVariant::IsCompatibleWith(TUint aCpu, TUint aAsic, TUint aVMask)
100 { return(Layer()<=3 || (Parent()==3 && Layer()==aCpu) ||
101 (Layer()==aAsic && (VMask() & aVMask)!=0) );}
104 /** Functions/Data defined in layer 2 or below of the kernel and not available to layer 1.
113 EInitialSystemTimeInvalid=0,
114 EInvalidStartupReason=1,
115 EIncorrectDllDataAddress=2,
117 EUnsupportedOldBinary=4,
120 static void Panic(TPlatPanic aPanic);
121 static void InitSuperPageFromRom(TLinAddr aRomHeader, TLinAddr aSuperPage);
123 static TInt RamDriveMaxSize;
124 static TInt RamDriveRange;
125 static TUint32 NanoWaitCal;
126 static DChunk* TheRamDriveChunk;
127 static TLinAddr RamDriveStartAddress;
128 static TInt MaxUserThreadStack;
129 static TInt UserThreadStackGuard;
130 static TInt MaxStackSpacePerProcess;
131 static TInt SupervisorThreadStackGuard;
132 static TUint32 MonitorEntryPoint[3];
133 static TLinAddr RomRootDirAddress;
138 extern TLinAddr RomHeaderAddress;
141 /********************************************
143 ********************************************/
152 TLinAddr iCodeRunAddr;
153 TLinAddr iCodeLoadAddr;
156 TLinAddr iDataRunAddr;
157 TLinAddr iDataLoadAddr;
158 TInt iConstOffset; // not used
160 TInt iExportDirCount;
161 TLinAddr iExceptionDescriptor;
170 class DEpocCodeSegMemory : public DBase
173 static DEpocCodeSegMemory* New(DEpocCodeSeg* aCodeSeg);
177 DEpocCodeSegMemory(DEpocCodeSeg* aCodeSeg);
180 SRamCodeInfo iRamInfo;
181 DEpocCodeSeg* iCodeSeg;
188 class DEpocCodeSeg : public DCodeSeg
191 virtual ~DEpocCodeSeg();
194 virtual void Info(TCodeSegCreateInfo& aInfo);
195 virtual TLibraryFunction Lookup(TInt aOrdinal);
196 virtual TInt GetMemoryInfo(TModuleMemoryInfo& aInfo, DProcess* aProcess);
197 virtual TInt DoCreate(TCodeSegCreateInfo& aInfo, DProcess* aProcess);
198 virtual void InitData();
199 virtual TInt Loaded(TCodeSegCreateInfo& aInfo);
200 virtual TInt DoCreateRam(TCodeSegCreateInfo& aInfo, DProcess* aProcess)=0;
201 virtual TInt DoCreateXIP(DProcess* aProcess)=0;
203 inline SRamCodeInfo& RamInfo()
204 {return *(SRamCodeInfo*)iInfo;}
205 inline const TRomImageHeader& RomInfo()
206 {return *(const TRomImageHeader*)iInfo;}
207 void GetDataSizeAndBase(TInt& aTotalDataSizeOut, TLinAddr& aDataBaseOut);
209 TUint8 iXIP; // TRUE for XIP ROM code
210 const TAny* iInfo; // pointer to TRomImageHeader or SRamCodeInfo
211 DEpocCodeSegMemory* iMemory;
212 TCodeSegLoaderCookieList* iLoaderCookie;
215 /********************************************
216 * Process control block
217 ********************************************/
222 class DEpocProcess : public DProcess
225 virtual TInt AttachExistingCodeSeg(TProcessCreateInfo& aInfo);
231 inline const TRomHeader& TheRomHeader()
232 {return *((const TRomHeader *)RomHeaderAddress);}