blob: cce581fe8913ecca9d7de5f50c28c1ab0b012463 [file] [log] [blame]
Zane Shelley0b8368c2021-03-18 17:33:41 -05001#include <analyzer/resolution.hpp>
Zane Shelley236bb732021-03-24 17:07:46 -05002#include <util/pdbg.hpp>
3#include <util/trace.hpp>
Zane Shelley0b8368c2021-03-18 17:33:41 -05004
5namespace analyzer
6{
7
Zane Shelley236bb732021-03-24 17:07:46 -05008void HardwareCalloutResolution::resolve(ServiceData& io_sd) const
Zane Shelley0b8368c2021-03-18 17:33:41 -05009{
Zane Shelley236bb732021-03-24 17:07:46 -050010 // Get the chip target from the root cause signature.
11 auto trgt = util::pdbg::getTrgt(io_sd.getRootCause().getChip());
12 auto path = std::string{util::pdbg::getPath(trgt)};
13
14 // Get the unit target, if needed.
15 if (!iv_path.empty())
16 {
17 path += "/" + iv_path;
18 trgt = util::pdbg::getTrgt(path);
19 if (nullptr == trgt)
20 {
21 trace::err("Unable to find target for %s", path.c_str());
22 return; // can't continue
23 }
24 }
25
Zane Shelleyc85716c2021-08-17 10:54:06 -050026 // Get the location code for this target.
Zane Shelley236bb732021-03-24 17:07:46 -050027 auto locCode = util::pdbg::getLocationCode(trgt);
Zane Shelleyc85716c2021-08-17 10:54:06 -050028
29 // Add the actual callout to the service data.
30 nlohmann::json callout;
31 callout["LocationCode"] = locCode;
32 callout["Priority"] = iv_priority.getUserDataString();
33 io_sd.addCallout(callout);
Zane Shelley236bb732021-03-24 17:07:46 -050034
35 // Add entity path to gard list.
36 auto entityPath = util::pdbg::getPhysDevPath(trgt);
37 if (entityPath.empty())
38 {
39 trace::err("Unable to find entity path for %s", path.c_str());
40 }
41 else
42 {
Zane Shelley2f921302021-08-09 13:23:25 -050043 Guard::Type guard = Guard::NONE;
44 if (iv_guard)
45 {
46 guard = io_sd.queryCheckstop() ? Guard::FATAL : Guard::NON_FATAL;
47 }
48
49 io_sd.addGuard(std::make_shared<Guard>(entityPath, guard));
Zane Shelley236bb732021-03-24 17:07:46 -050050 }
Zane Shelley0b8368c2021-03-18 17:33:41 -050051}
52
Zane Shelleyc85716c2021-08-17 10:54:06 -050053//------------------------------------------------------------------------------
54
55void ProcedureCalloutResolution::resolve(ServiceData& io_sd) const
56{
57 // Add the actual callout to the service data.
58 nlohmann::json callout;
59 callout["Procedure"] = iv_procedure.getString();
60 callout["Priority"] = iv_priority.getUserDataString();
61 io_sd.addCallout(callout);
62}
63
64//------------------------------------------------------------------------------
65
Zane Shelley0b8368c2021-03-18 17:33:41 -050066} // namespace analyzer