Annotation of /trunk/nvidia/1.0.6629/NVIDIA_kernel-1.0-6629-1201042.diff
Parent Directory | Revision Log
Revision 153 -
(hide annotations)
(download)
Tue May 8 20:52:56 2007 UTC (17 years ago) by niro
File size: 9445 byte(s)
Tue May 8 20:52:56 2007 UTC (17 years ago) by niro
File size: 9445 byte(s)
-import
1 | niro | 153 | diff -ru usr/src/nv/nv-linux.h usr/src/nv.1201042/nv-linux.h |
2 | --- usr/src/nv/nv-linux.h 2004-11-03 22:53:00.000000000 +0100 | ||
3 | +++ usr/src/nv.1201042/nv-linux.h 2005-01-26 01:56:26.000000000 +0100 | ||
4 | @@ -565,11 +565,6 @@ | ||
5 | #define PCI_CAP_ID_EXP 0x10 | ||
6 | #endif | ||
7 | |||
8 | -#if defined(KERNEL_2_6) && defined(AGPGART) | ||
9 | -typedef struct agp_kern_info agp_kern_info; | ||
10 | -typedef struct agp_memory agp_memory; | ||
11 | -#endif | ||
12 | - | ||
13 | #if defined(CONFIG_DEVFS_FS) | ||
14 | # if defined(KERNEL_2_6) | ||
15 | typedef void* devfs_handle_t; | ||
16 | diff -ru usr/src/nv/nv.c usr/src/nv.1201042/nv.c | ||
17 | --- usr/src/nv/nv.c 2004-11-03 22:53:00.000000000 +0100 | ||
18 | +++ usr/src/nv.1201042/nv.c 2005-01-26 01:56:28.000000000 +0100 | ||
19 | @@ -2987,32 +2987,47 @@ | ||
20 | */ | ||
21 | if ( (!NV_AGP_ENABLED(nv)) && (config & NVOS_AGP_CONFIG_NVAGP) ) | ||
22 | { | ||
23 | - /* make sure the user does not have agpgart loaded */ | ||
24 | - if (inter_module_get("drm_agp")) { | ||
25 | +#if defined(KERNEL_2_4) | ||
26 | + if (inter_module_get("drm_agp")) | ||
27 | + { | ||
28 | inter_module_put("drm_agp"); | ||
29 | - nv_printf(NV_DBG_WARNINGS, "NVRM: not using NVAGP, AGPGART is loaded!!\n"); | ||
30 | - } else { | ||
31 | -#if defined(CONFIG_X86_64) && defined(CONFIG_GART_IOMMU) | ||
32 | + nv_printf(NV_DBG_WARNINGS, "NVRM: not using NVAGP, AGPGART is loaded!\n"); | ||
33 | + return status; | ||
34 | + } | ||
35 | +#elif defined(AGPGART) | ||
36 | + int error; | ||
37 | + /* | ||
38 | + * We can only safely use NvAGP when no backend has been | ||
39 | + * registered with the AGPGART frontend. This condition | ||
40 | + * is only met when the acquire function returns -EINVAL. | ||
41 | + * | ||
42 | + * Other return codes indicate that a backend is present | ||
43 | + * and was either acquired, busy or else unavailable. | ||
44 | + */ | ||
45 | + if ((error = agp_backend_acquire()) != -EINVAL) | ||
46 | + { | ||
47 | + if (!error) agp_backend_release(); | ||
48 | nv_printf(NV_DBG_WARNINGS, | ||
49 | - "NVRM: not using NVAGP, kernel was compiled with GART_IOMMU support!!\n"); | ||
50 | -#else | ||
51 | - status = rm_init_agp(nv); | ||
52 | - if (status == RM_OK) | ||
53 | - { | ||
54 | - nv->agp_config = NVOS_AGP_CONFIG_NVAGP; | ||
55 | - nv->agp_status = NV_AGP_STATUS_ENABLED; | ||
56 | - } | ||
57 | + "NVRM: not using NVAGP, an AGPGART backend is loaded!\n"); | ||
58 | + return status; | ||
59 | + } | ||
60 | #endif | ||
61 | +#if defined(CONFIG_X86_64) && defined(CONFIG_GART_IOMMU) | ||
62 | + nv_printf(NV_DBG_WARNINGS, | ||
63 | + "NVRM: not using NVAGP, kernel was compiled with GART_IOMMU support!\n"); | ||
64 | +#else | ||
65 | + status = rm_init_agp(nv); | ||
66 | + if (status == RM_OK) | ||
67 | + { | ||
68 | + nv->agp_config = NVOS_AGP_CONFIG_NVAGP; | ||
69 | + nv->agp_status = NV_AGP_STATUS_ENABLED; | ||
70 | } | ||
71 | +#endif | ||
72 | } | ||
73 | |||
74 | if (NV_AGP_ENABLED(nv)) | ||
75 | old_error = 0; /* report new errors */ | ||
76 | |||
77 | - nv_printf(NV_DBG_SETUP, | ||
78 | - "NVRM: agp_init finished with status 0x%x and config %d\n", | ||
79 | - status, nv->agp_config); | ||
80 | - | ||
81 | return status; | ||
82 | } | ||
83 | |||
84 | @@ -3036,9 +3051,6 @@ | ||
85 | nv->agp_config = NVOS_AGP_CONFIG_DISABLE_AGP; | ||
86 | nv->agp_status = NV_AGP_STATUS_DISABLED; | ||
87 | |||
88 | - nv_printf(NV_DBG_SETUP, "NVRM: teardown finished with status 0x%x\n", | ||
89 | - status); | ||
90 | - | ||
91 | return status; | ||
92 | } | ||
93 | |||
94 | diff -ru usr/src/nv/os-agp.c usr/src/nv.1201042/os-agp.c | ||
95 | --- usr/src/nv/os-agp.c 2004-11-03 22:53:00.000000000 +0100 | ||
96 | +++ usr/src/nv.1201042/os-agp.c 2005-01-26 01:56:30.000000000 +0100 | ||
97 | @@ -25,6 +25,13 @@ | ||
98 | |||
99 | #ifdef AGPGART | ||
100 | |||
101 | +#if defined(KERNEL_2_6) | ||
102 | +typedef struct agp_kern_info agp_kern_info; | ||
103 | +typedef struct agp_memory agp_memory; | ||
104 | +#elif defined(KERNEL_2_4) | ||
105 | +const drm_agp_t *drm_agp_p; /* functions */ | ||
106 | +#endif | ||
107 | + | ||
108 | typedef struct { | ||
109 | agp_memory *ptr; | ||
110 | int num_pages; | ||
111 | @@ -45,7 +52,6 @@ | ||
112 | |||
113 | agp_kern_info agpinfo; | ||
114 | agp_gart gart; | ||
115 | -const drm_agp_t *drm_agp_p; | ||
116 | |||
117 | #if defined(CONFIG_MTRR) | ||
118 | #define MTRR_DEL(gart) if ((gart).mtrr > 0) mtrr_del((gart).mtrr, 0, 0); | ||
119 | @@ -53,6 +59,26 @@ | ||
120 | #define MTRR_DEL(gart) | ||
121 | #endif | ||
122 | |||
123 | +#if defined(KERNEL_2_6) | ||
124 | +#define NV_AGPGART_BACKEND_ACQUIRE(o) agp_backend_acquire() | ||
125 | +#define NV_AGPGART_BACKEND_ENABLE(o,mode) agp_enable(mode) | ||
126 | +#define NV_AGPGART_BACKEND_RELEASE(o) agp_backend_release() | ||
127 | +#define NV_AGPGART_COPY_INFO(o,p) agp_copy_info(p) | ||
128 | +#define NV_AGPGART_ALLOCATE_MEMORY(o,count,type) agp_allocate_memory(count,type) | ||
129 | +#define NV_AGPGART_FREE_MEMORY(o,p) agp_free_memory(p) | ||
130 | +#define NV_AGPGART_BIND_MEMORY(o,p,offset) agp_bind_memory(p,offset) | ||
131 | +#define NV_AGPGART_UNBIND_MEMORY(o,p) agp_unbind_memory(p) | ||
132 | +#elif defined(KERNEL_2_4) | ||
133 | +#define NV_AGPGART_BACKEND_ACQUIRE(o) ({ (o)->acquire(); 0; }) | ||
134 | +#define NV_AGPGART_BACKEND_ENABLE(o,mode) (o)->enable(mode) | ||
135 | +#define NV_AGPGART_BACKEND_RELEASE(o) ((o)->release()) | ||
136 | +#define NV_AGPGART_COPY_INFO(o,p) ({ (o)->copy_info(p); 0; }) | ||
137 | +#define NV_AGPGART_ALLOCATE_MEMORY(o,count,type) (o)->allocate_memory(count,type) | ||
138 | +#define NV_AGPGART_FREE_MEMORY(o,p) (o)->free_memory(p) | ||
139 | +#define NV_AGPGART_BIND_MEMORY(o,p,offset) (o)->bind_memory(p,offset) | ||
140 | +#define NV_AGPGART_UNBIND_MEMORY(o,p) (o)->unbind_memory(p) | ||
141 | +#endif | ||
142 | + | ||
143 | #endif /* AGPGART */ | ||
144 | |||
145 | BOOL KernInitAGP( | ||
146 | @@ -73,8 +99,10 @@ | ||
147 | |||
148 | memset( (void *) &gart, 0, sizeof(agp_gart)); | ||
149 | |||
150 | +#if defined(KERNEL_2_4) | ||
151 | if (!(drm_agp_p = inter_module_get_request("drm_agp", "agpgart"))) | ||
152 | return 1; | ||
153 | +#endif | ||
154 | |||
155 | /* NOTE: from here down, return an error code of '-1' | ||
156 | * that indicates that agpgart is loaded, but we failed to use it | ||
157 | @@ -82,11 +110,10 @@ | ||
158 | * the memory controller. | ||
159 | */ | ||
160 | |||
161 | - if (drm_agp_p->acquire()) | ||
162 | + if (NV_AGPGART_BACKEND_ACQUIRE(drm_agp_p)) | ||
163 | { | ||
164 | - nv_printf(NV_DBG_ERRORS, "NVRM: AGPGART: backend in use\n"); | ||
165 | - inter_module_put("drm_agp"); | ||
166 | - return -1; | ||
167 | + nv_printf(NV_DBG_INFO, "NVRM: AGPGART: no backend available\n"); | ||
168 | + goto bailout; | ||
169 | } | ||
170 | |||
171 | if (rm_read_registry_dword(nv, "NVreg", "ReqAGPRate", &agp_rate) == RM_ERROR) | ||
172 | @@ -101,21 +128,12 @@ | ||
173 | agp_fw = 1; | ||
174 | agp_fw &= 0x00000001; | ||
175 | |||
176 | -#if defined(KERNEL_2_4) | ||
177 | - /* | ||
178 | - * The original Linux 2.4 AGP GART driver interface declared copy_info to | ||
179 | - * return nothing. This changed in Linux 2.5, which reports unsupported | ||
180 | - * chipsets via this function. If this Linux 2.4 kernels behaves the same | ||
181 | - * way, we have no way to know. | ||
182 | - */ | ||
183 | - drm_agp_p->copy_info(&agpinfo); | ||
184 | -#else | ||
185 | - if (drm_agp_p->copy_info(&agpinfo)) { | ||
186 | + if (NV_AGPGART_COPY_INFO(drm_agp_p, &agpinfo)) | ||
187 | + { | ||
188 | nv_printf(NV_DBG_ERRORS, | ||
189 | "NVRM: AGPGART: kernel reports chipset as unsupported\n"); | ||
190 | goto failed; | ||
191 | } | ||
192 | -#endif | ||
193 | |||
194 | #ifdef CONFIG_MTRR | ||
195 | /* | ||
196 | @@ -170,7 +188,7 @@ | ||
197 | if (!(agp_rate & 0x00000004)) agpinfo.mode &= ~0x00000004; | ||
198 | if (!(agp_rate & 0x00000002)) agpinfo.mode &= ~0x00000002; | ||
199 | |||
200 | - drm_agp_p->enable(agpinfo.mode); | ||
201 | + NV_AGPGART_BACKEND_ENABLE(drm_agp_p, agpinfo.mode); | ||
202 | |||
203 | *ap_phys_base = (void*) agpinfo.aper_base; | ||
204 | *ap_mapped_base = (void*) gart.aperture; | ||
205 | @@ -182,8 +200,11 @@ | ||
206 | |||
207 | failed: | ||
208 | MTRR_DEL(gart); /* checks gart.mtrr */ | ||
209 | - drm_agp_p->release(); | ||
210 | + NV_AGPGART_BACKEND_RELEASE(drm_agp_p); | ||
211 | +bailout: | ||
212 | +#if defined(KERNEL_2_4) | ||
213 | inter_module_put("drm_agp"); | ||
214 | +#endif | ||
215 | |||
216 | return -1; | ||
217 | |||
218 | @@ -213,9 +234,10 @@ | ||
219 | NV_IOUNMAP(gart.aperture, RM_PAGE_SIZE); | ||
220 | } | ||
221 | |||
222 | - drm_agp_p->release(); | ||
223 | - | ||
224 | + NV_AGPGART_BACKEND_RELEASE(drm_agp_p); | ||
225 | +#if defined(KERNEL_2_4) | ||
226 | inter_module_put("drm_agp"); | ||
227 | +#endif | ||
228 | |||
229 | if (rm_clear_agp_bitmap(nv, &bitmap)) | ||
230 | { | ||
231 | @@ -244,7 +266,6 @@ | ||
232 | return RM_ERROR; | ||
233 | #else | ||
234 | agp_memory *ptr; | ||
235 | - int err; | ||
236 | agp_priv_data *data; | ||
237 | RM_STATUS status; | ||
238 | |||
239 | @@ -262,7 +283,7 @@ | ||
240 | return RM_ERROR; | ||
241 | } | ||
242 | |||
243 | - ptr = drm_agp_p->allocate_memory(PageCount, AGP_NORMAL_MEMORY); | ||
244 | + ptr = NV_AGPGART_ALLOCATE_MEMORY(drm_agp_p, PageCount, AGP_NORMAL_MEMORY); | ||
245 | if (ptr == NULL) | ||
246 | { | ||
247 | *pAddress = (void*) 0; | ||
248 | @@ -270,8 +291,7 @@ | ||
249 | return RM_ERR_NO_FREE_MEM; | ||
250 | } | ||
251 | |||
252 | - err = drm_agp_p->bind_memory(ptr, *Offset); | ||
253 | - if (err) | ||
254 | + if (NV_AGPGART_BIND_MEMORY(drm_agp_p, ptr, *Offset)) | ||
255 | { | ||
256 | // this happens a lot when the aperture itself fills up.. | ||
257 | // not a big deal, so don't alarm people with an error message | ||
258 | @@ -280,14 +300,11 @@ | ||
259 | goto fail; | ||
260 | } | ||
261 | |||
262 | - /* return the agp aperture address */ | ||
263 | - *pAddress = (void *) (agpinfo.aper_base + (*Offset << PAGE_SHIFT)); | ||
264 | - | ||
265 | status = os_alloc_mem((void **)&data, sizeof(agp_priv_data)); | ||
266 | if (status != RM_OK) | ||
267 | { | ||
268 | nv_printf(NV_DBG_ERRORS, "NVRM: AGPGART: memory allocation failed\n"); | ||
269 | - drm_agp_p->unbind_memory(ptr); | ||
270 | + NV_AGPGART_UNBIND_MEMORY(drm_agp_p, ptr); | ||
271 | goto fail; | ||
272 | } | ||
273 | |||
274 | @@ -302,7 +319,7 @@ | ||
275 | return RM_OK; | ||
276 | |||
277 | fail: | ||
278 | - drm_agp_p->free_memory(ptr); | ||
279 | + NV_AGPGART_FREE_MEMORY(drm_agp_p, ptr); | ||
280 | *pAddress = (void*) 0; | ||
281 | |||
282 | return RM_ERROR; | ||
283 | @@ -342,7 +359,7 @@ | ||
284 | { | ||
285 | nv_printf(NV_DBG_ERRORS, "NVRM: AGPGART: unable to remap %lu pages\n", | ||
286 | (unsigned long)agp_data->num_pages); | ||
287 | - drm_agp_p->unbind_memory(agp_data->ptr); | ||
288 | + NV_AGPGART_UNBIND_MEMORY(drm_agp_p, agp_data->ptr); | ||
289 | goto fail; | ||
290 | } | ||
291 | |||
292 | @@ -441,8 +458,8 @@ | ||
293 | { | ||
294 | size_t pages = ptr->page_count; | ||
295 | |||
296 | - drm_agp_p->unbind_memory(ptr); | ||
297 | - drm_agp_p->free_memory(ptr); | ||
298 | + NV_AGPGART_UNBIND_MEMORY(drm_agp_p, ptr); | ||
299 | + NV_AGPGART_FREE_MEMORY(drm_agp_p, ptr); | ||
300 | |||
301 | nv_printf(NV_DBG_INFO, "NVRM: AGPGART: freed %ld pages\n", | ||
302 | (unsigned long)pages); |
Properties
Name | Value |
---|---|
svn:executable | * |