From: Sergio Lopez <slp@redhat.com> To: qemu-devel@nongnu.org Cc: mst@redhat.com, imammedo@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, ehabkost@redhat.com, philmd@redhat.com, lersek@redhat.com, kraxel@redhat.com, mtosatti@redhat.com, kvm@vger.kernel.org, Sergio Lopez <slp@redhat.com> Subject: [PATCH v4 5/8] fw_cfg: add "modify" functions for all types Date: Tue, 24 Sep 2019 14:44:30 +0200 [thread overview] Message-ID: <20190924124433.96810-6-slp@redhat.com> (raw) In-Reply-To: <20190924124433.96810-1-slp@redhat.com> This allows to alter the contents of an already added item. Signed-off-by: Sergio Lopez <slp@redhat.com> --- hw/nvram/fw_cfg.c | 29 +++++++++++++++++++++++++++ include/hw/nvram/fw_cfg.h | 42 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) 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); 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 -- 2.21.0
WARNING: multiple messages have this Message-ID (diff)
From: Sergio Lopez <slp@redhat.com> To: qemu-devel@nongnu.org Cc: Sergio Lopez <slp@redhat.com>, ehabkost@redhat.com, kvm@vger.kernel.org, mst@redhat.com, lersek@redhat.com, mtosatti@redhat.com, kraxel@redhat.com, pbonzini@redhat.com, imammedo@redhat.com, philmd@redhat.com, rth@twiddle.net Subject: [PATCH v4 5/8] fw_cfg: add "modify" functions for all types Date: Tue, 24 Sep 2019 14:44:30 +0200 [thread overview] Message-ID: <20190924124433.96810-6-slp@redhat.com> (raw) In-Reply-To: <20190924124433.96810-1-slp@redhat.com> This allows to alter the contents of an already added item. Signed-off-by: Sergio Lopez <slp@redhat.com> --- hw/nvram/fw_cfg.c | 29 +++++++++++++++++++++++++++ include/hw/nvram/fw_cfg.h | 42 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) 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); 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 -- 2.21.0
next prev parent reply other threads:[~2019-09-24 12:45 UTC|newest] Thread overview: 133+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-09-24 12:44 [PATCH v4 0/8] Introduce the microvm machine type Sergio Lopez 2019-09-24 12:44 ` Sergio Lopez 2019-09-24 12:44 ` [PATCH v4 1/8] hw/i386: Factorize PVH related functions Sergio Lopez 2019-09-24 12:44 ` Sergio Lopez 2019-09-24 13:18 ` Philippe Mathieu-Daudé 2019-09-24 13:18 ` Philippe Mathieu-Daudé 2019-09-25 6:03 ` Sergio Lopez 2019-09-25 6:03 ` Sergio Lopez 2019-09-25 8:36 ` Stefano Garzarella 2019-09-25 8:36 ` Stefano Garzarella 2019-09-25 9:00 ` Sergio Lopez 2019-09-25 9:00 ` Sergio Lopez 2019-09-25 9:29 ` Stefano Garzarella 2019-09-25 9:29 ` Stefano Garzarella 2019-09-24 12:44 ` [PATCH v4 2/8] hw/i386: Factorize e820 " Sergio Lopez 2019-09-24 12:44 ` Sergio Lopez 2019-09-24 13:20 ` Philippe Mathieu-Daudé 2019-09-24 13:20 ` Philippe Mathieu-Daudé 2019-09-24 14:12 ` Sergio Lopez 2019-09-24 14:12 ` Sergio Lopez 2019-09-24 12:44 ` [PATCH v4 3/8] hw/virtio: Factorize virtio-mmio headers Sergio Lopez 2019-09-24 12:44 ` Sergio Lopez 2019-09-24 12:44 ` [PATCH v4 4/8] hw/i386: split PCMachineState deriving X86MachineState from it Sergio Lopez 2019-09-24 13:40 ` Philippe Mathieu-Daudé 2019-09-25 15:39 ` Philippe Mathieu-Daudé 2019-09-24 12:44 ` Sergio Lopez [this message] 2019-09-24 12:44 ` [PATCH v4 5/8] fw_cfg: add "modify" functions for all types Sergio Lopez 2019-09-24 12:44 ` [PATCH v4 6/8] roms: add microvm-bios (qboot) as binary and git submodule Sergio Lopez 2019-09-24 12:44 ` Sergio Lopez 2019-09-24 13:31 ` Philippe Mathieu-Daudé 2019-09-24 13:31 ` Philippe Mathieu-Daudé 2019-09-25 6:09 ` Sergio Lopez 2019-09-25 6:09 ` Sergio Lopez 2019-09-24 12:44 ` [PATCH v4 7/8] docs/microvm.txt: document the new microvm machine type Sergio Lopez 2019-09-24 12:44 ` Sergio Lopez 2019-09-24 13:10 ` Paolo Bonzini 2019-09-24 13:10 ` Paolo Bonzini 2019-09-25 5:49 ` Sergio Lopez 2019-09-25 5:49 ` Sergio Lopez 2019-09-25 7:57 ` Paolo Bonzini 2019-09-25 7:57 ` Paolo Bonzini 2019-09-25 8:40 ` Sergio Lopez 2019-09-25 8:40 ` Sergio Lopez 2019-09-25 9:22 ` Paolo Bonzini 2019-09-25 9:22 ` Paolo Bonzini 2019-09-25 11:04 ` Sergio Lopez 2019-09-25 11:04 ` Sergio Lopez 2019-09-25 11:20 ` Paolo Bonzini 2019-09-25 11:20 ` Paolo Bonzini 2019-09-25 15:04 ` Sergio Lopez 2019-09-25 15:04 ` Sergio Lopez 2019-09-25 16:46 ` Paolo Bonzini 2019-09-25 16:46 ` Paolo Bonzini 2019-09-26 6:23 ` Sergio Lopez 2019-09-26 6:23 ` Sergio Lopez 2019-09-26 8:58 ` Paolo Bonzini 2019-09-26 8:58 ` Paolo Bonzini 2019-09-26 10:16 ` Sergio Lopez 2019-09-26 10:16 ` Sergio Lopez 2019-09-26 10:21 ` Paolo Bonzini 2019-09-26 10:21 ` Paolo Bonzini 2019-09-26 12:12 ` Sergio Lopez 2019-09-26 12:12 ` Sergio Lopez 2019-09-25 5:06 ` Gerd Hoffmann 2019-09-25 5:06 ` Gerd Hoffmann 2019-09-25 7:33 ` Sergio Lopez 2019-09-25 7:33 ` Sergio Lopez 2019-09-25 8:51 ` Gerd Hoffmann 2019-09-25 8:51 ` Gerd Hoffmann 2019-09-24 12:44 ` [PATCH v4 8/8] hw/i386: Introduce the " Sergio Lopez 2019-09-24 12:44 ` Sergio Lopez 2019-09-24 13:12 ` Paolo Bonzini 2019-09-24 13:12 ` Paolo Bonzini 2019-09-24 13:24 ` Michael S. Tsirkin 2019-09-24 13:24 ` Michael S. Tsirkin 2019-09-24 13:34 ` Paolo Bonzini 2019-09-24 13:34 ` Paolo Bonzini 2019-09-25 5:53 ` Sergio Lopez 2019-09-25 5:53 ` Sergio Lopez 2019-09-24 13:28 ` Michael S. Tsirkin 2019-09-24 13:28 ` Michael S. Tsirkin 2019-09-25 5:59 ` Sergio Lopez 2019-09-25 5:59 ` Sergio Lopez 2019-10-01 8:56 ` Sergio Lopez 2019-10-01 8:56 ` Sergio Lopez 2019-09-25 15:40 ` Philippe Mathieu-Daudé 2019-09-25 15:40 ` Philippe Mathieu-Daudé 2019-09-26 6:34 ` Sergio Lopez 2019-09-26 6:34 ` Sergio Lopez 2019-09-26 8:59 ` Paolo Bonzini 2019-09-26 8:59 ` Paolo Bonzini 2019-09-24 13:57 ` [PATCH v4 0/8] " Peter Maydell 2019-09-24 13:57 ` Peter Maydell 2019-09-25 5:51 ` Sergio Lopez 2019-09-25 5:51 ` Sergio Lopez 2019-09-25 11:33 ` Philippe Mathieu-Daudé 2019-09-25 11:33 ` Philippe Mathieu-Daudé 2019-09-25 12:39 ` Peter Maydell 2019-09-25 12:39 ` Peter Maydell 2019-09-25 7:41 ` David Hildenbrand 2019-09-25 7:41 ` David Hildenbrand 2019-09-25 7:58 ` Pankaj Gupta 2019-09-25 7:58 ` Pankaj Gupta 2019-09-25 8:10 ` Sergio Lopez 2019-09-25 8:10 ` Sergio Lopez 2019-09-25 8:16 ` David Hildenbrand 2019-09-25 8:16 ` David Hildenbrand 2019-09-25 8:37 ` Pankaj Gupta 2019-09-25 8:37 ` Pankaj Gupta 2019-09-25 8:26 ` Paolo Bonzini 2019-09-25 8:26 ` Paolo Bonzini 2019-09-25 8:42 ` Sergio Lopez 2019-09-25 8:42 ` Sergio Lopez 2019-09-25 8:44 ` David Hildenbrand 2019-09-25 8:44 ` David Hildenbrand 2019-09-25 10:19 ` when to use virtio (was Re: [PATCH v4 0/8] Introduce the microvm machine type) Paolo Bonzini 2019-09-25 10:19 ` Paolo Bonzini 2019-09-25 10:50 ` David Hildenbrand 2019-09-25 10:50 ` David Hildenbrand 2019-09-25 11:24 ` Paolo Bonzini 2019-09-25 11:24 ` Paolo Bonzini 2019-09-25 11:32 ` David Hildenbrand 2019-09-25 11:32 ` David Hildenbrand 2019-09-25 9:12 ` [PATCH v4 0/8] Introduce the microvm machine type Gerd Hoffmann 2019-09-25 9:12 ` Gerd Hoffmann 2019-09-25 9:29 ` Paolo Bonzini 2019-09-25 9:29 ` Paolo Bonzini 2019-09-25 9:47 ` David Hildenbrand 2019-09-25 9:47 ` David Hildenbrand 2019-09-26 7:48 ` Christian Borntraeger 2019-09-26 7:48 ` Christian Borntraeger 2019-09-26 8:22 ` Sergio Lopez 2019-09-26 8:22 ` Sergio Lopez
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190924124433.96810-6-slp@redhat.com \ --to=slp@redhat.com \ --cc=ehabkost@redhat.com \ --cc=imammedo@redhat.com \ --cc=kraxel@redhat.com \ --cc=kvm@vger.kernel.org \ --cc=lersek@redhat.com \ --cc=marcel.apfelbaum@gmail.com \ --cc=mst@redhat.com \ --cc=mtosatti@redhat.com \ --cc=pbonzini@redhat.com \ --cc=philmd@redhat.com \ --cc=qemu-devel@nongnu.org \ --cc=rth@twiddle.net \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.