summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Feist <james.feist@linux.intel.com>2019-09-28 01:15:14 +0300
committerFeist, James <james.feist@intel.com>2019-10-08 01:11:09 +0300
commit54632a9bb2dda405bc1b2d7a2b3d2c13eca925a5 (patch)
treeee726920e35639018d6e3d0fc10eee82088abc24
parent4d8c6046b4fa508b9693a8fbc8d567358f55891f (diff)
downloadprovingground-54632a9bb2dda405bc1b2d7a2b3d2c13eca925a5.tar.xz
Add rebuilding to hsbp manager
Interface is pushed here: https://gerrit.openbmc-project.xyz/c/openbmc/phosphor-dbus-interfaces/+/25671 Tested: available on dbus Change-Id: I79a73bb0e62951b09f4eb8bf0594aa39916b5dd9 Signed-off-by: James Feist <james.feist@linux.intel.com>
-rw-r--r--hsbp-manager/src/hsbp_manager.cpp25
1 files changed, 20 insertions, 5 deletions
diff --git a/hsbp-manager/src/hsbp_manager.cpp b/hsbp-manager/src/hsbp_manager.cpp
index e02b76a..9dd4dbd 100644
--- a/hsbp-manager/src/hsbp_manager.cpp
+++ b/hsbp-manager/src/hsbp_manager.cpp
@@ -49,7 +49,8 @@ static std::string zeroPad(const uint8_t val)
struct Drive
{
- Drive(size_t driveIndex, bool isPresent, bool isOperational, bool nvme) :
+ Drive(size_t driveIndex, bool isPresent, bool isOperational, bool nvme,
+ bool rebuilding) :
isNvme(nvme)
{
constexpr const char* basePath =
@@ -61,19 +62,25 @@ struct Drive
"Drive " + std::to_string(driveIndex));
itemIface->initialize();
operationalIface = objServer.add_interface(
- basePath + std::to_string(driveIndex),
+ itemIface->get_object_path(),
"xyz.openbmc_project.State.Decorator.OperationalStatus");
operationalIface->register_property("Functional", isOperational);
operationalIface->initialize();
+ rebuildingIface = objServer.add_interface(
+ itemIface->get_object_path(), "xyz.openbmc_project.State.Drive");
+ rebuildingIface->register_property("Rebuilding", rebuilding);
+ rebuildingIface->initialize();
}
~Drive()
{
objServer.remove_interface(itemIface);
objServer.remove_interface(operationalIface);
+ objServer.remove_interface(rebuildingIface);
}
std::shared_ptr<sdbusplus::asio::dbus_interface> itemIface;
std::shared_ptr<sdbusplus::asio::dbus_interface> operationalIface;
+ std::shared_ptr<sdbusplus::asio::dbus_interface> rebuildingIface;
bool isNvme;
};
@@ -155,17 +162,20 @@ struct Backplane
uint8_t curPresence = 0;
uint8_t curIFDET = 0;
uint8_t curFailed = 0;
+ uint8_t curRebuild = 0;
getPresence(curPresence);
getIFDET(curIFDET);
getFailed(curFailed);
+ getRebuild(curRebuild);
if (curPresence != presence || curIFDET != ifdet ||
- curFailed != failed)
+ curFailed != failed || curRebuild != rebuilding)
{
presence = curPresence;
ifdet = curIFDET;
failed = curFailed;
+ rebuilding = curRebuild;
updateDrives();
}
runTimer();
@@ -180,10 +190,12 @@ struct Backplane
bool isNvme = nvme & (1 << ii);
bool isPresent = isNvme || (presence & (1 << ii));
bool isFailed = !isPresent || failed & (1 << ii);
+ bool isRebuilding = !isPresent && (rebuilding & (1 << ii));
// +1 to convert from 0 based to 1 based
size_t driveIndex = (backplaneIndex * maxDrives) + ii + 1;
- drives.emplace_back(driveIndex, isPresent, !isFailed, isNvme);
+ drives.emplace_back(driveIndex, isPresent, !isFailed, isNvme,
+ isRebuilding);
}
}
@@ -195,12 +207,14 @@ struct Backplane
{
bool isNvme = nvme & (1 << ii);
bool isPresent = isNvme || (presence & (1 << ii));
- bool isFailed = !isPresent || failed & (1 << ii);
+ bool isFailed = !isPresent || (failed & (1 << ii));
+ bool isRebuilding = isPresent && (rebuilding & (1 << ii));
Drive& drive = drives[ii];
drive.isNvme = isNvme;
drive.itemIface->set_property("Present", isPresent);
drive.operationalIface->set_property("Functional", !isFailed);
+ drive.rebuildingIface->set_property("Rebuilding", isRebuilding);
}
}
@@ -351,6 +365,7 @@ struct Backplane
uint8_t presence = 0;
uint8_t ifdet = 0;
uint8_t failed = 0;
+ uint8_t rebuilding = 0;
int file = -1;