Lines Matching refs:gdrm

153 static int gud_usb_transfer(struct gud_device *gdrm, bool in, u8 request, u16 index,  in gud_usb_transfer()  argument
156 struct usb_interface *intf = to_usb_interface(gdrm->drm.dev); in gud_usb_transfer()
159 drm_dbg(&gdrm->drm, "%s: request=0x%x index=%u len=%zu\n", in gud_usb_transfer()
162 if (!drm_dev_enter(&gdrm->drm, &idx)) in gud_usb_transfer()
165 mutex_lock(&gdrm->ctrl_lock); in gud_usb_transfer()
168 if (ret == -EPIPE || ((gdrm->flags & GUD_DISPLAY_FLAG_STATUS_ON_SET) && !in && ret >= 0)) { in gud_usb_transfer()
175 dev_err_once(gdrm->drm.dev, in gud_usb_transfer()
182 drm_dbg(&gdrm->drm, "ret=%d\n", ret); in gud_usb_transfer()
183 gdrm->stats_num_errors++; in gud_usb_transfer()
186 mutex_unlock(&gdrm->ctrl_lock); in gud_usb_transfer()
196 int gud_usb_get(struct gud_device *gdrm, u8 request, u16 index, void *buf, size_t max_len) in gud_usb_get() argument
198 return gud_usb_transfer(gdrm, true, request, index, buf, max_len); in gud_usb_get()
205 int gud_usb_set(struct gud_device *gdrm, u8 request, u16 index, void *buf, size_t len) in gud_usb_set() argument
216 ret = gud_usb_transfer(gdrm, false, request, index, trbuf, len); in gud_usb_set()
228 int gud_usb_get_u8(struct gud_device *gdrm, u8 request, u16 index, u8 *val) in gud_usb_get_u8() argument
237 ret = gud_usb_get(gdrm, request, index, buf, sizeof(*val)); in gud_usb_get_u8()
247 int gud_usb_set_u8(struct gud_device *gdrm, u8 request, u8 val) in gud_usb_set_u8() argument
249 return gud_usb_set(gdrm, request, 0, &val, sizeof(val)); in gud_usb_set_u8()
252 static int gud_get_properties(struct gud_device *gdrm) in gud_get_properties() argument
262 ret = gud_usb_get(gdrm, GUD_REQ_GET_PROPERTIES, 0, in gud_get_properties()
274 gdrm->properties = drmm_kcalloc(&gdrm->drm, num_properties, sizeof(*gdrm->properties), in gud_get_properties()
276 if (!gdrm->properties) { in gud_get_properties()
292 ret = drm_plane_create_rotation_property(&gdrm->pipe.plane, in gud_get_properties()
297 drm_dbg(&gdrm->drm, "Ignoring unknown property: %u\n", prop); in gud_get_properties()
304 gdrm->properties[gdrm->num_properties++] = prop; in gud_get_properties()
319 struct gud_device *gdrm = to_gud_device(drm); in gud_gem_prime_import() local
321 if (!gdrm->dmadev) in gud_gem_prime_import()
324 return drm_gem_prime_import_dev(drm, dma_buf, gdrm->dmadev); in gud_gem_prime_import()
330 struct gud_device *gdrm = to_gud_device(entry->dev); in gud_stats_debugfs() local
333 string_get_size(gdrm->bulk_len, 1, STRING_UNITS_2, buf, sizeof(buf)); in gud_stats_debugfs()
335 seq_printf(m, "Number of errors: %u\n", gdrm->stats_num_errors); in gud_stats_debugfs()
338 if (gdrm->compression & GUD_COMPRESSION_LZ4) in gud_stats_debugfs()
340 if (!gdrm->compression) in gud_stats_debugfs()
344 if (gdrm->compression) { in gud_stats_debugfs()
346 u64 ratio = div64_u64_rem(gdrm->stats_length, gdrm->stats_actual_length, in gud_stats_debugfs()
348 u64 ratio_frac = div64_u64(remainder * 10, gdrm->stats_actual_length); in gud_stats_debugfs()
388 static int gud_alloc_bulk_buffer(struct gud_device *gdrm) in gud_alloc_bulk_buffer() argument
395 gdrm->bulk_buf = vmalloc_32(gdrm->bulk_len); in gud_alloc_bulk_buffer()
396 if (!gdrm->bulk_buf) in gud_alloc_bulk_buffer()
399 num_pages = DIV_ROUND_UP(gdrm->bulk_len, PAGE_SIZE); in gud_alloc_bulk_buffer()
404 for (i = 0, ptr = gdrm->bulk_buf; i < num_pages; i++, ptr += PAGE_SIZE) in gud_alloc_bulk_buffer()
407 ret = sg_alloc_table_from_pages(&gdrm->bulk_sgt, pages, num_pages, in gud_alloc_bulk_buffer()
408 0, gdrm->bulk_len, GFP_KERNEL); in gud_alloc_bulk_buffer()
416 struct gud_device *gdrm = data; in gud_free_buffers_and_mutex() local
418 vfree(gdrm->compress_buf); in gud_free_buffers_and_mutex()
419 gdrm->compress_buf = NULL; in gud_free_buffers_and_mutex()
420 sg_free_table(&gdrm->bulk_sgt); in gud_free_buffers_and_mutex()
421 vfree(gdrm->bulk_buf); in gud_free_buffers_and_mutex()
422 gdrm->bulk_buf = NULL; in gud_free_buffers_and_mutex()
423 mutex_destroy(&gdrm->ctrl_lock); in gud_free_buffers_and_mutex()
435 struct gud_device *gdrm; in gud_probe() local
456 gdrm = devm_drm_dev_alloc(dev, &gud_drm_driver, struct gud_device, drm); in gud_probe()
457 if (IS_ERR(gdrm)) in gud_probe()
458 return PTR_ERR(gdrm); in gud_probe()
460 drm = &gdrm->drm; in gud_probe()
466 gdrm->flags = le32_to_cpu(desc.flags); in gud_probe()
467 gdrm->compression = desc.compression & GUD_COMPRESSION_LZ4; in gud_probe()
469 if (gdrm->flags & GUD_DISPLAY_FLAG_FULL_UPDATE && gdrm->compression) in gud_probe()
472 mutex_init(&gdrm->ctrl_lock); in gud_probe()
473 mutex_init(&gdrm->damage_lock); in gud_probe()
474 INIT_WORK(&gdrm->work, gud_flush_work); in gud_probe()
475 gud_clear_damage(gdrm); in gud_probe()
477 ret = devm_add_action(dev, gud_free_buffers_and_mutex, gdrm); in gud_probe()
492 ret = gud_usb_get(gdrm, GUD_REQ_GET_FORMATS, 0, formats_dev, GUD_FORMATS_MAX_NUM); in gud_probe()
558 gdrm->xrgb8888_emulation_format = xrgb8888_emulation_format; in gud_probe()
568 gdrm->bulk_pipe = usb_sndbulkpipe(interface_to_usbdev(intf), usb_endpoint_num(bulk_out)); in gud_probe()
569 gdrm->bulk_len = max_buffer_size; in gud_probe()
571 ret = gud_alloc_bulk_buffer(gdrm); in gud_probe()
575 if (gdrm->compression & GUD_COMPRESSION_LZ4) { in gud_probe()
576 gdrm->lz4_comp_mem = devm_kmalloc(dev, LZ4_MEM_COMPRESS, GFP_KERNEL); in gud_probe()
577 if (!gdrm->lz4_comp_mem) in gud_probe()
580 gdrm->compress_buf = vmalloc(gdrm->bulk_len); in gud_probe()
581 if (!gdrm->compress_buf) in gud_probe()
585 ret = drm_simple_display_pipe_init(drm, &gdrm->pipe, &gud_pipe_funcs, in gud_probe()
594 ret = gud_get_properties(gdrm); in gud_probe()
600 drm_plane_enable_fb_damage_clips(&gdrm->pipe.plane); in gud_probe()
602 ret = gud_get_connectors(gdrm); in gud_probe()
610 usb_set_intfdata(intf, gdrm); in gud_probe()
612 gdrm->dmadev = usb_intf_get_dma_device(intf); in gud_probe()
613 if (!gdrm->dmadev) in gud_probe()
620 put_device(gdrm->dmadev); in gud_probe()
633 struct gud_device *gdrm = usb_get_intfdata(interface); in gud_disconnect() local
634 struct drm_device *drm = &gdrm->drm; in gud_disconnect()
641 put_device(gdrm->dmadev); in gud_disconnect()
642 gdrm->dmadev = NULL; in gud_disconnect()
647 struct gud_device *gdrm = usb_get_intfdata(intf); in gud_suspend() local
649 return drm_mode_config_helper_suspend(&gdrm->drm); in gud_suspend()
654 struct gud_device *gdrm = usb_get_intfdata(intf); in gud_resume() local
656 drm_mode_config_helper_resume(&gdrm->drm); in gud_resume()