2c2
< * Copyright (c) 2010-2013 ARM Limited
---
> * Copyright (c) 2010-2013,2018 ARM Limited
42a43
> #include "arch/arm/system.hh"
52c53
< : BasicPioDevice(p, 0x38), gic(p->gic)
---
> : BasicPioDevice(p, 0x38)
53a55,60
> }
>
> void
> CpuLocalTimer::init()
> {
> auto p = params();
55c62,63
< for (int i = 0; i < CPU_MAX; i++) {
---
> for (int i = 0; i < sys->numContexts(); i++) {
> ThreadContext* tc = sys->getThreadContext(i);
58,62c66,70
< localTimer[i]._name = oss.str();
< localTimer[i].parent = this;
< localTimer[i].intNumTimer = p->int_num_timer;
< localTimer[i].intNumWatchdog = p->int_num_watchdog;
< localTimer[i].cpuNum = i;
---
>
> localTimer.emplace_back(
> new Timer(oss.str(), this,
> p->int_timer->get(tc),
> p->int_watchdog->get(tc)));
63a72,73
>
> BasicPioDevice::init();
66,68c76,84
< CpuLocalTimer::Timer::Timer()
< : timerControl(0x0), watchdogControl(0x0), rawIntTimer(false), rawIntWatchdog(false),
< rawResetWatchdog(false), watchdogDisableReg(0x0), pendingIntTimer(false), pendingIntWatchdog(false),
---
> CpuLocalTimer::Timer::Timer(const std::string &timer_name,
> CpuLocalTimer* _parent,
> ArmInterruptPin* int_timer,
> ArmInterruptPin* int_watchdog)
> : _name(timer_name), parent(_parent), intTimer(int_timer),
> intWatchdog(int_watchdog), timerControl(0x0), watchdogControl(0x0),
> rawIntTimer(false), rawIntWatchdog(false),
> rawResetWatchdog(false), watchdogDisableReg(0x0),
> pendingIntTimer(false), pendingIntWatchdog(false),
84c100
< assert(cpu_id < CPU_MAX);
---
> assert(cpu_id < localTimer.size());
87c103
< localTimer[cpu_id].read(pkt, daddr);
---
> localTimer[cpu_id]->read(pkt, daddr);
162c178
< assert(cpu_id < CPU_MAX);
---
> assert(cpu_id < localTimer.size());
165c181
< localTimer[cpu_id].write(pkt, daddr);
---
> localTimer[cpu_id]->write(pkt, daddr);
300c316
< parent->gic->sendPPInt(intNumTimer, cpuNum);
---
> intTimer->raise();
331c347
< parent->gic->sendPPInt(intNumWatchdog, cpuNum);
---
> intWatchdog->raise();
344,345d359
< SERIALIZE_SCALAR(intNumTimer);
< SERIALIZE_SCALAR(intNumWatchdog);
383,385d396
< UNSERIALIZE_SCALAR(intNumTimer);
< UNSERIALIZE_SCALAR(intNumWatchdog);
<
424,425c435,436
< for (int i = 0; i < CPU_MAX; i++)
< localTimer[i].serializeSection(cp, csprintf("timer%d", i));
---
> for (int i = 0; i < sys->numContexts(); i++)
> localTimer[i]->serializeSection(cp, csprintf("timer%d", i));
431,432c442,443
< for (int i = 0; i < CPU_MAX; i++)
< localTimer[i].unserializeSection(cp, csprintf("timer%d", i));
---
> for (int i = 0; i < sys->numContexts(); i++)
> localTimer[i]->unserializeSection(cp, csprintf("timer%d", i));