xref: /linux-6.15/arch/x86/kernel/kdebugfs.c (revision 6d7d7433)
1*6d7d7433SHuang, Ying /*
2*6d7d7433SHuang, Ying  * Architecture specific debugfs files
3*6d7d7433SHuang, Ying  *
4*6d7d7433SHuang, Ying  * Copyright (C) 2007, Intel Corp.
5*6d7d7433SHuang, Ying  *	Huang Ying <[email protected]>
6*6d7d7433SHuang, Ying  *
7*6d7d7433SHuang, Ying  * This file is released under the GPLv2.
8*6d7d7433SHuang, Ying  */
9*6d7d7433SHuang, Ying 
10*6d7d7433SHuang, Ying #include <linux/debugfs.h>
11*6d7d7433SHuang, Ying #include <linux/stat.h>
12*6d7d7433SHuang, Ying #include <linux/init.h>
13*6d7d7433SHuang, Ying 
14*6d7d7433SHuang, Ying #include <asm/setup.h>
15*6d7d7433SHuang, Ying 
16*6d7d7433SHuang, Ying #ifdef CONFIG_DEBUG_BOOT_PARAMS
17*6d7d7433SHuang, Ying static struct debugfs_blob_wrapper boot_params_blob = {
18*6d7d7433SHuang, Ying 	.data = &boot_params,
19*6d7d7433SHuang, Ying 	.size = sizeof(boot_params),
20*6d7d7433SHuang, Ying };
21*6d7d7433SHuang, Ying 
22*6d7d7433SHuang, Ying static int __init boot_params_kdebugfs_init(void)
23*6d7d7433SHuang, Ying {
24*6d7d7433SHuang, Ying 	int error;
25*6d7d7433SHuang, Ying 	struct dentry *dbp, *version, *data;
26*6d7d7433SHuang, Ying 
27*6d7d7433SHuang, Ying 	dbp = debugfs_create_dir("boot_params", NULL);
28*6d7d7433SHuang, Ying 	if (!dbp) {
29*6d7d7433SHuang, Ying 		error = -ENOMEM;
30*6d7d7433SHuang, Ying 		goto err_return;
31*6d7d7433SHuang, Ying 	}
32*6d7d7433SHuang, Ying 	version = debugfs_create_x16("version", S_IRUGO, dbp,
33*6d7d7433SHuang, Ying 				     &boot_params.hdr.version);
34*6d7d7433SHuang, Ying 	if (!version) {
35*6d7d7433SHuang, Ying 		error = -ENOMEM;
36*6d7d7433SHuang, Ying 		goto err_dir;
37*6d7d7433SHuang, Ying 	}
38*6d7d7433SHuang, Ying 	data = debugfs_create_blob("data", S_IRUGO, dbp,
39*6d7d7433SHuang, Ying 				   &boot_params_blob);
40*6d7d7433SHuang, Ying 	if (!data) {
41*6d7d7433SHuang, Ying 		error = -ENOMEM;
42*6d7d7433SHuang, Ying 		goto err_version;
43*6d7d7433SHuang, Ying 	}
44*6d7d7433SHuang, Ying 	return 0;
45*6d7d7433SHuang, Ying err_version:
46*6d7d7433SHuang, Ying 	debugfs_remove(version);
47*6d7d7433SHuang, Ying err_dir:
48*6d7d7433SHuang, Ying 	debugfs_remove(dbp);
49*6d7d7433SHuang, Ying err_return:
50*6d7d7433SHuang, Ying 	return error;
51*6d7d7433SHuang, Ying }
52*6d7d7433SHuang, Ying #endif
53*6d7d7433SHuang, Ying 
54*6d7d7433SHuang, Ying static int __init arch_kdebugfs_init(void)
55*6d7d7433SHuang, Ying {
56*6d7d7433SHuang, Ying 	int error = 0;
57*6d7d7433SHuang, Ying 
58*6d7d7433SHuang, Ying #ifdef CONFIG_DEBUG_BOOT_PARAMS
59*6d7d7433SHuang, Ying 	error = boot_params_kdebugfs_init();
60*6d7d7433SHuang, Ying #endif
61*6d7d7433SHuang, Ying 
62*6d7d7433SHuang, Ying 	return error;
63*6d7d7433SHuang, Ying }
64*6d7d7433SHuang, Ying 
65*6d7d7433SHuang, Ying arch_initcall(arch_kdebugfs_init);
66