1 // SPDX-License-Identifier: MIT
2 /* Copyright © 2024 Intel Corporation */
3
4 #include <drm/drm_gem.h>
5
6 #include "intel_bo.h"
7 #include "intel_frontbuffer.h"
8 #include "xe_bo.h"
9 #include "xe_pxp.h"
10
intel_bo_is_tiled(struct drm_gem_object * obj)11 bool intel_bo_is_tiled(struct drm_gem_object *obj)
12 {
13 /* legacy tiling is unused */
14 return false;
15 }
16
intel_bo_is_userptr(struct drm_gem_object * obj)17 bool intel_bo_is_userptr(struct drm_gem_object *obj)
18 {
19 /* xe does not have userptr bos */
20 return false;
21 }
22
intel_bo_is_shmem(struct drm_gem_object * obj)23 bool intel_bo_is_shmem(struct drm_gem_object *obj)
24 {
25 return false;
26 }
27
intel_bo_is_protected(struct drm_gem_object * obj)28 bool intel_bo_is_protected(struct drm_gem_object *obj)
29 {
30 return xe_bo_is_protected(gem_to_xe_bo(obj));
31 }
32
intel_bo_key_check(struct drm_gem_object * obj)33 int intel_bo_key_check(struct drm_gem_object *obj)
34 {
35 return xe_pxp_obj_key_check(obj);
36 }
37
intel_bo_fb_mmap(struct drm_gem_object * obj,struct vm_area_struct * vma)38 int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
39 {
40 return drm_gem_prime_mmap(obj, vma);
41 }
42
intel_bo_read_from_page(struct drm_gem_object * obj,u64 offset,void * dst,int size)43 int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size)
44 {
45 struct xe_bo *bo = gem_to_xe_bo(obj);
46
47 return xe_bo_read(bo, offset, dst, size);
48 }
49
50 struct xe_frontbuffer {
51 struct intel_frontbuffer base;
52 struct drm_gem_object *obj;
53 struct kref ref;
54 };
55
intel_bo_frontbuffer_get(struct drm_gem_object * obj)56 struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *obj)
57 {
58 struct xe_frontbuffer *front;
59
60 front = kmalloc_obj(*front);
61 if (!front)
62 return NULL;
63
64 intel_frontbuffer_init(&front->base, obj->dev);
65
66 kref_init(&front->ref);
67
68 drm_gem_object_get(obj);
69 front->obj = obj;
70
71 return &front->base;
72 }
73
intel_bo_frontbuffer_ref(struct intel_frontbuffer * _front)74 void intel_bo_frontbuffer_ref(struct intel_frontbuffer *_front)
75 {
76 struct xe_frontbuffer *front =
77 container_of(_front, typeof(*front), base);
78
79 kref_get(&front->ref);
80 }
81
frontbuffer_release(struct kref * ref)82 static void frontbuffer_release(struct kref *ref)
83 {
84 struct xe_frontbuffer *front =
85 container_of(ref, typeof(*front), ref);
86
87 intel_frontbuffer_fini(&front->base);
88
89 drm_gem_object_put(front->obj);
90
91 kfree(front);
92 }
93
intel_bo_frontbuffer_put(struct intel_frontbuffer * _front)94 void intel_bo_frontbuffer_put(struct intel_frontbuffer *_front)
95 {
96 struct xe_frontbuffer *front =
97 container_of(_front, typeof(*front), base);
98
99 kref_put(&front->ref, frontbuffer_release);
100 }
101
intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer * front)102 void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front)
103 {
104 }
105
intel_bo_describe(struct seq_file * m,struct drm_gem_object * obj)106 void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj)
107 {
108 /* FIXME */
109 }
110