xref: /rk3399_ARM-atf/services/std_svc/drtm/drtm_dma_prot.h (revision 08eb4aa0011b12dcb0bb0bf1068aa6d4a35af7b4)
1d54792bdSManish V Badarkhe /*
2*65f6936eSManish V Badarkhe  * Copyright (c) 2022-2025 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>
112b13a985SManish V Badarkhe #include <plat/common/platform.h>
122b13a985SManish 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 
192b13a985SManish V Badarkhe /* Values for DRTM_PROTECT_MEMORY */
202b13a985SManish V Badarkhe enum dma_prot_type {
212b13a985SManish V Badarkhe 	PROTECT_NONE    = -1,
222b13a985SManish V Badarkhe 	PROTECT_MEM_ALL = 0,
23*65f6936eSManish V Badarkhe 	PROTECT_MEM_REGION = 1,
242b13a985SManish V Badarkhe };
252b13a985SManish V Badarkhe 
262b13a985SManish V Badarkhe struct dma_prot {
272b13a985SManish V Badarkhe 	enum dma_prot_type type;
282b13a985SManish V Badarkhe };
292b13a985SManish V Badarkhe 
302b13a985SManish V Badarkhe #define DRTM_MEM_REGION_PAGES_AND_TYPE(pages, type) \
312b13a985SManish V Badarkhe 	(((uint64_t)(pages) & (((uint64_t)1 << 52) - 1)) \
322b13a985SManish V Badarkhe 	 | (((uint64_t)(type) & 0x7) << 52))
332b13a985SManish V Badarkhe 
342b13a985SManish V Badarkhe #define PAGES_AND_TYPE(pages, type) \
352b13a985SManish V Badarkhe 		.region_size_type = DRTM_MEM_REGION_PAGES_AND_TYPE(pages, type)
362b13a985SManish 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);
412b13a985SManish V Badarkhe enum drtm_retc drtm_dma_prot_check_args(const drtm_dl_dma_prot_args_v1_t *a,
422b13a985SManish V Badarkhe 					int a_dma_prot_type,
432b13a985SManish V Badarkhe 					drtm_mem_region_t p);
442b13a985SManish V Badarkhe enum drtm_retc drtm_dma_prot_engage(const drtm_dl_dma_prot_args_v1_t *a,
452b13a985SManish V Badarkhe 				    int a_dma_prot_type);
462b13a985SManish V Badarkhe enum drtm_retc drtm_dma_prot_disengage(void);
472b13a985SManish V Badarkhe uint64_t drtm_unprotect_mem(void *ctx);
482b13a985SManish 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