OpenPOWER: Add support for hardware dump

Hardware dump is a collection hardware state information,
including various registers, and it is used for debugging
system checkstop. checkstop is the descriptive term for
entire system termination by the hardware due to a detected error.

This commits adds
 - Hardware dump entry implementation
 - Hardware dump manager implementation

Tested:
  - Create a hardware dump
busctl --verbose call org.open_power.Dump.Manager /org/openpower/dump xyz.openbmc_project.Dump.Create CreateDump a{sv} 3  "com.ibm.Dump.Create.CreateParameters.DumpType" s "com.ibm.Dump.Create.DumpType.Hardware" "com.ibm.Dump.Create.CreateParameters.ErrorLogId" t 0xDEADBEEF "com.ibm.Dump.Create.CreateParameters.FailingUnitId" t 1
MESSAGE "o" {
        OBJECT_PATH "/xyz/openbmc_project/dump/hardware/entry/1";
};
/var/lib/phosphor-debug-collector/hardwaredump/1/hwdump_1_1627559369.tar.gz

  - Delete a hardware dump
busctl call xyz.openbmc_project.Dump.Manager /xyz/openbmc_project/dump/hardware/entry/1 xyz.openbmc_project.Object.Delete Delete

  - Offload hardware dump
  - Restore hardware dumps after restart

Signed-off-by: Dhruvaraj Subhashchandran <dhruvaraj@in.ibm.com>
Change-Id: I7f6b83896b2c78d9eb4295212a62476b1fe1d6c0
diff --git a/dump-extensions/openpower-dumps/dump-extensions.cpp b/dump-extensions/openpower-dumps/dump-extensions.cpp
index 3b91842..c049fc9 100644
--- a/dump-extensions/openpower-dumps/dump-extensions.cpp
+++ b/dump-extensions/openpower-dumps/dump-extensions.cpp
@@ -50,6 +50,26 @@
         HOSTBOOT_DUMP_PATH, "hbdump", HOSTBOOT_DUMP_TMP_FILE_DIR,
         HOSTBOOT_DUMP_MAX_SIZE, HOSTBOOT_DUMP_MIN_SPACE_REQD,
         HOSTBOOT_DUMP_TOTAL_SIZE));
+
+    try
+    {
+        std::filesystem::create_directories(HARDWARE_DUMP_PATH);
+    }
+    catch (std::exception& e)
+    {
+        log<level::ERR>(
+            fmt::format("Failed to create hardware dump directory({})",
+                        HARDWARE_DUMP_PATH)
+                .c_str());
+        throw std::runtime_error("Failed to create hardware dump directory");
+    }
+
+    dumpList.push_back(std::make_unique<openpower::dump::hostdump::Manager<
+                           sdbusplus::com::ibm::Dump::Entry::server::Hardware>>(
+        bus, event, HARDWARE_DUMP_OBJPATH, HARDWARE_DUMP_OBJ_ENTRY,
+        HARDWARE_DUMP_PATH, "hwdump", HARDWARE_DUMP_TMP_FILE_DIR,
+        HARDWARE_DUMP_MAX_SIZE, HARDWARE_DUMP_MIN_SPACE_REQD,
+        HARDWARE_DUMP_TOTAL_SIZE));
 }
 } // namespace dump
 } // namespace phosphor