[igt-dev] [PATCH i-g-t 1/6] lib/igt_hwmon: Introduce library igt_hwmon

Riana Tauro riana.tauro at intel.com
Tue Sep 6 10:38:13 UTC 2022


igt_hwmon exposes methods to open hwmon directories identified by name

Cc: Ashutosh Dixit <ashutosh.dixit at intel.com>
Signed-off-by: Riana Tauro <riana.tauro at intel.com>
---
 lib/igt_hwmon.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_hwmon.h | 12 ++++++++
 lib/meson.build |  1 +
 3 files changed, 86 insertions(+)
 create mode 100644 lib/igt_hwmon.c
 create mode 100644 lib/igt_hwmon.h

diff --git a/lib/igt_hwmon.c b/lib/igt_hwmon.c
new file mode 100644
index 00000000..1e4dab1b
--- /dev/null
+++ b/lib/igt_hwmon.c
@@ -0,0 +1,73 @@
+/*
+ * Copyright © 2022 Intel Corporation
+ */
+#include <sys/stat.h>
+#include <sys/sysmacros.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <unistd.h>
+
+#include "drmtest.h"
+#include "igt_core.h"
+#include "igt_hwmon.h"
+#include "igt_sysfs.h"
+
+static char *igt_hwmon_path(int device, char *path, const char *name)
+{
+	char buf[80];
+	int path_offset;
+	struct dirent *entry;
+	struct stat st;
+	DIR *dir;
+
+	if (igt_debug_on(device < 0))
+		return NULL;
+
+	if (igt_debug_on(fstat(device, &st)) || igt_debug_on(!S_ISCHR(st.st_mode)))
+		return NULL;
+
+	path_offset = snprintf(path, PATH_MAX, "/sys/dev/char/%d:%d/device/hwmon",
+			       major(st.st_rdev), minor(st.st_rdev));
+
+	dir = opendir(path);
+	if (!dir)
+		return NULL;
+
+	while ((entry = readdir(dir))) {
+		if (entry->d_name[0] == '.')
+			continue;
+
+		snprintf(path + path_offset, PATH_MAX - path_offset, "/%s/name", entry->d_name);
+		igt_sysfs_scanf(dirfd(dir), path, "%s", buf);
+
+		if (strncmp(buf, name, strlen(name)) == 0) {
+			snprintf(path + path_offset, PATH_MAX - path_offset, "/%s", entry->d_name);
+			closedir(dir);
+			return path;
+		}
+	}
+
+	closedir(dir);
+	return NULL;
+}
+
+/**
+ * igt_hwmon_open:
+ * @device: fd of the device
+ *
+ * Opens the hwmon directory corresponding to device
+ *
+ * Returns:
+ * The directory fd, or -1 on failure.
+ */
+int igt_hwmon_open(int device)
+{
+	char path[PATH_MAX];
+
+	if (!is_i915_device(device) || !igt_hwmon_path(device, path, "i915"))
+		return -1;
+
+	return open(path, O_RDONLY);
+}
+
diff --git a/lib/igt_hwmon.h b/lib/igt_hwmon.h
new file mode 100644
index 00000000..aa418fdc
--- /dev/null
+++ b/lib/igt_hwmon.h
@@ -0,0 +1,12 @@
+/*
+ * Copyright © 2022 Intel Corporation
+ */
+
+#ifndef IGT_HWMON_H
+#define IGT_HWMON_H
+
+#include <stdbool.h>
+
+int igt_hwmon_open(int device);
+
+#endif /* IGT_HWMON_H */
diff --git a/lib/meson.build b/lib/meson.build
index 548835b5..31894c7e 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -24,6 +24,7 @@ lib_sources = [
 	'igt_aux.c',
 	'igt_gt.c',
 	'igt_halffloat.c',
+	'igt_hwmon.c',
 	'igt_io.c',
 	'igt_matrix.c',
 	'igt_os.c',
-- 
2.25.1



More information about the igt-dev mailing list