Lines Matching defs:gdrm

153 static int gud_usb_transfer(struct gud_device *gdrm, bool in, u8 request, u16 index,
156 struct usb_interface *intf = to_usb_interface(gdrm->drm.dev);
159 drm_dbg(&gdrm->drm, "%s: request=0x%x index=%u len=%zu\n",
162 if (!drm_dev_enter(&gdrm->drm, &idx))
165 mutex_lock(&gdrm->ctrl_lock);
168 if (ret == -EPIPE || ((gdrm->flags & GUD_DISPLAY_FLAG_STATUS_ON_SET) && !in && ret >= 0)) {
175 dev_err_once(gdrm->drm.dev,
182 drm_dbg(&gdrm->drm, "ret=%d\n", ret);
183 gdrm->stats_num_errors++;
186 mutex_unlock(&gdrm->ctrl_lock);
196 int gud_usb_get(struct gud_device *gdrm, u8 request, u16 index, void *buf, size_t max_len)
198 return gud_usb_transfer(gdrm, true, request, index, buf, max_len);
205 int gud_usb_set(struct gud_device *gdrm, u8 request, u16 index, void *buf, size_t len)
216 ret = gud_usb_transfer(gdrm, false, request, index, trbuf, len);
228 int gud_usb_get_u8(struct gud_device *gdrm, u8 request, u16 index, u8 *val)
237 ret = gud_usb_get(gdrm, request, index, buf, sizeof(*val));
247 int gud_usb_set_u8(struct gud_device *gdrm, u8 request, u8 val)
249 return gud_usb_set(gdrm, request, 0, &val, sizeof(val));
252 static int gud_get_properties(struct gud_device *gdrm)
262 ret = gud_usb_get(gdrm, GUD_REQ_GET_PROPERTIES, 0,
274 gdrm->properties = drmm_kcalloc(&gdrm->drm, num_properties, sizeof(*gdrm->properties),
276 if (!gdrm->properties) {
292 ret = drm_plane_create_rotation_property(&gdrm->pipe.plane,
297 drm_dbg(&gdrm->drm, "Ignoring unknown property: %u\n", prop);
304 gdrm->properties[gdrm->num_properties++] = prop;
315 struct gud_device *gdrm = to_gud_device(entry->dev);
318 string_get_size(gdrm->bulk_len, 1, STRING_UNITS_2, buf, sizeof(buf));
320 seq_printf(m, "Number of errors: %u\n", gdrm->stats_num_errors);
323 if (gdrm->compression & GUD_COMPRESSION_LZ4)
325 if (!gdrm->compression)
329 if (gdrm->compression) {
331 u64 ratio = div64_u64_rem(gdrm->stats_length, gdrm->stats_actual_length,
333 u64 ratio_frac = div64_u64(remainder * 10, gdrm->stats_actual_length);
372 static int gud_alloc_bulk_buffer(struct gud_device *gdrm)
379 gdrm->bulk_buf = vmalloc_32(gdrm->bulk_len);
380 if (!gdrm->bulk_buf)
383 num_pages = DIV_ROUND_UP(gdrm->bulk_len, PAGE_SIZE);
388 for (i = 0, ptr = gdrm->bulk_buf; i < num_pages; i++, ptr += PAGE_SIZE)
391 ret = sg_alloc_table_from_pages(&gdrm->bulk_sgt, pages, num_pages,
392 0, gdrm->bulk_len, GFP_KERNEL);
400 struct gud_device *gdrm = data;
402 vfree(gdrm->compress_buf);
403 gdrm->compress_buf = NULL;
404 sg_free_table(&gdrm->bulk_sgt);
405 vfree(gdrm->bulk_buf);
406 gdrm->bulk_buf = NULL;
407 mutex_destroy(&gdrm->ctrl_lock);
419 struct gud_device *gdrm;
441 gdrm = devm_drm_dev_alloc(dev, &gud_drm_driver, struct gud_device, drm);
442 if (IS_ERR(gdrm))
443 return PTR_ERR(gdrm);
445 drm = &gdrm->drm;
451 gdrm->flags = le32_to_cpu(desc.flags);
452 gdrm->compression = desc.compression & GUD_COMPRESSION_LZ4;
454 if (gdrm->flags & GUD_DISPLAY_FLAG_FULL_UPDATE && gdrm->compression)
457 mutex_init(&gdrm->ctrl_lock);
458 mutex_init(&gdrm->damage_lock);
459 INIT_WORK(&gdrm->work, gud_flush_work);
460 gud_clear_damage(gdrm);
462 ret = devm_add_action(dev, gud_free_buffers_and_mutex, gdrm);
477 ret = gud_usb_get(gdrm, GUD_REQ_GET_FORMATS, 0, formats_dev, GUD_FORMATS_MAX_NUM);
543 gdrm->xrgb8888_emulation_format = xrgb8888_emulation_format;
553 gdrm->bulk_pipe = usb_sndbulkpipe(interface_to_usbdev(intf), usb_endpoint_num(bulk_out));
554 gdrm->bulk_len = max_buffer_size;
556 ret = gud_alloc_bulk_buffer(gdrm);
560 if (gdrm->compression & GUD_COMPRESSION_LZ4) {
561 gdrm->lz4_comp_mem = devm_kmalloc(dev, LZ4_MEM_COMPRESS, GFP_KERNEL);
562 if (!gdrm->lz4_comp_mem)
565 gdrm->compress_buf = vmalloc(gdrm->bulk_len);
566 if (!gdrm->compress_buf)
570 ret = drm_simple_display_pipe_init(drm, &gdrm->pipe, &gud_pipe_funcs,
579 ret = gud_get_properties(gdrm);
585 drm_plane_enable_fb_damage_clips(&gdrm->pipe.plane);
587 ret = gud_get_connectors(gdrm);
595 usb_set_intfdata(intf, gdrm);
620 struct gud_device *gdrm = usb_get_intfdata(interface);
621 struct drm_device *drm = &gdrm->drm;
632 struct gud_device *gdrm = usb_get_intfdata(intf);
634 return drm_mode_config_helper_suspend(&gdrm->drm);
639 struct gud_device *gdrm = usb_get_intfdata(intf);
641 drm_mode_config_helper_resume(&gdrm->drm);