From: Sean Wilson Date: Wed, 28 Jun 2017 16:55:34 +0000 (-0500) Subject: arm: Refactor some Event subclasses to lambdas X-Git-Tag: v19.0.0.0~2687 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=381aa8498997f5ce93480511f7514be85356687a;p=gem5.git arm: Refactor some Event subclasses to lambdas Change-Id: Ic59add8afee1d49633634272d9687a4b1558537e Signed-off-by: Sean Wilson Reviewed-on: https://gem5-review.googlesource.com/3929 Reviewed-by: Jason Lowe-Power Reviewed-by: Andreas Sandberg Maintainer: Andreas Sandberg --- diff --git a/src/dev/arm/gic_pl390.cc b/src/dev/arm/gic_pl390.cc index 126431fe6..d2ec1d79b 100644 --- a/src/dev/arm/gic_pl390.cc +++ b/src/dev/arm/gic_pl390.cc @@ -87,7 +87,9 @@ Pl390::Pl390(const Params *p) cpuBpr[x] = GICC_BPR_MINIMUM; // Initialize cpu highest int cpuHighestInt[x] = SPURIOUS_INT; - postIntEvent[x] = new PostIntEvent(*this, x); + postIntEvent[x] = + new EventFunctionWrapper([this, x]{ postDelayedInt(x); }, + "Post Interrupt to CPU"); } DPRINTF(Interrupt, "cpuEnabled[0]=%d cpuEnabled[1]=%d\n", cpuEnabled[0], cpuEnabled[1]); diff --git a/src/dev/arm/gic_pl390.hh b/src/dev/arm/gic_pl390.hh index 60d9ae30d..58d84346d 100644 --- a/src/dev/arm/gic_pl390.hh +++ b/src/dev/arm/gic_pl390.hh @@ -353,21 +353,7 @@ class Pl390 : public BaseGic, public BaseGicRegisters */ 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; - public: - PostIntEvent(Pl390 &_parent, uint32_t _cpu) - : parent(_parent), cpu(_cpu) - { } - void process() { parent.postDelayedInt(cpu); } - const char *description() const { return "Post Interrupt to CPU"; } - }; - PostIntEvent *postIntEvent[CPU_MAX]; + EventFunctionWrapper *postIntEvent[CPU_MAX]; int pendingDelayedInterrupts; public: diff --git a/src/dev/arm/vgic.cc b/src/dev/arm/vgic.cc index 6744ad513..cc8ad7788 100644 --- a/src/dev/arm/vgic.cc +++ b/src/dev/arm/vgic.cc @@ -53,7 +53,9 @@ VGic::VGic(const Params *p) maintInt(p->ppint) { for (int x = 0; x < VGIC_CPU_MAX; x++) { - postVIntEvent[x] = new PostVIntEvent(x, p->platform); + postVIntEvent[x] = new EventFunctionWrapper( + [this, x]{ processPostVIntEvent(x); }, + "Post VInterrupt to CPU"); maintIntPosted[x] = false; vIntPosted[x] = false; } @@ -368,6 +370,13 @@ VGic::unPostVInt(uint32_t cpu) platform->intrctrl->clear(cpu, ArmISA::INT_VIRT_IRQ, 0); } +void +VGic::processPostVIntEvent(uint32_t cpu) +{ + platform->intrctrl->post(cpu, ArmISA::INT_VIRT_IRQ, 0); +} + + void VGic::postMaintInt(uint32_t cpu) { diff --git a/src/dev/arm/vgic.hh b/src/dev/arm/vgic.hh index e9bc29c18..40e42d4fa 100644 --- a/src/dev/arm/vgic.hh +++ b/src/dev/arm/vgic.hh @@ -104,22 +104,10 @@ class VGic : public PioDevice static const uint32_t LR_PENDING = 1; static const uint32_t LR_ACTIVE = 2; - /** Event definition to post interrupt to CPU after a delay - */ - class PostVIntEvent : public Event - { - private: - uint32_t cpu; - Platform *platform; - public: - PostVIntEvent( uint32_t c, Platform* p) - : cpu(c), platform(p) - { } - void process() { platform->intrctrl->post(cpu, ArmISA::INT_VIRT_IRQ, 0);} - const char *description() const { return "Post VInterrupt to CPU"; } - }; + /** Post interrupt to CPU */ + void processPostVIntEvent(uint32_t cpu); - PostVIntEvent *postVIntEvent[VGIC_CPU_MAX]; + EventFunctionWrapper *postVIntEvent[VGIC_CPU_MAX]; bool maintIntPosted[VGIC_CPU_MAX]; bool vIntPosted[VGIC_CPU_MAX];