mirror of
https://gitlab.com/qemu-project/openbios.git
synced 2024-02-13 08:34:06 +08:00
Allow yaboot to read files from cdrom (Laurent Vivier)
git-svn-id: svn://coreboot.org/openbios/openbios-devel@325 f158a5a8-5612-0410-a976-696ce0be7e32
This commit is contained in:
@@ -61,10 +61,12 @@ load_elf_rom( ulong *elf_entry, int fd )
|
||||
/* the ELF-image (usually) starts at offset 0x4000 */
|
||||
if( (elf_offs=find_elf(fd)) < 0 ) {
|
||||
ELF_DPRINTF("----> %s is not an ELF image\n", get_file_path(fd));
|
||||
exit(1);
|
||||
return -1;
|
||||
}
|
||||
if( !(phdr=elf_readhdrs(fd, elf_offs, &ehdr)) ) {
|
||||
ELF_DPRINTF("elf_readhdrs failed\n");
|
||||
return -1;
|
||||
}
|
||||
if( !(phdr=elf_readhdrs(fd, elf_offs, &ehdr)) )
|
||||
fatal_error("elf_readhdrs failed\n");
|
||||
|
||||
*elf_entry = ehdr.e_entry;
|
||||
|
||||
@@ -89,8 +91,10 @@ load_elf_rom( ulong *elf_entry, int fd )
|
||||
fatal_error("Claim failed!\n");
|
||||
|
||||
addr = (char*)phdr[i].p_vaddr;
|
||||
if( read_io(fd, addr, s) != s )
|
||||
fatal_error("read failed\n");
|
||||
if( read_io(fd, addr, s) != s ) {
|
||||
ELF_DPRINTF("read failed\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
flush_icache_range( addr, addr+s );
|
||||
|
||||
@@ -116,14 +120,16 @@ static void
|
||||
try_path(const char *path, const char *param)
|
||||
{
|
||||
ulong elf_entry;
|
||||
int fd;
|
||||
int fd, ret;
|
||||
|
||||
ELF_DPRINTF("Trying %s %s\n", path, param);
|
||||
if ((fd = open_io(path)) == -1) {
|
||||
ELF_DPRINTF("Can't open %s\n", path);
|
||||
return;
|
||||
}
|
||||
(void) load_elf_rom( &elf_entry, fd );
|
||||
ret = load_elf_rom( &elf_entry, fd );
|
||||
if (ret < 0)
|
||||
return;
|
||||
close_io( fd );
|
||||
encode_bootpath( path, param );
|
||||
|
||||
@@ -258,8 +264,8 @@ yaboot_startup( void )
|
||||
POP();
|
||||
param = pop_fstr_copy();
|
||||
}
|
||||
try_bootinfo(path);
|
||||
try_path(path, param);
|
||||
try_bootinfo(path);
|
||||
} else {
|
||||
char boot_device = nvram_read(0x34);
|
||||
|
||||
|
||||
@@ -255,6 +255,12 @@ files_probe( files_info_t *dummy )
|
||||
PUSH( ret );
|
||||
}
|
||||
|
||||
static void
|
||||
files_block_size( files_info_t *dummy )
|
||||
{
|
||||
PUSH(512);
|
||||
}
|
||||
|
||||
static void
|
||||
files_initializer( files_info_t *dummy )
|
||||
{
|
||||
@@ -269,6 +275,7 @@ NODE_METHODS( files ) = {
|
||||
{ "write", files_write },
|
||||
{ "seek", files_seek },
|
||||
{ "tell", files_tell },
|
||||
{ "block-size", files_block_size },
|
||||
|
||||
/* special */
|
||||
{ "reopen", files_reopen },
|
||||
|
||||
@@ -55,7 +55,7 @@ macparts_open( macparts_info_t *di )
|
||||
free( str );
|
||||
}
|
||||
if( parnum < 0 )
|
||||
parnum = 1;
|
||||
parnum = 0;
|
||||
|
||||
DPRINTF("macparts_open %d\n", parnum);
|
||||
SEEK( 0 );
|
||||
|
||||
Reference in New Issue
Block a user