123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- /*
- * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- /*
- * @file generic/shmem.c
- * @brief Generic libmetal shared memory handling.
- */
- #include <metal/errno.h>
- #include <metal/assert.h>
- #include <metal/shmem.h>
- #include <metal/sys.h>
- #include <metal/utilities.h>
- int metal_shmem_register_generic(struct metal_generic_shmem *shmem)
- {
- /* Make sure that we can be found. */
- metal_assert(shmem->name && strlen(shmem->name) != 0);
- /* Statically registered shmem regions cannot have a destructor. */
- metal_assert(!shmem->io.ops.close);
- metal_list_add_tail(&_metal.common.generic_shmem_list,
- &shmem->node);
- return 0;
- }
- int metal_shmem_open_generic(const char *name, size_t size,
- struct metal_io_region **result)
- {
- struct metal_generic_shmem *shmem;
- struct metal_list *node;
- metal_list_for_each(&_metal.common.generic_shmem_list, node) {
- shmem = metal_container_of(node, struct metal_generic_shmem, node);
- if (strcmp(shmem->name, name) != 0)
- continue;
- if (size > metal_io_region_size(&shmem->io))
- continue;
- *result = &shmem->io;
- return 0;
- }
- return -ENOENT;
- }
|