--- a/kernel/eka/include/kernel/kern_priv.h Tue Feb 02 01:24:03 2010 +0200
+++ b/kernel/eka/include/kernel/kern_priv.h Fri Apr 16 16:24:37 2010 +0300
@@ -62,6 +62,9 @@
#endif
#endif
+// size of each buffer used to store entropy data before it is passed to the RNG
+const TUint KEntropyBufferSizeWords = 1024;// maximum size of 1024 words (32Kbit);
+
const TInt KKernelServerDefaultPriority=16;
const TInt KDefaultExitPriority=KKernelServerDefaultPriority;
@@ -543,6 +546,7 @@
TInt After(TInt aInterval, TTickCallBack aFunction, TRequestStatus& aStatus);
TInt At(const TTimeK& aTime, TSecondCallBack aFunction, TRequestStatus& aStatus);
TInt AfterHighRes(TInt aInterval, NTimerFn aFunction, TRequestStatus& aStatus);
+ TInt AgainHighRes(TInt aInterval, NTimerFn aFunction, TRequestStatus& aStatus);
TInt Inactivity(TInt aSeconds, TInactivityCallBack aFunction, TRequestStatus& aStatus);
void Cancel(DThread* aThread);
void Abort(DThread* aThread, TInt aTypeMask);
@@ -585,6 +589,7 @@
TInt At(TRequestStatus& aStatus, const TTimeK& aTime);
TInt Lock(TRequestStatus& aStatus, TTimerLockSpec aLock);
void HighRes(TRequestStatus& aStatus, TInt aInterval);
+ void AgainHighRes(TRequestStatus& aStatus, TInt aInterval);
TInt Inactivity(TRequestStatus& aStatus, TInt aSeconds);
void Abort(TBool aAbortAbsolute);
virtual TInt RequestUserHandle(DThread* aThread, TOwnerType aType);
@@ -2482,6 +2487,9 @@
ECodeSegRemoveAbsent=135,
EPhysicalPinObjectBad=136,
EShBufVirtualNotDefined=137, //< A required virtual method is not present in a shared buffer derived class (internal error)
+ ESecureRNGInitializationFailed = 138,
+ ESecureRNGInternalStateNotSecure = 139,
+ ESecureRNGOutputsInBadState = 140,
ESystemException=0x10000000,
ESoftwareWarmReset=0x10000001
@@ -2562,6 +2570,10 @@
static TKernelHookFn KernelHooks[ENumKernelHooks];
static TMiscNotifierMgr TheMiscNotifierMgr;
static TAny* VariantData[31];
+ static TUint32 EntropyBufferStatus[KMaxCpus];
+ static TUint32* EntropyBuffer[KMaxCpus];
+ static TUint32 TempEntropyBuffer[KEntropyBufferSizeWords];
+ static TDfc EntropyBufferDfc;
public:
static TInt InitialiseMicrokernel();
#ifdef __SMP__
@@ -2754,6 +2766,7 @@
static void Init2AP();
#endif
static void Init3();
+ static void Init4();
static TInt InitSvHeapChunk(DChunk* aChunk, TInt aSize);
static TInt InitSvStackChunk();
static TBool IsRomAddress(const TAny* aPtr);