xref: /rk3399_rockchip-uboot/tools/imagetool.c (revision 0ca6691c2ec20ff264d882854c339795579991f5)
1 /*
2  * (C) Copyright 2013
3  *
4  * Written by Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
5  *
6  * SPDX-License-Identifier:	GPL-2.0+
7  */
8 
9 #include "imagetool.h"
10 
11 #include <image.h>
12 
13 /*
14  * Callback function to register a image type within a tool
15  */
16 static imagetool_register_t register_func;
17 
18 /*
19  * register_image_tool -
20  *
21  * The tool provides its own registration function in order to all image
22  * types initialize themselves.
23  */
24 void register_image_tool(imagetool_register_t image_register)
25 {
26 	/*
27 	 * Save the image tool callback function. It will be used to register
28 	 * image types within that tool
29 	 */
30 	register_func = image_register;
31 
32 	/* Init ATMEL ROM Boot Image generation/list support */
33 	init_atmel_image_type();
34 	/* Init Freescale PBL Boot image generation/list support */
35 	init_pbl_image_type();
36 	/* Init Kirkwood Boot image generation/list support */
37 	init_kwb_image_type();
38 	/* Init Freescale imx Boot image generation/list support */
39 	init_imx_image_type();
40 	/* Init Freescale mxs Boot image generation/list support */
41 	init_mxs_image_type();
42 	/* Init FIT image generation/list support */
43 	init_fit_image_type();
44 	/* Init TI OMAP Boot image generation/list support */
45 	init_omap_image_type();
46 	/* Init Default image generation/list support */
47 	init_default_image_type();
48 	/* Init Davinci UBL support */
49 	init_ubl_image_type();
50 	/* Init Davinci AIS support */
51 	init_ais_image_type();
52 	/* Init Altera SOCFPGA support */
53 	init_socfpga_image_type();
54 	/* Init TI Keystone boot image generation/list support */
55 	init_gpimage_type();
56 }
57 
58 /*
59  * register_image_type -
60  *
61  * Register a image type within a tool
62  */
63 void register_image_type(struct image_type_params *tparams)
64 {
65 	register_func(tparams);
66 }
67 
68 struct image_type_params *imagetool_get_type(
69 	int type,
70 	struct image_type_params *tparams)
71 {
72 	struct image_type_params *curr;
73 
74 	for (curr = tparams; curr != NULL; curr = curr->next) {
75 		if (curr->check_image_type) {
76 			if (!curr->check_image_type(type))
77 				return curr;
78 		}
79 	}
80 	return NULL;
81 }
82 
83 int imagetool_verify_print_header(
84 	void *ptr,
85 	struct stat *sbuf,
86 	struct image_type_params *tparams,
87 	struct image_tool_params *params)
88 {
89 	int retval = -1;
90 	struct image_type_params *curr;
91 
92 	for (curr = tparams; curr != NULL; curr = curr->next) {
93 		if (curr->verify_header) {
94 			retval = curr->verify_header((unsigned char *)ptr,
95 						     sbuf->st_size, params);
96 
97 			if (retval == 0) {
98 				/*
99 				 * Print the image information  if verify is
100 				 * successful
101 				 */
102 				if (curr->print_header) {
103 					curr->print_header(ptr);
104 				} else {
105 					fprintf(stderr,
106 						"%s: print_header undefined for %s\n",
107 						params->cmdname, curr->name);
108 				}
109 				break;
110 			}
111 		}
112 	}
113 
114 	return retval;
115 }
116