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() |