12bb3e103SShalom Toledo /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 22bb3e103SShalom Toledo /* Copyright (c) 2017-2019 Mellanox Technologies. All rights reserved */ 32bb3e103SShalom Toledo 4410ed13cSYotam Gigi #ifndef _MLXFW_MFA2_FORMAT_H 5410ed13cSYotam Gigi #define _MLXFW_MFA2_FORMAT_H 6410ed13cSYotam Gigi 7410ed13cSYotam Gigi #include "mlxfw_mfa2_file.h" 8410ed13cSYotam Gigi #include "mlxfw_mfa2_tlv.h" 9410ed13cSYotam Gigi 10410ed13cSYotam Gigi enum mlxfw_mfa2_tlv_type { 11410ed13cSYotam Gigi MLXFW_MFA2_TLV_MULTI_PART = 0x01, 12410ed13cSYotam Gigi MLXFW_MFA2_TLV_PACKAGE_DESCRIPTOR = 0x02, 13410ed13cSYotam Gigi MLXFW_MFA2_TLV_COMPONENT_DESCRIPTOR = 0x04, 14410ed13cSYotam Gigi MLXFW_MFA2_TLV_COMPONENT_PTR = 0x22, 15410ed13cSYotam Gigi MLXFW_MFA2_TLV_PSID = 0x2A, 16410ed13cSYotam Gigi }; 17410ed13cSYotam Gigi 18410ed13cSYotam Gigi enum mlxfw_mfa2_compression_type { 19410ed13cSYotam Gigi MLXFW_MFA2_COMPRESSION_TYPE_NONE, 20410ed13cSYotam Gigi MLXFW_MFA2_COMPRESSION_TYPE_XZ, 21410ed13cSYotam Gigi }; 22410ed13cSYotam Gigi 23410ed13cSYotam Gigi struct mlxfw_mfa2_tlv_package_descriptor { 24410ed13cSYotam Gigi __be16 num_components; 25410ed13cSYotam Gigi __be16 num_devices; 26410ed13cSYotam Gigi __be32 cb_offset; 27410ed13cSYotam Gigi __be32 cb_archive_size; 28410ed13cSYotam Gigi __be32 cb_size_h; 29410ed13cSYotam Gigi __be32 cb_size_l; 30410ed13cSYotam Gigi u8 padding[3]; 31410ed13cSYotam Gigi u8 cv_compression; 32410ed13cSYotam Gigi __be32 user_data_offset; 33410ed13cSYotam Gigi } __packed; 34410ed13cSYotam Gigi 35410ed13cSYotam Gigi MLXFW_MFA2_TLV(package_descriptor, struct mlxfw_mfa2_tlv_package_descriptor, 36410ed13cSYotam Gigi MLXFW_MFA2_TLV_PACKAGE_DESCRIPTOR); 37410ed13cSYotam Gigi 38410ed13cSYotam Gigi struct mlxfw_mfa2_tlv_multi { 39410ed13cSYotam Gigi __be16 num_extensions; 40410ed13cSYotam Gigi __be16 total_len; 41410ed13cSYotam Gigi } __packed; 42410ed13cSYotam Gigi 43410ed13cSYotam Gigi MLXFW_MFA2_TLV(multi, struct mlxfw_mfa2_tlv_multi, 44410ed13cSYotam Gigi MLXFW_MFA2_TLV_MULTI_PART); 45410ed13cSYotam Gigi 46410ed13cSYotam Gigi struct mlxfw_mfa2_tlv_psid { 47*b1cf7a56SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u8, psid); 48410ed13cSYotam Gigi } __packed; 49410ed13cSYotam Gigi 50410ed13cSYotam Gigi MLXFW_MFA2_TLV_VARSIZE(psid, struct mlxfw_mfa2_tlv_psid, 51410ed13cSYotam Gigi MLXFW_MFA2_TLV_PSID); 52410ed13cSYotam Gigi 53410ed13cSYotam Gigi struct mlxfw_mfa2_tlv_component_ptr { 54410ed13cSYotam Gigi __be16 storage_id; 55410ed13cSYotam Gigi __be16 component_index; 56410ed13cSYotam Gigi __be32 storage_address; 57410ed13cSYotam Gigi } __packed; 58410ed13cSYotam Gigi 59410ed13cSYotam Gigi MLXFW_MFA2_TLV(component_ptr, struct mlxfw_mfa2_tlv_component_ptr, 60410ed13cSYotam Gigi MLXFW_MFA2_TLV_COMPONENT_PTR); 61410ed13cSYotam Gigi 62410ed13cSYotam Gigi struct mlxfw_mfa2_tlv_component_descriptor { 63410ed13cSYotam Gigi __be16 pldm_classification; 64410ed13cSYotam Gigi __be16 identifier; 65410ed13cSYotam Gigi __be32 cb_offset_h; 66410ed13cSYotam Gigi __be32 cb_offset_l; 67410ed13cSYotam Gigi __be32 size; 68410ed13cSYotam Gigi } __packed; 69410ed13cSYotam Gigi 70410ed13cSYotam Gigi MLXFW_MFA2_TLV(component_descriptor, struct mlxfw_mfa2_tlv_component_descriptor, 71410ed13cSYotam Gigi MLXFW_MFA2_TLV_COMPONENT_DESCRIPTOR); 72410ed13cSYotam Gigi 73410ed13cSYotam Gigi #endif 74