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)
|
static int do_arm_linux_init(Object *obj, void *opaque)
|
||||||
{
|
{
|
||||||
if (object_dynamic_cast(obj, TYPE_ARM_LINUX_BOOT_IF)) {
|
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)
|
static void fw_cfg_add_kernel_info(FWCfgState *fw_cfg)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "hw/acpi/aml-build.h"
|
#include "hw/acpi/aml-build.h"
|
||||||
#include "hw/pci/pci_bus.h"
|
#include "hw/pci/pci_bus.h"
|
||||||
|
#include "hw/loader.h"
|
||||||
|
|
||||||
#define FW_CFG_FILE_SLOTS_DFLT 0x20
|
#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));
|
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)
|
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);
|
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
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user