1d82a3acdSCarol Wang #pragma once 2d82a3acdSCarol Wang 37e860f15SJohn Edward Broadbent #include <app.hpp> 4ed398213SEd Tanous #include <registries/privilege_registry.hpp> 572d566d9SGunnar Mills #include <utils/fw_utils.hpp> 6d82a3acdSCarol Wang namespace redfish 7d82a3acdSCarol Wang { 8d82a3acdSCarol Wang /** 9d82a3acdSCarol Wang * BiosService class supports handle get method for bios. 10d82a3acdSCarol Wang */ 11*58eaf5f0SJohn Edward Broadbent inline void 12*58eaf5f0SJohn Edward Broadbent handleBiosServiceGet(const crow::Request&, 13*58eaf5f0SJohn Edward Broadbent const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) 14*58eaf5f0SJohn Edward Broadbent { 15*58eaf5f0SJohn Edward Broadbent asyncResp->res.jsonValue["@odata.id"] = "/redfish/v1/Systems/system/Bios"; 16*58eaf5f0SJohn Edward Broadbent asyncResp->res.jsonValue["@odata.type"] = "#Bios.v1_1_0.Bios"; 17*58eaf5f0SJohn Edward Broadbent asyncResp->res.jsonValue["Name"] = "BIOS Configuration"; 18*58eaf5f0SJohn Edward Broadbent asyncResp->res.jsonValue["Description"] = "BIOS Configuration Service"; 19*58eaf5f0SJohn Edward Broadbent asyncResp->res.jsonValue["Id"] = "BIOS"; 20*58eaf5f0SJohn Edward Broadbent asyncResp->res.jsonValue["Actions"]["#Bios.ResetBios"] = { 21*58eaf5f0SJohn Edward Broadbent {"target", "/redfish/v1/Systems/system/Bios/Actions/Bios.ResetBios"}}; 22*58eaf5f0SJohn Edward Broadbent 23*58eaf5f0SJohn Edward Broadbent // Get the ActiveSoftwareImage and SoftwareImages 24*58eaf5f0SJohn Edward Broadbent fw_util::populateFirmwareInformation(asyncResp, fw_util::biosPurpose, "", 25*58eaf5f0SJohn Edward Broadbent true); 26*58eaf5f0SJohn Edward Broadbent } 277e860f15SJohn Edward Broadbent inline void requestRoutesBiosService(App& app) 28d82a3acdSCarol Wang { 297e860f15SJohn Edward Broadbent BMCWEB_ROUTE(app, "/redfish/v1/Systems/system/Bios/") 30ed398213SEd Tanous .privileges(redfish::privileges::getBios) 31*58eaf5f0SJohn Edward Broadbent .methods(boost::beast::http::verb::get)(handleBiosServiceGet); 32d82a3acdSCarol Wang } 33*58eaf5f0SJohn Edward Broadbent 34d82a3acdSCarol Wang /** 35d82a3acdSCarol Wang * BiosReset class supports handle POST method for Reset bios. 36d82a3acdSCarol Wang * The class retrieves and sends data directly to D-Bus. 377e860f15SJohn Edward Broadbent * 38d82a3acdSCarol Wang * Function handles POST method request. 39d82a3acdSCarol Wang * Analyzes POST body message before sends Reset request data to D-Bus. 40d82a3acdSCarol Wang */ 41*58eaf5f0SJohn Edward Broadbent inline void 42*58eaf5f0SJohn Edward Broadbent handleBiosResetPost(const crow::Request&, 43*58eaf5f0SJohn Edward Broadbent const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) 447e860f15SJohn Edward Broadbent { 45d82a3acdSCarol Wang crow::connections::systemBus->async_method_call( 46d82a3acdSCarol Wang [asyncResp](const boost::system::error_code ec) { 47d82a3acdSCarol Wang if (ec) 48d82a3acdSCarol Wang { 49d82a3acdSCarol Wang BMCWEB_LOG_ERROR << "Failed to reset bios: " << ec; 50d82a3acdSCarol Wang messages::internalError(asyncResp->res); 51d82a3acdSCarol Wang return; 52d82a3acdSCarol Wang } 53d82a3acdSCarol Wang }, 54*58eaf5f0SJohn Edward Broadbent "org.open_power.Software.Host.Updater", "/xyz/openbmc_project/software", 55d82a3acdSCarol Wang "xyz.openbmc_project.Common.FactoryReset", "Reset"); 56d82a3acdSCarol Wang } 57*58eaf5f0SJohn Edward Broadbent 58*58eaf5f0SJohn Edward Broadbent inline void requestRoutesBiosReset(App& app) 59*58eaf5f0SJohn Edward Broadbent { 60*58eaf5f0SJohn Edward Broadbent BMCWEB_ROUTE(app, "/redfish/v1/Systems/system/Bios/Actions/Bios.ResetBios/") 61*58eaf5f0SJohn Edward Broadbent .privileges({{"redfish::privileges::postBios"}}) 62*58eaf5f0SJohn Edward Broadbent .methods(boost::beast::http::verb::post)(handleBiosResetPost); 63*58eaf5f0SJohn Edward Broadbent } 64*58eaf5f0SJohn Edward Broadbent 65d82a3acdSCarol Wang } // namespace redfish 66