virtio: Add shared memory capability
Define a new capability type 'VIRTIO_PCI_CAP_SHARED_MEMORY_CFG' to allow defining shared memory regions with sizes and offsets of 2^32 and more. Multiple instances of the capability are allowed and distinguished by a device-specific 'id'. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Antonio Caggiano <antonio.caggiano@collabora.com> Signed-off-by: Gurchetan Singh <gurchetansingh@chromium.org> Tested-by: Alyssa Ross <hi@alyssa.is> Tested-by: Huang Rui <ray.huang@amd.com> Tested-by: Akihiko Odaki <akihiko.odaki@daynix.com> Acked-by: Huang Rui <ray.huang@amd.com> Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org> Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
This commit is contained in:
parent
63011373ad
commit
605a16a762
@ -1435,6 +1435,24 @@ static int virtio_pci_add_mem_cap(VirtIOPCIProxy *proxy,
|
||||
return offset;
|
||||
}
|
||||
|
||||
int virtio_pci_add_shm_cap(VirtIOPCIProxy *proxy,
|
||||
uint8_t bar, uint64_t offset, uint64_t length,
|
||||
uint8_t id)
|
||||
{
|
||||
struct virtio_pci_cap64 cap = {
|
||||
.cap.cap_len = sizeof cap,
|
||||
.cap.cfg_type = VIRTIO_PCI_CAP_SHARED_MEMORY_CFG,
|
||||
};
|
||||
|
||||
cap.cap.bar = bar;
|
||||
cap.cap.length = cpu_to_le32(length);
|
||||
cap.length_hi = cpu_to_le32(length >> 32);
|
||||
cap.cap.offset = cpu_to_le32(offset);
|
||||
cap.offset_hi = cpu_to_le32(offset >> 32);
|
||||
cap.cap.id = id;
|
||||
return virtio_pci_add_mem_cap(proxy, &cap.cap);
|
||||
}
|
||||
|
||||
static uint64_t virtio_pci_common_read(void *opaque, hwaddr addr,
|
||||
unsigned size)
|
||||
{
|
||||
|
@ -264,4 +264,8 @@ unsigned virtio_pci_optimal_num_queues(unsigned fixed_queues);
|
||||
void virtio_pci_set_guest_notifier_fd_handler(VirtIODevice *vdev, VirtQueue *vq,
|
||||
int n, bool assign,
|
||||
bool with_irqfd);
|
||||
|
||||
int virtio_pci_add_shm_cap(VirtIOPCIProxy *proxy, uint8_t bar, uint64_t offset,
|
||||
uint64_t length, uint8_t id);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user