]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - tools/imagetool.h
Merge git://git.denx.de/u-boot-arc
[people/ms/u-boot.git] / tools / imagetool.h
index f35dec71c7190a4b82e817315e998c561f5e064a..a8d505423b87ba0450f775a507e12d58d728cca3 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
+#include <sys/types.h>
 #include <time.h>
 #include <unistd.h>
 #include <u-boot/sha1.h>
 
-/* 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 <linker_lists.h>
-#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 <mach-o/getsect.h>
+
+#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_ */