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

Function virtio_gpu_control

components/drivers/virtio/virtio_gpu.c:488–668  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

486}
487
488static rt_err_t virtio_gpu_control(rt_device_t dev, int cmd, void *args)
489{
490 rt_err_t status = RT_EOK;
491 struct virtio_gpu_device *virtio_gpu_dev = (struct virtio_gpu_device *)dev;
492
493 switch (cmd)
494 {
495 case VIRTIO_DEVICE_CTRL_GPU_SET_PRIMARY:
496
497 _primary_virtio_gpu_dev = virtio_gpu_dev;
498
499 return status;
500 }
501
502 if (args == RT_NULL)
503 {
504 return -RT_ERROR;
505 }
506
507 switch (cmd)
508 {
509 case RTGRAPHIC_CTRL_RECT_UPDATE:
510 {
511 struct rt_device_rect_info *info = (struct rt_device_rect_info *)args;
512
513 if (virtio_gpu_dev->pmode_id == VIRTIO_GPU_INVALID_PMODE_ID)
514 {
515 status = -RT_ERROR;
516 break;
517 }
518
519 status = virtio_gpu_gfx_flush_2d(virtio_gpu_dev, virtio_gpu_dev->display_resource_id,
520 info->x, info->y, info->width, info->height);
521 }
522 break;
523 case RTGRAPHIC_CTRL_GET_INFO:
524 {
525 struct rt_device_graphic_info *info = (struct rt_device_graphic_info *)args;
526
527 info->pixel_format = _pixel_format_convert((rt_ubase_t)args, RT_FALSE);
528 info->bits_per_pixel = VIRTIO_GPU_FORMAT_BPP;
529 info->pitch = virtio_gpu_dev->pmode.r.width * VIRTIO_GPU_FORMAT_PIXEL;
530 info->width = virtio_gpu_dev->pmode.r.width;
531 info->height = virtio_gpu_dev->pmode.r.height;
532 info->framebuffer = virtio_gpu_dev->framebuffer;
533 info->smem_len = virtio_gpu_dev->smem_len;
534 }
535 break;
536 case VIRTIO_DEVICE_CTRL_GPU_CREATE_2D:
537
538 virtio_gpu_dev->format = _pixel_format_convert((rt_ubase_t)args, RT_TRUE);
539
540 if (virtio_gpu_dev->format == 0 || virtio_gpu_dev->pmode_id == VIRTIO_GPU_INVALID_PMODE_ID)
541 {
542 status = -RT_ERROR;
543 break;
544 }
545

Callers

nothing calls this directly

Calls 12

virtio_gpu_gfx_flush_2dFunction · 0.85
_pixel_format_convertFunction · 0.85
rt_malloc_alignFunction · 0.85
rt_mutex_takeFunction · 0.85
rt_mutex_releaseFunction · 0.85
virtio_gpu_cursor_moveFunction · 0.85
virtio_gpu_set_scanoutFunction · 0.70
virtio_gpu_update_cursorFunction · 0.70

Tested by

no test coverage detected