diff options
author | Stuart Bennett <stuart@freedesktop.org> | 2009-03-01 18:43:56 +0000 |
---|---|---|
committer | Stuart Bennett <stuart@freedesktop.org> | 2009-03-01 18:48:54 +0000 |
commit | 48fac6ec26280f146ea7a0a70b3fe0a96f8e9874 (patch) | |
tree | 64a782340d805aa09f54c39b059ebdfa957d0a13 /vbtracetool.c | |
parent | 77ca140b5e85ad1b675723daa703e2d3f8708402 (diff) |
Diffstat (limited to 'vbtracetool.c')
-rw-r--r-- | vbtracetool.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/vbtracetool.c b/vbtracetool.c index d810f99..b16e03c 100644 --- a/vbtracetool.c +++ b/vbtracetool.c @@ -20,6 +20,7 @@ #include "x86emu.h" extern int reload_nv_bios(uintptr_t pcimemaddr); +extern int reload_bios_from_file(char *romfile); extern void log_nv_io(); int do_set_mode(unsigned mode) @@ -104,9 +105,10 @@ int main(int argc, char *argv[]) struct pci_dev *p; unsigned int c; unsigned int pci_id = 0, pci_vendor; - int opt, debug = 0, mode, op = 'g', opset = 0, nvlog = 0, shadow = 0; + int opt, debug = 0, mode = 3, op = 'g', opset = 0, nvlog = 0, romoverride = 0, shadow = 0; + char *romfile = NULL; - while ((opt = getopt(argc, argv, "dglprs:w")) != -1) { + while ((opt = getopt(argc, argv, "dglprs:wx:")) != -1) { switch (opt) { case 'd': debug = 1; @@ -118,6 +120,7 @@ int main(int argc, char *argv[]) nvlog = 1; break; case 'r': + romoverride++; shadow = 1; break; case 'p': @@ -133,12 +136,16 @@ int main(int argc, char *argv[]) op = 'w'; opset++; break; + case 'x': + romoverride++; + romfile = optarg; + break; default: opset = 2; } } - if (optind < argc || opset > 1) { + if (optind < argc || opset > 1 || romoverride > 1) { printf("eh?\n"); exit(EXIT_FAILURE); } @@ -184,7 +191,12 @@ int main(int argc, char *argv[]) printf("Using card %04x:%04x on %04x\n", pci_vendor, pci_read_word(p, PCI_DEVICE_ID), pci_id); - if (pci_vendor == 0x10de && !shadow) { + if (romfile) { + if (reload_bios_from_file(romfile)) { + printf("Failed to load alternate image, bailing out\n"); + exit(EXIT_FAILURE); + } + } else if (pci_vendor == 0x10de && !shadow) { printf("Nvidia card -- using PROM/PRAMIN BIOS\n"); if (reload_nv_bios(p->base_addr[0])) printf("Failed to load alternate image, proceeding to use PCI ROM\n"); |