summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorAlexander Yurchenko <grange@cvs.openbsd.org>2003-10-17 08:51:20 +0000
committerAlexander Yurchenko <grange@cvs.openbsd.org>2003-10-17 08:51:20 +0000
commitd1a4b7746fd899ff160d64dcdcf6a64331273210 (patch)
treec31935e105b6e493fed7874556b1264a7194dac9 /sys
parent6dbc421deb21d25ce2935f847921dc56a8399cbb (diff)
Old CMD chips don't have independant channels; from NetBSD.
Work by niklas@ but he don't want to commit it and it causes conflicts.
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/pci/pciide.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/sys/dev/pci/pciide.c b/sys/dev/pci/pciide.c
index 8f1d947c22e..d7dcecf9a13 100644
--- a/sys/dev/pci/pciide.c
+++ b/sys/dev/pci/pciide.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pciide.c,v 1.144 2003/10/17 08:14:09 grange Exp $ */
+/* $OpenBSD: pciide.c,v 1.145 2003/10/17 08:51:19 grange Exp $ */
/* $NetBSD: pciide.c,v 1.127 2001/08/03 01:31:08 tsutsui Exp $ */
/*
@@ -2715,6 +2715,7 @@ cmd_channel_map(pa, sc, channel)
bus_size_t cmdsize, ctlsize;
u_int8_t ctrl = pciide_pci_read(sc->sc_pc, sc->sc_tag, CMD_CTRL);
pcireg_t interface;
+ int one_channel;
/*
* The 0648/0649 can be told to identify as a RAID controller.
@@ -2736,7 +2737,19 @@ cmd_channel_map(pa, sc, channel)
cp->wdc_channel.channel = channel;
cp->wdc_channel.wdc = &sc->sc_wdcdev;
- if (channel > 0) {
+ /*
+ * Older CMD64X doesn't have independant channels
+ */
+ switch (sc->sc_pp->ide_product) {
+ case PCI_PRODUCT_CMDTECH_649:
+ one_channel = 0;
+ break;
+ default:
+ one_channel = 1;
+ break;
+ }
+
+ if (channel > 0 && one_channel) {
cp->wdc_channel.ch_queue =
sc->pciide_channels[0].wdc_channel.ch_queue;
} else {