1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2017-2023, Arm Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef OPTEE_UTILS_H 8*91f16700Schasinglulu #define OPTEE_UTILS_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <stdbool.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu #include <common/bl_common.h> 13*91f16700Schasinglulu 14*91f16700Schasinglulu bool optee_header_is_valid(uintptr_t header_base); 15*91f16700Schasinglulu 16*91f16700Schasinglulu int parse_optee_header(entry_point_info_t *header_ep, 17*91f16700Schasinglulu image_info_t *pager_image_info, 18*91f16700Schasinglulu image_info_t *paged_image_info); 19*91f16700Schasinglulu 20*91f16700Schasinglulu /* 21*91f16700Schasinglulu * load_addr_hi and load_addr_lo: image load address. 22*91f16700Schasinglulu * image_id: 0 - pager, 1 - paged 23*91f16700Schasinglulu * size: image size in bytes. 24*91f16700Schasinglulu */ 25*91f16700Schasinglulu typedef struct optee_image { 26*91f16700Schasinglulu uint32_t load_addr_hi; 27*91f16700Schasinglulu uint32_t load_addr_lo; 28*91f16700Schasinglulu uint32_t image_id; 29*91f16700Schasinglulu uint32_t size; 30*91f16700Schasinglulu } optee_image_t; 31*91f16700Schasinglulu 32*91f16700Schasinglulu #define OPTEE_PAGER_IMAGE_ID 0 33*91f16700Schasinglulu #define OPTEE_PAGED_IMAGE_ID 1 34*91f16700Schasinglulu 35*91f16700Schasinglulu #define OPTEE_MAX_NUM_IMAGES 2u 36*91f16700Schasinglulu 37*91f16700Schasinglulu #define TEE_MAGIC_NUM_OPTEE 0x4554504f 38*91f16700Schasinglulu /* 39*91f16700Schasinglulu * magic: header magic number. 40*91f16700Schasinglulu * version: OPTEE header version: 41*91f16700Schasinglulu * 1 - not supported 42*91f16700Schasinglulu * 2 - supported 43*91f16700Schasinglulu * arch: OPTEE os architecture type: 0 - AARCH32, 1 - AARCH64. 44*91f16700Schasinglulu * flags: unused currently. 45*91f16700Schasinglulu * nb_images: number of images. 46*91f16700Schasinglulu */ 47*91f16700Schasinglulu typedef struct optee_header { 48*91f16700Schasinglulu uint32_t magic; 49*91f16700Schasinglulu uint8_t version; 50*91f16700Schasinglulu uint8_t arch; 51*91f16700Schasinglulu uint16_t flags; 52*91f16700Schasinglulu uint32_t nb_images; 53*91f16700Schasinglulu optee_image_t optee_image_list[]; 54*91f16700Schasinglulu } optee_header_t; 55*91f16700Schasinglulu 56*91f16700Schasinglulu #endif /* OPTEE_UTILS_H */ 57