// SPDX-License-Identifier: GPL-2.0-only
#include <linux/debugfs.h>
#include <linux/ras.h>
#include "debugfs.h"

static struct dentry *ras_debugfs_dir;

static atomic_t trace_count = ATOMIC_INIT(0);

struct dentry *ras_get_debugfs_root(void)
{
	return ras_debugfs_dir;
}
EXPORT_SYMBOL_GPL(ras_get_debugfs_root);

int ras_userspace_consumers(void)
{
	return atomic_read(&trace_count);
}
EXPORT_SYMBOL_GPL(ras_userspace_consumers);

static int trace_show(struct seq_file *m, void *v)
{
	return 0;
}

static int trace_open(struct inode *inode, struct file *file)
{
	atomic_inc(&trace_count);
	return single_open(file, trace_show, NULL);
}

static int trace_release(struct inode *inode, struct file *file)
{
	atomic_dec(&trace_count);
	return single_release(inode, file);
}

static const struct file_operations trace_fops = {
	.open    = trace_open,
	.read    = seq_read,
	.llseek  = seq_lseek,
	.release = trace_release,
};

int __init ras_add_daemon_trace(void)
{
	struct dentry *fentry;

	if (!ras_debugfs_dir)
		return -ENOENT;

	fentry = debugfs_create_file("daemon_active", S_IRUSR, ras_debugfs_dir,
				     NULL, &trace_fops);
	if (IS_ERR(fentry))
		return -ENODEV;

	return 0;

}

void __init ras_debugfs_init(void)
{
	ras_debugfs_dir = debugfs_create_dir("ras", NULL);
}
