1 #pragma once 2 3 #include "bios_config.hpp" 4 #include "bios_table.hpp" 5 #include "common/instance_id.hpp" 6 #include "pldmd/handler.hpp" 7 #include "requester/handler.hpp" 8 9 #include <libpldm/bios.h> 10 #include <libpldm/bios_table.h> 11 #include <stdint.h> 12 13 #include <ctime> 14 #include <functional> 15 #include <map> 16 #include <vector> 17 18 namespace pldm 19 { 20 21 namespace responder 22 { 23 24 namespace bios 25 { 26 27 class Handler : public CmdHandler 28 { 29 public: 30 /** @brief Constructor 31 * 32 * @param[in] fd - socket descriptor to communicate to host 33 * @param[in] eid - MCTP EID of host firmware 34 * @param[in] instanceIdDb - pointer to an InstanceIdDb object 35 * @param[in] handler - PLDM request handler 36 * @param[in] systemConfig - pointer to SystemConfig object 37 */ 38 Handler(int fd, uint8_t eid, pldm::InstanceIdDb* instanceIdDb, 39 pldm::requester::Handler<pldm::requester::Request>* handler, 40 pldm::responder::oem_bios::Handler* oemBiosHandler); 41 42 /** @brief Handler for GetDateTime 43 * 44 * @param[in] request - Request message payload 45 * @return Response - PLDM Response message 46 */ 47 Response getDateTime(const pldm_msg* request, size_t payloadLength); 48 49 /** @brief Handler for GetBIOSTable 50 * 51 * @param[in] request - Request message 52 * @param[in] payload_length - Request message payload length 53 * @return Response - PLDM Response message 54 */ 55 Response getBIOSTable(const pldm_msg* request, size_t payloadLength); 56 57 /** @brief Handler for SetBIOSTable 58 * 59 * @param[in] request - Request message 60 * @param[in] payload_length - Request message payload length 61 * @return Response - PLDM Response message 62 */ 63 Response setBIOSTable(const pldm_msg* request, size_t payloadLength); 64 65 /** @brief Handler for GetBIOSAttributeCurrentValueByHandle 66 * 67 * @param[in] request - Request message 68 * @param[in] payloadLength - Request message payload length 69 * @return Response - PLDM Response message 70 */ 71 Response getBIOSAttributeCurrentValueByHandle(const pldm_msg* request, 72 size_t payloadLength); 73 74 /** @brief Handler for SetDateTime 75 * 76 * @param[in] request - Request message payload 77 * @param[in] payloadLength - Request message payload length 78 * @return Response - PLDM Response message 79 */ 80 Response setDateTime(const pldm_msg* request, size_t payloadLength); 81 82 /** @brief Handler for setBIOSAttributeCurrentValue 83 * 84 * @param[in] request - Request message 85 * @param[in] payloadLength - Request message payload length 86 * @return Response - PLDM Response message 87 */ 88 Response setBIOSAttributeCurrentValue(const pldm_msg* request, 89 size_t payloadLength); 90 91 private: 92 BIOSConfig biosConfig; 93 }; 94 95 } // namespace bios 96 97 namespace utils 98 { 99 100 /** @brief Convert epoch time to BCD time 101 * 102 * @param[in] timeSec - Time got from epoch time in seconds 103 * @param[out] seconds - number of seconds in BCD 104 * @param[out] minutes - number of minutes in BCD 105 * @param[out] hours - number of hours in BCD 106 * @param[out] day - day of the month in BCD 107 * @param[out] month - month number in BCD 108 * @param[out] year - year number in BCD 109 */ 110 void epochToBCDTime(uint64_t timeSec, uint8_t& seconds, uint8_t& minutes, 111 uint8_t& hours, uint8_t& day, uint8_t& month, 112 uint16_t& year); 113 114 /** @brief Convert dec time to epoch time 115 * 116 * @param[in] seconds - number of seconds in dec 117 * @param[in] minutes - number of minutes in dec 118 * @param[in] hours - number of hours in dec 119 * @param[in] day - day of the month in dec 120 * @param[in] month - month number in dec 121 * @param[in] year - year number in dec 122 * @return time - epoch time 123 */ 124 std::time_t timeToEpoch(uint8_t seconds, uint8_t minutes, uint8_t hours, 125 uint8_t day, uint8_t month, uint16_t year); 126 } // namespace utils 127 128 } // namespace responder 129 } // namespace pldm 130