summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/lpci/pci.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/lpci/pci.cpp')
-rw-r--r--src/devices/bus/lpci/pci.cpp53
1 files changed, 24 insertions, 29 deletions
diff --git a/src/devices/bus/lpci/pci.cpp b/src/devices/bus/lpci/pci.cpp
index 1a772f3bef6..05b88948aa4 100644
--- a/src/devices/bus/lpci/pci.cpp
+++ b/src/devices/bus/lpci/pci.cpp
@@ -74,7 +74,8 @@
#include "emu.h"
#include "pci.h"
-#define LOG_PCI 0
+#define VERBOSE (0)
+#include "logmacro.h"
//**************************************************************************
// GLOBAL VARIABLES
@@ -91,7 +92,8 @@ DEFINE_DEVICE_TYPE(PCI_BUS, pci_bus_device, "pci_bus", "PCI Bus")
//-------------------------------------------------
pci_bus_device::pci_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, PCI_BUS, tag, owner, clock), m_busnum(0),
- m_father(nullptr), m_address(0), m_devicenum(0), m_busnumber(0), m_busnumaddr(nullptr)
+ m_address(0), m_devicenum(0), m_busnumber(0), m_busnumaddr(nullptr),
+ m_father(*this, finder_base::DUMMY_TAG)
{
for (auto & elem : m_devtag) {
elem= nullptr;
@@ -103,7 +105,7 @@ pci_bus_device::pci_bus_device(const machine_config &mconfig, const char *tag, d
INLINE FUNCTIONS
***************************************************************************/
-READ32_MEMBER( pci_bus_device::read )
+uint32_t pci_bus_device::read(offs_t offset, uint32_t mem_mask)
{
uint32_t result = 0xffffffff;
int function, reg;
@@ -129,8 +131,7 @@ READ32_MEMBER( pci_bus_device::read )
break;
}
- if (LOG_PCI)
- logerror("read('%s'): offset=%d result=0x%08X\n", tag(), offset, result);
+ LOG("read('%s'): offset=%d result=0x%08X\n", tag(), offset, result);
return result;
}
@@ -157,12 +158,11 @@ pci_bus_device *pci_bus_device::pci_search_bustree(int busnum, int devicenum, pc
-WRITE32_MEMBER( pci_bus_device::write )
+void pci_bus_device::write(offs_t offset, uint32_t data, uint32_t mem_mask)
{
offset %= 2;
- if (LOG_PCI)
- logerror("write('%s'): offset=%d data=0x%08X\n", tag(), offset, data);
+ LOG("write('%s'): offset=%d data=0x%08X\n", tag(), offset, data);
switch (offset)
{
@@ -182,8 +182,7 @@ WRITE32_MEMBER( pci_bus_device::write )
}
else
m_devicenum = -1;
- if (LOG_PCI)
- logerror(" bus:%d device:%d\n", busnum, devicenum);
+ LOG(" bus:%d device:%d\n", busnum, devicenum);
}
break;
@@ -196,8 +195,7 @@ WRITE32_MEMBER( pci_bus_device::write )
int reg = (m_address >> 0) & 0xfc;
m_busnumaddr->m_device[m_devicenum]->pci_write(m_busnumaddr, function, reg, data, mem_mask);
}
- if (LOG_PCI)
- logerror(" function:%d register:%d\n", (m_address >> 8) & 0x07, (m_address >> 0) & 0xfc);
+ LOG(" function:%d register:%d\n", (m_address >> 8) & 0x07, (m_address >> 0) & 0xfc);
}
break;
}
@@ -205,25 +203,25 @@ WRITE32_MEMBER( pci_bus_device::write )
-READ64_MEMBER(pci_bus_device::read_64be)
+uint64_t pci_bus_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_device::write_64be)
+void pci_bus_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);
}
@@ -236,7 +234,7 @@ void pci_bus_device::add_sibling(pci_bus_device *sibling, int busnum)
void pci_bus_device::remap(int space_id, offs_t start, offs_t end)
{
- for (int i = 0; i < ARRAY_LENGTH(m_devtag); i++)
+ for (int i = 0; i < std::size(m_devtag); i++)
{
if (m_device[i] != nullptr)
m_device[i]->remap(space_id, start, end);
@@ -271,7 +269,7 @@ void pci_bus_device::device_start()
char id[3];
/* find all our devices */
- for (int i = 0; i < ARRAY_LENGTH(m_devtag); i++)
+ for (int i = 0; i < std::size(m_devtag); i++)
{
sprintf(id, "%d", i);
pci_connector_device *conn = downcast<pci_connector_device *>(subdevice(id));
@@ -284,11 +282,8 @@ void pci_bus_device::device_start()
m_device[i] = nullptr;
}
- if (m_father != nullptr) {
- pci_bus_device *father = machine().device<pci_bus_device>(m_father);
- if (father)
- father->add_sibling(this, m_busnum);
- }
+ if (m_father.found())
+ m_father->add_sibling(this, m_busnum);
/* register pci states */
save_item(NAME(m_address));
@@ -312,8 +307,8 @@ void pci_bus_device::device_reset()
// pci_device_interface - constructor
//-------------------------------------------------
-pci_device_interface::pci_device_interface(const machine_config &mconfig, device_t &device)
- : device_slot_card_interface(mconfig, device),
+pci_device_interface::pci_device_interface(const machine_config &mconfig, device_t &device) :
+ device_interface(device, "lpci"),
m_pci_bus(nullptr)
{
}
@@ -332,7 +327,7 @@ DEFINE_DEVICE_TYPE(PCI_CONNECTOR, pci_connector_device, "pci_connector", "PCI de
pci_connector_device::pci_connector_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, PCI_CONNECTOR, tag, owner, clock),
- device_slot_interface(mconfig, *this)
+ device_single_card_slot_interface<pci_device_interface>(mconfig, *this)
{
}
@@ -346,5 +341,5 @@ void pci_connector_device::device_start()
pci_device_interface *pci_connector_device::get_device()
{
- return dynamic_cast<pci_device_interface *>(get_card_device());
+ return get_card_device();
}