Rev 3260 | Rev 3290 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3260 | Rev 3263 | ||
---|---|---|---|
Line -... | Line 1... | ||
- | 1 | #include |
|
- | 2 | #include |
|
1 | #include |
3 | #include |
2 | #include |
4 | #include |
3 | #include "i915_drv.h" |
5 | #include "i915_drv.h" |
4 | #include "intel_drv.h" |
6 | #include "intel_drv.h" |
Line 55... | Line 57... | ||
55 | filep->pages[index] = page; |
57 | filep->pages[index] = page; |
56 | }; |
58 | }; |
Line 57... | Line 59... | ||
57 | 59 | ||
58 | return page; |
60 | return page; |
- | 61 | }; |
|
- | 62 | ||
- | 63 | unsigned long vm_mmap(struct file *file, unsigned long addr, |
|
- | 64 | unsigned long len, unsigned long prot, |
|
- | 65 | unsigned long flag, unsigned long offset) |
|
- | 66 | { |
|
- | 67 | char *mem, *ptr; |
|
- | 68 | int i; |
|
- | 69 | ||
- | 70 | if (unlikely(offset + PAGE_ALIGN(len) < offset)) |
|
- | 71 | return -EINVAL; |
|
- | 72 | if (unlikely(offset & ~PAGE_MASK)) |
|
- | 73 | return -EINVAL; |
|
- | 74 | ||
- | 75 | mem = UserAlloc(len); |
|
- | 76 | if(unlikely(mem == NULL)) |
|
- | 77 | return -ENOMEM; |
|
- | 78 | ||
- | 79 | for(i = offset, ptr = mem; i < offset+len; i+= 4096, ptr+= 4096) |
|
- | 80 | { |
|
- | 81 | struct page *page; |
|
- | 82 | ||
- | 83 | page = shmem_read_mapping_page_gfp(file, i/PAGE_SIZE,0); |
|
- | 84 | ||
- | 85 | if (unlikely(IS_ERR(page))) |
|
- | 86 | goto err; |
|
- | 87 | ||
- | 88 | MapPage(ptr, (addr_t)page, PG_SHARED|PG_UW); |
|
- | 89 | } |
|
- | 90 | ||
- | 91 | return (unsigned long)mem; |
|
- | 92 | err: |
|
- | 93 | UserFree(mem); |
|
- | 94 | return -ENOMEM; |
|
- | 95 | };>> |
|
- | 96 |