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; |