| 486 | } |
| 487 | |
| 488 | static 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 |
nothing calls this directly
no test coverage detected