116 lines
3.1 KiB
C
116 lines
3.1 KiB
C
/*
|
|
* 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 <services/el3_spmc_ffa_memory.h>
|
|
|
|
/**
|
|
* 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 */
|