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