]>
Commit | Line | Data |
---|---|---|
b97a2a0a MB |
1 | /* |
2 | * (C) Copyright 2000-2004 | |
3 | * DENX Software Engineering | |
4 | * Wolfgang Denk, wd@denx.de | |
b97a2a0a | 5 | * |
1a459660 | 6 | * SPDX-License-Identifier: GPL-2.0+ |
b97a2a0a MB |
7 | */ |
8 | ||
89a4d6b1 PW |
9 | #ifndef _MKIIMAGE_H_ |
10 | #define _MKIIMAGE_H_ | |
11 | ||
2f8d396b | 12 | #include "os_support.h" |
b97a2a0a MB |
13 | #include <errno.h> |
14 | #include <fcntl.h> | |
15 | #include <stdio.h> | |
16 | #include <stdlib.h> | |
17 | #include <string.h> | |
b97a2a0a MB |
18 | #include <sys/stat.h> |
19 | #include <time.h> | |
20 | #include <unistd.h> | |
a6e530f0 | 21 | #include <sha1.h> |
8cf30809 | 22 | #include "fdt_host.h" |
b97a2a0a | 23 | |
89a4d6b1 | 24 | #undef MKIMAGE_DEBUG |
5dfb5213 MB |
25 | |
26 | #ifdef MKIMAGE_DEBUG | |
27 | #define debug(fmt,args...) printf (fmt ,##args) | |
28 | #else | |
29 | #define debug(fmt,args...) | |
30 | #endif /* MKIMAGE_DEBUG */ | |
31 | ||
816cb037 SG |
32 | #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) |
33 | ||
2434c66d SG |
34 | static inline void *map_sysmem(ulong paddr, unsigned long len) |
35 | { | |
36 | return (void *)(uintptr_t)paddr; | |
37 | } | |
38 | ||
39 | static inline ulong map_to_sysmem(void *ptr) | |
40 | { | |
41 | return (ulong)(uintptr_t)ptr; | |
42 | } | |
43 | ||
9d25438f BS |
44 | #define MKIMAGE_TMPFILE_SUFFIX ".tmp" |
45 | #define MKIMAGE_MAX_TMPFILE_LEN 256 | |
46 | #define MKIMAGE_DEFAULT_DTC_OPTIONS "-I dts -O dtb -p 500" | |
47 | #define MKIMAGE_MAX_DTC_CMDLINE_LEN 512 | |
48 | #define MKIMAGE_DTC "dtc" /* assume dtc is in $PATH */ | |
89a4d6b1 | 49 | |
2434c66d SG |
50 | #define IH_ARCH_DEFAULT IH_ARCH_INVALID |
51 | ||
89a4d6b1 PW |
52 | /* |
53 | * This structure defines all such variables those are initialized by | |
54 | * mkimage main core and need to be referred by image type specific | |
55 | * functions | |
56 | */ | |
57 | struct mkimage_params { | |
58 | int dflag; | |
59 | int eflag; | |
60 | int fflag; | |
61 | int lflag; | |
62 | int vflag; | |
63 | int xflag; | |
f0662105 | 64 | int skipcpy; |
89a4d6b1 PW |
65 | int os; |
66 | int arch; | |
67 | int type; | |
68 | int comp; | |
69 | char *dtc; | |
70 | unsigned int addr; | |
71 | unsigned int ep; | |
72 | char *imagename; | |
5d898a00 | 73 | char *imagename2; |
89a4d6b1 PW |
74 | char *datafile; |
75 | char *imagefile; | |
76 | char *cmdname; | |
80e4df8a | 77 | const char *keydir; /* Directory holding private keys */ |
e29495d3 | 78 | const char *keydest; /* Destination .dtb for public key */ |
4f610427 | 79 | const char *comment; /* Comment to add to signature node */ |
399c744b | 80 | int require_keys; /* 1 to mark signing keys as 'required' */ |
89a4d6b1 PW |
81 | }; |
82 | ||
83 | /* | |
84 | * image type specific variables and callback functions | |
85 | */ | |
86 | struct image_type_params { | |
87 | /* name is an identification tag string for added support */ | |
88 | char *name; | |
89 | /* | |
90 | * header size is local to the specific image type to be supported, | |
91 | * mkimage core treats this as number of bytes | |
92 | */ | |
93 | uint32_t header_size; | |
94 | /* Image type header pointer */ | |
95 | void *hdr; | |
96 | /* | |
97 | * There are several arguments that are passed on the command line | |
98 | * and are registered as flags in mkimage_params structure. | |
99 | * This callback function can be used to check the passed arguments | |
100 | * are in-lined with the image type to be supported | |
101 | * | |
102 | * Returns 1 if parameter check is successful | |
103 | */ | |
104 | int (*check_params) (struct mkimage_params *); | |
105 | /* | |
106 | * This function is used by list command (i.e. mkimage -l <filename>) | |
107 | * image type verification code must be put here | |
108 | * | |
109 | * Returns 0 if image header verification is successful | |
110 | * otherwise, returns respective negative error codes | |
111 | */ | |
112 | int (*verify_header) (unsigned char *, int, struct mkimage_params *); | |
113 | /* Prints image information abstracting from image header */ | |
3a2003f6 | 114 | void (*print_header) (const void *); |
89a4d6b1 PW |
115 | /* |
116 | * The header or image contents need to be set as per image type to | |
117 | * be generated using this callback function. | |
118 | * further output file post processing (for ex. checksum calculation, | |
119 | * padding bytes etc..) can also be done in this callback function. | |
120 | */ | |
121 | void (*set_header) (void *, struct stat *, int, | |
122 | struct mkimage_params *); | |
123 | /* | |
124 | * Some image generation support for ex (default image type) supports | |
125 | * more than one type_ids, this callback function is used to check | |
126 | * whether input (-T <image_type>) is supported by registered image | |
127 | * generation/list low level code | |
128 | */ | |
129 | int (*check_image_type) (uint8_t); | |
130 | /* This callback function will be executed if fflag is defined */ | |
131 | int (*fflag_handle) (struct mkimage_params *); | |
f0662105 SB |
132 | /* |
133 | * This callback function will be executed for variable size record | |
134 | * It is expected to build this header in memory and return its length | |
9bac0bb3 SB |
135 | * and a pointer to it by using image_type_params.header_size and |
136 | * image_type_params.hdr. The return value shall indicate if an | |
137 | * additional padding should be used when copying the data image | |
138 | * by returning the padding length. | |
f0662105 SB |
139 | */ |
140 | int (*vrec_header) (struct mkimage_params *, | |
141 | struct image_type_params *); | |
89a4d6b1 PW |
142 | /* pointer to the next registered entry in linked list */ |
143 | struct image_type_params *next; | |
144 | }; | |
145 | ||
146 | /* | |
147 | * Exported functions | |
148 | */ | |
149 | void mkimage_register (struct image_type_params *tparams); | |
150 | ||
151 | /* | |
152 | * There is a c file associated with supported image type low level code | |
153 | * for ex. default_image.c, fit_image.c | |
154 | * init is the only function referred by mkimage core. | |
155 | * to avoid a single lined header file, you can define them here | |
156 | * | |
157 | * Supported image types init functions | |
158 | */ | |
5d898a00 SX |
159 | void pbl_load_uboot(int fd, struct mkimage_params *mparams); |
160 | void init_pbl_image_type(void); | |
4962e38e | 161 | void init_ais_image_type(void); |
aa0c7a86 | 162 | void init_kwb_image_type (void); |
8edcde5e | 163 | void init_imx_image_type (void); |
bce88370 | 164 | void init_mxs_image_type(void); |
89a4d6b1 PW |
165 | void init_default_image_type (void); |
166 | void init_fit_image_type (void); | |
7816f2cf | 167 | void init_ubl_image_type(void); |
3decb14a | 168 | void init_omap_image_type(void); |
89a4d6b1 PW |
169 | |
170 | #endif /* _MKIIMAGE_H_ */ |