MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / rt_virtio_gpu_init

Function rt_virtio_gpu_init

components/drivers/virtio/virtio_gpu.c:847–934  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

845}
846
847rt_err_t rt_virtio_gpu_init(rt_ubase_t *mmio_base, rt_uint32_t irq)
848{
849 static int dev_no = 0;
850 char dev_name[RT_NAME_MAX];
851 struct virtio_device *virtio_dev;
852 struct virtio_gpu_device *virtio_gpu_dev;
853
854 virtio_gpu_dev = rt_malloc(sizeof(struct virtio_gpu_device));
855
856 if (virtio_gpu_dev == RT_NULL)
857 {
858 goto _alloc_fail;
859 }
860
861 virtio_dev = &virtio_gpu_dev->virtio_dev;
862 virtio_dev->irq = irq;
863 virtio_dev->mmio_base = mmio_base;
864
865 virtio_gpu_dev->pmode_id = VIRTIO_GPU_INVALID_PMODE_ID;
866 virtio_gpu_dev->display_resource_id = 0;
867 virtio_gpu_dev->cursor_resource_id = 0;
868 virtio_gpu_dev->next_resource_id = 0;
869 virtio_gpu_dev->framebuffer = RT_NULL;
870 virtio_gpu_dev->smem_len = 0;
871 virtio_gpu_dev->cursor_enable = RT_FALSE;
872
873#ifdef RT_USING_SMP
874 rt_spin_lock_init(&virtio_dev->spinlock);
875#endif
876
877 virtio_reset_device(virtio_dev);
878 virtio_status_acknowledge_driver(virtio_dev);
879
880 virtio_dev->mmio_config->driver_features = virtio_dev->mmio_config->device_features & ~(
881 (1 << VIRTIO_F_RING_EVENT_IDX) |
882 (1 << VIRTIO_F_RING_INDIRECT_DESC));
883
884 virtio_status_driver_ok(virtio_dev);
885
886 if (virtio_queues_alloc(virtio_dev, 2) != RT_EOK)
887 {
888 goto _alloc_fail;
889 }
890
891 if (virtio_queue_init(virtio_dev, VIRTIO_GPU_QUEUE_CTRL, VIRTIO_GPU_QUEUE_SIZE) != RT_EOK)
892 {
893 goto _alloc_fail;
894 }
895
896 if (virtio_queue_init(virtio_dev, VIRTIO_GPU_QUEUE_CURSOR, VIRTIO_GPU_QUEUE_SIZE) != RT_EOK)
897 {
898 virtio_queue_destroy(virtio_dev, VIRTIO_GPU_QUEUE_CTRL);
899
900 goto _alloc_fail;
901 }
902
903 virtio_gpu_dev->parent.type = RT_Device_Class_Graphic;
904#ifdef RT_USING_DEVICE_OPS

Callers

nothing calls this directly

Calls 15

rt_mallocFunction · 0.85
virtio_reset_deviceFunction · 0.85
virtio_status_driver_okFunction · 0.85
virtio_queues_allocFunction · 0.85
virtio_queue_initFunction · 0.85
virtio_queue_destroyFunction · 0.85
rt_snprintfFunction · 0.85
rt_mutex_initFunction · 0.85
rt_device_registerFunction · 0.85
virtio_queues_freeFunction · 0.85
rt_freeFunction · 0.85

Tested by

no test coverage detected