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