summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorgarbled <garbled@NetBSD.org>2007-03-27 00:04:04 +0000
committergarbled <garbled@NetBSD.org>2007-03-27 00:04:04 +0000
commit4398c0d8cd3ac0c8a0d9c05387fca5ec44e3efc7 (patch)
tree5372a523362852045edd3c2bc170157ec20a2405 /sys/dev
parentdf0f62d579acf45172672c8e2e5bbc999e8f6e62 (diff)
The VT8237A SATA Controller uses chip_map_7, not 0, tested and confirmed
working on my machine. Also when a via controller is set to RAID mode, it sets the pci_subclass to raid. Notice this and set ATAC_CAP_RAID.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/pci/viaide.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/sys/dev/pci/viaide.c b/sys/dev/pci/viaide.c
index 4cc813819b4..ed4c54336c6 100644
--- a/sys/dev/pci/viaide.c
+++ b/sys/dev/pci/viaide.c
@@ -1,4 +1,4 @@
-/* $NetBSD: viaide.c,v 1.40 2007/02/10 10:23:18 mlelstv Exp $ */
+/* $NetBSD: viaide.c,v 1.41 2007/03/27 00:04:04 garbled Exp $ */
/*
* Copyright (c) 1999, 2000, 2001 Manuel Bouyer.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: viaide.c,v 1.40 2007/02/10 10:23:18 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: viaide.c,v 1.41 2007/03/27 00:04:04 garbled Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -276,7 +276,7 @@ static const struct pciide_product_desc pciide_via_products[] = {
{ PCI_PRODUCT_VIATECH_VT8237A_SATA,
0,
"VIA Technologies VT8237A SATA Controller",
- via_sata_chip_map_0,
+ via_sata_chip_map_7,
},
{ PCI_PRODUCT_VIATECH_VT8237R_SATA,
0,
@@ -484,6 +484,10 @@ unknown:
sc->sc_wdcdev.sc_atac.atac_channels = sc->wdc_chanarray;
sc->sc_wdcdev.sc_atac.atac_nchannels = PCIIDE_NUM_CHANNELS;
+ if (PCI_CLASS(pa->pa_class) == PCI_CLASS_MASS_STORAGE &&
+ PCI_SUBCLASS(pa->pa_class) == PCI_SUBCLASS_MASS_STORAGE_RAID)
+ sc->sc_wdcdev.sc_atac.atac_cap |= ATAC_CAP_RAID;
+
wdc_allocate_regs(&sc->sc_wdcdev);
ATADEBUG_PRINT(("via_chip_map: old APO_IDECONF=0x%x, "
@@ -683,6 +687,10 @@ via_sata_chip_map_common(struct pciide_softc *sc, struct pci_attach_args *pa)
sc->sc_wdcdev.sc_atac.atac_cap |= ATAC_CAP_DATA16 | ATAC_CAP_DATA32;
sc->sc_wdcdev.sc_atac.atac_set_modes = sata_setup_channel;
+ if (PCI_CLASS(pa->pa_class) == PCI_CLASS_MASS_STORAGE &&
+ PCI_SUBCLASS(pa->pa_class) == PCI_SUBCLASS_MASS_STORAGE_RAID)
+ sc->sc_wdcdev.sc_atac.atac_cap |= ATAC_CAP_RAID;
+
wdc_allocate_regs(&sc->sc_wdcdev);
maptype = pci_mapreg_type(pa->pa_pc, pa->pa_tag,
PCI_MAPREG_START + 0x14);