return me;
}
+IOInterruptEventSource *
+IOInterruptEventSource::interruptEventSource(OSObject *inOwner,
+ IOService *inProvider,
+ int inIntIndex,
+ ActionBlock inAction)
+{
+ IOInterruptEventSource * ies;
+ ies = IOInterruptEventSource::interruptEventSource(inOwner, (Action) NULL, inProvider, inIntIndex);
+ if (ies) ies->setActionBlock((IOEventSource::ActionBlock) inAction);
+
+ return ies;
+}
+
void IOInterruptEventSource::free()
{
if (provider && intIndex >= 0)
unsigned int cacheProdCount = producerCount;
int numInts = cacheProdCount - consumerCount;
IOInterruptEventAction intAction = (IOInterruptEventAction) action;
+ ActionBlock intActionBlock = (ActionBlock) actionBlock;
bool trace = (gIOKitTrace & kIOTraceIntEventSource) ? true : false;
IOStatisticsCheckForWork();
}
// Call the handler
- (*intAction)(owner, this, numInts);
+ if (kActionBlock & flags) (intActionBlock)(this, numInts);
+ else (*intAction)(owner, this, numInts);
if (reserved->statistics) {
if (IA_GET_STATISTIC_ENABLED(kInterruptAccountingSecondLevelCountIndex)) {
}
// Call the handler
- (*intAction)(owner, this, -numInts);
+ if (kActionBlock & flags) (intActionBlock)(this, numInts);
+ else (*intAction)(owner, this, numInts);
if (reserved->statistics) {
if (IA_GET_STATISTIC_ENABLED(kInterruptAccountingSecondLevelCountIndex)) {