Subversion Repositories Kolibri OS

Rev

Rev 3192 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3120 serge 1
 
2
#include 
3
#include "radeon.h"
4
#include "hmm.h"
5
#include "bitmap.h"
6
7
 
8
 
3764 Serge 9
10
 
11
#define DRIVER_CAPS_1   0
3120 serge 12
13
 
14
15
 
16
17
 
18
19
 
3764 Serge 20
3120 serge 21
 
22
{
23
//    dma_addr_t *pages = bitmap->obj->allocated_pages;
24
    int i;
25
26
 
27
    bitmap->handle = 0;
28
//    bitmap->obj->base.read_domains = I915_GEM_DOMAIN_GTT;
29
//    bitmap->obj->base.write_domain = I915_GEM_DOMAIN_CPU;
30
31
 
32
//    drm_gem_object_unreference(&bitmap->obj->base);
33
//    mutex_unlock(&main_device->struct_mutex);
34
35
 
36
//    {
37
//        for (i = 0; i < bitmap->page_count; i++)
38
//            FreePage(pages[i]);
39
40
 
41
42
 
43
//    };
44
    UserFree(bitmap->uaddr);
45
    __DestroyObject(bitmap);
46
};
47
48
 
49
{
50
    int page_count;
51
52
 
53
     * at this point until we release them.
54
     */
55
56
 
57
    BUG_ON(obj->allocated_pages == NULL);
58
    BUG_ON(obj->pages.page != NULL);
59
60
 
61
    obj->pages.nents = page_count;
62
63
 
64
 
65
//       i915_gem_object_do_bit_17_swizzle(obj);
66
67
 
68
}
69
70
 
71
{
72
    int ret, i;
73
74
 
75
76
 
77
    if (ret) {
78
        /* In the event of a disaster, abandon all caches and
79
         * hope for the best.
80
         */
81
        WARN_ON(ret != -EIO);
82
        i915_gem_clflush_object(obj);
83
        obj->base.read_domains = obj->base.write_domain = I915_GEM_DOMAIN_CPU;
84
    }
85
86
 
87
        obj->dirty = 0;
88
89
 
90
}
91
92
 
93
    .get_pages = bitmap_get_pages_gtt,
94
    .put_pages = bitmap_put_pages_gtt,
95
};
96
97
 
98
 
99
 
100
{
101
    u32     handle;       // ignored
102
    void   *data;         // ignored
103
104
 
105
    u32     height;
106
    u32     pitch;        // ignored
107
108
 
109
    u32     max_height;
110
    u32     format;       // reserved mbz
111
};
112
113
 
114
 
115
{
116
    struct radeon_device *rdev = dev->dev_private;
117
    struct radeon_bo     *obj = NULL;
118
119
 
120
    u32         handle;
121
    u32         width, max_width;
122
    u32         height, max_height;
123
    u32         size,  max_size;
124
    u32         pitch, max_pitch;
125
    void       *uaddr;
126
    dma_addr_t *pages;
127
    u32         page_count;
128
129
 
130
131
 
132
133
 
134
    pbitmap->data   = (void*)-1;
135
136
 
137
    height = pbitmap->height;
138
139
 
140
        goto err1;
141
142
 
143
    max_height = (pbitmap->max_height==0) ? height : pbitmap->max_height;
144
145
 
146
//    printf("%s %d\n",__FUNCTION__, handle);
147
148
 
149
        goto err1;
150
151
 
152
//    printf("bitmap %x\n", bitmap);
153
    if( bitmap == NULL)
154
        goto err2;
155
156
 
157
    bitmap->header.destroy = destroy_bitmap;
158
    bitmap->obj    = NULL;
159
160
 
161
162
 
163
    size =  roundup(pitch*height, PAGE_SIZE);
164
165
 
166
167
 
168
    max_size =  roundup(max_pitch*max_height, PAGE_SIZE);
169
170
 
171
172
 
173
174
 
175
        goto err3;
176
177
 
178
    if (unlikely(ret != 0))
179
        goto err3;
180
181
 
182
    if (unlikely(ret != 0))
183
        goto err3;
184
185
 
3764 Serge 186
    ret = radeon_bo_user_map(obj, (void**)&uaddr);
3120 serge 187
    if (unlikely(ret != 0))
188
        goto err3;
189
#endif
3764 Serge 190
3120 serge 191
 
192
    bitmap->max_count  =  max_size/PAGE_SIZE;
193
194
 
3192 Serge 195
3120 serge 196
 
197
    bitmap->uaddr  = uaddr;
198
    bitmap->pitch  = pitch;
199
    bitmap->gaddr  = radeon_bo_gpu_offset(obj);
200
201
 
202
    bitmap->height = height;
203
    bitmap->max_width  = max_width;
204
    bitmap->max_height = max_height;
205
206
 
207
    bitmap->header.destroy = destroy_bitmap;
208
209
 
210
    pbitmap->data   = uaddr;
211
    pbitmap->pitch  = pitch;
212
213
 
214
 
215
            __FUNCTION__, handle, pitch, bitmap->gaddr, uaddr);
216
217
 
218
219
 
220
//    mutex_lock(&dev->struct_mutex);
221
//    drm_gem_object_unreference(&obj->base);
222
//    mutex_unlock(&dev->struct_mutex);
223
224
 
225
//    while (i--)
226
//        FreePage(pages[i]);
227
//    free(pages);
228
//    UserFree(uaddr);
229
230
 
231
    __DestroyObject(bitmap);
232
err2:
233
    free_handle(&bm_mm, handle);
234
err1:
235
    return -1;
236
};
237
238
 
239
 
240
{
241
    int ret;
242
243
 
244
245
 
246
        return -1;
247
248
 
249
250
 
251
        return -1;
252
/*
253
    mutex_lock(&main_device->struct_mutex);
254
    ret = i915_gem_object_set_to_cpu_domain(bitmap->obj, true);
255
    mutex_unlock(&main_device->struct_mutex);
256
257
 
258
    {
259
        pbitmap->data  = NULL;
260
        pbitmap->pitch = 0;
261
262
 
263
        return ret;
264
    };
265
*/
266
    pbitmap->data  = bitmap->uaddr;
267
    pbitmap->pitch = bitmap->pitch;
268
269
 
270
};
271
272
 
273
 
274
275
 
276
{
277
    bitmap_t  *bitmap;
278
    dma_addr_t page, *pages;
279
    u32        size, page_count;
280
    u32        width, height;
281
    u32        pitch;
282
    int        i;
283
    int        ret = 0;
284
285
 
286
 
287
        return -1;
288
289
 
290
291
 
292
        return -1;
293
294
 
295
        pbitmap->new_height > bitmap->max_height)
296
        return -1;
297
298
 
299
    height = pbitmap->new_height;
300
301
 
302
    size =  roundup(pitch * height, PAGE_SIZE);
303
    page_count = size/PAGE_SIZE;
304
305
 
306
            width, height, pitch, size);
307
308
 
309
    {
310
        char *vaddr = bitmap->uaddr + PAGE_SIZE * bitmap->page_count;
311
312
 
313
314
 
315
                bitmap->page_count, page_count, vaddr);
316
317
 
318
        {
319
            page = AllocPage();
320
            if ( page == 0 )
321
                goto err4;
322
            pages[i] = page;
323
            MapPage(vaddr, page, 0x207);        //map as shared page
324
        };
325
326
 
327
                  page_count - bitmap->page_count);
328
329
 
330
        i915_gem_object_unbind(bitmap->obj);
331
        bitmap->obj->base.size = size;
332
        bitmap->obj->pages.nents = page_count;
333
334
 
335
        if (ret)
336
            goto err4;
337
338
 
339
        bitmap->gaddr  = bitmap->obj->gtt_offset;
340
    }
341
    else if(page_count < bitmap->page_count)
342
    {
343
        char *vaddr = bitmap->uaddr + PAGE_SIZE * page_count;
344
345
 
346
        i915_gem_object_unbind(bitmap->obj);
347
348
 
349
350
 
351
                bitmap->page_count, page_count, vaddr);
352
353
 
354
        {
355
            MapPage(vaddr, 0, 0);        //unmap
356
357
 
358
            pages[i] = 0;
359
        };
360
361
 
362
                  bitmap->page_count - page_count);
363
364
 
365
        bitmap->obj->pages.nents = page_count;
366
367
 
368
        if (ret)
369
            goto err3;
370
371
 
372
        bitmap->gaddr  = bitmap->obj->gtt_offset;
373
    };
374
375
 
376
    bitmap->height = height;
377
    bitmap->pitch  = pitch;
378
379
 
380
 
381
    pbitmap->pitch = bitmap->pitch;
382
383
 
384
385
 
386
    while (i-- > bitmap->page_count)
387
        FreePage(pages[i]);
388
389
 
390
    return -1;
391
};
392
#endif
393
394
 
395
 
396
{
397
    int ret;
398
399
 
400
401
 
402
};
403
404
 
405
 
406
 
407
{
408
    int ret = 0;
409
410
 
411
    switch(caps->idx)
412
    {
413
        case 0:
414
            caps->opt[0] = DRIVER_CAPS_0;
415
            caps->opt[1] = DRIVER_CAPS_1;
416
            break;
417
418
 
419
            caps->cap1.max_tex_width  = 4096;
420
            caps->cap1.max_tex_height = 4096;
421
            break;
422
        default:
423
            ret = 1;
424
    };
425
    caps->idx = 1;
426
    LEAVE();
427
    return ret;
428
}
429
430
 
431
 
432
{
433
    struct radeon_device *rdev = main_drm_device->dev_private;
434
435
 
436
437
 
438
439
 
440
441
 
442
};
443
444
 
445
 
446
447
 
448
{
449
    struct radeon_device *rdev = dev->dev_private;
450
    struct context *context;
451
    struct io_call_10 io_10;
452
    int    slot = *((u8*)CURRENT_TASK);
453
    int    ret;
454
455
 
456
457
 
458
        return context;
459
460
 
461
462
 
463
    {
464
        ret = radeon_ib_get(rdev, RADEON_RING_TYPE_GFX_INDEX, &context->ib, NULL, 4096);
465
        if (ret) {
466
            DRM_ERROR("radeon: failed to get ib (%d).\n", ret);
467
            goto err;
468
        };
469
470
 
471
472
 
473
        context->mask  = NULL;
474
        context->seqno = 0;
475
        context->slot  = slot;
476
477
 
478
    };
479
    return context;
480
481
 
482
    __DestroyObject(context);
483
    return NULL;
484
};
485
486
 
3764 Serge 487