xref: /openbmc/pldm/libpldmresponder/bios.hpp (revision b3b84b497a20c33f5c49e67e89c20638929166a3)
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