diff options
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_display.c')
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_display.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c index ddbabefb4273..b12fd2c80812 100644 --- a/drivers/gpu/drm/nouveau/nouveau_display.c +++ b/drivers/gpu/drm/nouveau/nouveau_display.c | |||
| @@ -369,3 +369,48 @@ nouveau_finish_page_flip(struct nouveau_channel *chan, | |||
| 369 | spin_unlock_irqrestore(&dev->event_lock, flags); | 369 | spin_unlock_irqrestore(&dev->event_lock, flags); |
| 370 | return 0; | 370 | return 0; |
| 371 | } | 371 | } |
| 372 | |||
| 373 | int | ||
| 374 | nouveau_display_dumb_create(struct drm_file *file_priv, struct drm_device *dev, | ||
| 375 | struct drm_mode_create_dumb *args) | ||
| 376 | { | ||
| 377 | struct nouveau_bo *bo; | ||
| 378 | int ret; | ||
| 379 | |||
| 380 | args->pitch = roundup(args->width * (args->bpp / 8), 256); | ||
| 381 | args->size = args->pitch * args->height; | ||
| 382 | args->size = roundup(args->size, PAGE_SIZE); | ||
| 383 | |||
| 384 | ret = nouveau_gem_new(dev, args->size, 0, TTM_PL_FLAG_VRAM, 0, 0, &bo); | ||
| 385 | if (ret) | ||
| 386 | return ret; | ||
| 387 | |||
| 388 | ret = drm_gem_handle_create(file_priv, bo->gem, &args->handle); | ||
| 389 | drm_gem_object_unreference_unlocked(bo->gem); | ||
| 390 | return ret; | ||
| 391 | } | ||
| 392 | |||
| 393 | int | ||
| 394 | nouveau_display_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev, | ||
| 395 | uint32_t handle) | ||
| 396 | { | ||
| 397 | return drm_gem_handle_delete(file_priv, handle); | ||
| 398 | } | ||
| 399 | |||
| 400 | int | ||
| 401 | nouveau_display_dumb_map_offset(struct drm_file *file_priv, | ||
| 402 | struct drm_device *dev, | ||
| 403 | uint32_t handle, uint64_t *poffset) | ||
| 404 | { | ||
| 405 | struct drm_gem_object *gem; | ||
| 406 | |||
| 407 | gem = drm_gem_object_lookup(dev, file_priv, handle); | ||
| 408 | if (gem) { | ||
| 409 | struct nouveau_bo *bo = gem->driver_private; | ||
| 410 | *poffset = bo->bo.addr_space_offset; | ||
| 411 | drm_gem_object_unreference_unlocked(gem); | ||
| 412 | return 0; | ||
| 413 | } | ||
| 414 | |||
| 415 | return -ENOENT; | ||
| 416 | } | ||
