]>
Commit | Line | Data |
---|---|---|
7b384ecc RF |
1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
2 | /* | |
3 | * The shared memory system is an allocate-only heap structure that | |
4 | * consists of one of more memory areas that can be accessed by the processors | |
5 | * in the SoC. | |
6 | * | |
7 | * Allocation can be done globally for all processors or to an individual processor. | |
8 | * This is controlled by the @host parameter. | |
9 | * | |
10 | * Allocation and management of heap can be implemented in various ways, | |
11 | * The @item parameter should be used as an index/hash to the memory region. | |
12 | * | |
13 | * Copyright (c) 2018 Ramon Fried <[email protected]> | |
14 | */ | |
15 | ||
16 | #ifndef _smemh_ | |
17 | #define _smemh_ | |
18 | ||
19 | /* struct smem_ops: Operations for the SMEM uclass */ | |
20 | struct smem_ops { | |
21 | /** | |
22 | * alloc() - allocate space for a smem item | |
23 | * | |
24 | * @host: remote processor id, or -1 for all processors. | |
25 | * @item: smem item handle | |
26 | * @size: number of bytes to be allocated | |
27 | * @return 0 if OK, -ve on error | |
28 | */ | |
29 | int (*alloc)(unsigned int host, | |
30 | unsigned int item, size_t size); | |
31 | ||
32 | /** | |
33 | * get() - Resolve ptr of size of a smem item | |
34 | * | |
35 | * @host: the remote processor, of -1 for all processors. | |
36 | * @item: smem item handle | |
37 | * @size: pointer to be filled out with the size of the item | |
38 | * @return pointer on success, NULL on error | |
39 | */ | |
40 | void *(*get)(unsigned int host, | |
41 | unsigned int item, size_t *size); | |
42 | ||
43 | /** | |
44 | * get_free_space() - Get free space in smem in bytes | |
45 | * | |
46 | * @host: the remote processor identifying a partition, or -1 | |
47 | * for all processors. | |
48 | * @return free space, -ve on error | |
49 | */ | |
50 | int (*get_free_space)(unsigned int host); | |
51 | }; | |
52 | ||
53 | #define smem_get_ops(dev) ((struct smem_ops *)(dev)->driver->ops) | |
54 | ||
55 | /** | |
56 | * smem_alloc() - allocate space for a smem item | |
57 | * @host: remote processor id, or -1 | |
58 | * @item: smem item handle | |
59 | * @size: number of bytes to be allocated | |
185f812c | 60 | * Return: 0 if OK, -ve on error |
7b384ecc RF |
61 | * |
62 | * Allocate space for a given smem item of size @size, given that the item is | |
63 | * not yet allocated. | |
64 | */ | |
65 | int smem_alloc(struct udevice *dev, unsigned int host, unsigned int item, size_t size); | |
66 | ||
67 | /** | |
68 | * smem_get() - resolve ptr of size of a smem item | |
69 | * @host: the remote processor, or -1 for all processors. | |
70 | * @item: smem item handle | |
71 | * @size: pointer to be filled out with size of the item | |
185f812c | 72 | * Return: pointer on success, NULL on error |
7b384ecc RF |
73 | * |
74 | * Looks up smem item and returns pointer to it. Size of smem | |
75 | * item is returned in @size. | |
76 | */ | |
77 | void *smem_get(struct udevice *dev, unsigned int host, unsigned int item, size_t *size); | |
78 | ||
79 | /** | |
80 | * smem_get_free_space() - retrieve amount of free space in a partition | |
81 | * @host: the remote processor identifying a partition, or -1 | |
82 | * for all processors. | |
185f812c | 83 | * Return: size in bytes, -ve on error |
7b384ecc RF |
84 | * |
85 | * To be used by smem clients as a quick way to determine if any new | |
86 | * allocations has been made. | |
87 | */ | |
88 | int smem_get_free_space(struct udevice *dev, unsigned int host); | |
89 | ||
90 | #endif /* _smem_h_ */ |