1 #pragma once 2 3 #include "config.h" 4 5 #include "bios_parser.hpp" 6 #include "bios_table.hpp" 7 #include "handler.hpp" 8 9 #include <stdint.h> 10 11 #include <ctime> 12 #include <functional> 13 #include <map> 14 #include <vector> 15 16 #include "libpldm/bios.h" 17 #include "libpldm/bios_table.h" 18 19 namespace pldm 20 { 21 22 using AttributeHandle = uint16_t; 23 using StringHandle = uint16_t; 24 using PossibleValuesByHandle = std::vector<StringHandle>; 25 26 namespace responder 27 { 28 29 namespace bios 30 { 31 32 using AttrTableEntryHandler = 33 std::function<void(const struct pldm_bios_attr_table_entry*)>; 34 35 void traverseBIOSAttrTable(const bios::Table& BIOSAttrTable, 36 AttrTableEntryHandler handler); 37 38 namespace internal 39 { 40 41 /** @brief Constructs all the BIOS Tables 42 * 43 * @param[in] request - Request message 44 * @param[in] payload_length - Request message payload length 45 * @param[in] biosJsonDir - path to fetch the BIOS json files 46 * @param[in] biosTablePath - path where the BIOS tables will be persisted 47 */ 48 Response buildBIOSTables(const pldm_msg* request, size_t payloadLength, 49 const char* biosJsonDir, const char* biosTablePath); 50 } // namespace internal 51 52 class Handler : public CmdHandler 53 { 54 public: 55 Handler(); 56 57 /** @brief Handler for GetDateTime 58 * 59 * @param[in] request - Request message payload 60 * @return Response - PLDM Response message 61 */ 62 Response getDateTime(const pldm_msg* request, size_t payloadLength); 63 64 /** @brief Handler for GetBIOSTable 65 * 66 * @param[in] request - Request message 67 * @param[in] payload_length - Request message payload length 68 * @return Response - PLDM Response message 69 */ 70 Response getBIOSTable(const pldm_msg* request, size_t payloadLength); 71 72 /** @brief Handler for GetBIOSAttributeCurrentValueByHandle 73 * 74 * @param[in] request - Request message 75 * @param[in] payloadLength - Request message payload length 76 * @return Response - PLDM Response message 77 */ 78 Response getBIOSAttributeCurrentValueByHandle(const pldm_msg* request, 79 size_t payloadLength); 80 81 /** @brief Handler for SetDateTime 82 * 83 * @param[in] request - Request message payload 84 * @param[in] payloadLength - Request message payload length 85 * @return Response - PLDM Response message 86 */ 87 Response setDateTime(const pldm_msg* request, size_t payloadLength); 88 89 /** @brief Handler for setBIOSAttributeCurrentValue 90 * 91 * @param[in] request - Request message 92 * @param[in] payloadLength - Request message payload length 93 * @return Response - PLDM Response message 94 */ 95 Response setBIOSAttributeCurrentValue(const pldm_msg* request, 96 size_t payloadLength); 97 }; 98 99 } // namespace bios 100 101 namespace utils 102 { 103 104 /** @brief Convert epoch time to BCD time 105 * 106 * @param[in] timeSec - Time got from epoch time in seconds 107 * @param[out] seconds - number of seconds in BCD 108 * @param[out] minutes - number of minutes in BCD 109 * @param[out] hours - number of hours in BCD 110 * @param[out] day - day of the month in BCD 111 * @param[out] month - month number in BCD 112 * @param[out] year - year number in BCD 113 */ 114 void epochToBCDTime(uint64_t timeSec, uint8_t& seconds, uint8_t& minutes, 115 uint8_t& hours, uint8_t& day, uint8_t& month, 116 uint16_t& year); 117 118 /** @brief Convert dec time to epoch time 119 * 120 * @param[in] seconds - number of seconds in dec 121 * @param[in] minutes - number of minutes in dec 122 * @param[in] hours - number of hours in dec 123 * @param[in] day - day of the month in dec 124 * @param[in] month - month number in dec 125 * @param[in] year - year number in dec 126 * @return time - epoch time 127 */ 128 std::time_t timeToEpoch(uint8_t seconds, uint8_t minutes, uint8_t hours, 129 uint8_t day, uint8_t month, uint16_t year); 130 } // namespace utils 131 132 } // namespace responder 133 } // namespace pldm 134