X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=tools%2Fimagetool.h;h=a8d505423b87ba0450f775a507e12d58d728cca3;hb=93a51d301ad051ec6f8c6016862c7719b8b434d3;hp=f35dec71c7190a4b82e817315e998c561f5e064a;hpb=be8ddad9c85935569a00b72f92cdc34e4386850f;p=people%2Fms%2Fu-boot.git diff --git a/tools/imagetool.h b/tools/imagetool.h index f35dec71c7..a8d505423b 100644 --- a/tools/imagetool.h +++ b/tools/imagetool.h @@ -16,25 +16,24 @@ #include #include #include +#include #include #include #include -/* define __KERNEL__ in order to get the definitions - * required by the linker list. This is probably not - * the best way to do this */ -#ifndef __KERNEL__ -#define __KERNEL__ -#include -#undef __KERNEL__ -#endif /* __KERNEL__ */ - #include "fdt_host.h" #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #define IH_ARCH_DEFAULT IH_ARCH_INVALID +/* Information about a file that needs to be placed into the FIT */ +struct content_info { + struct content_info *next; + int type; /* File type (IH_TYPE_...) */ + const char *fname; +}; + /* * This structure defines all such variables those are initialized by * mkimage and dumpimage main core and need to be referred by image @@ -67,6 +66,17 @@ struct image_tool_params { const char *keydest; /* Destination .dtb for public key */ const char *comment; /* Comment to add to signature node */ int require_keys; /* 1 to mark signing keys as 'required' */ + int file_size; /* Total size of output file */ + int orig_file_size; /* Original size for file before padding */ + bool auto_its; /* Automatically create the .its file */ + int fit_image_type; /* Image type to put into the FIT */ + char *fit_ramdisk; /* Ramdisk file to include */ + struct content_info *content_head; /* List of files to include */ + struct content_info *content_tail; + bool external_data; /* Store data outside the FIT */ + bool quiet; /* Don't output text in normal operation */ + unsigned int external_offset; /* Add padding to external data */ + const char *engine_id; /* Engine to use for signing */ }; /* @@ -186,6 +196,34 @@ int imagetool_save_subimage( ulong file_data, ulong file_len); +/** + * imagetool_get_filesize() - Utility function to obtain the size of a file + * + * This function prints a message if an error occurs, showing the error that + * was obtained. + * + * @params: mkimage parameters + * @fname: filename to check + * @return size of file, or -ve value on error + */ +int imagetool_get_filesize(struct image_tool_params *params, const char *fname); + +/** + * imagetool_get_source_date() - Get timestamp for build output. + * + * Gets a timestamp for embedding it in a build output. If set + * SOURCE_DATE_EPOCH is used. Else the given fallback value is returned. Prints + * an error message if SOURCE_DATE_EPOCH contains an invalid value and returns + * 0. + * + * @params: mkimage parameters + * @fallback: timestamp to use if SOURCE_DATE_EPOCH isn't set + * @return timestamp based on SOURCE_DATE_EPOCH + */ +time_t imagetool_get_source_date( + struct image_tool_params *params, + time_t fallback); + /* * There is a c file associated with supported image type low level code * for ex. default_image.c, fit_image.c @@ -194,6 +232,46 @@ int imagetool_save_subimage( void pbl_load_uboot(int fd, struct image_tool_params *mparams); +#define ___cat(a, b) a ## b +#define __cat(a, b) ___cat(a, b) + +/* we need some special handling for this host tool running eventually on + * Darwin. The Mach-O section handling is a bit different than ELF section + * handling. The differnces in detail are: + * a) we have segments which have sections + * b) we need a API call to get the respective section symbols */ +#if defined(__MACH__) +#include + +#define INIT_SECTION(name) do { \ + unsigned long name ## _len; \ + char *__cat(pstart_, name) = getsectdata("__TEXT", \ + #name, &__cat(name, _len)); \ + char *__cat(pstop_, name) = __cat(pstart_, name) + \ + __cat(name, _len); \ + __cat(__start_, name) = (void *)__cat(pstart_, name); \ + __cat(__stop_, name) = (void *)__cat(pstop_, name); \ + } while (0) +#define SECTION(name) __attribute__((section("__TEXT, " #name))) + +struct image_type_params **__start_image_type, **__stop_image_type; +#else +#define INIT_SECTION(name) /* no-op for ELF */ +#define SECTION(name) __attribute__((section(#name))) + +/* We construct a table of pointers in an ELF section (pointers generally + * go unpadded by gcc). ld creates boundary syms for us. */ +extern struct image_type_params *__start_image_type[], *__stop_image_type[]; +#endif /* __MACH__ */ + +#if !defined(__used) +# if __GNUC__ == 3 && __GNUC_MINOR__ < 3 +# define __used __attribute__((__unused__)) +# else +# define __used __attribute__((__used__)) +# endif +#endif + #define U_BOOT_IMAGE_TYPE( \ _id, \ _name, \ @@ -208,7 +286,8 @@ void pbl_load_uboot(int fd, struct image_tool_params *mparams); _fflag_handle, \ _vrec_header \ ) \ - ll_entry_declare(struct image_type_params, _id, image_type) = { \ + static struct image_type_params __cat(image_type_, _id) = \ + { \ .name = _name, \ .header_size = _header_size, \ .hdr = _header, \ @@ -220,6 +299,8 @@ void pbl_load_uboot(int fd, struct image_tool_params *mparams); .check_image_type = _check_image_type, \ .fflag_handle = _fflag_handle, \ .vrec_header = _vrec_header \ - } + }; \ + static struct image_type_params *SECTION(image_type) __used \ + __cat(image_type_ptr_, _id) = &__cat(image_type_, _id) #endif /* _IMAGETOOL_H_ */