summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/lpci.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/lpci.cpp')
-rw-r--r--src/devices/machine/lpci.cpp43
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));