[igt-dev] [PATCH i-g-t 1/8] lib/igt_hwmon: Introduce library igt_hwmon
Petri Latvala
petri.latvala at intel.com
Fri Oct 14 07:23:51 UTC 2022
On Thu, Oct 13, 2022 at 08:13:53AM -0700, Ashutosh Dixit wrote:
> From: Riana Tauro <riana.tauro at intel.com>
>
> 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>
> Reviewed-by: Ashutosh Dixit <ashutosh.dixit 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 0000000000..1e4dab1bb2
> --- /dev/null
> +++ b/lib/igt_hwmon.c
> @@ -0,0 +1,73 @@
> +/*
> + * Copyright © 2022 Intel Corporation
> + */
License is missing.
--
Petri Latvala
> +#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 0000000000..aa418fdcb0
> --- /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 c665bd2507..b1b8e80cbf 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.38.0
>
More information about the igt-dev
mailing list