From: Asias He Date: Thu, 27 Oct 2011 12:47:28 +0000 (+0800) Subject: kvm tools: Set correct virtio pci device class code X-Git-Tag: next-20111101~5^2~8 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=27a91b385edbaf29c3cce644650eb75028fc9d3c;p=karo-tx-linux.git kvm tools: Set correct virtio pci device class code All the virtio pci device is set to class code 0x010000, this is wrong. This patch sets the correct class code and makes lspci report correct class type. For example, the net device: Before: $ lspci 00:03.0 SCSI storage controller: Red Hat, Inc Virtio network device After: $ lspci 00:03.0 Ethernet controller: Red Hat, Inc Virtio network device Acked-by: Sasha Levin Signed-off-by: Asias He Signed-off-by: Pekka Enberg --- diff --git a/tools/kvm/include/kvm/virtio-pci-dev.h b/tools/kvm/include/kvm/virtio-pci-dev.h index bfcb076f793f..e692bddd4c37 100644 --- a/tools/kvm/include/kvm/virtio-pci-dev.h +++ b/tools/kvm/include/kvm/virtio-pci-dev.h @@ -24,4 +24,14 @@ #define PCI_SUBSYSTEM_ID_VESA 0x0004 #define PCI_SUBSYSTEM_ID_PCI_SHMEM 0x0001 +#define PCI_CLASS_BLK 0x018000 +#define PCI_CLASS_NET 0x020000 +#define PCI_CLASS_CONSOLE 0x078000 +/* + * 0xFF Device does not fit in any defined classes + */ +#define PCI_CLASS_RNG 0xff0000 +#define PCI_CLASS_BLN 0xff0000 +#define PCI_CLASS_P9 0xff0000 + #endif /* VIRTIO_PCI_DEV_H_ */ diff --git a/tools/kvm/include/kvm/virtio-pci.h b/tools/kvm/include/kvm/virtio-pci.h index ce44e846c8f5..d6d98df01ad4 100644 --- a/tools/kvm/include/kvm/virtio-pci.h +++ b/tools/kvm/include/kvm/virtio-pci.h @@ -52,7 +52,7 @@ struct virtio_pci { }; int virtio_pci__init(struct kvm *kvm, struct virtio_pci *vpci, void *dev, - int device_id, int subsys_id); + int device_id, int subsys_id, int class); int virtio_pci__signal_vq(struct kvm *kvm, struct virtio_pci *vpci, u32 vq); int virtio_pci__signal_config(struct kvm *kvm, struct virtio_pci *vpci); diff --git a/tools/kvm/virtio/9p.c b/tools/kvm/virtio/9p.c index 8dbd016c9d52..1569bb279e9f 100644 --- a/tools/kvm/virtio/9p.c +++ b/tools/kvm/virtio/9p.c @@ -1193,7 +1193,7 @@ int virtio_9p__init(struct kvm *kvm) struct p9_dev *p9dev; list_for_each_entry(p9dev, &devs, list) { - virtio_pci__init(kvm, &p9dev->vpci, p9dev, PCI_DEVICE_ID_VIRTIO_P9, VIRTIO_ID_9P); + virtio_pci__init(kvm, &p9dev->vpci, p9dev, PCI_DEVICE_ID_VIRTIO_P9, VIRTIO_ID_9P, PCI_CLASS_P9); p9dev->vpci.ops = (struct virtio_pci_ops) { .set_config = set_config, .get_config = get_config, diff --git a/tools/kvm/virtio/balloon.c b/tools/kvm/virtio/balloon.c index 0228686c9df5..9a52108c1f2b 100644 --- a/tools/kvm/virtio/balloon.c +++ b/tools/kvm/virtio/balloon.c @@ -242,7 +242,7 @@ void virtio_bln__init(struct kvm *kvm) bdev.stat_waitfd = eventfd(0, 0); memset(&bdev.config, 0, sizeof(struct virtio_balloon_config)); - virtio_pci__init(kvm, &bdev.vpci, &bdev, PCI_DEVICE_ID_VIRTIO_BLN, VIRTIO_ID_BALLOON); + virtio_pci__init(kvm, &bdev.vpci, &bdev, PCI_DEVICE_ID_VIRTIO_BLN, VIRTIO_ID_BALLOON, PCI_CLASS_BLN); bdev.vpci.ops = (struct virtio_pci_ops) { .set_config = set_config, .get_config = get_config, diff --git a/tools/kvm/virtio/blk.c b/tools/kvm/virtio/blk.c index 86059510c594..6ffa75384e74 100644 --- a/tools/kvm/virtio/blk.c +++ b/tools/kvm/virtio/blk.c @@ -206,7 +206,7 @@ void virtio_blk__init(struct kvm *kvm, struct disk_image *disk) }, }; - virtio_pci__init(kvm, &bdev->vpci, bdev, PCI_DEVICE_ID_VIRTIO_BLK, VIRTIO_ID_BLOCK); + virtio_pci__init(kvm, &bdev->vpci, bdev, PCI_DEVICE_ID_VIRTIO_BLK, VIRTIO_ID_BLOCK, PCI_CLASS_BLK); bdev->vpci.ops = (struct virtio_pci_ops) { .set_config = set_config, .get_config = get_config, diff --git a/tools/kvm/virtio/console.c b/tools/kvm/virtio/console.c index 36997bd70b1a..f0e4bf8b033e 100644 --- a/tools/kvm/virtio/console.c +++ b/tools/kvm/virtio/console.c @@ -177,7 +177,7 @@ static int get_size_vq(struct kvm *kvm, void *dev, u32 vq) void virtio_console__init(struct kvm *kvm) { - virtio_pci__init(kvm, &cdev.vpci, &cdev, PCI_DEVICE_ID_VIRTIO_CONSOLE, VIRTIO_ID_CONSOLE); + virtio_pci__init(kvm, &cdev.vpci, &cdev, PCI_DEVICE_ID_VIRTIO_CONSOLE, VIRTIO_ID_CONSOLE, PCI_CLASS_CONSOLE); cdev.vpci.ops = (struct virtio_pci_ops) { .set_config = set_config, .get_config = get_config, diff --git a/tools/kvm/virtio/net.c b/tools/kvm/virtio/net.c index bfa2c7b4a0f5..1b59972e18fd 100644 --- a/tools/kvm/virtio/net.c +++ b/tools/kvm/virtio/net.c @@ -399,7 +399,7 @@ void virtio_net__init(const struct virtio_net_params *params) ndev->ops = &uip_ops; } - virtio_pci__init(kvm, &ndev->vpci, ndev, PCI_DEVICE_ID_VIRTIO_NET, VIRTIO_ID_NET); + virtio_pci__init(kvm, &ndev->vpci, ndev, PCI_DEVICE_ID_VIRTIO_NET, VIRTIO_ID_NET, PCI_CLASS_NET); ndev->vpci.ops = (struct virtio_pci_ops) { .set_config = set_config, .get_config = get_config, diff --git a/tools/kvm/virtio/pci.c b/tools/kvm/virtio/pci.c index 73d55a97a822..fe3f74698273 100644 --- a/tools/kvm/virtio/pci.c +++ b/tools/kvm/virtio/pci.c @@ -256,7 +256,7 @@ int virtio_pci__signal_config(struct kvm *kvm, struct virtio_pci *vpci) } int virtio_pci__init(struct kvm *kvm, struct virtio_pci *vpci, void *dev, - int device_id, int subsys_id) + int device_id, int subsys_id, int class) { u8 pin, line, ndev; @@ -273,7 +273,7 @@ int virtio_pci__init(struct kvm *kvm, struct virtio_pci *vpci, void *dev, .device_id = device_id, .header_type = PCI_HEADER_TYPE_NORMAL, .revision_id = 0, - .class = 0x010000, + .class = class, .subsys_vendor_id = PCI_SUBSYSTEM_VENDOR_ID_REDHAT_QUMRANET, .subsys_id = subsys_id, .bar[0] = vpci->base_addr | PCI_BASE_ADDRESS_SPACE_IO, diff --git a/tools/kvm/virtio/rng.c b/tools/kvm/virtio/rng.c index c7e7f2d296b3..efb94c9284c8 100644 --- a/tools/kvm/virtio/rng.c +++ b/tools/kvm/virtio/rng.c @@ -150,7 +150,7 @@ void virtio_rng__init(struct kvm *kvm) if (rdev->fd < 0) die("Failed initializing RNG"); - virtio_pci__init(kvm, &rdev->vpci, rdev, PCI_DEVICE_ID_VIRTIO_RNG, VIRTIO_ID_RNG); + virtio_pci__init(kvm, &rdev->vpci, rdev, PCI_DEVICE_ID_VIRTIO_RNG, VIRTIO_ID_RNG, PCI_CLASS_RNG); rdev->vpci.ops = (struct virtio_pci_ops) { .set_config = set_config, .get_config = get_config,