Rev 3192 | Rev 4065 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3192 | Rev 3391 | ||
---|---|---|---|
Line 87... | Line 87... | ||
87 | 87 | ||
88 | static inline bool drm_mm_initialized(struct drm_mm *mm) |
88 | static inline bool drm_mm_initialized(struct drm_mm *mm) |
89 | { |
89 | { |
90 | return mm->hole_stack.next; |
90 | return mm->hole_stack.next; |
- | 91 | } |
|
- | 92 | ||
- | 93 | static inline unsigned long __drm_mm_hole_node_start(struct drm_mm_node *hole_node) |
|
- | 94 | { |
|
- | 95 | return hole_node->start + hole_node->size; |
|
- | 96 | } |
|
- | 97 | ||
- | 98 | static inline unsigned long drm_mm_hole_node_start(struct drm_mm_node *hole_node) |
|
- | 99 | { |
|
- | 100 | BUG_ON(!hole_node->hole_follows); |
|
- | 101 | return __drm_mm_hole_node_start(hole_node); |
|
- | 102 | } |
|
- | 103 | ||
- | 104 | static inline unsigned long __drm_mm_hole_node_end(struct drm_mm_node *hole_node) |
|
- | 105 | { |
|
- | 106 | return list_entry(hole_node->node_list.next, |
|
- | 107 | struct drm_mm_node, node_list)->start; |
|
- | 108 | } |
|
- | 109 | ||
- | 110 | static inline unsigned long drm_mm_hole_node_end(struct drm_mm_node *hole_node) |
|
- | 111 | { |
|
- | 112 | return __drm_mm_hole_node_end(hole_node); |
|
- | 113 | } |
|
91 | } |
114 | |
92 | #define drm_mm_for_each_node(entry, mm) list_for_each_entry(entry, \ |
115 | #define drm_mm_for_each_node(entry, mm) list_for_each_entry(entry, \ |
93 | &(mm)->head_node.node_list, \ |
116 | &(mm)->head_node.node_list, \ |
94 | node_list) |
117 | node_list) |
95 | #define drm_mm_for_each_scanned_node_reverse(entry, n, mm) \ |
118 | #define drm_mm_for_each_scanned_node_reverse(entry, n, mm) \ |
96 | for (entry = (mm)->prev_scanned_node, \ |
119 | for (entry = (mm)->prev_scanned_node, \ |
97 | next = entry ? list_entry(entry->node_list.next, \ |
120 | next = entry ? list_entry(entry->node_list.next, \ |
98 | struct drm_mm_node, node_list) : NULL; \ |
121 | struct drm_mm_node, node_list) : NULL; \ |
99 | entry != NULL; entry = next, \ |
122 | entry != NULL; entry = next, \ |
100 | next = entry ? list_entry(entry->node_list.next, \ |
123 | next = entry ? list_entry(entry->node_list.next, \ |
- | 124 | struct drm_mm_node, node_list) : NULL) \ |
|
- | 125 | ||
- | 126 | /* Note that we need to unroll list_for_each_entry in order to inline |
|
- | 127 | * setting hole_start and hole_end on each iteration and keep the |
|
- | 128 | * macro sane. |
|
- | 129 | */ |
|
- | 130 | #define drm_mm_for_each_hole(entry, mm, hole_start, hole_end) \ |
|
- | 131 | for (entry = list_entry((mm)->hole_stack.next, struct drm_mm_node, hole_stack); \ |
|
- | 132 | &entry->hole_stack != &(mm)->hole_stack ? \ |
|
- | 133 | hole_start = drm_mm_hole_node_start(entry), \ |
|
- | 134 | hole_end = drm_mm_hole_node_end(entry), \ |
|
- | 135 | 1 : 0; \ |
|
- | 136 | entry = list_entry(entry->hole_stack.next, struct drm_mm_node, hole_stack)) |
|
101 | struct drm_mm_node, node_list) : NULL) \ |
137 | |
102 | /* |
138 | /* |
103 | * Basic range manager support (drm_mm.c) |
139 | * Basic range manager support (drm_mm.c) |
- | 140 | */ |
|
- | 141 | extern struct drm_mm_node *drm_mm_create_block(struct drm_mm *mm, |
|
- | 142 | unsigned long start, |
|
- | 143 | unsigned long size, |
|
104 | */ |
144 | bool atomic); |
105 | extern struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *node, |
145 | extern struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *node, |
106 | unsigned long size, |
146 | unsigned long size, |
107 | unsigned alignment, |
147 | unsigned alignment, |
108 | unsigned long color, |
148 | unsigned long color, |