tools: lpc: start implementation, send metadata

With the LPC interface, send the window information to the BMC.

Tested: Ran on test system and verified window mapped via ioctl to
driver as expected.

Change-Id: I7ffac6b52205b215fd698a574d098b505091c3d4
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/tools/lpc.cpp b/tools/lpc.cpp
index 97b7902..7a5faa2 100644
--- a/tools/lpc.cpp
+++ b/tools/lpc.cpp
@@ -16,12 +16,35 @@
 
 #include "lpc.hpp"
 
+#include <cstring>
+
 namespace host_tool
 {
 
 bool LpcDataHandler::sendContents(const std::string& input,
                                   std::uint16_t session)
 {
+    /* TODO: Add mechanism for configuring this. */
+    LpcRegion host_lpc_buf;
+
+    /* TODO: Remove hard-coded configuration used with test machine. */
+    host_lpc_buf.address = 0xfedc1000;
+    host_lpc_buf.length = 0x1000;
+
+    std::vector<std::uint8_t> payload(sizeof(host_lpc_buf));
+    std::memcpy(payload.data(), &host_lpc_buf, sizeof(host_lpc_buf));
+
+    blob->writeMeta(session, 0x00, payload);
+
+    /* TODO: Call sessionstat and see if the metadata confirms the region was
+     * mapped successfully, once the lpc data handler implements it.
+     */
+
+    /* todo:
+     * configure memory region (somehow)
+     * copy contents from file to memory region
+     * send external chunk (writeBlob) until it's all sent.
+     */
     return false;
 }
 
diff --git a/tools/lpc.hpp b/tools/lpc.hpp
index 913fc5d..9e9c8b3 100644
--- a/tools/lpc.hpp
+++ b/tools/lpc.hpp
@@ -3,9 +3,19 @@
 #include "blob_interface.hpp"
 #include "interface.hpp"
 
+#include <cstdint>
+
 namespace host_tool
 {
 
+struct LpcRegion
+{
+    /* Host LPC address at which the chunk is to be mapped. */
+    std::uint32_t address;
+    /* Size of the chunk to be mapped. */
+    std::uint32_t length;
+};
+
 class LpcDataHandler : public DataInterface
 {
   public: