Subversion Repositories Kolibri OS

Rev

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