diff options
Diffstat (limited to 'src/dev/arm/gic_pl390.hh')
-rw-r--r-- | src/dev/arm/gic_pl390.hh | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/dev/arm/gic_pl390.hh b/src/dev/arm/gic_pl390.hh index 533a0f318..664705837 100644 --- a/src/dev/arm/gic_pl390.hh +++ b/src/dev/arm/gic_pl390.hh @@ -318,25 +318,32 @@ class Pl390 : public BaseGic int intNumToWord(int num) const { return num >> 5; } int intNumToBit(int num) const { return num % 32; } - /** Post an interrupt to a CPU + /** + * Post an interrupt to a CPU with a delay */ void postInt(uint32_t cpu, Tick when); + /** + * Deliver a delayed interrupt to the target CPU + */ + void postDelayedInt(uint32_t cpu); + /** Event definition to post interrupt to CPU after a delay */ class PostIntEvent : public Event { private: + Pl390 &parent; uint32_t cpu; - Platform *platform; public: - PostIntEvent( uint32_t c, Platform* p) - : cpu(c), platform(p) + PostIntEvent(Pl390 &_parent, uint32_t _cpu) + : parent(_parent), cpu(_cpu) { } - void process() { platform->intrctrl->post(cpu, ArmISA::INT_IRQ, 0);} + void process() { parent.postDelayedInt(cpu); } const char *description() const { return "Post Interrupt to CPU"; } }; PostIntEvent *postIntEvent[CPU_MAX]; + int pendingDelayedInterrupts; public: typedef Pl390Params Params; @@ -347,6 +354,8 @@ class Pl390 : public BaseGic } Pl390(const Params *p); + DrainState drain() override; + void serialize(CheckpointOut &cp) const override; void unserialize(CheckpointIn &cp) override; |