Lines Matching refs:gdrm

152 static int gud_prep_flush(struct gud_device *gdrm, struct drm_framebuffer *fb,  in gud_prep_flush()  argument
157 u8 compression = gdrm->compression; in gud_prep_flush()
164 if (len > gdrm->bulk_len) in gud_prep_flush()
170 buf = gdrm->compress_buf; in gud_prep_flush()
172 buf = gdrm->bulk_buf; in gud_prep_flush()
215 complen = LZ4_compress_default(buf, gdrm->bulk_buf, len, len, gdrm->lz4_comp_mem); in gud_prep_flush()
240 static int gud_usb_bulk(struct gud_device *gdrm, size_t len) in gud_usb_bulk() argument
245 ret = usb_sg_init(&ctx.sgr, gud_to_usb_device(gdrm), gdrm->bulk_pipe, 0, in gud_usb_bulk()
246 gdrm->bulk_sgt.sgl, gdrm->bulk_sgt.nents, len, GFP_KERNEL); in gud_usb_bulk()
267 static int gud_flush_rect(struct gud_device *gdrm, struct drm_framebuffer *fb, in gud_flush_rect() argument
275 drm_dbg(&gdrm->drm, "Flushing [FB:%d] " DRM_RECT_FMT "\n", fb->base.id, DRM_RECT_ARG(rect)); in gud_flush_rect()
277 ret = gud_prep_flush(gdrm, fb, src, cached_reads, format, rect, &req); in gud_flush_rect()
288 gdrm->stats_length += len; in gud_flush_rect()
290 if (gdrm->stats_length <= len && gdrm->stats_actual_length) { in gud_flush_rect()
291 gdrm->stats_length = len; in gud_flush_rect()
292 gdrm->stats_actual_length = 0; in gud_flush_rect()
294 gdrm->stats_actual_length += trlen; in gud_flush_rect()
296 if (!(gdrm->flags & GUD_DISPLAY_FLAG_FULL_UPDATE) || gdrm->prev_flush_failed) { in gud_flush_rect()
297 ret = gud_usb_set(gdrm, GUD_REQ_SET_BUFFER, 0, &req, sizeof(req)); in gud_flush_rect()
302 ret = gud_usb_bulk(gdrm, trlen); in gud_flush_rect()
304 gdrm->stats_num_errors++; in gud_flush_rect()
309 void gud_clear_damage(struct gud_device *gdrm) in gud_clear_damage() argument
311 gdrm->damage.x1 = INT_MAX; in gud_clear_damage()
312 gdrm->damage.y1 = INT_MAX; in gud_clear_damage()
313 gdrm->damage.x2 = 0; in gud_clear_damage()
314 gdrm->damage.y2 = 0; in gud_clear_damage()
317 static void gud_flush_damage(struct gud_device *gdrm, struct drm_framebuffer *fb, in gud_flush_damage() argument
327 if (format->format == DRM_FORMAT_XRGB8888 && gdrm->xrgb8888_emulation_format) in gud_flush_damage()
328 format = gdrm->xrgb8888_emulation_format; in gud_flush_damage()
334 if (gdrm->bulk_len < lines * pitch) in gud_flush_damage()
335 lines = gdrm->bulk_len / pitch; in gud_flush_damage()
343 ret = gud_flush_rect(gdrm, fb, src, cached_reads, format, &rect); in gud_flush_damage()
349 gdrm->prev_flush_failed = true; in gud_flush_damage()
357 struct gud_device *gdrm = container_of(work, struct gud_device, work); in gud_flush_work() local
363 if (!drm_dev_enter(&gdrm->drm, &idx)) in gud_flush_work()
366 mutex_lock(&gdrm->damage_lock); in gud_flush_work()
367 fb = gdrm->fb; in gud_flush_work()
368 gdrm->fb = NULL; in gud_flush_work()
369 iosys_map_set_vaddr(&shadow_map, gdrm->shadow_buf); in gud_flush_work()
370 damage = gdrm->damage; in gud_flush_work()
371 gud_clear_damage(gdrm); in gud_flush_work()
372 mutex_unlock(&gdrm->damage_lock); in gud_flush_work()
377 gud_flush_damage(gdrm, fb, &shadow_map, true, &damage); in gud_flush_work()
384 static int gud_fb_queue_damage(struct gud_device *gdrm, struct drm_framebuffer *fb, in gud_fb_queue_damage() argument
390 mutex_lock(&gdrm->damage_lock); in gud_fb_queue_damage()
392 if (!gdrm->shadow_buf) { in gud_fb_queue_damage()
393 gdrm->shadow_buf = vzalloc(fb->pitches[0] * fb->height); in gud_fb_queue_damage()
394 if (!gdrm->shadow_buf) { in gud_fb_queue_damage()
395 mutex_unlock(&gdrm->damage_lock); in gud_fb_queue_damage()
400 iosys_map_set_vaddr(&shadow_map, gdrm->shadow_buf); in gud_fb_queue_damage()
404 if (fb != gdrm->fb) { in gud_fb_queue_damage()
405 old_fb = gdrm->fb; in gud_fb_queue_damage()
407 gdrm->fb = fb; in gud_fb_queue_damage()
410 gdrm->damage.x1 = min(gdrm->damage.x1, damage->x1); in gud_fb_queue_damage()
411 gdrm->damage.y1 = min(gdrm->damage.y1, damage->y1); in gud_fb_queue_damage()
412 gdrm->damage.x2 = max(gdrm->damage.x2, damage->x2); in gud_fb_queue_damage()
413 gdrm->damage.y2 = max(gdrm->damage.y2, damage->y2); in gud_fb_queue_damage()
415 mutex_unlock(&gdrm->damage_lock); in gud_fb_queue_damage()
417 queue_work(system_long_wq, &gdrm->work); in gud_fb_queue_damage()
425 static void gud_fb_handle_damage(struct gud_device *gdrm, struct drm_framebuffer *fb, in gud_fb_handle_damage() argument
430 if (gdrm->flags & GUD_DISPLAY_FLAG_FULL_UPDATE) in gud_fb_handle_damage()
434 ret = gud_fb_queue_damage(gdrm, fb, src, damage); in gud_fb_handle_damage()
440 gud_flush_damage(gdrm, fb, src, !fb->obj[0]->import_attach, damage); in gud_fb_handle_damage()
447 struct gud_device *gdrm = to_gud_device(pipe->crtc.dev); in gud_pipe_check() local
477 if (format->format == DRM_FORMAT_XRGB8888 && gdrm->xrgb8888_emulation_format) in gud_pipe_check()
478 format = gdrm->xrgb8888_emulation_format; in gud_pipe_check()
526 for (i = 0; i < gdrm->num_properties; i++) { in gud_pipe_check()
527 u16 prop = gdrm->properties[i]; in gud_pipe_check()
548 ret = gud_usb_set(gdrm, GUD_REQ_SET_STATE_CHECK, 0, req, len); in gud_pipe_check()
563 struct gud_device *gdrm = to_gud_device(drm); in gud_pipe_update() local
572 cancel_work_sync(&gdrm->work); in gud_pipe_update()
573 mutex_lock(&gdrm->damage_lock); in gud_pipe_update()
574 if (gdrm->fb) { in gud_pipe_update()
575 drm_framebuffer_put(gdrm->fb); in gud_pipe_update()
576 gdrm->fb = NULL; in gud_pipe_update()
578 gud_clear_damage(gdrm); in gud_pipe_update()
579 vfree(gdrm->shadow_buf); in gud_pipe_update()
580 gdrm->shadow_buf = NULL; in gud_pipe_update()
581 mutex_unlock(&gdrm->damage_lock); in gud_pipe_update()
588 gud_usb_set_u8(gdrm, GUD_REQ_SET_CONTROLLER_ENABLE, 1); in gud_pipe_update()
591 gud_usb_set(gdrm, GUD_REQ_SET_STATE_COMMIT, 0, NULL, 0); in gud_pipe_update()
594 gud_usb_set_u8(gdrm, GUD_REQ_SET_DISPLAY_ENABLE, crtc->state->active); in gud_pipe_update()
604 gud_fb_handle_damage(gdrm, fb, &shadow_plane_state->data[0], &damage); in gud_pipe_update()
610 gud_usb_set_u8(gdrm, GUD_REQ_SET_CONTROLLER_ENABLE, 0); in gud_pipe_update()