xref: /rk3399_ARM-atf/include/lib/optee_utils.h (revision 72e8f2456af54b75a0a1d92aadfce0b4bcde6ba1)
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