162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef __SYSFS_UPLOAD_H
362306a36Sopenharmony_ci#define __SYSFS_UPLOAD_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/device.h>
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include "sysfs.h"
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci/**
1062306a36Sopenharmony_ci * enum fw_upload_prog - firmware upload progress codes
1162306a36Sopenharmony_ci * @FW_UPLOAD_PROG_IDLE: there is no firmware upload in progress
1262306a36Sopenharmony_ci * @FW_UPLOAD_PROG_RECEIVING: worker thread is receiving firmware data
1362306a36Sopenharmony_ci * @FW_UPLOAD_PROG_PREPARING: target device is preparing for firmware upload
1462306a36Sopenharmony_ci * @FW_UPLOAD_PROG_TRANSFERRING: data is being copied to the device
1562306a36Sopenharmony_ci * @FW_UPLOAD_PROG_PROGRAMMING: device is performing the firmware update
1662306a36Sopenharmony_ci * @FW_UPLOAD_PROG_MAX: Maximum progress code marker
1762306a36Sopenharmony_ci */
1862306a36Sopenharmony_cienum fw_upload_prog {
1962306a36Sopenharmony_ci	FW_UPLOAD_PROG_IDLE,
2062306a36Sopenharmony_ci	FW_UPLOAD_PROG_RECEIVING,
2162306a36Sopenharmony_ci	FW_UPLOAD_PROG_PREPARING,
2262306a36Sopenharmony_ci	FW_UPLOAD_PROG_TRANSFERRING,
2362306a36Sopenharmony_ci	FW_UPLOAD_PROG_PROGRAMMING,
2462306a36Sopenharmony_ci	FW_UPLOAD_PROG_MAX
2562306a36Sopenharmony_ci};
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistruct fw_upload_priv {
2862306a36Sopenharmony_ci	struct fw_upload *fw_upload;
2962306a36Sopenharmony_ci	struct module *module;
3062306a36Sopenharmony_ci	const char *name;
3162306a36Sopenharmony_ci	const struct fw_upload_ops *ops;
3262306a36Sopenharmony_ci	struct mutex lock;		  /* protect data structure contents */
3362306a36Sopenharmony_ci	struct work_struct work;
3462306a36Sopenharmony_ci	const u8 *data;			  /* pointer to update data */
3562306a36Sopenharmony_ci	u32 remaining_size;		  /* size remaining to transfer */
3662306a36Sopenharmony_ci	enum fw_upload_prog progress;
3762306a36Sopenharmony_ci	enum fw_upload_prog err_progress; /* progress at time of failure */
3862306a36Sopenharmony_ci	enum fw_upload_err err_code;	  /* security manager error code */
3962306a36Sopenharmony_ci};
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci#endif /* __SYSFS_UPLOAD_H */
42