1/* SPDX-License-Identifier: MIT */
2#ifndef __NVFW_LS_H__
3#define __NVFW_LS_H__
4#include <core/os.h>
5struct nvkm_subdev;
6
7struct nvfw_ls_desc_head {
8	u32 descriptor_size;
9	u32 image_size;
10	u32 tools_version;
11	u32 app_version;
12	char date[64];
13	u32 bootloader_start_offset;
14	u32 bootloader_size;
15	u32 bootloader_imem_offset;
16	u32 bootloader_entry_point;
17	u32 app_start_offset;
18	u32 app_size;
19	u32 app_imem_offset;
20	u32 app_imem_entry;
21	u32 app_dmem_offset;
22	u32 app_resident_code_offset;
23	u32 app_resident_code_size;
24	u32 app_resident_data_offset;
25	u32 app_resident_data_size;
26};
27
28struct nvfw_ls_desc {
29	struct nvfw_ls_desc_head head;
30	u32 nb_overlays;
31	struct {
32		u32 start;
33		u32 size;
34	} load_ovl[64];
35	u32 compressed;
36};
37
38const struct nvfw_ls_desc *nvfw_ls_desc(struct nvkm_subdev *, const void *);
39
40struct nvfw_ls_desc_v1 {
41	struct nvfw_ls_desc_head head;
42	u32 nb_imem_overlays;
43	u32 nb_dmem_overlays;
44	struct {
45		u32 start;
46		u32 size;
47	} load_ovl[64];
48	u32 compressed;
49};
50
51const struct nvfw_ls_desc_v1 *
52nvfw_ls_desc_v1(struct nvkm_subdev *, const void *);
53
54struct nvfw_ls_desc_v2 {
55	u32 descriptor_size;
56	u32 image_size;
57	u32 tools_version;
58	u32 app_version;
59	char date[64];
60	u32 secure_bootloader;
61	u32 bootloader_start_offset;
62	u32 bootloader_size;
63	u32 bootloader_imem_offset;
64	u32 bootloader_entry_point;
65	u32 app_start_offset;
66	u32 app_size;
67	u32 app_imem_offset;
68	u32 app_imem_entry;
69	u32 app_dmem_offset;
70	u32 app_resident_code_offset;
71	u32 app_resident_code_size;
72	u32 app_resident_data_offset;
73	u32 app_resident_data_size;
74	u32 nb_imem_overlays;
75	u32 nb_dmem_overlays;
76	struct {
77		u32 start;
78		u32 size;
79	} load_ovl[64];
80};
81
82const struct nvfw_ls_desc_v2 *nvfw_ls_desc_v2(struct nvkm_subdev *, const void *);
83
84struct nvfw_ls_hsbl_bin_hdr {
85	u32 bin_magic;
86	u32 bin_ver;
87	u32 bin_size;
88	u32 header_offset;
89};
90
91const struct nvfw_ls_hsbl_bin_hdr *nvfw_ls_hsbl_bin_hdr(struct nvkm_subdev *, const void *);
92
93struct nvfw_ls_hsbl_hdr {
94	u32 sig_prod_offset;
95	u32 sig_prod_size;
96	u32 patch_loc;
97	u32 patch_sig;
98	u32 meta_data_offset;
99	u32 meta_data_size;
100	u32 num_sig;
101};
102
103const struct nvfw_ls_hsbl_hdr *nvfw_ls_hsbl_hdr(struct nvkm_subdev *, const void *);
104#endif
105