Rev 3039 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3039 | Rev 3051 | ||
---|---|---|---|
Line 25... | Line 25... | ||
25 | bitmap->obj->base.read_domains = I915_GEM_DOMAIN_GTT; |
25 | bitmap->obj->base.read_domains = I915_GEM_DOMAIN_GTT; |
26 | bitmap->obj->base.write_domain = I915_GEM_DOMAIN_CPU; |
26 | bitmap->obj->base.write_domain = I915_GEM_DOMAIN_CPU; |
27 | 27 | ||
Line 28... | Line 28... | ||
28 | mutex_lock(&main_device->struct_mutex); |
28 | mutex_lock(&main_device->struct_mutex); |
29 | - | ||
30 | drm_gem_object_unreference(&bitmap->obj->base); |
29 | drm_gem_object_unreference(&bitmap->obj->base); |
31 | mutex_unlock(&main_device->struct_mutex); |
30 | mutex_unlock(&main_device->struct_mutex); |
Line 32... | Line 31... | ||
32 | 31 | ||
33 | if(pages != NULL) |
32 | if(pages != NULL) |
Line 208... | Line 207... | ||
208 | pages[i] = page; |
207 | pages[i] = page; |
209 | 208 | ||
Line 210... | Line 209... | ||
210 | MapPage(vaddr, page, 0x207); //map as shared page |
209 | MapPage(vaddr, page, 0x207); //map as shared page |
211 | }; |
210 | }; |
- | 211 | for(;i < max_count; i++, vaddr+= PAGE_SIZE) |
|
- | 212 | { |
|
- | 213 | MapPage(vaddr, 0, 0); //map as shared page |
|
- | 214 | }; |
|
- | 215 | ||
212 | bitmap->page_count = page_count; |
216 | bitmap->page_count = page_count; |
213 | bitmap->max_count = max_count; |
217 | bitmap->max_count = max_count; |
214 | }; |
218 | }; |
Line 215... | Line 219... | ||
215 | 219 | ||
Line 337... | Line 341... | ||
337 | 341 | ||
Line 338... | Line 342... | ||
338 | DRM_DEBUG("new width %d height %d pitch %d size %d\n", |
342 | DRM_DEBUG("new width %d height %d pitch %d size %d\n", |
339 | width, height, pitch, size); |
343 | width, height, pitch, size); |
Line 340... | Line 344... | ||
340 | 344 | ||
341 | if( page_count == bitmap->page_count ) |
- | |
342 | { |
- | |
343 | bitmap->width = width; |
- | |
344 | bitmap->height = height; |
- | |
345 | bitmap->pitch = pitch; |
- | |
346 | } |
- | |
347 | else if(page_count > bitmap->page_count) |
345 | if(page_count > bitmap->page_count) |
348 | { |
346 | { |
Line 349... | Line 347... | ||
349 | char *vaddr = bitmap->uaddr + PAGE_SIZE * bitmap->page_count; |
347 | char *vaddr = bitmap->uaddr + PAGE_SIZE * bitmap->page_count; |
Line 364... | Line 362... | ||
364 | 362 | ||
Line 365... | Line 363... | ||
365 | DRM_DEBUG("%s alloc %d pages\n", __FUNCTION__, |
363 | DRM_DEBUG("%s alloc %d pages\n", __FUNCTION__, |
366 | page_count - bitmap->page_count); |
364 | page_count - bitmap->page_count); |
Line 367... | Line -... | ||
367 | - | ||
368 | // mutex_lock(&main_device->struct_mutex); |
- | |
369 | 365 | ||
370 | i915_gem_object_unpin(bitmap->obj); |
366 | i915_gem_object_unpin(bitmap->obj); |
371 | i915_gem_object_unbind(bitmap->obj); |
367 | i915_gem_object_unbind(bitmap->obj); |
372 | bitmap->obj->base.size = size; |
368 | bitmap->obj->base.size = size; |
Line 373... | Line 369... | ||
373 | bitmap->obj->pages.nents = page_count; |
369 | bitmap->obj->pages.nents = page_count; |
374 | 370 | ||
375 | ret = i915_gem_object_pin(bitmap->obj, PAGE_SIZE, true,true); |
371 | ret = i915_gem_object_pin(bitmap->obj, PAGE_SIZE, true,true); |
376 | if (ret) |
- | |
Line 377... | Line 372... | ||
377 | goto err4; |
372 | if (ret) |
378 | // mutex_unlock(&main_device->struct_mutex); |
- | |
379 | - | ||
380 | bitmap->page_count = page_count; |
- | |
381 | bitmap->width = width; |
373 | goto err4; |
382 | bitmap->height = height; |
374 | |
- | 375 | bitmap->page_count = page_count; |
|
- | 376 | bitmap->gaddr = bitmap->obj->gtt_offset; |
|
- | 377 | } |
|
Line 383... | Line 378... | ||
383 | bitmap->pitch = pitch; |
378 | else if(page_count < bitmap->page_count) |
- | 379 | { |
|
- | 380 | char *vaddr = bitmap->uaddr + PAGE_SIZE * page_count; |
|
- | 381 | ||
- | 382 | i915_gem_object_unpin(bitmap->obj); |
|
- | 383 | i915_gem_object_unbind(bitmap->obj); |
|
- | 384 | ||
- | 385 | pages = bitmap->obj->allocated_pages; |
|
- | 386 | ||
384 | bitmap->gaddr = bitmap->obj->gtt_offset; |
387 | DRM_DEBUG("old pages %d new_pages %d vaddr %x\n", |
385 | }; |
388 | bitmap->page_count, page_count, vaddr); |
386 | - | ||
Line -... | Line 389... | ||
- | 389 | ||
- | 390 | for(i = page_count; i < bitmap->page_count; i++, vaddr+= PAGE_SIZE) |
|
- | 391 | { |
|
- | 392 | MapPage(vaddr, 0, 0); //unmap |
|
387 | if(ret != 0 ) |
393 | |
- | 394 | FreePage(pages[i]); |
|
- | 395 | pages[i] = 0; |
|
- | 396 | }; |
|
- | 397 | ||
- | 398 | DRM_DEBUG("%s release %d pages\n", __FUNCTION__, |
|
- | 399 | bitmap->page_count - page_count); |
|
388 | { |
400 | |
- | 401 | bitmap->obj->base.size = size; |
|
- | 402 | bitmap->obj->pages.nents = page_count; |
|
- | 403 | ||
- | 404 | ret = i915_gem_object_pin(bitmap->obj, PAGE_SIZE, true,true); |
|
389 | pbitmap->data = NULL; |
405 | if (ret) |
Line -... | Line 406... | ||
- | 406 | goto err3; |
|
- | 407 | ||
- | 408 | bitmap->page_count = page_count; |
|
- | 409 | bitmap->gaddr = bitmap->obj->gtt_offset; |
|
- | 410 | }; |
|
390 | pbitmap->pitch = 0; |
411 | |
391 | 412 | bitmap->width = width; |
|
Line 392... | Line 413... | ||
392 | dbgprintf("%s fail\n", __FUNCTION__); |
413 | bitmap->height = height; |
Line 393... | Line 414... | ||
393 | return ret; |
414 | bitmap->pitch = pitch; |
394 | }; |
415 | |
395 | 416 | ||
Line -... | Line 417... | ||
- | 417 | pbitmap->data = bitmap->uaddr; |
|
396 | pbitmap->data = bitmap->uaddr; |
418 | pbitmap->pitch = bitmap->pitch; |
397 | pbitmap->pitch = bitmap->pitch; |
419 | |
Line 398... | Line 420... | ||
398 | 420 | return 0; |
|
Line 445... | Line 467... | ||
445 | DRM_DEBUG("destroy context %x\n", context); |
467 | DRM_DEBUG("destroy context %x\n", context); |
446 | 468 | ||
Line 447... | Line 469... | ||
447 | context_map[context->slot] = NULL; |
469 | context_map[context->slot] = NULL; |
Line -... | Line 470... | ||
- | 470 | ||
- | 471 | FreeKernelSpace(context->cmd_buffer); |
|
448 | 472 | ||
449 | mutex_lock(&main_device->struct_mutex); |
473 | mutex_lock(&main_device->struct_mutex); |
450 | drm_gem_object_unreference(&context->obj->base); |
474 | drm_gem_object_unreference(&context->obj->base); |
Line 451... | Line 475... | ||
451 | mutex_unlock(&main_device->struct_mutex); |
475 | mutex_unlock(&main_device->struct_mutex); |