All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Alexander Graf <agraf@suse.de>
Cc: glommer@redhat.com, qemu-devel@nongnu.org, avi@redhat.com
Subject: [Qemu-devel] Re: [PATCH 2/6] Introduce copy_rom
Date: Wed, 11 Nov 2009 15:57:27 -0600	[thread overview]
Message-ID: <4AFB3347.4080606@codemonkey.ws> (raw)
In-Reply-To: <1257962966-22902-3-git-send-email-agraf@suse.de>

Alexander Graf wrote:
> We have several rom helpers currently, but none of them can get us
> code that spans several roms into a pointer.
>
> This patch introduces a function that copies over rom contents.
>
> Signed-off-by: Alexander Graf <agraf@suse.de>
> ---
>  hw/loader.c |   38 ++++++++++++++++++++++++++++++++++++++
>  hw/loader.h |    1 +
>  2 files changed, 39 insertions(+), 0 deletions(-)
>
> diff --git a/hw/loader.c b/hw/loader.c
> index 9153b38..cab53c1 100644
> --- a/hw/loader.c
> +++ b/hw/loader.c
> @@ -701,6 +701,44 @@ static Rom *find_rom(target_phys_addr_t addr)
>      return NULL;
>  }
>  
> +int copy_rom(uint8_t *dest, target_phys_addr_t addr, size_t size)
> +{
> +    target_phys_addr_t end = addr + size;
> +    uint8_t *s, *d = dest;
> +    size_t l = 0;
> +    Rom *rom;
> +
> +    QTAILQ_FOREACH(rom, &roms, next) {
> +        if (rom->max)
> +            continue;
> +        if (rom->min > addr)
> +            continue;
> +        if (rom->min + rom->romsize < addr)
> +            continue;
> +        if (rom->min > end)
> +            break;
> +        if (!rom->data)
> +            continue;
> +
> +        d = dest + (rom->min - addr);
> +        s = rom->data;
> +        l = rom->romsize;
> +
> +        if (rom->min < addr) {
> +            d = dest;
> +            s += (addr - rom->min);
> +            l -= (addr - rom->min);
> +        }
> +        if ((d + l) > (dest + size)) {
> +            l = dest - d;
> +        }
> +
> +        memcpy(d, s, l);
> +    }
> +
> +    return (d + l) - dest;
> +}
> +
>  void *rom_ptr(target_phys_addr_t addr)
>  {
>      Rom *rom;
> diff --git a/hw/loader.h b/hw/loader.h
> index 67dae57..6cfb03a 100644
> --- a/hw/loader.h
> +++ b/hw/loader.h
> @@ -24,6 +24,7 @@ int rom_add_file(const char *file,
>  int rom_add_blob(const char *name, const void *blob, size_t len,
>                   target_phys_addr_t min, target_phys_addr_t max, int align);
>  int rom_load_all(void);
> +int copy_rom(uint8_t *dest, target_phys_addr_t addr, size_t size);
>   

rom_copy() would have fit better.

Regards,

Anthony Liguori

  reply	other threads:[~2009-11-11 21:57 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-11 18:09 [Qemu-devel] [PATCH 0/6] Fix -kernel with SeaBIOS Alexander Graf
2009-11-11 18:09 ` [Qemu-devel] [PATCH 1/6] Make fw_cfg interface 32-bit aware Alexander Graf
2009-11-11 21:53   ` [Qemu-devel] " Anthony Liguori
2009-11-11 22:15     ` Alexander Graf
2009-11-11 22:22       ` Anthony Liguori
2009-11-12  0:03         ` Alexander Graf
2009-11-12  0:14           ` Anthony Liguori
2009-11-11 18:09 ` [Qemu-devel] [PATCH 2/6] Introduce copy_rom Alexander Graf
2009-11-11 21:57   ` Anthony Liguori [this message]
2009-11-12  0:02     ` [Qemu-devel] " Alexander Graf
2009-11-11 18:09 ` [Qemu-devel] [PATCH 3/6] Convert multiboot to fw_cfg backed data storage Alexander Graf
2009-11-11 18:09 ` [Qemu-devel] [PATCH 4/6] Move common option rom code to header file Alexander Graf
2009-11-11 18:09 ` [Qemu-devel] [PATCH 5/6] Convert linux bootrom to external rom and fw_cfg Alexander Graf
2009-11-11 18:09 ` [Qemu-devel] [PATCH 6/6] Add linuxboot to BLOBS Alexander Graf
2009-11-12 14:53 ` [Qemu-devel] [PATCH 0/6] Fix -kernel with SeaBIOS Christoph Hellwig
2009-11-12 14:56   ` Alexander Graf

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=4AFB3347.4080606@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=agraf@suse.de \
    --cc=avi@redhat.com \
    --cc=glommer@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /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: link
Be 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.