blob: 3ec3a57991b7a90988d25af5ff3edfe7d69033b9 [file] [log] [blame]
Sampa Misra032bd502019-03-06 05:03:22 -06001#pragma once
2
Sampa Misrab37be312019-07-03 02:26:41 -05003#include "config.h"
4
George Liu6492f522020-06-16 10:34:05 +08005#include "libpldm/bios.h"
6#include "libpldm/bios_table.h"
7
John Wang6080aae2020-02-14 09:34:25 +08008#include "bios_config.hpp"
Sampa Misrab37be312019-07-03 02:26:41 -05009#include "bios_table.hpp"
Tom Joseph7f839f92020-09-21 10:20:44 +053010#include "pldmd/dbus_impl_requester.hpp"
Deepak Kodihalli1521f6d2020-06-16 08:51:02 -050011#include "pldmd/handler.hpp"
Sampa Misrac0c79482021-06-02 08:01:54 -050012#include "requester/handler.hpp"
Sampa Misrab37be312019-07-03 02:26:41 -050013
Sampa Misra032bd502019-03-06 05:03:22 -060014#include <stdint.h>
15
Xiaochao Ma60227a02019-12-04 09:00:12 +080016#include <ctime>
John Wang02700402019-10-06 16:34:29 +080017#include <functional>
Sampa Misrab37be312019-07-03 02:26:41 -050018#include <map>
vkaverapa6575b82019-04-03 05:33:52 -050019#include <vector>
20
Sampa Misra032bd502019-03-06 05:03:22 -060021namespace pldm
22{
23
24namespace responder
25{
26
Deepak Kodihallibc669f12019-11-28 08:52:07 -060027namespace bios
28{
29
Deepak Kodihallibc669f12019-11-28 08:52:07 -060030class Handler : public CmdHandler
31{
32 public:
Tom Joseph7f839f92020-09-21 10:20:44 +053033 /** @brief Constructor
34 *
35 * @param[in] fd - socket descriptor to communicate to host
36 * @param[in] eid - MCTP EID of host firmware
37 * @param[in] requester - pointer to Requester object
Sampa Misrac0c79482021-06-02 08:01:54 -050038 * @param[in] handler - PLDM request handler
Tom Joseph7f839f92020-09-21 10:20:44 +053039 */
Sampa Misrac0c79482021-06-02 08:01:54 -050040 Handler(int fd, uint8_t eid, dbus_api::Requester* requester,
41 pldm::requester::Handler<pldm::requester::Request>* handler);
Deepak Kodihallibc669f12019-11-28 08:52:07 -060042
43 /** @brief Handler for GetDateTime
44 *
45 * @param[in] request - Request message payload
Xiaochao Ma60227a02019-12-04 09:00:12 +080046 * @return Response - PLDM Response message
Deepak Kodihallibc669f12019-11-28 08:52:07 -060047 */
48 Response getDateTime(const pldm_msg* request, size_t payloadLength);
49
50 /** @brief Handler for GetBIOSTable
51 *
52 * @param[in] request - Request message
53 * @param[in] payload_length - Request message payload length
Xiaochao Ma60227a02019-12-04 09:00:12 +080054 * @return Response - PLDM Response message
Deepak Kodihallibc669f12019-11-28 08:52:07 -060055 */
56 Response getBIOSTable(const pldm_msg* request, size_t payloadLength);
John Wang8721ed62019-12-05 14:44:43 +080057
George Liu1b180d82020-07-23 14:01:58 +080058 /** @brief Handler for SetBIOSTable
59 *
60 * @param[in] request - Request message
61 * @param[in] payload_length - Request message payload length
62 * @return Response - PLDM Response message
63 */
64 Response setBIOSTable(const pldm_msg* request, size_t payloadLength);
65
John Wang8721ed62019-12-05 14:44:43 +080066 /** @brief Handler for GetBIOSAttributeCurrentValueByHandle
67 *
68 * @param[in] request - Request message
69 * @param[in] payloadLength - Request message payload length
70 * @return Response - PLDM Response message
71 */
72 Response getBIOSAttributeCurrentValueByHandle(const pldm_msg* request,
73 size_t payloadLength);
Xiaochao Ma60227a02019-12-04 09:00:12 +080074
75 /** @brief Handler for SetDateTime
76 *
77 * @param[in] request - Request message payload
78 * @param[in] payloadLength - Request message payload length
79 * @return Response - PLDM Response message
80 */
81 Response setDateTime(const pldm_msg* request, size_t payloadLength);
John Wang42174882019-12-20 14:56:59 +080082
83 /** @brief Handler for setBIOSAttributeCurrentValue
84 *
85 * @param[in] request - Request message
86 * @param[in] payloadLength - Request message payload length
87 * @return Response - PLDM Response message
88 */
89 Response setBIOSAttributeCurrentValue(const pldm_msg* request,
90 size_t payloadLength);
John Wang6080aae2020-02-14 09:34:25 +080091
92 private:
93 BIOSConfig biosConfig;
Deepak Kodihallibc669f12019-11-28 08:52:07 -060094};
Sampa Misrab37be312019-07-03 02:26:41 -050095
Jinu Joy Thomasf666db12019-05-29 05:22:31 -050096} // namespace bios
97
Sampa Misra032bd502019-03-06 05:03:22 -060098namespace utils
99{
100
101/** @brief Convert epoch time to BCD time
102 *
103 * @param[in] timeSec - Time got from epoch time in seconds
104 * @param[out] seconds - number of seconds in BCD
105 * @param[out] minutes - number of minutes in BCD
106 * @param[out] hours - number of hours in BCD
107 * @param[out] day - day of the month in BCD
108 * @param[out] month - month number in BCD
109 * @param[out] year - year number in BCD
110 */
111void epochToBCDTime(uint64_t timeSec, uint8_t& seconds, uint8_t& minutes,
112 uint8_t& hours, uint8_t& day, uint8_t& month,
113 uint16_t& year);
Xiaochao Ma60227a02019-12-04 09:00:12 +0800114
115/** @brief Convert dec time to epoch time
116 *
117 * @param[in] seconds - number of seconds in dec
118 * @param[in] minutes - number of minutes in dec
119 * @param[in] hours - number of hours in dec
120 * @param[in] day - day of the month in dec
121 * @param[in] month - month number in dec
122 * @param[in] year - year number in dec
123 * @return time - epoch time
124 */
125std::time_t timeToEpoch(uint8_t seconds, uint8_t minutes, uint8_t hours,
126 uint8_t day, uint8_t month, uint16_t year);
Sampa Misra032bd502019-03-06 05:03:22 -0600127} // namespace utils
128
129} // namespace responder
130} // namespace pldm