72a73,76
> ArmInterruptPinGen::ArmInterruptPinGen(const ArmInterruptPinParams *p)
> : SimObject(p)
> {
> }
74,78c78,79
< ArmInterruptPin::ArmInterruptPin(const ArmInterruptPinParams *p)
< : SimObject(p),
< threadContext(nullptr),
< platform(dynamic_cast<RealView*>(p->platform)),
< intNum(p->num)
---
> ArmSPIGen::ArmSPIGen(const ArmSPIParams *p)
> : ArmInterruptPinGen(p), pin(new ArmSPI(p->platform, p->num))
79a81,120
> }
>
> ArmInterruptPin*
> ArmSPIGen::get(ThreadContext* tc)
> {
> return pin;
> }
>
> ArmPPIGen::ArmPPIGen(const ArmPPIParams *p)
> : ArmInterruptPinGen(p)
> {
> }
>
> ArmInterruptPin*
> ArmPPIGen::get(ThreadContext* tc)
> {
> panic_if(!tc, "Invalid Thread Context\n");
> ContextID cid = tc->contextId();
>
> auto pin_it = pins.find(cid);
>
> if (pin_it != pins.end()) {
> // PPI Pin Already generated
> return pin_it->second;
> } else {
> // Generate PPI Pin
> auto p = static_cast<const ArmPPIParams *>(_params);
> ArmPPI *pin = new ArmPPI(p->platform, tc, p->num);
>
> pins.insert({cid, pin});
>
> return pin;
> }
> }
>
> ArmInterruptPin::ArmInterruptPin(
> Platform *_platform, ThreadContext *tc, uint32_t int_num)
> : threadContext(tc), platform(dynamic_cast<RealView*>(_platform)),
> intNum(int_num)
> {
100,103c141,143
<
<
< ArmSPI::ArmSPI(const ArmSPIParams *p)
< : ArmInterruptPin(p)
---
> ArmSPI::ArmSPI(
> Platform *_platform, uint32_t int_num)
> : ArmInterruptPin(_platform, nullptr, int_num)
119,120c159,161
< ArmPPI::ArmPPI(const ArmPPIParams *p)
< : ArmInterruptPin(p)
---
> ArmPPI::ArmPPI(
> Platform *_platform, ThreadContext *tc, uint32_t int_num)
> : ArmInterruptPin(_platform, tc, int_num)
136,137c177
<
< ArmSPI *
---
> ArmSPIGen *
140c180
< return new ArmSPI(this);
---
> return new ArmSPIGen(this);
143c183
< ArmPPI *
---
> ArmPPIGen *
146c186
< return new ArmPPI(this);
---
> return new ArmPPIGen(this);