[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH V6 for-2.3 13/26] hw/pci-host: introduce TYPE_PCI_HO
From: |
Marcel Apfelbaum |
Subject: |
[Qemu-devel] [PATCH V6 for-2.3 13/26] hw/pci-host: introduce TYPE_PCI_HOST_BRIDGE_SNOOPED interface |
Date: |
Thu, 19 Mar 2015 20:52:48 +0200 |
TYPE_PCI_HOST_BRIDGE_SNOOPED is a special case of host bridge
whose configuration registers are snooped by other host bridges
to complete their configuration cycles.
The interface exposes a list of snooping host bridges that
shall be used by the hosts implementing this interface
in order to emulate a snooping mechanism.
The way that the snooping hosts are registered or how
the snooping is implemented are out of the interface scope,
it only provides a way to determine if a host bridge has
snooping hosts and list them.
Signed-off-by: Marcel Apfelbaum <address@hidden>
---
hw/pci/pci_host.c | 8 ++++++++
include/hw/pci/pci_host.h | 24 ++++++++++++++++++++++++
2 files changed, 32 insertions(+)
diff --git a/hw/pci/pci_host.c b/hw/pci/pci_host.c
index 87180c8..288e74c 100644
--- a/hw/pci/pci_host.c
+++ b/hw/pci/pci_host.c
@@ -180,6 +180,12 @@ static const TypeInfo pci_main_host_interface_info = {
.parent = TYPE_INTERFACE,
};
+static const TypeInfo pci_host_bridge_snooped_interface_info = {
+ .name = TYPE_PCI_HOST_BRIDGE_SNOOPED,
+ .parent = TYPE_INTERFACE,
+ .class_size = sizeof(PCIHostBridgeSnoopedClass),
+};
+
static const TypeInfo pci_host_type_info = {
.name = TYPE_PCI_HOST_BRIDGE,
.parent = TYPE_SYS_BUS_DEVICE,
@@ -191,7 +197,9 @@ static const TypeInfo pci_host_type_info = {
static void pci_host_register_types(void)
{
type_register_static(&pci_main_host_interface_info);
+ type_register_static(&pci_host_bridge_snooped_interface_info);
type_register_static(&pci_host_type_info);
+
}
type_init(pci_host_register_types)
diff --git a/include/hw/pci/pci_host.h b/include/hw/pci/pci_host.h
index 3c72e26..a041919 100644
--- a/include/hw/pci/pci_host.h
+++ b/include/hw/pci/pci_host.h
@@ -63,6 +63,30 @@ typedef struct PCIHostBridgeClass {
const char *(*root_bus_path)(PCIHostState *, PCIBus *);
} PCIHostBridgeClass;
+/**
+ * A special case of host bridge whose configuration registers
+ * are snooped by other host bridges to complete their
+ * configuration cycles.
+ */
+#define TYPE_PCI_HOST_BRIDGE_SNOOPED "pci-host-bridge-snooped"
+#define TYPE_PCI_HOST_BRIDGE_SNOOPED_CLASS(klass) \
+ OBJECT_CLASS_CHECK(PCIHostBridgeSnoopedClass, (klass), \
+ TYPE_PCI_HOST_BRIDGE_SNOOPED)
+#define PCI_HOST_BRIDGE_SNOOPED_GET_CLASS(obj) \
+ OBJECT_GET_CLASS(PCIHostBridgeSnoopedClass, (obj), \
+ TYPE_PCI_HOST_BRIDGE_SNOOPED)
+#define PCI_HOST_BRIDGE_SNOOPED(obj) \
+ INTERFACE_CHECK(PCIHostState, (obj), \
+ TYPE_PCI_HOST_BRIDGE_SNOOPED)
+
+typedef struct PCIHostBridgeSnoopedClass {
+ /* <private> */
+ InterfaceClass parent_class;
+
+ /* <public> */
+ GPtrArray *(*snooping_hosts)(PCIHostState *);
+} PCIHostBridgeSnoopedClass;
+
/* common internal helpers for PCI/PCIe hosts, cut off overflows */
void pci_host_config_write_common(PCIDevice *pci_dev, uint32_t addr,
uint32_t limit, uint32_t val, uint32_t len);
--
2.1.0
- [Qemu-devel] [PATCH V6 for-2.3 00/26] hw/pc: implement multiple primary busses for pc machines, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 02/26] acpi: add aml_add() term, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 01/26] acpi: add aml_or() term, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 06/26] acpi: add aml_shiftright() term, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 04/26] acpi: add aml_index() term, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 03/26] acpi: add aml_lless() term, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 05/26] acpi: add aml_shiftleft() term, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 07/26] acpi: add aml_increment() term, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 09/26] hw/pci: move pci bus related code to separate files, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 08/26] acpi: add aml_while() term, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 13/26] hw/pci-host: introduce TYPE_PCI_HOST_BRIDGE_SNOOPED interface,
Marcel Apfelbaum <=
- [Qemu-devel] [PATCH V6 for-2.3 14/26] hw/pci-host/piix: implement TYPE_PCI_HOST_BRIDGE_SNOOPED interface, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 10/26] hw/pci: made pci_bus_is_root a PCIBusClass method, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 11/26] hw/pci: made pci_bus_num a PCIBusClass method, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 16/26] hw/apci: add _PRT method for extra PCI root busses, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 15/26] hw/acpi: add support for i440fx 'snooping' root busses, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 12/26] hw/pci: introduce TYPE_PCI_MAIN_HOST_BRIDGE interface, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 17/26] hw/acpi: add _CRS method for extra root busses, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 19/26] hw/pci: removed 'rootbus nr is 0' assumption from qmp_pci_query, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 21/26] hw/pci: inform bios if the system has extra pci root buses, Marcel Apfelbaum, 2015/03/19
- [Qemu-devel] [PATCH V6 for-2.3 18/26] hw/acpi: remove from root bus 0 the crs resources used by other busses., Marcel Apfelbaum, 2015/03/19