p2a: add initial p2a support (empty)
Add initial pci-to-ahb host-side support, by just listing the aspeed pci
devices.
Tested: This dumped the aspeed PCI device listed on my test platform.
Change-Id: I6dc4aeb3b38ec2f95bfd716bda2d8eb4786328ab
Signed-off-by: Patrick Venture <venture@google.com>
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