pldmd: implement a new handler registration scheme

Implement a PLDM request handler registration scheme that requires
handlers to be C++ objects rather than plain functions. This was needed
for a couple of reasons:

- Perform specific actions at the PLDM daemon startup (that's when the
  handlers are loaded).
- Share data across PLDM request messages (for eg FRU/BIOS tables),
  without having to resort to globals and statics.

Tested:
- existing unit tests still pass
- added tests for the new registration scheme

Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
Change-Id: I1cf1c0a6fccd15da54f08120e61a5f256df6bc36
diff --git a/oem/ibm/libpldmresponder/file_io.cpp b/oem/ibm/libpldmresponder/file_io.cpp
index 05051b6..963a6b6 100644
--- a/oem/ibm/libpldmresponder/file_io.cpp
+++ b/oem/ibm/libpldmresponder/file_io.cpp
@@ -5,7 +5,6 @@
 #include "file_io_by_type.hpp"
 #include "file_table.hpp"
 #include "libpldmresponder/utils.hpp"
-#include "registration.hpp"
 #include "xyz/openbmc_project/Common/error.hpp"
 
 #include <fcntl.h>
@@ -31,28 +30,6 @@
 namespace responder
 {
 
-namespace oem_ibm
-{
-
-void registerHandlers()
-{
-    registerHandler(PLDM_OEM, PLDM_GET_FILE_TABLE, std::move(getFileTable));
-    registerHandler(PLDM_OEM, PLDM_READ_FILE_INTO_MEMORY,
-                    std::move(readFileIntoMemory));
-    registerHandler(PLDM_OEM, PLDM_WRITE_FILE_FROM_MEMORY,
-                    std::move(writeFileFromMemory));
-    registerHandler(PLDM_OEM, PLDM_READ_FILE, std::move(readFile));
-    registerHandler(PLDM_OEM, PLDM_WRITE_FILE, std::move(writeFile));
-    registerHandler(PLDM_OEM, PLDM_WRITE_FILE_BY_TYPE_FROM_MEMORY,
-                    std::move(writeFileByTypeFromMemory));
-    registerHandler(PLDM_OEM, PLDM_READ_FILE_BY_TYPE_INTO_MEMORY,
-                    std::move(readFileByTypeIntoMemory));
-    registerHandler(PLDM_OEM, PLDM_READ_FILE_BY_TYPE,
-                    std::move(readFileByType));
-}
-
-} // namespace oem_ibm
-
 namespace fs = std::filesystem;
 using namespace phosphor::logging;
 
@@ -173,7 +150,11 @@
 
 } // namespace dma
 
-Response readFileIntoMemory(const pldm_msg* request, size_t payloadLength)
+namespace oem_ibm
+{
+
+Response Handler::readFileIntoMemory(const pldm_msg* request,
+                                     size_t payloadLength)
 {
     uint32_t fileHandle = 0;
     uint32_t offset = 0;
@@ -254,7 +235,8 @@
                             request->hdr.instance_id);
 }
 
-Response writeFileFromMemory(const pldm_msg* request, size_t payloadLength)
+Response Handler::writeFileFromMemory(const pldm_msg* request,
+                                      size_t payloadLength)
 {
     uint32_t fileHandle = 0;
     uint32_t offset = 0;
@@ -330,7 +312,7 @@
                             request->hdr.instance_id);
 }
 
-Response getFileTable(const pldm_msg* request, size_t payloadLength)
+Response Handler::getFileTable(const pldm_msg* request, size_t payloadLength)
 {
     uint32_t transferHandle = 0;
     uint8_t transferFlag = 0;
@@ -385,7 +367,7 @@
     return response;
 }
 
-Response readFile(const pldm_msg* request, size_t payloadLength)
+Response Handler::readFile(const pldm_msg* request, size_t payloadLength)
 {
     uint32_t fileHandle = 0;
     uint32_t offset = 0;
@@ -465,7 +447,7 @@
     return response;
 }
 
-Response writeFile(const pldm_msg* request, size_t payloadLength)
+Response Handler::writeFile(const pldm_msg* request, size_t payloadLength)
 {
     uint32_t fileHandle = 0;
     uint32_t offset = 0;
@@ -601,20 +583,21 @@
     return response;
 }
 
-Response writeFileByTypeFromMemory(const pldm_msg* request,
-                                   size_t payloadLength)
+Response Handler::writeFileByTypeFromMemory(const pldm_msg* request,
+                                            size_t payloadLength)
 {
     return rwFileByTypeIntoMemory(PLDM_WRITE_FILE_BY_TYPE_FROM_MEMORY, request,
                                   payloadLength);
 }
 
-Response readFileByTypeIntoMemory(const pldm_msg* request, size_t payloadLength)
+Response Handler::readFileByTypeIntoMemory(const pldm_msg* request,
+                                           size_t payloadLength)
 {
     return rwFileByTypeIntoMemory(PLDM_READ_FILE_BY_TYPE_INTO_MEMORY, request,
                                   payloadLength);
 }
 
-Response readFileByType(const pldm_msg* request, size_t payloadLength)
+Response Handler::readFileByType(const pldm_msg* request, size_t payloadLength)
 {
     Response response(sizeof(pldm_msg_hdr) + PLDM_RW_FILE_BY_TYPE_RESP_BYTES);
     auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
@@ -661,5 +644,6 @@
     return response;
 }
 
+} // namespace oem_ibm
 } // namespace responder
 } // namespace pldm