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