154661cd2SSummer Qin /* 2*05c69cf7SJeffrey Kardatzke * 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 20*05c69cf7SJeffrey Kardatzke /* 21*05c69cf7SJeffrey Kardatzke * load_addr_hi and load_addr_lo: image load address. 22*05c69cf7SJeffrey Kardatzke * image_id: 0 - pager, 1 - paged 23*05c69cf7SJeffrey Kardatzke * size: image size in bytes. 24*05c69cf7SJeffrey Kardatzke */ 25*05c69cf7SJeffrey Kardatzke typedef struct optee_image { 26*05c69cf7SJeffrey Kardatzke uint32_t load_addr_hi; 27*05c69cf7SJeffrey Kardatzke uint32_t load_addr_lo; 28*05c69cf7SJeffrey Kardatzke uint32_t image_id; 29*05c69cf7SJeffrey Kardatzke uint32_t size; 30*05c69cf7SJeffrey Kardatzke } optee_image_t; 31*05c69cf7SJeffrey Kardatzke 32*05c69cf7SJeffrey Kardatzke #define OPTEE_PAGER_IMAGE_ID 0 33*05c69cf7SJeffrey Kardatzke #define OPTEE_PAGED_IMAGE_ID 1 34*05c69cf7SJeffrey Kardatzke 35*05c69cf7SJeffrey Kardatzke #define OPTEE_MAX_NUM_IMAGES 2u 36*05c69cf7SJeffrey Kardatzke 37*05c69cf7SJeffrey Kardatzke #define TEE_MAGIC_NUM_OPTEE 0x4554504f 38*05c69cf7SJeffrey Kardatzke /* 39*05c69cf7SJeffrey Kardatzke * magic: header magic number. 40*05c69cf7SJeffrey Kardatzke * version: OPTEE header version: 41*05c69cf7SJeffrey Kardatzke * 1 - not supported 42*05c69cf7SJeffrey Kardatzke * 2 - supported 43*05c69cf7SJeffrey Kardatzke * arch: OPTEE os architecture type: 0 - AARCH32, 1 - AARCH64. 44*05c69cf7SJeffrey Kardatzke * flags: unused currently. 45*05c69cf7SJeffrey Kardatzke * nb_images: number of images. 46*05c69cf7SJeffrey Kardatzke */ 47*05c69cf7SJeffrey Kardatzke typedef struct optee_header { 48*05c69cf7SJeffrey Kardatzke uint32_t magic; 49*05c69cf7SJeffrey Kardatzke uint8_t version; 50*05c69cf7SJeffrey Kardatzke uint8_t arch; 51*05c69cf7SJeffrey Kardatzke uint16_t flags; 52*05c69cf7SJeffrey Kardatzke uint32_t nb_images; 53*05c69cf7SJeffrey Kardatzke optee_image_t optee_image_list[]; 54*05c69cf7SJeffrey Kardatzke } optee_header_t; 55*05c69cf7SJeffrey Kardatzke 56c3cf06f1SAntonio Nino Diaz #endif /* OPTEE_UTILS_H */ 57