Subversion Repositories Kolibri OS

Rev

Rev 2344 | Rev 2352 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2344 Rev 2351
Line 4... Line 4...
4
#include "i915_drv.h"
4
#include "i915_drv.h"
5
#include "intel_drv.h"
5
#include "intel_drv.h"
6
#include "bitmap.h"
6
#include "bitmap.h"
7
 
7
 
Line -... Line 8...
-
 
8
#define DRIVER_CAPS_0   HW_BIT_BLIT | HW_TEX_BLIT;
-
 
9
#define DRIVER_CAPS_1   0
-
 
10
 
-
 
11
extern struct drm_device *main_device;
-
 
12
 
-
 
13
struct hman bm_man;
-
 
14
 
8
void __attribute__((regparm(1))) destroy_bitmap(bitmap_t *bitmap)
15
void __attribute__((regparm(1))) destroy_bitmap(bitmap_t *bitmap)
9
{
16
{
10
    printf("destroy bitmap %d\n", bitmap->handle);
17
    printf("destroy bitmap %d\n", bitmap->handle);
11
    free_handle(&bm_man, bitmap->handle);
18
    free_handle(&bm_man, bitmap->handle);
12
    bitmap->handle = 0;
19
    bitmap->handle = 0;
-
 
20
    bitmap->obj->base.read_domains = I915_GEM_DOMAIN_GTT;
-
 
21
    bitmap->obj->base.write_domain = I915_GEM_DOMAIN_CPU;
-
 
22
 
13
    i915_gem_object_unpin(bitmap->obj);
23
    mutex_lock(&main_device->struct_mutex);
14
    drm_gem_object_unreference(&bitmap->obj->base);
24
    drm_gem_object_unreference(&bitmap->obj->base);
-
 
25
    mutex_unlock(&main_device->struct_mutex);
-
 
26
 
15
    __DestroyObject(bitmap);
27
    __DestroyObject(bitmap);
16
};
28
};
Line 17... Line -...
17
 
-
 
18
extern struct drm_device *main_device;
-
 
19
 
-
 
20
struct hman bm_man;
-
 
21
 
29
 
22
int init_bitmaps()
30
int init_bitmaps()
23
{
31
{
Line 24... Line 32...
24
    int ret;
32
    int ret;
Line 122... Line 130...
122
        while(count--)
130
        while(count--)
123
        {
131
        {
124
            *dst++ = (0xFFFFF000 & *src++) | 0x207 ; // map as shared page
132
            *dst++ = (0xFFFFF000 & *src++) | 0x207 ; // map as shared page
125
        };
133
        };
126
//        while(max_count--)
134
        while(max_count--)
127
//            *dst++ = 0;                              // cleanup unused space
135
            *dst++ = 0;                              // cleanup unused space
128
    }
136
    }
Line -... Line 137...
-
 
137
 
-
 
138
    obj->mapped = uaddr ;
129
 
139
 
130
    bitmap->handle = handle;
140
    bitmap->handle = handle;
131
    bitmap->uaddr  = uaddr;
141
    bitmap->uaddr  = uaddr;
132
    bitmap->pitch  = pitch;
142
    bitmap->pitch  = pitch;
Line 219... Line 229...
219
    return ret;
229
    return ret;
220
};
230
};
Line -... Line 231...
-
 
231
 
-
 
232
 
-
 
233
void *drm_intel_bo_map(struct drm_i915_gem_object *obj, int write_enable)
-
 
234
{
-
 
235
    u8 *kaddr;
-
 
236
 
-
 
237
    kaddr = AllocKernelSpace(obj->base.size);
-
 
238
    if( kaddr != NULL)
-
 
239
    {
-
 
240
        u32_t *src = (u32_t*)obj->pages;
-
 
241
        u32_t *dst = &((u32_t*)page_tabs)[(u32_t)kaddr >> 12];
-
 
242
 
-
 
243
        u32 count  = obj->base.size/4096;
-
 
244
 
-
 
245
        while(count--)
-
 
246
        {
-
 
247
            *dst++ = (0xFFFFF000 & *src++) | 0x003 ;
-
 
248
        };
-
 
249
        return kaddr;
-
 
250
    };
-
 
251
    return NULL;
-
 
252
}
-
 
253
 
-
 
254
void destroy_gem_object(uint32_t handle)
-
 
255
{
-
 
256
    struct drm_i915_gem_object *obj = (void*)handle;
-
 
257
    drm_gem_object_unreference(&obj->base);
-
 
258
 
-
 
259
};
-
 
260
 
-
 
261
 
-
 
262
void write_gem_object(uint32_t handle, u32 offset, u32 size, u8* src)
-
 
263
{
-
 
264
    struct drm_i915_gem_object *obj = (void*)handle;
-
 
265
    u8    *dst;
-
 
266
    int    ret;
-
 
267
 
-
 
268
    ret = i915_gem_object_pin(obj, 4096, true);
-
 
269
    if (ret)
-
 
270
        return;
-
 
271
 
-
 
272
    dst = drm_intel_bo_map(obj, true);
-
 
273
    if( dst != NULL )
-
 
274
    {
-
 
275
        memmove(dst+offset, src, size);
-
 
276
        FreeKernelSpace(dst);
-
 
277
    };
-
 
278
};
-
 
279
 
-
 
280
u32 get_buffer_offset(uint32_t handle)
-
 
281
{
-
 
282
    struct drm_i915_gem_object *obj = (void*)handle;
-
 
283
 
-
 
284
    return obj->gtt_offset;
-
 
285
};
-
 
286
 
-
 
287
 
-
 
288
int get_driver_caps(hwcaps_t *caps)
-
 
289
{
-
 
290
    int ret = 0;
-
 
291
    ENTER();
-
 
292
 
-
 
293
    dbgprintf("caps ptr %x\n", caps);
-
 
294
 
-
 
295
    switch(caps->idx)
-
 
296
    {
-
 
297
        case 0:
-
 
298
            caps->opt[0] = DRIVER_CAPS_0;
-
 
299
            caps->opt[1] = DRIVER_CAPS_1;
-
 
300
            break;
-
 
301
 
-
 
302
        case 1:
-
 
303
            caps->cap1.max_tex_width  = 4096;
-
 
304
            caps->cap1.max_tex_height = 4096;
-
 
305
            break;
-
 
306
        default:
-
 
307
            ret = 1;
-
 
308
    };
-
 
309
    caps->idx = 1;
-
 
310
    return ret;