Contents of /trunk/ati-drivers/patches/fglrx-2.6-pagetable.patch
Parent Directory | Revision Log
Revision 144 -
(show annotations)
(download)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 5027 byte(s)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 5027 byte(s)
-import
1 | --- lib/modules/fglrx/build_mod/firegl_public.c.orig 2005-02-05 08:18:17.301667616 -0500 |
2 | +++ lib/modules/fglrx/build_mod/firegl_public.c 2005-02-05 08:45:50.522339872 -0500 |
3 | @@ -1659,13 +1659,22 @@ |
4 | { |
5 | unsigned long pte_linear; |
6 | pgd_t* pgd_p; |
7 | +#if LINUX_VERSION_CODE > 0x02060a /* KERNEL_VERSION(2,6,10) */ |
8 | + pud_t* pud_p; |
9 | +#endif |
10 | pmd_t* pmd_p; |
11 | pte_t* pte_p; |
12 | pte_t pte; |
13 | |
14 | pte_linear = VMALLOC_VMADDR(virtual_addr); // convert to pte linear address (x86 => nop) |
15 | pgd_p = pgd_offset(mm, pte_linear); |
16 | +#if LINUX_VERSION_CODE > 0x02060a /* KERNEL_VERSION(2,6,10) */ |
17 | + pud_p = pud_offset(pgd_p, pte_linear); |
18 | + pmd_p = pmd_offset(pud_p, pte_linear); |
19 | +#else |
20 | pmd_p = pmd_offset(pgd_p, pte_linear); |
21 | +#endif |
22 | + |
23 | #ifndef FGL_ATOMIC_PTE |
24 | #if LINUX_VERSION_CODE > 0x020500 |
25 | pte_p = pte_offset_kernel(pmd_p, pte_linear); |
26 | @@ -2085,6 +2094,9 @@ |
27 | unsigned long address) |
28 | { |
29 | pgd_t* pgd_p; |
30 | +#if LINUX_VERSION_CODE > 0x02060a /* KERNEL_VERSION(2,6,10) */ |
31 | + pud_t* pud_p; |
32 | +#endif |
33 | pmd_t* pmd_p; |
34 | pte_t* pte_p; |
35 | pte_t pte; |
36 | @@ -2185,7 +2197,12 @@ |
37 | /* alternatively we could generate a NOPAGE_OOM "out of memory" */ |
38 | } |
39 | /* locate medium level page table (x86 => nop) */ |
40 | +#if LINUX_VERSION_CODE > 0x02060a /* KERNEL_VERSION(2,6,10) */ |
41 | + pud_p = pud_offset(pgd_p, pte_linear); |
42 | + pmd_p = pmd_offset(pud_p, pte_linear); |
43 | +#else |
44 | pmd_p = pmd_offset(pgd_p, pte_linear); |
45 | +#endif |
46 | if (!pmd_present(*pmd_p)) |
47 | { |
48 | __KE_ERROR("FATAL ERROR: User queue buffer not present! (pmd)\n"); |
49 | @@ -2549,13 +2566,21 @@ |
50 | { |
51 | unsigned long pte_linear; |
52 | pgd_t* pgd_p; |
53 | +#if LINUX_VERSION_CODE > 0x02060a /* KERNEL_VERSION(2,6,10) */ |
54 | + pud_t* pud_p; |
55 | +#endif |
56 | pmd_t* pmd_p; |
57 | pte_t* pte_p; |
58 | pte_t pte; |
59 | |
60 | pte_linear = VMALLOC_VMADDR(virtual_addr); // convert to pte linear address (x86 => nop) |
61 | pgd_p = pgd_offset(vma->vm_mm, pte_linear); |
62 | +#if LINUX_VERSION_CODE > 0x02060a /* KERNEL_VERSION(2,6,10) */ |
63 | + pud_p = pud_offset(pgd_p, pte_linear); |
64 | + pmd_p = pmd_offset(pud_p, pte_linear); |
65 | +#else |
66 | pmd_p = pmd_offset(pgd_p, pte_linear); |
67 | +#endif |
68 | #ifndef FGL_ATOMIC_PTE |
69 | #if LINUX_VERSION_CODE > 0x020500 |
70 | pte_p = pte_offset_kernel(pmd_p, pte_linear); |
71 | @@ -2704,13 +2729,13 @@ |
72 | #endif /* __ia64__ */ |
73 | vma->vm_flags |= VM_IO; /* not in core dump */ |
74 | } |
75 | - if (remap_page_range(FGL_VMA_API_PASS |
76 | + if (remap_pfn_range(FGL_VMA_API_PASS |
77 | vma->vm_start, |
78 | - __ke_vm_offset(vma), |
79 | + __ke_vm_offset(vma) >> PAGE_SHIFT, |
80 | vma->vm_end - vma->vm_start, |
81 | vma->vm_page_prot)) |
82 | { |
83 | - __KE_DEBUG("remap_page_range failed\n"); |
84 | + __KE_DEBUG("remap_pfn_range failed\n"); |
85 | return -EAGAIN; |
86 | } |
87 | vma->vm_flags |= VM_SHM | VM_RESERVED; /* Don't swap */ |
88 | @@ -2771,13 +2796,13 @@ |
89 | { |
90 | if (__ke_vm_offset(vma) >= __pa(high_memory)) |
91 | vma->vm_flags |= VM_IO; /* not in core dump */ |
92 | - if (remap_page_range(FGL_VMA_API_PASS |
93 | + if (remap_pfn_range(FGL_VMA_API_PASS |
94 | vma->vm_start, |
95 | - __ke_vm_offset(vma), |
96 | + __ke_vm_offset(vma) >> PAGE_SHIFT, |
97 | vma->vm_end - vma->vm_start, |
98 | vma->vm_page_prot)) |
99 | { |
100 | - __KE_DEBUG("remap_page_range failed\n"); |
101 | + __KE_DEBUG("remap_pfn_range failed\n"); |
102 | return -EAGAIN; |
103 | } |
104 | #ifdef __x86_64__ |
105 | @@ -2808,13 +2833,13 @@ |
106 | { |
107 | if (__ke_vm_offset(vma) >= __pa(high_memory)) |
108 | vma->vm_flags |= VM_IO; /* not in core dump */ |
109 | - if (remap_page_range(FGL_VMA_API_PASS |
110 | + if (remap_pfn_range(FGL_VMA_API_PASS |
111 | vma->vm_start, |
112 | - __ke_vm_offset(vma), |
113 | + __ke_vm_offset(vma) >> PAGE_SHIFT, |
114 | vma->vm_end - vma->vm_start, |
115 | vma->vm_page_prot)) |
116 | { |
117 | - __KE_DEBUG("remap_page_range failed\n"); |
118 | + __KE_DEBUG("remap_pfn_range failed\n"); |
119 | return -EAGAIN; |
120 | } |
121 | #ifdef __x86_64__ |
122 | @@ -2858,6 +2883,37 @@ |
123 | |
124 | #if LINUX_VERSION_CODE >= 0x020400 |
125 | |
126 | +#if LINUX_VERSION_CODE >= 0x02060b |
127 | + |
128 | +typedef struct { |
129 | + void (*free_memory)(struct agp_memory *); |
130 | + struct agp_memory * (*allocate_memory)(size_t, u32); |
131 | + int (*bind_memory)(struct agp_memory *, off_t); |
132 | + int (*unbind_memory)(struct agp_memory *); |
133 | + void (*enable)(u32); |
134 | + int (*acquire)(void); |
135 | + void (*release)(void); |
136 | + int (*copy_info)(struct agp_kern_info *); |
137 | +} drm_agp_t; |
138 | + |
139 | +static const drm_agp_t drm_agp = { |
140 | + &agp_free_memory, |
141 | + &agp_allocate_memory, |
142 | + &agp_bind_memory, |
143 | + &agp_unbind_memory, |
144 | + &agp_enable, |
145 | + &agp_backend_acquire, |
146 | + &agp_backend_release, |
147 | + &agp_copy_info |
148 | +}; |
149 | +#undef DRM_AGP_MODULE_GET |
150 | +#undef DRM_AGP_MODULE_PUT |
151 | + |
152 | +#define DRM_AGP_MODULE_GET &drm_agp |
153 | +#define DRM_AGP_MODULE_PUT |
154 | + |
155 | +#endif |
156 | + |
157 | static const drm_agp_t *drm_agp_module_stub = NULL; |
158 | |
159 | #define AGP_FUNCTIONS 8 |
Properties
Name | Value |
---|---|
svn:executable | * |