Sean Wilson has uploaded this change for review. ( https://gem5-review.googlesource.com/3747

Change subject: arm: Replace EventWrapper use with EventFunctionWrapper
......................................................................

arm: Replace EventWrapper use with EventFunctionWrapper

Change-Id: I08de5f72513645d1fe92bde99fa205dde897e951
Signed-off-by: Sean Wilson <spwils...@wisc.edu>
---
M src/arch/arm/table_walker.cc
M src/arch/arm/table_walker.hh
M src/dev/arm/energy_ctrl.cc
M src/dev/arm/energy_ctrl.hh
M src/dev/arm/flash_device.cc
M src/dev/arm/flash_device.hh
M src/dev/arm/generic_timer.cc
M src/dev/arm/generic_timer.hh
M src/dev/arm/hdlcd.cc
M src/dev/arm/hdlcd.hh
M src/dev/arm/kmi.cc
M src/dev/arm/kmi.hh
M src/dev/arm/pl011.cc
M src/dev/arm/pl011.hh
M src/dev/arm/pl111.cc
M src/dev/arm/pl111.hh
M src/dev/arm/rtc_pl031.cc
M src/dev/arm/rtc_pl031.hh
M src/dev/arm/timer_cpulocal.cc
M src/dev/arm/timer_cpulocal.hh
M src/dev/arm/timer_sp804.cc
M src/dev/arm/timer_sp804.hh
M src/dev/arm/ufs_device.cc
M src/dev/arm/ufs_device.hh
24 files changed, 54 insertions(+), 48 deletions(-)



diff --git a/src/arch/arm/table_walker.cc b/src/arch/arm/table_walker.cc
index 8783d0a..2d66642 100644
--- a/src/arch/arm/table_walker.cc
+++ b/src/arch/arm/table_walker.cc
@@ -64,12 +64,15 @@
       numSquashable(p->num_squash_per_cycle),
       pendingReqs(0),
       pendingChangeTick(curTick()),
-      doL1DescEvent(this), doL2DescEvent(this),
-      doL0LongDescEvent(this), doL1LongDescEvent(this),
-      doL2LongDescEvent(this), doL3LongDescEvent(this),
+      doL1DescEvent([this]{ doL1DescriptorWrapper(); }, name()),
+      doL2DescEvent([this]{ doL2DescriptorWrapper(); }, name()),
+      doL0LongDescEvent([this]{ doL0LongDescriptorWrapper(); }, name()),
+      doL1LongDescEvent([this]{ doL1LongDescriptorWrapper(); }, name()),
+      doL2LongDescEvent([this]{ doL2LongDescriptorWrapper(); }, name()),
+      doL3LongDescEvent([this]{ doL3LongDescriptorWrapper(); }, name()),
       LongDescEventByLevel { &doL0LongDescEvent, &doL1LongDescEvent,
                              &doL2LongDescEvent, &doL3LongDescEvent },
-      doProcessEvent(this)
+      doProcessEvent([this]{ processWalkWrapper(); }, name())
 {
     sctlr = 0;

diff --git a/src/arch/arm/table_walker.hh b/src/arch/arm/table_walker.hh
index c52cfcb..b322c50 100644
--- a/src/arch/arm/table_walker.hh
+++ b/src/arch/arm/table_walker.hh
@@ -920,28 +920,22 @@

     void doL1Descriptor();
     void doL1DescriptorWrapper();
-    EventWrapper<TableWalker,
-                 &TableWalker::doL1DescriptorWrapper> doL1DescEvent;
+    EventFunctionWrapper doL1DescEvent;

     void doL2Descriptor();
     void doL2DescriptorWrapper();
-    EventWrapper<TableWalker,
-                 &TableWalker::doL2DescriptorWrapper> doL2DescEvent;
+    EventFunctionWrapper doL2DescEvent;

     void doLongDescriptor();

     void doL0LongDescriptorWrapper();
-    EventWrapper<TableWalker,
- &TableWalker::doL0LongDescriptorWrapper> doL0LongDescEvent;
+    EventFunctionWrapper doL0LongDescEvent;
     void doL1LongDescriptorWrapper();
-    EventWrapper<TableWalker,
- &TableWalker::doL1LongDescriptorWrapper> doL1LongDescEvent;
+    EventFunctionWrapper doL1LongDescEvent;
     void doL2LongDescriptorWrapper();
-    EventWrapper<TableWalker,
- &TableWalker::doL2LongDescriptorWrapper> doL2LongDescEvent;
+    EventFunctionWrapper doL2LongDescEvent;
     void doL3LongDescriptorWrapper();
-    EventWrapper<TableWalker,
- &TableWalker::doL3LongDescriptorWrapper> doL3LongDescEvent;
+    EventFunctionWrapper doL3LongDescEvent;

     void doLongDescriptorWrapper(LookupLevel curr_lookup_level);
     Event* LongDescEventByLevel[4];
@@ -960,7 +954,7 @@
static bool checkAddrSizeFaultAArch64(Addr addr, int currPhysAddrRange);
     Fault processWalkAArch64();
     void processWalkWrapper();
- EventWrapper<TableWalker, &TableWalker::processWalkWrapper> doProcessEvent;
+    EventFunctionWrapper doProcessEvent;

     void nextWalk(ThreadContext *tc);

diff --git a/src/dev/arm/energy_ctrl.cc b/src/dev/arm/energy_ctrl.cc
index 9efdeb1..9cfce3a 100644
--- a/src/dev/arm/energy_ctrl.cc
+++ b/src/dev/arm/energy_ctrl.cc
@@ -54,7 +54,7 @@
       domainIDIndexToRead(0),
       perfLevelAck(0),
       perfLevelToRead(0),
-      updateAckEvent(this)
+      updateAckEvent([this]{ updatePLAck(); }, name())
 {
     fatal_if(!p->dvfs_handler, "EnergyCtrl: Needs a DVFSHandler for a "
              "functioning system.\n");
diff --git a/src/dev/arm/energy_ctrl.hh b/src/dev/arm/energy_ctrl.hh
index ddfd8d7..2c7eb85 100644
--- a/src/dev/arm/energy_ctrl.hh
+++ b/src/dev/arm/energy_ctrl.hh
@@ -182,6 +182,6 @@
         perfLevelAck = 1;
     }

-    EventWrapper<EnergyCtrl, &EnergyCtrl::updatePLAck> updateAckEvent;
+    EventFunctionWrapper updateAckEvent;
 };
 #endif //__DEV_ARM_ENERGY_CTRL_HH__
diff --git a/src/dev/arm/flash_device.cc b/src/dev/arm/flash_device.cc
index 3dc8d5b..ba28cff 100644
--- a/src/dev/arm/flash_device.cc
+++ b/src/dev/arm/flash_device.cc
@@ -88,7 +88,7 @@
     blocksPerDisk(0),
     planeMask(numPlanes - 1),
     planeEventQueue(numPlanes),
-    planeEvent(this)
+    planeEvent([this]{ actionComplete(); }, name())
 {

     /*
diff --git a/src/dev/arm/flash_device.hh b/src/dev/arm/flash_device.hh
index 307bc04..f5a3bfd 100644
--- a/src/dev/arm/flash_device.hh
+++ b/src/dev/arm/flash_device.hh
@@ -192,6 +192,6 @@
     std::vector<std::deque<struct CallBackEntry> > planeEventQueue;

     /** Completion event */
-    EventWrapper<FlashDevice, &FlashDevice::actionComplete> planeEvent;
+    EventFunctionWrapper planeEvent;
 };
 #endif //__DEV_ARM_FLASH_DEVICE_HH__
diff --git a/src/dev/arm/generic_timer.cc b/src/dev/arm/generic_timer.cc
index d33090d..efaebb1 100644
--- a/src/dev/arm/generic_timer.cc
+++ b/src/dev/arm/generic_timer.cc
@@ -95,7 +95,7 @@
     : _name(name), _parent(parent), _systemCounter(sysctr),
       _interrupt(interrupt),
       _control(0), _counterLimit(0), _offset(0),
-      _counterLimitReachedEvent(this)
+      _counterLimitReachedEvent([this]{ counterLimitReached(); }, name)
 {
 }

diff --git a/src/dev/arm/generic_timer.hh b/src/dev/arm/generic_timer.hh
index c606f1e..3a38954 100644
--- a/src/dev/arm/generic_timer.hh
+++ b/src/dev/arm/generic_timer.hh
@@ -157,8 +157,7 @@

     /// Called when the upcounter reaches the programmed value.
     void counterLimitReached();
-    EventWrapper<ArchTimer, &ArchTimer::counterLimitReached>
-    _counterLimitReachedEvent;
+    EventFunctionWrapper _counterLimitReachedEvent;

   public:
     ArchTimer(const std::string &name,
diff --git a/src/dev/arm/hdlcd.cc b/src/dev/arm/hdlcd.cc
index 081fec2..98f2a3d 100644
--- a/src/dev/arm/hdlcd.cc
+++ b/src/dev/arm/hdlcd.cc
@@ -83,7 +83,7 @@
       pixel_format(0),
       red_select(0), green_select(0), blue_select(0),

-      virtRefreshEvent(this),
+      virtRefreshEvent([this]{ virtRefresh(); }, name()),
       // Other
       bmp(&pixelPump.fb), pic(NULL), conv(PixelConverter::rgba8888_le),
       pixelPump(*this, *p->pxl_clk, p->pixel_chunk)
diff --git a/src/dev/arm/hdlcd.hh b/src/dev/arm/hdlcd.hh
index 4bca0bb..ecfe1ea 100644
--- a/src/dev/arm/hdlcd.hh
+++ b/src/dev/arm/hdlcd.hh
@@ -347,7 +347,7 @@

     /** Handler for fast frame refresh in KVM-mode */
     void virtRefresh();
-    EventWrapper<HDLcd, &HDLcd::virtRefresh> virtRefreshEvent;
+    EventFunctionWrapper virtRefreshEvent;

     /** Helper to write out bitmaps */
     Bitmap bmp;
diff --git a/src/dev/arm/kmi.cc b/src/dev/arm/kmi.cc
index 9230c15..8db9254 100644
--- a/src/dev/arm/kmi.cc
+++ b/src/dev/arm/kmi.cc
@@ -54,7 +54,8 @@
 Pl050::Pl050(const Params *p)
     : AmbaIntDevice(p, 0xfff), control(0), status(0x43), clkdiv(0),
       rawInterrupts(0), ackNext(false), shiftDown(false),
-      vnc(p->vnc), driverInitialized(false), intEvent(this)
+      vnc(p->vnc), driverInitialized(false),
+      intEvent([this]{ generateInterrupt(); }, name())
 {
     if (vnc) {
         if (!p->is_mouse)
diff --git a/src/dev/arm/kmi.hh b/src/dev/arm/kmi.hh
index 55e4b42..0593165 100644
--- a/src/dev/arm/kmi.hh
+++ b/src/dev/arm/kmi.hh
@@ -134,7 +134,7 @@
         return tmp_interrupt;
     }
     /** Wrapper to create an event out of the thing */
-    EventWrapper<Pl050, &Pl050::generateInterrupt> intEvent;
+    EventFunctionWrapper intEvent;

     /** Receive queue. This list contains all the pending commands that
      * need to be sent to the driver
diff --git a/src/dev/arm/pl011.cc b/src/dev/arm/pl011.cc
index f7f5d2d..479a28b 100644
--- a/src/dev/arm/pl011.cc
+++ b/src/dev/arm/pl011.cc
@@ -56,7 +56,7 @@

 Pl011::Pl011(const Pl011Params *p)
     : Uart(p, 0xfff),
-      intEvent(this),
+      intEvent([this]{ generateInterrupt(); }, name()),
       control(0x300), fbrd(0), ibrd(0), lcrh(0), ifls(0x12),
       imsc(0), rawInt(0),
       gic(p->gic), endOnEOT(p->end_on_eot), intNum(p->int_num),
diff --git a/src/dev/arm/pl011.hh b/src/dev/arm/pl011.hh
index 81745ed..d6c839c 100644
--- a/src/dev/arm/pl011.hh
+++ b/src/dev/arm/pl011.hh
@@ -113,7 +113,7 @@
     inline uint16_t maskInt() const { return rawInt & imsc; }

     /** Wrapper to create an event out of the thing */
-    EventWrapper<Pl011, &Pl011::generateInterrupt> intEvent;
+    EventFunctionWrapper intEvent;

   protected: // Registers
     static const uint64_t AMBA_ID = ULL(0xb105f00d00341011);
diff --git a/src/dev/arm/pl111.cc b/src/dev/arm/pl111.cc
index b12e7a3..344eb08 100644
--- a/src/dev/arm/pl111.cc
+++ b/src/dev/arm/pl111.cc
@@ -68,10 +68,13 @@
       vnc(p->vnc), bmp(&fb), pic(NULL),
       width(LcdMaxWidth), height(LcdMaxHeight),
       bytesPerPixel(4), startTime(0), startAddr(0), maxAddr(0), curAddr(0),
-      waterMark(0), dmaPendingNum(0), readEvent(this), fillFifoEvent(this),
+      waterMark(0), dmaPendingNum(0),
+      readEvent([this]{ readFramebuffer(); }, name()),
+      fillFifoEvent([this]{ fillFifo(); }, name()),
       dmaDoneEventAll(maxOutstandingDma, this),
       dmaDoneEventFree(maxOutstandingDma),
-      intEvent(this), enableCapture(p->enable_capture)
+      intEvent([this]{ generateInterrupt(); }, name()),
+      enableCapture(p->enable_capture)
 {
     pioSize = 0xFFFF;

diff --git a/src/dev/arm/pl111.hh b/src/dev/arm/pl111.hh
index aea7870..a9189e9 100644
--- a/src/dev/arm/pl111.hh
+++ b/src/dev/arm/pl111.hh
@@ -325,10 +325,10 @@
     void dmaDone();

     /** DMA framebuffer read event */
-    EventWrapper<Pl111, &Pl111::readFramebuffer> readEvent;
+    EventFunctionWrapper readEvent;

     /** Fill fifo */
-    EventWrapper<Pl111, &Pl111::fillFifo> fillFifoEvent;
+    EventFunctionWrapper fillFifoEvent;

     /**@{*/
     /**
@@ -354,7 +354,7 @@
     /**@}*/

     /** Wrapper to create an event out of the interrupt */
-    EventWrapper<Pl111, &Pl111::generateInterrupt> intEvent;
+    EventFunctionWrapper intEvent;

     bool enableCapture;

diff --git a/src/dev/arm/rtc_pl031.cc b/src/dev/arm/rtc_pl031.cc
index 46c5d28..3d8e677 100644
--- a/src/dev/arm/rtc_pl031.cc
+++ b/src/dev/arm/rtc_pl031.cc
@@ -51,7 +51,8 @@
 PL031::PL031(Params *p)
     : AmbaIntDevice(p, 0xfff), timeVal(mkutctime(&p->time)),
       lastWrittenTick(0), loadVal(0), matchVal(0),
-      rawInt(false), maskInt(false), pendingInt(false), matchEvent(this)
+      rawInt(false), maskInt(false), pendingInt(false),
+      matchEvent([this]{ counterMatch(); }, name())
 {
 }

diff --git a/src/dev/arm/rtc_pl031.hh b/src/dev/arm/rtc_pl031.hh
index d3f1295..1ecadd4 100644
--- a/src/dev/arm/rtc_pl031.hh
+++ b/src/dev/arm/rtc_pl031.hh
@@ -91,7 +91,7 @@

     /** Called when the counter reaches matches */
     void counterMatch();
-    EventWrapper<PL031, &PL031::counterMatch> matchEvent;
+    EventFunctionWrapper matchEvent;

/** Called to update the matchEvent when the load Value or match value are
      * written.
diff --git a/src/dev/arm/timer_cpulocal.cc b/src/dev/arm/timer_cpulocal.cc
index 448ac21..0330315 100644
--- a/src/dev/arm/timer_cpulocal.cc
+++ b/src/dev/arm/timer_cpulocal.cc
@@ -66,7 +66,9 @@
 CpuLocalTimer::Timer::Timer()
: timerControl(0x0), watchdogControl(0x0), rawIntTimer(false), rawIntWatchdog(false), rawResetWatchdog(false), watchdogDisableReg(0x0), pendingIntTimer(false), pendingIntWatchdog(false), - timerLoadValue(0x0), watchdogLoadValue(0x0), timerZeroEvent(this), watchdogZeroEvent(this)
+      timerLoadValue(0x0), watchdogLoadValue(0x0),
+      timerZeroEvent([this]{ timerAtZero(); }, name()),
+      watchdogZeroEvent([this]{ watchdogAtZero(); }, name())
 {
 }

diff --git a/src/dev/arm/timer_cpulocal.hh b/src/dev/arm/timer_cpulocal.hh
index fc52b3d..425f1fd 100644
--- a/src/dev/arm/timer_cpulocal.hh
+++ b/src/dev/arm/timer_cpulocal.hh
@@ -125,10 +125,10 @@

         /** Called when the counter reaches 0 */
         void timerAtZero();
-        EventWrapper<Timer, &Timer::timerAtZero> timerZeroEvent;
+        EventFunctionWrapper timerZeroEvent;

         void watchdogAtZero();
-        EventWrapper<Timer, &Timer::watchdogAtZero> watchdogZeroEvent;
+        EventFunctionWrapper watchdogZeroEvent;
       public:
         /** Restart the counter ticking at val
          * @param val the value to start at */
diff --git a/src/dev/arm/timer_sp804.cc b/src/dev/arm/timer_sp804.cc
index 99c722d..86fbc7f 100644
--- a/src/dev/arm/timer_sp804.cc
+++ b/src/dev/arm/timer_sp804.cc
@@ -56,7 +56,8 @@

Sp804::Timer::Timer(std::string __name, Sp804 *_parent, int int_num, Tick _clock) : _name(__name), parent(_parent), intNum(int_num), clock(_clock), control(0x20), - rawInt(false), pendingInt(false), loadValue(0xffffffff), zeroEvent(this)
+      rawInt(false), pendingInt(false), loadValue(0xffffffff),
+      zeroEvent([this]{ counterAtZero(); }, name())
 {
 }

diff --git a/src/dev/arm/timer_sp804.hh b/src/dev/arm/timer_sp804.hh
index fafbeba..509d95c 100644
--- a/src/dev/arm/timer_sp804.hh
+++ b/src/dev/arm/timer_sp804.hh
@@ -104,7 +104,7 @@

         /** Called when the counter reaches 0 */
         void counterAtZero();
-        EventWrapper<Timer, &Timer::counterAtZero> zeroEvent;
+        EventFunctionWrapper zeroEvent;

       public:
         /** Restart the counter ticking at val
diff --git a/src/dev/arm/ufs_device.cc b/src/dev/arm/ufs_device.cc
index fe05b32..5a5a132 100644
--- a/src/dev/arm/ufs_device.cc
+++ b/src/dev/arm/ufs_device.cc
@@ -1890,7 +1890,9 @@
                                           < curTick()))
             writeDoneEvent.pop_front();

-        writeDoneEvent.push_back(this);
+        writeDoneEvent.push_back(
+            EventFunctionWrapper([this]{ writeDone(); },
+                                 name()));
         assert(!writeDoneEvent.back().scheduled());

         /**destination is an offset here since we are writing to a disk*/
@@ -2089,7 +2091,9 @@
     /** check wether interrupt is needed */
     if (lastTransfer) {
         ++readPendingNum;
-        readDoneEvent.push_back(this);
+        readDoneEvent.push_back(
+            EventFunctionWrapper([this]{ readDone(); },
+                                 name()));
         assert(!readDoneEvent.back().scheduled());
         dmaPort.dmaAction(MemCmd::WriteReq, start, size,
                           &readDoneEvent.back(), destination, 0);
diff --git a/src/dev/arm/ufs_device.hh b/src/dev/arm/ufs_device.hh
index 435d5f5..24a05b0 100644
--- a/src/dev/arm/ufs_device.hh
+++ b/src/dev/arm/ufs_device.hh
@@ -1129,10 +1129,8 @@
      * because the flow of the events is completely in the control of these
      * classes. (Whereas in the DMA case we rely on an external class)
      */
-    std::deque<EventWrapper<UFSHostDevice, &UFSHostDevice::readDone> >
-    readDoneEvent;
-    std::deque<EventWrapper<UFSHostDevice, &UFSHostDevice::writeDone> >
-    writeDoneEvent;
+    std::deque<EventFunctionWrapper> readDoneEvent;
+    std::deque<EventFunctionWrapper> writeDoneEvent;

     /**
      * Callbacks for the logic units. One to indicate the completion of a

--
To view, visit https://gem5-review.googlesource.com/3747
To unsubscribe, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I08de5f72513645d1fe92bde99fa205dde897e951
Gerrit-Change-Number: 3747
Gerrit-PatchSet: 1
Gerrit-Owner: Sean Wilson <spwils...@wisc.edu>
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to