aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/bochs/bochs_mm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/bochs/bochs_mm.c')
-rw-r--r--drivers/gpu/drm/bochs/bochs_mm.c74
1 files changed, 0 insertions, 74 deletions
diff --git a/drivers/gpu/drm/bochs/bochs_mm.c b/drivers/gpu/drm/bochs/bochs_mm.c
index c9c7097030ca..a61c1ecb2bdc 100644
--- a/drivers/gpu/drm/bochs/bochs_mm.c
+++ b/drivers/gpu/drm/bochs/bochs_mm.c
@@ -457,77 +457,3 @@ int bochs_dumb_mmap_offset(struct drm_file *file, struct drm_device *dev,
457 drm_gem_object_unreference_unlocked(obj); 457 drm_gem_object_unreference_unlocked(obj);
458 return 0; 458 return 0;
459} 459}
460
461/* ---------------------------------------------------------------------- */
462
463static void bochs_user_framebuffer_destroy(struct drm_framebuffer *fb)
464{
465 struct bochs_framebuffer *bochs_fb = to_bochs_framebuffer(fb);
466
467 drm_gem_object_unreference_unlocked(bochs_fb->obj);
468 drm_framebuffer_cleanup(fb);
469 kfree(fb);
470}
471
472static const struct drm_framebuffer_funcs bochs_fb_funcs = {
473 .destroy = bochs_user_framebuffer_destroy,
474};
475
476int bochs_framebuffer_init(struct drm_device *dev,
477 struct bochs_framebuffer *gfb,
478 const struct drm_mode_fb_cmd2 *mode_cmd,
479 struct drm_gem_object *obj)
480{
481 int ret;
482
483 drm_helper_mode_fill_fb_struct(dev, &gfb->base, mode_cmd);
484 gfb->obj = obj;
485 ret = drm_framebuffer_init(dev, &gfb->base, &bochs_fb_funcs);
486 if (ret) {
487 DRM_ERROR("drm_framebuffer_init failed: %d\n", ret);
488 return ret;
489 }
490 return 0;
491}
492
493static struct drm_framebuffer *
494bochs_user_framebuffer_create(struct drm_device *dev,
495 struct drm_file *filp,
496 const struct drm_mode_fb_cmd2 *mode_cmd)
497{
498 struct drm_gem_object *obj;
499 struct bochs_framebuffer *bochs_fb;
500 int ret;
501
502 DRM_DEBUG_DRIVER("%dx%d, format %c%c%c%c\n",
503 mode_cmd->width, mode_cmd->height,
504 (mode_cmd->pixel_format) & 0xff,
505 (mode_cmd->pixel_format >> 8) & 0xff,
506 (mode_cmd->pixel_format >> 16) & 0xff,
507 (mode_cmd->pixel_format >> 24) & 0xff);
508
509 if (mode_cmd->pixel_format != DRM_FORMAT_XRGB8888)
510 return ERR_PTR(-ENOENT);
511
512 obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
513 if (obj == NULL)
514 return ERR_PTR(-ENOENT);
515
516 bochs_fb = kzalloc(sizeof(*bochs_fb), GFP_KERNEL);
517 if (!bochs_fb) {
518 drm_gem_object_unreference_unlocked(obj);
519 return ERR_PTR(-ENOMEM);
520 }
521
522 ret = bochs_framebuffer_init(dev, bochs_fb, mode_cmd, obj);
523 if (ret) {
524 drm_gem_object_unreference_unlocked(obj);
525 kfree(bochs_fb);
526 return ERR_PTR(ret);
527 }
528 return &bochs_fb->base;
529}
530
531const struct drm_mode_config_funcs bochs_mode_funcs = {
532 .fb_create = bochs_user_framebuffer_create,
533};