hw/arm, loongarch: Move load_image_to_fw_cfg() to common location
load_image_to_fw_cfg() is duplicated by both arm and loongarch. The same function will be required by riscv too. So, it's time to refactor and move this function to a common path. Signed-off-by: Sunil V L <sunilvl@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Song Gao <gaosong@loongson.cn> Message-Id: <20221004092351.18209-2-sunilvl@ventanamicro.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
6c1876958b
commit
785a7383dd
@ -822,55 +822,6 @@ static void do_cpu_reset(void *opaque)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* load_image_to_fw_cfg() - Load an image file into an fw_cfg entry identified
|
||||
* by key.
|
||||
* @fw_cfg: The firmware config instance to store the data in.
|
||||
* @size_key: The firmware config key to store the size of the loaded
|
||||
* data under, with fw_cfg_add_i32().
|
||||
* @data_key: The firmware config key to store the loaded data under,
|
||||
* with fw_cfg_add_bytes().
|
||||
* @image_name: The name of the image file to load. If it is NULL, the
|
||||
* function returns without doing anything.
|
||||
* @try_decompress: Whether the image should be decompressed (gunzipped) before
|
||||
* adding it to fw_cfg. If decompression fails, the image is
|
||||
* loaded as-is.
|
||||
*
|
||||
* In case of failure, the function prints an error message to stderr and the
|
||||
* process exits with status 1.
|
||||
*/
|
||||
static void load_image_to_fw_cfg(FWCfgState *fw_cfg, uint16_t size_key,
|
||||
uint16_t data_key, const char *image_name,
|
||||
bool try_decompress)
|
||||
{
|
||||
size_t size = -1;
|
||||
uint8_t *data;
|
||||
|
||||
if (image_name == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (try_decompress) {
|
||||
size = load_image_gzipped_buffer(image_name,
|
||||
LOAD_IMAGE_MAX_GUNZIP_BYTES, &data);
|
||||
}
|
||||
|
||||
if (size == (size_t)-1) {
|
||||
gchar *contents;
|
||||
gsize length;
|
||||
|
||||
if (!g_file_get_contents(image_name, &contents, &length, NULL)) {
|
||||
error_report("failed to load \"%s\"", image_name);
|
||||
exit(1);
|
||||
}
|
||||
size = length;
|
||||
data = (uint8_t *)contents;
|
||||
}
|
||||
|
||||
fw_cfg_add_i32(fw_cfg, size_key, size);
|
||||
fw_cfg_add_bytes(fw_cfg, data_key, data, size);
|
||||
}
|
||||
|
||||
static int do_arm_linux_init(Object *obj, void *opaque)
|
||||
{
|
||||
if (object_dynamic_cast(obj, TYPE_ARM_LINUX_BOOT_IF)) {
|
||||
|
@ -598,39 +598,6 @@ static void reset_load_elf(void *opaque)
|
||||
}
|
||||
}
|
||||
|
||||
/* Load an image file into an fw_cfg entry identified by key. */
|
||||
static void load_image_to_fw_cfg(FWCfgState *fw_cfg, uint16_t size_key,
|
||||
uint16_t data_key, const char *image_name,
|
||||
bool try_decompress)
|
||||
{
|
||||
size_t size = -1;
|
||||
uint8_t *data;
|
||||
|
||||
if (image_name == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (try_decompress) {
|
||||
size = load_image_gzipped_buffer(image_name,
|
||||
LOAD_IMAGE_MAX_GUNZIP_BYTES, &data);
|
||||
}
|
||||
|
||||
if (size == (size_t)-1) {
|
||||
gchar *contents;
|
||||
gsize length;
|
||||
|
||||
if (!g_file_get_contents(image_name, &contents, &length, NULL)) {
|
||||
error_report("failed to load \"%s\"", image_name);
|
||||
exit(1);
|
||||
}
|
||||
size = length;
|
||||
data = (uint8_t *)contents;
|
||||
}
|
||||
|
||||
fw_cfg_add_i32(fw_cfg, size_key, size);
|
||||
fw_cfg_add_bytes(fw_cfg, data_key, data, size);
|
||||
}
|
||||
|
||||
static void fw_cfg_add_kernel_info(FWCfgState *fw_cfg)
|
||||
{
|
||||
/*
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include "qapi/error.h"
|
||||
#include "hw/acpi/aml-build.h"
|
||||
#include "hw/pci/pci_bus.h"
|
||||
#include "hw/loader.h"
|
||||
|
||||
#define FW_CFG_FILE_SLOTS_DFLT 0x20
|
||||
|
||||
@ -1221,6 +1222,37 @@ FWCfgState *fw_cfg_find(void)
|
||||
return FW_CFG(object_resolve_path_type("", TYPE_FW_CFG, NULL));
|
||||
}
|
||||
|
||||
void load_image_to_fw_cfg(FWCfgState *fw_cfg, uint16_t size_key,
|
||||
uint16_t data_key, const char *image_name,
|
||||
bool try_decompress)
|
||||
{
|
||||
size_t size = -1;
|
||||
uint8_t *data;
|
||||
|
||||
if (image_name == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (try_decompress) {
|
||||
size = load_image_gzipped_buffer(image_name,
|
||||
LOAD_IMAGE_MAX_GUNZIP_BYTES, &data);
|
||||
}
|
||||
|
||||
if (size == (size_t)-1) {
|
||||
gchar *contents;
|
||||
gsize length;
|
||||
|
||||
if (!g_file_get_contents(image_name, &contents, &length, NULL)) {
|
||||
error_report("failed to load \"%s\"", image_name);
|
||||
exit(1);
|
||||
}
|
||||
size = length;
|
||||
data = (uint8_t *)contents;
|
||||
}
|
||||
|
||||
fw_cfg_add_i32(fw_cfg, size_key, size);
|
||||
fw_cfg_add_bytes(fw_cfg, data_key, data, size);
|
||||
}
|
||||
|
||||
static void fw_cfg_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
|
@ -364,4 +364,25 @@ bool fw_cfg_dma_enabled(void *opaque);
|
||||
*/
|
||||
const char *fw_cfg_arch_key_name(uint16_t key);
|
||||
|
||||
/**
|
||||
* load_image_to_fw_cfg() - Load an image file into an fw_cfg entry identified
|
||||
* by key.
|
||||
* @fw_cfg: The firmware config instance to store the data in.
|
||||
* @size_key: The firmware config key to store the size of the loaded
|
||||
* data under, with fw_cfg_add_i32().
|
||||
* @data_key: The firmware config key to store the loaded data under,
|
||||
* with fw_cfg_add_bytes().
|
||||
* @image_name: The name of the image file to load. If it is NULL, the
|
||||
* function returns without doing anything.
|
||||
* @try_decompress: Whether the image should be decompressed (gunzipped) before
|
||||
* adding it to fw_cfg. If decompression fails, the image is
|
||||
* loaded as-is.
|
||||
*
|
||||
* In case of failure, the function prints an error message to stderr and the
|
||||
* process exits with status 1.
|
||||
*/
|
||||
void load_image_to_fw_cfg(FWCfgState *fw_cfg, uint16_t size_key,
|
||||
uint16_t data_key, const char *image_name,
|
||||
bool try_decompress);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user