]> Git Repo - linux.git/blobdiff - drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_object.h
index 382485115b0641b059602d21fa92be33281ac8de..a288fa6d72c8026f60a62625f4bf421cc6d3a74e 100644 (file)
 
 #define AMDGPU_BO_INVALID_OFFSET       LONG_MAX
 
+/* bo virtual addresses in a vm */
+struct amdgpu_bo_va_mapping {
+       struct list_head                list;
+       struct rb_node                  rb;
+       uint64_t                        start;
+       uint64_t                        last;
+       uint64_t                        __subtree_last;
+       uint64_t                        offset;
+       uint64_t                        flags;
+};
+
+/* User space allocated BO in a VM */
+struct amdgpu_bo_va {
+       struct amdgpu_vm_bo_base        base;
+
+       /* protected by bo being reserved */
+       struct dma_fence                *last_pt_update;
+       unsigned                        ref_count;
+
+       /* mappings for this bo_va */
+       struct list_head                invalids;
+       struct list_head                valids;
+};
+
+struct amdgpu_bo {
+       /* Protected by tbo.reserved */
+       u32                             preferred_domains;
+       u32                             allowed_domains;
+       struct ttm_place                placements[AMDGPU_GEM_DOMAIN_MAX + 1];
+       struct ttm_placement            placement;
+       struct ttm_buffer_object        tbo;
+       struct ttm_bo_kmap_obj          kmap;
+       u64                             flags;
+       unsigned                        pin_count;
+       u64                             tiling_flags;
+       u64                             metadata_flags;
+       void                            *metadata;
+       u32                             metadata_size;
+       unsigned                        prime_shared_count;
+       /* list of all virtual address to which this bo is associated to */
+       struct list_head                va;
+       /* Constant after initialization */
+       struct drm_gem_object           gem_base;
+       struct amdgpu_bo                *parent;
+       struct amdgpu_bo                *shadow;
+
+       struct ttm_bo_kmap_obj          dma_buf_vmap;
+       struct amdgpu_mn                *mn;
+
+       union {
+               struct list_head        mn_list;
+               struct list_head        shadow_list;
+       };
+};
+
 /**
  * amdgpu_mem_type_to_domain - return domain corresponding to mem_type
  * @mem_type:  ttm memory type
@@ -120,7 +175,11 @@ static inline u64 amdgpu_bo_mmap_offset(struct amdgpu_bo *bo)
  */
 static inline bool amdgpu_bo_gpu_accessible(struct amdgpu_bo *bo)
 {
-       return bo->tbo.mem.mem_type != TTM_PL_SYSTEM;
+       switch (bo->tbo.mem.mem_type) {
+       case TTM_PL_TT: return amdgpu_ttm_is_bound(bo->tbo.ttm);
+       case TTM_PL_VRAM: return true;
+       default: return false;
+       }
 }
 
 int amdgpu_bo_create(struct amdgpu_device *adev,
@@ -128,6 +187,7 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
                            bool kernel, u32 domain, u64 flags,
                            struct sg_table *sg,
                            struct reservation_object *resv,
+                           uint64_t init_value,
                            struct amdgpu_bo **bo_ptr);
 int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
                                unsigned long size, int byte_align,
@@ -135,7 +195,12 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
                                struct sg_table *sg,
                                struct ttm_placement *placement,
                                struct reservation_object *resv,
+                               uint64_t init_value,
                                struct amdgpu_bo **bo_ptr);
+int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
+                             unsigned long size, int align,
+                             u32 domain, struct amdgpu_bo **bo_ptr,
+                             u64 *gpu_addr, void **cpu_addr);
 int amdgpu_bo_create_kernel(struct amdgpu_device *adev,
                            unsigned long size, int align,
                            u32 domain, struct amdgpu_bo **bo_ptr,
@@ -143,6 +208,7 @@ int amdgpu_bo_create_kernel(struct amdgpu_device *adev,
 void amdgpu_bo_free_kernel(struct amdgpu_bo **bo, u64 *gpu_addr,
                           void **cpu_addr);
 int amdgpu_bo_kmap(struct amdgpu_bo *bo, void **ptr);
+void *amdgpu_bo_kptr(struct amdgpu_bo *bo);
 void amdgpu_bo_kunmap(struct amdgpu_bo *bo);
 struct amdgpu_bo *amdgpu_bo_ref(struct amdgpu_bo *bo);
 void amdgpu_bo_unref(struct amdgpu_bo **bo);
This page took 0.042798 seconds and 4 git commands to generate.