diff -r c1f20ce4abcf -r 3e88ff8f41d5 kernel/eka/include/nkernsmp/x86/ncern.h --- a/kernel/eka/include/nkernsmp/x86/ncern.h Tue Aug 31 16:34:26 2010 +0300 +++ b/kernel/eka/include/nkernsmp/x86/ncern.h Wed Sep 01 12:34:56 2010 +0100 @@ -36,6 +36,20 @@ { }; +/** Timer frequency specification + +Stores a frequency as a fraction of a (separately stored) maximum. +The frequency must be at least 1/256 of the maximum. + +@internalTechnology +@prototype +*/ +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 @prototype @@ -45,9 +59,8 @@ TUint64 iMaxCpuClock; // maximum possible CPU clock frequency on this system TUint32 iTimestampFreq; // rate at which timestamp increments TUint32 iMaxTimerClock; // maximum possible local timer clock frequency - SRatio* iTimerFreqR[KMaxCpus]; // timer[i] frequency as a fraction of iMaxTimerClock - SRatio* iCpuFreqR[KMaxCpus]; // CPU[i] frequency as a fraction of iMaxCpuClock - SRatio* iTimestampFreqR; // timestamp counter frequency as a fraction of + volatile STimerMult* iTimerMult[KMaxCpus]; // timer[i] frequency as a fraction of iMaxTimerClock + volatile TUint32* iCpuMult[KMaxCpus]; // CPU[i] frequency / iMaxCpuClock * 2^32 }; // End of file