pcie_bifurcation: Fetch bifurcation at a PCIe slot with hardcoded values
This will read a json config and return the bifurcation based on that.
It will read the configure file in a persistent file to see if it is
valid machine config and return the bifurcation information
accordingly.
For example,
If it is valid config, it will return 8x8 for PE1,3,4,6.
Tested:
Unit tests passed.
Physical Tests.
PE0 -> no bifurcation
PE1 -> x8x8
```
$ ipmitool raw 0x2e 0x32 0x79 0x2b 0x00 0x0f 0
79 2b 00 0b 00
$ ipmitool raw 0x2e 0x32 0x79 0x2b 0x00 0x0f 1
79 2b 00 0b 02 08 08
```
Change-Id: I44aefbfb26372f8bc0069343c8a6d07d3cf6f42d
Signed-off-by: Willy Tu <wltu@google.com>
diff --git a/handler_impl.hpp b/handler_impl.hpp
index f46e79c..4a3f5dc 100644
--- a/handler_impl.hpp
+++ b/handler_impl.hpp
@@ -14,6 +14,7 @@
#pragma once
+#include "bifurcation.hpp"
#include "handler.hpp"
#include <cstdint>
@@ -37,7 +38,12 @@
{
public:
explicit Handler(const std::string& entityConfigPath = defaultConfigFile) :
- _configFile(entityConfigPath){};
+ _configFile(entityConfigPath),
+ bifurcationHelper(BifurcationStatic::createBifurcation()){};
+ Handler(std::reference_wrapper<BifurcationInterface> bifurcationHelper,
+ const std::string& entityConfigPath = defaultConfigFile) :
+ _configFile(entityConfigPath),
+ bifurcationHelper(bifurcationHelper){};
~Handler() = default;
std::tuple<std::uint8_t, std::string>
@@ -54,6 +60,7 @@
void hostPowerOffDelay(std::uint32_t delay) const override;
std::tuple<std::uint32_t, std::string>
getI2cEntry(unsigned int entry) const override;
+ std::vector<uint8_t> pcieBifurcation(uint8_t) override;
uint32_t accelOobDeviceCount() const override;
std::string accelOobDeviceName(size_t index) const override;
@@ -89,6 +96,8 @@
nlohmann::json _entityConfig{};
std::vector<std::tuple<uint32_t, std::string>> _pcie_i2c_map;
+
+ std::reference_wrapper<BifurcationInterface> bifurcationHelper;
};
/**