summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/media/media-entity.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/include/media/media-entity.h b/include/media/media-entity.h
index 57881758927e..96626356b8f3 100644
--- a/include/media/media-entity.h
+++ b/include/media/media-entity.h
@@ -28,6 +28,39 @@
#include <linux/list.h>
#include <linux/media.h>
+/* Enums used internally at the media controller to represent graphs */
+
+/**
+ * enum media_gobj_type - type of a graph object
+ *
+ */
+enum media_gobj_type {
+ /* FIXME: add the types here, as we embed media_gobj */
+ MEDIA_GRAPH_NONE
+};
+
+#define MEDIA_BITS_PER_TYPE 8
+#define MEDIA_BITS_PER_LOCAL_ID (32 - MEDIA_BITS_PER_TYPE)
+#define MEDIA_LOCAL_ID_MASK GENMASK(MEDIA_BITS_PER_LOCAL_ID - 1, 0)
+
+/* Structs to represent the objects that belong to a media graph */
+
+/**
+ * struct media_gobj - Define a graph object.
+ *
+ * @id: Non-zero object ID identifier. The ID should be unique
+ * inside a media_device, as it is composed by
+ * MEDIA_BITS_PER_TYPE to store the type plus
+ * MEDIA_BITS_PER_LOCAL_ID to store a per-type ID
+ * (called as "local ID").
+ *
+ * All objects on the media graph should have this struct embedded
+ */
+struct media_gobj {
+ u32 id;
+};
+
+
struct media_pipeline {
};
@@ -118,6 +151,26 @@ static inline u32 media_entity_id(struct media_entity *entity)
return entity->id;
}
+static inline enum media_gobj_type media_type(struct media_gobj *gobj)
+{
+ return gobj->id >> MEDIA_BITS_PER_LOCAL_ID;
+}
+
+static inline u32 media_localid(struct media_gobj *gobj)
+{
+ return gobj->id & MEDIA_LOCAL_ID_MASK;
+}
+
+static inline u32 media_gobj_gen_id(enum media_gobj_type type, u32 local_id)
+{
+ u32 id;
+
+ id = type << MEDIA_BITS_PER_LOCAL_ID;
+ id |= local_id & MEDIA_LOCAL_ID_MASK;
+
+ return id;
+}
+
#define MEDIA_ENTITY_ENUM_MAX_DEPTH 16
#define MEDIA_ENTITY_ENUM_MAX_ID 64
@@ -138,6 +191,14 @@ struct media_entity_graph {
int top;
};
+#define gobj_to_entity(gobj) \
+ container_of(gobj, struct media_entity, graph_obj)
+
+void media_gobj_init(struct media_device *mdev,
+ enum media_gobj_type type,
+ struct media_gobj *gobj);
+void media_gobj_remove(struct media_gobj *gobj);
+
int media_entity_init(struct media_entity *entity, u16 num_pads,
struct media_pad *pads);
void media_entity_cleanup(struct media_entity *entity);