diff --git a/bmc/firmware_handler.cpp b/bmc/firmware_handler.cpp
index aaabe83..5f16846 100644
--- a/bmc/firmware_handler.cpp
+++ b/bmc/firmware_handler.cpp
@@ -16,6 +16,8 @@
 
 #include "firmware_handler.hpp"
 
+#include "data.hpp"
+#include "flags.hpp"
 #include "image_handler.hpp"
 #include "status.hpp"
 #include "util.hpp"
@@ -511,7 +513,7 @@
 
     std::vector<std::uint8_t> bytes;
 
-    if (item->second->flags & UpdateFlags::ipmi)
+    if (item->second->flags & FirmwareFlags::UpdateFlags::ipmi)
     {
         bytes = data;
     }
@@ -550,7 +552,7 @@
         return false;
     }
 
-    if (item->second->flags & UpdateFlags::ipmi)
+    if (item->second->flags & FirmwareFlags::UpdateFlags::ipmi)
     {
         return false;
     }
diff --git a/bmc/firmware_handler.hpp b/bmc/firmware_handler.hpp
index 8c7cb04..3dd4978 100644
--- a/bmc/firmware_handler.hpp
+++ b/bmc/firmware_handler.hpp
@@ -51,26 +51,12 @@
     std::string activePath;
 };
 
-struct ExtChunkHdr
-{
-    std::uint32_t length; /* Length of the data queued (little endian). */
-} __attribute__((packed));
-
 /**
  * Register only one firmware blob handler that will manage all sessions.
  */
 class FirmwareBlobHandler : public blobs::GenericBlobInterface
 {
   public:
-    enum UpdateFlags : std::uint16_t
-    {
-        openRead = (1 << 0),  /* Flag for reading. */
-        openWrite = (1 << 1), /* Flag for writing. */
-        ipmi = (1 << 8), /* Expect to send contents over IPMI BlockTransfer. */
-        p2a = (1 << 9),  /* Expect to send contents over P2A bridge. */
-        lpc = (1 << 10), /* Expect to send contents over LPC bridge. */
-    };
-
     /** The state of the firmware update process. */
     enum class UpdateState
     {
diff --git a/bmc/main.cpp b/bmc/main.cpp
index 2dd9531..ea27b3d 100644
--- a/bmc/main.cpp
+++ b/bmc/main.cpp
@@ -18,6 +18,7 @@
 
 #include "file_handler.hpp"
 #include "firmware_handler.hpp"
+#include "flags.hpp"
 #include "image_handler.hpp"
 #include "lpc_aspeed.hpp"
 #include "lpc_handler.hpp"
@@ -80,12 +81,12 @@
 };
 
 std::vector<DataHandlerPack> supportedTransports = {
-    {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
+    {FirmwareFlags::UpdateFlags::ipmi, nullptr},
 #ifdef ENABLE_PCI_BRIDGE
-    {FirmwareBlobHandler::UpdateFlags::p2a, &pciDataHandler},
+    {FirmwareFlags::UpdateFlags::p2a, &pciDataHandler},
 #endif
 #ifdef ENABLE_LPC_BRIDGE
-    {FirmwareBlobHandler::UpdateFlags::lpc, &lpcDataHandler},
+    {FirmwareFlags::UpdateFlags::lpc, &lpcDataHandler},
 #endif
 };
 
diff --git a/bmc/pci_handler.cpp b/bmc/pci_handler.cpp
index 436c63e..1b6b7ff 100644
--- a/bmc/pci_handler.cpp
+++ b/bmc/pci_handler.cpp
@@ -16,6 +16,8 @@
 
 #include "pci_handler.hpp"
 
+#include "data.hpp"
+
 #include <fcntl.h>
 #include <linux/aspeed-p2a-ctrl.h>
 
diff --git a/bmc/pci_handler.hpp b/bmc/pci_handler.hpp
index 1cafc32..9b2c5b6 100644
--- a/bmc/pci_handler.hpp
+++ b/bmc/pci_handler.hpp
@@ -10,12 +10,6 @@
 namespace ipmi_flash
 {
 
-/** P2A configuration response. */
-struct PciConfigResponse
-{
-    std::uint32_t address;
-} __attribute__((packed));
-
 /**
  * Data handler for reading and writing data via the P2A bridge.
  *
diff --git a/bmc/test/firmware_canhandle_unittest.cpp b/bmc/test/firmware_canhandle_unittest.cpp
index dabf8ef..13bf943 100644
--- a/bmc/test/firmware_canhandle_unittest.cpp
+++ b/bmc/test/firmware_canhandle_unittest.cpp
@@ -1,5 +1,6 @@
 #include "data_mock.hpp"
 #include "firmware_handler.hpp"
+#include "flags.hpp"
 #include "image_mock.hpp"
 #include "triggerable_mock.hpp"
 #include "util.hpp"
@@ -29,7 +30,7 @@
         {"bcdf", &imageMock},
     };
     std::vector<DataHandlerPack> data = {
-        {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
+        {FirmwareFlags::UpdateFlags::ipmi, nullptr},
     };
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
diff --git a/bmc/test/firmware_close_unittest.cpp b/bmc/test/firmware_close_unittest.cpp
index 66b9c83..d4e7cf8 100644
--- a/bmc/test/firmware_close_unittest.cpp
+++ b/bmc/test/firmware_close_unittest.cpp
@@ -33,7 +33,7 @@
     EXPECT_CALL(imageMock, open(StrEq(hashBlobId))).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
+        0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::lpc,
         hashBlobId));
 
     /* The active hash blob_id was added. */
@@ -60,7 +60,7 @@
     EXPECT_CALL(imageMock, open(StrEq(hashBlobId))).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi,
         hashBlobId));
 
     /* The active hash blob_id was added. */
diff --git a/bmc/test/firmware_commit_unittest.cpp b/bmc/test/firmware_commit_unittest.cpp
index b8c651e..a6ab172 100644
--- a/bmc/test/firmware_commit_unittest.cpp
+++ b/bmc/test/firmware_commit_unittest.cpp
@@ -1,5 +1,6 @@
 #include "data_mock.hpp"
 #include "firmware_handler.hpp"
+#include "flags.hpp"
 #include "image_mock.hpp"
 #include "triggerable_mock.hpp"
 #include "util.hpp"
@@ -33,7 +34,7 @@
         };
 
         data = {
-            {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
+            {FirmwareFlags::UpdateFlags::ipmi, nullptr},
         };
     }
 };
@@ -55,8 +56,7 @@
     EXPECT_CALL(imageMock2, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
-        "asdf"));
+        0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi, "asdf"));
 
     EXPECT_FALSE(handler->commit(0, {}));
 }
@@ -78,7 +78,7 @@
     EXPECT_CALL(imageMock1, open(StrEq(hashBlobId))).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi,
         hashBlobId));
 
     EXPECT_FALSE(handler->commit(0, {}));
diff --git a/bmc/test/firmware_createhandler_unittest.cpp b/bmc/test/firmware_createhandler_unittest.cpp
index dd09cbe..d7b99a6 100644
--- a/bmc/test/firmware_createhandler_unittest.cpp
+++ b/bmc/test/firmware_createhandler_unittest.cpp
@@ -1,5 +1,6 @@
 #include "data_mock.hpp"
 #include "firmware_handler.hpp"
+#include "flags.hpp"
 #include "image_mock.hpp"
 #include "triggerable_mock.hpp"
 #include "util.hpp"
@@ -26,8 +27,8 @@
     };
 
     std::vector<DataHandlerPack> data = {
-        {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
-        {FirmwareBlobHandler::UpdateFlags::lpc, &dataMock},
+        {FirmwareFlags::UpdateFlags::ipmi, nullptr},
+        {FirmwareFlags::UpdateFlags::lpc, &dataMock},
     };
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
diff --git a/bmc/test/firmware_handler_unittest.cpp b/bmc/test/firmware_handler_unittest.cpp
index 27bd517..7ab224d 100644
--- a/bmc/test/firmware_handler_unittest.cpp
+++ b/bmc/test/firmware_handler_unittest.cpp
@@ -1,4 +1,5 @@
 #include "firmware_handler.hpp"
+#include "flags.hpp"
 #include "image_mock.hpp"
 #include "triggerable_mock.hpp"
 #include "util.hpp"
@@ -18,7 +19,7 @@
 TEST(FirmwareHandlerTest, CreateEmptyListVerifyFails)
 {
     std::vector<DataHandlerPack> data = {
-        {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
+        {FirmwareFlags::UpdateFlags::ipmi, nullptr},
     };
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
@@ -49,7 +50,7 @@
         {"asdf", &imageMock},
     };
     std::vector<DataHandlerPack> data = {
-        {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
+        {FirmwareFlags::UpdateFlags::ipmi, nullptr},
     };
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
diff --git a/bmc/test/firmware_sessionstat_unittest.cpp b/bmc/test/firmware_sessionstat_unittest.cpp
index d2d1896..dcb16d9 100644
--- a/bmc/test/firmware_sessionstat_unittest.cpp
+++ b/bmc/test/firmware_sessionstat_unittest.cpp
@@ -30,8 +30,7 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
-        "asdf"));
+        0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi, "asdf"));
 
     int size = 512;
     EXPECT_CALL(imageMock, getSize()).WillOnce(Return(size));
@@ -39,7 +38,7 @@
     blobs::BlobMeta meta;
     EXPECT_TRUE(handler->stat(0, &meta));
     EXPECT_EQ(meta.blobState,
-              blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi);
+              blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi);
     EXPECT_EQ(meta.size, size);
     EXPECT_EQ(meta.metadata.size(), 0);
 }
@@ -54,8 +53,7 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
-        "asdf"));
+        0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::lpc, "asdf"));
 
     int size = 512;
     EXPECT_CALL(imageMock, getSize()).WillOnce(Return(size));
@@ -65,7 +63,7 @@
     blobs::BlobMeta meta;
     EXPECT_TRUE(handler->stat(0, &meta));
     EXPECT_EQ(meta.blobState,
-              blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc);
+              blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::lpc);
     EXPECT_EQ(meta.size, size);
     EXPECT_EQ(meta.metadata.size(), mBytes.size());
     EXPECT_EQ(meta.metadata[0], mBytes[0]);
diff --git a/bmc/test/firmware_stat_unittest.cpp b/bmc/test/firmware_stat_unittest.cpp
index 99ae770..021dca8 100644
--- a/bmc/test/firmware_stat_unittest.cpp
+++ b/bmc/test/firmware_stat_unittest.cpp
@@ -1,4 +1,5 @@
 #include "firmware_handler.hpp"
+#include "flags.hpp"
 #include "image_mock.hpp"
 #include "triggerable_mock.hpp"
 #include "util.hpp"
@@ -25,7 +26,7 @@
         {"asdf", &imageMock},
     };
     std::vector<DataHandlerPack> data = {
-        {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
+        {FirmwareFlags::UpdateFlags::ipmi, nullptr},
     };
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
@@ -34,7 +35,7 @@
 
     blobs::BlobMeta meta;
     EXPECT_TRUE(handler->stat("asdf", &meta));
-    EXPECT_EQ(FirmwareBlobHandler::UpdateFlags::ipmi, meta.blobState);
+    EXPECT_EQ(FirmwareFlags::UpdateFlags::ipmi, meta.blobState);
 }
 
 } // namespace ipmi_flash
diff --git a/bmc/test/firmware_state_notyetstarted_tarball_unittest.cpp b/bmc/test/firmware_state_notyetstarted_tarball_unittest.cpp
index 275763c..bdf6046 100644
--- a/bmc/test/firmware_state_notyetstarted_tarball_unittest.cpp
+++ b/bmc/test/firmware_state_notyetstarted_tarball_unittest.cpp
@@ -56,14 +56,14 @@
     ImageHandlerMock imageMock;
     std::vector<HandlerPack> blobs;
     std::vector<DataHandlerPack> data = {
-        {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}};
+        {FirmwareFlags::UpdateFlags::ipmi, nullptr}};
     std::unique_ptr<blobs::GenericBlobInterface> handler;
     TriggerMock* verifyMockPtr;
     TriggerMock* updateMockPtr;
 
     std::uint16_t session = 1;
     std::uint16_t flags =
-        blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi;
+        blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi;
 };
 
 TEST_F(FirmwareHandlerNotYetStartedUbitTest,
diff --git a/bmc/test/firmware_state_notyetstarted_unittest.cpp b/bmc/test/firmware_state_notyetstarted_unittest.cpp
index 54ab7f8..8681064 100644
--- a/bmc/test/firmware_state_notyetstarted_unittest.cpp
+++ b/bmc/test/firmware_state_notyetstarted_unittest.cpp
@@ -76,7 +76,7 @@
      * transported supported.
      */
     blobs::BlobMeta expected;
-    expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi;
+    expected.blobState = FirmwareFlags::UpdateFlags::ipmi;
     expected.size = 0;
 
     auto blobs = handler->getBlobIds();
diff --git a/bmc/test/firmware_state_updatecompleted_unittest.cpp b/bmc/test/firmware_state_updatecompleted_unittest.cpp
index 9e43edb..fd7f583 100644
--- a/bmc/test/firmware_state_updatecompleted_unittest.cpp
+++ b/bmc/test/firmware_state_updatecompleted_unittest.cpp
@@ -123,7 +123,7 @@
     getToUpdateCompleted(ActionStatus::success);
 
     blobs::BlobMeta expected;
-    expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi;
+    expected.blobState = FirmwareFlags::UpdateFlags::ipmi;
     expected.size = 0;
 
     std::vector<std::string> testBlobs = {staticLayoutBlobId, hashBlobId};
diff --git a/bmc/test/firmware_state_updatepending_unittest.cpp b/bmc/test/firmware_state_updatepending_unittest.cpp
index d09c820..6f5162f 100644
--- a/bmc/test/firmware_state_updatepending_unittest.cpp
+++ b/bmc/test/firmware_state_updatepending_unittest.cpp
@@ -164,7 +164,7 @@
     getToUpdatePending();
 
     blobs::BlobMeta expected;
-    expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi;
+    expected.blobState = FirmwareFlags::UpdateFlags::ipmi;
     expected.size = 0;
 
     for (const auto& blob : startingBlobs)
diff --git a/bmc/test/firmware_state_updatestarted_unittest.cpp b/bmc/test/firmware_state_updatestarted_unittest.cpp
index 237e0e9..2e4f020 100644
--- a/bmc/test/firmware_state_updatestarted_unittest.cpp
+++ b/bmc/test/firmware_state_updatestarted_unittest.cpp
@@ -114,7 +114,7 @@
     getToUpdateStarted();
 
     blobs::BlobMeta expected;
-    expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi;
+    expected.blobState = FirmwareFlags::UpdateFlags::ipmi;
     expected.size = 0;
 
     std::vector<std::string> testBlobs = {staticLayoutBlobId, hashBlobId};
diff --git a/bmc/test/firmware_state_uploadinprogress_unittest.cpp b/bmc/test/firmware_state_uploadinprogress_unittest.cpp
index 005ca3f..be3269e 100644
--- a/bmc/test/firmware_state_uploadinprogress_unittest.cpp
+++ b/bmc/test/firmware_state_uploadinprogress_unittest.cpp
@@ -96,7 +96,7 @@
      * return the same information as in the notYetStarted state.
      */
     blobs::BlobMeta expected;
-    expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi;
+    expected.blobState = FirmwareFlags::UpdateFlags::ipmi;
     expected.size = 0;
 
     openToInProgress(staticLayoutBlobId);
@@ -126,7 +126,7 @@
     blobs::BlobMeta meta, expectedMeta = {};
     expectedMeta.size = 32;
     expectedMeta.blobState =
-        blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi;
+        blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi;
     EXPECT_TRUE(handler->stat(session, &meta));
     EXPECT_EQ(expectedMeta, meta);
 }
diff --git a/bmc/test/firmware_state_verificationcompleted_unittest.cpp b/bmc/test/firmware_state_verificationcompleted_unittest.cpp
index 8754e15..85f1895 100644
--- a/bmc/test/firmware_state_verificationcompleted_unittest.cpp
+++ b/bmc/test/firmware_state_verificationcompleted_unittest.cpp
@@ -142,7 +142,7 @@
     getToVerificationCompleted(ActionStatus::success);
 
     blobs::BlobMeta expected;
-    expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi;
+    expected.blobState = FirmwareFlags::UpdateFlags::ipmi;
     expected.size = 0;
 
     std::vector<std::string> testBlobs = {staticLayoutBlobId, hashBlobId};
diff --git a/bmc/test/firmware_state_verificationpending_unittest.cpp b/bmc/test/firmware_state_verificationpending_unittest.cpp
index dd2df27..fbcd73d 100644
--- a/bmc/test/firmware_state_verificationpending_unittest.cpp
+++ b/bmc/test/firmware_state_verificationpending_unittest.cpp
@@ -165,7 +165,7 @@
     getToVerificationPending(staticLayoutBlobId);
 
     blobs::BlobMeta expected;
-    expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi;
+    expected.blobState = FirmwareFlags::UpdateFlags::ipmi;
     expected.size = 0;
 
     std::vector<std::string> testBlobs = {staticLayoutBlobId, hashBlobId};
diff --git a/bmc/test/firmware_state_verificationstarted_unittest.cpp b/bmc/test/firmware_state_verificationstarted_unittest.cpp
index 74e24b2..b183db0 100644
--- a/bmc/test/firmware_state_verificationstarted_unittest.cpp
+++ b/bmc/test/firmware_state_verificationstarted_unittest.cpp
@@ -195,7 +195,7 @@
     getToVerificationStarted(staticLayoutBlobId);
 
     blobs::BlobMeta expected;
-    expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi;
+    expected.blobState = FirmwareFlags::UpdateFlags::ipmi;
     expected.size = 0;
 
     std::vector<std::string> testBlobs = {staticLayoutBlobId, hashBlobId};
diff --git a/bmc/test/firmware_unittest.hpp b/bmc/test/firmware_unittest.hpp
index 8d92fe8..6b97289 100644
--- a/bmc/test/firmware_unittest.hpp
+++ b/bmc/test/firmware_unittest.hpp
@@ -2,6 +2,7 @@
 
 #include "data_mock.hpp"
 #include "firmware_handler.hpp"
+#include "flags.hpp"
 #include "image_mock.hpp"
 #include "triggerable_mock.hpp"
 
@@ -121,7 +122,7 @@
     ImageHandlerMock imageMock;
     std::vector<HandlerPack> blobs;
     std::vector<DataHandlerPack> data = {
-        {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}};
+        {FirmwareFlags::UpdateFlags::ipmi, nullptr}};
     std::unique_ptr<blobs::GenericBlobInterface> handler;
     TriggerMock* prepareMockPtr;
     TriggerMock* verifyMockPtr;
@@ -129,7 +130,7 @@
 
     std::uint16_t session = 1;
     std::uint16_t flags =
-        blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi;
+        blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi;
 
     std::vector<std::string> startingBlobs = {staticLayoutBlobId, hashBlobId};
 };
@@ -140,7 +141,7 @@
     ImageHandlerMock imageMock;
     std::vector<HandlerPack> blobs;
     std::vector<DataHandlerPack> data = {
-        {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}};
+        {FirmwareFlags::UpdateFlags::ipmi, nullptr}};
     std::unique_ptr<blobs::GenericBlobInterface> handler;
 
     void SetUp() override
@@ -171,8 +172,8 @@
             {"asdf", &imageMock},
         };
         data = {
-            {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
-            {FirmwareBlobHandler::UpdateFlags::lpc, &dataMock},
+            {FirmwareFlags::UpdateFlags::ipmi, nullptr},
+            {FirmwareFlags::UpdateFlags::lpc, &dataMock},
         };
         handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
             blobs, data, CreateTriggerMock(), CreateTriggerMock(),
diff --git a/bmc/test/firmware_write_unittest.cpp b/bmc/test/firmware_write_unittest.cpp
index d74f3c8..b3353c9 100644
--- a/bmc/test/firmware_write_unittest.cpp
+++ b/bmc/test/firmware_write_unittest.cpp
@@ -1,3 +1,4 @@
+#include "data.hpp"
 #include "data_mock.hpp"
 #include "firmware_handler.hpp"
 #include "firmware_unittest.hpp"
@@ -30,8 +31,7 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
-        "asdf"));
+        0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi, "asdf"));
 
     std::vector<std::uint8_t> bytes = {0xaa, 0x55};
 
@@ -46,8 +46,7 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
-        "asdf"));
+        0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::lpc, "asdf"));
 
     struct ExtChunkHdr request;
     request.length = 4; /* number of bytes to read. */
@@ -70,8 +69,7 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
-        "asdf"));
+        0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::lpc, "asdf"));
 
     struct ExtChunkHdr request;
     request.length = 4; /* number of bytes to read. */
diff --git a/bmc/test/firmware_writemeta_unittest.cpp b/bmc/test/firmware_writemeta_unittest.cpp
index 491d669..cb1c965 100644
--- a/bmc/test/firmware_writemeta_unittest.cpp
+++ b/bmc/test/firmware_writemeta_unittest.cpp
@@ -24,8 +24,7 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
-        "asdf"));
+        0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi, "asdf"));
 
     std::vector<std::uint8_t> bytes = {0xaa, 0x55};
 
@@ -38,8 +37,7 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
-        "asdf"));
+        0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::lpc, "asdf"));
 
     std::vector<std::uint8_t> bytes = {0x01, 0x02, 0x03, 0x04};
 
diff --git a/configure.ac b/configure.ac
index 929413a..756c89b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -64,6 +64,12 @@
     )
 
     PKG_CHECK_MODULES([PHOSPHOR_LOGGING], [phosphor-logging])
+
+    AC_CHECK_HEADER(
+        [blobs-ipmid/blobs.hpp],
+        [],
+        [AC_MSG_ERROR(["phosphor-ipmi-blobs required and not found."])]
+    )
 ])
 
 # These packages are required for both the BMC and the host-tool.
@@ -81,11 +87,6 @@
     [],
     [AC_MSG_ERROR([Could not find libpci... pciutils package required])]
 )
-AC_CHECK_HEADER(
-    [blobs-ipmid/blobs.hpp],
-    [],
-    [AC_MSG_ERROR(["phosphor-ipmi-blobs required and not found."])]
-)
 AX_PTHREAD([], [AC_MSG_ERROR(["pthread required and not found"])])
 
 # Configurability
diff --git a/data.hpp b/data.hpp
new file mode 100644
index 0000000..6ef8911
--- /dev/null
+++ b/data.hpp
@@ -0,0 +1,19 @@
+#pragma once
+
+#include <cstdint>
+
+namespace ipmi_flash
+{
+
+struct ExtChunkHdr
+{
+    std::uint32_t length; /* Length of the data queued (little endian). */
+} __attribute__((packed));
+
+/** P2A configuration response. */
+struct PciConfigResponse
+{
+    std::uint32_t address;
+} __attribute__((packed));
+
+} // namespace ipmi_flash
diff --git a/flags.hpp b/flags.hpp
new file mode 100644
index 0000000..d7c89d5
--- /dev/null
+++ b/flags.hpp
@@ -0,0 +1,21 @@
+#pragma once
+
+#include <cstdint>
+
+namespace ipmi_flash
+{
+
+class FirmwareFlags
+{
+  public:
+    enum UpdateFlags : std::uint16_t
+    {
+        openRead = (1 << 0),  /* Flag for reading. */
+        openWrite = (1 << 1), /* Flag for writing. */
+        ipmi = (1 << 8), /* Expect to send contents over IPMI BlockTransfer. */
+        p2a = (1 << 9),  /* Expect to send contents over P2A bridge. */
+        lpc = (1 << 10), /* Expect to send contents over LPC bridge. */
+    };
+};
+
+} // namespace ipmi_flash
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 96f8a7e..e54b301 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -4,14 +4,12 @@
 burn_my_bmc_LDADD = libupdater.la $(CODE_COVERAGE_LIBS)
 burn_my_bmc_CXXFLAGS = \
 	-I$(top_srcdir) \
-	-I$(top_srcdir)/bmc/ \
 	$(CODE_COVERAGE_CXXFLAGS)
 
 noinst_LTLIBRARIES = libupdater.la
 libupdater_la_LDFLAGS = -static $(CODE_COVERAGE_LIBS) $(IPMIBLOB_LIBS) $(PCILIB_LIBS)
 libupdater_la_CXXFLAGS = \
 	-I$(top_srcdir) \
-	-I$(top_srcdir)/bmc/ \
 	$(CODE_COVERAGE_CXXFLAGS) \
 	$(IPMIBLOB_CFLAGS) \
 	$(PCILIB_CFLAGS)
diff --git a/tools/bt.hpp b/tools/bt.hpp
index 9caac5d..729f74d 100644
--- a/tools/bt.hpp
+++ b/tools/bt.hpp
@@ -17,9 +17,9 @@
         sys(sys){};
 
     bool sendContents(const std::string& input, std::uint16_t session) override;
-    ipmi_flash::FirmwareBlobHandler::UpdateFlags supportedType() const override
+    ipmi_flash::FirmwareFlags::UpdateFlags supportedType() const override
     {
-        return ipmi_flash::FirmwareBlobHandler::UpdateFlags::ipmi;
+        return ipmi_flash::FirmwareFlags::UpdateFlags::ipmi;
     }
 
   private:
diff --git a/tools/handler.cpp b/tools/handler.cpp
index 147a457..65596f5 100644
--- a/tools/handler.cpp
+++ b/tools/handler.cpp
@@ -16,13 +16,13 @@
 
 #include "handler.hpp"
 
+#include "flags.hpp"
 #include "helper.hpp"
 #include "status.hpp"
 #include "tool_errors.hpp"
 #include "util.hpp"
 
 #include <algorithm>
-#include <blobs-ipmid/blobs.hpp>
 #include <cstdint>
 #include <cstring>
 #include <ipmiblob/blob_errors.hpp>
@@ -85,7 +85,8 @@
     {
         session = blob->openBlob(
             target, static_cast<std::uint16_t>(supported) |
-                        static_cast<std::uint16_t>(blobs::OpenFlags::write));
+                        static_cast<std::uint16_t>(
+                            ipmi_flash::FirmwareFlags::UpdateFlags::openWrite));
     }
     catch (const ipmiblob::BlobException& b)
     {
@@ -113,7 +114,8 @@
     try
     {
         session = blob->openBlob(
-            target, static_cast<std::uint16_t>(blobs::OpenFlags::write));
+            target, static_cast<std::uint16_t>(
+                        ipmi_flash::FirmwareFlags::UpdateFlags::openWrite));
     }
     catch (const ipmiblob::BlobException& b)
     {
@@ -162,9 +164,10 @@
     try
     {
         std::fprintf(stderr, "Opening the cleanup blob\n");
-        session =
-            blob->openBlob(ipmi_flash::cleanupBlobId,
-                           static_cast<std::uint16_t>(blobs::OpenFlags::write));
+        session = blob->openBlob(
+            ipmi_flash::cleanupBlobId,
+            static_cast<std::uint16_t>(
+                ipmi_flash::FirmwareFlags::UpdateFlags::openWrite));
     }
     catch (...)
     {
diff --git a/tools/interface.hpp b/tools/interface.hpp
index ae341ec..2c993bf 100644
--- a/tools/interface.hpp
+++ b/tools/interface.hpp
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "firmware_handler.hpp"
+#include "flags.hpp"
 
 #include <cstdint>
 #include <string>
@@ -30,8 +30,7 @@
      *
      * @return the enum value corresponding to the supported type.
      */
-    virtual ipmi_flash::FirmwareBlobHandler::UpdateFlags
-        supportedType() const = 0;
+    virtual ipmi_flash::FirmwareFlags::UpdateFlags supportedType() const = 0;
 };
 
 } // namespace host_tool
diff --git a/tools/lpc.cpp b/tools/lpc.cpp
index 9359b92..7dbfaf3 100644
--- a/tools/lpc.cpp
+++ b/tools/lpc.cpp
@@ -16,9 +16,14 @@
 
 #include "lpc.hpp"
 
+#include "data.hpp"
+
 #include <cerrno>
+#include <cstdint>
 #include <cstring>
 #include <ipmiblob/blob_errors.hpp>
+#include <memory>
+#include <string>
 
 namespace host_tool
 {
diff --git a/tools/lpc.hpp b/tools/lpc.hpp
index 32e1d8c..2c3a723 100644
--- a/tools/lpc.hpp
+++ b/tools/lpc.hpp
@@ -28,9 +28,9 @@
         io(io), address(address), length(length), sys(sys){};
 
     bool sendContents(const std::string& input, std::uint16_t session) override;
-    ipmi_flash::FirmwareBlobHandler::UpdateFlags supportedType() const override
+    ipmi_flash::FirmwareFlags::UpdateFlags supportedType() const override
     {
-        return ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc;
+        return ipmi_flash::FirmwareFlags::UpdateFlags::lpc;
     }
 
   private:
diff --git a/tools/p2a.cpp b/tools/p2a.cpp
index 9e246ae..66fc62e 100644
--- a/tools/p2a.cpp
+++ b/tools/p2a.cpp
@@ -16,12 +16,15 @@
 
 #include "p2a.hpp"
 
-#include "firmware_handler.hpp"
+#include "data.hpp"
+#include "flags.hpp"
 #include "pci.hpp"
-#include "pci_handler.hpp"
 
+#include <cstdint>
 #include <cstring>
 #include <ipmiblob/blob_errors.hpp>
+#include <memory>
+#include <string>
 
 namespace host_tool
 {
diff --git a/tools/p2a.hpp b/tools/p2a.hpp
index 920422f..c84f12d 100644
--- a/tools/p2a.hpp
+++ b/tools/p2a.hpp
@@ -30,9 +30,9 @@
     }
 
     bool sendContents(const std::string& input, std::uint16_t session) override;
-    ipmi_flash::FirmwareBlobHandler::UpdateFlags supportedType() const override
+    ipmi_flash::FirmwareFlags::UpdateFlags supportedType() const override
     {
-        return ipmi_flash::FirmwareBlobHandler::UpdateFlags::p2a;
+        return ipmi_flash::FirmwareFlags::UpdateFlags::p2a;
     }
 
   private:
diff --git a/tools/test/Makefile.am b/tools/test/Makefile.am
index a0e2912..c05654b 100644
--- a/tools/test/Makefile.am
+++ b/tools/test/Makefile.am
@@ -3,7 +3,6 @@
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/ \
 	-I$(top_srcdir)/tools/ \
-	-I$(top_srcdir)/bmc \
 	$(GTEST_CFLAGS) \
 	$(GMOCK_CFLAGS) \
 	$(CODE_COVERAGE_CPPFLAGS)
diff --git a/tools/test/data_interface_mock.hpp b/tools/test/data_interface_mock.hpp
index 3189e5b..0ee799b 100644
--- a/tools/test/data_interface_mock.hpp
+++ b/tools/test/data_interface_mock.hpp
@@ -14,8 +14,7 @@
     virtual ~DataInterfaceMock() = default;
 
     MOCK_METHOD2(sendContents, bool(const std::string&, std::uint16_t));
-    MOCK_CONST_METHOD0(supportedType,
-                       ipmi_flash::FirmwareBlobHandler::UpdateFlags());
+    MOCK_CONST_METHOD0(supportedType, ipmi_flash::FirmwareFlags::UpdateFlags());
 };
 
 } // namespace host_tool
diff --git a/tools/test/tools_updater_unittest.cpp b/tools/test/tools_updater_unittest.cpp
index 85f86bc..0c9e6b5 100644
--- a/tools/test/tools_updater_unittest.cpp
+++ b/tools/test/tools_updater_unittest.cpp
@@ -1,11 +1,11 @@
 #include "data_interface_mock.hpp"
+#include "flags.hpp"
 #include "status.hpp"
 #include "tool_errors.hpp"
 #include "updater.hpp"
 #include "updater_mock.hpp"
 #include "util.hpp"
 
-#include <blobs-ipmid/blobs.hpp>
 #include <ipmiblob/test/blob_interface_mock.hpp>
 #include <string>
 
@@ -32,8 +32,8 @@
 TEST_F(UpdateHandlerTest, CheckAvailableSuccess)
 {
     ipmiblob::StatResponse statObj = {};
-    statObj.blob_state = ipmi_flash::FirmwareBlobHandler::UpdateFlags::ipmi |
-                         ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc;
+    statObj.blob_state = ipmi_flash::FirmwareFlags::UpdateFlags::ipmi |
+                         ipmi_flash::FirmwareFlags::UpdateFlags::lpc;
 
     EXPECT_CALL(blobMock, getBlobList())
         .WillOnce(
@@ -43,7 +43,7 @@
         .WillOnce(Return(statObj));
 
     EXPECT_CALL(handlerMock, supportedType())
-        .WillOnce(Return(ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc));
+        .WillOnce(Return(ipmi_flash::FirmwareFlags::UpdateFlags::lpc));
 
     EXPECT_TRUE(updater.checkAvailable(ipmi_flash::staticLayoutBlobId));
 }
@@ -55,11 +55,12 @@
 
     std::uint16_t supported =
         static_cast<std::uint16_t>(
-            ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc) |
-        static_cast<std::uint16_t>(blobs::OpenFlags::write);
+            ipmi_flash::FirmwareFlags::UpdateFlags::lpc) |
+        static_cast<std::uint16_t>(
+            ipmi_flash::FirmwareFlags::UpdateFlags::openWrite);
 
     EXPECT_CALL(handlerMock, supportedType())
-        .WillOnce(Return(ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc));
+        .WillOnce(Return(ipmi_flash::FirmwareFlags::UpdateFlags::lpc));
 
     EXPECT_CALL(blobMock, openBlob(ipmi_flash::staticLayoutBlobId, supported))
         .WillOnce(Return(session));
diff --git a/tools/updater.cpp b/tools/updater.cpp
index 438fc4a..4d150db 100644
--- a/tools/updater.cpp
+++ b/tools/updater.cpp
@@ -16,14 +16,13 @@
 
 #include "updater.hpp"
 
-#include "firmware_handler.hpp"
+#include "flags.hpp"
 #include "handler.hpp"
 #include "status.hpp"
 #include "tool_errors.hpp"
 #include "util.hpp"
 
 #include <algorithm>
-#include <blobs-ipmid/blobs.hpp>
 #include <cstring>
 #include <ipmiblob/blob_errors.hpp>
 #include <memory>
