/* * Copyright (c) 2022, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef SPMC_SHARED_MEM_H #define SPMC_SHARED_MEM_H #include /** * struct ffa_mem_relinquish_descriptor - Relinquish request descriptor. * @handle: * Id of shared memory object to relinquish. * @flags: * If bit 0 is set clear memory after unmapping from borrower. Must be 0 * for share. Bit[1]: Time slicing. Not supported, must be 0. All other * bits are reserved 0. * @endpoint_count: * Number of entries in @endpoint_array. * @endpoint_array: * Array of endpoint ids. */ struct ffa_mem_relinquish_descriptor { uint64_t handle; uint32_t flags; uint32_t endpoint_count; ffa_endpoint_id16_t endpoint_array[]; }; CASSERT(sizeof(struct ffa_mem_relinquish_descriptor) == 16, assert_ffa_mem_relinquish_descriptor_size_mismatch); /** * struct spmc_shmem_obj_state - Global state. * @data: Backing store for spmc_shmem_obj objects. * @data_size: The size allocated for the backing store. * @allocated: Number of bytes allocated in @data. * @next_handle: Handle used for next allocated object. * @lock: Lock protecting all state in this file. */ struct spmc_shmem_obj_state { uint8_t *data; size_t data_size; size_t allocated; uint64_t next_handle; spinlock_t lock; }; extern struct spmc_shmem_obj_state spmc_shmem_obj_state; extern int plat_spmc_shmem_begin(struct ffa_mtd *desc); extern int plat_spmc_shmem_reclaim(struct ffa_mtd *desc); long spmc_ffa_mem_send(uint32_t smc_fid, bool secure_origin, uint64_t total_length, uint32_t fragment_length, uint64_t address, uint32_t page_count, void *cookie, void *handle, uint64_t flags); long spmc_ffa_mem_frag_tx(uint32_t smc_fid, bool secure_origin, uint64_t handle_low, uint64_t handle_high, uint32_t fragment_length, uint32_t sender_id, void *cookie, void *handle, uint64_t flags); long spmc_ffa_mem_retrieve_req(uint32_t smc_fid, bool secure_origin, uint32_t total_length, uint32_t fragment_length, uint64_t address, uint32_t page_count, void *cookie, void *handle, uint64_t flags); long spmc_ffa_mem_frag_rx(uint32_t smc_fid, bool secure_origin, uint32_t handle_low, uint32_t handle_high, uint32_t fragment_offset, uint32_t sender_id, void *cookie, void *handle, uint64_t flags); int spmc_ffa_mem_relinquish(uint32_t smc_fid, bool secure_origin, uint32_t handle_low, uint32_t handle_high, uint32_t fragment_offset, uint32_t sender_id, void *cookie, void *handle, uint64_t flags); int spmc_ffa_mem_reclaim(uint32_t smc_fid, bool secure_origin, uint32_t handle_low, uint32_t handle_high, uint32_t mem_flags, uint64_t x4, void *cookie, void *handle, uint64_t flags); #endif /* SPMC_SHARED_MEM_H */