xref: /arm-trusted-firmware/include/export/common/bl_common_exp.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef ARM_TRUSTED_FIRMWARE_EXPORT_COMMON_BL_COMMON_EXP_H
8*91f16700Schasinglulu #define ARM_TRUSTED_FIRMWARE_EXPORT_COMMON_BL_COMMON_EXP_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu /* EXPORT HEADER -- See include/export/README for details! -- EXPORT HEADER */
11*91f16700Schasinglulu 
12*91f16700Schasinglulu #include "ep_info_exp.h"
13*91f16700Schasinglulu #include "tbbr/tbbr_img_def_exp.h"
14*91f16700Schasinglulu 
15*91f16700Schasinglulu /*
16*91f16700Schasinglulu  * The following are used for image state attributes.
17*91f16700Schasinglulu  * Image can only be in one of the following state.
18*91f16700Schasinglulu  */
19*91f16700Schasinglulu #define IMAGE_STATE_RESET		U(0)
20*91f16700Schasinglulu #define IMAGE_STATE_COPIED		U(1)
21*91f16700Schasinglulu #define IMAGE_STATE_COPYING		U(2)
22*91f16700Schasinglulu #define IMAGE_STATE_AUTHENTICATED	U(3)
23*91f16700Schasinglulu #define IMAGE_STATE_EXECUTED		U(4)
24*91f16700Schasinglulu #define IMAGE_STATE_INTERRUPTED		U(5)
25*91f16700Schasinglulu 
26*91f16700Schasinglulu #define IMAGE_ATTRIB_SKIP_LOADING	U(0x02)
27*91f16700Schasinglulu #define IMAGE_ATTRIB_PLAT_SETUP		U(0x04)
28*91f16700Schasinglulu 
29*91f16700Schasinglulu #define INVALID_IMAGE_ID		U(0xFFFFFFFF)
30*91f16700Schasinglulu 
31*91f16700Schasinglulu #ifndef __ASSEMBLER__
32*91f16700Schasinglulu 
33*91f16700Schasinglulu /*****************************************************************************
34*91f16700Schasinglulu  * Image info binary provides information from the image loader that
35*91f16700Schasinglulu  * can be used by the firmware to manage available trusted RAM.
36*91f16700Schasinglulu  * More advanced firmware image formats can provide additional
37*91f16700Schasinglulu  * information that enables optimization or greater flexibility in the
38*91f16700Schasinglulu  * common firmware code
39*91f16700Schasinglulu  *****************************************************************************/
40*91f16700Schasinglulu typedef struct image_info {
41*91f16700Schasinglulu 	param_header_t h;
42*91f16700Schasinglulu 	uintptr_t image_base;	/* physical address of base of image */
43*91f16700Schasinglulu 	uint32_t image_size;	/* bytes read from image file */
44*91f16700Schasinglulu 	uint32_t image_max_size;
45*91f16700Schasinglulu } image_info_t;
46*91f16700Schasinglulu 
47*91f16700Schasinglulu /* BL image node in the BL image execution sequence */
48*91f16700Schasinglulu typedef struct bl_params_node {
49*91f16700Schasinglulu 	unsigned int image_id;
50*91f16700Schasinglulu 	image_info_t *image_info;
51*91f16700Schasinglulu 	entry_point_info_t *ep_info;
52*91f16700Schasinglulu 	struct bl_params_node *next_params_info;
53*91f16700Schasinglulu } bl_params_node_t;
54*91f16700Schasinglulu 
55*91f16700Schasinglulu /*
56*91f16700Schasinglulu  * BL image head node in the BL image execution sequence
57*91f16700Schasinglulu  * It is also used to pass information to next BL image.
58*91f16700Schasinglulu  */
59*91f16700Schasinglulu typedef struct bl_params {
60*91f16700Schasinglulu 	param_header_t h;
61*91f16700Schasinglulu 	bl_params_node_t *head;
62*91f16700Schasinglulu } bl_params_t;
63*91f16700Schasinglulu 
64*91f16700Schasinglulu /*****************************************************************************
65*91f16700Schasinglulu  * The image descriptor struct definition.
66*91f16700Schasinglulu  *****************************************************************************/
67*91f16700Schasinglulu typedef struct image_desc {
68*91f16700Schasinglulu 	/* Contains unique image id for the image. */
69*91f16700Schasinglulu 	unsigned int image_id;
70*91f16700Schasinglulu 	/*
71*91f16700Schasinglulu 	 * This member contains Image state information.
72*91f16700Schasinglulu 	 * Refer IMAGE_STATE_XXX defined above.
73*91f16700Schasinglulu 	 */
74*91f16700Schasinglulu 	unsigned int state;
75*91f16700Schasinglulu 	uint32_t copied_size;	/* image size copied in blocks */
76*91f16700Schasinglulu 	image_info_t image_info;
77*91f16700Schasinglulu 	entry_point_info_t ep_info;
78*91f16700Schasinglulu } image_desc_t;
79*91f16700Schasinglulu 
80*91f16700Schasinglulu /* BL image node in the BL image loading sequence */
81*91f16700Schasinglulu typedef struct bl_load_info_node {
82*91f16700Schasinglulu 	unsigned int image_id;
83*91f16700Schasinglulu 	image_info_t *image_info;
84*91f16700Schasinglulu 	struct bl_load_info_node *next_load_info;
85*91f16700Schasinglulu } bl_load_info_node_t;
86*91f16700Schasinglulu 
87*91f16700Schasinglulu /* BL image head node in the BL image loading sequence */
88*91f16700Schasinglulu typedef struct bl_load_info {
89*91f16700Schasinglulu 	param_header_t h;
90*91f16700Schasinglulu 	bl_load_info_node_t *head;
91*91f16700Schasinglulu } bl_load_info_t;
92*91f16700Schasinglulu 
93*91f16700Schasinglulu #endif /* __ASSEMBLER__ */
94*91f16700Schasinglulu 
95*91f16700Schasinglulu #endif /* ARM_TRUSTED_FIRMWARE_EXPORT_COMMON_BL_COMMON_EXP_H */
96