summaryrefslogtreecommitdiff
path: root/drivers/smem
diff options
context:
space:
mode:
authorRamon Fried <ramon.fried@gmail.com>2018-07-02 02:57:55 +0300
committerTom Rini <trini@konsulko.com>2018-07-19 23:31:37 +0300
commit7b384eccc785b596f68448b155cbda26df57fb23 (patch)
tree77d623c310e8050de65ecc655a46dee7b3f81933 /drivers/smem
parentb19886b9469174213877ef37670ce35c55acb456 (diff)
downloadu-boot-7b384eccc785b596f68448b155cbda26df57fb23.tar.xz
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')
-rw-r--r--drivers/smem/Kconfig2
-rw-r--r--drivers/smem/Makefile5
-rw-r--r--drivers/smem/smem-uclass.c45
3 files changed, 52 insertions, 0 deletions
diff --git a/drivers/smem/Kconfig b/drivers/smem/Kconfig
new file mode 100644
index 0000000000..64337a8b8e
--- /dev/null
+++ b/drivers/smem/Kconfig
@@ -0,0 +1,2 @@
+menuconfig SMEM
+ bool "SMEM (Shared Memory mamanger) support"
diff --git a/drivers/smem/Makefile b/drivers/smem/Makefile
new file mode 100644
index 0000000000..ca55c4512d
--- /dev/null
+++ b/drivers/smem/Makefile
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Makefile for the U-Boot SMEM interface drivers
+
+obj-$(CONFIG_SMEM) += smem-uclass.o
diff --git a/drivers/smem/smem-uclass.c b/drivers/smem/smem-uclass.c
new file mode 100644
index 0000000000..ce7bf40656
--- /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",
+};