root/drivers/gpu/drm/vmwgfx/vmwgfx_resource_priv.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 OR MIT */
   2 /**************************************************************************
   3  *
   4  * Copyright 2012-2014 VMware, Inc., Palo Alto, CA., USA
   5  *
   6  * Permission is hereby granted, free of charge, to any person obtaining a
   7  * copy of this software and associated documentation files (the
   8  * "Software"), to deal in the Software without restriction, including
   9  * without limitation the rights to use, copy, modify, merge, publish,
  10  * distribute, sub license, and/or sell copies of the Software, and to
  11  * permit persons to whom the Software is furnished to do so, subject to
  12  * the following conditions:
  13  *
  14  * The above copyright notice and this permission notice (including the
  15  * next paragraph) shall be included in all copies or substantial portions
  16  * of the Software.
  17  *
  18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  19  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  20  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
  21  * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
  22  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  23  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  24  * USE OR OTHER DEALINGS IN THE SOFTWARE.
  25  *
  26  **************************************************************************/
  27 
  28 #ifndef _VMWGFX_RESOURCE_PRIV_H_
  29 #define _VMWGFX_RESOURCE_PRIV_H_
  30 
  31 #include "vmwgfx_drv.h"
  32 
  33 /*
  34  * Extra memory required by the resource id's ida storage, which is allocated
  35  * separately from the base object itself. We estimate an on-average 128 bytes
  36  * per ida.
  37  */
  38 #define VMW_IDA_ACC_SIZE 128
  39 
  40 enum vmw_cmdbuf_res_state {
  41         VMW_CMDBUF_RES_COMMITTED,
  42         VMW_CMDBUF_RES_ADD,
  43         VMW_CMDBUF_RES_DEL
  44 };
  45 
  46 /**
  47  * struct vmw_user_resource_conv - Identify a derived user-exported resource
  48  * type and provide a function to convert its ttm_base_object pointer to
  49  * a struct vmw_resource
  50  */
  51 struct vmw_user_resource_conv {
  52         enum ttm_object_type object_type;
  53         struct vmw_resource *(*base_obj_to_res)(struct ttm_base_object *base);
  54         void (*res_free) (struct vmw_resource *res);
  55 };
  56 
  57 /**
  58  * struct vmw_res_func - members and functions common for a resource type
  59  *
  60  * @res_type:          Enum that identifies the lru list to use for eviction.
  61  * @needs_backup:      Whether the resource is guest-backed and needs
  62  *                     persistent buffer storage.
  63  * @type_name:         String that identifies the resource type.
  64  * @backup_placement:  TTM placement for backup buffers.
  65  * @may_evict          Whether the resource may be evicted.
  66  * @create:            Create a hardware resource.
  67  * @destroy:           Destroy a hardware resource.
  68  * @bind:              Bind a hardware resource to persistent buffer storage.
  69  * @unbind:            Unbind a hardware resource from persistent
  70  *                     buffer storage.
  71  * @commit_notify:     If the resource is a command buffer managed resource,
  72  *                     callback to notify that a define or remove command
  73  *                     has been committed to the device.
  74  */
  75 struct vmw_res_func {
  76         enum vmw_res_type res_type;
  77         bool needs_backup;
  78         const char *type_name;
  79         struct ttm_placement *backup_placement;
  80         bool may_evict;
  81         u32 prio;
  82         u32 dirty_prio;
  83 
  84         int (*create) (struct vmw_resource *res);
  85         int (*destroy) (struct vmw_resource *res);
  86         int (*bind) (struct vmw_resource *res,
  87                      struct ttm_validate_buffer *val_buf);
  88         int (*unbind) (struct vmw_resource *res,
  89                        bool readback,
  90                        struct ttm_validate_buffer *val_buf);
  91         void (*commit_notify)(struct vmw_resource *res,
  92                               enum vmw_cmdbuf_res_state state);
  93 };
  94 
  95 /**
  96  * struct vmw_simple_resource_func - members and functions common for the
  97  * simple resource helpers.
  98  * @res_func:  struct vmw_res_func as described above.
  99  * @ttm_res_type:  TTM resource type used for handle recognition.
 100  * @size:  Size of the simple resource information struct.
 101  * @init:  Initialize the simple resource information.
 102  * @hw_destroy:  A resource hw_destroy function.
 103  * @set_arg_handle:  Set the handle output argument of the ioctl create struct.
 104  */
 105 struct vmw_simple_resource_func {
 106         const struct vmw_res_func res_func;
 107         int ttm_res_type;
 108         size_t size;
 109         int (*init)(struct vmw_resource *res, void *data);
 110         void (*hw_destroy)(struct vmw_resource *res);
 111         void (*set_arg_handle)(void *data, u32 handle);
 112 };
 113 
 114 /**
 115  * struct vmw_simple_resource - Kernel only side simple resource
 116  * @res: The resource we derive from.
 117  * @func: The method and member virtual table.
 118  */
 119 struct vmw_simple_resource {
 120         struct vmw_resource res;
 121         const struct vmw_simple_resource_func *func;
 122 };
 123 
 124 int vmw_resource_alloc_id(struct vmw_resource *res);
 125 void vmw_resource_release_id(struct vmw_resource *res);
 126 int vmw_resource_init(struct vmw_private *dev_priv, struct vmw_resource *res,
 127                       bool delay_id,
 128                       void (*res_free) (struct vmw_resource *res),
 129                       const struct vmw_res_func *func);
 130 int
 131 vmw_simple_resource_create_ioctl(struct drm_device *dev,
 132                                  void *data,
 133                                  struct drm_file *file_priv,
 134                                  const struct vmw_simple_resource_func *func);
 135 struct vmw_resource *
 136 vmw_simple_resource_lookup(struct ttm_object_file *tfile,
 137                            uint32_t handle,
 138                            const struct vmw_simple_resource_func *func);
 139 #endif

/* [<][>][^][v][top][bottom][index][help] */