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