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