mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	Move definitions required by sysfs.c from sysfs_upload.h to sysfs.h so that sysfs.c does not need to include sysfs_upload.h. Signed-off-by: Russ Weight <russell.h.weight@intel.com> Link: https://lore.kernel.org/r/20220426200356.126085-3-russell.h.weight@intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
		
			
				
	
	
		
			117 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0 */
 | 
						|
#ifndef __FIRMWARE_SYSFS_H
 | 
						|
#define __FIRMWARE_SYSFS_H
 | 
						|
 | 
						|
#include <linux/device.h>
 | 
						|
 | 
						|
#include "firmware.h"
 | 
						|
 | 
						|
MODULE_IMPORT_NS(FIRMWARE_LOADER_PRIVATE);
 | 
						|
 | 
						|
extern struct firmware_fallback_config fw_fallback_config;
 | 
						|
extern struct device_attribute dev_attr_loading;
 | 
						|
 | 
						|
#ifdef CONFIG_FW_LOADER_USER_HELPER
 | 
						|
/**
 | 
						|
 * struct firmware_fallback_config - firmware fallback configuration settings
 | 
						|
 *
 | 
						|
 * Helps describe and fine tune the fallback mechanism.
 | 
						|
 *
 | 
						|
 * @force_sysfs_fallback: force the sysfs fallback mechanism to be used
 | 
						|
 *	as if one had enabled CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y.
 | 
						|
 *	Useful to help debug a CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
 | 
						|
 *	functionality on a kernel where that config entry has been disabled.
 | 
						|
 * @ignore_sysfs_fallback: force to disable the sysfs fallback mechanism.
 | 
						|
 *	This emulates the behaviour as if we had set the kernel
 | 
						|
 *	config CONFIG_FW_LOADER_USER_HELPER=n.
 | 
						|
 * @old_timeout: for internal use
 | 
						|
 * @loading_timeout: the timeout to wait for the fallback mechanism before
 | 
						|
 *	giving up, in seconds.
 | 
						|
 */
 | 
						|
struct firmware_fallback_config {
 | 
						|
	unsigned int force_sysfs_fallback;
 | 
						|
	unsigned int ignore_sysfs_fallback;
 | 
						|
	int old_timeout;
 | 
						|
	int loading_timeout;
 | 
						|
};
 | 
						|
 | 
						|
/* These getters are vetted to use int properly */
 | 
						|
static inline int __firmware_loading_timeout(void)
 | 
						|
{
 | 
						|
	return fw_fallback_config.loading_timeout;
 | 
						|
}
 | 
						|
 | 
						|
/* These setters are vetted to use int properly */
 | 
						|
static inline void __fw_fallback_set_timeout(int timeout)
 | 
						|
{
 | 
						|
	fw_fallback_config.loading_timeout = timeout;
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef CONFIG_FW_LOADER_SYSFS
 | 
						|
int register_sysfs_loader(void);
 | 
						|
void unregister_sysfs_loader(void);
 | 
						|
#if defined(CONFIG_FW_LOADER_USER_HELPER) && defined(CONFIG_SYSCTL)
 | 
						|
int register_firmware_config_sysctl(void);
 | 
						|
void unregister_firmware_config_sysctl(void);
 | 
						|
#else
 | 
						|
static inline int register_firmware_config_sysctl(void)
 | 
						|
{
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
static inline void unregister_firmware_config_sysctl(void) { }
 | 
						|
#endif /* CONFIG_FW_LOADER_USER_HELPER && CONFIG_SYSCTL */
 | 
						|
#else /* CONFIG_FW_LOADER_SYSFS */
 | 
						|
static inline int register_sysfs_loader(void)
 | 
						|
{
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
static inline void unregister_sysfs_loader(void)
 | 
						|
{
 | 
						|
}
 | 
						|
#endif /* CONFIG_FW_LOADER_SYSFS */
 | 
						|
 | 
						|
struct fw_sysfs {
 | 
						|
	bool nowait;
 | 
						|
	struct device dev;
 | 
						|
	struct fw_priv *fw_priv;
 | 
						|
	struct firmware *fw;
 | 
						|
	void *fw_upload_priv;
 | 
						|
};
 | 
						|
 | 
						|
static inline struct fw_sysfs *to_fw_sysfs(struct device *dev)
 | 
						|
{
 | 
						|
	return container_of(dev, struct fw_sysfs, dev);
 | 
						|
}
 | 
						|
 | 
						|
void __fw_load_abort(struct fw_priv *fw_priv);
 | 
						|
 | 
						|
static inline void fw_load_abort(struct fw_sysfs *fw_sysfs)
 | 
						|
{
 | 
						|
	struct fw_priv *fw_priv = fw_sysfs->fw_priv;
 | 
						|
 | 
						|
	__fw_load_abort(fw_priv);
 | 
						|
}
 | 
						|
 | 
						|
struct fw_sysfs *
 | 
						|
fw_create_instance(struct firmware *firmware, const char *fw_name,
 | 
						|
		   struct device *device, u32 opt_flags);
 | 
						|
 | 
						|
#ifdef CONFIG_FW_UPLOAD
 | 
						|
extern struct device_attribute dev_attr_status;
 | 
						|
extern struct device_attribute dev_attr_error;
 | 
						|
extern struct device_attribute dev_attr_cancel;
 | 
						|
extern struct device_attribute dev_attr_remaining_size;
 | 
						|
 | 
						|
int fw_upload_start(struct fw_sysfs *fw_sysfs);
 | 
						|
umode_t fw_upload_is_visible(struct kobject *kobj, struct attribute *attr, int n);
 | 
						|
#else
 | 
						|
static inline int fw_upload_start(struct fw_sysfs *fw_sysfs)
 | 
						|
{
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* __FIRMWARE_SYSFS_H */
 |