Lines Matching refs:virtio_gpu_dev
64 static void virtio_gpu_ctrl_send_command(struct virtio_gpu_device *virtio_gpu_dev, in virtio_gpu_ctrl_send_command() argument
68 void *addr = &virtio_gpu_dev->gpu_request; in virtio_gpu_ctrl_send_command()
70 struct virtio_device *virtio_dev = &virtio_gpu_dev->virtio_dev; in virtio_gpu_ctrl_send_command()
88 rt_memcpy(&virtio_gpu_dev->gpu_request, cmd, cmd_len); in virtio_gpu_ctrl_send_command()
98 virtio_gpu_dev->info[idx[0]].ctrl_valid = RT_TRUE; in virtio_gpu_ctrl_send_command()
104 while (virtio_gpu_dev->info[idx[0]].ctrl_valid) in virtio_gpu_ctrl_send_command()
125 static void virtio_gpu_cursor_send_command(struct virtio_gpu_device *virtio_gpu_dev, in virtio_gpu_cursor_send_command() argument
130 struct virtio_device *virtio_dev = &virtio_gpu_dev->virtio_dev; in virtio_gpu_cursor_send_command()
148 addr = &virtio_gpu_dev->info[id].cursor_cmd; in virtio_gpu_cursor_send_command()
149 virtio_gpu_dev->info[id].cursor_valid = RT_TRUE; in virtio_gpu_cursor_send_command()
159 while (virtio_gpu_dev->info[id].cursor_valid) in virtio_gpu_cursor_send_command()
178 static rt_err_t virtio_gpu_create_2d_resource(struct virtio_gpu_device *virtio_gpu_dev, enum virtio… in virtio_gpu_create_2d_resource() argument
184 *resource_id = ++virtio_gpu_dev->next_resource_id; in virtio_gpu_create_2d_resource()
192 virtio_gpu_ctrl_send_command(virtio_gpu_dev, &req, sizeof(req), &res, sizeof(res)); in virtio_gpu_create_2d_resource()
202 static rt_err_t virtio_gpu_unref_resource(struct virtio_gpu_device *virtio_gpu_dev, rt_uint32_t res… in virtio_gpu_unref_resource() argument
212 virtio_gpu_ctrl_send_command(virtio_gpu_dev, &req, sizeof(req), &res, sizeof(res)); in virtio_gpu_unref_resource()
222 static rt_err_t virtio_gpu_attach_backing_resource(struct virtio_gpu_device *virtio_gpu_dev, rt_uin… in virtio_gpu_attach_backing_resource() argument
241 virtio_gpu_ctrl_send_command(virtio_gpu_dev, &req, sizeof(req), &res, sizeof(res)); in virtio_gpu_attach_backing_resource()
251 static rt_err_t virtio_gpu_set_scanout(struct virtio_gpu_device *virtio_gpu_dev, rt_uint32_t scanou… in virtio_gpu_set_scanout() argument
267 virtio_gpu_ctrl_send_command(virtio_gpu_dev, &req, sizeof(req), &res, sizeof(res)); in virtio_gpu_set_scanout()
277 static rt_err_t virtio_gpu_flush_resource(struct virtio_gpu_device *virtio_gpu_dev, rt_uint32_t res… in virtio_gpu_flush_resource() argument
292 virtio_gpu_ctrl_send_command(virtio_gpu_dev, &req, sizeof(req), &res, sizeof(res)); in virtio_gpu_flush_resource()
302 static rt_err_t virtio_gpu_transfer_to_host_2d(struct virtio_gpu_device *virtio_gpu_dev, rt_uint32_… in virtio_gpu_transfer_to_host_2d() argument
318 virtio_gpu_ctrl_send_command(virtio_gpu_dev, &req, sizeof(req), &res, sizeof(res)); in virtio_gpu_transfer_to_host_2d()
328 static rt_err_t virtio_gpu_gfx_flush_2d(struct virtio_gpu_device *virtio_gpu_dev, rt_uint32_t resou… in virtio_gpu_gfx_flush_2d() argument
331 …rt_err_t status = virtio_gpu_transfer_to_host_2d(virtio_gpu_dev, resource_id, x, y, width, height,… in virtio_gpu_gfx_flush_2d()
335 status = virtio_gpu_flush_resource(virtio_gpu_dev, resource_id, x, y, width, height); in virtio_gpu_gfx_flush_2d()
341 static rt_err_t virtio_gpu_update_cursor(struct virtio_gpu_device *virtio_gpu_dev, rt_uint32_t scan… in virtio_gpu_update_cursor() argument
354 virtio_gpu_cursor_send_command(virtio_gpu_dev, &req, sizeof(req)); in virtio_gpu_update_cursor()
359 static rt_err_t virtio_gpu_cursor_move(struct virtio_gpu_device *virtio_gpu_dev, rt_uint32_t scanou… in virtio_gpu_cursor_move() argument
372 virtio_gpu_cursor_send_command(virtio_gpu_dev, &req, sizeof(req)); in virtio_gpu_cursor_move()
377 static rt_err_t virtio_gpu_cursor_set_img(struct virtio_gpu_device *virtio_gpu_dev, void *img) in virtio_gpu_cursor_set_img() argument
381 rt_memcpy(virtio_gpu_dev->cursor_img, img, VIRTIO_GPU_CURSOR_IMG_SIZE); in virtio_gpu_cursor_set_img()
383 status = virtio_gpu_attach_backing_resource(virtio_gpu_dev, in virtio_gpu_cursor_set_img()
384 … virtio_gpu_dev->cursor_resource_id, virtio_gpu_dev->cursor_img, VIRTIO_GPU_CURSOR_IMG_SIZE); in virtio_gpu_cursor_set_img()
391 status = virtio_gpu_transfer_to_host_2d(virtio_gpu_dev, virtio_gpu_dev->cursor_resource_id, in virtio_gpu_cursor_set_img()
397 static rt_err_t virtio_gpu_get_display_info(struct virtio_gpu_device *virtio_gpu_dev) in virtio_gpu_get_display_info() argument
406 virtio_gpu_ctrl_send_command(virtio_gpu_dev, &req, sizeof(req), &info, sizeof(info)); in virtio_gpu_get_display_info()
417 if (virtio_gpu_dev->pmode_id == VIRTIO_GPU_INVALID_PMODE_ID) in virtio_gpu_get_display_info()
419 rt_memcpy(&virtio_gpu_dev->pmode, &info.pmodes[i], sizeof(virtio_gpu_dev->pmode)); in virtio_gpu_get_display_info()
420 virtio_gpu_dev->pmode_id = i; in virtio_gpu_get_display_info()
431 struct virtio_gpu_device *virtio_gpu_dev = (struct virtio_gpu_device *)dev; in virtio_gpu_init() local
432 struct virtio_device *virtio_dev = &virtio_gpu_dev->virtio_dev; in virtio_gpu_init()
441 status = virtio_gpu_get_display_info(virtio_gpu_dev); in virtio_gpu_init()
443 … if (virtio_gpu_dev->pmode_id != VIRTIO_GPU_INVALID_PMODE_ID && _primary_virtio_gpu_dev == RT_NULL) in virtio_gpu_init()
446 _primary_virtio_gpu_dev = virtio_gpu_dev; in virtio_gpu_init()
454 struct virtio_gpu_device *virtio_gpu_dev = (struct virtio_gpu_device *)dev; in virtio_gpu_read() local
456 if (virtio_gpu_dev->framebuffer == RT_NULL || pos + size >= virtio_gpu_dev->smem_len) in virtio_gpu_read()
461 rt_mutex_take(&virtio_gpu_dev->rw_mutex, RT_WAITING_FOREVER); in virtio_gpu_read()
463 rt_memcpy(buffer, (rt_uint8_t *)virtio_gpu_dev->framebuffer + pos, size); in virtio_gpu_read()
465 rt_mutex_release(&virtio_gpu_dev->rw_mutex); in virtio_gpu_read()
472 struct virtio_gpu_device *virtio_gpu_dev = (struct virtio_gpu_device *)dev; in virtio_gpu_write() local
474 if (virtio_gpu_dev->framebuffer == RT_NULL || pos + size >= virtio_gpu_dev->smem_len) in virtio_gpu_write()
479 rt_mutex_take(&virtio_gpu_dev->rw_mutex, RT_WAITING_FOREVER); in virtio_gpu_write()
481 rt_memcpy((rt_uint8_t *)virtio_gpu_dev->framebuffer + pos, buffer, size); in virtio_gpu_write()
483 rt_mutex_release(&virtio_gpu_dev->rw_mutex); in virtio_gpu_write()
491 struct virtio_gpu_device *virtio_gpu_dev = (struct virtio_gpu_device *)dev; in virtio_gpu_control() local
497 _primary_virtio_gpu_dev = virtio_gpu_dev; in virtio_gpu_control()
513 if (virtio_gpu_dev->pmode_id == VIRTIO_GPU_INVALID_PMODE_ID) in virtio_gpu_control()
519 status = virtio_gpu_gfx_flush_2d(virtio_gpu_dev, virtio_gpu_dev->display_resource_id, in virtio_gpu_control()
529 info->pitch = virtio_gpu_dev->pmode.r.width * VIRTIO_GPU_FORMAT_PIXEL; in virtio_gpu_control()
530 info->width = virtio_gpu_dev->pmode.r.width; in virtio_gpu_control()
531 info->height = virtio_gpu_dev->pmode.r.height; in virtio_gpu_control()
532 info->framebuffer = virtio_gpu_dev->framebuffer; in virtio_gpu_control()
533 info->smem_len = virtio_gpu_dev->smem_len; in virtio_gpu_control()
538 virtio_gpu_dev->format = _pixel_format_convert((rt_ubase_t)args, RT_TRUE); in virtio_gpu_control()
540 if (virtio_gpu_dev->format == 0 || virtio_gpu_dev->pmode_id == VIRTIO_GPU_INVALID_PMODE_ID) in virtio_gpu_control()
546 status = virtio_gpu_create_2d_resource(virtio_gpu_dev, virtio_gpu_dev->format, in virtio_gpu_control()
547 …&virtio_gpu_dev->display_resource_id, virtio_gpu_dev->pmode.r.width, virtio_gpu_dev->pmode.r.heigh… in virtio_gpu_control()
554 virtio_gpu_dev->smem_len = in virtio_gpu_control()
555 … virtio_gpu_dev->pmode.r.width * virtio_gpu_dev->pmode.r.height * VIRTIO_GPU_FORMAT_PIXEL; in virtio_gpu_control()
556 virtio_gpu_dev->smem_len = RT_ALIGN(virtio_gpu_dev->smem_len, VIRTIO_PAGE_SIZE); in virtio_gpu_control()
557 virtio_gpu_dev->framebuffer = rt_malloc_align(virtio_gpu_dev->smem_len, VIRTIO_PAGE_SIZE); in virtio_gpu_control()
559 if (virtio_gpu_dev->framebuffer == RT_NULL) in virtio_gpu_control()
561 virtio_gpu_unref_resource(virtio_gpu_dev, virtio_gpu_dev->display_resource_id); in virtio_gpu_control()
567 status = virtio_gpu_attach_backing_resource(virtio_gpu_dev, in virtio_gpu_control()
568 … virtio_gpu_dev->display_resource_id, virtio_gpu_dev->framebuffer, virtio_gpu_dev->smem_len); in virtio_gpu_control()
575 …status = virtio_gpu_set_scanout(virtio_gpu_dev, virtio_gpu_dev->pmode_id, virtio_gpu_dev->display_… in virtio_gpu_control()
576 virtio_gpu_dev->pmode.r.width, virtio_gpu_dev->pmode.r.height); in virtio_gpu_control()
581 if (virtio_gpu_dev->pmode_id == VIRTIO_GPU_INVALID_PMODE_ID) in virtio_gpu_control()
587 rt_mutex_take(&virtio_gpu_dev->ops_mutex, RT_WAITING_FOREVER); in virtio_gpu_control()
589 status = virtio_gpu_create_2d_resource(virtio_gpu_dev, virtio_gpu_dev->format, in virtio_gpu_control()
590 … &virtio_gpu_dev->cursor_resource_id, VIRTIO_GPU_CURSOR_WIDTH, VIRTIO_GPU_CURSOR_HEIGHT); in virtio_gpu_control()
597 status = virtio_gpu_cursor_set_img(virtio_gpu_dev, args); in virtio_gpu_control()
604 virtio_gpu_dev->cursor_x = 0; in virtio_gpu_control()
605 virtio_gpu_dev->cursor_y = 0; in virtio_gpu_control()
607 …status = virtio_gpu_update_cursor(virtio_gpu_dev, virtio_gpu_dev->pmode_id, virtio_gpu_dev->cursor… in virtio_gpu_control()
608 virtio_gpu_dev->cursor_x, virtio_gpu_dev->cursor_y); in virtio_gpu_control()
612 virtio_gpu_dev->cursor_enable = RT_TRUE; in virtio_gpu_control()
616 rt_mutex_release(&virtio_gpu_dev->ops_mutex); in virtio_gpu_control()
621 … if (virtio_gpu_dev->pmode_id == VIRTIO_GPU_INVALID_PMODE_ID || !virtio_gpu_dev->cursor_enable) in virtio_gpu_control()
627 rt_mutex_take(&virtio_gpu_dev->ops_mutex, RT_WAITING_FOREVER); in virtio_gpu_control()
629 status = virtio_gpu_cursor_set_img(virtio_gpu_dev, args); in virtio_gpu_control()
636 …status = virtio_gpu_update_cursor(virtio_gpu_dev, virtio_gpu_dev->pmode_id, virtio_gpu_dev->cursor… in virtio_gpu_control()
637 virtio_gpu_dev->cursor_x, virtio_gpu_dev->cursor_y); in virtio_gpu_control()
640 rt_mutex_release(&virtio_gpu_dev->ops_mutex); in virtio_gpu_control()
645 … if (virtio_gpu_dev->pmode_id == VIRTIO_GPU_INVALID_PMODE_ID || !virtio_gpu_dev->cursor_enable) in virtio_gpu_control()
651 rt_mutex_take(&virtio_gpu_dev->ops_mutex, RT_WAITING_FOREVER); in virtio_gpu_control()
653 virtio_gpu_dev->cursor_x = ((rt_uint32_t *)args)[0]; in virtio_gpu_control()
654 virtio_gpu_dev->cursor_y = ((rt_uint32_t *)args)[1]; in virtio_gpu_control()
656 …status = virtio_gpu_cursor_move(virtio_gpu_dev, virtio_gpu_dev->pmode_id, virtio_gpu_dev->cursor_r… in virtio_gpu_control()
657 virtio_gpu_dev->cursor_x, virtio_gpu_dev->cursor_y); in virtio_gpu_control()
659 rt_mutex_release(&virtio_gpu_dev->ops_mutex); in virtio_gpu_control()
685 struct virtio_gpu_device *virtio_gpu_dev = _primary_virtio_gpu_dev; in virtio_gpu_set_pixel() local
687 if (virtio_gpu_dev == RT_NULL || virtio_gpu_dev->pmode_id == VIRTIO_GPU_INVALID_PMODE_ID) in virtio_gpu_set_pixel()
692 fb = (rt_uint8_t *)virtio_gpu_dev->framebuffer; in virtio_gpu_set_pixel()
693 fb += (y * virtio_gpu_dev->pmode.r.width + x) * VIRTIO_GPU_FORMAT_PIXEL; in virtio_gpu_set_pixel()
700 struct virtio_gpu_device *virtio_gpu_dev = _primary_virtio_gpu_dev; in virtio_gpu_get_pixel() local
702 if (virtio_gpu_dev == RT_NULL || virtio_gpu_dev->pmode_id == VIRTIO_GPU_INVALID_PMODE_ID) in virtio_gpu_get_pixel()
707 fb = (rt_uint8_t *)virtio_gpu_dev->framebuffer; in virtio_gpu_get_pixel()
708 …*((rt_uint32_t *)pixel) = *(fb + (y * virtio_gpu_dev->pmode.r.width + x) * VIRTIO_GPU_FORMAT_PIXEL… in virtio_gpu_get_pixel()
716 struct virtio_gpu_device *virtio_gpu_dev = _primary_virtio_gpu_dev; in virtio_gpu_draw_hline() local
718 if (virtio_gpu_dev == RT_NULL || virtio_gpu_dev->pmode_id == VIRTIO_GPU_INVALID_PMODE_ID || in virtio_gpu_draw_hline()
731 fb = (rt_uint8_t *)virtio_gpu_dev->framebuffer; in virtio_gpu_draw_hline()
732 fb += (y * virtio_gpu_dev->pmode.r.width + x1) * VIRTIO_GPU_FORMAT_PIXEL; in virtio_gpu_draw_hline()
748 struct virtio_gpu_device *virtio_gpu_dev = _primary_virtio_gpu_dev; in virtio_gpu_draw_vline() local
750 if (virtio_gpu_dev == RT_NULL || virtio_gpu_dev->pmode_id == VIRTIO_GPU_INVALID_PMODE_ID || in virtio_gpu_draw_vline()
763 fb = (rt_uint8_t *)virtio_gpu_dev->framebuffer; in virtio_gpu_draw_vline()
764 fb += (y1 * virtio_gpu_dev->pmode.r.width + x) * VIRTIO_GPU_FORMAT_PIXEL; in virtio_gpu_draw_vline()
766 pitch = virtio_gpu_dev->pmode.r.width * VIRTIO_GPU_FORMAT_PIXEL; in virtio_gpu_draw_vline()
781 struct virtio_gpu_device *virtio_gpu_dev = _primary_virtio_gpu_dev; in virtio_gpu_blit_line() local
783 …if (virtio_gpu_dev == RT_NULL || virtio_gpu_dev->pmode_id == VIRTIO_GPU_INVALID_PMODE_ID || x < 0 … in virtio_gpu_blit_line()
788 fb = (rt_uint8_t *)virtio_gpu_dev->framebuffer; in virtio_gpu_blit_line()
789 fb += (y * virtio_gpu_dev->pmode.r.width + x) * VIRTIO_GPU_FORMAT_PIXEL; in virtio_gpu_blit_line()
810 struct virtio_gpu_device *virtio_gpu_dev = (struct virtio_gpu_device *)param; in virtio_gpu_isr() local
811 struct virtio_device *virtio_dev = &virtio_gpu_dev->virtio_dev; in virtio_gpu_isr()
827 virtio_gpu_dev->info[id].ctrl_valid = RT_FALSE; in virtio_gpu_isr()
837 virtio_gpu_dev->info[id].cursor_valid = RT_FALSE; in virtio_gpu_isr()
852 struct virtio_gpu_device *virtio_gpu_dev; in rt_virtio_gpu_init() local
854 virtio_gpu_dev = rt_malloc(sizeof(struct virtio_gpu_device)); in rt_virtio_gpu_init()
856 if (virtio_gpu_dev == RT_NULL) in rt_virtio_gpu_init()
861 virtio_dev = &virtio_gpu_dev->virtio_dev; in rt_virtio_gpu_init()
865 virtio_gpu_dev->pmode_id = VIRTIO_GPU_INVALID_PMODE_ID; in rt_virtio_gpu_init()
866 virtio_gpu_dev->display_resource_id = 0; in rt_virtio_gpu_init()
867 virtio_gpu_dev->cursor_resource_id = 0; in rt_virtio_gpu_init()
868 virtio_gpu_dev->next_resource_id = 0; in rt_virtio_gpu_init()
869 virtio_gpu_dev->framebuffer = RT_NULL; in rt_virtio_gpu_init()
870 virtio_gpu_dev->smem_len = 0; in rt_virtio_gpu_init()
871 virtio_gpu_dev->cursor_enable = RT_FALSE; in rt_virtio_gpu_init()
903 virtio_gpu_dev->parent.type = RT_Device_Class_Graphic; in rt_virtio_gpu_init()
905 virtio_gpu_dev->parent.ops = &virtio_gpu_ops; in rt_virtio_gpu_init()
907 virtio_gpu_dev->parent.init = virtio_gpu_init; in rt_virtio_gpu_init()
908 virtio_gpu_dev->parent.open = RT_NULL; in rt_virtio_gpu_init()
909 virtio_gpu_dev->parent.close = RT_NULL; in rt_virtio_gpu_init()
910 virtio_gpu_dev->parent.read = virtio_gpu_read; in rt_virtio_gpu_init()
911 virtio_gpu_dev->parent.write = virtio_gpu_write; in rt_virtio_gpu_init()
912 virtio_gpu_dev->parent.control = virtio_gpu_control; in rt_virtio_gpu_init()
914 virtio_gpu_dev->parent.user_data = &virtio_gpu_graphic_ops; in rt_virtio_gpu_init()
918 rt_mutex_init(&virtio_gpu_dev->rw_mutex, dev_name, RT_IPC_FLAG_PRIO); in rt_virtio_gpu_init()
919 rt_mutex_init(&virtio_gpu_dev->ops_mutex, dev_name, RT_IPC_FLAG_PRIO); in rt_virtio_gpu_init()
921 rt_hw_interrupt_install(irq, virtio_gpu_isr, virtio_gpu_dev, dev_name); in rt_virtio_gpu_init()
924 return rt_device_register((rt_device_t)virtio_gpu_dev, dev_name, RT_DEVICE_FLAG_RDWR); in rt_virtio_gpu_init()
928 if (virtio_gpu_dev != RT_NULL) in rt_virtio_gpu_init()
931 rt_free(virtio_gpu_dev); in rt_virtio_gpu_init()