12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /* SPDX-License-Identifier: GPL-2.0+ */
- /*
- * The shared memory system is an allocate-only heap structure that
- * consists of one of more memory areas that can be accessed by the processors
- * in the SoC.
- *
- * Allocation can be done globally for all processors or to an individual processor.
- * This is controlled by the @host parameter.
- *
- * Allocation and management of heap can be implemented in various ways,
- * The @item parameter should be used as an index/hash to the memory region.
- *
- * Copyright (c) 2018 Ramon Fried <ramon.fried@gmail.com>
- */
- #ifndef _smemh_
- #define _smemh_
- /* struct smem_ops: Operations for the SMEM uclass */
- struct smem_ops {
- /**
- * alloc() - allocate space for a smem item
- *
- * @host: remote processor id, or -1 for all processors.
- * @item: smem item handle
- * @size: number of bytes to be allocated
- * @return 0 if OK, -ve on error
- */
- int (*alloc)(unsigned int host,
- unsigned int item, size_t size);
- /**
- * get() - Resolve ptr of size of a smem item
- *
- * @host: the remote processor, of -1 for all processors.
- * @item: smem item handle
- * @size: pointer to be filled out with the size of the item
- * @return pointer on success, NULL on error
- */
- void *(*get)(unsigned int host,
- unsigned int item, size_t *size);
- /**
- * get_free_space() - Get free space in smem in bytes
- *
- * @host: the remote processor identifying a partition, or -1
- * for all processors.
- * @return free space, -ve on error
- */
- int (*get_free_space)(unsigned int host);
- };
- #define smem_get_ops(dev) ((struct smem_ops *)(dev)->driver->ops)
- /**
- * smem_alloc() - allocate space for a smem item
- * @host: remote processor id, or -1
- * @item: smem item handle
- * @size: number of bytes to be allocated
- * @return 0 if OK, -ve on error
- *
- * Allocate space for a given smem item of size @size, given that the item is
- * not yet allocated.
- */
- int smem_alloc(struct udevice *dev, unsigned int host, unsigned int item, size_t size);
- /**
- * smem_get() - resolve ptr of size of a smem item
- * @host: the remote processor, or -1 for all processors.
- * @item: smem item handle
- * @size: pointer to be filled out with size of the item
- * @return pointer on success, NULL on error
- *
- * Looks up smem item and returns pointer to it. Size of smem
- * item is returned in @size.
- */
- void *smem_get(struct udevice *dev, unsigned int host, unsigned int item, size_t *size);
- /**
- * smem_get_free_space() - retrieve amount of free space in a partition
- * @host: the remote processor identifying a partition, or -1
- * for all processors.
- * @return size in bytes, -ve on error
- *
- * To be used by smem clients as a quick way to determine if any new
- * allocations has been made.
- */
- int smem_get_free_space(struct udevice *dev, unsigned int host);
- #endif /* _smem_h_ */
|