[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v10 10/15] fw_cfg: add "modify" functions for all types
From: |
Marc-André Lureau |
Subject: |
Re: [PATCH v10 10/15] fw_cfg: add "modify" functions for all types |
Date: |
Wed, 16 Oct 2019 17:02:09 +0200 |
On Wed, Oct 16, 2019 at 12:22 PM Sergio Lopez <address@hidden> wrote:
>
> This allows to alter the contents of an already added item.
>
> Signed-off-by: Sergio Lopez <address@hidden>
> Reviewed-by: Michael S. Tsirkin <address@hidden>
Used to fix kernel command line in following patch "hw/i386: Introduce
the microvm machine type", except fw_cfg_modify_i64().
Reviewed-by: Marc-André Lureau <address@hidden>
> ---
> include/hw/nvram/fw_cfg.h | 42 +++++++++++++++++++++++++++++++++++++++
> hw/nvram/fw_cfg.c | 29 +++++++++++++++++++++++++++
> 2 files changed, 71 insertions(+)
>
> diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h
> index 80e435d303..b5291eefad 100644
> --- a/include/hw/nvram/fw_cfg.h
> +++ b/include/hw/nvram/fw_cfg.h
> @@ -98,6 +98,20 @@ void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void
> *data, size_t len);
> */
> void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value);
>
> +/**
> + * fw_cfg_modify_string:
> + * @s: fw_cfg device being modified
> + * @key: selector key value for new fw_cfg item
> + * @value: NUL-terminated ascii string
> + *
> + * Replace the fw_cfg item available by selecting the given key. The new
> + * data will consist of a dynamically allocated copy of the provided string,
> + * including its NUL terminator. The data being replaced, assumed to have
> + * been dynamically allocated during an earlier call to either
> + * fw_cfg_add_string() or fw_cfg_modify_string(), is freed before returning.
> + */
> +void fw_cfg_modify_string(FWCfgState *s, uint16_t key, const char *value);
> +
> /**
> * fw_cfg_add_i16:
> * @s: fw_cfg device being modified
> @@ -136,6 +150,20 @@ void fw_cfg_modify_i16(FWCfgState *s, uint16_t key,
> uint16_t value);
> */
> void fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value);
>
> +/**
> + * fw_cfg_modify_i32:
> + * @s: fw_cfg device being modified
> + * @key: selector key value for new fw_cfg item
> + * @value: 32-bit integer
> + *
> + * Replace the fw_cfg item available by selecting the given key. The new
> + * data will consist of a dynamically allocated copy of the given 32-bit
> + * value, converted to little-endian representation. The data being replaced,
> + * assumed to have been dynamically allocated during an earlier call to
> + * either fw_cfg_add_i32() or fw_cfg_modify_i32(), is freed before returning.
> + */
> +void fw_cfg_modify_i32(FWCfgState *s, uint16_t key, uint32_t value);
> +
> /**
> * fw_cfg_add_i64:
> * @s: fw_cfg device being modified
> @@ -148,6 +176,20 @@ void fw_cfg_add_i32(FWCfgState *s, uint16_t key,
> uint32_t value);
> */
> void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value);
>
> +/**
> + * fw_cfg_modify_i64:
> + * @s: fw_cfg device being modified
> + * @key: selector key value for new fw_cfg item
> + * @value: 64-bit integer
> + *
> + * Replace the fw_cfg item available by selecting the given key. The new
> + * data will consist of a dynamically allocated copy of the given 64-bit
> + * value, converted to little-endian representation. The data being replaced,
> + * assumed to have been dynamically allocated during an earlier call to
> + * either fw_cfg_add_i64() or fw_cfg_modify_i64(), is freed before returning.
> + */
> +void fw_cfg_modify_i64(FWCfgState *s, uint16_t key, uint64_t value);
> +
> /**
> * fw_cfg_add_file:
> * @s: fw_cfg device being modified
> diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c
> index 7dc3ac378e..aef1727250 100644
> --- a/hw/nvram/fw_cfg.c
> +++ b/hw/nvram/fw_cfg.c
> @@ -690,6 +690,15 @@ void fw_cfg_add_string(FWCfgState *s, uint16_t key,
> const char *value)
> fw_cfg_add_bytes(s, key, g_memdup(value, sz), sz);
> }
>
> +void fw_cfg_modify_string(FWCfgState *s, uint16_t key, const char *value)
> +{
> + size_t sz = strlen(value) + 1;
> + char *old;
> +
> + old = fw_cfg_modify_bytes_read(s, key, g_memdup(value, sz), sz);
> + g_free(old);
> +}
> +
> void fw_cfg_add_i16(FWCfgState *s, uint16_t key, uint16_t value)
> {
> uint16_t *copy;
> @@ -720,6 +729,16 @@ void fw_cfg_add_i32(FWCfgState *s, uint16_t key,
> uint32_t value)
> fw_cfg_add_bytes(s, key, copy, sizeof(value));
> }
>
> +void fw_cfg_modify_i32(FWCfgState *s, uint16_t key, uint32_t value)
> +{
> + uint32_t *copy, *old;
> +
> + copy = g_malloc(sizeof(value));
> + *copy = cpu_to_le32(value);
> + old = fw_cfg_modify_bytes_read(s, key, copy, sizeof(value));
> + g_free(old);
> +}
> +
> void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value)
> {
> uint64_t *copy;
> @@ -730,6 +749,16 @@ void fw_cfg_add_i64(FWCfgState *s, uint16_t key,
> uint64_t value)
> fw_cfg_add_bytes(s, key, copy, sizeof(value));
> }
>
> +void fw_cfg_modify_i64(FWCfgState *s, uint16_t key, uint64_t value)
> +{
> + uint64_t *copy, *old;
> +
> + copy = g_malloc(sizeof(value));
> + *copy = cpu_to_le64(value);
> + old = fw_cfg_modify_bytes_read(s, key, copy, sizeof(value));
> + g_free(old);
> +}
> +
> void fw_cfg_set_order_override(FWCfgState *s, int order)
> {
> assert(s->fw_cfg_order_override == 0);
> --
> 2.21.0
>
>
--
Marc-André Lureau
- [PATCH v10 03/15] hw/i386/pc: fix code style issues on functions that will be moved out, (continued)
- [PATCH v10 03/15] hw/i386/pc: fix code style issues on functions that will be moved out, Sergio Lopez, 2019/10/16
- [PATCH v10 04/15] hw/i386/pc: replace use of strtol with qemu_strtoui in x86_load_linux(), Sergio Lopez, 2019/10/16
- [PATCH v10 05/15] hw/i386/pc: avoid an assignment in if condition in x86_load_linux(), Sergio Lopez, 2019/10/16
- [PATCH v10 06/15] hw/i386/pc: remove commented out code from x86_load_linux(), Sergio Lopez, 2019/10/16
- [PATCH v10 07/15] hw/i386/pc: move shared x86 functions to x86.c and export them, Sergio Lopez, 2019/10/16
- [PATCH v10 08/15] hw/i386: split PCMachineState deriving X86MachineState from it, Sergio Lopez, 2019/10/16
- [PATCH v10 09/15] hw/i386: make x86.c independent from PCMachineState, Sergio Lopez, 2019/10/16
- [PATCH v10 10/15] fw_cfg: add "modify" functions for all types, Sergio Lopez, 2019/10/16
- Re: [PATCH v10 10/15] fw_cfg: add "modify" functions for all types,
Marc-André Lureau <=
- [PATCH v10 11/15] hw/intc/apic: reject pic ints if isa_pic == NULL, Sergio Lopez, 2019/10/16
- [PATCH v10 12/15] roms: add microvm-bios (qboot) as binary and git submodule, Sergio Lopez, 2019/10/16
- [PATCH v10 13/15] docs/microvm.rst: document the new microvm machine type, Sergio Lopez, 2019/10/16
- Re: [PATCH v10 13/15] docs/microvm.rst: document the new microvm machine type, Daniel P . Berrangé, 2019/10/17