123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // SPDX-License-Identifier: GPL-2.0
- #include <linux/types.h>
- #include <linux/kconfig.h>
- #include <linux/list.h>
- #include <linux/slab.h>
- #include <linux/export.h>
- #include <linux/security.h>
- #include <linux/highmem.h>
- #include <linux/umh.h>
- #include <linux/sysctl.h>
- #include "fallback.h"
- #include "firmware.h"
- /*
- * firmware fallback configuration table
- */
- struct firmware_fallback_config fw_fallback_config = {
- .force_sysfs_fallback = IS_ENABLED(CONFIG_FW_LOADER_USER_HELPER_FALLBACK),
- .loading_timeout = 60,
- .old_timeout = 60,
- };
- EXPORT_SYMBOL_NS_GPL(fw_fallback_config, FIRMWARE_LOADER_PRIVATE);
- #ifdef CONFIG_SYSCTL
- static struct ctl_table firmware_config_table[] = {
- {
- .procname = "force_sysfs_fallback",
- .data = &fw_fallback_config.force_sysfs_fallback,
- .maxlen = sizeof(unsigned int),
- .mode = 0644,
- .proc_handler = proc_douintvec_minmax,
- .extra1 = SYSCTL_ZERO,
- .extra2 = SYSCTL_ONE,
- },
- {
- .procname = "ignore_sysfs_fallback",
- .data = &fw_fallback_config.ignore_sysfs_fallback,
- .maxlen = sizeof(unsigned int),
- .mode = 0644,
- .proc_handler = proc_douintvec_minmax,
- .extra1 = SYSCTL_ZERO,
- .extra2 = SYSCTL_ONE,
- },
- { }
- };
- static struct ctl_table_header *firmware_config_sysct_table_header;
- int register_firmware_config_sysctl(void)
- {
- firmware_config_sysct_table_header =
- register_sysctl("kernel/firmware_config",
- firmware_config_table);
- if (!firmware_config_sysct_table_header)
- return -ENOMEM;
- return 0;
- }
- EXPORT_SYMBOL_NS_GPL(register_firmware_config_sysctl, FIRMWARE_LOADER_PRIVATE);
- void unregister_firmware_config_sysctl(void)
- {
- unregister_sysctl_table(firmware_config_sysct_table_header);
- firmware_config_sysct_table_header = NULL;
- }
- EXPORT_SYMBOL_NS_GPL(unregister_firmware_config_sysctl, FIRMWARE_LOADER_PRIVATE);
- #endif /* CONFIG_SYSCTL */
|