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