linux/drivers/gpu/drm/msm/msm_gem_prime.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (C) 2013 Red Hat
   4 * Author: Rob Clark <robdclark@gmail.com>
   5 */
   6
   7#include <linux/dma-buf.h>
   8
   9#include <drm/drm_prime.h>
  10
  11#include "msm_drv.h"
  12#include "msm_gem.h"
  13
  14struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj)
  15{
  16        struct msm_gem_object *msm_obj = to_msm_bo(obj);
  17        int npages = obj->size >> PAGE_SHIFT;
  18
  19        if (WARN_ON(!msm_obj->pages))  /* should have already pinned! */
  20                return NULL;
  21
  22        return drm_prime_pages_to_sg(obj->dev, msm_obj->pages, npages);
  23}
  24
  25int msm_gem_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map *map)
  26{
  27        void *vaddr;
  28
  29        vaddr = msm_gem_get_vaddr(obj);
  30        if (IS_ERR(vaddr))
  31                return PTR_ERR(vaddr);
  32        dma_buf_map_set_vaddr(map, vaddr);
  33
  34        return 0;
  35}
  36
  37void msm_gem_prime_vunmap(struct drm_gem_object *obj, struct dma_buf_map *map)
  38{
  39        msm_gem_put_vaddr(obj);
  40}
  41
  42struct drm_gem_object *msm_gem_prime_import_sg_table(struct drm_device *dev,
  43                struct dma_buf_attachment *attach, struct sg_table *sg)
  44{
  45        return msm_gem_import(dev, attach->dmabuf, sg);
  46}
  47
  48int msm_gem_prime_pin(struct drm_gem_object *obj)
  49{
  50        if (!obj->import_attach)
  51                msm_gem_get_pages(obj);
  52        return 0;
  53}
  54
  55void msm_gem_prime_unpin(struct drm_gem_object *obj)
  56{
  57        if (!obj->import_attach)
  58                msm_gem_put_pages(obj);
  59}
  60