bool IOInterruptEventSource::checkForWork() { unsigned int cacheProdCount = producerCount; int numInts = cacheProdCount - consumerCount; IOInterruptEventAction intAction = (IOInterruptEventAction) action; if (numInts > 0) { IOTimeStampLatency(); IOTimeTypeStampS(IOINTES_CLIENT); IOTimeStampConstant(IODBG_INTES(IOINTES_ACTION), (uintptr_t) intAction, (uintptr_t) owner); (*intAction)(owner, this, numInts); IOTimeTypeStampE(IOINTES_CLIENT); consumerCount = cacheProdCount; if (autoDisable && !explicitDisable) enable(); } else if (numInts < 0) { IOTimeStampLatency(); IOTimeTypeStampS(IOINTES_CLIENT); IOTimeStampConstant(IODBG_INTES(IOINTES_ACTION), (uintptr_t) intAction, (uintptr_t) owner); (*intAction)(owner, this, -numInts); IOTimeTypeStampE(IOINTES_CLIENT); consumerCount = cacheProdCount; if (autoDisable && !explicitDisable) enable(); } return false; }
void IOInterruptController::timeStampSpuriousInterrupt(void) { uint64_t providerID = 0; IOService * provider = getProvider(); if (provider) { providerID = provider->getRegistryEntryID(); } IOTimeStampConstant(IODBG_INTC(IOINTC_SPURIOUS), providerID); }