aboutsummaryrefslogtreecommitdiff
path: root/drivers/smem/smem-uclass.c
diff options
context:
space:
mode:
authorRamon Fried2018-07-02 02:57:55 +0300
committerTom Rini2018-07-19 16:31:37 -0400
commit7b384eccc785b596f68448b155cbda26df57fb23 (patch)
tree77d623c310e8050de65ecc655a46dee7b3f81933 /drivers/smem/smem-uclass.c
parentb19886b9469174213877ef37670ce35c55acb456 (diff)
dm: SMEM (Shared memory) uclass
This is a uclass for Shared memory manager drivers. A Shared Memory Manager driver implements an interface for allocating and accessing items in the memory area shared among all of the processors. Signed-off-by: Ramon Fried <ramon.fried@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Diffstat (limited to 'drivers/smem/smem-uclass.c')
-rw-r--r--drivers/smem/smem-uclass.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/drivers/smem/smem-uclass.c b/drivers/smem/smem-uclass.c
new file mode 100644
index 00000000000..ce7bf40656e
--- /dev/null
+++ b/drivers/smem/smem-uclass.c
@@ -0,0 +1,45 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2018 Ramon Fried <ramon.fried@gmail.com>
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <smem.h>
+
+int smem_alloc(struct udevice *dev, unsigned int host,
+ unsigned int item, size_t size)
+{
+ struct smem_ops *ops = smem_get_ops(dev);
+
+ if (!ops->alloc)
+ return -ENOSYS;
+
+ return ops->alloc(host, item, size);
+}
+
+void *smem_get(struct udevice *dev, unsigned int host,
+ unsigned int item, size_t *size)
+{
+ struct smem_ops *ops = smem_get_ops(dev);
+
+ if (!ops->get)
+ return NULL;
+
+ return ops->get(host, item, size);
+}
+
+int smem_get_free_space(struct udevice *dev, unsigned int host)
+{
+ struct smem_ops *ops = smem_get_ops(dev);
+
+ if (!ops->get_free_space)
+ return -ENOSYS;
+
+ return ops->get_free_space(host);
+}
+
+UCLASS_DRIVER(smem) = {
+ .id = UCLASS_SMEM,
+ .name = "smem",
+};