]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
expo: Allow setting the start of the dynamic-ID range
authorSimon Glass <sjg@chromium.org>
Thu, 1 Jun 2023 16:22:47 +0000 (10:22 -0600)
committerTom Rini <trini@konsulko.com>
Fri, 14 Jul 2023 16:54:51 +0000 (12:54 -0400)
Provide a way to set this value so that it is easy to separate the
statically allocated IDs (generated by the caller) from those
generated dynamically by expo itself.

Signed-off-by: Simon Glass <sjg@chromium.org>
boot/expo.c
boot/scene.c
doc/develop/expo.rst
include/expo.h

index 8b966b6c793c2690b59cc2a1c6fc021542988c72..be11cfd4e946597c0439d5821866828dcf05907f 100644 (file)
@@ -56,6 +56,21 @@ void expo_destroy(struct expo *exp)
        free(exp);
 }
 
+uint resolve_id(struct expo *exp, uint id)
+{
+       if (!id)
+               id = exp->next_id++;
+       else if (id >= exp->next_id)
+               exp->next_id = id + 1;
+
+       return id;
+}
+
+void expo_set_dynamic_start(struct expo *exp, uint dyn_start)
+{
+       exp->next_id = dyn_start;
+}
+
 int expo_str(struct expo *exp, const char *name, uint id, const char *str)
 {
        struct expo_string *estr;
index 43c978e6ee803738ce9585f804888de8451efd08..2ac9bfcdbd52b853b099176e9f7745fc6860e934 100644 (file)
 #include <linux/input.h>
 #include "scene_internal.h"
 
-uint resolve_id(struct expo *exp, uint id)
-{
-       if (!id)
-               id = exp->next_id++;
-       else if (id >= exp->next_id)
-               exp->next_id = id + 1;
-
-       return id;
-}
-
 int scene_new(struct expo *exp, const char *name, uint id, struct scene **scnp)
 {
        struct scene *scn;
index 32dd7f0903075f54fe72b2ee4603e3a2f766c986..9565974a28e9d2a6909e0fb53c574a035d5723d2 100644 (file)
@@ -85,6 +85,9 @@ or even the IDs of objects. Programmatic creation of many items in a loop can be
 handled by allocating space in the enum for a maximum number of items, then
 adding the loop count to the enum values to obtain unique IDs.
 
+Where dynamic IDs are need, use expo_set_dynamic_start() to set the start value,
+so that they are allocated above the starting (enum) IDs.
+
 All text strings are stored in a structure attached to the expo, referenced by
 a text ID. This makes it easier at some point to implement multiple languages or
 to support Unicode strings.
index f77ee708519254c5a7aa73dff5ae49453019f101..b8f5327f26645c9ddd7fab64a3c59879461c2566 100644 (file)
@@ -257,6 +257,25 @@ int expo_new(const char *name, void *priv, struct expo **expp);
  */
 void expo_destroy(struct expo *exp);
 
+/**
+ * expo_set_dynamic_start() - Set the start of the 'dynamic' IDs
+ *
+ * It is common for a set of 'static' IDs to be used to refer to objects in the
+ * expo. These typically use an enum so that they are defined in sequential
+ * order.
+ *
+ * Dynamic IDs (for objects not in the enum) are intended to be used for
+ * objects to which the code does not need to refer. These are ideally located
+ * above the static IDs.
+ *
+ * Use this function to set the start of the dynamic range, making sure that the
+ * value is higher than all the statically allocated IDs.
+ *
+ * @exp: Expo to update
+ * @dyn_start: Start ID that expo should use for dynamic allocation
+ */
+void expo_set_dynamic_start(struct expo *exp, uint dyn_start);
+
 /**
  * expo_str() - add a new string to an expo
  *