summaryrefslogtreecommitdiff
path: root/vbtracetool.c
diff options
context:
space:
mode:
authorStuart Bennett <stuart@freedesktop.org>2009-03-01 18:43:56 +0000
committerStuart Bennett <stuart@freedesktop.org>2009-03-01 18:48:54 +0000
commit48fac6ec26280f146ea7a0a70b3fe0a96f8e9874 (patch)
tree64a782340d805aa09f54c39b059ebdfa957d0a13 /vbtracetool.c
parent77ca140b5e85ad1b675723daa703e2d3f8708402 (diff)
Add option to read image in from a fileHEADmaster
Diffstat (limited to 'vbtracetool.c')
-rw-r--r--vbtracetool.c20
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");