123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /*
- * Copyright (c) 2019, 2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
- */
- #ifndef __QTEE_SHMBRIDGE_H__
- #define __QTEE_SHMBRIDGE_H__
- /* VMID and permission definitions */
- #include <soc/qcom/secure_buffer.h>
- /**
- * struct qtee_shm - info of shared memory allocated from the default bridge
- * @ paddr: physical address of the shm allocated from the default bridge
- * @ vaddr: virtual address of the shm
- * @ size: size of the shm
- */
- struct qtee_shm {
- phys_addr_t paddr;
- void *vaddr;
- size_t size;
- };
- /**
- * Check whether shmbridge mechanism is enabled in HYP or not
- *
- * return true when enabled, false when not enabled
- */
- bool qtee_shmbridge_is_enabled(void);
- /**
- * Check whether a bridge starting from paddr exists
- *
- * @ [IN] paddr: physical addr of the buffer
- *
- * return 0 or -EEXIST
- */
- int32_t qtee_shmbridge_query(phys_addr_t paddr);
- /**
- * Register paddr & size as a bridge, get bridge handle
- *
- * @ [IN] paddr: physical addr of the buffer to be turned into bridge
- * @ [IN] size: size of the bridge
- * @ [IN] ns_vmid_list: non-secure vmids array
- * @ [IN] ns_vm_perm_list: NS VM permission array
- * @ [IN] ns_vmid_num: number of NS VMIDs (at most 4)
- * @ [IN] tz_perm: TZ permission
- * @ [OUT] *handle: output shmbridge handle
- *
- * return success or error
- */
- int32_t qtee_shmbridge_register(
- phys_addr_t paddr,
- size_t size,
- uint32_t *ns_vmid_list,
- uint32_t *ns_vm_perm_list,
- uint32_t ns_vmid_num,
- uint32_t tz_perm,
- uint64_t *handle);
- /**
- * Deregister bridge
- *
- * @ [IN] handle: shmbridge handle
- *
- * return success or error
- */
- int32_t qtee_shmbridge_deregister(uint64_t handle);
- /**
- * Sub-allocate from default kernel bridge created by shmb driver
- *
- * @ [IN] size: size of the buffer to be sub-allocated from the bridge
- * @ [OUT] *shm: output qtee_shm structure with buffer paddr, vaddr and
- * size; returns ERR_PTR or NULL otherwise
- *
- * return success or error
- *
- * Note: This will allocate a cached buffer, so after a client allocates
- * a bridge buffer, it need to first flush cache with
- * "qtee_shmbridge_flush_shm_buf" before invoke scm_call to TZ,
- * and then invalidate cache with "qtee_shmbridge_inv_shm_buf"
- * after scm_call return.
- */
- int32_t qtee_shmbridge_allocate_shm(size_t size, struct qtee_shm *shm);
- /*
- * Free buffer that is sub-allocated from default kernel bridge
- *
- * @ [IN] shm: qtee_shm structure to be freed
- *
- */
- void qtee_shmbridge_free_shm(struct qtee_shm *shm);
- /*
- * cache clean operation for buffer sub-allocated from default bridge
- *
- * @ [IN] shm: qtee_shm, its cache to be cleaned
- *
- */
- void qtee_shmbridge_flush_shm_buf(struct qtee_shm *shm);
- /*
- * cache invalidation operation for buffer sub-allocated from default bridge
- *
- * @ [IN] shm: qtee_shm, its cache to be invalidated
- *
- */
- void qtee_shmbridge_inv_shm_buf(struct qtee_shm *shm);
- #endif /*__QTEE_SHMBRIDGE_H__*/
|