BOOT_STATE_INITIAL,
BOOT_STATE_IMAGE_LOADING,
BOOT_STATE_INITRD_LOADING,
+ BOOT_STATE_DTB_LOADING,
BOOT_STATE_FINISH,
BOOT_STATE_UNKNOWN,
};
free(hooks);
}
-static void boot_process(void *ctx, int *status)
+static void boot_process(void *ctx, int status)
{
struct boot_task *task = ctx;
unsigned int clean_image = 0;
BOOT_STATUS_ERROR,
"Couldn't load kernel image");
goto no_load;
- } else {
- task->state = BOOT_STATE_IMAGE_LOADING;
- *status = 0;
- return;
}
+ task->state = BOOT_STATE_IMAGE_LOADING;
+ return;
}
if (task->state == BOOT_STATE_IMAGE_LOADING) {
+ if (status) {
+ update_status(task->status_fn, task->status_arg,
+ BOOT_STATUS_ERROR,
+ "Error loading kernel image");
+ goto no_load;
+ }
+ task->state = BOOT_STATE_INITRD_LOADING;
+
if (task->initrd) {
update_status(task->status_fn, task->status_arg,
BOOT_STATUS_INFO, "loading initrd");
BOOT_STATUS_ERROR,
"Couldn't load initrd image");
goto no_load;
- } else {
- task->state = BOOT_STATE_INITRD_LOADING;
- *status = 0;
- return;
}
- } else {
- task->state = BOOT_STATE_INITRD_LOADING;
+ return;
}
}
if (task->state == BOOT_STATE_INITRD_LOADING) {
+ if (status) {
+ update_status(task->status_fn, task->status_arg,
+ BOOT_STATUS_ERROR,
+ "Error loading initrd");
+ goto no_load;
+ }
+ task->state = BOOT_STATE_DTB_LOADING;
+
if (task->dtb) {
update_status(task->status_fn, task->status_arg,
BOOT_STATUS_INFO,
BOOT_STATUS_ERROR,
"Couldn't load device tree");
goto no_load;
- } else {
- task->state = BOOT_STATE_FINISH;
- *status = 0;
- return;
}
- } else {
- task->state = BOOT_STATE_FINISH;
+ return;
+ }
+ }
+
+ if (task->state == BOOT_STATE_DTB_LOADING) {
+ if (status) {
+ update_status(task->status_fn, task->status_arg,
+ BOOT_STATUS_ERROR,
+ "Error loading dtb");
+ goto no_load;
}
+ task->state = BOOT_STATE_FINISH;
}
+
if (task->state != BOOT_STATE_FINISH) {
task->state = BOOT_STATE_UNKNOWN;
- *status = -1;
return;
}
}
talloc_free(task);
-
- *status = result;
}
int boot(void *ctx, struct discover_boot_option *opt, struct boot_command *cmd,
struct boot_task *boot_task;
struct pb_url *image = NULL;
const char *boot_desc;
- int result;
if (opt && opt->option->name)
boot_desc = opt->option->name;
boot_task->args = NULL;
}
- boot_process(boot_task, &result);
+ boot_process(boot_task, 0);
- return result;
+ return 0;
}