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