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