1*97730bbbSRuss Weight /* SPDX-License-Identifier: GPL-2.0 */ 2*97730bbbSRuss Weight #ifndef __FIRMWARE_UPLOAD_H 3*97730bbbSRuss Weight #define __FIRMWARE_UPLOAD_H 4*97730bbbSRuss Weight 5*97730bbbSRuss Weight #include <linux/device.h> 6*97730bbbSRuss Weight 7*97730bbbSRuss Weight /** 8*97730bbbSRuss Weight * enum fw_upload_prog - firmware upload progress codes 9*97730bbbSRuss Weight * @FW_UPLOAD_PROG_IDLE: there is no firmware upload in progress 10*97730bbbSRuss Weight * @FW_UPLOAD_PROG_RECEIVING: worker thread is receiving firmware data 11*97730bbbSRuss Weight * @FW_UPLOAD_PROG_PREPARING: target device is preparing for firmware upload 12*97730bbbSRuss Weight * @FW_UPLOAD_PROG_TRANSFERRING: data is being copied to the device 13*97730bbbSRuss Weight * @FW_UPLOAD_PROG_PROGRAMMING: device is performing the firmware update 14*97730bbbSRuss Weight * @FW_UPLOAD_PROG_MAX: Maximum progress code marker 15*97730bbbSRuss Weight */ 16*97730bbbSRuss Weight enum fw_upload_prog { 17*97730bbbSRuss Weight FW_UPLOAD_PROG_IDLE, 18*97730bbbSRuss Weight FW_UPLOAD_PROG_RECEIVING, 19*97730bbbSRuss Weight FW_UPLOAD_PROG_PREPARING, 20*97730bbbSRuss Weight FW_UPLOAD_PROG_TRANSFERRING, 21*97730bbbSRuss Weight FW_UPLOAD_PROG_PROGRAMMING, 22*97730bbbSRuss Weight FW_UPLOAD_PROG_MAX 23*97730bbbSRuss Weight }; 24*97730bbbSRuss Weight 25*97730bbbSRuss Weight struct fw_upload_priv { 26*97730bbbSRuss Weight struct fw_upload *fw_upload; 27*97730bbbSRuss Weight struct module *module; 28*97730bbbSRuss Weight const char *name; 29*97730bbbSRuss Weight const struct fw_upload_ops *ops; 30*97730bbbSRuss Weight struct mutex lock; /* protect data structure contents */ 31*97730bbbSRuss Weight struct work_struct work; 32*97730bbbSRuss Weight const u8 *data; /* pointer to update data */ 33*97730bbbSRuss Weight u32 remaining_size; /* size remaining to transfer */ 34*97730bbbSRuss Weight enum fw_upload_prog progress; 35*97730bbbSRuss Weight enum fw_upload_prog err_progress; /* progress at time of failure */ 36*97730bbbSRuss Weight enum fw_upload_err err_code; /* security manager error code */ 37*97730bbbSRuss Weight }; 38*97730bbbSRuss Weight 39*97730bbbSRuss Weight #ifdef CONFIG_FW_UPLOAD 40*97730bbbSRuss Weight int fw_upload_start(struct fw_sysfs *fw_sysfs); 41*97730bbbSRuss Weight umode_t fw_upload_is_visible(struct kobject *kobj, struct attribute *attr, int n); 42*97730bbbSRuss Weight #else 43*97730bbbSRuss Weight static inline int fw_upload_start(struct fw_sysfs *fw_sysfs) 44*97730bbbSRuss Weight { 45*97730bbbSRuss Weight return 0; 46*97730bbbSRuss Weight } 47*97730bbbSRuss Weight #endif 48*97730bbbSRuss Weight 49*97730bbbSRuss Weight #endif /* __FIRMWARE_UPLOAD_H */ 50