blob: 7c15929a31072bb7b27c470d958a33538ae4be3e [file] [log] [blame]
Ramesh Iyyar3af5c322020-12-04 00:38:42 -06001// SPDX-License-Identifier: Apache-2.0
2
3#include "pldm_utils.hpp"
4
5#include "dump_utils.hpp"
6#include "xyz/openbmc_project/Common/error.hpp"
7
8#include <phosphor-logging/elog-errors.hpp>
9#include <phosphor-logging/log.hpp>
10
11namespace phosphor
12{
13namespace dump
14{
15namespace pldm
16{
17
18using namespace phosphor::logging;
19using NotAllowed = sdbusplus::xyz::openbmc_project::Common::Error::NotAllowed;
20using Reason = xyz::openbmc_project::Common::NotAllowed::REASON;
21
22int openPLDM()
23{
24 auto fd = pldm_open();
25 if (fd < 0)
26 {
27 auto e = errno;
28 log<level::ERR>("pldm_open failed", entry("ERRNO=%d", e),
29 entry("FD=%d\n", fd));
30 elog<NotAllowed>(Reason("Required host dump action via pldm is not "
31 "allowed due to pldm_open failed"));
32 }
33 return fd;
34}
35
36uint8_t getPLDMInstanceID(uint8_t eid)
37{
38
39 constexpr auto pldmRequester = "xyz.openbmc_project.PLDM.Requester";
40 constexpr auto pldm = "/xyz/openbmc_project/pldm";
41
42 auto bus = sdbusplus::bus::new_default();
43 auto service = phosphor::dump::getService(bus, pldm, pldmRequester);
44
45 auto method = bus.new_method_call(service.c_str(), pldm, pldmRequester,
46 "GetInstanceId");
47 method.append(eid);
48 auto reply = bus.call(method);
49
50 uint8_t instanceID = 0;
51 reply.read(instanceID);
52
53 return instanceID;
54}
55
56} // namespace pldm
57} // namespace dump
58} // namespace phosphor