diff options
author | Alexander Yurchenko <grange@cvs.openbsd.org> | 2004-09-15 17:53:19 +0000 |
---|---|---|
committer | Alexander Yurchenko <grange@cvs.openbsd.org> | 2004-09-15 17:53:19 +0000 |
commit | ba32f1d1bdafdeb43ee098e23c502e926f862931 (patch) | |
tree | 3b97b1d74bd26d252637287438ddf98b204ee596 /sys/dev | |
parent | a78ee3d8db7e5912f0637ede21172d9e3deeec04 (diff) |
Add support for Intel 6300ESB IDE and SATA.
There's a little botch to be fixed later in our Intel SATA support
that's why the first variants of the diff didn't work.
Thanks to Markus Foerster <markus@1ster.de> for access to the testing
machine.
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/pci/pciide.c | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/sys/dev/pci/pciide.c b/sys/dev/pci/pciide.c index e5581720e17..7dcd437bc54 100644 --- a/sys/dev/pci/pciide.c +++ b/sys/dev/pci/pciide.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pciide.c,v 1.169 2004/08/21 07:13:55 mickey Exp $ */ +/* $OpenBSD: pciide.c,v 1.170 2004/09/15 17:53:18 grange Exp $ */ /* $NetBSD: pciide.c,v 1.127 2001/08/03 01:31:08 tsutsui Exp $ */ /* @@ -387,8 +387,16 @@ const struct pciide_product_desc pciide_intel_products[] = { { PCI_PRODUCT_INTEL_31244, /* Intel 31244 SATA */ 0, artisea_chip_map - } + }, #endif + { PCI_PRODUCT_INTEL_6300ESB_IDE, /* Intel 6300ESB IDE */ + IDE_PCI_CLASS_OVERRIDE, + piix_chip_map + }, + { PCI_PRODUCT_INTEL_6300ESB_SATA, /* Intel 6300ESB SATA */ + IDE_PCI_CLASS_OVERRIDE, + piix_chip_map + }, }; const struct pciide_product_desc pciide_amd_products[] = { @@ -1762,6 +1770,8 @@ piix_chip_map(sc, pa) case PCI_PRODUCT_INTEL_82801EB_IDE: case PCI_PRODUCT_INTEL_82801EB_SATA: case PCI_PRODUCT_INTEL_82801ER_SATA: + case PCI_PRODUCT_INTEL_6300ESB_IDE: + case PCI_PRODUCT_INTEL_6300ESB_SATA: sc->sc_wdcdev.cap |= WDC_CAPABILITY_UDMA; break; } @@ -1781,6 +1791,8 @@ piix_chip_map(sc, pa) case PCI_PRODUCT_INTEL_82801EB_IDE: case PCI_PRODUCT_INTEL_82801EB_SATA: case PCI_PRODUCT_INTEL_82801ER_SATA: + case PCI_PRODUCT_INTEL_6300ESB_IDE: + case PCI_PRODUCT_INTEL_6300ESB_SATA: sc->sc_wdcdev.UDMA_cap = 5; break; default: @@ -1788,7 +1800,8 @@ piix_chip_map(sc, pa) break; } if (sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801EB_SATA || - sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801ER_SATA) { + sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801ER_SATA || + sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_6300ESB_SATA) { sc->sc_wdcdev.cap |= WDC_CAPABILITY_SATA; sc->sc_wdcdev.set_modes = sata_setup_channel; } else if (sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82371FB_IDE) { @@ -1802,7 +1815,8 @@ piix_chip_map(sc, pa) pciide_print_channels(sc->sc_wdcdev.nchannels, interface); if (sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801EB_SATA || - sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801ER_SATA) + sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801ER_SATA || + sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_6300ESB_SATA) goto chansetup; WDCDEBUG_PRINT(("piix_setup_chip: old idetim=0x%x", @@ -1825,7 +1839,8 @@ piix_chip_map(sc, pa) sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801CA_IDE || sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801DB_IDE || sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801DBM_IDE || - sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801EB_IDE) { + sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801EB_IDE || + sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_6300ESB_IDE) { WDCDEBUG_PRINT((", IDE_CONTROL 0x%x", pci_conf_read(sc->sc_pc, sc->sc_tag, PIIX_CONFIG)), DEBUG_PROBE); @@ -1883,7 +1898,8 @@ next: } if (sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801EB_SATA || - sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801ER_SATA) + sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801ER_SATA || + sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_6300ESB_SATA) return; WDCDEBUG_PRINT(("piix_setup_chip: idetim=0x%x", @@ -1906,7 +1922,8 @@ next: sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801CA_IDE || sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801DB_IDE || sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801DBM_IDE || - sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801EB_IDE) { + sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801EB_IDE || + sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_6300ESB_IDE) { WDCDEBUG_PRINT((", IDE_CONTROL 0x%x", pci_conf_read(sc->sc_pc, sc->sc_tag, PIIX_CONFIG)), DEBUG_PROBE); @@ -2072,7 +2089,8 @@ piix3_4_setup_channel(chp) sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801CA_IDE || sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801DB_IDE || sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801DBM_IDE || - sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801EB_IDE) { + sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801EB_IDE || + sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_6300ESB_IDE) { ideconf |= PIIX_CONFIG_PINGPONG; } if (sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801BAM_IDE || @@ -2081,7 +2099,8 @@ piix3_4_setup_channel(chp) sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801CA_IDE || sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801DB_IDE || sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801DBM_IDE || - sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801EB_IDE) { + sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801EB_IDE || + sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_6300ESB_IDE) { /* setup Ultra/100 */ if (drvp->UDMA_mode > 2 && (ideconf & PIIX_CONFIG_CR(channel, drive)) == 0) |