fallback_table.c 1.8 KB

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