1*6a3f9906SP Arun Kumar Reddy #include "update.hpp" 2*6a3f9906SP Arun Kumar Reddy 3*6a3f9906SP Arun Kumar Reddy #include "update_manager.hpp" 4*6a3f9906SP Arun Kumar Reddy 5*6a3f9906SP Arun Kumar Reddy namespace pldm 6*6a3f9906SP Arun Kumar Reddy { 7*6a3f9906SP Arun Kumar Reddy namespace fw_update 8*6a3f9906SP Arun Kumar Reddy { 9*6a3f9906SP Arun Kumar Reddy startUpdate(sdbusplus::message::unix_fd image,ApplyTimeIntf::RequestedApplyTimes applyTime)10*6a3f9906SP Arun Kumar Reddysdbusplus::message::object_path Update::startUpdate( 11*6a3f9906SP Arun Kumar Reddy sdbusplus::message::unix_fd image, 12*6a3f9906SP Arun Kumar Reddy ApplyTimeIntf::RequestedApplyTimes applyTime [[maybe_unused]]) 13*6a3f9906SP Arun Kumar Reddy { 14*6a3f9906SP Arun Kumar Reddy namespace software = sdbusplus::xyz::openbmc_project::Software::server; 15*6a3f9906SP Arun Kumar Reddy // If a firmware activation of a package is in progress, don't proceed with 16*6a3f9906SP Arun Kumar Reddy // package processing 17*6a3f9906SP Arun Kumar Reddy if (updateManager->activation) 18*6a3f9906SP Arun Kumar Reddy { 19*6a3f9906SP Arun Kumar Reddy if (updateManager->activation->activation() == 20*6a3f9906SP Arun Kumar Reddy software::Activation::Activations::Activating) 21*6a3f9906SP Arun Kumar Reddy { 22*6a3f9906SP Arun Kumar Reddy throw sdbusplus::xyz::openbmc_project::Common::Error::Unavailable(); 23*6a3f9906SP Arun Kumar Reddy } 24*6a3f9906SP Arun Kumar Reddy else 25*6a3f9906SP Arun Kumar Reddy { 26*6a3f9906SP Arun Kumar Reddy updateManager->clearActivationInfo(); 27*6a3f9906SP Arun Kumar Reddy } 28*6a3f9906SP Arun Kumar Reddy } 29*6a3f9906SP Arun Kumar Reddy 30*6a3f9906SP Arun Kumar Reddy info("Starting update for image {FD}", "FD", image.fd); 31*6a3f9906SP Arun Kumar Reddy char buffer[4096]; 32*6a3f9906SP Arun Kumar Reddy ssize_t bytesRead; 33*6a3f9906SP Arun Kumar Reddy imageStream.str(std::string()); 34*6a3f9906SP Arun Kumar Reddy 35*6a3f9906SP Arun Kumar Reddy while ((bytesRead = read(image, buffer, sizeof(buffer))) > 0) 36*6a3f9906SP Arun Kumar Reddy { 37*6a3f9906SP Arun Kumar Reddy imageStream.write(buffer, bytesRead); 38*6a3f9906SP Arun Kumar Reddy } 39*6a3f9906SP Arun Kumar Reddy 40*6a3f9906SP Arun Kumar Reddy if (bytesRead < 0) 41*6a3f9906SP Arun Kumar Reddy { 42*6a3f9906SP Arun Kumar Reddy throw std::runtime_error("Failed to read image file descriptor"); 43*6a3f9906SP Arun Kumar Reddy } 44*6a3f9906SP Arun Kumar Reddy 45*6a3f9906SP Arun Kumar Reddy return sdbusplus::message::object_path(updateManager->processStreamDefer( 46*6a3f9906SP Arun Kumar Reddy imageStream, imageStream.str().size())); 47*6a3f9906SP Arun Kumar Reddy } 48*6a3f9906SP Arun Kumar Reddy 49*6a3f9906SP Arun Kumar Reddy } // namespace fw_update 50*6a3f9906SP Arun Kumar Reddy } // namespace pldm 51