提交 e75ccf2c 编写于 作者: I Isaku Yamahata 提交者: Michael S. Tsirkin

virtio-pci.c: convert to PCIDEviceInfo to initialize ids

use PCIDeviceInfo to initialize ids.
Signed-off-by: NIsaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
上级 5844997a
...@@ -669,9 +669,7 @@ static const VirtIOBindings virtio_pci_bindings = { ...@@ -669,9 +669,7 @@ static const VirtIOBindings virtio_pci_bindings = {
.vmstate_change = virtio_pci_vmstate_change, .vmstate_change = virtio_pci_vmstate_change,
}; };
static void virtio_init_pci(VirtIOPCIProxy *proxy, VirtIODevice *vdev, static void virtio_init_pci(VirtIOPCIProxy *proxy, VirtIODevice *vdev)
uint16_t vendor, uint16_t device,
uint16_t class_code, uint8_t pif)
{ {
uint8_t *config; uint8_t *config;
uint32_t size; uint32_t size;
...@@ -679,19 +677,12 @@ static void virtio_init_pci(VirtIOPCIProxy *proxy, VirtIODevice *vdev, ...@@ -679,19 +677,12 @@ static void virtio_init_pci(VirtIOPCIProxy *proxy, VirtIODevice *vdev,
proxy->vdev = vdev; proxy->vdev = vdev;
config = proxy->pci_dev.config; config = proxy->pci_dev.config;
pci_config_set_vendor_id(config, vendor);
pci_config_set_device_id(config, device);
config[0x08] = VIRTIO_PCI_ABI_VERSION;
config[0x09] = pif;
pci_config_set_class(config, class_code);
config[0x2c] = vendor & 0xFF;
config[0x2d] = (vendor >> 8) & 0xFF;
config[0x2e] = vdev->device_id & 0xFF;
config[0x2f] = (vdev->device_id >> 8) & 0xFF;
if (proxy->class_code) {
pci_config_set_class(config, proxy->class_code);
}
pci_set_word(config + 0x2c, pci_get_word(config + PCI_VENDOR_ID));
pci_set_word(config + 0x2e, vdev->device_id);
config[0x3d] = 1; config[0x3d] = 1;
if (vdev->nvectors && !msix_init(&proxy->pci_dev, vdev->nvectors, 1, 0)) { if (vdev->nvectors && !msix_init(&proxy->pci_dev, vdev->nvectors, 1, 0)) {
...@@ -735,10 +726,7 @@ static int virtio_blk_init_pci(PCIDevice *pci_dev) ...@@ -735,10 +726,7 @@ static int virtio_blk_init_pci(PCIDevice *pci_dev)
return -1; return -1;
} }
vdev->nvectors = proxy->nvectors; vdev->nvectors = proxy->nvectors;
virtio_init_pci(proxy, vdev, virtio_init_pci(proxy, vdev);
PCI_VENDOR_ID_REDHAT_QUMRANET,
PCI_DEVICE_ID_VIRTIO_BLOCK,
proxy->class_code, 0x00);
/* make the actual value visible */ /* make the actual value visible */
proxy->nvectors = vdev->nvectors; proxy->nvectors = vdev->nvectors;
return 0; return 0;
...@@ -776,10 +764,7 @@ static int virtio_serial_init_pci(PCIDevice *pci_dev) ...@@ -776,10 +764,7 @@ static int virtio_serial_init_pci(PCIDevice *pci_dev)
vdev->nvectors = proxy->nvectors == DEV_NVECTORS_UNSPECIFIED vdev->nvectors = proxy->nvectors == DEV_NVECTORS_UNSPECIFIED
? proxy->serial.max_virtserial_ports + 1 ? proxy->serial.max_virtserial_ports + 1
: proxy->nvectors; : proxy->nvectors;
virtio_init_pci(proxy, vdev, virtio_init_pci(proxy, vdev);
PCI_VENDOR_ID_REDHAT_QUMRANET,
PCI_DEVICE_ID_VIRTIO_CONSOLE,
proxy->class_code, 0x00);
proxy->nvectors = vdev->nvectors; proxy->nvectors = vdev->nvectors;
return 0; return 0;
} }
...@@ -801,11 +786,7 @@ static int virtio_net_init_pci(PCIDevice *pci_dev) ...@@ -801,11 +786,7 @@ static int virtio_net_init_pci(PCIDevice *pci_dev)
vdev = virtio_net_init(&pci_dev->qdev, &proxy->nic, &proxy->net); vdev = virtio_net_init(&pci_dev->qdev, &proxy->nic, &proxy->net);
vdev->nvectors = proxy->nvectors; vdev->nvectors = proxy->nvectors;
virtio_init_pci(proxy, vdev, virtio_init_pci(proxy, vdev);
PCI_VENDOR_ID_REDHAT_QUMRANET,
PCI_DEVICE_ID_VIRTIO_NET,
PCI_CLASS_NETWORK_ETHERNET,
0x00);
/* make the actual value visible */ /* make the actual value visible */
proxy->nvectors = vdev->nvectors; proxy->nvectors = vdev->nvectors;
...@@ -827,11 +808,7 @@ static int virtio_balloon_init_pci(PCIDevice *pci_dev) ...@@ -827,11 +808,7 @@ static int virtio_balloon_init_pci(PCIDevice *pci_dev)
VirtIODevice *vdev; VirtIODevice *vdev;
vdev = virtio_balloon_init(&pci_dev->qdev); vdev = virtio_balloon_init(&pci_dev->qdev);
virtio_init_pci(proxy, vdev, virtio_init_pci(proxy, vdev);
PCI_VENDOR_ID_REDHAT_QUMRANET,
PCI_DEVICE_ID_VIRTIO_BALLOON,
PCI_CLASS_MEMORY_RAM,
0x00);
return 0; return 0;
} }
...@@ -843,11 +820,7 @@ static int virtio_9p_init_pci(PCIDevice *pci_dev) ...@@ -843,11 +820,7 @@ static int virtio_9p_init_pci(PCIDevice *pci_dev)
vdev = virtio_9p_init(&pci_dev->qdev, &proxy->fsconf); vdev = virtio_9p_init(&pci_dev->qdev, &proxy->fsconf);
vdev->nvectors = proxy->nvectors; vdev->nvectors = proxy->nvectors;
virtio_init_pci(proxy, vdev, virtio_init_pci(proxy, vdev);
PCI_VENDOR_ID_REDHAT_QUMRANET,
0x1009,
0x2,
0x00);
/* make the actual value visible */ /* make the actual value visible */
proxy->nvectors = vdev->nvectors; proxy->nvectors = vdev->nvectors;
return 0; return 0;
...@@ -861,6 +834,10 @@ static PCIDeviceInfo virtio_info[] = { ...@@ -861,6 +834,10 @@ static PCIDeviceInfo virtio_info[] = {
.qdev.size = sizeof(VirtIOPCIProxy), .qdev.size = sizeof(VirtIOPCIProxy),
.init = virtio_blk_init_pci, .init = virtio_blk_init_pci,
.exit = virtio_blk_exit_pci, .exit = virtio_blk_exit_pci,
.vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET,
.device_id = PCI_DEVICE_ID_VIRTIO_BLOCK,
.revision = VIRTIO_PCI_ABI_VERSION,
.class_id = PCI_CLASS_STORAGE_SCSI,
.qdev.props = (Property[]) { .qdev.props = (Property[]) {
DEFINE_PROP_HEX32("class", VirtIOPCIProxy, class_code, 0), DEFINE_PROP_HEX32("class", VirtIOPCIProxy, class_code, 0),
DEFINE_BLOCK_PROPERTIES(VirtIOPCIProxy, block), DEFINE_BLOCK_PROPERTIES(VirtIOPCIProxy, block),
...@@ -878,6 +855,10 @@ static PCIDeviceInfo virtio_info[] = { ...@@ -878,6 +855,10 @@ static PCIDeviceInfo virtio_info[] = {
.init = virtio_net_init_pci, .init = virtio_net_init_pci,
.exit = virtio_net_exit_pci, .exit = virtio_net_exit_pci,
.romfile = "pxe-virtio.rom", .romfile = "pxe-virtio.rom",
.vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET,
.device_id = PCI_DEVICE_ID_VIRTIO_NET,
.revision = VIRTIO_PCI_ABI_VERSION,
.class_id = PCI_CLASS_NETWORK_ETHERNET,
.qdev.props = (Property[]) { .qdev.props = (Property[]) {
DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, false), VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, false),
...@@ -898,6 +879,10 @@ static PCIDeviceInfo virtio_info[] = { ...@@ -898,6 +879,10 @@ static PCIDeviceInfo virtio_info[] = {
.qdev.size = sizeof(VirtIOPCIProxy), .qdev.size = sizeof(VirtIOPCIProxy),
.init = virtio_serial_init_pci, .init = virtio_serial_init_pci,
.exit = virtio_serial_exit_pci, .exit = virtio_serial_exit_pci,
.vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET,
.device_id = PCI_DEVICE_ID_VIRTIO_CONSOLE,
.revision = VIRTIO_PCI_ABI_VERSION,
.class_id = PCI_CLASS_COMMUNICATION_OTHER,
.qdev.props = (Property[]) { .qdev.props = (Property[]) {
DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true), VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
...@@ -916,6 +901,10 @@ static PCIDeviceInfo virtio_info[] = { ...@@ -916,6 +901,10 @@ static PCIDeviceInfo virtio_info[] = {
.qdev.size = sizeof(VirtIOPCIProxy), .qdev.size = sizeof(VirtIOPCIProxy),
.init = virtio_balloon_init_pci, .init = virtio_balloon_init_pci,
.exit = virtio_exit_pci, .exit = virtio_exit_pci,
.vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET,
.device_id = PCI_DEVICE_ID_VIRTIO_BALLOON,
.revision = VIRTIO_PCI_ABI_VERSION,
.class_id = PCI_CLASS_MEMORY_RAM,
.qdev.props = (Property[]) { .qdev.props = (Property[]) {
DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features), DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
DEFINE_PROP_END_OF_LIST(), DEFINE_PROP_END_OF_LIST(),
...@@ -927,6 +916,10 @@ static PCIDeviceInfo virtio_info[] = { ...@@ -927,6 +916,10 @@ static PCIDeviceInfo virtio_info[] = {
.qdev.alias = "virtio-9p", .qdev.alias = "virtio-9p",
.qdev.size = sizeof(VirtIOPCIProxy), .qdev.size = sizeof(VirtIOPCIProxy),
.init = virtio_9p_init_pci, .init = virtio_9p_init_pci,
.vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET,
.device_id = 0x1009,
.revision = VIRTIO_PCI_ABI_VERSION,
.class_id = 0x2,
.qdev.props = (Property[]) { .qdev.props = (Property[]) {
DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2), DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2),
DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features), DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册