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