/* make the thread run! */ void kperf_pet_thread_go(void) { if( !pet_lock ) return; /* Make the thread go */ IOLockWakeup(pet_lock, &pet_actionid, FALSE); }
IOReturn IOPlatformExpert::registerInterruptController(OSSymbol *name, IOInterruptController *interruptController) { IOLockLock(gIOInterruptControllersLock); gIOInterruptControllers->setObject(name, interruptController); IOLockWakeup(gIOInterruptControllersLock, gIOInterruptControllers, /* one-thread */ false); IOLockUnlock(gIOInterruptControllersLock); return kIOReturnSuccess; }
void BrcmPatchRAM::readCompletion(void* target, void* parameter, IOReturn status, uint32_t bytesTransferred) #endif { BrcmPatchRAM *me = (BrcmPatchRAM*)target; IOLockLock(me->mCompletionLock); IOReturn result = me->mReadBuffer->complete(); if (result != kIOReturnSuccess) DebugLog("[%04x:%04x]: ReadCompletion failed to complete read buffer (\"%s\" 0x%08x).\n", me->mVendorId, me->mProductId, me->stringFromReturn(result), result); switch (status) { case kIOReturnSuccess: #ifndef TARGET_ELCAPITAN me->hciParseResponse(me->mReadBuffer->getBytesNoCopy(), me->mReadBuffer->getLength() - bufferSizeRemaining, NULL, NULL); #else me->hciParseResponse(me->mReadBuffer->getBytesNoCopy(), bytesTransferred, NULL, NULL); #endif break; case kIOReturnAborted: AlwaysLog("[%04x:%04x]: readCompletion - Return aborted (0x%08x)\n", me->mVendorId, me->mProductId, status); me->mDeviceState = kUpdateAborted; break; case kIOReturnNoDevice: AlwaysLog("[%04x:%04x]: readCompletion - No such device (0x%08x)\n", me->mVendorId, me->mProductId, status); me->mDeviceState = kUpdateAborted; break; case kIOUSBTransactionTimeout: AlwaysLog("[%04x:%04x]: readCompletion - Transaction timeout (0x%08x)\n", me->mVendorId, me->mProductId, status); break; case kIOReturnNotResponding: AlwaysLog("[%04x:%04x]: Not responding - Delaying next read.\n", me->mVendorId, me->mProductId); me->mInterruptPipe.clearStall(); break; default: AlwaysLog("[%04x:%04x]: readCompletion - Unknown error (0x%08x)\n", me->mVendorId, me->mProductId, status); me->mDeviceState = kUpdateAborted; break; } IOLockUnlock(me->mCompletionLock); // wake waiting task in performUpgrade (in IOLockSleep)... IOLockWakeup(me->mCompletionLock, me, true); }
void HoRNDIS::dataWriteComplete(void *obj, void *param, IOReturn rc, UInt32 remaining) { HoRNDIS *me = (HoRNDIS *)obj; unsigned long poolIndx = (unsigned long)param; poolIndx = (unsigned long)param; LOG(V_DEBUG, "(rc %08x, poolIndx %ld)", rc, poolIndx); /* Free the buffer, and hand it off to anyone who might be waiting for one. */ me->outbufs[poolIndx].inuse = false; IOLockWakeup(me->outbuf_lock, me->outbufs, true); if (rc == kIOReturnSuccess) return; /* Sigh. Try to clean up. */ LOG(V_ERROR, "I/O error: %08x", rc); if (rc != kIOReturnAborted) { rc = me->clearPipeStall(me->fOutPipe); if (rc != kIOReturnSuccess) LOG(V_ERROR, "clear stall failed (trying to continue)"); } }
void wakeup(void *event) { IOLockWakeup(fWaitLock, event, false); }