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 
8 /**
9  * struct firmware_fallback_config - firmware fallback configuratioon settings
10  *
11  * Helps describe and fine tune the fallback mechanism.
12  *
13  * @force_sysfs_fallback: force the sysfs fallback mechanism to be used
14  * 	as if one had enabled CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y.
15  * @old_timeout: for internal use
16  * @loading_timeout: the timeout to wait for the fallback mechanism before
17  * 	giving up, in seconds.
18  */
19 struct firmware_fallback_config {
20 	const bool force_sysfs_fallback;
21 	int old_timeout;
22 	int loading_timeout;
23 };
24 
25 #ifdef CONFIG_FW_LOADER_USER_HELPER
26 int fw_sysfs_fallback(struct firmware *fw, const char *name,
27 		      struct device *device,
28 		      unsigned int opt_flags,
29 		      int ret);
30 void kill_pending_fw_fallback_reqs(bool only_kill_custom);
31 
32 void fw_fallback_set_cache_timeout(void);
33 void fw_fallback_set_default_timeout(void);
34 
35 int register_sysfs_loader(void);
36 void unregister_sysfs_loader(void);
37 #else /* CONFIG_FW_LOADER_USER_HELPER */
38 static inline int fw_sysfs_fallback(struct firmware *fw, const char *name,
39 				    struct device *device,
40 				    unsigned int opt_flags,
41 				    int ret)
42 {
43 	/* Keep carrying over the same error */
44 	return ret;
45 }
46 
47 static inline void kill_pending_fw_fallback_reqs(bool only_kill_custom) { }
48 static inline void fw_fallback_set_cache_timeout(void) { }
49 static inline void fw_fallback_set_default_timeout(void) { }
50 
51 static inline int register_sysfs_loader(void)
52 {
53 	return 0;
54 }
55 
56 static inline void unregister_sysfs_loader(void)
57 {
58 }
59 #endif /* CONFIG_FW_LOADER_USER_HELPER */
60 
61 #endif /* __FIRMWARE_FALLBACK_H */
62