patch-2.4.10 linux/drivers/ide/via82cxxx.c
Next file: linux/drivers/ieee1394/highlevel.c
Previous file: linux/drivers/ide/sl82c105.c
Back to the patch index
Back to the overall index
- Lines: 132
- Date:
Tue Sep 11 08:40:36 2001
- Orig file:
v2.4.9/linux/drivers/ide/via82cxxx.c
- Orig date:
Mon Aug 27 12:41:41 2001
diff -u --recursive --new-file v2.4.9/linux/drivers/ide/via82cxxx.c linux/drivers/ide/via82cxxx.c
@@ -1,5 +1,5 @@
/*
- * $Id: via82cxxx.c,v 3.23 2001/03/09 09:30:00 vojtech Exp $
+ * $Id: via82cxxx.c,v 3.29 2001/09/10 10:06:00 vojtech Exp $
*
* Copyright (c) 2000-2001 Vojtech Pavlik
*
@@ -14,17 +14,20 @@
/*
* VIA IDE driver for Linux. Supports
*
- * vt82c586, vt82c586a, vt82c586b, vt82c596a, vt82c596b,
+ * vt82c576, vt82c586, vt82c586a, vt82c586b, vt82c596a, vt82c596b,
* vt82c686, vt82c686a, vt82c686b, vt8231, vt8233
*
* southbridges, which can be found in
*
- * VIA Apollo VP, VPX, VPX/97, VP2, VP2/97, VP3, MVP3, MVP4, P6, Pro,
- * Pro Plus, Pro 133, Pro 133A, ProMedia PM601, ProSavage PM133, PLE133,
- * Pro 266, KX133, KT133, ProSavage KM133, KT133A, KT266
- * PC-Chips VXPro, VXPro+, TXPro-III, TXPro-AGP, ViaGra, BXToo, BXTel
- * AMD 640, 640 AGP, 750 IronGate
- * ETEQ 6618, 6628, 6638
+ * VIA Apollo Master, VP, VP2, VP2/97, VP3, VPX, VPX/97, MVP3, MVP4, P6, Pro,
+ * ProII, ProPlus, Pro133, Pro133+, Pro133A, Pro133A Dual, Pro133T, Pro133Z,
+ * PLE133, PLE133T, Pro266, Pro266T, ProP4X266, PM601, PM133, PN133, PL133T,
+ * PX266, PM266, KX133, KT133, KT133A, KLE133, KT266, KX266, KM133, KM133A,
+ * KL133, KN133, KM266
+ * PC-Chips VXPro, VXPro+, VXTwo, TXPro-III, TXPro-AGP, AGPPro, ViaGra, BXToo,
+ * BXTel, BXpert
+ * AMD 640, 640 AGP, 750 IronGate, 760, 760MP
+ * ETEQ 6618, 6628, 6629, 6638
* Micron Samurai
*
* chipsets. Supports
@@ -87,8 +90,7 @@
#define VIA_BAD_PREQ 0x010 /* Crashes if PREQ# till DDACK# set */
#define VIA_BAD_CLK66 0x020 /* 66 MHz clock doesn't work correctly */
#define VIA_SET_FIFO 0x040 /* Needs to have FIFO split set */
-#define VIA_SET_THRESH 0x080 /* Needs to have FIFO thresholds set */
-#define VIA_BAD_PIO 0x100 /* Always uses 26 PCICLK/xfer regardles of PIO mode */
+#define VIA_NO_UNMASK 0x080 /* Doesn't work with IRQ unmasking on */
/*
* VIA SouthBridge chips.
@@ -101,19 +103,24 @@
unsigned char rev_max;
unsigned short flags;
} via_isa_bridges[] = {
-#ifdef VIA_NEW_BRIDGES_TESTED
- { "vt8233", PCI_DEVICE_ID_VIA_8233_0, 0x00, 0x2f, VIA_UDMA_100 },
- { "vt8231", PCI_DEVICE_ID_VIA_8231, 0x00, 0x2f, VIA_UDMA_66 },
+#ifdef FUTURE_BRIDGES
+ { "vt8237", PCI_DEVICE_ID_VIA_8237, 0x00, 0x2f, VIA_UDMA_100 },
+ { "vt8235", PCI_DEVICE_ID_VIA_8235, 0x00, 0x2f, VIA_UDMA_100 },
+ { "vt8233c", PCI_DEVICE_ID_VIA_8233C, 0x00, 0x2f, VIA_UDMA_100 },
#endif
- { "vt82c686b", PCI_DEVICE_ID_VIA_82C686, 0x40, 0x4f, VIA_UDMA_100 | VIA_BAD_PIO },
+ { "vt8233", PCI_DEVICE_ID_VIA_8233_0, 0x00, 0x2f, VIA_UDMA_100 },
+ { "vt8231", PCI_DEVICE_ID_VIA_8231, 0x00, 0x2f, VIA_UDMA_100 },
+ { "vt82c686b", PCI_DEVICE_ID_VIA_82C686, 0x40, 0x4f, VIA_UDMA_100 },
{ "vt82c686a", PCI_DEVICE_ID_VIA_82C686, 0x10, 0x2f, VIA_UDMA_66 },
{ "vt82c686", PCI_DEVICE_ID_VIA_82C686, 0x00, 0x0f, VIA_UDMA_33 | VIA_BAD_CLK66 },
{ "vt82c596b", PCI_DEVICE_ID_VIA_82C596, 0x10, 0x2f, VIA_UDMA_66 },
{ "vt82c596a", PCI_DEVICE_ID_VIA_82C596, 0x00, 0x0f, VIA_UDMA_33 | VIA_BAD_CLK66 },
- { "vt82c586b", PCI_DEVICE_ID_VIA_82C586_0, 0x40, 0x4f, VIA_UDMA_33 | VIA_SET_FIFO | VIA_BAD_PREQ },
+ { "vt82c586b", PCI_DEVICE_ID_VIA_82C586_0, 0x47, 0x4f, VIA_UDMA_33 | VIA_SET_FIFO },
+ { "vt82c586b", PCI_DEVICE_ID_VIA_82C586_0, 0x40, 0x46, VIA_UDMA_33 | VIA_SET_FIFO | VIA_BAD_PREQ },
{ "vt82c586b", PCI_DEVICE_ID_VIA_82C586_0, 0x30, 0x3f, VIA_UDMA_33 | VIA_SET_FIFO },
{ "vt82c586a", PCI_DEVICE_ID_VIA_82C586_0, 0x20, 0x2f, VIA_UDMA_33 | VIA_SET_FIFO },
{ "vt82c586", PCI_DEVICE_ID_VIA_82C586_0, 0x00, 0x0f, VIA_UDMA_NONE | VIA_SET_FIFO },
+ { "vt82c576", PCI_DEVICE_ID_VIA_82C576, 0x00, 0x2f, VIA_UDMA_NONE | VIA_SET_FIFO | VIA_NO_UNMASK },
{ NULL }
};
@@ -154,7 +161,7 @@
via_print("----------VIA BusMastering IDE Configuration----------------");
- via_print("Driver Version: 3.23");
+ via_print("Driver Version: 3.29");
via_print("South Bridge: VIA %s", via_config->name);
pci_read_config_byte(isa_dev, PCI_REVISION_ID, &t);
@@ -220,8 +227,8 @@
switch (via_config->flags & VIA_UDMA) {
case VIA_UDMA_100:
- speed[i] = 2000 / udma[i];
- cycle[i] = 10 * udma[i];
+ speed[i] = 60 * via_clock / udma[i];
+ cycle[i] = 333 / via_clock * udma[i];
break;
case VIA_UDMA_66:
@@ -301,7 +308,7 @@
switch (via_config->flags & VIA_UDMA) {
case VIA_UDMA_33: UT = T; break;
case VIA_UDMA_66: UT = T/2; break;
- case VIA_UDMA_100: UT = 10; break;
+ case VIA_UDMA_100: UT = T/3; break;
default: UT = T; break;
}
@@ -424,7 +431,7 @@
}
if (via_config->flags & VIA_BAD_CLK66) { /* Disable Clk66 */
- pci_read_config_dword(dev, VIA_UDMA_TIMING, &u); /* Would cause trouble on 596a */
+ pci_read_config_dword(dev, VIA_UDMA_TIMING, &u); /* Would cause trouble on 596a and 686 */
pci_write_config_dword(dev, VIA_UDMA_TIMING, u & ~0x80008);
}
@@ -453,9 +460,6 @@
}
}
- if (via_config->flags & VIA_SET_THRESH) /* 1/2 FIFO full to trigger xmit */
- t = (t & 0xf0) | 0x0a;
-
pci_write_config_byte(dev, VIA_FIFO_CONFIG, t);
/*
@@ -509,7 +513,7 @@
for (i = 0; i < 2; i++) {
hwif->drives[i].io_32bit = 1;
- hwif->drives[i].unmask = 1;
+ hwif->drives[i].unmask = (via_config->flags & VIA_NO_UNMASK) ? 0 : 1;
hwif->drives[i].autotune = 1;
hwif->drives[i].dn = hwif->channel * 2 + i;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)