aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2016-02-02 22:50:33 -0500
committerKevin O'Connor <kevin@koconnor.net>2016-02-02 23:37:05 -0500
commit01a30dc7e38859125f4120e4f10f26af4049daf7 (patch)
tree0114d9dad60f162b5aa152e411231911fe1347cb
parentf46739b1a819750c63fb5849844d99cc2ab001e8 (diff)
downloadseabios-hppa-01a30dc7e38859125f4120e4f10f26af4049daf7.zip
seabios-hppa-01a30dc7e38859125f4120e4f10f26af4049daf7.tar.gz
seabios-hppa-01a30dc7e38859125f4120e4f10f26af4049daf7.tar.bz2
pci: Consistently set pci->have_drivers for devices with internal drivers
Set the pci->have_drivers flag for any device that calls pci_enable_x() to ensure that the flag is consistently set on any device with an internal driver. Setting this flag prevents an option rom on the device from being executed. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--src/hw/ata.c1
-rw-r--r--src/hw/pci.c3
2 files changed, 3 insertions, 1 deletions
diff --git a/src/hw/ata.c b/src/hw/ata.c
index 7aaf2f1..12dab96 100644
--- a/src/hw/ata.c
+++ b/src/hw/ata.c
@@ -945,7 +945,6 @@ init_controller(struct pci_device *pci, int chanid, int irq
static void
init_pciata(struct pci_device *pci, u8 prog_if)
{
- pci->have_driver = 1;
u8 pciirq = pci_config_readb(pci->bdf, PCI_INTERRUPT_LINE);
int master = 0;
if (CONFIG_ATA_DMA && prog_if & 0x80) {
diff --git a/src/hw/pci.c b/src/hw/pci.c
index 86b7d54..76c293c 100644
--- a/src/hw/pci.c
+++ b/src/hw/pci.c
@@ -279,6 +279,7 @@ pci_enable_busmaster(struct pci_device *pci)
ASSERT32FLAT();
wait_preempt();
pci_config_maskw(pci->bdf, PCI_COMMAND, 0, PCI_COMMAND_MASTER);
+ pci->have_driver = 1;
}
// Verify an IO bar and return it to the caller
@@ -298,6 +299,7 @@ pci_enable_iobar(struct pci_device *pci, u32 addr)
return 0;
}
pci_config_maskw(pci->bdf, PCI_COMMAND, 0, PCI_COMMAND_IO);
+ pci->have_driver = 1;
return bar;
}
@@ -326,6 +328,7 @@ pci_enable_membar(struct pci_device *pci, u32 addr)
return NULL;
}
pci_config_maskw(pci->bdf, PCI_COMMAND, 0, PCI_COMMAND_MEMORY);
+ pci->have_driver = 1;
return (void*)bar;
}