154661cd2SSummer Qin /* 2*4c700c15SGovindraj Raja * Copyright (c) 2017-2023, Arm Limited and Contributors. All rights reserved. 354661cd2SSummer Qin * 454661cd2SSummer Qin * SPDX-License-Identifier: BSD-3-Clause 554661cd2SSummer Qin */ 609d40e0eSAntonio Nino Diaz 7c3cf06f1SAntonio Nino Diaz #ifndef OPTEE_UTILS_H 8c3cf06f1SAntonio Nino Diaz #define OPTEE_UTILS_H 954661cd2SSummer Qin 10b84a8508SEtienne Carriere #include <stdbool.h> 11b84a8508SEtienne Carriere 1209d40e0eSAntonio Nino Diaz #include <common/bl_common.h> 1354661cd2SSummer Qin 14b84a8508SEtienne Carriere bool optee_header_is_valid(uintptr_t header_base); 15b84a8508SEtienne Carriere 1654661cd2SSummer Qin int parse_optee_header(entry_point_info_t *header_ep, 1754661cd2SSummer Qin image_info_t *pager_image_info, 1854661cd2SSummer Qin image_info_t *paged_image_info); 1954661cd2SSummer Qin 2005c69cf7SJeffrey Kardatzke /* 2105c69cf7SJeffrey Kardatzke * load_addr_hi and load_addr_lo: image load address. 2205c69cf7SJeffrey Kardatzke * image_id: 0 - pager, 1 - paged 2305c69cf7SJeffrey Kardatzke * size: image size in bytes. 2405c69cf7SJeffrey Kardatzke */ 2505c69cf7SJeffrey Kardatzke typedef struct optee_image { 2605c69cf7SJeffrey Kardatzke uint32_t load_addr_hi; 2705c69cf7SJeffrey Kardatzke uint32_t load_addr_lo; 2805c69cf7SJeffrey Kardatzke uint32_t image_id; 2905c69cf7SJeffrey Kardatzke uint32_t size; 3005c69cf7SJeffrey Kardatzke } optee_image_t; 3105c69cf7SJeffrey Kardatzke 3205c69cf7SJeffrey Kardatzke #define OPTEE_PAGER_IMAGE_ID 0 3305c69cf7SJeffrey Kardatzke #define OPTEE_PAGED_IMAGE_ID 1 3405c69cf7SJeffrey Kardatzke 3505c69cf7SJeffrey Kardatzke #define OPTEE_MAX_NUM_IMAGES 2u 3605c69cf7SJeffrey Kardatzke 3705c69cf7SJeffrey Kardatzke #define TEE_MAGIC_NUM_OPTEE 0x4554504f 3805c69cf7SJeffrey Kardatzke /* 3905c69cf7SJeffrey Kardatzke * magic: header magic number. 4005c69cf7SJeffrey Kardatzke * version: OPTEE header version: 4105c69cf7SJeffrey Kardatzke * 1 - not supported 4205c69cf7SJeffrey Kardatzke * 2 - supported 4305c69cf7SJeffrey Kardatzke * arch: OPTEE os architecture type: 0 - AARCH32, 1 - AARCH64. 4405c69cf7SJeffrey Kardatzke * flags: unused currently. 4505c69cf7SJeffrey Kardatzke * nb_images: number of images. 4605c69cf7SJeffrey Kardatzke */ 4705c69cf7SJeffrey Kardatzke typedef struct optee_header { 4805c69cf7SJeffrey Kardatzke uint32_t magic; 4905c69cf7SJeffrey Kardatzke uint8_t version; 5005c69cf7SJeffrey Kardatzke uint8_t arch; 5105c69cf7SJeffrey Kardatzke uint16_t flags; 5205c69cf7SJeffrey Kardatzke uint32_t nb_images; 5305c69cf7SJeffrey Kardatzke optee_image_t optee_image_list[]; 5405c69cf7SJeffrey Kardatzke } optee_header_t; 5505c69cf7SJeffrey Kardatzke 56c3cf06f1SAntonio Nino Diaz #endif /* OPTEE_UTILS_H */ 57