ron minnich wrote: > Acked-by: Ronald G. Minnich <[EMAIL PROTECTED]> > >
r458 Thanks, Marc > On 7/18/07, Marc Jones <[EMAIL PROTECTED]> wrote: >> :) >> Marc >> >> -- >> Marc Jones >> Senior Software Engineer >> (970) 226-9684 Office >> mailto:[EMAIL PROTECTED] >> http://www.amd.com/embeddedprocessors >> >> Add execute in place to lar. Allows code to be run from the ROM. >> >> Signed-off-by: Marc Jones <[EMAIL PROTECTED]> >> >> Index: LinuxBIOSv3/include/lar.h >> =================================================================== >> --- LinuxBIOSv3.orig/include/lar.h 2007-07-18 10:37:02.000000000 >> -0600 >> +++ LinuxBIOSv3/include/lar.h 2007-07-17 13:29:12.000000000 -0600 >> @@ -76,5 +76,6 @@ >> int find_file(struct mem_file *archive, char *filename, struct >> mem_file *result); >> int copy_file(struct mem_file *archive, char *filename, void *where); >> int run_file(struct mem_file *archive, char *filename, void *where); >> +int execute_in_place(struct mem_file *archive, char *filename); >> >> #endif /* LAR_H */ >> Index: LinuxBIOSv3/lib/lar.c >> =================================================================== >> --- LinuxBIOSv3.orig/lib/lar.c 2007-07-18 10:37:12.000000000 -0600 >> +++ LinuxBIOSv3/lib/lar.c 2007-07-17 13:26:55.000000000 -0600 >> @@ -3,6 +3,7 @@ >> * >> * Copyright (C) 2006-2007 coresystems GmbH >> * (Written by Stefan Reinauer <[EMAIL PROTECTED]> for >> coresystems GmbH) >> + * Copyright (C) 2007 Advanced Micro Devices, Inc. >> * >> * This program is free software; you can redistribute it and/or modify >> * it under the terms of the GNU General Public License as published by >> @@ -103,16 +104,41 @@ >> return 1; >> } >> >> + >> +/** >> + * Find the file in the LAR header, copy it to the desired location, >> + * and execute it. A location of 0xFFFFFFFF means execute in place >> (XIP). >> + */ >> int run_file(struct mem_file *archive, char *filename, void *where) >> { >> int (*v) (void); >> + struct mem_file result; >> >> - if (copy_file(archive, filename, where)) { >> - printk(BIOS_INFO, "LAR: Run file %s failed: No such >> file.\n", >> - filename); >> - return 1; >> + if ((u32) where != 0xFFFFFFFF) { >> + if (copy_file(archive, filename, where)) { >> + printk(BIOS_INFO, >> + "LAR: Run file %s failed: No such file.\n", >> + filename); >> + return 1; >> + } >> + } else { /* XIP */ >> + if (find_file(archive, filename, &result)) { >> + printk(BIOS_INFO, >> + "LAR: Run file %s failed: No such >> file.\n", >> + filename); >> + return 1; >> + } >> + where = result.start; >> } >> >> v = where; >> return v(); >> } >> + >> +/** >> + * Call run_file() to execute in place. >> + */ >> +int execute_in_place(struct mem_file *archive, char *filename) >> +{ >> + return run_file(archive, filename, (void *) 0xFFFFFFFF); >> +} >> \ No newline at end of file >> >> -- >> linuxbios mailing list >> [email protected] >> http://www.linuxbios.org/mailman/listinfo/linuxbios >> > > -- Marc Jones Senior Software Engineer (970) 226-9684 Office mailto:[EMAIL PROTECTED] http://www.amd.com/embeddedprocessors -- linuxbios mailing list [email protected] http://www.linuxbios.org/mailman/listinfo/linuxbios
