core: Add resource-core 23/299923/7
authorYoungjae Cho <y0.cho@samsung.com>
Wed, 11 Oct 2023 10:57:15 +0000 (19:57 +0900)
committerYoungjae Cho <y0.cho@samsung.com>
Tue, 7 Nov 2023 02:03:42 +0000 (11:03 +0900)
It has only one attribute, DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE,
which denotes delayed_init_done. It will replace device-notifier of
DEVICED_NOTIFIER_DELAYED_INIT with resource-manager.

Change-Id: Ifb60bd20cc36704db16460460a24475cc739f6de
Signed-off-by: Youngjae Cho <y0.cho@samsung.com>
CMakeLists.txt
src/core/delayed-init-notifier.c
src/core/resource-core.c [new file with mode: 0644]
src/power/power-boot.c

index 44ef4c9b8fcc6cc49cfb418ca24c0189d9a01941..1e5dd9a0e7ab2727dbb97378ba1789779cee959b 100644 (file)
@@ -73,6 +73,7 @@ SET(SRCS
        src/core/main.c
        src/core/sig-handler.c
        src/core/udev.c
+       src/core/resource-core.c
        src/proc/cpu-info.c
        src/time/time-handler.c
 )
index 6f0754b2478ffa4c121fc3cc3b68e6b9e094be71..7bec90b509fab19a2357c3f90a326c48dd04e175 100644 (file)
 #include "shared/common.h"
 #include "shared/devices.h"
 #include <libsyscommon/libgdbus.h>
+#include <libsyscommon/resource-manager.h>
 #include <libsyscommon/list.h>
+#include <system/syscommon-plugin-deviced-core-interface.h>
 
 static guint delayed_init_timer;
+static int delayed_init_done_callback_id;
 
 #define DELAYED_INIT_WAIT_TIME 30   /* second */
 #define DEFAULT_DELAYED_INIT_VALUE     (guint)0x0DEF0DEF
@@ -38,6 +41,24 @@ static void delayed_init_stop(void)
        delayed_init_timer = 0;
 }
 
+static void delayed_init_done_callback(int resource_type,
+       int resource_id, int attr_id, const void *data, void *user_data, int count)
+{
+       int done;
+
+       if (!data)
+               return;
+
+       done = *(const int *) data;
+       if (!done)
+               return;
+
+       delayed_init_stop();
+
+       syscommon_resman_unsubscribe_event(delayed_init_done_callback_id);
+       delayed_init_done_callback_id = 0;
+}
+
 static int delayed_init_done(void *data)
 {
        static int done;
@@ -60,6 +81,8 @@ static gboolean delayed_init_timer_cb(void *data)
        delayed_init_stop();
        delayed_init_timer = 0;
 
+       syscommon_resman_unsubscribe_event(delayed_init_done_callback_id);
+
        done = delayed_init_done(NULL);
        if (done)
                return G_SOURCE_REMOVE;
@@ -67,6 +90,8 @@ static gboolean delayed_init_timer_cb(void *data)
        _I("delayed init");
 
        done = 1;
+       syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_CORE),
+               DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE, 1);
        syscommon_notifier_emit_notify_once(DEVICED_NOTIFIER_DELAYED_INIT, (void *)&done);
 
        return G_SOURCE_REMOVE;
@@ -81,6 +106,10 @@ static void delayed_init_done_notifier_init(void *data)
                _I("restart booting done");
                return;
        }
+
+       syscommon_resman_subscribe_resource_attribute_event(DEVICED_RESOURCE_TYPE_CORE,
+               DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE, delayed_init_done_callback,
+               NULL, &delayed_init_done_callback_id);
        syscommon_notifier_subscribe_notify(DEVICED_NOTIFIER_DELAYED_INIT, delayed_init_done);
        delayed_init_timer = g_timeout_add_seconds(DELAYED_INIT_WAIT_TIME,
                                                delayed_init_timer_cb, NULL);
diff --git a/src/core/resource-core.c b/src/core/resource-core.c
new file mode 100644 (file)
index 0000000..4b6c700
--- /dev/null
@@ -0,0 +1,71 @@
+#include <assert.h>
+
+#include <libsyscommon/resource-manager.h>
+#include <libsyscommon/resource-type.h>
+#include <system/syscommon-plugin-deviced-core.h>
+#include <system/syscommon-plugin-deviced-core-interface.h>
+#include <system/syscommon-plugin-deviced-common-interface.h>
+
+#include "shared/common.h"
+
+static bool delayed_init_done = false;
+
+static int get_core_attr_data(int resource_id,
+       const struct syscommon_resman_resource_attribute *attr, void *data)
+{
+       assert(attr);
+       assert(data);
+
+       switch (attr->id) {
+       case DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE:
+               *(int *) data = delayed_init_done;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int set_core_attr_data(int resource_id,
+       const struct syscommon_resman_resource_attribute *attr,
+       const void *data, int count)
+{
+       assert(attr);
+       assert(data);
+
+       switch (attr->id) {
+       case DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE:
+               {
+                       delayed_init_done = *(const int *) data;
+               }
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static const struct syscommon_resman_resource_attribute core_attrs[] = {
+       {
+               .name = "DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE",
+               .id = DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE,
+               .type = SYSCOMMON_RESMAN_DATA_TYPE_INT,
+               .flag = SYSCOMMON_RESMAN_RESOURCE_FLAG_PUBLIC,
+               .ops = {
+                       .get = get_core_attr_data,
+                       .set = set_core_attr_data,
+                       .is_supported = syscommon_resman_resource_attr_supported_always,
+               },
+       },
+};
+
+static const struct syscommon_resman_resource_driver deviced_core_driver = {
+       .name           = "core",
+       .type           = DEVICED_RESOURCE_TYPE_CORE,
+       .flag           = SYSCOMMON_RESMAN_RESOURCE_DRIVER_FLAG_COUNT_ONLY_ONE,
+       .attrs          = core_attrs,
+       .num_attrs      = ARRAY_SIZE(core_attrs),
+};
+SYSCOMMON_RESMAN_RESOURCE_DRIVER_REGISTER(&deviced_core_driver);
index 7e80dd73fe1382305d6f0a9593eb0a2d75c04f45..baf421843778ec1c173cf8f40b214570790f1039 100644 (file)
 #include <eventsystem.h>
 #include <libsyscommon/libgdbus.h>
 #include <libsyscommon/libsystemd.h>
+#include <libsyscommon/resource-manager.h>
 #include <libsyscommon/list.h>
 #include <libsyscommon/file.h>
 #include <libsyscommon/ini-parser.h>
+#include <system/syscommon-plugin-deviced-core-interface.h>
 #include <system/syscommon-plugin-deviced-power-interface.h>
 #include <hal/device/hal-board.h>
 
@@ -82,6 +84,8 @@ static void delayed_init_done_received(GDBusConnection  *conn,
                        return;
                }
                CRITICAL_LOG("System session is ready.");
+               syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_CORE),
+                       DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE, 1);
                syscommon_notifier_emit_notify_once(DEVICED_NOTIFIER_DELAYED_INIT, &system_done);
 
        } else if (strcmp(name, SYSTEMD_DBUS_SIGNAL_USER_STARTUP_FINISHED) == 0) {