xref: /rk3399_ARM-atf/services/std_svc/drtm/drtm_main.h (revision 40e1fad69b9f28ab5e57cea33261bf629b05519c)
1e62748e3SManish V Badarkhe /*
2e62748e3SManish V Badarkhe  * Copyright (c) 2022 Arm Limited. All rights reserved.
3e62748e3SManish V Badarkhe  *
4e62748e3SManish V Badarkhe  * SPDX-License-Identifier:    BSD-3-Clause
5e62748e3SManish V Badarkhe  *
6e62748e3SManish V Badarkhe  */
7e62748e3SManish V Badarkhe #ifndef DRTM_MAIN_H
8e62748e3SManish V Badarkhe #define DRTM_MAIN_H
9e62748e3SManish V Badarkhe 
10e62748e3SManish V Badarkhe #include <stdint.h>
11e62748e3SManish V Badarkhe 
12*40e1fad6SManish Pandey #include <assert.h>
13e62748e3SManish V Badarkhe #include <lib/smccc.h>
14e62748e3SManish V Badarkhe 
15d54792bdSManish V Badarkhe #include "drtm_dma_prot.h"
16d54792bdSManish V Badarkhe 
17*40e1fad6SManish Pandey #define ALIGNED_UP(x, a) __extension__ ({ \
18*40e1fad6SManish Pandey 	__typeof__(a) _a = (a); \
19*40e1fad6SManish Pandey 	__typeof__(a) _one = 1; \
20*40e1fad6SManish Pandey 	assert(IS_POWER_OF_TWO(_a)); \
21*40e1fad6SManish Pandey 	((x) + (_a - _one)) & ~(_a - _one); \
22*40e1fad6SManish Pandey })
23*40e1fad6SManish Pandey 
24*40e1fad6SManish Pandey #define ALIGNED_DOWN(x, a) __extension__ ({ \
25*40e1fad6SManish Pandey 	__typeof__(a) _a = (a); \
26*40e1fad6SManish Pandey 	__typeof__(a) _one = 1; \
27*40e1fad6SManish Pandey 	assert(IS_POWER_OF_TWO(_a)); \
28*40e1fad6SManish Pandey 	(x) & ~(_a - _one); \
29*40e1fad6SManish Pandey })
30*40e1fad6SManish Pandey 
31*40e1fad6SManish Pandey #define DRTM_PAGE_SIZE		(4 * (1 << 10))
32*40e1fad6SManish Pandey #define DRTM_PAGE_SIZE_STR	"4-KiB"
33*40e1fad6SManish Pandey 
34e62748e3SManish V Badarkhe enum drtm_retc {
35e62748e3SManish V Badarkhe 	SUCCESS = SMC_OK,
36e62748e3SManish V Badarkhe 	NOT_SUPPORTED = SMC_UNK,
37e62748e3SManish V Badarkhe 	INVALID_PARAMETERS = -2,
38e62748e3SManish V Badarkhe 	DENIED = -3,
39e62748e3SManish V Badarkhe 	NOT_FOUND = -4,
40e62748e3SManish V Badarkhe 	INTERNAL_ERROR = -5,
41e62748e3SManish V Badarkhe 	MEM_PROTECT_INVALID = -6,
42e62748e3SManish V Badarkhe };
43e62748e3SManish V Badarkhe 
442a1cdee4Sjohpow01 typedef struct {
452a1cdee4Sjohpow01 	uint64_t tpm_features;
462a1cdee4Sjohpow01 	uint64_t minimum_memory_requirement;
472a1cdee4Sjohpow01 	uint64_t dma_prot_features;
482a1cdee4Sjohpow01 	uint64_t boot_pe_id;
492a1cdee4Sjohpow01 	uint64_t tcb_hash_features;
502a1cdee4Sjohpow01 } drtm_features_t;
512a1cdee4Sjohpow01 
52*40e1fad6SManish Pandey struct __packed drtm_dl_args_v1 {
53*40e1fad6SManish Pandey 	uint16_t version;        /* Must be 1. */
54*40e1fad6SManish Pandey 	uint8_t __res[2];
55*40e1fad6SManish Pandey 	uint32_t features;
56*40e1fad6SManish Pandey 	uint64_t dlme_paddr;
57*40e1fad6SManish Pandey 	uint64_t dlme_size;
58*40e1fad6SManish Pandey 	uint64_t dlme_img_off;
59*40e1fad6SManish Pandey 	uint64_t dlme_img_ep_off;
60*40e1fad6SManish Pandey 	uint64_t dlme_img_size;
61*40e1fad6SManish Pandey 	uint64_t dlme_data_off;
62*40e1fad6SManish Pandey 	uint64_t dce_nwd_paddr;
63*40e1fad6SManish Pandey 	uint64_t dce_nwd_size;
64*40e1fad6SManish Pandey 	drtm_dl_dma_prot_args_v1_t dma_prot_args;
65*40e1fad6SManish Pandey } __aligned(__alignof(uint16_t /* First member's type, `uint16_t version' */));
66*40e1fad6SManish Pandey 
672a1cdee4Sjohpow01 drtm_memory_region_descriptor_table_t *drtm_build_address_map(void);
682a1cdee4Sjohpow01 uint64_t drtm_get_address_map_size(void);
692a1cdee4Sjohpow01 
70*40e1fad6SManish Pandey /*
71*40e1fad6SManish Pandey  * Version-independent type.  May be used to avoid excessive line of code
72*40e1fad6SManish Pandey  * changes when migrating to new struct versions.
73*40e1fad6SManish Pandey  */
74*40e1fad6SManish Pandey typedef struct drtm_dl_args_v1 struct_drtm_dl_args;
75*40e1fad6SManish Pandey 
76e62748e3SManish V Badarkhe #endif /* DRTM_MAIN_H */
77