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 */
18enum 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
27struct 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