kernel/eka/include/nkernsmp/arm/ncern.h
branchRCL_3
changeset 44 3e88ff8f41d5
parent 43 c1f20ce4abcf
--- a/kernel/eka/include/nkernsmp/arm/ncern.h	Tue Aug 31 16:34:26 2010 +0300
+++ b/kernel/eka/include/nkernsmp/arm/ncern.h	Wed Sep 01 12:34:56 2010 +0100
@@ -75,45 +75,20 @@
 	TLinAddr	iInitR13Und;		// initial value for R13_und
 	};
 
-typedef void (*TDetachComplete)(void);
+
+/** Timer frequency specification
 
-struct SPerCpuUncached
-	{
-	volatile TUint32	iDetachCount;		// Number of times core has detached from SMP cluster
-	volatile TUint32	iAttachCount;		// Number of times core has reattached to SMP cluster
-	volatile TBool		iPowerOffReq;		// TRUE if core needs to be powered off
-	volatile TBool		iPowerOnReq;		// TRUE if core needs to be powered on
-	TDetachComplete		iDetachCompleteFn;	// idle handler jumps to this to request power down if necessary
-											// after cleaning and disabling caches, detaching from SMP cluster
-											// and saving state required to bring the core back up again
-	volatile TUint32	iDetachCompleteCpus;
-	};
+Stores a frequency as a fraction of a (separately stored) maximum.
+The frequency must be at least 1/256 of the maximum.
 
-union UPerCpuUncached
-	{
-	SPerCpuUncached		iU;
-	volatile TUint64	i__Dummy[8];
-	};
-
-__ASSERT_COMPILE(sizeof(SPerCpuUncached) <= 8*sizeof(TUint64));
-
-/** Function to power up a CPU
-@publishedPartner
+@internalTechnology
 @prototype
 */
-typedef void (*TCpuPowerUpFn)(TInt aCpu, SPerCpuUncached* aU);
-
-/** Function to power down a CPU
-@publishedPartner
-@prototype
-*/
-typedef void (*TCpuPowerDownFn)(TInt aCpu, SPerCpuUncached* aU);
-
-/** Function to notify changes to system clock frequencies
-@publishedPartner
-@prototype
-*/
-typedef TInt (*TFrequencyChangeFn)();
+struct STimerMult
+	{
+	TUint32		iFreq;						// frequency as a fraction of maximum possible, multiplied by 2^32
+	TUint32		iInverse;					// 2^24/(iFreq/2^32) = 2^56/iFreq
+	};
 
 /** Variant interface block
 @internalTechnology
@@ -129,14 +104,8 @@
 	TLinAddr	iGicDistAddr;				// address of GIC Distributor
 	TLinAddr	iGicCpuIfcAddr;				// address of GIC CPU interface (must be same for all CPUs)
 	TLinAddr	iLocalTimerAddr;			// address of per-CPU timer (must be same for all CPUs)
-	TLinAddr	iGlobalTimerAddr;			// address of global timer if it exists
-	SRatio*		iTimerFreqR[KMaxCpus];		// timer[i] frequency as a fraction of iMaxTimerClock
-	SRatio*		iCpuFreqR[KMaxCpus];		// CPU[i] frequency as a fraction of iMaxCpuClock
-	UPerCpuUncached*		iUncached[KMaxCpus];	// Pointer to uncached memory for each CPU
-	TCpuPowerUpFn			iCpuPowerUpFn;			// function used to power up a retired CPU (NULL if core control not supported)
-	TCpuPowerDownFn			iCpuPowerDownFn;		// function used to power down a CPU (NULL if power down done within idle handler itself)
-	SRatio*		iGTimerFreqR;				// global timer frequency as a fraction of iMaxTimerClock
-	TFrequencyChangeFn		iFrqChgFn;		// function to notify frequency changes
+	volatile STimerMult* iTimerMult[KMaxCpus];	// timer[i] frequency / iMaxTimerClock * 2^32
+	volatile TUint32* iCpuMult[KMaxCpus];	// CPU[i] frequency / iMaxCpuClock * 2^32
 	};
 
 // End of file