summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2009-06-05 15:00:29 +1000
committerDave Airlie <airlied@redhat.com>2009-06-05 15:00:29 +1000
commit8521c63723cc2a9df9d9f2a6d4f07a2a0e1620f4 (patch)
tree36e42786bdd7236315511fae4a4ce73c694570e2
parentc27f1814b151ae556886f3d5a1df7a4c1b5b8125 (diff)
only setup rom mapping once
-rw-r--r--posttool.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/posttool.c b/posttool.c
index 660d711..1cccaf9 100644
--- a/posttool.c
+++ b/posttool.c
@@ -93,23 +93,15 @@ int do_real_post(unsigned pci_device)
return error;
}
+void *rom_cseg;
unsigned char romfile[65536];
int do_vga_post(struct pci_device *dev)
{
int error = 0;
- void *rc;
/* need to pull the ROM file */
unsigned int pci_id;
int ret;
-
- munmap((void*)0xc0000, 64*1024);
- rc = mmap((void*)0xc0000, 64*1024, PROT_READ|PROT_WRITE|PROT_EXEC,
- MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
- if (!rc) {
- fprintf(stderr,"unable to map rom\n");
- return 0;
- }
pci_device_enable(dev);
pci_device_vgaarb_set_target(dev);
@@ -120,7 +112,7 @@ int do_vga_post(struct pci_device *dev)
return 0;
}
- memcpy(rc, romfile, 65536);
+ memcpy(rom_cseg, romfile, 65536);
pci_id = (dev->bus << 8) + (dev->dev << 3) +
(dev->func & 0x7);
@@ -143,6 +135,15 @@ int do_post(void)
struct pci_device *dev, *first_dev = NULL;
struct pci_device_iterator *iter;
+ /* setup rom at 0xc0000 section */
+ munmap((void*)0xc0000, 64*1024);
+ rom_cseg = mmap((void*)0xc0000, 64*1024, PROT_READ|PROT_WRITE|PROT_EXEC,
+ MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
+ if (!rom_cseg) {
+ fprintf(stderr,"unable to map rom\n");
+ return 0;
+ }
+
pci_device_vgaarb_init();
iter = pci_id_match_iterator_create(&dev_match);
if (iter == NULL) {