Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/pci Add VT6410 support, heavily based on a patch by ...
details: https://anonhg.NetBSD.org/src/rev/e7146fa834fc
branches: trunk
changeset: 772305:e7146fa834fc
user: phx <phx%NetBSD.org@localhost>
date: Wed Dec 28 20:28:04 2011 +0000
description:
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.
diffstat:
sys/dev/pci/viaide.c | 166 +++++++++++++++++++++++++++-----------------------
1 files changed, 91 insertions(+), 75 deletions(-)
diffs (197 lines):
diff -r afc0d4afa6ee -r e7146fa834fc sys/dev/pci/viaide.c
--- a/sys/dev/pci/viaide.c Wed Dec 28 18:59:21 2011 +0000
+++ b/sys/dev/pci/viaide.c Wed Dec 28 20:28:04 2011 +0000
@@ -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 @@
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 @@
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");
+ 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;
+ 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;
+ 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_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;
- 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;
Home |
Main Index |
Thread Index |
Old Index