LCOV - code coverage report
Current view: top level - drivers/gpu/drm - drm_gem_ttm_helper.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 25 0.0 %
Date: 2022-12-09 01:23:36 Functions: 0 5 0.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0-or-later
       2             : 
       3             : #include <linux/module.h>
       4             : 
       5             : #include <drm/drm_gem_ttm_helper.h>
       6             : 
       7             : /**
       8             :  * DOC: overview
       9             :  *
      10             :  * This library provides helper functions for gem objects backed by
      11             :  * ttm.
      12             :  */
      13             : 
      14             : /**
      15             :  * drm_gem_ttm_print_info() - Print &ttm_buffer_object info for debugfs
      16             :  * @p: DRM printer
      17             :  * @indent: Tab indentation level
      18             :  * @gem: GEM object
      19             :  *
      20             :  * This function can be used as &drm_gem_object_funcs.print_info
      21             :  * callback.
      22             :  */
      23           0 : void drm_gem_ttm_print_info(struct drm_printer *p, unsigned int indent,
      24             :                             const struct drm_gem_object *gem)
      25             : {
      26             :         static const char * const plname[] = {
      27             :                 [ TTM_PL_SYSTEM ] = "system",
      28             :                 [ TTM_PL_TT     ] = "tt",
      29             :                 [ TTM_PL_VRAM   ] = "vram",
      30             :                 [ TTM_PL_PRIV   ] = "priv",
      31             : 
      32             :                 [ 16 ]            = "cached",
      33             :                 [ 17 ]            = "uncached",
      34             :                 [ 18 ]            = "wc",
      35             :                 [ 19 ]            = "contig",
      36             : 
      37             :                 [ 21 ]            = "pinned", /* NO_EVICT */
      38             :                 [ 22 ]            = "topdown",
      39             :         };
      40           0 :         const struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem);
      41             : 
      42           0 :         drm_printf_indent(p, indent, "placement=");
      43           0 :         drm_print_bits(p, bo->resource->placement, plname, ARRAY_SIZE(plname));
      44           0 :         drm_printf(p, "\n");
      45             : 
      46           0 :         if (bo->resource->bus.is_iomem)
      47           0 :                 drm_printf_indent(p, indent, "bus.offset=%lx\n",
      48             :                                   (unsigned long)bo->resource->bus.offset);
      49           0 : }
      50             : EXPORT_SYMBOL(drm_gem_ttm_print_info);
      51             : 
      52             : /**
      53             :  * drm_gem_ttm_vmap() - vmap &ttm_buffer_object
      54             :  * @gem: GEM object.
      55             :  * @map: [out] returns the dma-buf mapping.
      56             :  *
      57             :  * Maps a GEM object with ttm_bo_vmap(). This function can be used as
      58             :  * &drm_gem_object_funcs.vmap callback.
      59             :  *
      60             :  * Returns:
      61             :  * 0 on success, or a negative errno code otherwise.
      62             :  */
      63           0 : int drm_gem_ttm_vmap(struct drm_gem_object *gem,
      64             :                      struct iosys_map *map)
      65             : {
      66           0 :         struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem);
      67             : 
      68           0 :         return ttm_bo_vmap(bo, map);
      69             : }
      70             : EXPORT_SYMBOL(drm_gem_ttm_vmap);
      71             : 
      72             : /**
      73             :  * drm_gem_ttm_vunmap() - vunmap &ttm_buffer_object
      74             :  * @gem: GEM object.
      75             :  * @map: dma-buf mapping.
      76             :  *
      77             :  * Unmaps a GEM object with ttm_bo_vunmap(). This function can be used as
      78             :  * &drm_gem_object_funcs.vmap callback.
      79             :  */
      80           0 : void drm_gem_ttm_vunmap(struct drm_gem_object *gem,
      81             :                         struct iosys_map *map)
      82             : {
      83           0 :         struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem);
      84             : 
      85           0 :         ttm_bo_vunmap(bo, map);
      86           0 : }
      87             : EXPORT_SYMBOL(drm_gem_ttm_vunmap);
      88             : 
      89             : /**
      90             :  * drm_gem_ttm_mmap() - mmap &ttm_buffer_object
      91             :  * @gem: GEM object.
      92             :  * @vma: vm area.
      93             :  *
      94             :  * This function can be used as &drm_gem_object_funcs.mmap
      95             :  * callback.
      96             :  */
      97           0 : int drm_gem_ttm_mmap(struct drm_gem_object *gem,
      98             :                      struct vm_area_struct *vma)
      99             : {
     100           0 :         struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem);
     101             :         int ret;
     102             : 
     103           0 :         ret = ttm_bo_mmap_obj(vma, bo);
     104           0 :         if (ret < 0)
     105             :                 return ret;
     106             : 
     107             :         /*
     108             :          * ttm has its own object refcounting, so drop gem reference
     109             :          * to avoid double accounting counting.
     110             :          */
     111             :         drm_gem_object_put(gem);
     112             : 
     113             :         return 0;
     114             : }
     115             : EXPORT_SYMBOL(drm_gem_ttm_mmap);
     116             : 
     117             : /**
     118             :  * drm_gem_ttm_dumb_map_offset() - Implements struct &drm_driver.dumb_map_offset
     119             :  * @file:       DRM file pointer.
     120             :  * @dev:        DRM device.
     121             :  * @handle:     GEM handle
     122             :  * @offset:     Returns the mapping's memory offset on success
     123             :  *
     124             :  * Provides an implementation of struct &drm_driver.dumb_map_offset for
     125             :  * TTM-based GEM drivers. TTM allocates the offset internally and
     126             :  * drm_gem_ttm_dumb_map_offset() returns it for dumb-buffer implementations.
     127             :  *
     128             :  * See struct &drm_driver.dumb_map_offset.
     129             :  *
     130             :  * Returns:
     131             :  * 0 on success, or a negative errno code otherwise.
     132             :  */
     133           0 : int drm_gem_ttm_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
     134             :                                 uint32_t handle, uint64_t *offset)
     135             : {
     136             :         struct drm_gem_object *gem;
     137             : 
     138           0 :         gem = drm_gem_object_lookup(file, handle);
     139           0 :         if (!gem)
     140             :                 return -ENOENT;
     141             : 
     142           0 :         *offset = drm_vma_node_offset_addr(&gem->vma_node);
     143             : 
     144           0 :         drm_gem_object_put(gem);
     145             : 
     146           0 :         return 0;
     147             : }
     148             : EXPORT_SYMBOL(drm_gem_ttm_dumb_map_offset);
     149             : 
     150             : MODULE_DESCRIPTION("DRM gem ttm helpers");
     151             : MODULE_LICENSE("GPL");

Generated by: LCOV version 1.14