Lines Matching refs:qfbdev
88 struct qxl_fbdev *qfbdev = info->par; in qxl_fb_dirty_flush() local
89 struct qxl_device *qdev = qfbdev->qdev; in qxl_fb_dirty_flush()
96 int stride = qfbdev->qfb.base.pitches[0]; in qxl_fb_dirty_flush()
98 spin_lock_irqsave(&qfbdev->dirty.lock, flags); in qxl_fb_dirty_flush()
100 x1 = qfbdev->dirty.x1; in qxl_fb_dirty_flush()
101 x2 = qfbdev->dirty.x2; in qxl_fb_dirty_flush()
102 y1 = qfbdev->dirty.y1; in qxl_fb_dirty_flush()
103 y2 = qfbdev->dirty.y2; in qxl_fb_dirty_flush()
104 qfbdev->dirty.x1 = 0; in qxl_fb_dirty_flush()
105 qfbdev->dirty.x2 = 0; in qxl_fb_dirty_flush()
106 qfbdev->dirty.y1 = 0; in qxl_fb_dirty_flush()
107 qfbdev->dirty.y2 = 0; in qxl_fb_dirty_flush()
109 spin_unlock_irqrestore(&qfbdev->dirty.lock, flags); in qxl_fb_dirty_flush()
129 image->data = qfbdev->shadow + (x1 * 4) + (stride * y1); in qxl_fb_dirty_flush()
135 static void qxl_dirty_update(struct qxl_fbdev *qfbdev, in qxl_dirty_update() argument
138 struct qxl_device *qdev = qfbdev->qdev; in qxl_dirty_update()
145 spin_lock_irqsave(&qfbdev->dirty.lock, flags); in qxl_dirty_update()
147 if ((qfbdev->dirty.y2 - qfbdev->dirty.y1) && in qxl_dirty_update()
148 (qfbdev->dirty.x2 - qfbdev->dirty.x1)) { in qxl_dirty_update()
149 if (qfbdev->dirty.y1 < y) in qxl_dirty_update()
150 y = qfbdev->dirty.y1; in qxl_dirty_update()
151 if (qfbdev->dirty.y2 > y2) in qxl_dirty_update()
152 y2 = qfbdev->dirty.y2; in qxl_dirty_update()
153 if (qfbdev->dirty.x1 < x) in qxl_dirty_update()
154 x = qfbdev->dirty.x1; in qxl_dirty_update()
155 if (qfbdev->dirty.x2 > x2) in qxl_dirty_update()
156 x2 = qfbdev->dirty.x2; in qxl_dirty_update()
159 qfbdev->dirty.x1 = x; in qxl_dirty_update()
160 qfbdev->dirty.x2 = x2; in qxl_dirty_update()
161 qfbdev->dirty.y1 = y; in qxl_dirty_update()
162 qfbdev->dirty.y2 = y2; in qxl_dirty_update()
164 spin_unlock_irqrestore(&qfbdev->dirty.lock, flags); in qxl_dirty_update()
172 struct qxl_fbdev *qfbdev = info->par; in qxl_deferred_io() local
189 qxl_dirty_update(qfbdev, 0, y1, info->var.xres, y2 - y1); in qxl_deferred_io()
201 struct qxl_fbdev *qfbdev = info->par; in qxl_fb_fillrect() local
204 qxl_dirty_update(qfbdev, rect->dx, rect->dy, rect->width, in qxl_fb_fillrect()
211 struct qxl_fbdev *qfbdev = info->par; in qxl_fb_copyarea() local
214 qxl_dirty_update(qfbdev, area->dx, area->dy, area->width, in qxl_fb_copyarea()
221 struct qxl_fbdev *qfbdev = info->par; in qxl_fb_imageblit() local
224 qxl_dirty_update(qfbdev, image->dx, image->dy, image->width, in qxl_fb_imageblit()
231 struct qxl_fbdev *qfbdev = qdev->mode_info.qfbdev; in qxl_fb_work() local
233 qxl_fb_dirty_flush(qfbdev->helper.fbdev); in qxl_fb_work()
285 static int qxlfb_create_pinned_object(struct qxl_fbdev *qfbdev, in qxlfb_create_pinned_object() argument
289 struct qxl_device *qdev = qfbdev->qdev; in qxlfb_create_pinned_object()
342 static int qxlfb_create(struct qxl_fbdev *qfbdev, in qxlfb_create() argument
345 struct qxl_device *qdev = qfbdev->qdev; in qxlfb_create()
363 ret = qxlfb_create_pinned_object(qfbdev, &mode_cmd, &gobj); in qxlfb_create()
379 info = drm_fb_helper_alloc_fbi(&qfbdev->helper); in qxlfb_create()
385 info->par = qfbdev; in qxlfb_create()
387 qxl_framebuffer_init(qdev->ddev, &qfbdev->qfb, &mode_cmd, gobj); in qxlfb_create()
389 fb = &qfbdev->qfb.base; in qxlfb_create()
392 qfbdev->helper.fb = fb; in qxlfb_create()
394 qfbdev->shadow = shadow; in qxlfb_create()
408 info->screen_base = qfbdev->shadow; in qxlfb_create()
411 drm_fb_helper_fill_var(info, &qfbdev->helper, sizes->fb_width, in qxlfb_create()
430 qdev->fbdev_qfb = &qfbdev->qfb; in qxlfb_create()
436 drm_fb_helper_release_fbi(&qfbdev->helper); in qxlfb_create()
459 struct qxl_fbdev *qfbdev = in qxl_fb_find_or_create_single() local
465 ret = qxlfb_create(qfbdev, sizes); in qxl_fb_find_or_create_single()
473 static int qxl_fbdev_destroy(struct drm_device *dev, struct qxl_fbdev *qfbdev) in qxl_fbdev_destroy() argument
475 struct qxl_framebuffer *qfb = &qfbdev->qfb; in qxl_fbdev_destroy()
477 drm_fb_helper_unregister_fbi(&qfbdev->helper); in qxl_fbdev_destroy()
478 drm_fb_helper_release_fbi(&qfbdev->helper); in qxl_fbdev_destroy()
484 drm_fb_helper_fini(&qfbdev->helper); in qxl_fbdev_destroy()
485 vfree(qfbdev->shadow); in qxl_fbdev_destroy()
497 struct qxl_fbdev *qfbdev; in qxl_fbdev_init() local
501 qfbdev = kzalloc(sizeof(struct qxl_fbdev), GFP_KERNEL); in qxl_fbdev_init()
502 if (!qfbdev) in qxl_fbdev_init()
505 qfbdev->qdev = qdev; in qxl_fbdev_init()
506 qdev->mode_info.qfbdev = qfbdev; in qxl_fbdev_init()
507 spin_lock_init(&qfbdev->delayed_ops_lock); in qxl_fbdev_init()
508 spin_lock_init(&qfbdev->dirty.lock); in qxl_fbdev_init()
509 INIT_LIST_HEAD(&qfbdev->delayed_ops); in qxl_fbdev_init()
511 drm_fb_helper_prepare(qdev->ddev, &qfbdev->helper, in qxl_fbdev_init()
514 ret = drm_fb_helper_init(qdev->ddev, &qfbdev->helper, in qxl_fbdev_init()
520 ret = drm_fb_helper_single_add_all_connectors(&qfbdev->helper); in qxl_fbdev_init()
524 ret = drm_fb_helper_initial_config(&qfbdev->helper, bpp_sel); in qxl_fbdev_init()
531 drm_fb_helper_fini(&qfbdev->helper); in qxl_fbdev_init()
533 kfree(qfbdev); in qxl_fbdev_init()
539 if (!qdev->mode_info.qfbdev) in qxl_fbdev_fini()
542 qxl_fbdev_destroy(qdev->ddev, qdev->mode_info.qfbdev); in qxl_fbdev_fini()
543 kfree(qdev->mode_info.qfbdev); in qxl_fbdev_fini()
544 qdev->mode_info.qfbdev = NULL; in qxl_fbdev_fini()
549 drm_fb_helper_set_suspend(&qdev->mode_info.qfbdev->helper, state); in qxl_fbdev_set_suspend()
554 if (qobj == gem_to_qxl_bo(qdev->mode_info.qfbdev->qfb.obj)) in qxl_fbdev_qobj_is_fb()