18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef __API_FS__
38c2ecf20Sopenharmony_ci#define __API_FS__
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include <stdbool.h>
68c2ecf20Sopenharmony_ci#include <unistd.h>
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci/*
98c2ecf20Sopenharmony_ci * On most systems <limits.h> would have given us this, but  not on some systems
108c2ecf20Sopenharmony_ci * (e.g. GNU/Hurd).
118c2ecf20Sopenharmony_ci */
128c2ecf20Sopenharmony_ci#ifndef PATH_MAX
138c2ecf20Sopenharmony_ci#define PATH_MAX 4096
148c2ecf20Sopenharmony_ci#endif
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci#define FS(name)				\
178c2ecf20Sopenharmony_ci	const char *name##__mountpoint(void);	\
188c2ecf20Sopenharmony_ci	const char *name##__mount(void);	\
198c2ecf20Sopenharmony_ci	bool name##__configured(void);		\
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci/*
228c2ecf20Sopenharmony_ci * The xxxx__mountpoint() entry points find the first match mount point for each
238c2ecf20Sopenharmony_ci * filesystems listed below, where xxxx is the filesystem type.
248c2ecf20Sopenharmony_ci *
258c2ecf20Sopenharmony_ci * The interface is as follows:
268c2ecf20Sopenharmony_ci *
278c2ecf20Sopenharmony_ci * - If a mount point is found on first call, it is cached and used for all
288c2ecf20Sopenharmony_ci *   subsequent calls.
298c2ecf20Sopenharmony_ci *
308c2ecf20Sopenharmony_ci * - If a mount point is not found, NULL is returned on first call and all
318c2ecf20Sopenharmony_ci *   subsequent calls.
328c2ecf20Sopenharmony_ci */
338c2ecf20Sopenharmony_ciFS(sysfs)
348c2ecf20Sopenharmony_ciFS(procfs)
358c2ecf20Sopenharmony_ciFS(debugfs)
368c2ecf20Sopenharmony_ciFS(tracefs)
378c2ecf20Sopenharmony_ciFS(hugetlbfs)
388c2ecf20Sopenharmony_ciFS(bpf_fs)
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci#undef FS
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ciint cgroupfs_find_mountpoint(char *buf, size_t maxlen, const char *subsys);
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ciint filename__read_int(const char *filename, int *value);
468c2ecf20Sopenharmony_ciint filename__read_ull(const char *filename, unsigned long long *value);
478c2ecf20Sopenharmony_ciint filename__read_xll(const char *filename, unsigned long long *value);
488c2ecf20Sopenharmony_ciint filename__read_str(const char *filename, char **buf, size_t *sizep);
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ciint filename__write_int(const char *filename, int value);
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ciint procfs__read_str(const char *entry, char **buf, size_t *sizep);
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ciint sysctl__read_int(const char *sysctl, int *value);
558c2ecf20Sopenharmony_ciint sysfs__read_int(const char *entry, int *value);
568c2ecf20Sopenharmony_ciint sysfs__read_ull(const char *entry, unsigned long long *value);
578c2ecf20Sopenharmony_ciint sysfs__read_xll(const char *entry, unsigned long long *value);
588c2ecf20Sopenharmony_ciint sysfs__read_str(const char *entry, char **buf, size_t *sizep);
598c2ecf20Sopenharmony_ciint sysfs__read_bool(const char *entry, bool *value);
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ciint sysfs__write_int(const char *entry, int value);
628c2ecf20Sopenharmony_ci#endif /* __API_FS__ */
63