1d82a3acdSCarol Wang #pragma once 2d82a3acdSCarol Wang 33ccb3adbSEd Tanous #include "app.hpp" 43ccb3adbSEd Tanous #include "query.hpp" 53ccb3adbSEd Tanous #include "registries/privilege_registry.hpp" 63ccb3adbSEd Tanous #include "utils/sw_utils.hpp" 745ca1b86SEd Tanous 8253f11b8SEd Tanous #include <boost/url/format.hpp> 9253f11b8SEd Tanous 10d82a3acdSCarol Wang namespace redfish 11d82a3acdSCarol Wang { 12d82a3acdSCarol Wang /** 13d82a3acdSCarol Wang * BiosService class supports handle get method for bios. 14d82a3acdSCarol Wang */ 1558eaf5f0SJohn Edward Broadbent inline void 1645ca1b86SEd Tanous handleBiosServiceGet(crow::App& app, const crow::Request& req, 1722d268cbSEd Tanous const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 1822d268cbSEd Tanous const std::string& systemName) 1958eaf5f0SJohn Edward Broadbent { 203ba00073SCarson Labrado if (!redfish::setUpRedfishRoute(app, req, asyncResp)) 2145ca1b86SEd Tanous { 2245ca1b86SEd Tanous return; 2345ca1b86SEd Tanous } 2425b54dbaSEd Tanous if constexpr (BMCWEB_EXPERIMENTAL_REDFISH_MULTI_COMPUTER_SYSTEM) 257f3e84a1SEd Tanous { 267f3e84a1SEd Tanous // Option currently returns no systems. TBD 277f3e84a1SEd Tanous messages::resourceNotFound(asyncResp->res, "ComputerSystem", 287f3e84a1SEd Tanous systemName); 297f3e84a1SEd Tanous return; 307f3e84a1SEd Tanous } 31253f11b8SEd Tanous if (systemName != BMCWEB_REDFISH_SYSTEM_URI_NAME) 3222d268cbSEd Tanous { 3322d268cbSEd Tanous messages::resourceNotFound(asyncResp->res, "ComputerSystem", 3422d268cbSEd Tanous systemName); 3522d268cbSEd Tanous return; 3622d268cbSEd Tanous } 37253f11b8SEd Tanous asyncResp->res.jsonValue["@odata.id"] = std::format( 38253f11b8SEd Tanous "/redfish/v1/Systems/{}/Bios", BMCWEB_REDFISH_SYSTEM_URI_NAME); 3958eaf5f0SJohn Edward Broadbent asyncResp->res.jsonValue["@odata.type"] = "#Bios.v1_1_0.Bios"; 4058eaf5f0SJohn Edward Broadbent asyncResp->res.jsonValue["Name"] = "BIOS Configuration"; 4158eaf5f0SJohn Edward Broadbent asyncResp->res.jsonValue["Description"] = "BIOS Configuration Service"; 4258eaf5f0SJohn Edward Broadbent asyncResp->res.jsonValue["Id"] = "BIOS"; 43*20fa6a2cSEd Tanous asyncResp->res.jsonValue["Actions"]["#Bios.ResetBios"]["target"] = 44253f11b8SEd Tanous std::format("/redfish/v1/Systems/{}/Bios/Actions/Bios.ResetBios", 45*20fa6a2cSEd Tanous BMCWEB_REDFISH_SYSTEM_URI_NAME); 4658eaf5f0SJohn Edward Broadbent 4758eaf5f0SJohn Edward Broadbent // Get the ActiveSoftwareImage and SoftwareImages 48eee0013eSWilly Tu sw_util::populateSoftwareInformation(asyncResp, sw_util::biosPurpose, "", 4958eaf5f0SJohn Edward Broadbent true); 5058eaf5f0SJohn Edward Broadbent } 5145ca1b86SEd Tanous 527e860f15SJohn Edward Broadbent inline void requestRoutesBiosService(App& app) 53d82a3acdSCarol Wang { 5422d268cbSEd Tanous BMCWEB_ROUTE(app, "/redfish/v1/Systems/<str>/Bios/") 55ed398213SEd Tanous .privileges(redfish::privileges::getBios) 5645ca1b86SEd Tanous .methods(boost::beast::http::verb::get)( 5745ca1b86SEd Tanous std::bind_front(handleBiosServiceGet, std::ref(app))); 58d82a3acdSCarol Wang } 5958eaf5f0SJohn Edward Broadbent 60d82a3acdSCarol Wang /** 61d82a3acdSCarol Wang * BiosReset class supports handle POST method for Reset bios. 62d82a3acdSCarol Wang * The class retrieves and sends data directly to D-Bus. 637e860f15SJohn Edward Broadbent * 64d82a3acdSCarol Wang * Function handles POST method request. 65d82a3acdSCarol Wang * Analyzes POST body message before sends Reset request data to D-Bus. 66d82a3acdSCarol Wang */ 6758eaf5f0SJohn Edward Broadbent inline void 6845ca1b86SEd Tanous handleBiosResetPost(crow::App& app, const crow::Request& req, 6922d268cbSEd Tanous const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 7022d268cbSEd Tanous const std::string& systemName) 717e860f15SJohn Edward Broadbent { 723ba00073SCarson Labrado if (!redfish::setUpRedfishRoute(app, req, asyncResp)) 7345ca1b86SEd Tanous { 7445ca1b86SEd Tanous return; 7545ca1b86SEd Tanous } 7622d268cbSEd Tanous 7725b54dbaSEd Tanous if constexpr (BMCWEB_EXPERIMENTAL_REDFISH_MULTI_COMPUTER_SYSTEM) 787f3e84a1SEd Tanous { 797f3e84a1SEd Tanous // Option currently returns no systems. TBD 807f3e84a1SEd Tanous messages::resourceNotFound(asyncResp->res, "ComputerSystem", 817f3e84a1SEd Tanous systemName); 827f3e84a1SEd Tanous return; 837f3e84a1SEd Tanous } 847f3e84a1SEd Tanous 85253f11b8SEd Tanous if (systemName != BMCWEB_REDFISH_SYSTEM_URI_NAME) 8622d268cbSEd Tanous { 8722d268cbSEd Tanous messages::resourceNotFound(asyncResp->res, "ComputerSystem", 8822d268cbSEd Tanous systemName); 8922d268cbSEd Tanous return; 9022d268cbSEd Tanous } 9122d268cbSEd Tanous 92d82a3acdSCarol Wang crow::connections::systemBus->async_method_call( 935e7e2dc5SEd Tanous [asyncResp](const boost::system::error_code& ec) { 94d82a3acdSCarol Wang if (ec) 95d82a3acdSCarol Wang { 9662598e31SEd Tanous BMCWEB_LOG_ERROR("Failed to reset bios: {}", ec); 97d82a3acdSCarol Wang messages::internalError(asyncResp->res); 98d82a3acdSCarol Wang return; 99d82a3acdSCarol Wang } 100d82a3acdSCarol Wang }, 10158eaf5f0SJohn Edward Broadbent "org.open_power.Software.Host.Updater", "/xyz/openbmc_project/software", 102d82a3acdSCarol Wang "xyz.openbmc_project.Common.FactoryReset", "Reset"); 103d82a3acdSCarol Wang } 10458eaf5f0SJohn Edward Broadbent 10558eaf5f0SJohn Edward Broadbent inline void requestRoutesBiosReset(App& app) 10658eaf5f0SJohn Edward Broadbent { 10722d268cbSEd Tanous BMCWEB_ROUTE(app, "/redfish/v1/Systems/<str>/Bios/Actions/Bios.ResetBios/") 108b7ff3445SJohn Edward Broadbent .privileges(redfish::privileges::postBios) 10945ca1b86SEd Tanous .methods(boost::beast::http::verb::post)( 11045ca1b86SEd Tanous std::bind_front(handleBiosResetPost, std::ref(app))); 11158eaf5f0SJohn Edward Broadbent } 11258eaf5f0SJohn Edward Broadbent 113d82a3acdSCarol Wang } // namespace redfish 114