X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=include%2Fimage.h;h=aa9daa2debdb2096bc7ae5b7be737da20dcafd1a;hb=402d17fc4c406fe49a7b2d94aee640f389a68738;hp=c31e862d32252da2bb2356e0f8e6d3f32af0344a;hpb=55b0a39314562087143f439ecae57379b97db9aa;p=karo-tx-uboot.git diff --git a/include/image.h b/include/image.h index c31e862d32..aa9daa2deb 100644 --- a/include/image.h +++ b/include/image.h @@ -106,6 +106,9 @@ #define IH_ARCH_BLACKFIN 16 /* Blackfin */ #define IH_ARCH_AVR32 17 /* AVR32 */ #define IH_ARCH_ST200 18 /* STMicroelectronics ST200 */ +#define IH_ARCH_SANDBOX 19 /* Sandbox architecture (test only) */ +#define IH_ARCH_NDS32 20 /* ANDES Technology - NDS32 */ +#define IH_ARCH_OPENRISC 21 /* OpenRISC 1000 */ /* * Image Types @@ -157,6 +160,10 @@ #define IH_TYPE_FLATDT 8 /* Binary Flat Device Tree Blob */ #define IH_TYPE_KWBIMAGE 9 /* Kirkwood Boot Image */ #define IH_TYPE_IMXIMAGE 10 /* Freescale IMXBoot Image */ +#define IH_TYPE_UBLIMAGE 11 /* Davinci UBL Image */ +#define IH_TYPE_OMAPIMAGE 12 /* TI OMAP Config Header Image */ +#define IH_TYPE_AISIMAGE 13 /* TI Davinci AIS Image */ +#define IH_TYPE_KERNEL_NOLOAD 14 /* OS Kernel Image, can run from any load address */ /* * Compression Types @@ -261,6 +268,8 @@ typedef struct bootm_headers { #endif } bootm_headers_t; +extern bootm_headers_t images; + /* * Some systems (for example LWMON) have very short watchdog periods; * we must make sure to split long operations like memmove() or @@ -309,15 +318,15 @@ int get_table_entry_id(const table_entry_t *table, */ char *get_table_entry_name(const table_entry_t *table, char *msg, int id); -const char *genimg_get_os_name (uint8_t os); -const char *genimg_get_arch_name (uint8_t arch); -const char *genimg_get_type_name (uint8_t type); -const char *genimg_get_comp_name (uint8_t comp); -int genimg_get_os_id (const char *name); -int genimg_get_arch_id (const char *name); -int genimg_get_type_id (const char *name); -int genimg_get_comp_id (const char *name); -void genimg_print_size (uint32_t size); +const char *genimg_get_os_name(uint8_t os); +const char *genimg_get_arch_name(uint8_t arch); +const char *genimg_get_type_name(uint8_t type); +const char *genimg_get_comp_name(uint8_t comp); +int genimg_get_os_id(const char *name); +int genimg_get_arch_id(const char *name); +int genimg_get_type_id(const char *name); +int genimg_get_comp_id(const char *name); +void genimg_print_size(uint32_t size); #ifndef USE_HOSTCC /* Image format types, returned by _get_format() routine */ @@ -325,72 +334,72 @@ void genimg_print_size (uint32_t size); #define IMAGE_FORMAT_LEGACY 0x01 /* legacy image_header based format */ #define IMAGE_FORMAT_FIT 0x02 /* new, libfdt based format */ -int genimg_get_format (void *img_addr); -int genimg_has_config (bootm_headers_t *images); -ulong genimg_get_image (ulong img_addr); +int genimg_get_format(void *img_addr); +int genimg_has_config(bootm_headers_t *images); +ulong genimg_get_image(ulong img_addr); -int boot_get_ramdisk (int argc, char * const argv[], bootm_headers_t *images, +int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images, uint8_t arch, ulong *rd_start, ulong *rd_end); #ifdef CONFIG_OF_LIBFDT -int boot_get_fdt (int flag, int argc, char * const argv[], bootm_headers_t *images, - char **of_flat_tree, ulong *of_size); +int boot_get_fdt(int flag, int argc, char * const argv[], + bootm_headers_t *images, char **of_flat_tree, ulong *of_size); void boot_fdt_add_mem_rsv_regions(struct lmb *lmb, void *fdt_blob); -int boot_relocate_fdt (struct lmb *lmb, char **of_flat_tree, ulong *of_size); +int boot_relocate_fdt(struct lmb *lmb, char **of_flat_tree, ulong *of_size); #endif #ifdef CONFIG_SYS_BOOT_RAMDISK_HIGH -int boot_ramdisk_high (struct lmb *lmb, ulong rd_data, ulong rd_len, +int boot_ramdisk_high(struct lmb *lmb, ulong rd_data, ulong rd_len, ulong *initrd_start, ulong *initrd_end); #endif /* CONFIG_SYS_BOOT_RAMDISK_HIGH */ #ifdef CONFIG_SYS_BOOT_GET_CMDLINE -int boot_get_cmdline (struct lmb *lmb, ulong *cmd_start, ulong *cmd_end); +int boot_get_cmdline(struct lmb *lmb, ulong *cmd_start, ulong *cmd_end); #endif /* CONFIG_SYS_BOOT_GET_CMDLINE */ #ifdef CONFIG_SYS_BOOT_GET_KBD -int boot_get_kbd (struct lmb *lmb, bd_t **kbd); +int boot_get_kbd(struct lmb *lmb, bd_t **kbd); #endif /* CONFIG_SYS_BOOT_GET_KBD */ #endif /* !USE_HOSTCC */ /*******************************************************************/ /* Legacy format specific code (prefixed with image_) */ /*******************************************************************/ -static inline uint32_t image_get_header_size (void) +static inline uint32_t image_get_header_size(void) { - return (sizeof (image_header_t)); + return (sizeof(image_header_t)); } #define image_get_hdr_l(f) \ static inline uint32_t image_get_##f(const image_header_t *hdr) \ { \ - return uimage_to_cpu (hdr->ih_##f); \ + return uimage_to_cpu(hdr->ih_##f); \ } -image_get_hdr_l (magic) /* image_get_magic */ -image_get_hdr_l (hcrc) /* image_get_hcrc */ -image_get_hdr_l (time) /* image_get_time */ -image_get_hdr_l (size) /* image_get_size */ -image_get_hdr_l (load) /* image_get_load */ -image_get_hdr_l (ep) /* image_get_ep */ -image_get_hdr_l (dcrc) /* image_get_dcrc */ +image_get_hdr_l(magic) /* image_get_magic */ +image_get_hdr_l(hcrc) /* image_get_hcrc */ +image_get_hdr_l(time) /* image_get_time */ +image_get_hdr_l(size) /* image_get_size */ +image_get_hdr_l(load) /* image_get_load */ +image_get_hdr_l(ep) /* image_get_ep */ +image_get_hdr_l(dcrc) /* image_get_dcrc */ #define image_get_hdr_b(f) \ static inline uint8_t image_get_##f(const image_header_t *hdr) \ { \ return hdr->ih_##f; \ } -image_get_hdr_b (os) /* image_get_os */ -image_get_hdr_b (arch) /* image_get_arch */ -image_get_hdr_b (type) /* image_get_type */ -image_get_hdr_b (comp) /* image_get_comp */ +image_get_hdr_b(os) /* image_get_os */ +image_get_hdr_b(arch) /* image_get_arch */ +image_get_hdr_b(type) /* image_get_type */ +image_get_hdr_b(comp) /* image_get_comp */ -static inline char *image_get_name (const image_header_t *hdr) +static inline char *image_get_name(const image_header_t *hdr) { return (char *)hdr->ih_name; } -static inline uint32_t image_get_data_size (const image_header_t *hdr) +static inline uint32_t image_get_data_size(const image_header_t *hdr) { - return image_get_size (hdr); + return image_get_size(hdr); } /** @@ -404,112 +413,88 @@ static inline uint32_t image_get_data_size (const image_header_t *hdr) * returns: * image payload data start address */ -static inline ulong image_get_data (const image_header_t *hdr) +static inline ulong image_get_data(const image_header_t *hdr) { - return ((ulong)hdr + image_get_header_size ()); + return ((ulong)hdr + image_get_header_size()); } -static inline uint32_t image_get_image_size (const image_header_t *hdr) +static inline uint32_t image_get_image_size(const image_header_t *hdr) { - return (image_get_size (hdr) + image_get_header_size ()); + return (image_get_size(hdr) + image_get_header_size()); } -static inline ulong image_get_image_end (const image_header_t *hdr) +static inline ulong image_get_image_end(const image_header_t *hdr) { - return ((ulong)hdr + image_get_image_size (hdr)); + return ((ulong)hdr + image_get_image_size(hdr)); } #define image_set_hdr_l(f) \ static inline void image_set_##f(image_header_t *hdr, uint32_t val) \ { \ - hdr->ih_##f = cpu_to_uimage (val); \ + hdr->ih_##f = cpu_to_uimage(val); \ } -image_set_hdr_l (magic) /* image_set_magic */ -image_set_hdr_l (hcrc) /* image_set_hcrc */ -image_set_hdr_l (time) /* image_set_time */ -image_set_hdr_l (size) /* image_set_size */ -image_set_hdr_l (load) /* image_set_load */ -image_set_hdr_l (ep) /* image_set_ep */ -image_set_hdr_l (dcrc) /* image_set_dcrc */ +image_set_hdr_l(magic) /* image_set_magic */ +image_set_hdr_l(hcrc) /* image_set_hcrc */ +image_set_hdr_l(time) /* image_set_time */ +image_set_hdr_l(size) /* image_set_size */ +image_set_hdr_l(load) /* image_set_load */ +image_set_hdr_l(ep) /* image_set_ep */ +image_set_hdr_l(dcrc) /* image_set_dcrc */ #define image_set_hdr_b(f) \ static inline void image_set_##f(image_header_t *hdr, uint8_t val) \ { \ hdr->ih_##f = val; \ } -image_set_hdr_b (os) /* image_set_os */ -image_set_hdr_b (arch) /* image_set_arch */ -image_set_hdr_b (type) /* image_set_type */ -image_set_hdr_b (comp) /* image_set_comp */ +image_set_hdr_b(os) /* image_set_os */ +image_set_hdr_b(arch) /* image_set_arch */ +image_set_hdr_b(type) /* image_set_type */ +image_set_hdr_b(comp) /* image_set_comp */ -static inline void image_set_name (image_header_t *hdr, const char *name) +static inline void image_set_name(image_header_t *hdr, const char *name) { - strncpy (image_get_name (hdr), name, IH_NMLEN); + strncpy(image_get_name(hdr), name, IH_NMLEN); } -int image_check_hcrc (const image_header_t *hdr); -int image_check_dcrc (const image_header_t *hdr); +int image_check_hcrc(const image_header_t *hdr); +int image_check_dcrc(const image_header_t *hdr); #ifndef USE_HOSTCC -int getenv_yesno (char *var); +int getenv_yesno(char *var); ulong getenv_bootm_low(void); phys_size_t getenv_bootm_size(void); phys_size_t getenv_bootm_mapsize(void); -void memmove_wd (void *to, void *from, size_t len, ulong chunksz); +void memmove_wd(void *to, void *from, size_t len, ulong chunksz); #endif -static inline int image_check_magic (const image_header_t *hdr) +static inline int image_check_magic(const image_header_t *hdr) { - return (image_get_magic (hdr) == IH_MAGIC); + return (image_get_magic(hdr) == IH_MAGIC); } -static inline int image_check_type (const image_header_t *hdr, uint8_t type) +static inline int image_check_type(const image_header_t *hdr, uint8_t type) { - return (image_get_type (hdr) == type); + return (image_get_type(hdr) == type); } -static inline int image_check_arch (const image_header_t *hdr, uint8_t arch) +static inline int image_check_arch(const image_header_t *hdr, uint8_t arch) { - return (image_get_arch (hdr) == arch); + return (image_get_arch(hdr) == arch); } -static inline int image_check_os (const image_header_t *hdr, uint8_t os) +static inline int image_check_os(const image_header_t *hdr, uint8_t os) { - return (image_get_os (hdr) == os); + return (image_get_os(hdr) == os); } -ulong image_multi_count (const image_header_t *hdr); -void image_multi_getimg (const image_header_t *hdr, ulong idx, +ulong image_multi_count(const image_header_t *hdr); +void image_multi_getimg(const image_header_t *hdr, ulong idx, ulong *data, ulong *len); -void image_print_contents (const void *hdr); +void image_print_contents(const void *hdr); #ifndef USE_HOSTCC -static inline int image_check_target_arch (const image_header_t *hdr) +static inline int image_check_target_arch(const image_header_t *hdr) { -#if defined(__ARM__) - if (!image_check_arch (hdr, IH_ARCH_ARM)) -#elif defined(__avr32__) - if (!image_check_arch (hdr, IH_ARCH_AVR32)) -#elif defined(__bfin__) - if (!image_check_arch (hdr, IH_ARCH_BLACKFIN)) -#elif defined(__I386__) - if (!image_check_arch (hdr, IH_ARCH_I386)) -#elif defined(__M68K__) - if (!image_check_arch (hdr, IH_ARCH_M68K)) -#elif defined(__microblaze__) - if (!image_check_arch (hdr, IH_ARCH_MICROBLAZE)) -#elif defined(__mips__) - if (!image_check_arch (hdr, IH_ARCH_MIPS)) -#elif defined(__nios2__) - if (!image_check_arch (hdr, IH_ARCH_NIOS2)) -#elif defined(__PPC__) - if (!image_check_arch (hdr, IH_ARCH_PPC)) -#elif defined(__sh__) - if (!image_check_arch (hdr, IH_ARCH_SH)) -#elif defined(__sparc__) - if (!image_check_arch (hdr, IH_ARCH_SPARC)) -#else -# error Unknown CPU type +#ifndef IH_ARCH_DEFAULT +# error "please define IH_ARCH_DEFAULT in your arch asm/u-boot.h" #endif - return 0; - - return 1; + return image_check_arch(hdr, IH_ARCH_DEFAULT); } #endif /* USE_HOSTCC */ @@ -546,14 +531,14 @@ static inline int image_check_target_arch (const image_header_t *hdr) #define FIT_MAX_HASH_LEN 20 /* max(crc32_len(4), sha1_len(20)) */ /* cmdline argument format parsing */ -inline int fit_parse_conf (const char *spec, ulong addr_curr, +int fit_parse_conf(const char *spec, ulong addr_curr, ulong *addr, const char **conf_name); -inline int fit_parse_subimage (const char *spec, ulong addr_curr, +int fit_parse_subimage(const char *spec, ulong addr_curr, ulong *addr, const char **image_name); -void fit_print_contents (const void *fit); -void fit_image_print (const void *fit, int noffset, const char *p); -void fit_image_print_hash (const void *fit, int noffset, const char *p); +void fit_print_contents(const void *fit); +void fit_image_print(const void *fit, int noffset, const char *p); +void fit_image_print_hash(const void *fit, int noffset, const char *p); /** * fit_get_end - get FIT image size @@ -562,9 +547,9 @@ void fit_image_print_hash (const void *fit, int noffset, const char *p); * returns: * size of the FIT image (blob) in memory */ -static inline ulong fit_get_size (const void *fit) +static inline ulong fit_get_size(const void *fit) { - return fdt_totalsize (fit); + return fdt_totalsize(fit); } /** @@ -574,9 +559,9 @@ static inline ulong fit_get_size (const void *fit) * returns: * end address of the FIT image (blob) in memory */ -static inline ulong fit_get_end (const void *fit) +static inline ulong fit_get_end(const void *fit) { - return (ulong)fit + fdt_totalsize (fit); + return (ulong)fit + fdt_totalsize(fit); } /** @@ -587,90 +572,63 @@ static inline ulong fit_get_end (const void *fit) * NULL, on error * pointer to node name, on success */ -static inline const char *fit_get_name (const void *fit_hdr, +static inline const char *fit_get_name(const void *fit_hdr, int noffset, int *len) { - return fdt_get_name (fit_hdr, noffset, len); + return fdt_get_name(fit_hdr, noffset, len); } -int fit_get_desc (const void *fit, int noffset, char **desc); -int fit_get_timestamp (const void *fit, int noffset, time_t *timestamp); - -int fit_image_get_node (const void *fit, const char *image_uname); -int fit_image_get_os (const void *fit, int noffset, uint8_t *os); -int fit_image_get_arch (const void *fit, int noffset, uint8_t *arch); -int fit_image_get_type (const void *fit, int noffset, uint8_t *type); -int fit_image_get_comp (const void *fit, int noffset, uint8_t *comp); -int fit_image_get_load (const void *fit, int noffset, ulong *load); -int fit_image_get_entry (const void *fit, int noffset, ulong *entry); -int fit_image_get_data (const void *fit, int noffset, +int fit_get_desc(const void *fit, int noffset, char **desc); +int fit_get_timestamp(const void *fit, int noffset, time_t *timestamp); + +int fit_image_get_node(const void *fit, const char *image_uname); +int fit_image_get_os(const void *fit, int noffset, uint8_t *os); +int fit_image_get_arch(const void *fit, int noffset, uint8_t *arch); +int fit_image_get_type(const void *fit, int noffset, uint8_t *type); +int fit_image_get_comp(const void *fit, int noffset, uint8_t *comp); +int fit_image_get_load(const void *fit, int noffset, ulong *load); +int fit_image_get_entry(const void *fit, int noffset, ulong *entry); +int fit_image_get_data(const void *fit, int noffset, const void **data, size_t *size); -int fit_image_hash_get_algo (const void *fit, int noffset, char **algo); -int fit_image_hash_get_value (const void *fit, int noffset, uint8_t **value, +int fit_image_hash_get_algo(const void *fit, int noffset, char **algo); +int fit_image_hash_get_value(const void *fit, int noffset, uint8_t **value, int *value_len); -int fit_set_timestamp (void *fit, int noffset, time_t timestamp); -int fit_set_hashes (void *fit); -int fit_image_set_hashes (void *fit, int image_noffset); -int fit_image_hash_set_value (void *fit, int noffset, uint8_t *value, +int fit_set_timestamp(void *fit, int noffset, time_t timestamp); +int fit_set_hashes(void *fit); +int fit_image_set_hashes(void *fit, int image_noffset); +int fit_image_hash_set_value(void *fit, int noffset, uint8_t *value, int value_len); -int fit_image_check_hashes (const void *fit, int noffset); -int fit_all_image_check_hashes (const void *fit); -int fit_image_check_os (const void *fit, int noffset, uint8_t os); -int fit_image_check_arch (const void *fit, int noffset, uint8_t arch); -int fit_image_check_type (const void *fit, int noffset, uint8_t type); -int fit_image_check_comp (const void *fit, int noffset, uint8_t comp); -int fit_check_format (const void *fit); +int fit_image_check_hashes(const void *fit, int noffset); +int fit_all_image_check_hashes(const void *fit); +int fit_image_check_os(const void *fit, int noffset, uint8_t os); +int fit_image_check_arch(const void *fit, int noffset, uint8_t arch); +int fit_image_check_type(const void *fit, int noffset, uint8_t type); +int fit_image_check_comp(const void *fit, int noffset, uint8_t comp); +int fit_check_format(const void *fit); -int fit_conf_get_node (const void *fit, const char *conf_uname); -int fit_conf_get_kernel_node (const void *fit, int noffset); -int fit_conf_get_ramdisk_node (const void *fit, int noffset); -int fit_conf_get_fdt_node (const void *fit, int noffset); +int fit_conf_get_node(const void *fit, const char *conf_uname); +int fit_conf_get_kernel_node(const void *fit, int noffset); +int fit_conf_get_ramdisk_node(const void *fit, int noffset); +int fit_conf_get_fdt_node(const void *fit, int noffset); -void fit_conf_print (const void *fit, int noffset, const char *p); +void fit_conf_print(const void *fit, int noffset, const char *p); #ifndef USE_HOSTCC -static inline int fit_image_check_target_arch (const void *fdt, int node) +static inline int fit_image_check_target_arch(const void *fdt, int node) { -#if defined(__ARM__) - if (!fit_image_check_arch (fdt, node, IH_ARCH_ARM)) -#elif defined(__avr32__) - if (!fit_image_check_arch (fdt, node, IH_ARCH_AVR32)) -#elif defined(__bfin__) - if (!fit_image_check_arch (fdt, node, IH_ARCH_BLACKFIN)) -#elif defined(__I386__) - if (!fit_image_check_arch (fdt, node, IH_ARCH_I386)) -#elif defined(__M68K__) - if (!fit_image_check_arch (fdt, node, IH_ARCH_M68K)) -#elif defined(__microblaze__) - if (!fit_image_check_arch (fdt, node, IH_ARCH_MICROBLAZE)) -#elif defined(__mips__) - if (!fit_image_check_arch (fdt, node, IH_ARCH_MIPS)) -#elif defined(__nios2__) - if (!fit_image_check_arch (fdt, node, IH_ARCH_NIOS2)) -#elif defined(__PPC__) - if (!fit_image_check_arch (fdt, node, IH_ARCH_PPC)) -#elif defined(__sh__) - if (!fit_image_check_arch (fdt, node, IH_ARCH_SH)) -#elif defined(__sparc__) - if (!fit_image_check_arch (fdt, node, IH_ARCH_SPARC)) -#else -# error Unknown CPU type -#endif - return 0; - - return 1; + return fit_image_check_arch(fdt, node, IH_ARCH_DEFAULT); } #endif /* USE_HOSTCC */ #ifdef CONFIG_FIT_VERBOSE -#define fit_unsupported(msg) printf ("! %s:%d " \ +#define fit_unsupported(msg) printf("! %s:%d " \ "FIT images not supported for '%s'\n", \ __FILE__, __LINE__, (msg)) -#define fit_unsupported_reset(msg) printf ("! %s:%d " \ +#define fit_unsupported_reset(msg) printf("! %s:%d " \ "FIT images not supported for '%s' " \ "- must reset board to recover!\n", \ __FILE__, __LINE__, (msg))