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