summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2001-12-25 14:44:26 +0000
committersos <sos@FreeBSD.org>2001-12-25 14:44:26 +0000
commit2dad4bac4704aa2fa4463493379062a6a4d37cdc (patch)
tree3a0355e2e7d6e2d6bceccf226ad1bb06ae6314d8 /sys/dev/ata
parent2c58902126586469c8f56cdc8617ae783622e60a (diff)
downloadFreeBSD-src-2dad4bac4704aa2fa4463493379062a6a4d37cdc.zip
FreeBSD-src-2dad4bac4704aa2fa4463493379062a6a4d37cdc.tar.gz
Add support for even more SiS chipsets.
Misc cosmetics.
Diffstat (limited to 'sys/dev/ata')
-rw-r--r--sys/dev/ata/ata-dma.c132
-rw-r--r--sys/dev/ata/ata-pci.c43
2 files changed, 74 insertions, 101 deletions
diff --git a/sys/dev/ata/ata-dma.c b/sys/dev/ata/ata-dma.c
index 29ead05..b47e7f3 100644
--- a/sys/dev/ata/ata-dma.c
+++ b/sys/dev/ata/ata-dma.c
@@ -125,8 +125,7 @@ ata_dmainit(struct ata_softc *scp, int device,
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA5, ATA_C_F_SETXFER,ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA5 on Intel chip\n",
+ ata_printf(scp, device, "%s setting UDMA5 on Intel chip\n",
(error) ? "failed" : "success");
if (!error) {
mask48 = (1 << devno) + (3 << (16 + (devno << 2)));
@@ -156,8 +155,7 @@ ata_dmainit(struct ata_softc *scp, int device,
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA4, ATA_C_F_SETXFER,ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA4 on Intel chip\n",
+ ata_printf(scp, device, "%s setting UDMA4 on Intel chip\n",
(error) ? "failed" : "success");
if (!error) {
mask48 = (1 << devno) + (3 << (16 + (devno << 2)));
@@ -275,8 +273,7 @@ ata_dmainit(struct ata_softc *scp, int device,
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_WDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting WDMA2 on Intel chip\n",
+ ata_printf(scp, device, "%s setting WDMA2 on Intel chip\n",
(error) ? "failed" : "success");
if (!error) {
scp->mode[ATA_DEV(device)] = ATA_WDMA2;
@@ -297,8 +294,7 @@ ata_dmainit(struct ata_softc *scp, int device,
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA5, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA5 on Acer chip\n",
+ ata_printf(scp, device, "%s setting UDMA5 on Acer chip\n",
(error) ? "failed" : "success");
if (!error) {
int32_t word54 = pci_read_config(parent, 0x54, 4);
@@ -318,8 +314,7 @@ ata_dmainit(struct ata_softc *scp, int device,
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA4, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA4 on Acer chip\n",
+ ata_printf(scp, device, "%s setting UDMA4 on Acer chip\n",
(error) ? "failed" : "success");
if (!error) {
int32_t word54 = pci_read_config(parent, 0x54, 4);
@@ -339,8 +334,7 @@ ata_dmainit(struct ata_softc *scp, int device,
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA2 on Acer chip\n",
+ ata_printf(scp, device, "%s setting UDMA2 on Acer chip\n",
(error) ? "failed" : "success");
if (!error) {
int32_t word54 = pci_read_config(parent, 0x54, 4);
@@ -364,8 +358,7 @@ ata_dmainit(struct ata_softc *scp, int device,
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_WDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting WDMA2 on Acer chip\n",
+ ata_printf(scp, device, "%s setting WDMA2 on Acer chip\n",
(error) ? "failed" : "success");
if (!error) {
pci_write_config(parent, 0x53,
@@ -385,8 +378,7 @@ ata_dmainit(struct ata_softc *scp, int device,
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA5, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA5 on AMD chip\n",
+ ata_printf(scp, device, "%s setting UDMA5 on AMD chip\n",
(error) ? "failed" : "success");
if (!error) {
pci_write_config(parent, 0x53 - devno, 0xc6, 1);
@@ -401,8 +393,7 @@ ata_dmainit(struct ata_softc *scp, int device,
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA4, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA4 on AMD chip\n",
+ ata_printf(scp, device, "%s setting UDMA4 on AMD chip\n",
(error) ? "failed" : "success");
if (!error) {
pci_write_config(parent, 0x53 - devno, 0xc5, 1);
@@ -420,8 +411,7 @@ ata_dmainit(struct ata_softc *scp, int device,
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA5, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA5 on VIA chip\n",
+ ata_printf(scp, device, "%s setting UDMA5 on VIA chip\n",
(error) ? "failed" : "success");
if (!error) {
pci_write_config(parent, 0x53 - devno, 0xf0, 1);
@@ -433,8 +423,7 @@ ata_dmainit(struct ata_softc *scp, int device,
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA4, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA4 on VIA chip\n",
+ ata_printf(scp, device, "%s setting UDMA4 on VIA chip\n",
(error) ? "failed" : "success");
if (!error) {
pci_write_config(parent, 0x53 - devno, 0xf1, 1);
@@ -446,8 +435,7 @@ ata_dmainit(struct ata_softc *scp, int device,
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA2 on VIA chip\n",
+ ata_printf(scp, device, "%s setting UDMA2 on VIA chip\n",
(error) ? "failed" : "success");
if (!error) {
pci_write_config(parent, 0x53 - devno, 0xf4, 1);
@@ -462,8 +450,7 @@ ata_dmainit(struct ata_softc *scp, int device,
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA4, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA4 on VIA chip\n",
+ ata_printf(scp, device, "%s setting UDMA4 on VIA chip\n",
(error) ? "failed" : "success");
if (!error) {
pci_write_config(parent, 0x53 - devno, 0xe8, 1);
@@ -475,8 +462,7 @@ ata_dmainit(struct ata_softc *scp, int device,
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA2 on VIA chip\n",
+ ata_printf(scp, device, "%s setting UDMA2 on VIA chip\n",
(error) ? "failed" : "success");
if (!error) {
pci_write_config(parent, 0x53 - devno, 0xea, 1);
@@ -524,10 +510,15 @@ via_82c586:
if (ata_find_dev(parent, 0x06301039, 0x30) || /* SiS 630 */
ata_find_dev(parent, 0x06331039, 0x00) || /* SiS 633 */
ata_find_dev(parent, 0x06351039, 0x00) || /* SiS 635 */
+ ata_find_dev(parent, 0x06401039, 0x00) || /* SiS 640 */
ata_find_dev(parent, 0x06451039, 0x00) || /* SiS 645 */
+ ata_find_dev(parent, 0x06501039, 0x00) || /* SiS 650 */
ata_find_dev(parent, 0x07301039, 0x00) || /* SiS 730 */
ata_find_dev(parent, 0x07331039, 0x00) || /* SiS 733 */
- ata_find_dev(parent, 0x07351039, 0x00)) { /* SiS 735 */
+ ata_find_dev(parent, 0x07351039, 0x00) || /* SiS 735 */
+ ata_find_dev(parent, 0x07401039, 0x00) || /* SiS 740 */
+ ata_find_dev(parent, 0x07451039, 0x00) || /* SiS 745 */
+ ata_find_dev(parent, 0x07501039, 0x00)) { /* SiS 750 */
int8_t reg = 0x40 + (devno << 1);
int16_t val = pci_read_config(parent, reg, 2) & 0x0fff;
@@ -535,8 +526,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA5, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA5 on SiS chip\n",
+ ata_printf(scp, device, "%s setting UDMA5 on SiS chip\n",
(error) ? "failed" : "success");
if (!error) {
pci_write_config(parent, reg, val | 0x8000, 2);
@@ -548,8 +538,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA4, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA4 on SiS chip\n",
+ ata_printf(scp, device, "%s setting UDMA4 on SiS chip\n",
(error) ? "failed" : "success");
if (!error) {
pci_write_config(parent, reg, val | 0x9000, 2);
@@ -561,8 +550,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA2 on SiS chip\n",
+ ata_printf(scp, device, "%s setting UDMA2 on SiS chip\n",
(error) ? "failed" : "success");
if (!error) {
pci_write_config(parent, reg, val | 0xb000, 2);
@@ -581,8 +569,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA4, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA4 on SiS chip\n",
+ ata_printf(scp, device, "%s setting UDMA4 on SiS chip\n",
(error) ? "failed" : "success");
if (!error) {
pci_write_config(parent, reg, val | 0x9000, 2);
@@ -594,8 +581,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA2 on SiS chip\n",
+ ata_printf(scp, device, "%s setting UDMA2 on SiS chip\n",
(error) ? "failed" : "success");
if (!error) {
pci_write_config(parent, reg, val | 0xa000, 2);
@@ -603,27 +589,23 @@ via_82c586:
return;
}
}
- } else { /* SiS 5591 */
- if (udmamode >= 2 && pci_get_revid(parent) > 0xc1) {
- error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
- ATA_UDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
- if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA2 on SiS chip\n",
- (error) ? "failed" : "success");
- if (!error) {
- pci_write_config(parent, 0x40 + (devno << 1), 0xa301, 2);
- scp->mode[ATA_DEV(device)] = ATA_UDMA2;
- return;
- }
+ } else if (udmamode >= 2 && pci_get_revid(parent) > 0xc1) {
+ error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
+ ATA_UDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
+ if (bootverbose)
+ ata_printf(scp, device, "%s setting UDMA2 on SiS chip\n",
+ (error) ? "failed" : "success");
+ if (!error) {
+ pci_write_config(parent, 0x40 + (devno << 1), 0xa301, 2);
+ scp->mode[ATA_DEV(device)] = ATA_UDMA2;
+ return;
}
}
if (wdmamode >=2 && apiomode >= 4) {
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_WDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting WDMA2 on SiS chip\n",
+ ata_printf(scp, device, "%s setting WDMA2 on SiS chip\n",
(error) ? "failed" : "success");
if (!error) {
pci_write_config(parent, 0x40 + (devno << 1), 0x0301, 2);
@@ -718,8 +700,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_WDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting WDMA2 on Cypress chip\n",
+ ata_printf(scp, device, "%s setting WDMA2 on Cypress chip\n",
error ? "failed" : "success");
if (!error) {
pci_write_config(scp->dev, scp->channel ? 0x4e:0x4c, 0x2020, 2);
@@ -814,8 +795,8 @@ via_82c586:
break;
case 0x4d68105a: /* Promise TX2 ATA100 controllers */
- case 0x6268105a: /* Promise TX2v2 ATA100 controllers */
- case 0x4d69105a: /* Promise ATA133 controllers */
+ case 0x6268105a: /* Promise TX2 ATA100 controllers */
+ case 0x4d69105a: /* Promise TX2 ATA133 controllers */
ATA_OUTB(scp->r_bmio, ATA_BMDEVSPEC_0, 0x0b);
if (udmamode >= 4 && !(ATA_INB(scp->r_bmio, ATA_BMDEVSPEC_1) & 0x04)) {
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
@@ -861,8 +842,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA5, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA5 on Promise chip\n",
+ ata_printf(scp, device, "%s setting UDMA5 on Promise chip\n",
(error) ? "failed" : "success");
if (!error) {
promise_timing(scp, devno, ATA_UDMA5);
@@ -878,8 +858,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA4, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA4 on Promise chip\n",
+ ata_printf(scp, device, "%s setting UDMA4 on Promise chip\n",
(error) ? "failed" : "success");
if (!error) {
promise_timing(scp, devno, ATA_UDMA4);
@@ -894,8 +873,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA2 on Promise chip\n",
+ ata_printf(scp, device, "%s setting UDMA2 on Promise chip\n",
(error) ? "failed" : "success");
if (!error) {
promise_timing(scp, devno, ATA_UDMA2);
@@ -907,8 +885,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_WDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting WDMA2 on Promise chip\n",
+ ata_printf(scp, device, "%s setting WDMA2 on Promise chip\n",
(error) ? "failed" : "success");
if (!error) {
promise_timing(scp, devno, ATA_WDMA2);
@@ -920,8 +897,7 @@ via_82c586:
ATA_PIO0 + apiomode,
ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting PIO%d on Promise chip\n",
+ ata_printf(scp, device, "%s setting PIO%d on Promise chip\n",
(error) ? "failed" : "success",
(apiomode >= 0) ? apiomode : 0);
promise_timing(scp, devno, ATA_PIO0 + apiomode);
@@ -935,8 +911,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA6, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA6 on HighPoint chip\n",
+ ata_printf(scp, device, "%s setting UDMA6 on HighPoint chip\n",
(error) ? "failed" : "success");
if (!error) {
hpt_timing(scp, devno, ATA_UDMA6);
@@ -945,13 +920,12 @@ via_82c586:
}
}
if (!ATAPI_DEVICE(scp, device) &&
- udmamode >=5 && pci_get_revid(parent) >= 0x03 &&
+ udmamode >= 5 && pci_get_revid(parent) >= 0x03 &&
!(pci_read_config(parent, 0x5a, 1) & (scp->channel ? 0x01:0x02))) {
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA5, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA5 on HighPoint chip\n",
+ ata_printf(scp, device, "%s setting UDMA5 on HighPoint chip\n",
(error) ? "failed" : "success");
if (!error) {
hpt_timing(scp, devno, ATA_UDMA5);
@@ -964,8 +938,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA4, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA4 on HighPoint chip\n",
+ ata_printf(scp, device, "%s setting UDMA4 on HighPoint chip\n",
(error) ? "failed" : "success");
if (!error) {
hpt_timing(scp, devno, ATA_UDMA4);
@@ -977,8 +950,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_UDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting UDMA2 on HighPoint chip\n",
+ ata_printf(scp, device, "%s setting UDMA2 on HighPoint chip\n",
(error) ? "failed" : "success");
if (!error) {
hpt_timing(scp, devno, ATA_UDMA2);
@@ -990,8 +962,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_WDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting WDMA2 on HighPoint chip\n",
+ ata_printf(scp, device, "%s setting WDMA2 on HighPoint chip\n",
(error) ? "failed" : "success");
if (!error) {
hpt_timing(scp, devno, ATA_WDMA2);
@@ -1031,8 +1002,7 @@ via_82c586:
error = ata_command(scp, device, ATA_C_SETFEATURES, 0,
ATA_WDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
- ata_printf(scp, device,
- "%s setting WDMA2 on generic chip\n",
+ ata_printf(scp, device, "%s setting WDMA2 on generic chip\n",
(error) ? "failed" : "success");
if (!error) {
scp->mode[ATA_DEV(device)] = ATA_WDMA2;
diff --git a/sys/dev/ata/ata-pci.c b/sys/dev/ata/ata-pci.c
index a661a40..b33296c 100644
--- a/sys/dev/ata/ata-pci.c
+++ b/sys/dev/ata/ata-pci.c
@@ -57,13 +57,11 @@ struct ata_pci_softc {
int irqcnt;
};
-/* prototypes */
-void ata_via686b(device_t);
-
/* misc defines */
-#define IOMASK 0xfffffffc
-#define ATA_MASTERDEV(dev) ((pci_get_progif(dev) & 0x80) && \
- (pci_get_progif(dev) & 0x05) != 0x05)
+#define IOMASK 0xfffffffc
+#define GRANDPARENT(dev) device_get_parent(device_get_parent(dev))
+#define ATA_MASTERDEV(dev) ((pci_get_progif(dev) & 0x80) && \
+ (pci_get_progif(dev) & 0x05) != 0x05)
int
ata_find_dev(device_t dev, u_int32_t devid, u_int32_t revid)
@@ -85,7 +83,7 @@ ata_find_dev(device_t dev, u_int32_t devid, u_int32_t revid)
return 0;
}
-void
+static void
ata_via686b(device_t dev)
{
device_t *children, child;
@@ -174,17 +172,23 @@ ata_pci_match(device_t dev)
if (ata_find_dev(dev, 0x06301039, 0x30) ||
ata_find_dev(dev, 0x06331039, 0x00) ||
ata_find_dev(dev, 0x06351039, 0x00) ||
+ ata_find_dev(dev, 0x06401039, 0x00) ||
ata_find_dev(dev, 0x06451039, 0x00) ||
+ ata_find_dev(dev, 0x06501039, 0x00) ||
ata_find_dev(dev, 0x07301039, 0x00) ||
ata_find_dev(dev, 0x07331039, 0x00) ||
- ata_find_dev(dev, 0x07351039, 0x00))
+ ata_find_dev(dev, 0x07351039, 0x00) ||
+ ata_find_dev(dev, 0x07401039, 0x00) ||
+ ata_find_dev(dev, 0x07451039, 0x00) ||
+ ata_find_dev(dev, 0x07501039, 0x00))
return "SiS 5591 ATA100 controller";
- if (ata_find_dev(dev, 0x05301039, 0x00) ||
+ else if (ata_find_dev(dev, 0x05301039, 0x00) ||
ata_find_dev(dev, 0x05401039, 0x00) ||
ata_find_dev(dev, 0x06201039, 0x00) ||
ata_find_dev(dev, 0x06301039, 0x00))
return "SiS 5591 ATA66 controller";
- return "SiS 5591 ATA33 controller";
+ else
+ return "SiS 5591 ATA33 controller";
case 0x06491095:
return "CMD 649 ATA100 controller";
@@ -198,7 +202,7 @@ ata_pci_match(device_t dev)
case 0xc6931080:
if (pci_get_subclass(dev) == PCIS_STORAGE_IDE)
return "Cypress 82C693 ATA controller";
- break;
+ return NULL;
case 0x01021078:
return "Cyrix 5530 ATA33 controller";
@@ -223,11 +227,11 @@ ata_pci_match(device_t dev)
return "Promise ATA100 controller";
case 0x4d68105a:
- case 0x6268105a:
+ case 0x6268105a:
return "Promise TX2 ATA100 controller";
case 0x4d69105a:
- return "Promise ATA133 controller";
+ return "Promise TX2 ATA133 controller";
case 0x00041103:
switch (pci_get_revid(dev)) {
@@ -241,9 +245,8 @@ ata_pci_match(device_t dev)
return "HighPoint HPT370 ATA100 controller";
case 0x05:
return "HighPoint HPT372 ATA133 controller";
- default:
- return "Unknown revision HighPoint ATA controller";
}
+ return NULL;
/* unsupported but known chipsets, generic DMA only */
case 0x10001042:
@@ -343,7 +346,7 @@ ata_pci_attach(device_t dev)
ATA_OUTB(sc->bmio, 0x1f, ATA_INB(sc->bmio, 0x1f) | 0x01);
break;
- case 0x00041103: /* HighPoint */
+ case 0x00041103: /* HighPoint HPT 366/368/370/372 */
switch (pci_get_revid(dev)) {
case 0x00: /* HPT 366 */
case 0x01:
@@ -358,9 +361,9 @@ ata_pci_attach(device_t dev)
case 0x05: /* HPT 372 */
/* turn off interrupt prediction */
pci_write_config(dev, 0x51,
- (pci_read_config(dev, 0x51, 1) & ~0x02), 1);
+ (pci_read_config(dev, 0x51, 1) & ~0x03), 1);
pci_write_config(dev, 0x55,
- (pci_read_config(dev, 0x55, 1) & ~0x02), 1);
+ (pci_read_config(dev, 0x55, 1) & ~0x03), 1);
/* turn on interrupts */
pci_write_config(dev, 0x5a,
(pci_read_config(dev, 0x5a, 1) & ~0x10), 1);
@@ -471,8 +474,8 @@ ata_pci_intr(struct ata_softc *scp)
break;
case 0x4d68105a: /* Promise TX2 ATA100 */
- case 0x6268105a: /* Promise TX2v2 ATA100 */
- case 0x4d69105a: /* Promise ATA133 */
+ case 0x6268105a: /* Promise TX2 ATA100 */
+ case 0x4d69105a: /* Promise TX2 ATA133 */
ATA_OUTB(scp->r_bmio, ATA_BMDEVSPEC_0, 0x0b);
if (!(ATA_INB(scp->r_bmio, ATA_BMDEVSPEC_1) & 0x20))
return 1;
OpenPOWER on IntegriCloud