xref: /linux/drivers/dpll/zl3073x/fw.h (revision ec2e0fb07d789976c601bec19ecced7a501c3705)
1*ca017409SIvan Vecera /* SPDX-License-Identifier: GPL-2.0-only */
2*ca017409SIvan Vecera 
3*ca017409SIvan Vecera #ifndef _ZL3073X_FW_H
4*ca017409SIvan Vecera #define _ZL3073X_FW_H
5*ca017409SIvan Vecera 
6*ca017409SIvan Vecera /*
7*ca017409SIvan Vecera  * enum zl3073x_fw_component_id - Identifiers for possible flash components
8*ca017409SIvan Vecera  */
9*ca017409SIvan Vecera enum zl3073x_fw_component_id {
10*ca017409SIvan Vecera 	ZL_FW_COMPONENT_INVALID = -1,
11*ca017409SIvan Vecera 	ZL_FW_COMPONENT_UTIL = 0,
12*ca017409SIvan Vecera 	ZL_FW_COMPONENT_FW1,
13*ca017409SIvan Vecera 	ZL_FW_COMPONENT_FW2,
14*ca017409SIvan Vecera 	ZL_FW_COMPONENT_FW3,
15*ca017409SIvan Vecera 	ZL_FW_COMPONENT_CFG0,
16*ca017409SIvan Vecera 	ZL_FW_COMPONENT_CFG1,
17*ca017409SIvan Vecera 	ZL_FW_COMPONENT_CFG2,
18*ca017409SIvan Vecera 	ZL_FW_COMPONENT_CFG3,
19*ca017409SIvan Vecera 	ZL_FW_COMPONENT_CFG4,
20*ca017409SIvan Vecera 	ZL_FW_COMPONENT_CFG5,
21*ca017409SIvan Vecera 	ZL_FW_COMPONENT_CFG6,
22*ca017409SIvan Vecera 	ZL_FW_NUM_COMPONENTS
23*ca017409SIvan Vecera };
24*ca017409SIvan Vecera 
25*ca017409SIvan Vecera /**
26*ca017409SIvan Vecera  * struct zl3073x_fw_component - Firmware component
27*ca017409SIvan Vecera  * @id: Flash component ID
28*ca017409SIvan Vecera  * @size: Size of the buffer
29*ca017409SIvan Vecera  * @data: Pointer to buffer with component data
30*ca017409SIvan Vecera  */
31*ca017409SIvan Vecera struct zl3073x_fw_component {
32*ca017409SIvan Vecera 	enum zl3073x_fw_component_id	id;
33*ca017409SIvan Vecera 	size_t				size;
34*ca017409SIvan Vecera 	void				*data;
35*ca017409SIvan Vecera };
36*ca017409SIvan Vecera 
37*ca017409SIvan Vecera /**
38*ca017409SIvan Vecera  * struct zl3073x_fw - Firmware bundle
39*ca017409SIvan Vecera  * @component: firmware components array
40*ca017409SIvan Vecera  */
41*ca017409SIvan Vecera struct zl3073x_fw {
42*ca017409SIvan Vecera 	struct zl3073x_fw_component	*component[ZL_FW_NUM_COMPONENTS];
43*ca017409SIvan Vecera };
44*ca017409SIvan Vecera 
45*ca017409SIvan Vecera struct zl3073x_fw *zl3073x_fw_load(struct zl3073x_dev *zldev, const char *data,
46*ca017409SIvan Vecera 				   size_t size, struct netlink_ext_ack *extack);
47*ca017409SIvan Vecera void zl3073x_fw_free(struct zl3073x_fw *fw);
48*ca017409SIvan Vecera 
49*ca017409SIvan Vecera int zl3073x_fw_flash(struct zl3073x_dev *zldev, struct zl3073x_fw *zlfw,
50*ca017409SIvan Vecera 		     struct netlink_ext_ack *extack);
51*ca017409SIvan Vecera 
52*ca017409SIvan Vecera #endif /* _ZL3073X_FW_H */
53