blob: 4ea39c4f70015095021971263773dae422fe7557 [file]
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include "init.h"
int early_init(void)
{
int ret;
struct init_fn *init_fn;
unsigned int num_inits = table_num_entries(INIT_FNS);
printf("Number of init entries: %d\n", num_inits);
for_each_table_entry(init_fn, INIT_FNS) {
if (init_fn->detect && init_fn->detect() > 0) {
init_fn->flags |= INIT_DETECTED;
printf("Initializing %s ...\n", init_fn->name);
ret = init_fn->early_init();
if (ret) {
if (init_fn->critical)
return ret;
printf("Failed to initialize %s on early init, but its not critical\n", init_fn->name);
} else
printf("Completed initializing %s !\n", init_fn->name);
if (init_fn->flags & INIT_FINISH_IF_DETECTED)
break;
}
}
return 0;
}
int late_init(void)
{
int ret;
struct init_fn *init_fn;
for_each_table_entry(init_fn, INIT_FNS) {
if ((init_fn->flags & INIT_DETECTED) && init_fn->late_init) {
printf("Running late init for %s ...\n", init_fn->name);
ret = init_fn->late_init();
if (ret) {
if (init_fn->critical)
return ret;
printf("Failed to initialize %s on late init, but its not critical\n", init_fn->name);
} else
printf("Completed late initializing of %s !\n", init_fn->name);
}
}
return 0;
}