mirror of
https://github.com/dingusdev/dingusppc.git
synced 2025-01-06 16:31:45 +00:00
pcihost: broadcast I/O requests to PCI-to-PCI bridges.
This commit is contained in:
parent
dee7090071
commit
f9338b8dd9
@ -168,11 +168,20 @@ bool PCIHost::pci_io_write_loop(uint32_t offset, int size, uint32_t value)
|
|||||||
uint32_t PCIHost::pci_io_read_broadcast(uint32_t offset, int size)
|
uint32_t PCIHost::pci_io_read_broadcast(uint32_t offset, int size)
|
||||||
{
|
{
|
||||||
uint32_t res;
|
uint32_t res;
|
||||||
|
|
||||||
// broadcast I/O request to devices that support I/O space
|
// broadcast I/O request to devices that support I/O space
|
||||||
// until a device returns true that means "request accepted"
|
// until a device returns true that means "request accepted"
|
||||||
if (pci_io_read_loop (offset, size, res)) {
|
if (pci_io_read_loop (offset, size, res)) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// broadcast I/O request to devices sitting behind PCI-to-PCI bridges
|
||||||
|
for (auto& dev : this->bridge_devs) {
|
||||||
|
if (dev->pci_io_read_loop(offset, size, res))
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
// no device has accepted the request -> report error
|
||||||
HWComponent *hwc = dynamic_cast<HWComponent*>(this);
|
HWComponent *hwc = dynamic_cast<HWComponent*>(this);
|
||||||
LOG_F(
|
LOG_F(
|
||||||
ERROR, "%s: Attempt to read from unmapped PCI I/O space @%08x.%c",
|
ERROR, "%s: Attempt to read from unmapped PCI I/O space @%08x.%c",
|
||||||
@ -190,6 +199,14 @@ void PCIHost::pci_io_write_broadcast(uint32_t offset, int size, uint32_t value)
|
|||||||
if (pci_io_write_loop(offset, size, value)) {
|
if (pci_io_write_loop(offset, size, value)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// broadcast I/O request to devices sitting behind PCI-to-PCI bridges
|
||||||
|
for (auto& dev : this->bridge_devs) {
|
||||||
|
if (dev->pci_io_write_loop(offset, size, value))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// no device has accepted the request -> report error
|
||||||
HWComponent *hwc = dynamic_cast<HWComponent*>(this);
|
HWComponent *hwc = dynamic_cast<HWComponent*>(this);
|
||||||
LOG_F(
|
LOG_F(
|
||||||
ERROR, "%s: Attempt to write to unmapped PCI I/O space @%08x.%c = %0*x",
|
ERROR, "%s: Attempt to write to unmapped PCI I/O space @%08x.%c = %0*x",
|
||||||
|
Loading…
Reference in New Issue
Block a user