diff options
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/oldproc.c | 33 | ||||
-rw-r--r-- | drivers/pci/pci.c | 8 | ||||
-rw-r--r-- | drivers/pci/pcisyms.c | 8 | ||||
-rw-r--r-- | drivers/pci/quirks.c | 28 |
4 files changed, 67 insertions, 10 deletions
diff --git a/drivers/pci/oldproc.c b/drivers/pci/oldproc.c index 5134a129f..4d17639d9 100644 --- a/drivers/pci/oldproc.c +++ b/drivers/pci/oldproc.c @@ -139,7 +139,11 @@ struct pci_dev_info dev_info[] = { DEVICE( MATROX, MATROX_MYS, "Mystique"), DEVICE( MATROX, MATROX_MIL_2, "Millennium II"), DEVICE( MATROX, MATROX_MIL_2_AGP,"Millennium II AGP"), + DEVICE( MATROX, MATROX_G200_PCI,"Matrox G200 PCI"), + DEVICE( MATROX, MATROX_G200_AGP,"Matrox G200 AGP"), DEVICE( MATROX, MATROX_MGA_IMP, "MGA Impression"), + DEVICE( MATROX, MATROX_G100_MM, "Matrox G100 multi monitor"), + DEVICE( MATROX, MATROX_G100_AGP,"Matrox G100 AGP"), DEVICE( CT, CT_65545, "65545"), DEVICE( CT, CT_65548, "65548"), DEVICE( CT, CT_65550, "65550"), @@ -158,8 +162,8 @@ struct pci_dev_info dev_info[] = { DEVICE( SI, SI_496, "85C496"), DEVICE( SI, SI_601, "85C601"), DEVICE( SI, SI_5107, "5107"), - DEVICE( SI, SI_5511, "85C5511"), - DEVICE( SI, SI_5513, "85C5513"), + DEVICE( SI, SI_5511, "85C5511"), + DEVICE( SI, SI_5513, "85C5513"), DEVICE( SI, SI_5571, "5571"), DEVICE( SI, SI_5591, "5591/5592 Host"), DEVICE( SI, SI_5597, "5597/5598 Host"), @@ -249,6 +253,8 @@ struct pci_dev_info dev_info[] = { DEVICE( VISION, VISION_QD8580, "QD-8580"), DEVICE( BROOKTREE, BROOKTREE_848, "Bt848"), DEVICE( BROOKTREE, BROOKTREE_849A, "Bt849"), + DEVICE( BROOKTREE, BROOKTREE_878_1,"Bt878 2nd Contr. (?)"), + DEVICE( BROOKTREE, BROOKTREE_878, "Bt878"), DEVICE( BROOKTREE, BROOKTREE_8474, "Bt8474"), DEVICE( SIERRA, SIERRA_STB, "STB Horizon 64"), DEVICE( ACC, ACC_2056, "2056"), @@ -325,6 +331,7 @@ struct pci_dev_info dev_info[] = { DEVICE( VIA, VIA_82C586_0, "VT 82C586 Apollo ISA"), DEVICE( VIA, VIA_82C595, "VT 82C595 Apollo VP2"), DEVICE( VIA, VIA_82C597_0, "VT 82C597 Apollo VP3"), + DEVICE( VIA, VIA_82C598_0, "VT 82C598 Apollo MVP3"), DEVICE( VIA, VIA_82C926, "VT 82C926 Amazon"), DEVICE( VIA, VIA_82C416, "VT 82C416MV"), DEVICE( VIA, VIA_82C595_97, "VT 82C595 Apollo VP2/97"), @@ -332,6 +339,8 @@ struct pci_dev_info dev_info[] = { DEVICE( VIA, VIA_82C586_3, "VT 82C586B Apollo ACPI"), DEVICE( VIA, VIA_86C100A, "VT 86C100A"), DEVICE( VIA, VIA_82C597_1, "VT 82C597 Apollo VP3 AGP"), + DEVICE( VIA, VIA_82C598_1, "VT 82C598 Apollo MVP3 AGP"), + DEVICE( SMC2, SMC2_1211TX, "1211 TX"), DEVICE( VORTEX, VORTEX_GDT60x0, "GDT 60x0"), DEVICE( VORTEX, VORTEX_GDT6000B,"GDT 6000b"), DEVICE( VORTEX, VORTEX_GDT6x10, "GDT 6110/6510"), @@ -364,9 +373,9 @@ struct pci_dev_info dev_info[] = { DEVICE( VORTEX, VORTEX_GDT6557RP2,"GDT 6557RP2"), DEVICE( VORTEX, VORTEX_GDT6x11RP2,"GDT 6111RP2/6511RP2"), DEVICE( VORTEX, VORTEX_GDT6x21RP2,"GDT 6121RP2/6521RP2"), - DEVICE( EF, EF_ATM_FPGA, "155P-MF1 (FPGA)"), - DEVICE( EF, EF_ATM_ASIC, "155P-MF1 (ASIC)"), - DEVICE( FORE, FORE_PCA200PC, "PCA-200PC"), + DEVICE( EF, EF_ATM_FPGA, "155P-MF1 (FPGA)"), + DEVICE( EF, EF_ATM_ASIC, "155P-MF1 (ASIC)"), + DEVICE( FORE, FORE_PCA200PC, "PCA-200PC"), DEVICE( FORE, FORE_PCA200E, "PCA-200E"), DEVICE( IMAGINGTECH, IMAGINGTECH_ICPCI, "MVC IC-PCI"), DEVICE( PHILIPS, PHILIPS_SAA7145,"SAA7145"), @@ -428,6 +437,7 @@ struct pci_dev_info dev_info[] = { DEVICE( O2, O2_6832, "6832"), DEVICE( 3DFX, 3DFX_VOODOO, "Voodoo"), DEVICE( 3DFX, 3DFX_VOODOO2, "Voodoo2"), + DEVICE( 3DFX, 3DFX_BANSHEE, "Banshee"), DEVICE( SIGMADES, SIGMADES_6425, "REALmagic64/GX"), DEVICE( STALLION, STALLION_ECHPCI832,"EasyConnection 8/32"), DEVICE( STALLION, STALLION_ECHPCI864,"EasyConnection 8/64"), @@ -441,7 +451,7 @@ struct pci_dev_info dev_info[] = { DEVICE( SATSAGEM, SATSAGEM_TELSATTURBO,"Telsat Turbo DVB"), DEVICE( HUGHES, HUGHES_DIRECPC, "DirecPC"), DEVICE( ENSONIQ, ENSONIQ_AUDIOPCI,"AudioPCI"), - DEVICE( ALTEON, ALTEON_ACENIC,"AceNIC"), + DEVICE( ALTEON, ALTEON_ACENIC, "AceNIC"), DEVICE( PICTUREL, PICTUREL_PCIVST,"PCIVST"), DEVICE( NVIDIA_SGS, NVIDIA_SGS_RIVA128, "Riva 128"), DEVICE( CBOARDS, CBOARDS_DAS1602_16,"DAS1602/16"), @@ -461,7 +471,7 @@ struct pci_dev_info dev_info[] = { DEVICE( S3, S3_AURORA64VP, "Aurora64V+"), DEVICE( S3, S3_TRIO64UVP, "Trio64UV+"), DEVICE( S3, S3_ViRGE_VX, "ViRGE/VX"), - DEVICE( S3, S3_868, "Vision 868"), + DEVICE( S3, S3_868, "Vision 868"), DEVICE( S3, S3_928, "Vision 928-P"), DEVICE( S3, S3_864_1, "Vision 864-P"), DEVICE( S3, S3_864_2, "Vision 864-P"), @@ -476,6 +486,7 @@ struct pci_dev_info dev_info[] = { DEVICE( S3, S3_ViRGE_MXP, "ViRGE/MX+"), DEVICE( S3, S3_ViRGE_MXPMV, "ViRGE/MX+MV"), DEVICE( S3, S3_SONICVIBES, "SonicVibes"), + DEVICE( DCI, DCI_PCCOM4, "PC COM PCI Bus 4 port serial Adapter"), DEVICE( GENROCO, GENROCO_HFP832, "TURBOstor HFP832"), DEVICE( INTEL, INTEL_82375, "82375EB"), DEVICE( INTEL, INTEL_82424, "82424ZX Saturn"), @@ -532,8 +543,10 @@ struct pci_dev_info dev_info[] = { DEVICE( ADAPTEC, ADAPTEC_7884, "AIC-7884U"), DEVICE( ADAPTEC, ADAPTEC_1030, "ABA-1030 DVB receiver"), DEVICE( ADAPTEC2, ADAPTEC2_2940U2,"AHA-2940U2"), + DEVICE( ADAPTEC2, ADAPTEC2_78902, "AIC-7890/1"), DEVICE( ADAPTEC2, ADAPTEC2_7890, "AIC-7890/1"), DEVICE( ADAPTEC2, ADAPTEC2_3940U2,"AHA-3940U2"), + DEVICE( ADAPTEC2, ADAPTEC2_3950U2D,"AHA-3950U2D"), DEVICE( ADAPTEC2, ADAPTEC2_7896, "AIC-7896/7"), DEVICE( ATRONICS, ATRONICS_2015, "IDE-2015PL"), DEVICE( TIGERJET, TIGERJET_300, "Tiger300 ISDN"), @@ -575,7 +588,7 @@ static struct pci_dev_info *pci_lookup_dev(unsigned int vendor, unsigned int dev return 0; continue; } - + return & dev_info[ i ]; } } @@ -734,6 +747,7 @@ static const char *pci_strvendor(unsigned int vendor) case PCI_VENDOR_ID_INIT: return "Initio Corp"; case PCI_VENDOR_ID_TTI: return "Triones Technologies, Inc."; case PCI_VENDOR_ID_VIA: return "VIA Technologies"; + case PCI_VENDOR_ID_SMC2: return "SMC"; case PCI_VENDOR_ID_VORTEX: return "VORTEX"; case PCI_VENDOR_ID_EF: return "Efficient Networks"; case PCI_VENDOR_ID_FORE: return "Fore Systems"; @@ -782,6 +796,7 @@ static const char *pci_strvendor(unsigned int vendor) case PCI_VENDOR_ID_AVANCE: return "Avance"; case PCI_VENDOR_ID_NETVIN: return "NetVin"; case PCI_VENDOR_ID_S3: return "S3 Inc."; + case PCI_VENDOR_ID_DCI: return "Decision Computer Int."; case PCI_VENDOR_ID_GENROCO: return "Genroco"; case PCI_VENDOR_ID_INTEL: return "Intel"; case PCI_VENDOR_ID_KTI: return "KTI"; @@ -882,7 +897,7 @@ static int sprint_dev_config(struct pci_dev *dev, char *buf, int size) if (len + 40 > size) { return -1; } - len += sprintf(buf + len, "IRQ %x. ", dev->irq); + len += sprintf(buf + len, "IRQ %d. ", dev->irq); } if (dev->master) { diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 0f62a76c1..599253933 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -28,6 +28,9 @@ #endif struct pci_bus pci_root; +#ifdef CONFIG_VISWS +struct pci_bus pci_other; +#endif struct pci_dev *pci_devices = NULL; static struct pci_dev **pci_last_dev_p = &pci_devices; static int pci_reverse __initdata = 0; @@ -382,6 +385,11 @@ __initfunc(void pci_init(void)) memset(&pci_root, 0, sizeof(pci_root)); pci_root.subordinate = pci_scan_bus(&pci_root); +#ifdef CONFIG_VISWS + pci_other.number = 1; /* XXX unless bridge(s) on pci_root */ + pci_other.subordinate = pci_scan_bus(&pci_other); + pci_root.next = &pci_other; +#endif /* give BIOS a chance to apply platform specific fixes: */ pcibios_fixup(); diff --git a/drivers/pci/pcisyms.c b/drivers/pci/pcisyms.c index f7399c9fb..f26adfc7c 100644 --- a/drivers/pci/pcisyms.c +++ b/drivers/pci/pcisyms.c @@ -9,6 +9,7 @@ #include <linux/config.h> #include <linux/module.h> #include <linux/pci.h> +#include <asm/dma.h> /* isa_dma_bridge_buggy */ EXPORT_SYMBOL(pcibios_present); EXPORT_SYMBOL(pcibios_read_config_byte); @@ -38,3 +39,10 @@ EXPORT_SYMBOL(pci_proc_detach_device); EXPORT_SYMBOL(pcibios_find_class); EXPORT_SYMBOL(pcibios_find_device); + +/* Quirk info */ + +#ifdef CONFIG_PCI_QUIRKS +EXPORT_SYMBOL(isa_dma_bridge_buggy); +#endif + diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 77ef16f91..3fe633030 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -125,6 +125,25 @@ __initfunc(static void quirk_passive_release(struct pci_dev *dev, int arg)) } } +/* The VIA VP2/VP3/MVP3 seem to have some 'features'. There may be a workaround + but VIA don't answer queries. If you happen to have good contacts at VIA + ask them for me please -- Alan + + This appears to be BIOS not version dependent. So presumably there is a + chipset level fix */ + + +int isa_dma_bridge_buggy = 0; /* Exported */ + +__initfunc(static void quirk_isa_dma_hangs(struct pci_dev *dev, int arg)) +{ + if(!isa_dma_bridge_buggy) + { + isa_dma_bridge_buggy=1; + printk(KERN_INFO "Activating ISA DMA hang workarounds.\n"); + } +} + typedef void (*quirk_handler)(struct pci_dev *, int); @@ -141,7 +160,8 @@ static struct quirk_name quirk_names[] __initdata = { #ifdef CONFIG_PCI_OPTIMIZE { quirk_bridge, "Bridge optimization" }, #endif - { quirk_passive_release, "Passive release enable" }, + { quirk_passive_release,"Passive release enable" }, + { quirk_isa_dma_hangs, "Work around ISA DMA hangs" }, }; @@ -176,6 +196,12 @@ static struct quirk_info quirk_list[] __initdata = { { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82430, quirk_bridge, 0x00 }, #endif { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, quirk_passive_release, 0x00 }, + /* + * Its not totally clear which chipsets are the problematic ones + * This is the 82C586 variants. At the moment the 596 is an unknown + * quantity + */ + { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0, quirk_isa_dma_hangs, 0x00 }, }; __initfunc(void pci_quirks_init(void)) |