Rev 2005 | Rev 2997 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2005 | Rev 2007 | ||
---|---|---|---|
Line 292... | Line 292... | ||
292 | 292 | ||
Line 293... | Line 293... | ||
293 | return 0; |
293 | return 0; |
294 | } |
294 | } |
Line -... | Line 295... | ||
- | 295 | ||
- | 296 | int radeon_bo_user_map(struct radeon_bo *bo, void **ptr) |
|
- | 297 | { |
|
- | 298 | bool is_iomem; |
|
- | 299 | ||
- | 300 | if (bo->uptr) { |
|
- | 301 | if (ptr) { |
|
- | 302 | *ptr = bo->uptr; |
|
- | 303 | } |
|
- | 304 | return 0; |
|
- | 305 | } |
|
- | 306 | ||
- | 307 | if(bo->domain & RADEON_GEM_DOMAIN_VRAM) |
|
- | 308 | { |
|
- | 309 | return -1; |
|
- | 310 | } |
|
- | 311 | else |
|
- | 312 | { |
|
- | 313 | bo->uptr = UserAlloc(bo->tbo.num_pages << PAGE_SHIFT); |
|
- | 314 | if(bo->uptr) |
|
- | 315 | { |
|
- | 316 | u32_t *src, *dst; |
|
- | 317 | int count; |
|
- | 318 | src = &((u32_t*)page_tabs)[(u32_t)bo->kptr >> 12]; |
|
- | 319 | dst = &((u32_t*)page_tabs)[(u32_t)bo->uptr >> 12]; |
|
- | 320 | count = bo->tbo.num_pages; |
|
- | 321 | ||
- | 322 | while(count--) |
|
- | 323 | { |
|
- | 324 | *dst++ = (0xFFFFF000 & *src++) | 0x207 ; // map as shared page |
|
- | 325 | }; |
|
- | 326 | } |
|
- | 327 | else |
|
- | 328 | return -1; |
|
- | 329 | } |
|
- | 330 | ||
- | 331 | if (ptr) { |
|
- | 332 | *ptr = bo->uptr; |
|
- | 333 | } |
|
- | 334 | ||
- | 335 | return 0; |
|
- | 336 | } |
|
295 | 337 | ||
296 | void radeon_bo_kunmap(struct radeon_bo *bo) |
338 | void radeon_bo_kunmap(struct radeon_bo *bo) |
297 | { |
339 | { |
298 | if (bo->kptr == NULL) |
340 | if (bo->kptr == NULL) |