Rev 3764 | Rev 5271 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3764 | Rev 5078 | ||
---|---|---|---|
Line 29... | Line 29... | ||
29 | #define __RADEON_OBJECT_H__ |
29 | #define __RADEON_OBJECT_H__ |
Line 30... | Line 30... | ||
30 | 30 | ||
31 | #include |
31 | #include |
Line 32... | Line -... | ||
32 | #include "radeon.h" |
- | |
33 | - | ||
34 | struct sg_table; |
32 | #include "radeon.h" |
35 | 33 | ||
36 | /** |
34 | /** |
37 | * radeon_mem_type_to_domain - return domain corresponding to mem_type |
35 | * radeon_mem_type_to_domain - return domain corresponding to mem_type |
38 | * @mem_type: ttm memory type |
36 | * @mem_type: ttm memory type |
Line 52... | Line 50... | ||
52 | break; |
50 | break; |
53 | } |
51 | } |
54 | return 0; |
52 | return 0; |
55 | } |
53 | } |
Line -... | Line 54... | ||
- | 54 | ||
- | 55 | /** |
|
- | 56 | * radeon_bo_reserve - reserve bo |
|
- | 57 | * @bo: bo structure |
|
- | 58 | * @no_intr: don't return -ERESTARTSYS on pending signal |
|
- | 59 | * |
|
- | 60 | * Returns: |
|
- | 61 | * -ERESTARTSYS: A wait for the buffer to become unreserved was interrupted by |
|
- | 62 | * a signal. Release all buffer reservations and return to user-space. |
|
56 | 63 | */ |
|
- | 64 | static inline int radeon_bo_reserve(struct radeon_bo *bo, bool no_intr) |
|
- | 65 | { |
|
- | 66 | int r; |
|
- | 67 | ||
- | 68 | r = ttm_bo_reserve(&bo->tbo, !no_intr, false, false, NULL); |
|
- | 69 | if (unlikely(r != 0)) { |
|
- | 70 | if (r != -ERESTARTSYS) |
|
- | 71 | dev_err(bo->rdev->dev, "%p reserve failed\n", bo); |
|
- | 72 | return r; |
|
- | 73 | } |
|
- | 74 | return 0; |
|
Line 57... | Line 75... | ||
57 | int radeon_bo_reserve(struct radeon_bo *bo, bool no_intr); |
75 | } |
58 | 76 | ||
59 | static inline void radeon_bo_unreserve(struct radeon_bo *bo) |
77 | static inline void radeon_bo_unreserve(struct radeon_bo *bo) |
60 | { |
78 | { |
Line 61... | Line 79... | ||
61 | // ttm_bo_unreserve(&bo->tbo); |
79 | ttm_bo_unreserve(&bo->tbo); |
62 | } |
80 | } |
63 | 81 | ||
Line 78... | Line 96... | ||
78 | static inline unsigned long radeon_bo_size(struct radeon_bo *bo) |
96 | static inline unsigned long radeon_bo_size(struct radeon_bo *bo) |
79 | { |
97 | { |
80 | return bo->tbo.num_pages << PAGE_SHIFT; |
98 | return bo->tbo.num_pages << PAGE_SHIFT; |
81 | } |
99 | } |
Line 82... | Line -... | ||
82 | - | ||
83 | static inline bool radeon_bo_is_reserved(struct radeon_bo *bo) |
- | |
84 | { |
- | |
85 | #ifdef __TTM__ |
- | |
86 | return ttm_bo_is_reserved(&bo->tbo); |
- | |
87 | #else |
- | |
88 | return !!atomic_read(&bo->tbo.reserved); |
- | |
89 | #endif |
- | |
90 | } |
- | |
91 | 100 | ||
92 | static inline unsigned radeon_bo_ngpu_pages(struct radeon_bo *bo) |
101 | static inline unsigned radeon_bo_ngpu_pages(struct radeon_bo *bo) |
93 | { |
102 | { |
94 | return (bo->tbo.num_pages << PAGE_SHIFT) / RADEON_GPU_PAGE_SIZE; |
103 | return (bo->tbo.num_pages << PAGE_SHIFT) / RADEON_GPU_PAGE_SIZE; |
Line 102... | Line 111... | ||
102 | /** |
111 | /** |
103 | * radeon_bo_mmap_offset - return mmap offset of bo |
112 | * radeon_bo_mmap_offset - return mmap offset of bo |
104 | * @bo: radeon object for which we query the offset |
113 | * @bo: radeon object for which we query the offset |
105 | * |
114 | * |
106 | * Returns mmap offset of the object. |
115 | * Returns mmap offset of the object. |
107 | * |
- | |
108 | * Note: addr_space_offset is constant after ttm bo init thus isn't protected |
- | |
109 | * by any lock. |
- | |
110 | */ |
116 | */ |
111 | static inline u64 radeon_bo_mmap_offset(struct radeon_bo *bo) |
117 | static inline u64 radeon_bo_mmap_offset(struct radeon_bo *bo) |
112 | { |
118 | { |
113 | return bo->tbo.addr_space_offset; |
119 | return drm_vma_node_offset_addr(&bo->tbo.vma_node); |
114 | } |
120 | } |
Line 115... | Line 121... | ||
115 | 121 | ||
116 | extern int radeon_bo_wait(struct radeon_bo *bo, u32 *mem_type, |
122 | extern int radeon_bo_wait(struct radeon_bo *bo, u32 *mem_type, |
Line 117... | Line 123... | ||
117 | bool no_wait); |
123 | bool no_wait); |
118 | 124 | ||
119 | extern int radeon_bo_create(struct radeon_device *rdev, |
125 | extern int radeon_bo_create(struct radeon_device *rdev, |
120 | unsigned long size, int byte_align, |
126 | unsigned long size, int byte_align, |
121 | bool kernel, u32 domain, |
127 | bool kernel, u32 domain, u32 flags, |
122 | struct sg_table *sg, |
128 | struct sg_table *sg, |
123 | struct radeon_bo **bo_ptr); |
129 | struct radeon_bo **bo_ptr); |
- | 130 | extern int radeon_bo_kmap(struct radeon_bo *bo, void **ptr); |
|
124 | extern int radeon_bo_kmap(struct radeon_bo *bo, void **ptr); |
131 | extern void radeon_bo_kunmap(struct radeon_bo *bo); |
125 | extern void radeon_bo_kunmap(struct radeon_bo *bo); |
132 | extern struct radeon_bo *radeon_bo_ref(struct radeon_bo *bo); |
126 | extern void radeon_bo_unref(struct radeon_bo **bo); |
133 | extern void radeon_bo_unref(struct radeon_bo **bo); |
127 | extern int radeon_bo_pin(struct radeon_bo *bo, u32 domain, u64 *gpu_addr); |
134 | extern int radeon_bo_pin(struct radeon_bo *bo, u32 domain, u64 *gpu_addr); |
128 | extern int radeon_bo_pin_restricted(struct radeon_bo *bo, u32 domain, |
135 | extern int radeon_bo_pin_restricted(struct radeon_bo *bo, u32 domain, |
129 | u64 max_offset, u64 *gpu_addr); |
136 | u64 max_offset, u64 *gpu_addr); |
130 | extern int radeon_bo_unpin(struct radeon_bo *bo); |
137 | extern int radeon_bo_unpin(struct radeon_bo *bo); |
131 | extern int radeon_bo_evict_vram(struct radeon_device *rdev); |
138 | extern int radeon_bo_evict_vram(struct radeon_device *rdev); |
132 | extern void radeon_bo_force_delete(struct radeon_device *rdev); |
139 | extern void radeon_bo_force_delete(struct radeon_device *rdev); |
133 | extern int radeon_bo_init(struct radeon_device *rdev); |
140 | extern int radeon_bo_init(struct radeon_device *rdev); |
134 | extern void radeon_bo_fini(struct radeon_device *rdev); |
141 | extern void radeon_bo_fini(struct radeon_device *rdev); |
135 | extern void radeon_bo_list_add_object(struct radeon_bo_list *lobj, |
142 | extern int radeon_bo_list_validate(struct radeon_device *rdev, |
136 | struct list_head *head); |
143 | struct ww_acquire_ctx *ticket, |
137 | extern int radeon_bo_list_validate(struct list_head *head, int ring); |
144 | struct list_head *head, int ring); |
138 | extern int radeon_bo_fbdev_mmap(struct radeon_bo *bo, |
145 | extern int radeon_bo_fbdev_mmap(struct radeon_bo *bo, |
139 | struct vm_area_struct *vma); |
146 | struct vm_area_struct *vma); |
140 | extern int radeon_bo_set_tiling_flags(struct radeon_bo *bo, |
147 | extern int radeon_bo_set_tiling_flags(struct radeon_bo *bo, |
141 | u32 tiling_flags, u32 pitch); |
148 | u32 tiling_flags, u32 pitch); |
142 | extern void radeon_bo_get_tiling_flags(struct radeon_bo *bo, |
149 | extern void radeon_bo_get_tiling_flags(struct radeon_bo *bo, |
143 | u32 *tiling_flags, u32 *pitch); |
150 | u32 *tiling_flags, u32 *pitch); |
144 | extern int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved, |
151 | extern int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved, |
145 | bool force_drop); |
152 | bool force_drop); |
146 | extern void radeon_bo_move_notify(struct ttm_buffer_object *bo, |
153 | extern void radeon_bo_move_notify(struct ttm_buffer_object *bo, |
147 | struct ttm_mem_reg *mem); |
154 | struct ttm_mem_reg *new_mem); |
Line 148... | Line 155... | ||
148 | extern int radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo); |
155 | extern int radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo); |
149 | extern int radeon_bo_get_surface_reg(struct radeon_bo *bo); |
156 | extern int radeon_bo_get_surface_reg(struct radeon_bo *bo); |
Line 162... | Line 169... | ||
162 | return sa_bo->manager->cpu_ptr + sa_bo->soffset; |
169 | return sa_bo->manager->cpu_ptr + sa_bo->soffset; |
163 | } |
170 | } |
Line 164... | Line 171... | ||
164 | 171 | ||
165 | extern int radeon_sa_bo_manager_init(struct radeon_device *rdev, |
172 | extern int radeon_sa_bo_manager_init(struct radeon_device *rdev, |
166 | struct radeon_sa_manager *sa_manager, |
173 | struct radeon_sa_manager *sa_manager, |
- | 174 | unsigned size, u32 align, u32 domain, |
|
167 | unsigned size, u32 domain); |
175 | u32 flags); |
168 | extern void radeon_sa_bo_manager_fini(struct radeon_device *rdev, |
176 | extern void radeon_sa_bo_manager_fini(struct radeon_device *rdev, |
169 | struct radeon_sa_manager *sa_manager); |
177 | struct radeon_sa_manager *sa_manager); |
170 | extern int radeon_sa_bo_manager_start(struct radeon_device *rdev, |
178 | extern int radeon_sa_bo_manager_start(struct radeon_device *rdev, |
171 | struct radeon_sa_manager *sa_manager); |
179 | struct radeon_sa_manager *sa_manager); |
172 | extern int radeon_sa_bo_manager_suspend(struct radeon_device *rdev, |
180 | extern int radeon_sa_bo_manager_suspend(struct radeon_device *rdev, |
173 | struct radeon_sa_manager *sa_manager); |
181 | struct radeon_sa_manager *sa_manager); |
174 | extern int radeon_sa_bo_new(struct radeon_device *rdev, |
182 | extern int radeon_sa_bo_new(struct radeon_device *rdev, |
175 | struct radeon_sa_manager *sa_manager, |
183 | struct radeon_sa_manager *sa_manager, |
176 | struct radeon_sa_bo **sa_bo, |
184 | struct radeon_sa_bo **sa_bo, |
177 | unsigned size, unsigned align, bool block); |
185 | unsigned size, unsigned align); |
178 | extern void radeon_sa_bo_free(struct radeon_device *rdev, |
186 | extern void radeon_sa_bo_free(struct radeon_device *rdev, |
179 | struct radeon_sa_bo **sa_bo, |
187 | struct radeon_sa_bo **sa_bo, |
180 | struct radeon_fence *fence); |
188 | struct radeon_fence *fence); |
181 | #if defined(CONFIG_DEBUG_FS) |
189 | #if defined(CONFIG_DEBUG_FS) |