Module Name: src
Committed By: phx
Date: Wed Dec 28 20:28:04 UTC 2011
Modified Files:
src/sys/dev/pci: viaide.c
Log Message:
Add VT6410 support, heavily based on a patch by Takahiro Kambe:
http://mail-index.netbsd.org/port-i386/2007/03/30/0000.html
The VT6410 is special, because it may exist without a VIA PCI-ISA bridge.
To generate a diff of this commit:
cvs rdiff -u -r1.76 -r1.77 src/sys/dev/pci/viaide.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/viaide.c
diff -u src/sys/dev/pci/viaide.c:1.76 src/sys/dev/pci/viaide.c:1.77
--- src/sys/dev/pci/viaide.c:1.76 Sun Jul 10 20:01:37 2011
+++ src/sys/dev/pci/viaide.c Wed Dec 28 20:28:04 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: viaide.c,v 1.76 2011/07/10 20:01:37 jakllsch Exp $ */
+/* $NetBSD: viaide.c,v 1.77 2011/12/28 20:28:04 phx Exp $ */
/*
* Copyright (c) 1999, 2000, 2001 Manuel Bouyer.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: viaide.c,v 1.76 2011/07/10 20:01:37 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: viaide.c,v 1.77 2011/12/28 20:28:04 phx Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -310,6 +310,11 @@ static const struct pciide_product_desc
NULL,
via_chip_map,
},
+ { PCI_PRODUCT_VIATECH_VT6410_RAID,
+ 0,
+ NULL,
+ via_chip_map,
+ },
{ PCI_PRODUCT_VIATECH_VT6421_RAID,
0,
"VIA Technologies VT6421 Serial ATA RAID Controller",
@@ -451,82 +456,93 @@ via_chip_map(struct pciide_softc *sc, co
switch (vendor) {
case PCI_VENDOR_VIATECH:
- /*
- * get a PCI tag for the ISA bridge.
- */
- if (pci_find_device(&pcib_pa, via_pcib_match) == 0)
- goto unknown;
- pcib_id = pcib_pa.pa_id;
- pcib_class = pcib_pa.pa_class;
- aprint_normal_dev(sc->sc_wdcdev.sc_atac.atac_dev,
- "VIA Technologies ");
- switch (PCI_PRODUCT(pcib_id)) {
- case PCI_PRODUCT_VIATECH_VT82C586_ISA:
- aprint_normal("VT82C586 (Apollo VP) ");
- if(PCI_REVISION(pcib_class) >= 0x02) {
- aprint_normal("ATA33 controller\n");
- sc->sc_wdcdev.sc_atac.atac_udma_cap = 2;
- } else {
- aprint_normal("controller\n");
- sc->sc_wdcdev.sc_atac.atac_udma_cap = 0;
- }
- break;
- case PCI_PRODUCT_VIATECH_VT82C596A:
- aprint_normal("VT82C596A (Apollo Pro) ");
- if (PCI_REVISION(pcib_class) >= 0x12) {
- aprint_normal("ATA66 controller\n");
- sc->sc_wdcdev.sc_atac.atac_udma_cap = 4;
- } else {
- aprint_normal("ATA33 controller\n");
- sc->sc_wdcdev.sc_atac.atac_udma_cap = 2;
- }
+ switch (PCI_PRODUCT(pa->pa_id)) {
+ case PCI_PRODUCT_VIATECH_VT6410_RAID:
+ aprint_normal_dev(sc->sc_wdcdev.sc_atac.atac_dev,
+ "VIA Technologies VT6410 IDE controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 6;
+ interface = PCIIDE_INTERFACE_BUS_MASTER_DMA |
+ PCIIDE_INTERFACE_PCI(0) | PCIIDE_INTERFACE_PCI(1);
break;
- case PCI_PRODUCT_VIATECH_VT82C686A_ISA:
- aprint_normal("VT82C686A (Apollo KX133) ");
- if (PCI_REVISION(pcib_class) >= 0x40) {
- aprint_normal("ATA100 controller\n");
+ default:
+ /*
+ * get a PCI tag for the ISA bridge.
+ */
+ if (pci_find_device(&pcib_pa, via_pcib_match) == 0)
+ goto unknown;
+ pcib_id = pcib_pa.pa_id;
+ pcib_class = pcib_pa.pa_class;
+ aprint_normal_dev(sc->sc_wdcdev.sc_atac.atac_dev,
+ "VIA Technologies ");
+ switch (PCI_PRODUCT(pcib_id)) {
+ case PCI_PRODUCT_VIATECH_VT82C586_ISA:
+ aprint_normal("VT82C586 (Apollo VP) ");
+ if(PCI_REVISION(pcib_class) >= 0x02) {
+ aprint_normal("ATA33 controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 2;
+ } else {
+ aprint_normal("controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 0;
+ }
+ break;
+ case PCI_PRODUCT_VIATECH_VT82C596A:
+ aprint_normal("VT82C596A (Apollo Pro) ");
+ if (PCI_REVISION(pcib_class) >= 0x12) {
+ aprint_normal("ATA66 controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 4;
+ } else {
+ aprint_normal("ATA33 controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 2;
+ }
+ break;
+ case PCI_PRODUCT_VIATECH_VT82C686A_ISA:
+ aprint_normal("VT82C686A (Apollo KX133) ");
+ if (PCI_REVISION(pcib_class) >= 0x40) {
+ aprint_normal("ATA100 controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 5;
+ } else {
+ aprint_normal("ATA66 controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 4;
+ }
+ break;
+ case PCI_PRODUCT_VIATECH_VT8231:
+ aprint_normal("VT8231 ATA100 controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 5;
+ break;
+ case PCI_PRODUCT_VIATECH_VT8233:
+ aprint_normal("VT8233 ATA100 controller\n");
sc->sc_wdcdev.sc_atac.atac_udma_cap = 5;
- } else {
- aprint_normal("ATA66 controller\n");
- sc->sc_wdcdev.sc_atac.atac_udma_cap = 4;
+ break;
+ case PCI_PRODUCT_VIATECH_VT8233A:
+ aprint_normal("VT8233A ATA133 controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 6;
+ break;
+ case PCI_PRODUCT_VIATECH_VT8235:
+ aprint_normal("VT8235 ATA133 controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 6;
+ break;
+ case PCI_PRODUCT_VIATECH_VT8237:
+ aprint_normal("VT8237 ATA133 controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 6;
+ break;
+ case PCI_PRODUCT_VIATECH_VT8237A_ISA:
+ aprint_normal("VT8237A ATA133 controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 6;
+ break;
+ case PCI_PRODUCT_VIATECH_CX700:
+ aprint_normal("CX700 ATA133 controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 6;
+ break;
+ case PCI_PRODUCT_VIATECH_VT8251:
+ aprint_normal("VT8251 ATA133 controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 6;
+ break;
+ default:
+ unknown:
+ aprint_normal("unknown VIA ATA controller\n");
+ sc->sc_wdcdev.sc_atac.atac_udma_cap = 0;
}
break;
- case PCI_PRODUCT_VIATECH_VT8231:
- aprint_normal("VT8231 ATA100 controller\n");
- sc->sc_wdcdev.sc_atac.atac_udma_cap = 5;
- break;
- case PCI_PRODUCT_VIATECH_VT8233:
- aprint_normal("VT8233 ATA100 controller\n");
- sc->sc_wdcdev.sc_atac.atac_udma_cap = 5;
- break;
- case PCI_PRODUCT_VIATECH_VT8233A:
- aprint_normal("VT8233A ATA133 controller\n");
- sc->sc_wdcdev.sc_atac.atac_udma_cap = 6;
- break;
- case PCI_PRODUCT_VIATECH_VT8235:
- aprint_normal("VT8235 ATA133 controller\n");
- sc->sc_wdcdev.sc_atac.atac_udma_cap = 6;
- break;
- case PCI_PRODUCT_VIATECH_VT8237:
- aprint_normal("VT8237 ATA133 controller\n");
- sc->sc_wdcdev.sc_atac.atac_udma_cap = 6;
- break;
- case PCI_PRODUCT_VIATECH_VT8237A_ISA:
- aprint_normal("VT8237A ATA133 controller\n");
- sc->sc_wdcdev.sc_atac.atac_udma_cap = 6;
- break;
- case PCI_PRODUCT_VIATECH_CX700:
- aprint_normal("CX700 ATA133 controller\n");
- sc->sc_wdcdev.sc_atac.atac_udma_cap = 6;
- break;
- case PCI_PRODUCT_VIATECH_VT8251:
- aprint_normal("VT8251 ATA133 controller\n");
- sc->sc_wdcdev.sc_atac.atac_udma_cap = 6;
- break;
- default:
-unknown:
- aprint_normal("unknown VIA ATA controller\n");
- sc->sc_wdcdev.sc_atac.atac_udma_cap = 0;
}
sc->sc_apo_regbase = APO_VIA_REGBASE;
break;