mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
virtio-pci: Introduce admin virtqueue
Introduce support for the admin virtqueue. By negotiating VIRTIO_F_ADMIN_VQ feature, driver detects capability and creates one administration virtqueue. Administration virtqueue implementation in virtio pci generic layer, enables multiple types of upper layer drivers such as vfio, net, blk to utilize it. Signed-off-by: Feng Liu <feliu@nvidia.com> Reviewed-by: Parav Pandit <parav@nvidia.com> Reviewed-by: Jiri Pirko <jiri@nvidia.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Yishai Hadas <yishaih@nvidia.com> Link: https://lore.kernel.org/r/20231219093247.170936-3-yishaih@nvidia.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
committed by
Alex Williamson
parent
838bebb4c9
commit
fd27ef6b44
@@ -207,6 +207,10 @@ static inline void check_offsets(void)
|
||||
offsetof(struct virtio_pci_modern_common_cfg, queue_notify_data));
|
||||
BUILD_BUG_ON(VIRTIO_PCI_COMMON_Q_RESET !=
|
||||
offsetof(struct virtio_pci_modern_common_cfg, queue_reset));
|
||||
BUILD_BUG_ON(VIRTIO_PCI_COMMON_ADM_Q_IDX !=
|
||||
offsetof(struct virtio_pci_modern_common_cfg, admin_queue_index));
|
||||
BUILD_BUG_ON(VIRTIO_PCI_COMMON_ADM_Q_NUM !=
|
||||
offsetof(struct virtio_pci_modern_common_cfg, admin_queue_num));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -296,7 +300,7 @@ int vp_modern_probe(struct virtio_pci_modern_device *mdev)
|
||||
mdev->common = vp_modern_map_capability(mdev, common,
|
||||
sizeof(struct virtio_pci_common_cfg), 4, 0,
|
||||
offsetofend(struct virtio_pci_modern_common_cfg,
|
||||
queue_reset),
|
||||
admin_queue_num),
|
||||
&mdev->common_len, NULL);
|
||||
if (!mdev->common)
|
||||
goto err_map_common;
|
||||
@@ -719,6 +723,24 @@ void __iomem *vp_modern_map_vq_notify(struct virtio_pci_modern_device *mdev,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vp_modern_map_vq_notify);
|
||||
|
||||
u16 vp_modern_avq_num(struct virtio_pci_modern_device *mdev)
|
||||
{
|
||||
struct virtio_pci_modern_common_cfg __iomem *cfg;
|
||||
|
||||
cfg = (struct virtio_pci_modern_common_cfg __iomem *)mdev->common;
|
||||
return vp_ioread16(&cfg->admin_queue_num);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vp_modern_avq_num);
|
||||
|
||||
u16 vp_modern_avq_index(struct virtio_pci_modern_device *mdev)
|
||||
{
|
||||
struct virtio_pci_modern_common_cfg __iomem *cfg;
|
||||
|
||||
cfg = (struct virtio_pci_modern_common_cfg __iomem *)mdev->common;
|
||||
return vp_ioread16(&cfg->admin_queue_index);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vp_modern_avq_index);
|
||||
|
||||
MODULE_VERSION("0.1");
|
||||
MODULE_DESCRIPTION("Modern Virtio PCI Device");
|
||||
MODULE_AUTHOR("Jason Wang <jasowang@redhat.com>");
|
||||
|
||||
Reference in New Issue
Block a user