kernel/eka/nkernsmp/x86/ncutils.cpp
changeset 201 43365a9b78a3
parent 90 947f0dc9f7a8
equal deleted inserted replaced
200:73ea206103e6 201:43365a9b78a3
    15 // 
    15 // 
    16 //
    16 //
    17 
    17 
    18 #include <x86.h>
    18 #include <x86.h>
    19 
    19 
    20 extern "C" {
       
    21 extern SVariantInterfaceBlock* VIB;
       
    22 }
       
    23 
       
    24 //#define __DBG_MON_FAULT__
    20 //#define __DBG_MON_FAULT__
    25 //#define __RAM_LOADED_CODE__
    21 //#define __RAM_LOADED_CODE__
    26 //#define __EARLY_DEBUG__
    22 //#define __EARLY_DEBUG__
    27 void InitFpu();
    23 void InitFpu();
    28 
    24 
   323 
   319 
   324 
   320 
   325 void NKern::Init0(TAny* a)
   321 void NKern::Init0(TAny* a)
   326 	{
   322 	{
   327 	__KTRACE_OPT(KBOOT,DEBUGPRINT("VIB=%08x", a));
   323 	__KTRACE_OPT(KBOOT,DEBUGPRINT("VIB=%08x", a));
   328 	VIB = (SVariantInterfaceBlock*)a;
   324 	SVariantInterfaceBlock* v = (SVariantInterfaceBlock*)a;
   329 	__NK_ASSERT_ALWAYS(VIB && VIB->iVer==0 && VIB->iSize==sizeof(SVariantInterfaceBlock));
   325 	TheScheduler.iVIB = v;
   330 	__KTRACE_OPT(KBOOT,DEBUGPRINT("iVer=%d iSize=%d", VIB->iVer, VIB->iSize));
   326 	__NK_ASSERT_ALWAYS(v && v->iVer==0 && v->iSize==sizeof(SVariantInterfaceBlock));
   331 	__KTRACE_OPT(KBOOT,DEBUGPRINT("iMaxCpuClock=%08x %08x", I64HIGH(VIB->iMaxCpuClock), I64LOW(VIB->iMaxCpuClock)));
   327 	__KTRACE_OPT(KBOOT,DEBUGPRINT("iVer=%d iSize=%d", v->iVer, v->iSize));
   332 	__KTRACE_OPT(KBOOT,DEBUGPRINT("iTimestampFreq=%u", VIB->iTimestampFreq));
   328 	__KTRACE_OPT(KBOOT,DEBUGPRINT("iMaxCpuClock=%08x %08x", I64HIGH(v->iMaxCpuClock), I64LOW(v->iMaxCpuClock)));
   333 	__KTRACE_OPT(KBOOT,DEBUGPRINT("iMaxTimerClock=%u", VIB->iMaxTimerClock));
   329 	__KTRACE_OPT(KBOOT,DEBUGPRINT("iTimestampFreq=%u", v->iTimestampFreq));
       
   330 	__KTRACE_OPT(KBOOT,DEBUGPRINT("iMaxTimerClock=%u", v->iMaxTimerClock));
   334 	TInt i;
   331 	TInt i;
   335 	for (i=0; i<KMaxCpus; ++i)
   332 	for (i=0; i<KMaxCpus; ++i)
   336 		{
   333 		{
   337 		TSubScheduler& ss = TheSubSchedulers[i];
   334 		TSubScheduler& ss = TheSubSchedulers[i];
   338 		ss.iSSX.iCpuFreqM = KMaxTUint32;
   335 		ss.iSSX.iCpuFreqRI.Set(v->iCpuFreqR[i]);
   339 		ss.iSSX.iCpuFreqS = 0;
   336 		ss.iSSX.iTimerFreqRI.Set(v->iTimerFreqR[i]);
   340 		ss.iSSX.iCpuPeriodM = 0x80000000u;
   337 
   341 		ss.iSSX.iCpuPeriodS = 31;
       
   342 		ss.iSSX.iNTimerFreqM = KMaxTUint32;
       
   343 		ss.iSSX.iNTimerFreqS = 0;
       
   344 		ss.iSSX.iNTimerPeriodM = 0x80000000u;
       
   345 		ss.iSSX.iNTimerPeriodS = 31;
       
   346 		ss.iSSX.iTimerFreqM = KMaxTUint32;
       
   347 		ss.iSSX.iTimerFreqS = 0;
       
   348 		ss.iSSX.iTimerPeriodM = 0x80000000u;
       
   349 		ss.iSSX.iTimerPeriodS = 31;
       
   350 		ss.iSSX.iTimestampOffset.i64 = 0;
   338 		ss.iSSX.iTimestampOffset.i64 = 0;
   351 		VIB->iTimerMult[i] = 0;
   339 		v->iCpuFreqR[i] = 0;
   352 		VIB->iCpuMult[i] = 0;
   340 		v->iTimerFreqR[i] = 0;
   353 		}
   341 		}
   354 	TheScheduler.iSX.iTimerMax = (VIB->iMaxTimerClock / 128);
   342 	TheScheduler.iSX.iTimerMax = (v->iMaxTimerClock / 128);
   355 	InitFpu();
   343 	InitFpu();
   356 	InterruptInit0();
   344 	InterruptInit0();
   357 	}
   345 	}
   358 
   346 
   359 EXPORT_C TUint32 NKern::CpuTimeMeasFreq()
   347 EXPORT_C TUint32 NKern::CpuTimeMeasFreq()
   398 
   386 
   399 void TScheduler::CCIndirectPowerDown(TAny*)
   387 void TScheduler::CCIndirectPowerDown(TAny*)
   400 	{
   388 	{
   401 	}
   389 	}
   402 
   390 
       
   391 void TScheduler::DoFrequencyChanged(TAny*)
       
   392 	{
       
   393 	}