diff options
author | Dave Airlie <airlied@redhat.com> | 2009-06-05 15:00:29 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2009-06-05 15:00:29 +1000 |
commit | 8521c63723cc2a9df9d9f2a6d4f07a2a0e1620f4 (patch) | |
tree | 36e42786bdd7236315511fae4a4ce73c694570e2 | |
parent | c27f1814b151ae556886f3d5a1df7a4c1b5b8125 (diff) |
only setup rom mapping once
-rw-r--r-- | posttool.c | 21 |
1 files changed, 11 insertions, 10 deletions
@@ -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) { |