Rev 5056 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5056 | Rev 6082 | ||
---|---|---|---|
Line 66... | Line 66... | ||
66 | unsigned scanned_prev_free : 1; |
66 | unsigned scanned_prev_free : 1; |
67 | unsigned scanned_next_free : 1; |
67 | unsigned scanned_next_free : 1; |
68 | unsigned scanned_preceeds_hole : 1; |
68 | unsigned scanned_preceeds_hole : 1; |
69 | unsigned allocated : 1; |
69 | unsigned allocated : 1; |
70 | unsigned long color; |
70 | unsigned long color; |
71 | unsigned long start; |
71 | u64 start; |
72 | unsigned long size; |
72 | u64 size; |
73 | struct drm_mm *mm; |
73 | struct drm_mm *mm; |
74 | }; |
74 | }; |
Line 75... | Line 75... | ||
75 | 75 | ||
76 | struct drm_mm { |
76 | struct drm_mm { |
Line 80... | Line 80... | ||
80 | * according to the (increasing) start address of the memory node. */ |
80 | * according to the (increasing) start address of the memory node. */ |
81 | struct drm_mm_node head_node; |
81 | struct drm_mm_node head_node; |
82 | unsigned int scan_check_range : 1; |
82 | unsigned int scan_check_range : 1; |
83 | unsigned scan_alignment; |
83 | unsigned scan_alignment; |
84 | unsigned long scan_color; |
84 | unsigned long scan_color; |
85 | unsigned long scan_size; |
85 | u64 scan_size; |
86 | unsigned long scan_hit_start; |
86 | u64 scan_hit_start; |
87 | unsigned long scan_hit_end; |
87 | u64 scan_hit_end; |
88 | unsigned scanned_blocks; |
88 | unsigned scanned_blocks; |
89 | unsigned long scan_start; |
89 | u64 scan_start; |
90 | unsigned long scan_end; |
90 | u64 scan_end; |
91 | struct drm_mm_node *prev_scanned_node; |
91 | struct drm_mm_node *prev_scanned_node; |
Line 92... | Line 92... | ||
92 | 92 | ||
93 | void (*color_adjust)(struct drm_mm_node *node, unsigned long color, |
93 | void (*color_adjust)(struct drm_mm_node *node, unsigned long color, |
94 | unsigned long *start, unsigned long *end); |
94 | u64 *start, u64 *end); |
Line 95... | Line 95... | ||
95 | }; |
95 | }; |
96 | 96 | ||
97 | /** |
97 | /** |
Line 122... | Line 122... | ||
122 | static inline bool drm_mm_initialized(struct drm_mm *mm) |
122 | static inline bool drm_mm_initialized(struct drm_mm *mm) |
123 | { |
123 | { |
124 | return mm->hole_stack.next; |
124 | return mm->hole_stack.next; |
125 | } |
125 | } |
Line 126... | Line 126... | ||
126 | 126 | ||
127 | static inline unsigned long __drm_mm_hole_node_start(struct drm_mm_node *hole_node) |
127 | static inline u64 __drm_mm_hole_node_start(struct drm_mm_node *hole_node) |
128 | { |
128 | { |
129 | return hole_node->start + hole_node->size; |
129 | return hole_node->start + hole_node->size; |
Line 130... | Line 130... | ||
130 | } |
130 | } |
Line 138... | Line 138... | ||
138 | * follows by looking at node->hole_follows. |
138 | * follows by looking at node->hole_follows. |
139 | * |
139 | * |
140 | * Returns: |
140 | * Returns: |
141 | * Start of the subsequent hole. |
141 | * Start of the subsequent hole. |
142 | */ |
142 | */ |
143 | static inline unsigned long drm_mm_hole_node_start(struct drm_mm_node *hole_node) |
143 | static inline u64 drm_mm_hole_node_start(struct drm_mm_node *hole_node) |
144 | { |
144 | { |
145 | BUG_ON(!hole_node->hole_follows); |
145 | BUG_ON(!hole_node->hole_follows); |
146 | return __drm_mm_hole_node_start(hole_node); |
146 | return __drm_mm_hole_node_start(hole_node); |
147 | } |
147 | } |
Line 148... | Line 148... | ||
148 | 148 | ||
149 | static inline unsigned long __drm_mm_hole_node_end(struct drm_mm_node *hole_node) |
149 | static inline u64 __drm_mm_hole_node_end(struct drm_mm_node *hole_node) |
150 | { |
150 | { |
151 | return list_entry(hole_node->node_list.next, |
151 | return list_entry(hole_node->node_list.next, |
152 | struct drm_mm_node, node_list)->start; |
152 | struct drm_mm_node, node_list)->start; |
Line 161... | Line 161... | ||
161 | * follows by looking at node->hole_follows. |
161 | * follows by looking at node->hole_follows. |
162 | * |
162 | * |
163 | * Returns: |
163 | * Returns: |
164 | * End of the subsequent hole. |
164 | * End of the subsequent hole. |
165 | */ |
165 | */ |
166 | static inline unsigned long drm_mm_hole_node_end(struct drm_mm_node *hole_node) |
166 | static inline u64 drm_mm_hole_node_end(struct drm_mm_node *hole_node) |
167 | { |
167 | { |
168 | return __drm_mm_hole_node_end(hole_node); |
168 | return __drm_mm_hole_node_end(hole_node); |
169 | } |
169 | } |
Line 170... | Line 170... | ||
170 | 170 | ||
Line 220... | Line 220... | ||
220 | */ |
220 | */ |
221 | int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node); |
221 | int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node); |
Line 222... | Line 222... | ||
222 | 222 | ||
223 | int drm_mm_insert_node_generic(struct drm_mm *mm, |
223 | int drm_mm_insert_node_generic(struct drm_mm *mm, |
224 | struct drm_mm_node *node, |
224 | struct drm_mm_node *node, |
225 | unsigned long size, |
225 | u64 size, |
226 | unsigned alignment, |
226 | unsigned alignment, |
227 | unsigned long color, |
227 | unsigned long color, |
228 | enum drm_mm_search_flags sflags, |
228 | enum drm_mm_search_flags sflags, |
229 | enum drm_mm_allocator_flags aflags); |
229 | enum drm_mm_allocator_flags aflags); |
Line 243... | Line 243... | ||
243 | * Returns: |
243 | * Returns: |
244 | * 0 on success, -ENOSPC if there's no suitable hole. |
244 | * 0 on success, -ENOSPC if there's no suitable hole. |
245 | */ |
245 | */ |
246 | static inline int drm_mm_insert_node(struct drm_mm *mm, |
246 | static inline int drm_mm_insert_node(struct drm_mm *mm, |
247 | struct drm_mm_node *node, |
247 | struct drm_mm_node *node, |
248 | unsigned long size, |
248 | u64 size, |
249 | unsigned alignment, |
249 | unsigned alignment, |
250 | enum drm_mm_search_flags flags) |
250 | enum drm_mm_search_flags flags) |
251 | { |
251 | { |
252 | return drm_mm_insert_node_generic(mm, node, size, alignment, 0, flags, |
252 | return drm_mm_insert_node_generic(mm, node, size, alignment, 0, flags, |
253 | DRM_MM_CREATE_DEFAULT); |
253 | DRM_MM_CREATE_DEFAULT); |
254 | } |
254 | } |
Line 255... | Line 255... | ||
255 | 255 | ||
256 | int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, |
256 | int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, |
257 | struct drm_mm_node *node, |
257 | struct drm_mm_node *node, |
258 | unsigned long size, |
258 | u64 size, |
259 | unsigned alignment, |
259 | unsigned alignment, |
260 | unsigned long color, |
260 | unsigned long color, |
261 | unsigned long start, |
261 | u64 start, |
262 | unsigned long end, |
262 | u64 end, |
263 | enum drm_mm_search_flags sflags, |
263 | enum drm_mm_search_flags sflags, |
264 | enum drm_mm_allocator_flags aflags); |
264 | enum drm_mm_allocator_flags aflags); |
265 | /** |
265 | /** |
266 | * drm_mm_insert_node_in_range - ranged search for space and insert @node |
266 | * drm_mm_insert_node_in_range - ranged search for space and insert @node |
Line 280... | Line 280... | ||
280 | * Returns: |
280 | * Returns: |
281 | * 0 on success, -ENOSPC if there's no suitable hole. |
281 | * 0 on success, -ENOSPC if there's no suitable hole. |
282 | */ |
282 | */ |
283 | static inline int drm_mm_insert_node_in_range(struct drm_mm *mm, |
283 | static inline int drm_mm_insert_node_in_range(struct drm_mm *mm, |
284 | struct drm_mm_node *node, |
284 | struct drm_mm_node *node, |
285 | unsigned long size, |
285 | u64 size, |
286 | unsigned alignment, |
286 | unsigned alignment, |
287 | unsigned long start, |
287 | u64 start, |
288 | unsigned long end, |
288 | u64 end, |
289 | enum drm_mm_search_flags flags) |
289 | enum drm_mm_search_flags flags) |
290 | { |
290 | { |
291 | return drm_mm_insert_node_in_range_generic(mm, node, size, alignment, |
291 | return drm_mm_insert_node_in_range_generic(mm, node, size, alignment, |
292 | 0, start, end, flags, |
292 | 0, start, end, flags, |
293 | DRM_MM_CREATE_DEFAULT); |
293 | DRM_MM_CREATE_DEFAULT); |
294 | } |
294 | } |
Line 295... | Line 295... | ||
295 | 295 | ||
296 | void drm_mm_remove_node(struct drm_mm_node *node); |
296 | void drm_mm_remove_node(struct drm_mm_node *node); |
297 | void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new); |
297 | void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new); |
298 | void drm_mm_init(struct drm_mm *mm, |
298 | void drm_mm_init(struct drm_mm *mm, |
299 | unsigned long start, |
299 | u64 start, |
300 | unsigned long size); |
300 | u64 size); |
301 | void drm_mm_takedown(struct drm_mm *mm); |
301 | void drm_mm_takedown(struct drm_mm *mm); |
Line 302... | Line 302... | ||
302 | bool drm_mm_clean(struct drm_mm *mm); |
302 | bool drm_mm_clean(struct drm_mm *mm); |
303 | 303 | ||
304 | void drm_mm_init_scan(struct drm_mm *mm, |
304 | void drm_mm_init_scan(struct drm_mm *mm, |
305 | unsigned long size, |
305 | u64 size, |
306 | unsigned alignment, |
306 | unsigned alignment, |
307 | unsigned long color); |
307 | unsigned long color); |
308 | void drm_mm_init_scan_with_range(struct drm_mm *mm, |
308 | void drm_mm_init_scan_with_range(struct drm_mm *mm, |
309 | unsigned long size, |
309 | u64 size, |
310 | unsigned alignment, |
310 | unsigned alignment, |
311 | unsigned long color, |
311 | unsigned long color, |
312 | unsigned long start, |
312 | u64 start, |
313 | unsigned long end); |
313 | u64 end); |
Line 314... | Line 314... | ||
314 | bool drm_mm_scan_add_block(struct drm_mm_node *node); |
314 | bool drm_mm_scan_add_block(struct drm_mm_node *node); |
315 | bool drm_mm_scan_remove_block(struct drm_mm_node *node); |
315 | bool drm_mm_scan_remove_block(struct drm_mm_node *node); |