1032bd50aSSampa Misra #pragma once 2032bd50aSSampa Misra 36080aae7SJohn Wang #include "bios_config.hpp" 4b37be313SSampa Misra #include "bios_table.hpp" 52abbce76SAndrew Jeffery #include "common/instance_id.hpp" 63c50c82aSKamalkumar Patel #include "platform_config.hpp" 71521f6d1SDeepak Kodihalli #include "pldmd/handler.hpp" 8c0c79481SSampa Misra #include "requester/handler.hpp" 9b37be313SSampa Misra 10c453e164SGeorge Liu #include <libpldm/bios.h> 11c453e164SGeorge Liu #include <libpldm/bios_table.h> 12032bd50aSSampa Misra 13*b3b84b49SPavithra Barithaya #include <cstdint> 1460227a0bSXiaochao Ma #include <ctime> 150270040bSJohn Wang #include <functional> 16b37be313SSampa Misra #include <map> 17a6575b84Svkaverap #include <vector> 18a6575b84Svkaverap 19032bd50aSSampa Misra namespace pldm 20032bd50aSSampa Misra { 21032bd50aSSampa Misra 22032bd50aSSampa Misra namespace responder 23032bd50aSSampa Misra { 24032bd50aSSampa Misra 25bc669f1bSDeepak Kodihalli namespace bios 26bc669f1bSDeepak Kodihalli { 27bc669f1bSDeepak Kodihalli 28bc669f1bSDeepak Kodihalli class Handler : public CmdHandler 29bc669f1bSDeepak Kodihalli { 30bc669f1bSDeepak Kodihalli public: 317f839f9dSTom Joseph /** @brief Constructor 327f839f9dSTom Joseph * 337f839f9dSTom Joseph * @param[in] fd - socket descriptor to communicate to host 347f839f9dSTom Joseph * @param[in] eid - MCTP EID of host firmware 35a330b2f0SAndrew Jeffery * @param[in] instanceIdDb - pointer to an InstanceIdDb object 36c0c79481SSampa Misra * @param[in] handler - PLDM request handler 373c50c82aSKamalkumar Patel * @param[in] platformConfigHandler - pointer to platform config object 3862dd8ff2SArchana Kakani * @param[in] requestPLDMServiceName - Callback for registering the PLDM 3962dd8ff2SArchana Kakani * service 407f839f9dSTom Joseph */ 41a330b2f0SAndrew Jeffery Handler(int fd, uint8_t eid, pldm::InstanceIdDb* instanceIdDb, 4211ce8d22SSagar Srinivas pldm::requester::Handler<pldm::requester::Request>* handler, 4362dd8ff2SArchana Kakani pldm::responder::platform_config::Handler* platformConfigHandler, 4462dd8ff2SArchana Kakani pldm::responder::bios::Callback requestPLDMServiceName); 45f666db13SJinu Joy Thomas 46032bd50aSSampa Misra /** @brief Handler for GetDateTime 47032bd50aSSampa Misra * 48032bd50aSSampa Misra * @param[in] request - Request message payload 4960227a0bSXiaochao Ma * @return Response - PLDM Response message 50032bd50aSSampa Misra */ 51f666db13SJinu Joy Thomas Response getDateTime(const pldm_msg* request, size_t payloadLength); 52032bd50aSSampa Misra 53b37be313SSampa Misra /** @brief Handler for GetBIOSTable 54b37be313SSampa Misra * 55b37be313SSampa Misra * @param[in] request - Request message 56b37be313SSampa Misra * @param[in] payload_length - Request message payload length 5760227a0bSXiaochao Ma * @return Response - PLDM Response message 58b37be313SSampa Misra */ 59b37be313SSampa Misra Response getBIOSTable(const pldm_msg* request, size_t payloadLength); 608721ed6eSJohn Wang 611b180d8aSGeorge Liu /** @brief Handler for SetBIOSTable 621b180d8aSGeorge Liu * 631b180d8aSGeorge Liu * @param[in] request - Request message 641b180d8aSGeorge Liu * @param[in] payload_length - Request message payload length 651b180d8aSGeorge Liu * @return Response - PLDM Response message 661b180d8aSGeorge Liu */ 671b180d8aSGeorge Liu Response setBIOSTable(const pldm_msg* request, size_t payloadLength); 681b180d8aSGeorge Liu 698721ed6eSJohn Wang /** @brief Handler for GetBIOSAttributeCurrentValueByHandle 708721ed6eSJohn Wang * 718721ed6eSJohn Wang * @param[in] request - Request message 728721ed6eSJohn Wang * @param[in] payloadLength - Request message payload length 738721ed6eSJohn Wang * @return Response - PLDM Response message 748721ed6eSJohn Wang */ 758721ed6eSJohn Wang Response getBIOSAttributeCurrentValueByHandle(const pldm_msg* request, 768721ed6eSJohn Wang size_t payloadLength); 7760227a0bSXiaochao Ma 7860227a0bSXiaochao Ma /** @brief Handler for SetDateTime 7960227a0bSXiaochao Ma * 8060227a0bSXiaochao Ma * @param[in] request - Request message payload 8160227a0bSXiaochao Ma * @param[in] payloadLength - Request message payload length 8260227a0bSXiaochao Ma * @return Response - PLDM Response message 8360227a0bSXiaochao Ma */ 8460227a0bSXiaochao Ma Response setDateTime(const pldm_msg* request, size_t payloadLength); 8542174885SJohn Wang 8642174885SJohn Wang /** @brief Handler for setBIOSAttributeCurrentValue 8742174885SJohn Wang * 8842174885SJohn Wang * @param[in] request - Request message 8942174885SJohn Wang * @param[in] payloadLength - Request message payload length 9042174885SJohn Wang * @return Response - PLDM Response message 9142174885SJohn Wang */ 9242174885SJohn Wang Response setBIOSAttributeCurrentValue(const pldm_msg* request, 9342174885SJohn Wang size_t payloadLength); 946080aae7SJohn Wang 956080aae7SJohn Wang private: 966080aae7SJohn Wang BIOSConfig biosConfig; 97bc669f1bSDeepak Kodihalli }; 98bc669f1bSDeepak Kodihalli 99bc669f1bSDeepak Kodihalli } // namespace bios 100b37be313SSampa Misra 101032bd50aSSampa Misra namespace utils 102032bd50aSSampa Misra { 103032bd50aSSampa Misra 104032bd50aSSampa Misra /** @brief Convert epoch time to BCD time 105032bd50aSSampa Misra * 106032bd50aSSampa Misra * @param[in] timeSec - Time got from epoch time in seconds 107032bd50aSSampa Misra * @param[out] seconds - number of seconds in BCD 108032bd50aSSampa Misra * @param[out] minutes - number of minutes in BCD 109032bd50aSSampa Misra * @param[out] hours - number of hours in BCD 110032bd50aSSampa Misra * @param[out] day - day of the month in BCD 111032bd50aSSampa Misra * @param[out] month - month number in BCD 112032bd50aSSampa Misra * @param[out] year - year number in BCD 113032bd50aSSampa Misra */ 114032bd50aSSampa Misra void epochToBCDTime(uint64_t timeSec, uint8_t& seconds, uint8_t& minutes, 115032bd50aSSampa Misra uint8_t& hours, uint8_t& day, uint8_t& month, 116032bd50aSSampa Misra uint16_t& year); 11760227a0bSXiaochao Ma 11860227a0bSXiaochao Ma /** @brief Convert dec time to epoch time 11960227a0bSXiaochao Ma * 12060227a0bSXiaochao Ma * @param[in] seconds - number of seconds in dec 12160227a0bSXiaochao Ma * @param[in] minutes - number of minutes in dec 12260227a0bSXiaochao Ma * @param[in] hours - number of hours in dec 12360227a0bSXiaochao Ma * @param[in] day - day of the month in dec 12460227a0bSXiaochao Ma * @param[in] month - month number in dec 12560227a0bSXiaochao Ma * @param[in] year - year number in dec 12660227a0bSXiaochao Ma * @return time - epoch time 12760227a0bSXiaochao Ma */ 12860227a0bSXiaochao Ma std::time_t timeToEpoch(uint8_t seconds, uint8_t minutes, uint8_t hours, 12960227a0bSXiaochao Ma uint8_t day, uint8_t month, uint16_t year); 130032bd50aSSampa Misra } // namespace utils 131032bd50aSSampa Misra 132032bd50aSSampa Misra } // namespace responder 133032bd50aSSampa Misra } // namespace pldm 134