xref: /linux/drivers/base/firmware_loader/fallback_table.c (revision 0ea5c948cb64bab5bc7a5516774eb8536f05aa0d)
1 // SPDX-License-Identifier: GPL-2.0
2 
3 #include <linux/types.h>
4 #include <linux/kconfig.h>
5 #include <linux/list.h>
6 #include <linux/slab.h>
7 #include <linux/export.h>
8 #include <linux/security.h>
9 #include <linux/highmem.h>
10 #include <linux/umh.h>
11 #include <linux/sysctl.h>
12 
13 #include "fallback.h"
14 #include "firmware.h"
15 
16 /*
17  * firmware fallback configuration table
18  */
19 
20 struct firmware_fallback_config fw_fallback_config = {
21 	.force_sysfs_fallback = IS_ENABLED(CONFIG_FW_LOADER_USER_HELPER_FALLBACK),
22 	.loading_timeout = 60,
23 	.old_timeout = 60,
24 };
25 EXPORT_SYMBOL_NS_GPL(fw_fallback_config, FIRMWARE_LOADER_PRIVATE);
26 
27 #ifdef CONFIG_SYSCTL
28 static struct ctl_table firmware_config_table[] = {
29 	{
30 		.procname	= "force_sysfs_fallback",
31 		.data		= &fw_fallback_config.force_sysfs_fallback,
32 		.maxlen         = sizeof(unsigned int),
33 		.mode           = 0644,
34 		.proc_handler   = proc_douintvec_minmax,
35 		.extra1		= SYSCTL_ZERO,
36 		.extra2		= SYSCTL_ONE,
37 	},
38 	{
39 		.procname	= "ignore_sysfs_fallback",
40 		.data		= &fw_fallback_config.ignore_sysfs_fallback,
41 		.maxlen         = sizeof(unsigned int),
42 		.mode           = 0644,
43 		.proc_handler   = proc_douintvec_minmax,
44 		.extra1		= SYSCTL_ZERO,
45 		.extra2		= SYSCTL_ONE,
46 	},
47 };
48 
49 static struct ctl_table_header *firmware_config_sysct_table_header;
register_firmware_config_sysctl(void)50 int register_firmware_config_sysctl(void)
51 {
52 	firmware_config_sysct_table_header =
53 		register_sysctl("kernel/firmware_config",
54 				firmware_config_table);
55 	if (!firmware_config_sysct_table_header)
56 		return -ENOMEM;
57 	return 0;
58 }
59 EXPORT_SYMBOL_NS_GPL(register_firmware_config_sysctl, FIRMWARE_LOADER_PRIVATE);
60 
unregister_firmware_config_sysctl(void)61 void unregister_firmware_config_sysctl(void)
62 {
63 	unregister_sysctl_table(firmware_config_sysct_table_header);
64 	firmware_config_sysct_table_header = NULL;
65 }
66 EXPORT_SYMBOL_NS_GPL(unregister_firmware_config_sysctl, FIRMWARE_LOADER_PRIVATE);
67 
68 #endif /* CONFIG_SYSCTL */
69