From: Glauber Costa <glommer@redhat.com>
To: qemu-devel@nongnu.org
Cc: aliguori@us.ibm.com
Subject: [Qemu-devel] [PATCH] Make nic option rom loading less painful.
Date: Tue, 16 Jun 2009 20:08:58 -0400 [thread overview]
Message-ID: <1245197338-22063-1-git-send-email-glommer@redhat.com> (raw)
The code how it is today, is totally painful to read and keep.
To begin with, the code is duplicated with the option rom loading
code that linux_boot and vga are already using.
This patch introduces a "bootable" state in NICInfo structure,
that we can use to keep track of whether or not a given nic should
be bootable, avoiding the introduction of yet another global state.
With that in hands, we move the code in vl.c to hw/pc.c, and use
the already existing infra structure to load those option roms.
We lose the checking that currently exists qemu if no optiom roms are
found, but I don't think it is a big deal. It is not consistent with
the behaviour of any other option rom that fails to load. Furthermore,
we can add it around pc.c if anyone really cares.
Signed-off-by: Glauber Costa <glommer@redhat.com>
---
hw/pc.c | 16 +++++++++++++---
vl.c | 40 +++++-----------------------------------
2 files changed, 18 insertions(+), 38 deletions(-)
diff --git a/hw/pc.c b/hw/pc.c
index 0934778..c458ebb 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -976,9 +976,19 @@ static void pc_init1(ram_addr_t ram_size,
oprom_area_size += 2048;
}
- for (i = 0; i < nb_option_roms; i++) {
- oprom_area_size += load_option_rom(option_rom[i],
- 0xc0000 + oprom_area_size, 0xe0000);
+ for (i = 0; i < nb_nics; i++) {
+ char nic_oprom[1024];
+ const char *model = nd_table[i].model;
+
+ if (!nd_table[i].bootable)
+ continue;
+
+ if (model == NULL)
+ model = "ne2k_pci";
+ snprintf(nic_oprom, sizeof(nic_oprom), "pxe-%s.bin", model);
+
+ oprom_area_size += load_option_rom(nic_oprom, 0xc0000 + oprom_area_size,
+ 0xe0000);
}
/* map all the bios at the top of memory */
diff --git a/vl.c b/vl.c
index fcf8532..5a063a0 100644
--- a/vl.c
+++ b/vl.c
@@ -5781,7 +5781,6 @@ int main(int argc, char **argv, char **envp)
exit(1);
}
linux_boot = (kernel_filename != NULL);
- net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
if (!linux_boot && *kernel_cmdline != '\0') {
fprintf(stderr, "-append only allowed with -kernel option\n");
@@ -5825,45 +5824,16 @@ int main(int argc, char **argv, char **envp)
#endif
}
+ net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
for(i = 0;i < nb_net_clients; i++) {
if (net_client_parse(net_clients[i]) < 0)
exit(1);
+ if (net_boot & (1 << i)) {
+ nd_table[i].bootable = 1;
+ }
}
- net_client_check();
-#ifdef TARGET_I386
- /* XXX: this should be moved in the PC machine instantiation code */
- if (net_boot != 0) {
- int netroms = 0;
- for (i = 0; i < nb_nics && i < 4; i++) {
- const char *model = nd_table[i].model;
- char buf[1024];
- char *filename;
- if (net_boot & (1 << i)) {
- if (model == NULL)
- model = "ne2k_pci";
- snprintf(buf, sizeof(buf), "pxe-%s.bin", model);
- filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, buf);
- if (filename && get_image_size(filename) > 0) {
- if (nb_option_roms >= MAX_OPTION_ROMS) {
- fprintf(stderr, "Too many option ROMs\n");
- exit(1);
- }
- option_rom[nb_option_roms] = qemu_strdup(buf);
- nb_option_roms++;
- netroms++;
- }
- if (filename) {
- qemu_free(filename);
- }
- }
- }
- if (netroms == 0) {
- fprintf(stderr, "No valid PXE rom found for network device\n");
- exit(1);
- }
- }
-#endif
+ net_client_check();
/* init the bluetooth world */
for (i = 0; i < nb_bt_opts; i++)
--
1.6.2.2
next reply other threads:[~2009-06-17 0:09 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-17 0:08 Glauber Costa [this message]
2009-06-17 8:21 ` [Qemu-devel] [PATCH] Make nic option rom loading less painful Mark McLoughlin
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=1245197338-22063-1-git-send-email-glommer@redhat.com \
--to=glommer@redhat.com \
--cc=aliguori@us.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).