From: Gleb Natapov <gleb@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: seabios@seabios.org, qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [SeaBIOS] [PATCH 4/8] fw_cfg: add API for file transfer.
Date: Sun, 20 Dec 2009 10:42:49 +0200 [thread overview]
Message-ID: <20091220084249.GF4490@redhat.com> (raw)
In-Reply-To: <1261134074-11795-5-git-send-email-kraxel@redhat.com>
On Fri, Dec 18, 2009 at 12:01:10PM +0100, Gerd Hoffmann wrote:
> This patch adds a file transfer interface to fw_cfg. Intended to be
> used for passing non-pci option roms and vgabios to seabios. Namespace
> is modeled after the existing cbfs filesystem support in seabios.
>
> Reading the new FW_CFG_FILE_DIR entry returns a file list.
> Fields there are in network byte order (aka bigendian).
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> hw/fw_cfg.c | 43 +++++++++++++++++++++++++++++++++++++++++++
> hw/fw_cfg.h | 21 +++++++++++++++++++--
> 2 files changed, 62 insertions(+), 2 deletions(-)
>
> diff --git a/hw/fw_cfg.c b/hw/fw_cfg.c
> index 2e3662d..0492f5f 100644
> --- a/hw/fw_cfg.c
> +++ b/hw/fw_cfg.c
> @@ -47,6 +47,7 @@ typedef struct _FWCfgEntry {
>
> struct _FWCfgState {
> FWCfgEntry entries[2][FW_CFG_MAX_ENTRY];
> + FWCfgFiles *files;
> uint16_t cur_entry;
> uint32_t cur_offset;
> };
> @@ -273,6 +274,48 @@ int fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback,
> return 1;
> }
>
> +int fw_cfg_add_file(FWCfgState *s, const char *dir, const char *filename,
> + uint8_t *data, uint32_t len)
> +{
> + const char *basename;
> + int index;
> +
> + if (!s->files) {
> + int dsize = sizeof(uint32_t) + sizeof(FWCfgFile) * FW_CFG_FILE_SLOTS;
> + s->files = qemu_mallocz(dsize);
> + fw_cfg_add_bytes(s, FW_CFG_FILE_DIR, (uint8_t*)s->files, dsize);
> + }
> +
> + index = be32_to_cpu(s->files->count);
> + if (index == FW_CFG_FILE_SLOTS) {
> + fprintf(stderr, "fw_cfg: out of file slots\n");
> + return 0;
> + }
> +
> + fw_cfg_add_bytes(s, FW_CFG_FILE_FIRST + index, data, len);
> +
> + basename = strrchr(filename, '/');
> + if (basename) {
> + basename++;
> + } else {
> + basename = filename;
> + }
> + if (dir) {
> + snprintf(s->files->f[index].name, sizeof(s->files->f[index].name),
> + "%s/%s", dir, basename);
> + } else {
> + snprintf(s->files->f[index].name, sizeof(s->files->f[index].name),
> + "%s", basename);
> + }
> + s->files->f[index].size = cpu_to_be32(len);
> + s->files->f[index].select = cpu_to_be16(FW_CFG_FILE_FIRST + index);
> + fprintf(stderr, "%s: #%d: %s (%d bytes)\n", __FUNCTION__,
> + index, s->files->f[index].name, len);
> +
> + s->files->count = cpu_to_be32(index+1);
> + return 1;
> +}
> +
> FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port,
> target_phys_addr_t ctl_addr, target_phys_addr_t data_addr)
> {
> diff --git a/hw/fw_cfg.h b/hw/fw_cfg.h
> index b06665e..a63f54f 100644
> --- a/hw/fw_cfg.h
> +++ b/hw/fw_cfg.h
> @@ -26,7 +26,11 @@
> #define FW_CFG_SETUP_ADDR 0x16
> #define FW_CFG_SETUP_SIZE 0x17
> #define FW_CFG_SETUP_DATA 0x18
> -#define FW_CFG_MAX_ENTRY 0x19
> +#define FW_CFG_FILE_DIR 0x19
> +
> +#define FW_CFG_FILE_FIRST 0x20
> +#define FW_CFG_FILE_SLOTS 0x10
The name of this define looks like CFG option number but it is not.
Lets rename it.
> +#define FW_CFG_MAX_ENTRY (FW_CFG_FILE_FIRST+FW_CFG_FILE_SLOTS)
>
> #define FW_CFG_WRITE_CHANNEL 0x4000
> #define FW_CFG_ARCH_LOCAL 0x8000
> @@ -34,6 +38,18 @@
>
> #define FW_CFG_INVALID 0xffff
>
> +typedef struct FWCfgFile {
> + uint32_t size; /* file size */
> + uint16_t select; /* write this to 0x510 to read it */
> + uint16_t reserved;
> + char name[56];
> +} FWCfgFile;
> +
> +typedef struct FWCfgFiles {
> + uint32_t count;
> + FWCfgFile f[];
> +} FWCfgFiles;
> +
> #ifndef NO_QEMU_PROTOS
> typedef void (*FWCfgCallback)(void *opaque, uint8_t *data);
>
> @@ -44,7 +60,8 @@ int fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value);
> int fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value);
> int fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback,
> void *callback_opaque, uint8_t *data, size_t len);
> -int fw_cfg_add_file(FWCfgState *s, uint8_t type, uint8_t *data, uint32_t len);
> +int fw_cfg_add_file(FWCfgState *s, const char *dir, const char *filename,
> + uint8_t *data, uint32_t len);
> FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port,
> target_phys_addr_t crl_addr, target_phys_addr_t data_addr);
>
> --
> 1.6.5.2
>
>
> _______________________________________________
> SeaBIOS mailing list
> SeaBIOS@seabios.org
> http://www.seabios.org/mailman/listinfo/seabios
--
Gleb.
next prev parent reply other threads:[~2009-12-20 8:42 UTC|newest]
Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-18 11:01 [Qemu-devel] [PATCH 0/8] option rom loading overhaul Gerd Hoffmann
2009-12-18 11:01 ` [Qemu-devel] [PATCH 1/8] Support PCI based option rom loading Gerd Hoffmann
2009-12-19 10:57 ` Blue Swirl
2009-12-20 15:34 ` Anthony Liguori
2009-12-20 17:02 ` Blue Swirl
2009-12-20 17:18 ` Alexander Graf
2009-12-20 17:55 ` Anthony Liguori
2009-12-20 18:01 ` Alexander Graf
2009-12-20 18:24 ` Andreas Färber
2009-12-20 18:53 ` Blue Swirl
2009-12-20 21:24 ` Benjamin Herrenschmidt
2009-12-20 21:23 ` Benjamin Herrenschmidt
2009-12-18 11:01 ` [Qemu-devel] [PATCH 2/8] pci romfiles: add property, add default to PCIDeviceInfo Gerd Hoffmann
2010-01-11 21:18 ` [Qemu-devel] [RFC] New naming rules for GPXE romfiles Stefan Weil
2010-01-11 21:34 ` Anthony Liguori
2010-01-12 10:23 ` Kevin Wolf
2009-12-18 11:01 ` [Qemu-devel] [PATCH 3/8] fw_cfg: make calls typesafe Gerd Hoffmann
2009-12-18 11:01 ` [Qemu-devel] [PATCH 4/8] fw_cfg: add API for file transfer Gerd Hoffmann
2009-12-19 12:06 ` Blue Swirl
2009-12-20 8:42 ` Gleb Natapov [this message]
2009-12-18 11:01 ` [Qemu-devel] [PATCH 5/8] roms: use new fw_cfg file xfer support Gerd Hoffmann
2009-12-20 8:45 ` [Qemu-devel] Re: [SeaBIOS] " Gleb Natapov
2009-12-18 11:01 ` [Qemu-devel] [PATCH 6/8] roms: remove option rom packing logic Gerd Hoffmann
2009-12-18 11:01 ` [Qemu-devel] [PATCH 7/8] updated seabios binary for testing convinience Gerd Hoffmann
2009-12-18 11:01 ` [Qemu-devel] [PATCH 8/8] debug: enable bios messages Gerd Hoffmann
2009-12-18 14:35 ` [Qemu-devel] Re: [SeaBIOS] [PATCH 0/8] option rom loading overhaul Anthony Liguori
2009-12-18 16:34 ` Gerd Hoffmann
2009-12-18 16:42 ` Anthony Liguori
2009-12-18 17:03 ` Gerd Hoffmann
2009-12-18 17:12 ` Anthony Liguori
2009-12-19 1:48 ` Kevin O'Connor
2009-12-19 3:07 ` Anthony Liguori
2009-12-18 17:14 ` Anthony Liguori
2009-12-18 18:04 ` Gerd Hoffmann
2009-12-18 19:41 ` Sebastian Herbszt
2009-12-18 19:53 ` Anthony Liguori
2009-12-18 20:10 ` Sebastian Herbszt
2009-12-20 8:38 ` Gleb Natapov
2009-12-20 14:43 ` Anthony Liguori
2009-12-20 14:52 ` Gleb Natapov
2009-12-20 14:58 ` Anthony Liguori
2009-12-20 15:07 ` Gleb Natapov
2009-12-20 15:11 ` Anthony Liguori
2009-12-20 15:20 ` Avi Kivity
2009-12-20 15:31 ` Anthony Liguori
2009-12-20 15:35 ` Avi Kivity
2009-12-22 13:04 ` Paul Brook
2009-12-22 13:09 ` Avi Kivity
2009-12-22 15:11 ` Anthony Liguori
2009-12-22 15:54 ` Paul Brook
2009-12-22 16:16 ` Anthony Liguori
2009-12-20 15:23 ` Gleb Natapov
2009-12-20 15:28 ` Anthony Liguori
2009-12-20 15:33 ` Gleb Natapov
2009-12-20 15:39 ` Anthony Liguori
2009-12-20 15:52 ` Gleb Natapov
2009-12-20 16:08 ` Blue Swirl
2009-12-20 16:15 ` Gleb Natapov
2009-12-20 16:23 ` Blue Swirl
2009-12-20 17:48 ` Anthony Liguori
2009-12-21 1:59 ` Kevin O'Connor
2009-12-21 7:32 ` Gleb Natapov
2009-12-21 16:40 ` Anthony Liguori
2009-12-21 16:43 ` Gleb Natapov
2009-12-21 17:26 ` Anthony Liguori
2009-12-21 17:43 ` Gleb Natapov
2009-12-21 18:24 ` [Qemu-devel] Re: Re: [SeaBIOS] [PATCH 0/8] option rom loadingoverhaul Sebastian Herbszt
2009-12-21 18:36 ` Gleb Natapov
2009-12-21 19:28 ` Sebastian Herbszt
2009-12-21 19:57 ` Gleb Natapov
2009-12-21 19:17 ` [Qemu-devel] " Anthony Liguori
2009-12-21 19:39 ` Sebastian Herbszt
2009-12-21 19:53 ` Gleb Natapov
2009-12-21 20:16 ` Sebastian Herbszt
2009-12-22 7:58 ` Gleb Natapov
2009-12-22 14:57 ` Anthony Liguori
2009-12-21 19:48 ` Gleb Natapov
2009-12-21 19:13 ` [Qemu-devel] Re: [SeaBIOS] [PATCH 0/8] option rom loading overhaul Anthony Liguori
2009-12-21 19:43 ` Gleb Natapov
2009-12-21 23:54 ` Anthony Liguori
2009-12-22 20:50 ` [Qemu-devel] Re: Re: [SeaBIOS] [PATCH 0/8] option rom loadingoverhaul Sebastian Herbszt
2009-12-21 7:40 ` [Qemu-devel] Re: [SeaBIOS] [PATCH 0/8] option rom loading overhaul Gleb Natapov
2009-12-21 17:27 ` Michael S. Tsirkin
2010-01-12 4:48 ` Jamie Lokier
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=20091220084249.GF4490@redhat.com \
--to=gleb@redhat.com \
--cc=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=seabios@seabios.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.