|
@@ -200,6 +200,11 @@ static const TypeInfo pci_bus_info = {
|
|
|
.class_init = pci_bus_class_init,
|
|
|
};
|
|
|
|
|
|
+static const TypeInfo cxl_interface_info = {
|
|
|
+ .name = INTERFACE_CXL_DEVICE,
|
|
|
+ .parent = TYPE_INTERFACE,
|
|
|
+};
|
|
|
+
|
|
|
static const TypeInfo pcie_interface_info = {
|
|
|
.name = INTERFACE_PCIE_DEVICE,
|
|
|
.parent = TYPE_INTERFACE,
|
|
@@ -2182,6 +2187,10 @@ static void pci_qdev_realize(DeviceState *qdev, Error **errp)
|
|
|
pci_dev->cap_present |= QEMU_PCI_CAP_EXPRESS;
|
|
|
}
|
|
|
|
|
|
+ if (object_class_dynamic_cast(klass, INTERFACE_CXL_DEVICE)) {
|
|
|
+ pci_dev->cap_present |= QEMU_PCIE_CAP_CXL;
|
|
|
+ }
|
|
|
+
|
|
|
pci_dev = do_pci_register_device(pci_dev,
|
|
|
object_get_typename(OBJECT(qdev)),
|
|
|
pci_dev->devfn, errp);
|
|
@@ -2938,6 +2947,7 @@ static void pci_register_types(void)
|
|
|
type_register_static(&pci_bus_info);
|
|
|
type_register_static(&pcie_bus_info);
|
|
|
type_register_static(&conventional_pci_interface_info);
|
|
|
+ type_register_static(&cxl_interface_info);
|
|
|
type_register_static(&pcie_interface_info);
|
|
|
type_register_static(&pci_device_type_info);
|
|
|
}
|