|
|
1.1 root 1: /*
2: * OpenBIOS - free your system!
3: * ( firmware/flash device driver for Linux )
4: *
5: * pcisets.c - support functions to map flash devices to kernel space
6: *
7: * This program is part of a free implementation of the IEEE 1275-1994
8: * Standard for Boot (Initialization Configuration) Firmware.
9: *
10: * Copyright (C) 1998-2004 Stefan Reinauer, <[email protected]>
11: *
12: * This program is free software; you can redistribute it and/or modify
13: * it under the terms of the GNU General Public License as published by
14: * the Free Software Foundation; version 2 of the License.
15: *
16: * This program is distributed in the hope that it will be useful,
17: * but WITHOUT ANY WARRANTY; without even the implied warranty of
18: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19: * GNU General Public License for more details.
20: *
21: * You should have received a copy of the GNU General Public License
22: * along with this program; if not, write to the Free Software
23: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
24: *
25: */
26:
27: #include <linux/config.h>
28: #include <linux/version.h>
29: #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
30: #ifdef MODVERSIONS
31: #include <linux/modversions.h>
32: #endif
33: #endif
34: #include <linux/pci.h>
35: #include <linux/types.h>
36: #include <linux/ioport.h>
37: #include <asm/io.h>
38: #ifdef __alpha__
39: #include <asm/hwrpb.h>
40: #endif
41:
42: #include "bios.h"
43: #include "flashchips.h"
44: #include "pcisets.h"
45: #include "programming.h"
46:
47: #ifdef CONFIG_PCI
48: #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
49: #define pci_find_class pci_get_class
50: #endif
51:
52: #define pci_id(dev) ((dev->vendor<<16) | (dev->device))
53: struct pci_dev *hostbridge=NULL;
54: static unsigned char pci_dummy[4];
55:
56: /*
57: * ******************************************
58: *
59: * own pci/shadow handling; We can't use
60: * the PCI bios here as it would sweep
61: * itself out!
62: *
63: * ******************************************
64: */
65:
66: static int pci_read(struct pci_dev *dev, unsigned char where)
67: {
68: if (!dev) return 0;
69:
70: outl((0x80000000 | (dev->bus->number << 16) | (dev->devfn << 8) |
71: (where & ~3)), 0xCF8);
72: mb();
73: return inb(0xCFC + (where&3));
74: }
75:
76: static void pci_write(struct pci_dev *dev, unsigned char where, unsigned char value)
77: {
78: if (!dev) return;
79: outl((0x80000000 | (dev->bus->number << 16) | (dev->devfn << 8) |
80: (where & ~3)), 0xCF8);
81: mb();
82: outb(value, 0xCFC + (where&3));
83: }
84:
85: /*
86: * standard system firmware adress emitter
87: */
88:
89: static int system_memarea(unsigned long *address, unsigned long *size,
90: struct pci_dev *dev)
91: {
92: #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
93: const struct pci_driver *drv;
94: drv = pci_dev_driver(dev);
95: #endif
96: #ifndef __alpha__
97: *address=0xffe00000;
98: *size=2048*1024;
99: #else
100: *address=0xfffffffffc000000;
101: *size=512*1024;
102: #endif
103: printk(KERN_INFO "BIOS: Probing system firmware with "
104: "%ldk rom area @0x%lx (%04x:%04x)\n",
105: (*size>>10), *address, dev->vendor, dev->device );
106: #ifdef CONFIG_PCI_NAMES
107: #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
108: if (drv) printk(KERN_INFO "BIOS: System device is %s\n", drv->name);
109: #else
110: printk(KERN_INFO "BIOS: System device is %s\n", dev->name);
111: #endif
112: #endif
113: return 0;
114: }
115:
116: static int memarea_256k(unsigned long *address, unsigned long *size,
117: struct pci_dev *dev)
118: {
119: #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
120: const struct pci_driver *drv;
121: drv = pci_dev_driver(dev);
122: #endif
123: *address=0xfffc0000;
124: *size=256*1024;
125: printk(KERN_INFO "BIOS: Probing system firmware with "
126: "%ldk rom area @0x%lx (%04x:%04x)\n",
127: (*size>>10), *address, dev->vendor, dev->device );
128: #ifdef CONFIG_PCI_NAMES
129: #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
130: if (drv) printk(KERN_INFO "BIOS: System device is %s\n", drv->name);
131: #else
132: printk(KERN_INFO "BIOS: System device is %s\n", dev->name);
133: #endif
134: #endif
135: return 0;
136: }
137:
138: /*
139: * standard address emitter for normal pci devices
140: */
141:
142: static int default_memarea(unsigned long *address, unsigned long *size,
143: struct pci_dev *dev)
144: {
145: #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
146: *address=dev->resource[PCI_ROM_RESOURCE].start;
147: *size=dev->resource[PCI_ROM_RESOURCE].end - *address + 1;
148: #else
149: *address=0xdeadbeef;
150: *size=0x00000000;
151: #endif
152: if (*address && (signed long)*address!=-1 ) {
153: printk (KERN_DEBUG "BIOS: Probing PCI device %02x:%02x.%01x "
154: "with %ldk rom area @ 0x%lx\n",
155: dev->bus->number, PCI_SLOT(dev->devfn),
156: PCI_FUNC(dev->devfn),
157: (*size>>10), *address);
158: return 1;
159: }
160: *address=0xdeadbeef;
161: *size=0x00000000;
162: return 0;
163: }
164:
165: #ifdef __alpha__
166: void probe_alphafw(void)
167: {
168: switch(hwrpb->sys_type) {
169: case ST_DEC_EB164:
170: /* Fall through */
171: break;
172: case ST_DTI_RUFFIAN:
173: /* case ST_DEC_TSUNAMI: // This crashes for whatever reason */
174: probe_pcibus();
175: return;
176: default:
177: printk(KERN_INFO "BIOS: unsupported alpha motherboard.\n");
178: return;
179: }
180:
181: /* LX164 has system variation 0x2000 */
182: if (hwrpb->sys_variation == 0x2000)
183: printk(KERN_INFO "BIOS: LX164 detected\n");
184: else
185: printk(KERN_INFO "BIOS: EB164 board detected. Sys_var=0x%lx\n",
186: hwrpb->sys_variation);
187:
188: flashdevices[flashcount].data=(void *)0xfff80000;
189: flash_probe_area(0xfff80000, 512*1024, 0);
190: }
191: #endif
192:
193: #if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
194: #define pci_for_each_dev(dev) \
195: for(dev = pci_devices->next; dev != pci_devices; dev = dev->next)
196: #endif
197: #if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,74)
198: #define pci_for_each_dev(dev) \
199: while ((dev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, dev)))
200: #endif
201:
202: #define DEVICE(x) devices[g].pcidevs[x]
203: void probe_pcibus(void)
204: {
205: struct pci_dev *dev=NULL;
206: unsigned int g=0, d, map_always=0;
207: unsigned long addr, size;
208:
209: /* Look whether we find something supported */
210: pci_for_each_dev(dev) {
211: /* Search all device groups */
212: for (g=0; DEVICE(0); g++ ) {
213: /* Search all devices in group */
214: for (d=0; DEVICE(d) && DEVICE(d) != pci_id(dev); d++);
215: if(DEVICE(d) == pci_id(dev))
216: break;
217: }
218:
219: flashdevices[flashcount].idx=g;
220: flashdevices[flashcount].data=dev;
221:
222: map_always=devices[g].memarea(&addr, &size, dev);
223: #ifdef DEBUG_PCI
224: printk(KERN_INFO "BIOS: device=%x, cs=%d addr=%lx, size=%ld\n",
225: pci_id(dev),g, addr,size);
226: #endif
227: if(!size)
228: continue;
229:
230: flash_probe_area(addr, size, map_always);
231: }
232: }
233: #undef DEVICE
234:
235: /* Intel 430, 440, 450 PCI Chipsets */
236:
237: #define CURRENT ((struct pci_dev *)flashdevices[currflash].data)
238: static int gporeg_save;
239: static void intel4x0_activate(void)
240: {
241: #ifdef __ABIT_BE6II_v11__
242: #define GPONUM 26
243: #define GPOREG_OFFSET 0x34
244: register unsigned int gporeg;
245: /* Read Bus 0, Dev 7, Func 3, Reg 40-44 (Power Managment Base Address) */
246: outl (0x80003B40, 0x0CF8);
247: /* calc General Purpose Output Register I/O port address */
248: gporeg = (0xFFFFFFFE & inl (0x0CFC)) + GPOREG_OFFSET;
249:
250: /* Set GPO26 to 0 */
251: gporeg_save=inl(gporeg);
252: printk(KERN_DEBUG "BIOS: GPOREG=0x%08x, mask=0x%x, new=0x%x\n",gporeg_save, (~(1<<GPONUM)), gporeg_save&(~(1<<GPONUM)));
253: outl (gporeg_save&(~(1<<GPONUM)), gporeg);
254: #undef GPOREG_OFFSET
255: #endif
256:
257: pci_dummy[0]=pci_read(CURRENT, 0x4e);
258: pci_dummy[1]=pci_read(CURRENT, 0x4f);
259:
260: /* Write and 128k enable */
261: pci_dummy[2]=0x44; //0xC4
262:
263: if (CURRENT->device < 0x7000) {
264: /* enable 512k */
265: pci_dummy[2]|=0x80;
266: } else {
267: /* enable 1M */
268: pci_write(CURRENT, 0x4f, pci_dummy[1] | 0x02);
269: }
270:
271: pci_write(CURRENT, 0x4e, pci_dummy[0] | pci_dummy[2]);
272:
273: // printk(KERN_DEBUG "BIOS: isa bridge cfg is 0x%02x\n", pci_dummy[0]);
274: }
275:
276: static void intel4x0_deactivate(void)
277: {
278: #ifdef __ABIT_BE6II_v11__
279: #define GPOREG_OFFSET 0x34
280: register unsigned long gporeg;
281:
282: /* Read Bus 0, Dev 7, Func 3, Reg 40-44 (Power Managment Base Address) */
283: outl (0x80003B40, 0x0CF8);
284: /* calc General Purpose Output Register I/O port address */
285: gporeg = (0xFFFFFFFE & inl (0x0CFC)) + GPOREG_OFFSET;
286:
287: /* Reset GBO26 */
288: outl (gporeg_save, gporeg);
289: #undef GPOREG_OFFSET
290: #endif
291: pci_write(CURRENT, 0x4e, pci_dummy[0]);
292: pci_write(CURRENT, 0x4f, pci_dummy[1]);
293: }
294:
295: /* preliminary support for Intel 830 mobile chipset. untested!! */
296:
297: static void intel8x0_activate(void)
298: {
299: pci_dummy[0]=pci_read(CURRENT, 0x4e);
300: pci_dummy[1]=pci_read(CURRENT, 0xe3);
301: pci_write(CURRENT, 0x4e, pci_dummy[0] | 0x01);
302: pci_write(CURRENT, 0xe3, pci_dummy[1] | 0xC0);
303:
304: // We don't have to change FWH_DEC_EN1, as it decodes
305: // all memory areas to the FWH per default.
306: // We try it anyways.
307:
308: // FWH_DEC_EN1: isabridge, 0xe3, 8bit, default 0xff.
309: // FWH_SEL1: isabridge, 0xe8, 32bit, default 0x00112233 (??)
310:
311: //printk(KERN_DEBUG "BIOS: BIOS_CNTL is 0x%02x\n", pci_dummy[0]);
312: //printk(KERN_DEBUG "BIOS: FWH_DEC_EN1 is 0x%02x\n", pci_dummy[1]);
313: }
314:
315: static void intel8x0_deactivate(void)
316: {
317: pci_write(CURRENT, 0x4e, pci_dummy[0]);
318: pci_write(CURRENT, 0xe3, pci_dummy[1]);
319: }
320:
321: /* AMD 760/756/751 & VIA (M)VP3 */
322:
323: static void amd7xx_activate(void)
324: {
325: pci_dummy[0]=pci_read(CURRENT, 0x40); /* IO Control 1 */
326: pci_dummy[1]=pci_read(CURRENT, 0x43); /* SEGEN */
327:
328: pci_write(CURRENT, 0x40, pci_dummy[0] | 0x01);
329: pci_write(CURRENT, 0x43, pci_dummy[1] | 0x80);
330: }
331:
332: static void amd7xx_deactivate(void)
333: {
334: pci_write(CURRENT, 0x43, pci_dummy[1]);
335: pci_write(CURRENT, 0x40, pci_dummy[0]);
336: }
337:
338: static void viamvp3_activate(void)
339: {
340: hostbridge = pci_find_class(PCI_CLASS_BRIDGE_HOST<<8,NULL);
341: if (!hostbridge)
342: return;
343: pci_dummy[0]=pci_read(hostbridge,0x52);
344: pci_write(hostbridge, 0x52, pci_dummy[0] & 0xcf);
345: pci_dummy[1]=pci_read(hostbridge, 0x63);
346: pci_write(hostbridge, 0x63, pci_dummy[1] & 0x0f);
347: pci_dummy[2]=pci_read(CURRENT,0x43);
348: pci_write(CURRENT, 0x43, pci_dummy[2] |0xF8);
349:
350: pci_write(CURRENT, 0x40, pci_read(CURRENT,0x40) | 0x01);
351: }
352:
353: static void viamvp3_deactivate(void)
354: {
355: if (!hostbridge)
356: return;
357: pci_write(CURRENT, 0x40, pci_read(CURRENT,0x40) & 0xfe);
358: pci_write(hostbridge, 0x63, pci_dummy[1]);
359: pci_write(hostbridge, 0x52, pci_dummy[0]);
360: pci_write(CURRENT, 0x43, pci_dummy[2]);
361: }
362:
363: /* SiS works with 530/5595 chipsets */
364:
365: static void sis_activate(void)
366: {
367: char b;
368: hostbridge = pci_find_class(PCI_CLASS_BRIDGE_HOST<<8,NULL);
369: if (!hostbridge)
370: return;
371:
372: pci_dummy[0]=pci_read(hostbridge, 0x76);
373: pci_dummy[1]=readb(0x51);
374: pci_dummy[2]=pci_read(CURRENT, 0x40);
375: pci_dummy[3]=pci_read(CURRENT, 0x45);
376:
377: /* disable shadow */
378: pci_write(hostbridge, 0x76, 0x00);
379: /* disable cache */
380: writeb(pci_dummy[1] & 0x7f, 0x51);
381:
382: /* Enable 0xFFF8000~0xFFFF0000 decoding on SiS 540/630 */
383: pci_write(CURRENT, 0x40, pci_dummy[2]|0x0b);
384: /* Flash write enable on SiS 540/630 */
385: pci_write(CURRENT, 0x45, pci_dummy[3]|0x40);
386:
387: /* The same thing on SiS 950 SuperIO side */
388: outb(0x87, 0x2e);
389: outb(0x01, 0x2e);
390: outb(0x55, 0x2e);
391: outb(0x55, 0x2e);
392: if (inb(0x2f) != 0x87) {
393: /* printf("Can not access SiS 950\n"); */
394: return;
395: }
396:
397: outb(0x24, 0x2e);
398: b = inb(0x2f) | 0xfc;
399: outb(0x24, 0x2e);
400: outb(b, 0x2f);
401: outb(0x02, 0x2e);
402: outb(0x02, 0x2f);
403: }
404:
405: static void sis_deactivate(void)
406: {
407: if (!hostbridge)
408: return;
409:
410: /* Restore PCI Registers */
411: pci_write(hostbridge, 0x76, pci_dummy[0]);
412: pci_write(CURRENT, 0x45, pci_dummy[2]);
413: pci_write(CURRENT, 0x45, pci_dummy[3]);
414: /* restore cache to original status */
415: writeb(pci_dummy[1], 0x51);
416: }
417:
418: /* UMC 486 Chipset 8881/886a */
419:
420: static void umc_activate(void)
421: {
422: hostbridge = pci_find_class(PCI_CLASS_BRIDGE_HOST<<8,NULL);
423: if (!hostbridge)
424: return;
425:
426: pci_dummy[0]=pci_read(hostbridge, 0x54);
427: pci_dummy[1]=pci_read(hostbridge, 0x55);
428:
429: pci_write(hostbridge, 0x54, 0x00);
430: pci_write(hostbridge, 0x55, 0x40);
431:
432: pci_write(CURRENT,0x47, pci_read(CURRENT,0x47) & ~0x40);
433: }
434:
435: static void umc_deactivate(void)
436: {
437: if (!hostbridge)
438: return;
439:
440: pci_write(CURRENT, 0x47, pci_read(CURRENT,0x47) | 0x40);
441:
442: pci_write(hostbridge, 0x54, pci_dummy[0]);
443: pci_write(hostbridge, 0x55, pci_dummy[1]);
444: }
445:
446: /* CS5530 functions */
447:
448: static void cs5530_activate(void)
449: {
450: /* Save modified registers for later reset */
451: pci_dummy[0]=pci_read(CURRENT,0x52);
452: pci_dummy[1]=pci_read(CURRENT,0x5b);
453:
454: /* enable rom write access */
455: pci_write(CURRENT, 0x52, pci_dummy[0]|0x06);
456:
457: /* enable rom positive decode */
458: // pci_write(CURRENT,0x5b, pci_dummy[1]|0x20);
459: // pci_write(CURRENT,0x52, pci_read(CURRENT,0x52)|0x01);
460: }
461:
462: static void cs5530_deactivate(void)
463: {
464: pci_write(CURRENT, 0x52, pci_dummy[0]);
465: // pci_write(CURRENT, 0x5b, pci_dummy[1]);
466: }
467:
468: /* Reliance / ServerWorks */
469:
470: static void reliance_activate(void)
471: {
472: pci_dummy[0]=pci_read(CURRENT,0x41);
473: pci_dummy[1]=pci_read(CURRENT,0x70);
474: pci_dummy[2]=inb(0xc6f);
475:
476: /* Enable 512k */
477: pci_write(CURRENT, 0x41, pci_dummy[0] | 0x02);
478: /* Enable 4MB */
479: pci_write(CURRENT, 0x70, pci_dummy[1] | 0x80);
480: /* Enable flash write */
481: outb(pci_dummy[2] | 0x40, 0xc6f);
482: }
483:
484: static void reliance_deactivate(void)
485: {
486: pci_write(CURRENT, 0x41, pci_dummy[0]);
487: pci_write(CURRENT, 0x70, pci_dummy[1]);
488: outb(pci_dummy[2], 0xc6f);
489: }
490:
491: /* ALi Methods - untested */
492: static void ali_activate(void)
493: {
494: pci_dummy[0]=pci_read(CURRENT, 0x47);
495: pci_dummy[1]=pci_read(CURRENT, 0x79);
496: pci_dummy[2]=pci_read(CURRENT, 0x7f);
497:
498: /* write enable, 256k enable */
499: #ifdef OLD_ALi
500: pci_write(CURRENT, 0x47, pci_dummy[0]|0x47);
501: #else
502: pci_write(CURRENT, 0x47, pci_dummy[0]|0x43);
503: #endif
504:
505: /* M1543C rev B1 supports 512k. Register reserved before */
506: #ifdef OLD_ALi
507: pci_write(CURRENT, 0x79, pci_dummy[1]|0x10);
508: pci_write(CURRENT, 0x7f, pci_dummy[2]|0x01);
509: #else
510: pci_write(CURRENT, 0x7b, pci_dummy[1]|0x10);
511: #endif
512: }
513:
514: static void ali_deactivate(void)
515: {
516: pci_write(CURRENT, 0x47, pci_dummy[0]);
517: pci_write(CURRENT, 0x79, pci_dummy[1]);
518: pci_write(CURRENT, 0x7f, pci_dummy[2]);
519: }
520:
521: /* Default routines. Use these if nothing else works */
522: #if 0
523: static unsigned int def_addr;
524: #endif
525: static void default_activate(void)
526: {
527: #if 0 && LINUX_VERSION_CODE > KERNEL_VERSION(2,4,0)
528: struct resource *r;
529:
530: r=&CURRENT->resource[PCI_ROM_RESOURCE];
531:
532: r->flags |= PCI_ROM_ADDRESS_ENABLE;
533: r->flags &= ~(IORESOURCE_READONLY|IORESOURCE_CACHEABLE);
534: pci_read_config_dword(CURRENT, CURRENT->rom_base_reg, &def_addr);
535: if (def_addr)
536: pci_write_config_dword (CURRENT, CURRENT->rom_base_reg,
537: def_addr|PCI_ROM_ADDRESS_ENABLE);
538: #endif
539: #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
540: long ret;
541:
542: if (pci_enable_device(CURRENT))
543: return;
544:
545: pci_write_config_dword (CURRENT, CURRENT->rom_base_reg,
546: pci_resource_start(CURRENT, PCI_ROM_RESOURCE)|
547: PCI_ROM_ADDRESS_ENABLE);
548:
549: ret=(long)request_mem_region( pci_resource_start(CURRENT,
550: PCI_ROM_RESOURCE), pci_resource_len(CURRENT,
551: PCI_ROM_RESOURCE), "Firmware memory");
552: if (!ret)
553: printk (KERN_ERR "BIOS: cannot reserve MMROM region "
554: "0x%lx+0x%lx\n",
555: pci_resource_start(CURRENT, PCI_ROM_RESOURCE),
556: pci_resource_len(CURRENT, PCI_ROM_RESOURCE));
557: else
558: printk (KERN_INFO "BIOS: mapped rom region to 0x%lx\n", ret);
559: #endif
560: }
561:
562: static void default_deactivate(void)
563: {
564: #if 0 && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
565: struct resource *r;
566: r=&CURRENT->resource[PCI_ROM_RESOURCE];
567: r->flags &= ~PCI_ROM_ADDRESS_ENABLE;
568: r->flags |= (IORESOURCE_READONLY|IORESOURCE_CACHEABLE);
569: pci_write_config_dword (CURRENT, CURRENT->rom_base_reg, def_addr);
570: #endif
571: #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
572: release_mem_region(pci_resource_start(CURRENT, PCI_ROM_RESOURCE),
573: pci_resource_len(CURRENT, PCI_ROM_RESOURCE));
574: #endif
575: }
576:
577: const struct flashdev devices[] = {
578: /* Intel 4x0 chipsets */
579: { (int[]) { 0x8086122e, 0x80861234, 0x80867000, 0x80867110,
580: 0x80867198, 0 },
581: intel4x0_activate, intel4x0_deactivate, system_memarea },
582:
583: /* Intel 8x0 chipsets */
584: { (int[]) { 0x80862410, 0x80862420, 0x80862440, 0x8086244c,
585: 0x80862480, 0x8086248c, 0x80867600, 0 },
586: intel8x0_activate, intel8x0_deactivate, system_memarea },
587:
588: /* Irongate 75x, AMD-76xMP(X), VT8231/3 */
589: { (int[]) { 0x10227400, 0x10227408, 0x10227410, 0x10227440,
590: 0x11068231, 0x11063074, 0 },
591: amd7xx_activate, amd7xx_deactivate, system_memarea },
592:
593: /* AMD Hammer (thor chipset) */
594: { (int[]) { 0x10227468, 0 },
595: amd7xx_activate, amd7xx_deactivate, system_memarea },
596:
597: /* VIA (M)VP3, VT82C686 [Apollo Super South] */
598: { (int[]) { 0x11060586, 0x11060596, 0x11060686, 0 },
599: viamvp3_activate, viamvp3_deactivate, memarea_256k },
600:
601: /* UMC */
602: { (int[]) { 0x1060886a, 0x10600886, 0x1060e886, 0x10608886, 0 },
603: umc_activate, umc_deactivate, system_memarea },
604:
605: /* SiS */
606: { (int[]) { 0x10390008, 0x10390018, 0 },
607: sis_activate, sis_deactivate, system_memarea },
608:
609: /* OPTi */
610: { (int[]) { 0x1045c558, 0 },
611: default_activate, default_deactivate, system_memarea },
612:
613: /* NSC CS5530(A) */
614: { (int[]) { 0x10780100, 0 },
615: cs5530_activate, cs5530_deactivate, memarea_256k },
616:
617: /* Reliance/ServerWorks NB6xxx */
618: { (int[]) { 0x11660200, 0 },
619: reliance_activate, reliance_deactivate, system_memarea },
620:
621: /* ALi */
622: { (int[]) { 0x10b91523, 0x10b91533, 0x10b91543, 0 },
623: ali_activate, ali_deactivate, system_memarea },
624:
625: { (int[]) { 0x00000000 },
626: default_activate, default_deactivate, default_memarea }
627: };
628:
629: #endif /* CONFIG_PCI */
630:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.