void BrcmPatchRAM::uploadFirmware() { // signal to timer that firmware already loaded mDevice.setProperty(kFirmwareLoaded, true); // don't bother with devices that have no firmware if (!getProperty(kFirmwareKey)) return; if (!mDevice.open(this)) { AlwaysLog("uploadFirmware could not open the device!\n"); return; } //REVIEW: this block to avoid merge conflicts (remove once merged) ////if (mDevice.open(this)) { // Print out additional device information printDeviceInfo(); // Set device configuration to composite configuration index 0 // Obtain first interface if (setConfiguration(0) && findInterface(&mInterface) && mInterface.open(this)) { DebugLog("set configuration and interface opened\n"); mInterface.findPipe(&mInterruptPipe, kUSBInterrupt, kUSBIn); mInterface.findPipe(&mBulkPipe, kUSBBulk, kUSBOut); if (mInterruptPipe.getValidatedPipe() && mBulkPipe.getValidatedPipe()) { DebugLog("got pipes\n"); if (performUpgrade()) if (mDeviceState == kUpdateComplete) AlwaysLog("[%04x:%04x]: Firmware upgrade completed successfully.\n", mVendorId, mProductId); else AlwaysLog("[%04x:%04x]: Firmware upgrade not needed.\n", mVendorId, mProductId); else AlwaysLog("[%04x:%04x]: Firmware upgrade failed.\n", mVendorId, mProductId); OSSafeReleaseNULL(mReadBuffer); // mReadBuffer is allocated by performUpgrade but not released } mInterface.close(this); } // cleanup if (mInterruptPipe.getValidatedPipe()) { mInterruptPipe.abort(); mInterruptPipe.setPipe(NULL); } if (mBulkPipe.getValidatedPipe()) { mBulkPipe.abort(); mBulkPipe.setPipe(NULL); } mInterface.setInterface(NULL); mDevice.close(this); } }
void BrcmPatchRAM::uploadFirmware() { // get firmware here to pre-cache for eventual use on wakeup or now BrcmFirmwareStore* firmwareStore = getFirmwareStore(); OSArray* instructions = NULL; if (!firmwareStore || !firmwareStore->getFirmware(OSDynamicCast(OSString, getProperty(kFirmwareKey)))) return; if (mDevice->open(this)) { // Print out additional device information printDeviceInfo(); // Set device configuration to composite configuration index 0 // Obtain first interface if (setConfiguration(0) && (mInterface = findInterface()) && mInterface->open(this)) { mInterruptPipe = findPipe(kUSBInterrupt, kUSBIn); mBulkPipe = findPipe(kUSBBulk, kUSBOut); if (mInterruptPipe && mBulkPipe) { if (performUpgrade()) AlwaysLog("[%04x:%04x]: Firmware upgrade completed successfully.\n", mVendorId, mProductId); else AlwaysLog("[%04x:%04x]: Firmware upgrade failed.\n", mVendorId, mProductId); OSSafeReleaseNULL(mReadBuffer); // mReadBuffer is allocated by performUpgrade but not released } mInterface->close(this); } // cleanup if (mInterruptPipe) { mInterruptPipe->Abort(); mInterruptPipe->release(); // retained in findPipe mInterruptPipe = NULL; } if (mBulkPipe) { mBulkPipe->Abort(); mBulkPipe->release(); // retained in findPipe mBulkPipe = NULL; } OSSafeReleaseNULL(mInterface);// retained in findInterface mDevice->close(this); } }
void BrcmPatchRAM::uploadFirmware() { // signal to timer that firmware already loaded mDevice->setProperty(kFirmwareLoaded, true); if (mDevice->open(this)) { // Print out additional device information printDeviceInfo(); // Set device configuration to composite configuration index 0 // Obtain first interface if (setConfiguration(0) && (mInterface = findInterface()) && mInterface->open(this)) { mInterruptPipe = findPipe(kUSBInterrupt, kUSBIn); mBulkPipe = findPipe(kUSBBulk, kUSBOut); if (mInterruptPipe && mBulkPipe) { if (performUpgrade()) AlwaysLog("[%04x:%04x]: Firmware upgrade completed successfully.\n", mVendorId, mProductId); else AlwaysLog("[%04x:%04x]: Firmware upgrade failed.\n", mVendorId, mProductId); OSSafeReleaseNULL(mReadBuffer); // mReadBuffer is allocated by performUpgrade but not released } mInterface->close(this); } // cleanup if (mInterruptPipe) { mInterruptPipe->Abort(); mInterruptPipe->release(); // retained in findPipe mInterruptPipe = NULL; } if (mBulkPipe) { mBulkPipe->Abort(); mBulkPipe->release(); // retained in findPipe mBulkPipe = NULL; } OSSafeReleaseNULL(mInterface);// retained in findInterface mDevice->close(this); } }