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