s390x/pci: introduce S390PCIBus

To enable S390PCIBusDevice as qdev, there should be a new bus to
plug and manage all instances of S390PCIBusDevice. Due to this,
S390PCIBus is introduced.

Signed-off-by: Yi Min Zhao <zyimin@linux.vnet.ibm.com>
Reviewed-by: Pierre Morel <pmorel@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
This commit is contained in:
Yi Min Zhao 2016-04-14 19:02:39 +08:00 committed by Cornelia Huck
parent 5d1abf2344
commit 90a0f9afec
2 changed files with 18 additions and 0 deletions

View File

@ -527,6 +527,9 @@ static int s390_pcihost_init(SysBusDevice *dev)
bus = BUS(b); bus = BUS(b);
qbus_set_hotplug_handler(bus, DEVICE(dev), NULL); qbus_set_hotplug_handler(bus, DEVICE(dev), NULL);
phb->bus = b; phb->bus = b;
s->bus = S390_PCI_BUS(qbus_create(TYPE_S390_PCI_BUS, DEVICE(s), NULL));
QTAILQ_INIT(&s->pending_sei); QTAILQ_INIT(&s->pending_sei);
return 0; return 0;
} }
@ -636,9 +639,16 @@ static const TypeInfo s390_pcihost_info = {
} }
}; };
static const TypeInfo s390_pcibus_info = {
.name = TYPE_S390_PCI_BUS,
.parent = TYPE_BUS,
.instance_size = sizeof(S390PCIBus),
};
static void s390_pci_register_types(void) static void s390_pci_register_types(void)
{ {
type_register_static(&s390_pcihost_info); type_register_static(&s390_pcihost_info);
type_register_static(&s390_pcibus_info);
} }
type_init(s390_pci_register_types) type_init(s390_pci_register_types)

View File

@ -21,6 +21,7 @@
#include "hw/s390x/css.h" #include "hw/s390x/css.h"
#define TYPE_S390_PCI_HOST_BRIDGE "s390-pcihost" #define TYPE_S390_PCI_HOST_BRIDGE "s390-pcihost"
#define TYPE_S390_PCI_BUS "s390-pcibus"
#define FH_MASK_ENABLE 0x80000000 #define FH_MASK_ENABLE 0x80000000
#define FH_MASK_INSTANCE 0x7f000000 #define FH_MASK_INSTANCE 0x7f000000
#define FH_MASK_SHM 0x00ff0000 #define FH_MASK_SHM 0x00ff0000
@ -31,6 +32,8 @@
#define S390_PCI_HOST_BRIDGE(obj) \ #define S390_PCI_HOST_BRIDGE(obj) \
OBJECT_CHECK(S390pciState, (obj), TYPE_S390_PCI_HOST_BRIDGE) OBJECT_CHECK(S390pciState, (obj), TYPE_S390_PCI_HOST_BRIDGE)
#define S390_PCI_BUS(obj) \
OBJECT_CHECK(S390PCIBus, (obj), TYPE_S390_PCI_BUS)
#define HP_EVENT_TO_CONFIGURED 0x0301 #define HP_EVENT_TO_CONFIGURED 0x0301
#define HP_EVENT_RESERVED_TO_STANDBY 0x0302 #define HP_EVENT_RESERVED_TO_STANDBY 0x0302
@ -267,8 +270,13 @@ typedef struct S390PCIBusDevice {
IndAddr *indicator; IndAddr *indicator;
} S390PCIBusDevice; } S390PCIBusDevice;
typedef struct S390PCIBus {
BusState qbus;
} S390PCIBus;
typedef struct S390pciState { typedef struct S390pciState {
PCIHostState parent_obj; PCIHostState parent_obj;
S390PCIBus *bus;
S390PCIBusDevice pbdev[PCI_SLOT_MAX]; S390PCIBusDevice pbdev[PCI_SLOT_MAX];
AddressSpace msix_notify_as; AddressSpace msix_notify_as;
MemoryRegion msix_notify_mr; MemoryRegion msix_notify_mr;