diff options
Diffstat (limited to 'src/devices/machine/pci.h')
-rw-r--r-- | src/devices/machine/pci.h | 67 |
1 files changed, 34 insertions, 33 deletions
diff --git a/src/devices/machine/pci.h b/src/devices/machine/pci.h index a882f93b957..d1f16287043 100644 --- a/src/devices/machine/pci.h +++ b/src/devices/machine/pci.h @@ -1,7 +1,9 @@ // license:BSD-3-Clause // copyright-holders:Olivier Galibert -#ifndef PCI_H -#define PCI_H +#ifndef MAME_MACHINE_PCI_H +#define MAME_MACHINE_PCI_H + +#pragma once #define MCFG_PCI_ROOT_ADD(_tag) \ @@ -29,8 +31,6 @@ public: mapper_cb remap_cb, remap_config_cb; - pci_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source); - void set_ids(uint32_t main_id, uint8_t revision, uint32_t pclass, uint32_t subsystem_id); void set_multifunction_device(bool enable); @@ -85,6 +85,8 @@ public: DECLARE_WRITE8_MEMBER(interrupt_pin_w); protected: + pci_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + optional_memory_region m_region; enum { @@ -142,10 +144,9 @@ protected: }; class agp_device : public pci_device { -public: - agp_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source); - protected: + agp_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + virtual void device_start() override; virtual void device_reset() override; }; @@ -153,7 +154,6 @@ protected: class pci_bridge_device : public pci_device, public device_memory_interface { public: pci_bridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - pci_bridge_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source); virtual void set_remap_cb(mapper_cb _remap_cb) override; virtual void map_device(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space, @@ -200,13 +200,7 @@ public: DECLARE_WRITE16_MEMBER(bridge_control_w); protected: - pci_device *sub_devices[32*8]; - std::vector<pci_device *> all_devices; - std::vector<pci_bridge_device *> all_bridges; - - uint32_t prefetch_baseu, prefetch_limitu; - uint16_t bridge_control, memory_base, memory_limit, prefetch_base, prefetch_limit, iobaseu, iolimitu; - uint8_t primary_bus, secondary_bus, subordinate_bus, iobase, iolimit; + pci_bridge_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); virtual void device_start() override; virtual void device_reset() override; @@ -222,15 +216,22 @@ protected: void propagate_config_write(uint8_t bus, uint8_t device, uint16_t reg, uint32_t data, uint32_t mem_mask); void config_write(uint8_t bus, uint8_t device, uint16_t reg, uint32_t data, uint32_t mem_mask); + pci_device *sub_devices[32*8]; + std::vector<pci_device *> all_devices; + std::vector<pci_bridge_device *> all_bridges; + + uint32_t prefetch_baseu, prefetch_limitu; + uint16_t bridge_control, memory_base, memory_limit, prefetch_base, prefetch_limit, iobaseu, iolimitu; + uint8_t primary_bus, secondary_bus, subordinate_bus, iobase, iolimit; + private: address_space_config configure_space_config; }; class agp_bridge_device : public pci_bridge_device { -public: - agp_bridge_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source); - protected: + agp_bridge_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + virtual void device_start() override; virtual void device_reset() override; }; @@ -239,30 +240,30 @@ class pci_host_device : public pci_bridge_device { public: DECLARE_ADDRESS_MAP(io_configuration_access_map, 32); - pci_host_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source); - protected: - address_space *memory_space, *io_space; + pci_host_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - uint64_t memory_window_start, memory_window_end, memory_offset; - uint64_t io_window_start, io_window_end, io_offset; + DECLARE_READ32_MEMBER(config_address_r); + DECLARE_WRITE32_MEMBER(config_address_w); + DECLARE_READ32_MEMBER(config_data_r); + DECLARE_WRITE32_MEMBER(config_data_w); virtual void device_start() override; virtual void device_reset() override; virtual device_t *bus_root() override; - uint32_t config_address; - - DECLARE_READ32_MEMBER(config_address_r); - DECLARE_WRITE32_MEMBER(config_address_w); - DECLARE_READ32_MEMBER(config_data_r); - DECLARE_WRITE32_MEMBER(config_data_w); - uint32_t root_config_read(uint8_t bus, uint8_t device, uint16_t reg, uint32_t mem_mask); void root_config_write(uint8_t bus, uint8_t device, uint16_t reg, uint32_t data, uint32_t mem_mask); void regenerate_mapping(); + + address_space *memory_space, *io_space; + + uint64_t memory_window_start, memory_window_end, memory_offset; + uint64_t io_window_start, io_window_end, io_offset; + + uint32_t config_address; }; class pci_root_device : public device_t { @@ -274,7 +275,7 @@ protected: virtual void device_reset() override; }; -extern const device_type PCI_ROOT; -extern const device_type PCI_BRIDGE; +DECLARE_DEVICE_TYPE(PCI_ROOT, pci_root_device) +DECLARE_DEVICE_TYPE(PCI_BRIDGE, pci_bridge_device) -#endif +#endif // MAME_MACHINE_PCI_H |