diff options
Diffstat (limited to 'src/devices/machine/lpci.cpp')
-rw-r--r-- | src/devices/machine/lpci.cpp | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/src/devices/machine/lpci.cpp b/src/devices/machine/lpci.cpp index fdbdc218b31..5f378108020 100644 --- a/src/devices/machine/lpci.cpp +++ b/src/devices/machine/lpci.cpp @@ -2,7 +2,7 @@ // copyright-holders:Olivier Galibert /*************************************************************************** - machine/lpci.c + machine/lpci.cpp Legacy PCI bus @@ -72,7 +72,7 @@ ***************************************************************************/ #include "emu.h" -#include "machine/lpci.h" +#include "lpci.h" //#define VERBOSE 1 #include "logmacro.h" @@ -93,16 +93,20 @@ DEFINE_DEVICE_TYPE(PCI_BUS_LEGACY, pci_bus_legacy_device, "pci_bus_legacy", "PCI //------------------------------------------------- pci_bus_legacy_device::pci_bus_legacy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, PCI_BUS_LEGACY, tag, owner, clock), - m_father(nullptr) + m_read_callback(*this), + m_write_callback(*this), + m_father(*this, finder_base::DUMMY_TAG), + m_siblings_count(0) { - m_siblings_count = 0; + std::fill(std::begin(m_siblings), std::end(m_siblings), nullptr); + std::fill(std::begin(m_siblings_busnum), std::end(m_siblings_busnum), 0); } /*************************************************************************** INLINE FUNCTIONS ***************************************************************************/ -READ32_MEMBER( pci_bus_legacy_device::read ) +uint32_t pci_bus_legacy_device::read(offs_t offset, uint32_t mem_mask) { uint32_t result = 0xffffffff; int function, reg; @@ -156,7 +160,7 @@ pci_bus_legacy_device *pci_bus_legacy_device::pci_search_bustree(int busnum, int -WRITE32_MEMBER( pci_bus_legacy_device::write ) +void pci_bus_legacy_device::write(offs_t offset, uint32_t data, uint32_t mem_mask) { offset %= 2; @@ -202,25 +206,25 @@ WRITE32_MEMBER( pci_bus_legacy_device::write ) -READ64_MEMBER(pci_bus_legacy_device::read_64be) +uint64_t pci_bus_legacy_device::read_64be(offs_t offset, uint64_t mem_mask) { uint64_t result = 0; mem_mask = swapendian_int64(mem_mask); if (ACCESSING_BITS_0_31) - result |= (uint64_t)read(space, offset * 2 + 0, mem_mask >> 0) << 0; + result |= (uint64_t)read(offset * 2 + 0, mem_mask >> 0) << 0; if (ACCESSING_BITS_32_63) - result |= (uint64_t)read(space, offset * 2 + 1, mem_mask >> 32) << 32; + result |= (uint64_t)read(offset * 2 + 1, mem_mask >> 32) << 32; return swapendian_int64(result); } -WRITE64_MEMBER(pci_bus_legacy_device::write_64be) +void pci_bus_legacy_device::write_64be(offs_t offset, uint64_t data, uint64_t mem_mask) { data = swapendian_int64(data); mem_mask = swapendian_int64(mem_mask); if (ACCESSING_BITS_0_31) - write(space, offset * 2 + 0, data >> 0, mem_mask >> 0); + write(offset * 2 + 0, data >> 0, mem_mask >> 0); if (ACCESSING_BITS_32_63) - write(space, offset * 2 + 1, data >> 32, mem_mask >> 32); + write(offset * 2 + 1, data >> 32, mem_mask >> 32); } @@ -255,16 +259,11 @@ void pci_bus_legacy_device::device_start() m_devicenum = -1; /* find all our device callbacks */ - for (auto &cb : m_read_callback) - cb.bind_relative_to(*owner()); - for (auto &cb : m_write_callback) - cb.bind_relative_to(*owner()); - - if (m_father != nullptr) { - pci_bus_legacy_device *father = machine().device<pci_bus_legacy_device>(m_father); - if (father) - father->add_sibling(this, m_busnum); - } + m_read_callback.resolve_all(); + m_write_callback.resolve_all(); + + if (m_father.found()) + m_father->add_sibling(this, m_busnum); /* register pci states */ save_item(NAME(m_address)); |