162306a36Sopenharmony_ci/* SPDX-License-Identifier: MIT */ 262306a36Sopenharmony_ci#ifndef __NVFW_LS_H__ 362306a36Sopenharmony_ci#define __NVFW_LS_H__ 462306a36Sopenharmony_ci#include <core/os.h> 562306a36Sopenharmony_cistruct nvkm_subdev; 662306a36Sopenharmony_ci 762306a36Sopenharmony_cistruct nvfw_ls_desc_head { 862306a36Sopenharmony_ci u32 descriptor_size; 962306a36Sopenharmony_ci u32 image_size; 1062306a36Sopenharmony_ci u32 tools_version; 1162306a36Sopenharmony_ci u32 app_version; 1262306a36Sopenharmony_ci char date[64]; 1362306a36Sopenharmony_ci u32 bootloader_start_offset; 1462306a36Sopenharmony_ci u32 bootloader_size; 1562306a36Sopenharmony_ci u32 bootloader_imem_offset; 1662306a36Sopenharmony_ci u32 bootloader_entry_point; 1762306a36Sopenharmony_ci u32 app_start_offset; 1862306a36Sopenharmony_ci u32 app_size; 1962306a36Sopenharmony_ci u32 app_imem_offset; 2062306a36Sopenharmony_ci u32 app_imem_entry; 2162306a36Sopenharmony_ci u32 app_dmem_offset; 2262306a36Sopenharmony_ci u32 app_resident_code_offset; 2362306a36Sopenharmony_ci u32 app_resident_code_size; 2462306a36Sopenharmony_ci u32 app_resident_data_offset; 2562306a36Sopenharmony_ci u32 app_resident_data_size; 2662306a36Sopenharmony_ci}; 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistruct nvfw_ls_desc { 2962306a36Sopenharmony_ci struct nvfw_ls_desc_head head; 3062306a36Sopenharmony_ci u32 nb_overlays; 3162306a36Sopenharmony_ci struct { 3262306a36Sopenharmony_ci u32 start; 3362306a36Sopenharmony_ci u32 size; 3462306a36Sopenharmony_ci } load_ovl[64]; 3562306a36Sopenharmony_ci u32 compressed; 3662306a36Sopenharmony_ci}; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ciconst struct nvfw_ls_desc *nvfw_ls_desc(struct nvkm_subdev *, const void *); 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistruct nvfw_ls_desc_v1 { 4162306a36Sopenharmony_ci struct nvfw_ls_desc_head head; 4262306a36Sopenharmony_ci u32 nb_imem_overlays; 4362306a36Sopenharmony_ci u32 nb_dmem_overlays; 4462306a36Sopenharmony_ci struct { 4562306a36Sopenharmony_ci u32 start; 4662306a36Sopenharmony_ci u32 size; 4762306a36Sopenharmony_ci } load_ovl[64]; 4862306a36Sopenharmony_ci u32 compressed; 4962306a36Sopenharmony_ci}; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ciconst struct nvfw_ls_desc_v1 * 5262306a36Sopenharmony_cinvfw_ls_desc_v1(struct nvkm_subdev *, const void *); 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_cistruct nvfw_ls_desc_v2 { 5562306a36Sopenharmony_ci u32 descriptor_size; 5662306a36Sopenharmony_ci u32 image_size; 5762306a36Sopenharmony_ci u32 tools_version; 5862306a36Sopenharmony_ci u32 app_version; 5962306a36Sopenharmony_ci char date[64]; 6062306a36Sopenharmony_ci u32 secure_bootloader; 6162306a36Sopenharmony_ci u32 bootloader_start_offset; 6262306a36Sopenharmony_ci u32 bootloader_size; 6362306a36Sopenharmony_ci u32 bootloader_imem_offset; 6462306a36Sopenharmony_ci u32 bootloader_entry_point; 6562306a36Sopenharmony_ci u32 app_start_offset; 6662306a36Sopenharmony_ci u32 app_size; 6762306a36Sopenharmony_ci u32 app_imem_offset; 6862306a36Sopenharmony_ci u32 app_imem_entry; 6962306a36Sopenharmony_ci u32 app_dmem_offset; 7062306a36Sopenharmony_ci u32 app_resident_code_offset; 7162306a36Sopenharmony_ci u32 app_resident_code_size; 7262306a36Sopenharmony_ci u32 app_resident_data_offset; 7362306a36Sopenharmony_ci u32 app_resident_data_size; 7462306a36Sopenharmony_ci u32 nb_imem_overlays; 7562306a36Sopenharmony_ci u32 nb_dmem_overlays; 7662306a36Sopenharmony_ci struct { 7762306a36Sopenharmony_ci u32 start; 7862306a36Sopenharmony_ci u32 size; 7962306a36Sopenharmony_ci } load_ovl[64]; 8062306a36Sopenharmony_ci}; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ciconst struct nvfw_ls_desc_v2 *nvfw_ls_desc_v2(struct nvkm_subdev *, const void *); 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_cistruct nvfw_ls_hsbl_bin_hdr { 8562306a36Sopenharmony_ci u32 bin_magic; 8662306a36Sopenharmony_ci u32 bin_ver; 8762306a36Sopenharmony_ci u32 bin_size; 8862306a36Sopenharmony_ci u32 header_offset; 8962306a36Sopenharmony_ci}; 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ciconst struct nvfw_ls_hsbl_bin_hdr *nvfw_ls_hsbl_bin_hdr(struct nvkm_subdev *, const void *); 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_cistruct nvfw_ls_hsbl_hdr { 9462306a36Sopenharmony_ci u32 sig_prod_offset; 9562306a36Sopenharmony_ci u32 sig_prod_size; 9662306a36Sopenharmony_ci u32 patch_loc; 9762306a36Sopenharmony_ci u32 patch_sig; 9862306a36Sopenharmony_ci u32 meta_data_offset; 9962306a36Sopenharmony_ci u32 meta_data_size; 10062306a36Sopenharmony_ci u32 num_sig; 10162306a36Sopenharmony_ci}; 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ciconst struct nvfw_ls_hsbl_hdr *nvfw_ls_hsbl_hdr(struct nvkm_subdev *, const void *); 10462306a36Sopenharmony_ci#endif 105