1  /* SPDX-License-Identifier: GPL-2.0 */
2  #ifndef __SYSFS_UPLOAD_H
3  #define __SYSFS_UPLOAD_H
4  
5  #include <linux/device.h>
6  
7  #include "sysfs.h"
8  
9  /**
10   * enum fw_upload_prog - firmware upload progress codes
11   * @FW_UPLOAD_PROG_IDLE: there is no firmware upload in progress
12   * @FW_UPLOAD_PROG_RECEIVING: worker thread is receiving firmware data
13   * @FW_UPLOAD_PROG_PREPARING: target device is preparing for firmware upload
14   * @FW_UPLOAD_PROG_TRANSFERRING: data is being copied to the device
15   * @FW_UPLOAD_PROG_PROGRAMMING: device is performing the firmware update
16   * @FW_UPLOAD_PROG_MAX: Maximum progress code marker
17   */
18  enum fw_upload_prog {
19  	FW_UPLOAD_PROG_IDLE,
20  	FW_UPLOAD_PROG_RECEIVING,
21  	FW_UPLOAD_PROG_PREPARING,
22  	FW_UPLOAD_PROG_TRANSFERRING,
23  	FW_UPLOAD_PROG_PROGRAMMING,
24  	FW_UPLOAD_PROG_MAX
25  };
26  
27  struct fw_upload_priv {
28  	struct fw_upload *fw_upload;
29  	struct module *module;
30  	const char *name;
31  	const struct fw_upload_ops *ops;
32  	struct mutex lock;		  /* protect data structure contents */
33  	struct work_struct work;
34  	const u8 *data;			  /* pointer to update data */
35  	u32 remaining_size;		  /* size remaining to transfer */
36  	enum fw_upload_prog progress;
37  	enum fw_upload_prog err_progress; /* progress at time of failure */
38  	enum fw_upload_err err_code;	  /* security manager error code */
39  };
40  
41  #endif /* __SYSFS_UPLOAD_H */
42