mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-10 11:04:58 -06:00
virtio-gpu: hostmem
Use VIRTIO_GPU_SHM_ID_HOST_VISIBLE as id for virtio-gpu. Signed-off-by: Antonio Caggiano <antonio.caggiano@collabora.com> Tested-by: Alyssa Ross <hi@alyssa.is> Tested-by: Akihiko Odaki <akihiko.odaki@daynix.com> Tested-by: Huang Rui <ray.huang@amd.com> Acked-by: Huang Rui <ray.huang@amd.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
This commit is contained in:
parent
17b98f46b9
commit
ba62dfa707
4 changed files with 44 additions and 9 deletions
|
@ -33,6 +33,20 @@ static void virtio_gpu_pci_base_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
|
||||||
DeviceState *vdev = DEVICE(g);
|
DeviceState *vdev = DEVICE(g);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (virtio_gpu_hostmem_enabled(g->conf)) {
|
||||||
|
vpci_dev->msix_bar_idx = 1;
|
||||||
|
vpci_dev->modern_mem_bar_idx = 2;
|
||||||
|
memory_region_init(&g->hostmem, OBJECT(g), "virtio-gpu-hostmem",
|
||||||
|
g->conf.hostmem);
|
||||||
|
pci_register_bar(&vpci_dev->pci_dev, 4,
|
||||||
|
PCI_BASE_ADDRESS_SPACE_MEMORY |
|
||||||
|
PCI_BASE_ADDRESS_MEM_PREFETCH |
|
||||||
|
PCI_BASE_ADDRESS_MEM_TYPE_64,
|
||||||
|
&g->hostmem);
|
||||||
|
virtio_pci_add_shm_cap(vpci_dev, 4, 0, g->conf.hostmem,
|
||||||
|
VIRTIO_GPU_SHM_ID_HOST_VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
virtio_pci_force_virtio_1(vpci_dev);
|
virtio_pci_force_virtio_1(vpci_dev);
|
||||||
if (!qdev_realize(vdev, BUS(&vpci_dev->bus), errp)) {
|
if (!qdev_realize(vdev, BUS(&vpci_dev->bus), errp)) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1511,6 +1511,7 @@ static Property virtio_gpu_properties[] = {
|
||||||
256 * MiB),
|
256 * MiB),
|
||||||
DEFINE_PROP_BIT("blob", VirtIOGPU, parent_obj.conf.flags,
|
DEFINE_PROP_BIT("blob", VirtIOGPU, parent_obj.conf.flags,
|
||||||
VIRTIO_GPU_FLAG_BLOB_ENABLED, false),
|
VIRTIO_GPU_FLAG_BLOB_ENABLED, false),
|
||||||
|
DEFINE_PROP_SIZE("hostmem", VirtIOGPU, parent_obj.conf.hostmem, 0),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
DEFINE_PROP_END_OF_LIST(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -115,6 +115,9 @@ static void virtio_vga_base_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
|
||||||
pci_register_bar(&vpci_dev->pci_dev, 0,
|
pci_register_bar(&vpci_dev->pci_dev, 0,
|
||||||
PCI_BASE_ADDRESS_MEM_PREFETCH, &vga->vram);
|
PCI_BASE_ADDRESS_MEM_PREFETCH, &vga->vram);
|
||||||
|
|
||||||
|
vpci_dev->modern_io_bar_idx = 5;
|
||||||
|
|
||||||
|
if (!virtio_gpu_hostmem_enabled(g->conf)) {
|
||||||
/*
|
/*
|
||||||
* Configure virtio bar and regions
|
* Configure virtio bar and regions
|
||||||
*
|
*
|
||||||
|
@ -124,7 +127,19 @@ static void virtio_vga_base_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
|
||||||
*/
|
*/
|
||||||
vpci_dev->modern_mem_bar_idx = 2;
|
vpci_dev->modern_mem_bar_idx = 2;
|
||||||
vpci_dev->msix_bar_idx = 4;
|
vpci_dev->msix_bar_idx = 4;
|
||||||
vpci_dev->modern_io_bar_idx = 5;
|
} else {
|
||||||
|
vpci_dev->msix_bar_idx = 1;
|
||||||
|
vpci_dev->modern_mem_bar_idx = 2;
|
||||||
|
memory_region_init(&g->hostmem, OBJECT(g), "virtio-gpu-hostmem",
|
||||||
|
g->conf.hostmem);
|
||||||
|
pci_register_bar(&vpci_dev->pci_dev, 4,
|
||||||
|
PCI_BASE_ADDRESS_SPACE_MEMORY |
|
||||||
|
PCI_BASE_ADDRESS_MEM_PREFETCH |
|
||||||
|
PCI_BASE_ADDRESS_MEM_TYPE_64,
|
||||||
|
&g->hostmem);
|
||||||
|
virtio_pci_add_shm_cap(vpci_dev, 4, 0, g->conf.hostmem,
|
||||||
|
VIRTIO_GPU_SHM_ID_HOST_VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
if (!(vpci_dev->flags & VIRTIO_PCI_FLAG_PAGE_PER_VQ)) {
|
if (!(vpci_dev->flags & VIRTIO_PCI_FLAG_PAGE_PER_VQ)) {
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -108,12 +108,15 @@ enum virtio_gpu_base_conf_flags {
|
||||||
(_cfg.flags & (1 << VIRTIO_GPU_FLAG_BLOB_ENABLED))
|
(_cfg.flags & (1 << VIRTIO_GPU_FLAG_BLOB_ENABLED))
|
||||||
#define virtio_gpu_context_init_enabled(_cfg) \
|
#define virtio_gpu_context_init_enabled(_cfg) \
|
||||||
(_cfg.flags & (1 << VIRTIO_GPU_FLAG_CONTEXT_INIT_ENABLED))
|
(_cfg.flags & (1 << VIRTIO_GPU_FLAG_CONTEXT_INIT_ENABLED))
|
||||||
|
#define virtio_gpu_hostmem_enabled(_cfg) \
|
||||||
|
(_cfg.hostmem > 0)
|
||||||
|
|
||||||
struct virtio_gpu_base_conf {
|
struct virtio_gpu_base_conf {
|
||||||
uint32_t max_outputs;
|
uint32_t max_outputs;
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
uint32_t xres;
|
uint32_t xres;
|
||||||
uint32_t yres;
|
uint32_t yres;
|
||||||
|
uint64_t hostmem;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct virtio_gpu_ctrl_command {
|
struct virtio_gpu_ctrl_command {
|
||||||
|
@ -137,6 +140,8 @@ struct VirtIOGPUBase {
|
||||||
int renderer_blocked;
|
int renderer_blocked;
|
||||||
int enable;
|
int enable;
|
||||||
|
|
||||||
|
MemoryRegion hostmem;
|
||||||
|
|
||||||
struct virtio_gpu_scanout scanout[VIRTIO_GPU_MAX_SCANOUTS];
|
struct virtio_gpu_scanout scanout[VIRTIO_GPU_MAX_SCANOUTS];
|
||||||
|
|
||||||
int enabled_output_bitmask;
|
int enabled_output_bitmask;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue