int set_resource_privdata(struct resource *resource, void *priv);
+void init_resource_drivers(void);
+void exit_resource_drivers(void);
+
inline __attribute__((always_inline)) int64_t get_time_now(void)
{
struct timeval tv;
{
int ret;
+ init_resource_drivers();
+
ret = request_server_init();
if (ret < 0) {
_E("failed to initialize request server\n");
{
monitor_thread_exit(&g_monitor);
request_server_exit();
+ exit_resource_drivers();
unregister_notifier(DEVICE_NOTIFIER_INIT_DONE, monitor_setup, NULL);
}
return 0;
}
+
+void init_resource_drivers(void)
+{
+ struct resource_driver *driver;
+ int i, ret = 0;
+
+ for (i = 0; i < g_list_length(g_resource_driver_head); i++) {
+ driver = g_list_nth(g_list_first(g_resource_driver_head), i)->data;
+
+ if (driver->ops.init) {
+ ret = driver->ops.init();
+ if (ret < 0) {
+ _D("failed to init resource driver: %s\n", driver->name);
+ remove_resource_driver(driver);
+ }
+ }
+ }
+}
+
+void exit_resource_drivers(void)
+{
+ const struct resource_driver *driver;
+ int i;
+
+ for (i = 0; i < g_list_length(g_resource_driver_head); i++) {
+ driver = g_list_nth(g_list_first(g_resource_driver_head), i)->data;
+
+ if (driver->ops.exit)
+ driver->ops.exit();
+ }
+}