]> git.pld-linux.org Git - packages/kernel.git/blob - linux-2.4.20-nforce2.patch
- fix unresolved symbols in ipv6 netfilter
[packages/kernel.git] / linux-2.4.20-nforce2.patch
1 diff --unified --recursive --new-file linux/drivers/char/agp/agp.h linux-2.4.21-pr7/drivers/char/agp/agp.h
2 --- linux/drivers/char/agp/agp.h        2003-04-13 22:25:59.000000000 +0200
3 +++ linux-2.4.21-pr7/drivers/char/agp/agp.h     2003-05-06 20:56:58.000000000 +0200
4 @@ -271,6 +271,9 @@
5  #ifndef PCI_DEVICE_ID_AL_M1671_0
6  #define PCI_DEVICE_ID_AL_M1671_0       0x1671
7  #endif
8 +#ifndef PCI_DEVICE_ID_NV_NFORCE2_0
9 +#define PCI_DEVICE_ID_NV_NFORCE2_0     0x01e0
10 +#endif
11  
12  /* intel register */
13  #define INTEL_APBASE    0x10
14 @@ -412,6 +415,17 @@
15  #define SVWRKS_POSTFLUSH  0x14
16  #define SVWRKS_DIRFLUSH   0x0c
17  
18 +/* NVidia registers */
19 +#define NVIDIA_0_APBASE                0x10
20 +#define NVIDIA_0_APSIZE                0x80
21 +#define NVIDIA_1_WBC           0xf0
22 +#define NVIDIA_2_GARTCTRL      0xd0
23 +#define NVIDIA_2_APBASE                0xd8
24 +#define NVIDIA_2_APLIMIT       0xdc
25 +#define NVIDIA_2_ATTBASE(i)    (0xe0 + (i) * 4)
26 +#define NVIDIA_3_APBASE                0x50
27 +#define NVIDIA_3_APLIMIT       0x54
28 +
29  /* HP ZX1 SBA registers */
30  #define HP_ZX1_CTRL            0x200
31  #define HP_ZX1_IBASE           0x300
32 diff --unified --recursive --new-file linux/drivers/char/agp/agpgart_be.c linux-2.4.21-pr7/drivers/char/agp/agpgart_be.c
33 --- linux/drivers/char/agp/agpgart_be.c 2003-04-13 22:25:59.000000000 +0200
34 +++ linux-2.4.21-pr7/drivers/char/agp/agpgart_be.c      2003-05-06 20:56:58.000000000 +0200
35 @@ -3418,7 +3418,7 @@
36  } serverworks_private;
37  
38  static int serverworks_create_page_map(serverworks_page_map *page_map)
39 -{
40 +{      
41         int i;
42         int err = 0;
43  
44 @@ -4003,6 +4003,256 @@
45  
46  #endif /* CONFIG_AGP_SWORKS */
47  
48 +#ifdef CONFIG_AGP_NV
49 +
50 +static aper_size_info_8 nvidia_generic_sizes[5] =
51 +{
52 +       {512, 131072, 7, 0},
53 +       {256, 65536, 6, 8},
54 +       {128, 32768, 5, 12},
55 +       {64, 16384, 4, 14},
56 +       /* The 32M mode still requires a 64k gatt */
57 +       {32, 16384, 4, 15}
58 +};
59 +
60 +static gatt_mask nvidia_generic_masks[] =
61 +{
62 +       {0x00000001, 0}
63 +};
64 +
65 +static struct _nvidia_private {
66 +       struct pci_dev *dev_1;
67 +       struct pci_dev *dev_2;
68 +       struct pci_dev *dev_3;
69 +       volatile u32 *aperture;
70 +       int num_active_entries;
71 +       off_t pg_offset;
72 +       u32 wbc_mask;
73 +} nvidia_private;
74 +
75 +static int nvidia_fetch_size(void)
76 +{
77 +       int i;
78 +       u8 size_value;
79 +       aper_size_info_8 *values;
80 +
81 +       pci_read_config_byte(agp_bridge.dev, NVIDIA_0_APSIZE, &size_value);
82 +       size_value &= 0x0f;
83 +       values = A_SIZE_8(agp_bridge.aperture_sizes);
84 +
85 +       for (i = 0; i < agp_bridge.num_aperture_sizes; i++) {
86 +               if (size_value == values[i].size_value) {
87 +                       agp_bridge.previous_size =
88 +                               agp_bridge.current_size = (void *) (values + i);
89 +                       agp_bridge.aperture_size_idx = i;
90 +                       return values[i].size;
91 +               }
92 +       }
93 +
94 +       return 0;
95 +}
96 +
97 +static int nvidia_configure(void)
98 +{
99 +       int i, num_dirs;
100 +       u32 apbase, aplimit;
101 +       aper_size_info_8 *current_size;
102 +       u32 temp;
103 +
104 +       current_size = A_SIZE_8(agp_bridge.current_size);
105 +
106 +       /* aperture size */
107 +       pci_write_config_byte(agp_bridge.dev, NVIDIA_0_APSIZE,
108 +               current_size->size_value);
109 +
110 +    /* address to map to */
111 +       pci_read_config_dword(agp_bridge.dev, NVIDIA_0_APBASE, &apbase);
112 +       apbase &= PCI_BASE_ADDRESS_MEM_MASK;
113 +       agp_bridge.gart_bus_addr = apbase;
114 +       aplimit = apbase + (current_size->size * 1024 * 1024) - 1;
115 +       pci_write_config_dword(nvidia_private.dev_2, NVIDIA_2_APBASE, apbase);
116 +       pci_write_config_dword(nvidia_private.dev_2, NVIDIA_2_APLIMIT, aplimit);
117 +       pci_write_config_dword(nvidia_private.dev_3, NVIDIA_3_APBASE, apbase);
118 +       pci_write_config_dword(nvidia_private.dev_3, NVIDIA_3_APLIMIT, aplimit);
119 +
120 +       /* directory size is 64k */
121 +       num_dirs = current_size->size / 64;
122 +       nvidia_private.num_active_entries = current_size->num_entries;
123 +       nvidia_private.pg_offset = 0;
124 +       if (num_dirs == 0) {
125 +               num_dirs = 1;
126 +               nvidia_private.num_active_entries /= (64 / current_size->size);
127 +               nvidia_private.pg_offset = (apbase & (64 * 1024 * 1024 - 1) &
128 +                       ~(current_size->size * 1024 * 1024 - 1)) / PAGE_SIZE;
129 +       }
130 +
131 +       /* attbase */
132 +       for(i = 0; i < 8; i++) {
133 +               pci_write_config_dword(nvidia_private.dev_2, NVIDIA_2_ATTBASE(i),
134 +                       (agp_bridge.gatt_bus_addr + (i % num_dirs) * 64 * 1024) | 1);
135 +       }
136 +
137 +       /* gtlb control */
138 +       pci_read_config_dword(nvidia_private.dev_2, NVIDIA_2_GARTCTRL, &temp);
139 +       pci_write_config_dword(nvidia_private.dev_2, NVIDIA_2_GARTCTRL, temp | 0x11);
140 +
141 +       /* gart control */
142 +       pci_read_config_dword(agp_bridge.dev, NVIDIA_0_APSIZE, &temp);
143 +       pci_write_config_dword(agp_bridge.dev, NVIDIA_0_APSIZE, temp | 0x100);
144 +
145 +       /* map aperture */
146 +       nvidia_private.aperture =
147 +               (volatile u32 *) ioremap(apbase, 33 * PAGE_SIZE);
148 +
149 +       return 0;
150 +}
151 +
152 +static void nvidia_cleanup(void)
153 +{
154 +       aper_size_info_8 *previous_size;
155 +       u32 temp;
156 +
157 +       /* gart control */
158 +       pci_read_config_dword(agp_bridge.dev, NVIDIA_0_APSIZE, &temp);
159 +       pci_write_config_dword(agp_bridge.dev, NVIDIA_0_APSIZE, temp & ~(0x100));
160 +
161 +       /* gtlb control */
162 +       pci_read_config_dword(nvidia_private.dev_2, NVIDIA_2_GARTCTRL, &temp);
163 +       pci_write_config_dword(nvidia_private.dev_2, NVIDIA_2_GARTCTRL, temp & ~(0x11));
164 +
165 +       /* unmap aperture */
166 +       iounmap((void *) nvidia_private.aperture);
167 +
168 +       /* restore previous aperture size */
169 +       previous_size = A_SIZE_8(agp_bridge.previous_size);
170 +       pci_write_config_byte(agp_bridge.dev, NVIDIA_0_APSIZE,
171 +               previous_size->size_value);
172 +}
173 +
174 +static void nvidia_tlbflush(agp_memory * mem)
175 +{
176 +       unsigned long end;
177 +       u32 wbc_reg, temp;
178 +       int i;
179 +
180 +       /* flush chipset */
181 +       if (nvidia_private.wbc_mask) {
182 +               pci_read_config_dword(nvidia_private.dev_1, NVIDIA_1_WBC, &wbc_reg);
183 +               wbc_reg |= nvidia_private.wbc_mask;
184 +               pci_write_config_dword(nvidia_private.dev_1, NVIDIA_1_WBC, wbc_reg);
185 +
186 +               end = jiffies + 3*HZ;
187 +               do {
188 +                       pci_read_config_dword(nvidia_private.dev_1,
189 +                                       NVIDIA_1_WBC, &wbc_reg);
190 +                       if ((signed)(end - jiffies) <= 0) {
191 +                               printk(KERN_ERR
192 +                                   "TLB flush took more than 3 seconds.\n");
193 +                       }
194 +               } while (wbc_reg & nvidia_private.wbc_mask);
195 +       }
196 +
197 +       /* flush TLB entries */
198 +       for(i = 0; i < 32 + 1; i++)
199 +               temp = nvidia_private.aperture[i * PAGE_SIZE / sizeof(u32)];
200 +       for(i = 0; i < 32 + 1; i++)
201 +               temp = nvidia_private.aperture[i * PAGE_SIZE / sizeof(u32)];
202 +}
203 +
204 +static unsigned long nvidia_mask_memory(unsigned long addr, int type)
205 +{
206 +       /* Memory type is ignored */
207 +       return addr | agp_bridge.masks[0].mask;
208 +}
209 +
210 +#if 0
211 +extern int agp_memory_reserved;
212 +
213 +static int nvidia_insert_memory(agp_memory * mem, off_t pg_start, int type)
214 +{
215 +       int i, j;
216 +       
217 +       if ((type != 0) || (mem->type != 0))
218 +               return -EINVAL;
219 +       
220 +       if ((pg_start + mem->page_count) >
221 +               (nvidia_private.num_active_entries - agp_memory_reserved/PAGE_SIZE))
222 +               return -EINVAL;
223 +       
224 +       for(j = pg_start; j < (pg_start + mem->page_count); j++) {
225 +               if (!PGE_EMPTY(agp_bridge, agp_bridge->gatt_table[nvidia_private.pg_offset + j]))
226 +                       return -EBUSY;
227 +       }
228 +
229 +       if (mem->is_flushed == FALSE) {
230 +               global_cache_flush();
231 +               mem->is_flushed = TRUE;
232 +       }
233 +       for (i = 0, j = pg_start; i < mem->page_count; i++, j++)
234 +               agp_bridge->gatt_table[nvidia_private.pg_offset + j] = mem->memory[i];
235 +
236 +       agp_bridge->tlb_flush(mem);
237 +       return 0;
238 +}
239 +
240 +static int nvidia_remove_memory(agp_memory * mem, off_t pg_start, int type)
241 +{
242 +       int i;
243 +
244 +       if ((type != 0) || (mem->type != 0))
245 +               return -EINVAL;
246 +       
247 +       for (i = pg_start; i < (mem->page_count + pg_start); i++) {
248 +               agp_bridge->gatt_table[nvidia_private.pg_offset + i] =
249 +                   (unsigned long) agp_bridge->scratch_page;
250 +       }
251 +
252 +       agp_bridge->tlb_flush(mem);
253 +       return 0;
254 +}
255 +#endif
256 +
257 +static int __init nvidia_generic_setup (struct pci_dev *pdev)
258 +{
259 +       nvidia_private.dev_1 =
260 +               pci_find_slot((unsigned int)pdev->bus->number, PCI_DEVFN(0, 1));
261 +       nvidia_private.dev_2 =
262 +               pci_find_slot((unsigned int)pdev->bus->number, PCI_DEVFN(0, 2));
263 +       nvidia_private.dev_3 =
264 +               pci_find_slot((unsigned int)pdev->bus->number, PCI_DEVFN(30, 0));
265 +       nvidia_private.wbc_mask = 0x80000000; 
266 +       agp_bridge.masks = nvidia_generic_masks;
267 +       agp_bridge.aperture_sizes = (void *) nvidia_generic_sizes;
268 +       agp_bridge.size_type = U8_APER_SIZE;
269 +       agp_bridge.num_aperture_sizes = 5;
270 +       agp_bridge.needs_scratch_page = FALSE;
271 +       agp_bridge.configure = nvidia_configure;
272 +       agp_bridge.fetch_size = nvidia_fetch_size;
273 +       agp_bridge.cleanup = nvidia_cleanup;
274 +       agp_bridge.tlb_flush = nvidia_tlbflush;
275 +       agp_bridge.mask_memory = nvidia_mask_memory;
276 +       agp_bridge.agp_enable = agp_generic_agp_enable;
277 +       agp_bridge.cache_flush = global_cache_flush;
278 +       agp_bridge.create_gatt_table = agp_generic_create_gatt_table;
279 +       agp_bridge.free_gatt_table = agp_generic_free_gatt_table;
280 +       agp_bridge.insert_memory = agp_generic_insert_memory;
281 +       agp_bridge.remove_memory = agp_generic_remove_memory;
282 +       agp_bridge.alloc_by_type = agp_generic_alloc_by_type;
283 +       agp_bridge.free_by_type = agp_generic_free_by_type;
284 +       agp_bridge.agp_alloc_page = agp_generic_alloc_page;
285 +       agp_bridge.agp_destroy_page = agp_generic_destroy_page;
286 +       agp_bridge.suspend = agp_generic_suspend;
287 +       agp_bridge.resume = agp_generic_resume;
288 +       agp_bridge.cant_use_aperture = 0;
289 +       agp_bridge.dev_private_data = &nvidia_private;
290 +
291 +       return 0;
292 +       
293 +       (void) pdev; /* unused */
294 +}
295 +
296 +#endif /* CONFIG_AGP_NV */
297 +
298  #ifdef CONFIG_AGP_HP_ZX1
299  
300  #ifndef log2
301 @@ -4702,6 +4952,15 @@
302                 via_generic_setup },
303  #endif /* CONFIG_AGP_VIA */
304  
305 +#ifdef CONFIG_AGP_NV
306 +       { PCI_DEVICE_ID_NV_NFORCE2_0,
307 +               PCI_VENDOR_ID_NVIDIA,
308 +                NV_NFORCE_2,
309 +               "Nvidia",
310 +               "Nforce2",
311 +               nvidia_generic_setup },
312 +#endif /* CONFIG_AGP_NV */
313 +
314  #ifdef CONFIG_AGP_HP_ZX1
315         { PCI_DEVICE_ID_HP_ZX1_LBA,
316                 PCI_VENDOR_ID_HP,
317 diff -ur --exclude-from=non-source.list linux/drivers/char/Config.in linux-2.4.21-pre7/drivers/char/Config.in
318 --- linux/drivers/char/Config.in 2002-12-12 04:06:44.000000000 -0500
319 +++ linux-2.4.21-pr7/drivers/char/Config.in  2002-12-26 20:59:47.000000000 -0
320 500
321 @@ -265,6 +265,7 @@
322     bool '  Generic SiS support' CONFIG_AGP_SIS
323     bool '  ALI chipset support' CONFIG_AGP_ALI
324     bool '  Serverworks LE/HE support' CONFIG_AGP_SWORKS
325 +   bool '  Nvidia Nforce2 support' CONFIG_AGP_NV
326     if [ "$CONFIG_IA64" = "y" ]; then
327        bool '  HP ZX1 AGP support' CONFIG_AGP_HP_ZX1
328     fi
329 diff -ur --exclude-from=non-source.list  linux/drivers/include/linux/agp_backend.h linux-2.4.21-pr7/include/linux/agp_backend.h
330 --- linux/drivers/include/linux/agp_backend.h    2002-12-28 01:24
331 :46.000000000 -0500
332 +++ linux-2.4.21-pr7/include/linux/agp_backend.h     2002-12-28 01:40:43.000000000 -0500
333 @@ -79,6 +79,7 @@
334         SVWRKS_GENERIC,
335         HP_ZX1,
336         APPLE_UNINORTH,
337 +        NV_NFORCE_2,
338  };
339  
340  typedef struct _agp_version {
This page took 0.138891 seconds and 3 git commands to generate.