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