| 437 | } |
| 438 | |
| 439 | void BrcmPatchRAM::processWorkQueue(IOInterruptEventSource*, int) |
| 440 | { |
| 441 | IOLockLock(mWorkLock); |
| 442 | |
| 443 | // start firmware loading process in a non-workloop thread |
| 444 | if (mWorkPending & kWorkLoadFirmware) |
| 445 | { |
| 446 | DebugLog("_workPending kWorkLoadFirmware\n"); |
| 447 | mWorkPending &= ~kWorkLoadFirmware; |
| 448 | retain(); |
| 449 | kern_return_t result = kernel_thread_start(&BrcmPatchRAM::uploadFirmwareThread, this, &mWorker); |
| 450 | if (KERN_SUCCESS == result) |
| 451 | DebugLog("Success creating firmware uploader thread\n"); |
| 452 | else |
| 453 | { |
| 454 | AlwaysLog("ERROR creating firmware uploader thread.\n"); |
| 455 | release(); |
| 456 | } |
| 457 | } |
| 458 | |
| 459 | // firmware loading thread is finished |
| 460 | if (mWorkPending & kWorkFinished) |
| 461 | { |
| 462 | DebugLog("_workPending kWorkFinished\n"); |
| 463 | mWorkPending &= ~kWorkFinished; |
| 464 | thread_deallocate(mWorker); |
| 465 | mWorker = 0; |
| 466 | release(); // matching retain when thread created successfully |
| 467 | } |
| 468 | |
| 469 | IOLockUnlock(mWorkLock); |
| 470 | } |
| 471 | |
| 472 | void BrcmPatchRAM::uploadFirmwareThread(void *arg, wait_result_t wait) |
| 473 | { |
nothing calls this directly
no outgoing calls
no test coverage detected