Lines Matching refs:par
78 struct vmw_fb_par *par = info->par; in vmw_fb_setcolreg() local
79 u32 *pal = par->pseudo_palette; in vmw_fb_setcolreg()
86 switch (par->set_fb->depth) { in vmw_fb_setcolreg()
94 DRM_ERROR("Bad depth %u, bpp %u.\n", par->set_fb->depth, in vmw_fb_setcolreg()
95 par->set_fb->bits_per_pixel); in vmw_fb_setcolreg()
106 struct vmw_fb_par *par = info->par; in vmw_fb_check_var() local
107 struct vmw_private *vmw_priv = par->vmw_priv; in vmw_fb_check_var()
144 if ((var->xoffset + var->xres) > par->max_width || in vmw_fb_check_var()
145 (var->yoffset + var->yres) > par->max_height) { in vmw_fb_check_var()
171 struct vmw_fb_par *par = container_of(work, struct vmw_fb_par, in vmw_fb_dirty_flush() local
173 struct vmw_private *vmw_priv = par->vmw_priv; in vmw_fb_dirty_flush()
185 mutex_lock(&par->bo_mutex); in vmw_fb_dirty_flush()
186 cur_fb = par->set_fb; in vmw_fb_dirty_flush()
190 spin_lock_irqsave(&par->dirty.lock, irq_flags); in vmw_fb_dirty_flush()
191 if (!par->dirty.active) { in vmw_fb_dirty_flush()
192 spin_unlock_irqrestore(&par->dirty.lock, irq_flags); in vmw_fb_dirty_flush()
201 max_x = par->fb_x + cur_fb->width; in vmw_fb_dirty_flush()
202 max_y = par->fb_y + cur_fb->height; in vmw_fb_dirty_flush()
204 dst_x1 = par->dirty.x1 - par->fb_x; in vmw_fb_dirty_flush()
205 dst_y1 = par->dirty.y1 - par->fb_y; in vmw_fb_dirty_flush()
209 dst_x2 = par->dirty.x2 - par->fb_x; in vmw_fb_dirty_flush()
210 dst_y2 = par->dirty.y2 - par->fb_y; in vmw_fb_dirty_flush()
218 par->dirty.x1 = par->dirty.x2 = 0; in vmw_fb_dirty_flush()
219 par->dirty.y1 = par->dirty.y2 = 0; in vmw_fb_dirty_flush()
220 spin_unlock_irqrestore(&par->dirty.lock, irq_flags); in vmw_fb_dirty_flush()
223 dst_ptr = (u8 *)par->bo_ptr + in vmw_fb_dirty_flush()
224 (dst_y1 * par->set_fb->pitches[0] + dst_x1 * cpp); in vmw_fb_dirty_flush()
225 src_ptr = (u8 *)par->vmalloc + in vmw_fb_dirty_flush()
226 ((dst_y1 + par->fb_y) * info->fix.line_length + in vmw_fb_dirty_flush()
227 (dst_x1 + par->fb_x) * cpp); in vmw_fb_dirty_flush()
231 dst_ptr += par->set_fb->pitches[0]; in vmw_fb_dirty_flush()
240 WARN_ON_ONCE(par->set_fb->funcs->dirty(cur_fb, NULL, 0, 0, in vmw_fb_dirty_flush()
245 mutex_unlock(&par->bo_mutex); in vmw_fb_dirty_flush()
248 static void vmw_fb_dirty_mark(struct vmw_fb_par *par, in vmw_fb_dirty_mark() argument
256 spin_lock_irqsave(&par->dirty.lock, flags); in vmw_fb_dirty_mark()
257 if (par->dirty.x1 == par->dirty.x2) { in vmw_fb_dirty_mark()
258 par->dirty.x1 = x1; in vmw_fb_dirty_mark()
259 par->dirty.y1 = y1; in vmw_fb_dirty_mark()
260 par->dirty.x2 = x2; in vmw_fb_dirty_mark()
261 par->dirty.y2 = y2; in vmw_fb_dirty_mark()
264 if (par->dirty.active) in vmw_fb_dirty_mark()
265 schedule_delayed_work(&par->local_work, in vmw_fb_dirty_mark()
268 if (x1 < par->dirty.x1) in vmw_fb_dirty_mark()
269 par->dirty.x1 = x1; in vmw_fb_dirty_mark()
270 if (y1 < par->dirty.y1) in vmw_fb_dirty_mark()
271 par->dirty.y1 = y1; in vmw_fb_dirty_mark()
272 if (x2 > par->dirty.x2) in vmw_fb_dirty_mark()
273 par->dirty.x2 = x2; in vmw_fb_dirty_mark()
274 if (y2 > par->dirty.y2) in vmw_fb_dirty_mark()
275 par->dirty.y2 = y2; in vmw_fb_dirty_mark()
277 spin_unlock_irqrestore(&par->dirty.lock, flags); in vmw_fb_dirty_mark()
283 struct vmw_fb_par *par = info->par; in vmw_fb_pan_display() local
291 mutex_lock(&par->bo_mutex); in vmw_fb_pan_display()
292 par->fb_x = var->xoffset; in vmw_fb_pan_display()
293 par->fb_y = var->yoffset; in vmw_fb_pan_display()
294 if (par->set_fb) in vmw_fb_pan_display()
295 vmw_fb_dirty_mark(par, par->fb_x, par->fb_y, par->set_fb->width, in vmw_fb_pan_display()
296 par->set_fb->height); in vmw_fb_pan_display()
297 mutex_unlock(&par->bo_mutex); in vmw_fb_pan_display()
305 struct vmw_fb_par *par = info->par; in vmw_deferred_io() local
324 spin_lock_irqsave(&par->dirty.lock, flags); in vmw_deferred_io()
325 par->dirty.x1 = 0; in vmw_deferred_io()
326 par->dirty.y1 = y1; in vmw_deferred_io()
327 par->dirty.x2 = info->var.xres; in vmw_deferred_io()
328 par->dirty.y2 = y2; in vmw_deferred_io()
329 spin_unlock_irqrestore(&par->dirty.lock, flags); in vmw_deferred_io()
335 cancel_delayed_work(&par->local_work); in vmw_deferred_io()
336 schedule_delayed_work(&par->local_work, 0); in vmw_deferred_io()
352 vmw_fb_dirty_mark(info->par, rect->dx, rect->dy, in vmw_fb_fillrect()
359 vmw_fb_dirty_mark(info->par, region->dx, region->dy, in vmw_fb_copyarea()
366 vmw_fb_dirty_mark(info->par, image->dx, image->dy, in vmw_fb_imageblit()
420 static int vmw_fb_kms_detach(struct vmw_fb_par *par, in vmw_fb_kms_detach() argument
424 struct drm_framebuffer *cur_fb = par->set_fb; in vmw_fb_kms_detach()
428 if (par->set_mode) { in vmw_fb_kms_detach()
431 set.crtc = par->crtc; in vmw_fb_kms_detach()
437 set.connectors = &par->con; in vmw_fb_kms_detach()
443 drm_mode_destroy(par->vmw_priv->dev, par->set_mode); in vmw_fb_kms_detach()
444 par->set_mode = NULL; in vmw_fb_kms_detach()
449 par->set_fb = NULL; in vmw_fb_kms_detach()
452 if (par->vmw_bo && detach_bo) { in vmw_fb_kms_detach()
453 if (par->bo_ptr) { in vmw_fb_kms_detach()
454 ttm_bo_kunmap(&par->map); in vmw_fb_kms_detach()
455 par->bo_ptr = NULL; in vmw_fb_kms_detach()
458 vmw_dmabuf_unreference(&par->vmw_bo); in vmw_fb_kms_detach()
460 vmw_dmabuf_unpin(par->vmw_priv, par->vmw_bo, false); in vmw_fb_kms_detach()
469 struct vmw_fb_par *par = info->par; in vmw_fb_kms_framebuffer() local
485 cur_fb = par->set_fb; in vmw_fb_kms_framebuffer()
495 ret = vmw_fb_kms_detach(par, in vmw_fb_kms_framebuffer()
496 par->bo_size < new_bo_size || in vmw_fb_kms_framebuffer()
497 par->bo_size > 2*new_bo_size, in vmw_fb_kms_framebuffer()
502 if (!par->vmw_bo) { in vmw_fb_kms_framebuffer()
503 ret = vmw_fb_create_bo(par->vmw_priv, new_bo_size, in vmw_fb_kms_framebuffer()
504 &par->vmw_bo); in vmw_fb_kms_framebuffer()
510 par->bo_size = new_bo_size; in vmw_fb_kms_framebuffer()
513 vfb = vmw_kms_new_framebuffer(par->vmw_priv, par->vmw_bo, NULL, in vmw_fb_kms_framebuffer()
518 par->set_fb = &vfb->base; in vmw_fb_kms_framebuffer()
520 if (!par->bo_ptr) { in vmw_fb_kms_framebuffer()
531 ret = ttm_bo_kmap(&par->vmw_bo->base, 0, in vmw_fb_kms_framebuffer()
532 par->vmw_bo->base.num_pages, &par->map); in vmw_fb_kms_framebuffer()
539 par->bo_ptr = ttm_kmap_obj_virtual(&par->map, &par->bo_iowrite); in vmw_fb_kms_framebuffer()
547 struct vmw_fb_par *par = info->par; in vmw_fb_set_par() local
548 struct vmw_private *vmw_priv = par->vmw_priv; in vmw_fb_set_par()
560 old_mode = par->set_mode; in vmw_fb_set_par()
583 mutex_lock(&par->bo_mutex); in vmw_fb_set_par()
589 par->fb_x = var->xoffset; in vmw_fb_set_par()
590 par->fb_y = var->yoffset; in vmw_fb_set_par()
592 set.crtc = par->crtc; in vmw_fb_set_par()
596 set.fb = par->set_fb; in vmw_fb_set_par()
598 set.connectors = &par->con; in vmw_fb_set_par()
604 vmw_fb_dirty_mark(par, par->fb_x, par->fb_y, in vmw_fb_set_par()
605 par->set_fb->width, par->set_fb->height); in vmw_fb_set_par()
610 schedule_delayed_work(&par->local_work, 0); in vmw_fb_set_par()
615 par->set_mode = mode; in vmw_fb_set_par()
618 mutex_unlock(&par->bo_mutex); in vmw_fb_set_par()
639 struct vmw_fb_par *par; in vmw_fb_init() local
657 info = framebuffer_alloc(sizeof(*par), device); in vmw_fb_init()
665 par = info->par; in vmw_fb_init()
666 memset(par, 0, sizeof(*par)); in vmw_fb_init()
667 INIT_DELAYED_WORK(&par->local_work, &vmw_fb_dirty_flush); in vmw_fb_init()
668 par->vmw_priv = vmw_priv; in vmw_fb_init()
669 par->vmalloc = NULL; in vmw_fb_init()
670 par->max_width = fb_width; in vmw_fb_init()
671 par->max_height = fb_height; in vmw_fb_init()
674 ret = vmw_kms_fbdev_init_data(vmw_priv, 0, par->max_width, in vmw_fb_init()
675 par->max_height, &par->con, in vmw_fb_init()
676 &par->crtc, &init_mode); in vmw_fb_init()
689 par->vmalloc = vzalloc(fb_size); in vmw_fb_init()
690 if (unlikely(par->vmalloc == NULL)) { in vmw_fb_init()
711 info->pseudo_palette = par->pseudo_palette; in vmw_fb_init()
712 info->screen_base = (char __iomem *)par->vmalloc; in vmw_fb_init()
749 par->dirty.x1 = par->dirty.x2 = 0; in vmw_fb_init()
750 par->dirty.y1 = par->dirty.y2 = 0; in vmw_fb_init()
751 par->dirty.active = true; in vmw_fb_init()
752 spin_lock_init(&par->dirty.lock); in vmw_fb_init()
753 mutex_init(&par->bo_mutex); in vmw_fb_init()
769 vfree(par->vmalloc); in vmw_fb_init()
780 struct vmw_fb_par *par; in vmw_fb_close() local
786 par = info->par; in vmw_fb_close()
790 cancel_delayed_work_sync(&par->local_work); in vmw_fb_close()
793 (void) vmw_fb_kms_detach(par, true, true); in vmw_fb_close()
795 vfree(par->vmalloc); in vmw_fb_close()
804 struct vmw_fb_par *par; in vmw_fb_off() local
811 par = info->par; in vmw_fb_off()
813 spin_lock_irqsave(&par->dirty.lock, flags); in vmw_fb_off()
814 par->dirty.active = false; in vmw_fb_off()
815 spin_unlock_irqrestore(&par->dirty.lock, flags); in vmw_fb_off()
818 flush_delayed_work(&par->local_work); in vmw_fb_off()
820 mutex_lock(&par->bo_mutex); in vmw_fb_off()
821 (void) vmw_fb_kms_detach(par, true, false); in vmw_fb_off()
822 mutex_unlock(&par->bo_mutex); in vmw_fb_off()
830 struct vmw_fb_par *par; in vmw_fb_on() local
837 par = info->par; in vmw_fb_on()
840 spin_lock_irqsave(&par->dirty.lock, flags); in vmw_fb_on()
841 par->dirty.active = true; in vmw_fb_on()
842 spin_unlock_irqrestore(&par->dirty.lock, flags); in vmw_fb_on()