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