Lines Matching refs:par
81 struct vmw_fb_par *par = info->par; in vmw_fb_setcolreg() local
82 u32 *pal = par->pseudo_palette; in vmw_fb_setcolreg()
89 switch (par->set_fb->format->depth) { in vmw_fb_setcolreg()
98 par->set_fb->format->depth, in vmw_fb_setcolreg()
99 par->set_fb->format->cpp[0] * 8); in vmw_fb_setcolreg()
110 struct vmw_fb_par *par = info->par; in vmw_fb_check_var() local
111 struct vmw_private *vmw_priv = par->vmw_priv; in vmw_fb_check_var()
148 if ((var->xoffset + var->xres) > par->max_width || in vmw_fb_check_var()
149 (var->yoffset + var->yres) > par->max_height) { in vmw_fb_check_var()
182 struct vmw_fb_par *par = container_of(work, struct vmw_fb_par, in vmw_fb_dirty_flush() local
184 struct vmw_private *vmw_priv = par->vmw_priv; in vmw_fb_dirty_flush()
192 struct vmw_buffer_object *vbo = par->vmw_bo; in vmw_fb_dirty_flush()
195 if (!READ_ONCE(par->dirty.active)) in vmw_fb_dirty_flush()
198 mutex_lock(&par->bo_mutex); in vmw_fb_dirty_flush()
199 cur_fb = par->set_fb; in vmw_fb_dirty_flush()
209 spin_lock_irqsave(&par->dirty.lock, irq_flags); in vmw_fb_dirty_flush()
210 if (!par->dirty.active) { in vmw_fb_dirty_flush()
211 spin_unlock_irqrestore(&par->dirty.lock, irq_flags); in vmw_fb_dirty_flush()
220 max_x = par->fb_x + cur_fb->width; in vmw_fb_dirty_flush()
221 max_y = par->fb_y + cur_fb->height; in vmw_fb_dirty_flush()
223 dst_x1 = par->dirty.x1 - par->fb_x; in vmw_fb_dirty_flush()
224 dst_y1 = par->dirty.y1 - par->fb_y; in vmw_fb_dirty_flush()
228 dst_x2 = par->dirty.x2 - par->fb_x; in vmw_fb_dirty_flush()
229 dst_y2 = par->dirty.y2 - par->fb_y; in vmw_fb_dirty_flush()
237 par->dirty.x1 = par->dirty.x2 = 0; in vmw_fb_dirty_flush()
238 par->dirty.y1 = par->dirty.y2 = 0; in vmw_fb_dirty_flush()
239 spin_unlock_irqrestore(&par->dirty.lock, irq_flags); in vmw_fb_dirty_flush()
243 (dst_y1 * par->set_fb->pitches[0] + dst_x1 * cpp); in vmw_fb_dirty_flush()
244 src_ptr = (u8 *)par->vmalloc + in vmw_fb_dirty_flush()
245 ((dst_y1 + par->fb_y) * info->fix.line_length + in vmw_fb_dirty_flush()
246 (dst_x1 + par->fb_x) * cpp); in vmw_fb_dirty_flush()
250 dst_ptr += par->set_fb->pitches[0]; in vmw_fb_dirty_flush()
264 WARN_ON_ONCE(par->set_fb->funcs->dirty(cur_fb, NULL, 0, 0, in vmw_fb_dirty_flush()
269 mutex_unlock(&par->bo_mutex); in vmw_fb_dirty_flush()
272 static void vmw_fb_dirty_mark(struct vmw_fb_par *par, in vmw_fb_dirty_mark() argument
280 spin_lock_irqsave(&par->dirty.lock, flags); in vmw_fb_dirty_mark()
281 if (par->dirty.x1 == par->dirty.x2) { in vmw_fb_dirty_mark()
282 par->dirty.x1 = x1; in vmw_fb_dirty_mark()
283 par->dirty.y1 = y1; in vmw_fb_dirty_mark()
284 par->dirty.x2 = x2; in vmw_fb_dirty_mark()
285 par->dirty.y2 = y2; in vmw_fb_dirty_mark()
288 if (par->dirty.active) in vmw_fb_dirty_mark()
289 schedule_delayed_work(&par->local_work, in vmw_fb_dirty_mark()
292 if (x1 < par->dirty.x1) in vmw_fb_dirty_mark()
293 par->dirty.x1 = x1; in vmw_fb_dirty_mark()
294 if (y1 < par->dirty.y1) in vmw_fb_dirty_mark()
295 par->dirty.y1 = y1; in vmw_fb_dirty_mark()
296 if (x2 > par->dirty.x2) in vmw_fb_dirty_mark()
297 par->dirty.x2 = x2; in vmw_fb_dirty_mark()
298 if (y2 > par->dirty.y2) in vmw_fb_dirty_mark()
299 par->dirty.y2 = y2; in vmw_fb_dirty_mark()
301 spin_unlock_irqrestore(&par->dirty.lock, flags); in vmw_fb_dirty_mark()
307 struct vmw_fb_par *par = info->par; in vmw_fb_pan_display() local
315 mutex_lock(&par->bo_mutex); in vmw_fb_pan_display()
316 par->fb_x = var->xoffset; in vmw_fb_pan_display()
317 par->fb_y = var->yoffset; in vmw_fb_pan_display()
318 if (par->set_fb) in vmw_fb_pan_display()
319 vmw_fb_dirty_mark(par, par->fb_x, par->fb_y, par->set_fb->width, in vmw_fb_pan_display()
320 par->set_fb->height); in vmw_fb_pan_display()
321 mutex_unlock(&par->bo_mutex); in vmw_fb_pan_display()
329 struct vmw_fb_par *par = info->par; in vmw_deferred_io() local
348 spin_lock_irqsave(&par->dirty.lock, flags); in vmw_deferred_io()
349 par->dirty.x1 = 0; in vmw_deferred_io()
350 par->dirty.y1 = y1; in vmw_deferred_io()
351 par->dirty.x2 = info->var.xres; in vmw_deferred_io()
352 par->dirty.y2 = y2; in vmw_deferred_io()
353 spin_unlock_irqrestore(&par->dirty.lock, flags); in vmw_deferred_io()
359 cancel_delayed_work(&par->local_work); in vmw_deferred_io()
360 schedule_delayed_work(&par->local_work, 0); in vmw_deferred_io()
376 vmw_fb_dirty_mark(info->par, rect->dx, rect->dy, in vmw_fb_fillrect()
383 vmw_fb_dirty_mark(info->par, region->dx, region->dy, in vmw_fb_copyarea()
390 vmw_fb_dirty_mark(info->par, image->dx, image->dy, in vmw_fb_imageblit()
466 static int vmw_fb_kms_detach(struct vmw_fb_par *par, in vmw_fb_kms_detach() argument
470 struct drm_framebuffer *cur_fb = par->set_fb; in vmw_fb_kms_detach()
474 if (par->set_mode) { in vmw_fb_kms_detach()
477 set.crtc = par->crtc; in vmw_fb_kms_detach()
483 set.connectors = &par->con; in vmw_fb_kms_detach()
489 drm_mode_destroy(par->vmw_priv->dev, par->set_mode); in vmw_fb_kms_detach()
490 par->set_mode = NULL; in vmw_fb_kms_detach()
495 par->set_fb = NULL; in vmw_fb_kms_detach()
498 if (par->vmw_bo && detach_bo && unref_bo) in vmw_fb_kms_detach()
499 vmw_bo_unreference(&par->vmw_bo); in vmw_fb_kms_detach()
507 struct vmw_fb_par *par = info->par; in vmw_fb_kms_framebuffer() local
524 cur_fb = par->set_fb; in vmw_fb_kms_framebuffer()
533 ret = vmw_fb_kms_detach(par, in vmw_fb_kms_framebuffer()
534 par->bo_size < new_bo_size || in vmw_fb_kms_framebuffer()
535 par->bo_size > 2*new_bo_size, in vmw_fb_kms_framebuffer()
540 if (!par->vmw_bo) { in vmw_fb_kms_framebuffer()
541 ret = vmw_fb_create_bo(par->vmw_priv, new_bo_size, in vmw_fb_kms_framebuffer()
542 &par->vmw_bo); in vmw_fb_kms_framebuffer()
548 par->bo_size = new_bo_size; in vmw_fb_kms_framebuffer()
551 vfb = vmw_kms_new_framebuffer(par->vmw_priv, par->vmw_bo, NULL, in vmw_fb_kms_framebuffer()
556 par->set_fb = &vfb->base; in vmw_fb_kms_framebuffer()
563 struct vmw_fb_par *par = info->par; in vmw_fb_set_par() local
564 struct vmw_private *vmw_priv = par->vmw_priv; in vmw_fb_set_par()
593 mutex_lock(&par->bo_mutex); in vmw_fb_set_par()
598 par->fb_x = var->xoffset; in vmw_fb_set_par()
599 par->fb_y = var->yoffset; in vmw_fb_set_par()
601 set.crtc = par->crtc; in vmw_fb_set_par()
605 set.fb = par->set_fb; in vmw_fb_set_par()
607 set.connectors = &par->con; in vmw_fb_set_par()
613 vmw_fb_dirty_mark(par, par->fb_x, par->fb_y, in vmw_fb_set_par()
614 par->set_fb->width, par->set_fb->height); in vmw_fb_set_par()
619 schedule_delayed_work(&par->local_work, 0); in vmw_fb_set_par()
622 if (par->set_mode) in vmw_fb_set_par()
623 drm_mode_destroy(vmw_priv->dev, par->set_mode); in vmw_fb_set_par()
624 par->set_mode = mode; in vmw_fb_set_par()
626 mutex_unlock(&par->bo_mutex); in vmw_fb_set_par()
647 struct vmw_fb_par *par; in vmw_fb_init() local
663 info = framebuffer_alloc(sizeof(*par), device); in vmw_fb_init()
671 par = info->par; in vmw_fb_init()
672 memset(par, 0, sizeof(*par)); in vmw_fb_init()
673 INIT_DELAYED_WORK(&par->local_work, &vmw_fb_dirty_flush); in vmw_fb_init()
674 par->vmw_priv = vmw_priv; in vmw_fb_init()
675 par->vmalloc = NULL; in vmw_fb_init()
676 par->max_width = fb_width; in vmw_fb_init()
677 par->max_height = fb_height; in vmw_fb_init()
679 ret = vmw_kms_fbdev_init_data(vmw_priv, 0, par->max_width, in vmw_fb_init()
680 par->max_height, &par->con, in vmw_fb_init()
681 &par->crtc, &init_mode); in vmw_fb_init()
691 par->vmalloc = vzalloc(fb_size); in vmw_fb_init()
692 if (unlikely(par->vmalloc == NULL)) { in vmw_fb_init()
713 info->pseudo_palette = par->pseudo_palette; in vmw_fb_init()
714 info->screen_base = (char __iomem *)par->vmalloc; in vmw_fb_init()
750 par->dirty.x1 = par->dirty.x2 = 0; in vmw_fb_init()
751 par->dirty.y1 = par->dirty.y2 = 0; in vmw_fb_init()
752 par->dirty.active = true; in vmw_fb_init()
753 spin_lock_init(&par->dirty.lock); in vmw_fb_init()
754 mutex_init(&par->bo_mutex); in vmw_fb_init()
770 vfree(par->vmalloc); in vmw_fb_init()
781 struct vmw_fb_par *par; in vmw_fb_close() local
787 par = info->par; in vmw_fb_close()
791 cancel_delayed_work_sync(&par->local_work); in vmw_fb_close()
794 mutex_lock(&par->bo_mutex); in vmw_fb_close()
795 (void) vmw_fb_kms_detach(par, true, true); in vmw_fb_close()
796 mutex_unlock(&par->bo_mutex); in vmw_fb_close()
798 vfree(par->vmalloc); in vmw_fb_close()
807 struct vmw_fb_par *par; in vmw_fb_off() local
814 par = info->par; in vmw_fb_off()
816 spin_lock_irqsave(&par->dirty.lock, flags); in vmw_fb_off()
817 par->dirty.active = false; in vmw_fb_off()
818 spin_unlock_irqrestore(&par->dirty.lock, flags); in vmw_fb_off()
821 flush_delayed_work(&par->local_work); in vmw_fb_off()
829 struct vmw_fb_par *par; in vmw_fb_on() local
836 par = info->par; in vmw_fb_on()
838 spin_lock_irqsave(&par->dirty.lock, flags); in vmw_fb_on()
839 par->dirty.active = true; in vmw_fb_on()
840 spin_unlock_irqrestore(&par->dirty.lock, flags); in vmw_fb_on()
847 schedule_delayed_work(&par->local_work, 0); in vmw_fb_on()