xref: /rk3399_ARM-atf/services/std_svc/drtm/drtm_dma_prot.h (revision 2b13a985994213f766ada197427f96e064f1b59b)
1d54792bdSManish V Badarkhe /*
2d54792bdSManish V Badarkhe  * Copyright (c) 2022 Arm Limited. All rights reserved.
3d54792bdSManish V Badarkhe  *
4d54792bdSManish V Badarkhe  * SPDX-License-Identifier:    BSD-3-Clause
5d54792bdSManish V Badarkhe  *
6d54792bdSManish V Badarkhe  */
7d54792bdSManish V Badarkhe #ifndef DRTM_DMA_PROT_H
8d54792bdSManish V Badarkhe #define DRTM_DMA_PROT_H
9d54792bdSManish V Badarkhe 
10d54792bdSManish V Badarkhe #include <stdint.h>
11*2b13a985SManish V Badarkhe #include <plat/common/platform.h>
12*2b13a985SManish V Badarkhe #include <services/drtm_svc.h>
13d54792bdSManish V Badarkhe 
1440e1fad6SManish Pandey struct __packed drtm_dl_dma_prot_args_v1 {
1540e1fad6SManish Pandey 	uint64_t dma_prot_table_paddr;
1640e1fad6SManish Pandey 	uint64_t dma_prot_table_size;
1740e1fad6SManish Pandey };
1840e1fad6SManish Pandey 
19*2b13a985SManish V Badarkhe /* Values for DRTM_PROTECT_MEMORY */
20*2b13a985SManish V Badarkhe enum dma_prot_type {
21*2b13a985SManish V Badarkhe 	PROTECT_NONE    = -1,
22*2b13a985SManish V Badarkhe 	PROTECT_MEM_ALL = 0,
23*2b13a985SManish V Badarkhe 	PROTECT_MEM_REGION = 2,
24*2b13a985SManish V Badarkhe };
25*2b13a985SManish V Badarkhe 
26*2b13a985SManish V Badarkhe struct dma_prot {
27*2b13a985SManish V Badarkhe 	enum dma_prot_type type;
28*2b13a985SManish V Badarkhe };
29*2b13a985SManish V Badarkhe 
30*2b13a985SManish V Badarkhe #define DRTM_MEM_REGION_PAGES_AND_TYPE(pages, type) \
31*2b13a985SManish V Badarkhe 	(((uint64_t)(pages) & (((uint64_t)1 << 52) - 1)) \
32*2b13a985SManish V Badarkhe 	 | (((uint64_t)(type) & 0x7) << 52))
33*2b13a985SManish V Badarkhe 
34*2b13a985SManish V Badarkhe #define PAGES_AND_TYPE(pages, type) \
35*2b13a985SManish V Badarkhe 		.region_size_type = DRTM_MEM_REGION_PAGES_AND_TYPE(pages, type)
36*2b13a985SManish V Badarkhe 
3740e1fad6SManish Pandey /* Opaque / encapsulated type. */
3840e1fad6SManish Pandey typedef struct drtm_dl_dma_prot_args_v1 drtm_dl_dma_prot_args_v1_t;
3940e1fad6SManish Pandey 
40d54792bdSManish V Badarkhe bool drtm_dma_prot_init(void);
41*2b13a985SManish V Badarkhe enum drtm_retc drtm_dma_prot_check_args(const drtm_dl_dma_prot_args_v1_t *a,
42*2b13a985SManish V Badarkhe 					int a_dma_prot_type,
43*2b13a985SManish V Badarkhe 					drtm_mem_region_t p);
44*2b13a985SManish V Badarkhe enum drtm_retc drtm_dma_prot_engage(const drtm_dl_dma_prot_args_v1_t *a,
45*2b13a985SManish V Badarkhe 				    int a_dma_prot_type);
46*2b13a985SManish V Badarkhe enum drtm_retc drtm_dma_prot_disengage(void);
47*2b13a985SManish V Badarkhe uint64_t drtm_unprotect_mem(void *ctx);
48*2b13a985SManish V Badarkhe void drtm_dma_prot_serialise_table(uint8_t *dst, size_t *size_out);
49d54792bdSManish V Badarkhe 
50d54792bdSManish V Badarkhe #endif /* DRTM_DMA_PROT_H */
51