geopm 3.2.1.dev270+g28d5c27cd
GEOPM - Global Extensible Open Power Manager
Loading...
Searching...
No Matches
DrmSysfsDriver.hpp
Go to the documentation of this file.
1/*
2 * Copyright (c) 2015 - 2025 Intel Corporation
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5
6#ifndef DRMSYSFSDRIVER_HPP_INCLUDE
7#define DRMSYSFSDRIVER_HPP_INCLUDE
8
9#include <map>
10#include <vector>
11
12#include "geopm_topo.h"
13
14#include "DrmGpuTopo.hpp"
15#include "SysfsDriver.hpp"
16
17namespace geopm
18{
19 class IOGroup;
20 class PlatformTopo;
21
24 {
25 public:
26 DrmSysfsDriver() = delete;
27 DrmSysfsDriver(const std::string &drm_directory,
28 const std::string &driver_signal_prefix);
29 virtual ~DrmSysfsDriver() = default;
30 int domain_type(const std::string &name) const override;
31 std::string attribute_path(const std::string &name,
32 int domain_idx) override;
33 std::function<double(const std::string&)> signal_parse(const std::string &signal_name) const override;
34 std::function<std::string(double)> control_gen(const std::string &control_name) const override;
35 std::string driver(void) const override;
36 std::map<std::string, SysfsDriver::properties_s> properties(void) const override;
37 std::map<std::string, SysfsDriver::derived_signal_info_s> derived_signals(void) const override;
38
39 static std::string plugin_name_drm(void);
40 static std::unique_ptr<IOGroup> make_plugin_drm(void);
41
42 static std::string plugin_name_accel(void);
43 static std::unique_ptr<IOGroup> make_plugin_accel(void);
44 private:
45 void register_power_signals(void);
46 void register_derived_signal_alias(const std::string &alias_name,
47 const std::string &signal_name);
48 std::string lookup_source_signal(const std::string &name) const;
49 DrmGpuTopo m_drm_topo;
50 // Prefix to use at the start of signal names exported by this SysfsDriver
51 // E.g., "DRM" or "ACCEL"
52 const std::string M_DRIVER_SIGNAL_PREFIX;
53 // Map of signal names to sysfs signal properties
54 const std::map<std::string, SysfsDriver::properties_s> M_PROPERTIES;
55 // Map of (GEOPM signal domain, GEOPM signal index) pairs to hwmon sysfs directory paths symlinked via drm paths
56 const std::map<std::pair<geopm_domain_e, int>, std::string> M_DRM_HWMON_DIR_BY_GEOPM_DOMAIN;
57 std::map<std::string, SysfsDriver::derived_signal_info_s> m_power_signal_derivative_map;
58 };
59}
60
61#endif
Definition DrmGpuTopo.hpp:18
Class used to implement the DrmSysfsDriverGroup.
Definition DrmSysfsDriver.hpp:24
std::function< double(const std::string &)> signal_parse(const std::string &signal_name) const override
Get function to convert contents of sysfs file into signal.
Definition DrmSysfsDriver.cpp:242
static std::unique_ptr< IOGroup > make_plugin_drm(void)
Definition DrmSysfsDriver.cpp:297
static std::unique_ptr< IOGroup > make_plugin_accel(void)
Definition DrmSysfsDriver.cpp:307
std::string attribute_path(const std::string &name, int domain_idx) override
Get the path to the sysfs entry for signal.
Definition DrmSysfsDriver.cpp:211
static std::string plugin_name_accel(void)
Definition DrmSysfsDriver.cpp:302
std::map< std::string, SysfsDriver::derived_signal_info_s > derived_signals(void) const override
Query mapping of derived signal aliases to their metadata and sources.
Definition DrmSysfsDriver.cpp:287
std::function< std::string(double)> control_gen(const std::string &control_name) const override
Get a function to convert a control into a sysfs string.
Definition DrmSysfsDriver.cpp:264
int domain_type(const std::string &name) const override
Get the PlatformTopo domain type for an named attribute.
Definition DrmSysfsDriver.cpp:199
virtual ~DrmSysfsDriver()=default
std::string driver(void) const override
Definition DrmSysfsDriver.cpp:277
std::map< std::string, SysfsDriver::properties_s > properties(void) const override
Query the meta data about a signal or control.
Definition DrmSysfsDriver.cpp:282
static std::string plugin_name_drm(void)
Definition DrmSysfsDriver.cpp:292
Class used to implement the SysfsIOGroup base class.
Definition SysfsDriver.hpp:23
Definition Agg.cpp:20