Commit | Line | Data |
---|---|---|
d73f821c LR |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef __FIRMWARE_FALLBACK_H | |
3 | #define __FIRMWARE_FALLBACK_H | |
4 | ||
5 | #include <linux/firmware.h> | |
6 | #include <linux/device.h> | |
7 | ||
eb33eb04 AR |
8 | #include "firmware.h" |
9 | ||
d73f821c | 10 | /** |
b93815d0 | 11 | * struct firmware_fallback_config - firmware fallback configuration settings |
d73f821c LR |
12 | * |
13 | * Helps describe and fine tune the fallback mechanism. | |
14 | * | |
15 | * @force_sysfs_fallback: force the sysfs fallback mechanism to be used | |
16 | * as if one had enabled CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y. | |
ceb18132 LR |
17 | * Useful to help debug a CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y |
18 | * functionality on a kernel where that config entry has been disabled. | |
2cd7a1c6 LR |
19 | * @ignore_sysfs_fallback: force to disable the sysfs fallback mechanism. |
20 | * This emulates the behaviour as if we had set the kernel | |
21 | * config CONFIG_FW_LOADER_USER_HELPER=n. | |
d73f821c LR |
22 | * @old_timeout: for internal use |
23 | * @loading_timeout: the timeout to wait for the fallback mechanism before | |
24 | * giving up, in seconds. | |
25 | */ | |
26 | struct firmware_fallback_config { | |
ceb18132 | 27 | unsigned int force_sysfs_fallback; |
2cd7a1c6 | 28 | unsigned int ignore_sysfs_fallback; |
d73f821c LR |
29 | int old_timeout; |
30 | int loading_timeout; | |
31 | }; | |
32 | ||
33 | #ifdef CONFIG_FW_LOADER_USER_HELPER | |
cf1cde7c AR |
34 | int firmware_fallback_sysfs(struct firmware *fw, const char *name, |
35 | struct device *device, | |
36 | enum fw_opt opt_flags, | |
37 | int ret); | |
d73f821c LR |
38 | void kill_pending_fw_fallback_reqs(bool only_kill_custom); |
39 | ||
40 | void fw_fallback_set_cache_timeout(void); | |
41 | void fw_fallback_set_default_timeout(void); | |
42 | ||
43 | int register_sysfs_loader(void); | |
44 | void unregister_sysfs_loader(void); | |
45 | #else /* CONFIG_FW_LOADER_USER_HELPER */ | |
cf1cde7c AR |
46 | static inline int firmware_fallback_sysfs(struct firmware *fw, const char *name, |
47 | struct device *device, | |
48 | enum fw_opt opt_flags, | |
49 | int ret) | |
d73f821c LR |
50 | { |
51 | /* Keep carrying over the same error */ | |
52 | return ret; | |
53 | } | |
54 | ||
55 | static inline void kill_pending_fw_fallback_reqs(bool only_kill_custom) { } | |
56 | static inline void fw_fallback_set_cache_timeout(void) { } | |
57 | static inline void fw_fallback_set_default_timeout(void) { } | |
58 | ||
59 | static inline int register_sysfs_loader(void) | |
60 | { | |
61 | return 0; | |
62 | } | |
63 | ||
64 | static inline void unregister_sysfs_loader(void) | |
65 | { | |
66 | } | |
67 | #endif /* CONFIG_FW_LOADER_USER_HELPER */ | |
68 | ||
e4c2c0ff HG |
69 | #ifdef CONFIG_EFI_EMBEDDED_FIRMWARE |
70 | int firmware_fallback_platform(struct fw_priv *fw_priv, enum fw_opt opt_flags); | |
71 | #else | |
72 | static inline int firmware_fallback_platform(struct fw_priv *fw_priv, | |
73 | enum fw_opt opt_flags) | |
74 | { | |
75 | return -ENOENT; | |
76 | } | |
77 | #endif | |
78 | ||
d73f821c | 79 | #endif /* __FIRMWARE_FALLBACK_H */ |