Make device array constexpr
This map will consume memory the whole time the application runs,
despite not being needed for anything but a lookup at startup. Move to
a constexpr array and std::find_if so that this struct will always be
const.
Tested: EM boots and detects devices.
Change-Id: Iae95884a8076d991d0d2696dd0c03113ed49a92f
Signed-off-by: Ed Tanous <ed@tanous.net>
diff --git a/src/entity_manager/devices.hpp b/src/entity_manager/devices.hpp
index ed0f8dc..6437e32 100644
--- a/src/entity_manager/devices.hpp
+++ b/src/entity_manager/devices.hpp
@@ -2,7 +2,7 @@
// SPDX-FileCopyrightText: Copyright 2018 Intel Corporation
#pragma once
-#include <flat_map>
+#include <array>
namespace devices
{
@@ -31,165 +31,89 @@
struct ExportTemplate
{
- ExportTemplate(const char* params, const char* bus, const char* constructor,
- const char* destructor, createsHWMon hasHWMonDir) :
- parameters(params), busPath(bus), add(constructor), remove(destructor),
- hasHWMonDir(hasHWMonDir) {};
- const char* parameters;
- const char* busPath;
- const char* add;
- const char* remove;
+ std::string_view type;
+ std::string_view parameters;
+ std::string_view busPath;
+ std::string_view add;
+ std::string_view remove;
createsHWMon hasHWMonDir;
};
-const std::flat_map<std::string_view, ExportTemplate, std::less<>>
- exportTemplates{
- {{"EEPROM_24C01",
- ExportTemplate("24c01 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"EEPROM_24C02",
- ExportTemplate("24c02 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"EEPROM_24C04",
- ExportTemplate("24c04 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"EEPROM_24C08",
- ExportTemplate("24c08 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"EEPROM_24C16",
- ExportTemplate("24c16 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"EEPROM_24C32",
- ExportTemplate("24c32 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"EEPROM_24C64",
- ExportTemplate("24c64 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"EEPROM_24C128",
- ExportTemplate("24c128 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"EEPROM_24C256",
- ExportTemplate("24c256 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"ADS1015",
- ExportTemplate("ads1015 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"ADS7828",
- ExportTemplate("ads7828 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"EEPROM",
- ExportTemplate("eeprom $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"Gpio", ExportTemplate("$Index", "/sys/class/gpio", "export",
- "unexport", createsHWMon::noHWMonDir)},
- {"IPSPS1",
- ExportTemplate("ipsps1 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::hasHWMonDir)},
- {"MAX34440",
- ExportTemplate("max34440 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::hasHWMonDir)},
- {"PCA9537",
- ExportTemplate("pca9537 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"PCA9542Mux",
- ExportTemplate("pca9542 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"PCA9543Mux",
- ExportTemplate("pca9543 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"PCA9544Mux",
- ExportTemplate("pca9544 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"PCA9545Mux",
- ExportTemplate("pca9545 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"PCA9546Mux",
- ExportTemplate("pca9546 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"PCA9547Mux",
- ExportTemplate("pca9547 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"PCA9548Mux",
- ExportTemplate("pca9548 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"PCA9846Mux",
- ExportTemplate("pca9846 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"PCA9847Mux",
- ExportTemplate("pca9847 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"PCA9848Mux",
- ExportTemplate("pca9848 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"PCA9849Mux",
- ExportTemplate("pca9849 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"SIC450",
- ExportTemplate("sic450 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::hasHWMonDir)},
- {"Q50SN12072",
- ExportTemplate("q50sn12072 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::hasHWMonDir)},
- {"MAX31790",
- ExportTemplate("max31790 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::hasHWMonDir)},
- {"PIC32", ExportTemplate("pic32 $Address",
- "/sys/bus/i2c/devices/i2c-$Bus", "new_device",
- "delete_device", createsHWMon::hasHWMonDir)},
- {"INA226",
- ExportTemplate("ina226 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::hasHWMonDir)},
- {"RAA229620",
- ExportTemplate("raa229620 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::hasHWMonDir)},
- {"RAA229621",
- ExportTemplate("raa229621 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::hasHWMonDir)},
- {"PIC32", ExportTemplate("pic32 $Address",
- "/sys/bus/i2c/devices/i2c-$Bus", "new_device",
- "delete_device", createsHWMon::hasHWMonDir)},
- {"INA233",
- ExportTemplate("ina233 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::hasHWMonDir)},
- {"RTQ6056",
- ExportTemplate("rtq6056 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::noHWMonDir)},
- {"SY24655",
- ExportTemplate("sy24655 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
- "new_device", "delete_device",
- createsHWMon::hasHWMonDir)}}};
+constexpr auto exportTemplates = std::to_array<ExportTemplate>(
+ {{"EEPROM_24C01", "24c01 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"EEPROM_24C02", "24c02 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"EEPROM_24C04", "24c04 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"EEPROM_24C08", "24c08 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"EEPROM_24C16", "24c16 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"EEPROM_24C32", "24c32 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"EEPROM_24C64", "24c64 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"EEPROM_24C128", "24c128 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"EEPROM_24C256", "24c256 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"ADS1015", "ads1015 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"ADS7828", "ads7828 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"EEPROM", "eeprom $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"Gpio", "$Index", "/sys/class/gpio", "export", "unexport",
+ createsHWMon::noHWMonDir},
+ {"IPSPS1", "ipsps1 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::hasHWMonDir},
+ {"MAX34440", "max34440 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::hasHWMonDir},
+ {"PCA9537", "pca9537 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"PCA9542Mux", "pca9542 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"PCA9543Mux", "pca9543 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"PCA9544Mux", "pca9544 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"PCA9545Mux", "pca9545 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"PCA9546Mux", "pca9546 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"PCA9547Mux", "pca9547 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"PCA9548Mux", "pca9548 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"PCA9846Mux", "pca9846 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"PCA9847Mux", "pca9847 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"PCA9848Mux", "pca9848 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"PCA9849Mux", "pca9849 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"SIC450", "sic450 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::hasHWMonDir},
+ {"Q50SN12072", "q50sn12072 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::hasHWMonDir},
+ {"MAX31790", "max31790 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::hasHWMonDir},
+ {"PIC32", "pic32 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device",
+ "delete_device", createsHWMon::hasHWMonDir},
+ {"INA226", "ina226 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::hasHWMonDir},
+ {"RAA229620", "raa229620 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::hasHWMonDir},
+ {"RAA229621", "raa229621 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::hasHWMonDir},
+ {"PIC32", "pic32 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device",
+ "delete_device", createsHWMon::hasHWMonDir},
+ {"INA233", "ina233 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::hasHWMonDir},
+ {"RTQ6056", "rtq6056 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::noHWMonDir},
+ {"SY24655", "sy24655 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
+ "new_device", "delete_device", createsHWMon::hasHWMonDir}});
} // namespace devices