diff --git a/tools/Makefile.am b/tools/Makefile.am
index d86d365..7d07434 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -12,4 +12,6 @@
 	bt.cpp \
 	lpc.cpp \
 	io.cpp \
+	pci.cpp \
+	p2a.cpp \
 	../internal/sys.cpp
diff --git a/tools/main.cpp b/tools/main.cpp
index f676f6a..3b9760c 100644
--- a/tools/main.cpp
+++ b/tools/main.cpp
@@ -17,6 +17,8 @@
 #include "bt.hpp"
 #include "io.hpp"
 #include "lpc.hpp"
+#include "p2a.hpp"
+#include "pci.hpp"
 #include "tool_errors.hpp"
 #include "updater.hpp"
 
@@ -34,11 +36,12 @@
 #include <vector>
 
 #define IPMILPC "ipmilpc"
+#define IPMIPCI "ipmipci"
 #define IPMIBT "ipmibt"
 
 namespace
 {
-const std::vector<std::string> interfaceList = {IPMIBT, IPMILPC};
+const std::vector<std::string> interfaceList = {IPMIBT, IPMILPC, IPMIPCI};
 }
 
 void usage(const char* program)
@@ -140,6 +143,7 @@
         ipmiblob::IpmiHandler ipmi;
         ipmiblob::BlobHandler blob(&ipmi);
         host_tool::DevMemDevice devmem;
+        host_tool::PciUtilImpl pci;
 
         std::unique_ptr<host_tool::DataInterface> handler;
 
@@ -153,6 +157,11 @@
             handler =
                 std::make_unique<host_tool::LpcDataHandler>(&blob, &devmem);
         }
+        else if (interface == IPMIPCI)
+        {
+            handler = std::make_unique<host_tool::P2aDataHandler>(
+                &blob, &devmem, &pci);
+        }
 
         if (!handler)
         {
diff --git a/tools/p2a.cpp b/tools/p2a.cpp
new file mode 100644
index 0000000..6d0ab37
--- /dev/null
+++ b/tools/p2a.cpp
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2019 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "p2a.hpp"
+
+#include "pci.hpp"
+
+namespace host_tool
+{
+
+bool P2aDataHandler::sendContents(const std::string& input,
+                                  std::uint16_t session)
+{
+    PciUtilImpl pci;
+    PciFilter filter;
+
+    filter.vid = aspeedVendorId;
+    filter.did = aspeedDeviceId;
+
+    auto output = pci.getPciDevices(filter);
+    for (const auto& d : output)
+    {
+        std::fprintf(stderr, "0x%x", d.vid);
+    }
+
+    return false;
+}
+
+} // namespace host_tool
diff --git a/tools/p2a.hpp b/tools/p2a.hpp
new file mode 100644
index 0000000..4c02107
--- /dev/null
+++ b/tools/p2a.hpp
@@ -0,0 +1,38 @@
+#pragma once
+
+#include "interface.hpp"
+#include "io.hpp"
+#include "pci.hpp"
+
+#include <cstdint>
+#include <ipmiblob/blob_interface.hpp>
+
+constexpr std::uint16_t aspeedVendorId = 0x1a03;
+constexpr std::uint16_t aspeedDeviceId = 0x2000;
+
+namespace host_tool
+{
+
+class P2aDataHandler : public DataInterface
+{
+  public:
+    P2aDataHandler(ipmiblob::BlobInterface* blob, HostIoInterface* io,
+                   PciUtilInterface* pci) :
+        blob(blob),
+        io(io), pci(pci)
+    {
+    }
+
+    bool sendContents(const std::string& input, std::uint16_t session) override;
+    blobs::FirmwareBlobHandler::UpdateFlags supportedType() const override
+    {
+        return blobs::FirmwareBlobHandler::UpdateFlags::p2a;
+    }
+
+  private:
+    ipmiblob::BlobInterface* blob;
+    HostIoInterface* io;
+    PciUtilInterface* pci;
+};
+
+} // namespace host_tool
diff --git a/tools/pci.cpp b/tools/pci.cpp
new file mode 100644
index 0000000..2f283e6
--- /dev/null
+++ b/tools/pci.cpp
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2019 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "pci.hpp"
+
+extern "C" {
+#include <pci/pci.h>
+} // extern "C"
+
+#include <optional>
+#include <vector>
+
+namespace host_tool
+{
+
+std::vector<PciDevice>
+    PciUtilImpl::getPciDevices(std::optional<PciFilter> filter)
+{
+    PciFilter test;
+    bool check = false;
+    std::vector<PciDevice> results;
+
+    if (filter.has_value())
+    {
+        test = filter.value();
+        check = true;
+    }
+
+    pci_scan_bus(pacc);
+    struct pci_dev* dev;
+
+    for (dev = pacc->devices; dev; dev = dev->next)
+    {
+        PciDevice item;
+
+        pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES | PCI_FILL_CLASS);
+
+        item.bus = dev->bus;
+        item.dev = dev->dev;
+        item.func = dev->func;
+        item.vid = dev->vendor_id;
+        item.did = dev->device_id;
+
+        if (check)
+        {
+            if (test.vid == dev->vendor_id && test.did == dev->device_id)
+            {
+                results.push_back(item);
+            }
+        }
+        else
+        {
+            results.push_back(item);
+        }
+    }
+
+    return results;
+}
+
+} // namespace host_tool
diff --git a/tools/pci.hpp b/tools/pci.hpp
new file mode 100644
index 0000000..96f1ea4
--- /dev/null
+++ b/tools/pci.hpp
@@ -0,0 +1,73 @@
+#pragma once
+
+extern "C" {
+#include <pci/pci.h>
+} // extern "C"
+
+#include <optional>
+#include <vector>
+
+namespace host_tool
+{
+
+/* The ASPEED AST2400 & AST2500 have the same VIDDID. */
+
+/**
+ * The PciDevice structure is a copy of the information to uniquely identify a
+ * PCI device.
+ */
+struct PciDevice
+{
+    int vid;
+    int did;
+    int bus;
+    int dev;
+    int func;
+};
+
+/**
+ * The PciFilter structure is a simple mechanism for filtering devices by their
+ * vendor and/or device ids.
+ */
+struct PciFilter
+{
+    int vid;
+    int did;
+};
+
+class PciUtilInterface
+{
+  public:
+    virtual ~PciUtilInterface() = default;
+
+    /**
+     * Get a list of PCI devices from a system.
+     *
+     * @param[in] filter - optional filter for the list.
+     * @return the list of devices.
+     */
+    virtual std::vector<PciDevice>
+        getPciDevices(std::optional<PciFilter> filter = std::nullopt) = 0;
+};
+
+class PciUtilImpl : public PciUtilInterface
+{
+  public:
+    PciUtilImpl()
+    {
+        pacc = pci_alloc();
+        pci_init(pacc);
+    }
+    ~PciUtilImpl()
+    {
+        pci_cleanup(pacc);
+    }
+
+    std::vector<PciDevice>
+        getPciDevices(std::optional<PciFilter> filter = std::nullopt) override;
+
+  private:
+    struct pci_access* pacc;
+};
+
+} // namespace host_tool
