aboutsummaryrefslogtreecommitdiff
path: root/core/include/kernel/dt_driver.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/include/kernel/dt_driver.h')
-rw-r--r--core/include/kernel/dt_driver.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/core/include/kernel/dt_driver.h b/core/include/kernel/dt_driver.h
new file mode 100644
index 00000000..e011ce99
--- /dev/null
+++ b/core/include/kernel/dt_driver.h
@@ -0,0 +1,63 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * Copyright (c) 2021, Linaro Limited
+ * Copyright (c) 2021, Bootlin
+ */
+
+#ifndef __DT_DRIVER_H
+#define __DT_DRIVER_H
+
+#include <kernel/dt.h>
+#include <stdint.h>
+#include <sys/queue.h>
+
+/**
+ * struct dt_driver_phandle_args - Devicetree phandle arguments
+ * @args_count: Count of cells for the device
+ * @args: Device consumer specifiers
+ */
+struct dt_driver_phandle_args {
+ int args_count;
+ uint32_t args[];
+};
+
+/*
+ * get_of_device_func - Callback function for returning a driver private
+ * instance based on a FDT phandle with possible arguments and the
+ * registered dt_driver private data reference.
+ *
+ * @parg: phandle argument(s) referencing the device in the FDT.
+ * @data: driver private data registered in struct dt_driver.
+ *
+ * Return a device opaque reference, e.g. a struct clk pointer for a clock
+ * driver, or NULL if not found.
+ */
+typedef void *(*get_of_device_func)(struct dt_driver_phandle_args *parg,
+ void *data);
+
+/*
+ * struct dt_driver_provider - DT related info on probed device
+ *
+ * Saves information on the probed device so that device
+ * drivers can get resources from DT phandle and related arguments.
+ *
+ * @nodeoffset: Node offset of device referenced in the FDT
+ * @type: One of DT_DRIVER_* or DT_DRIVER_NOTYPE.
+ * @provider_cells: Cells count in the FDT used by the driver's references
+ * @get_of_device: Function to get driver's device ref from phandle data
+ * @priv_data: Driver private data passed as @get_of_device argument
+ * @link: Reference in DT driver providers list
+ */
+struct dt_driver_provider {
+ int nodeoffset;
+ enum dt_driver_type type;
+ unsigned int provider_cells;
+ uint32_t phandle;
+ get_of_device_func get_of_device;
+ void *priv_data;
+ SLIST_ENTRY(dt_driver_provider) link;
+};
+
+SLIST_HEAD(dt_driver_prov_list, dt_driver_provider);
+extern struct dt_driver_prov_list dt_driver_provider_list;
+#endif /* __DT_DRIVER_H */