Rev 1313 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1313 | Rev 1963 | ||
---|---|---|---|
Line 28... | Line 28... | ||
28 | * Jerome Glisse |
28 | * Jerome Glisse |
29 | * Thomas Hellstrom |
29 | * Thomas Hellstrom |
30 | * Dave Airlie |
30 | * Dave Airlie |
31 | */ |
31 | */ |
32 | #include |
32 | #include |
- | 33 | #include |
|
33 | #include |
34 | #include |
34 | #include "radeon_drm.h" |
35 | #include "radeon_drm.h" |
35 | #include "radeon.h" |
36 | #include "radeon.h" |
36 | #include |
37 | #include |
37 | #include "radeon_object.h" |
38 | #include "radeon_object.h" |
Line 86... | Line 87... | ||
86 | } |
87 | } |
87 | return flags; |
88 | return flags; |
88 | } |
89 | } |
Line 89... | Line 90... | ||
89 | 90 | ||
90 | 91 | ||
91 | int radeon_object_create(struct radeon_device *rdev, |
- | |
92 | struct drm_gem_object *gobj, |
- | |
93 | unsigned long size, |
- | |
94 | bool kernel, |
- | |
95 | uint32_t domain, |
92 | int radeon_bo_create(struct radeon_device *rdev, |
96 | bool interruptible, |
93 | unsigned long size, int byte_align, bool kernel, u32 domain, |
97 | struct radeon_object **robj_ptr) |
94 | struct radeon_bo **bo_ptr) |
98 | { |
95 | { |
99 | struct radeon_object *robj; |
96 | struct radeon_bo *bo; |
100 | enum ttm_bo_type type; |
97 | enum ttm_bo_type type; |
Line 101... | Line 98... | ||
101 | uint32_t flags; |
98 | uint32_t flags; |
102 | int r; |
99 | int r; |
103 | 100 | ||
104 | if (kernel) { |
101 | if (kernel) { |
105 | type = ttm_bo_type_kernel; |
102 | type = ttm_bo_type_kernel; |
106 | } else { |
103 | } else { |
107 | type = ttm_bo_type_device; |
104 | type = ttm_bo_type_device; |
108 | } |
105 | } |
109 | *robj_ptr = NULL; |
106 | *bo_ptr = NULL; |
110 | robj = kzalloc(sizeof(struct radeon_object), GFP_KERNEL); |
107 | bo = kzalloc(sizeof(struct radeon_object), GFP_KERNEL); |
111 | if (robj == NULL) { |
108 | if (bo == NULL) { |
112 | return -ENOMEM; |
- | |
113 | } |
109 | return -ENOMEM; |
Line 114... | Line 110... | ||
114 | robj->rdev = rdev; |
110 | } |
Line 115... | Line 111... | ||
115 | // robj->gobj = gobj; |
111 | bo->rdev = rdev; |
Line 116... | Line 112... | ||
116 | INIT_LIST_HEAD(&robj->list); |
112 | INIT_LIST_HEAD(&bo->list); |
117 | 113 | ||
118 | flags = radeon_object_flags_from_domain(domain); |
114 | flags = radeon_object_flags_from_domain(domain); |
Line 142... | Line 138... | ||
142 | if (unlikely(vm_node == NULL)) { |
138 | if (unlikely(vm_node == NULL)) { |
143 | r = -ENOMEM; |
139 | r = -ENOMEM; |
144 | return r; |
140 | return r; |
145 | } |
141 | } |
Line 146... | Line 142... | ||
146 | 142 | ||
Line 147... | Line 143... | ||
147 | robj->mm_node = drm_mm_get_block_atomic(vm_node, num_pages, 0); |
143 | bo->mm_node = drm_mm_get_block_atomic(vm_node, num_pages, 0); |
148 | 144 | ||
149 | if (unlikely(robj->mm_node == NULL)) { |
145 | if (unlikely(bo->mm_node == NULL)) { |
Line 150... | Line 146... | ||
150 | goto retry_pre_get; |
146 | goto retry_pre_get; |
Line 151... | Line 147... | ||
151 | } |
147 | } |
152 | 148 | ||
Line 153... | Line 149... | ||
153 | robj->vm_addr = ((uint32_t)robj->mm_node->start); |
149 | bo->vm_addr = ((uint32_t)bo->mm_node->start); |
Line 186... | Line 182... | ||
186 | 182 | ||
187 | if (unlikely(robj->mm_node == NULL)) { |
183 | if (unlikely(robj->mm_node == NULL)) { |
188 | goto retry_pre_get1; |
184 | goto retry_pre_get1; |
Line 189... | Line 185... | ||
189 | } |
185 | } |
Line 190... | Line 186... | ||
190 | 186 | ||
191 | robj->vm_addr = ((uint32_t)robj->mm_node->start) ; |
187 | bo->vm_addr = ((uint32_t)bo->mm_node->start) ; |
192 | 188 |