mirror of https://gitee.com/openkylin/qemu.git
loader: Add AddressSpace loading support to uImages
Add a new function load_uimage_as() that allows the caller to specify an AddressSpace to use when loading the uImage. The original load_uimage() function doesn't have any change in functionality. Signed-off-by: Alistair Francis <alistair.francis@xilinx.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 1254092e6b80d3cd3cfabafe165d56a96c54c0b5.1474331683.git.alistair.francis@xilinx.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
70bb1d16f4
commit
5e774eb3bd
|
@ -581,7 +581,7 @@ static ssize_t gunzip(void *dst, size_t dstlen, uint8_t *src,
|
|||
static int load_uboot_image(const char *filename, hwaddr *ep, hwaddr *loadaddr,
|
||||
int *is_linux, uint8_t image_type,
|
||||
uint64_t (*translate_fn)(void *, uint64_t),
|
||||
void *translate_opaque)
|
||||
void *translate_opaque, AddressSpace *as)
|
||||
{
|
||||
int fd;
|
||||
int size;
|
||||
|
@ -682,7 +682,7 @@ static int load_uboot_image(const char *filename, hwaddr *ep, hwaddr *loadaddr,
|
|||
hdr->ih_size = bytes;
|
||||
}
|
||||
|
||||
rom_add_blob_fixed(filename, data, hdr->ih_size, address);
|
||||
rom_add_blob_fixed_as(filename, data, hdr->ih_size, address, as);
|
||||
|
||||
ret = hdr->ih_size;
|
||||
|
||||
|
@ -698,14 +698,23 @@ int load_uimage(const char *filename, hwaddr *ep, hwaddr *loadaddr,
|
|||
void *translate_opaque)
|
||||
{
|
||||
return load_uboot_image(filename, ep, loadaddr, is_linux, IH_TYPE_KERNEL,
|
||||
translate_fn, translate_opaque);
|
||||
translate_fn, translate_opaque, NULL);
|
||||
}
|
||||
|
||||
int load_uimage_as(const char *filename, hwaddr *ep, hwaddr *loadaddr,
|
||||
int *is_linux,
|
||||
uint64_t (*translate_fn)(void *, uint64_t),
|
||||
void *translate_opaque, AddressSpace *as)
|
||||
{
|
||||
return load_uboot_image(filename, ep, loadaddr, is_linux, IH_TYPE_KERNEL,
|
||||
translate_fn, translate_opaque, as);
|
||||
}
|
||||
|
||||
/* Load a ramdisk. */
|
||||
int load_ramdisk(const char *filename, hwaddr addr, uint64_t max_sz)
|
||||
{
|
||||
return load_uboot_image(filename, NULL, &addr, NULL, IH_TYPE_RAMDISK,
|
||||
NULL, NULL);
|
||||
NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
/* Load a gzip-compressed kernel to a dynamically allocated buffer. */
|
||||
|
|
|
@ -102,6 +102,30 @@ void load_elf_hdr(const char *filename, void *hdr, bool *is64, Error **errp);
|
|||
|
||||
int load_aout(const char *filename, hwaddr addr, int max_sz,
|
||||
int bswap_needed, hwaddr target_page_size);
|
||||
|
||||
/** load_uimage_as:
|
||||
* @filename: Path of uimage file
|
||||
* @ep: Populated with program entry point. Ignored if NULL.
|
||||
* @loadaddr: Populated with the load address. Ignored if NULL.
|
||||
* @is_linux: Is set to true if the image loaded is Linux. Ignored if NULL.
|
||||
* @translate_fn: optional function to translate load addresses
|
||||
* @translate_opaque: opaque data passed to @translate_fn
|
||||
* @as: The AddressSpace to load the ELF to. The value of address_space_memory
|
||||
* is used if nothing is supplied here.
|
||||
*
|
||||
* Loads a u-boot image into memory.
|
||||
*
|
||||
* Returns the size of the loaded image on success, -1 otherwise.
|
||||
*/
|
||||
int load_uimage_as(const char *filename, hwaddr *ep,
|
||||
hwaddr *loadaddr, int *is_linux,
|
||||
uint64_t (*translate_fn)(void *, uint64_t),
|
||||
void *translate_opaque, AddressSpace *as);
|
||||
|
||||
/** load_uimage:
|
||||
* Same as load_uimage_as(), but doesn't allow the caller to specify an
|
||||
* AddressSpace.
|
||||
*/
|
||||
int load_uimage(const char *filename, hwaddr *ep,
|
||||
hwaddr *loadaddr, int *is_linux,
|
||||
uint64_t (*translate_fn)(void *, uint64_t),
|
||||
|
@ -155,6 +179,8 @@ void hmp_info_roms(Monitor *mon, const QDict *qdict);
|
|||
rom_add_file(_f, NULL, 0, _i, false, _mr, NULL)
|
||||
#define rom_add_file_as(_f, _as, _i) \
|
||||
rom_add_file(_f, NULL, 0, _i, false, NULL, _as)
|
||||
#define rom_add_blob_fixed_as(_f, _b, _l, _a, _as) \
|
||||
rom_add_blob(_f, _b, _l, _l, _a, NULL, NULL, _as)
|
||||
|
||||
#define PC_ROM_MIN_VGA 0xc0000
|
||||
#define PC_ROM_MIN_OPTION 0xc8000
|
||||
|
|
Loading…
Reference in New Issue