mirror of
git://projects.qi-hardware.com/xburst-tools.git
synced 2024-11-30 03:57:31 +02:00
phase2: separate block init from try_this_kernel
As an added benefit, we can drop one level of indentation. Signed-off-by: Werner Almesberger <werner@openmoko.org>
This commit is contained in:
parent
d3ee803b58
commit
f5798e6359
@ -96,6 +96,34 @@ int read_file(const char * filepath, u8 * destination, int size)
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int do_block_init(void)
|
||||||
|
{
|
||||||
|
static void * last_block_init = NULL;
|
||||||
|
static int last_block_init_result = 0;
|
||||||
|
|
||||||
|
/* if this device needs initializing, try to init it */
|
||||||
|
if (!this_kernel->block_init)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cache result to limit attempts for same
|
||||||
|
* block device to one time
|
||||||
|
*/
|
||||||
|
if (this_kernel->block_init != last_block_init)
|
||||||
|
last_block_init_result = (this_kernel->block_init)();
|
||||||
|
|
||||||
|
if (last_block_init_result) {
|
||||||
|
puts("block device init failed\n");
|
||||||
|
if (this_kernel->block_init != last_block_init)
|
||||||
|
indicate(UI_IND_MOUNT_FAIL);
|
||||||
|
last_block_init = this_kernel[1].block_init;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
last_block_init = this_kernel->block_init;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int do_partitions(void *kernel_dram)
|
static int do_partitions(void *kernel_dram)
|
||||||
{
|
{
|
||||||
unsigned char *p = kernel_dram;
|
unsigned char *p = kernel_dram;
|
||||||
@ -251,8 +279,6 @@ static void try_this_kernel(void)
|
|||||||
void (*the_kernel)(int zero, int arch, uint params);
|
void (*the_kernel)(int zero, int arch, uint params);
|
||||||
unsigned int initramfs_len = 0;
|
unsigned int initramfs_len = 0;
|
||||||
static char commandline_rootfs_append[512] = "";
|
static char commandline_rootfs_append[512] = "";
|
||||||
static void * last_block_init = NULL;
|
|
||||||
static int last_block_init_result = 0;
|
|
||||||
int ret;
|
int ret;
|
||||||
void * kernel_dram = (void *)this_board->linux_mem_start + 0x8000;
|
void * kernel_dram = (void *)this_board->linux_mem_start + 0x8000;
|
||||||
image_header_t *hdr;
|
image_header_t *hdr;
|
||||||
@ -267,24 +293,8 @@ static void try_this_kernel(void)
|
|||||||
|
|
||||||
indicate(UI_IND_MOUNT_PART);
|
indicate(UI_IND_MOUNT_PART);
|
||||||
|
|
||||||
/* if this device needs initializing, try to init it */
|
if (!do_block_init())
|
||||||
if (this_kernel->block_init) {
|
return;
|
||||||
/*
|
|
||||||
* cache result to limit attempts for same
|
|
||||||
* block device to one time
|
|
||||||
*/
|
|
||||||
if (this_kernel->block_init != last_block_init)
|
|
||||||
last_block_init_result = (this_kernel->block_init)();
|
|
||||||
|
|
||||||
if (last_block_init_result) {
|
|
||||||
puts("block device init failed\n");
|
|
||||||
if (this_kernel->block_init != last_block_init)
|
|
||||||
indicate(UI_IND_MOUNT_FAIL);
|
|
||||||
last_block_init = this_kernel[1].block_init;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
last_block_init = this_kernel->block_init;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!do_partitions(kernel_dram))
|
if (!do_partitions(kernel_dram))
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user