diff options
| -rw-r--r-- | drivers/ide/pci/amd74xx.c | 7 | ||||
| -rw-r--r-- | drivers/scsi/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/scsi/ahci.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/ata_piix.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/libata-core.c | 151 | ||||
| -rw-r--r-- | drivers/scsi/libata-eh.c | 63 | ||||
| -rw-r--r-- | drivers/scsi/libata.h | 4 | ||||
| -rw-r--r-- | drivers/scsi/sata_nv.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/sata_sil.c | 31 | ||||
| -rw-r--r-- | drivers/scsi/sata_sil24.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/sata_svw.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/sata_uli.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/sata_via.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/sata_vsc.c | 12 | ||||
| -rw-r--r-- | include/linux/libata.h | 15 | ||||
| -rw-r--r-- | include/linux/pci_ids.h | 2 |
16 files changed, 191 insertions, 110 deletions
diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c index 6e9dbf4d8077..85007cb12c52 100644 --- a/drivers/ide/pci/amd74xx.c +++ b/drivers/ide/pci/amd74xx.c | |||
| @@ -75,6 +75,7 @@ static struct amd_ide_chip { | |||
| 75 | { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE, 0x50, AMD_UDMA_133 }, | 75 | { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE, 0x50, AMD_UDMA_133 }, |
| 76 | { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, 0x50, AMD_UDMA_133 }, | 76 | { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, 0x50, AMD_UDMA_133 }, |
| 77 | { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE, 0x50, AMD_UDMA_133 }, | 77 | { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE, 0x50, AMD_UDMA_133 }, |
| 78 | { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE, 0x50, AMD_UDMA_133 }, | ||
| 78 | { PCI_DEVICE_ID_AMD_CS5536_IDE, 0x40, AMD_UDMA_100 }, | 79 | { PCI_DEVICE_ID_AMD_CS5536_IDE, 0x40, AMD_UDMA_100 }, |
| 79 | { 0 } | 80 | { 0 } |
| 80 | }; | 81 | }; |
| @@ -490,7 +491,8 @@ static ide_pci_device_t amd74xx_chipsets[] __devinitdata = { | |||
| 490 | /* 15 */ DECLARE_NV_DEV("NFORCE-MCP51"), | 491 | /* 15 */ DECLARE_NV_DEV("NFORCE-MCP51"), |
| 491 | /* 16 */ DECLARE_NV_DEV("NFORCE-MCP55"), | 492 | /* 16 */ DECLARE_NV_DEV("NFORCE-MCP55"), |
| 492 | /* 17 */ DECLARE_NV_DEV("NFORCE-MCP61"), | 493 | /* 17 */ DECLARE_NV_DEV("NFORCE-MCP61"), |
| 493 | /* 18 */ DECLARE_AMD_DEV("AMD5536"), | 494 | /* 18 */ DECLARE_NV_DEV("NFORCE-MCP65"), |
| 495 | /* 19 */ DECLARE_AMD_DEV("AMD5536"), | ||
| 494 | }; | 496 | }; |
| 495 | 497 | ||
| 496 | static int __devinit amd74xx_probe(struct pci_dev *dev, const struct pci_device_id *id) | 498 | static int __devinit amd74xx_probe(struct pci_dev *dev, const struct pci_device_id *id) |
| @@ -528,7 +530,8 @@ static struct pci_device_id amd74xx_pci_tbl[] = { | |||
| 528 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 15 }, | 530 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 15 }, |
| 529 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 16 }, | 531 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 16 }, |
| 530 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 17 }, | 532 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 17 }, |
| 531 | { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 18 }, | 533 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 18 }, |
| 534 | { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 19 }, | ||
| 532 | { 0, }, | 535 | { 0, }, |
| 533 | }; | 536 | }; |
| 534 | MODULE_DEVICE_TABLE(pci, amd74xx_pci_tbl); | 537 | MODULE_DEVICE_TABLE(pci, amd74xx_pci_tbl); |
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig index c84b02aec1f3..96a81cd17617 100644 --- a/drivers/scsi/Kconfig +++ b/drivers/scsi/Kconfig | |||
| @@ -501,7 +501,7 @@ config SCSI_ATA_PIIX | |||
| 501 | tristate "Intel PIIX/ICH SATA support" | 501 | tristate "Intel PIIX/ICH SATA support" |
| 502 | depends on SCSI_SATA && PCI | 502 | depends on SCSI_SATA && PCI |
| 503 | help | 503 | help |
| 504 | This option enables support for ICH5 Serial ATA. | 504 | This option enables support for ICH5/6/7/8 Serial ATA. |
| 505 | If PATA support was enabled previously, this enables | 505 | If PATA support was enabled previously, this enables |
| 506 | support for select Intel PIIX/ICH PATA host controllers. | 506 | support for select Intel PIIX/ICH PATA host controllers. |
| 507 | 507 | ||
diff --git a/drivers/scsi/ahci.c b/drivers/scsi/ahci.c index 4bb77f62b3b9..f05946777718 100644 --- a/drivers/scsi/ahci.c +++ b/drivers/scsi/ahci.c | |||
| @@ -48,7 +48,7 @@ | |||
| 48 | #include <asm/io.h> | 48 | #include <asm/io.h> |
| 49 | 49 | ||
| 50 | #define DRV_NAME "ahci" | 50 | #define DRV_NAME "ahci" |
| 51 | #define DRV_VERSION "1.3" | 51 | #define DRV_VERSION "2.0" |
| 52 | 52 | ||
| 53 | 53 | ||
| 54 | enum { | 54 | enum { |
diff --git a/drivers/scsi/ata_piix.c b/drivers/scsi/ata_piix.c index 521b718763f6..94b1261a259d 100644 --- a/drivers/scsi/ata_piix.c +++ b/drivers/scsi/ata_piix.c | |||
| @@ -93,7 +93,7 @@ | |||
| 93 | #include <linux/libata.h> | 93 | #include <linux/libata.h> |
| 94 | 94 | ||
| 95 | #define DRV_NAME "ata_piix" | 95 | #define DRV_NAME "ata_piix" |
| 96 | #define DRV_VERSION "1.10" | 96 | #define DRV_VERSION "2.00" |
| 97 | 97 | ||
| 98 | enum { | 98 | enum { |
| 99 | PIIX_IOCFG = 0x54, /* IDE I/O configuration register */ | 99 | PIIX_IOCFG = 0x54, /* IDE I/O configuration register */ |
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 855ce9a9d948..d1c1c30d123f 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c | |||
| @@ -88,6 +88,10 @@ int libata_fua = 0; | |||
| 88 | module_param_named(fua, libata_fua, int, 0444); | 88 | module_param_named(fua, libata_fua, int, 0444); |
| 89 | MODULE_PARM_DESC(fua, "FUA support (0=off, 1=on)"); | 89 | MODULE_PARM_DESC(fua, "FUA support (0=off, 1=on)"); |
| 90 | 90 | ||
| 91 | static int ata_probe_timeout = ATA_TMOUT_INTERNAL / HZ; | ||
| 92 | module_param(ata_probe_timeout, int, 0444); | ||
| 93 | MODULE_PARM_DESC(ata_probe_timeout, "Set ATA probing timeout (seconds)"); | ||
| 94 | |||
| 91 | MODULE_AUTHOR("Jeff Garzik"); | 95 | MODULE_AUTHOR("Jeff Garzik"); |
| 92 | MODULE_DESCRIPTION("Library module for ATA devices"); | 96 | MODULE_DESCRIPTION("Library module for ATA devices"); |
| 93 | MODULE_LICENSE("GPL"); | 97 | MODULE_LICENSE("GPL"); |
| @@ -777,11 +781,9 @@ void ata_std_dev_select (struct ata_port *ap, unsigned int device) | |||
| 777 | void ata_dev_select(struct ata_port *ap, unsigned int device, | 781 | void ata_dev_select(struct ata_port *ap, unsigned int device, |
| 778 | unsigned int wait, unsigned int can_sleep) | 782 | unsigned int wait, unsigned int can_sleep) |
| 779 | { | 783 | { |
| 780 | if (ata_msg_probe(ap)) { | 784 | if (ata_msg_probe(ap)) |
| 781 | ata_port_printk(ap, KERN_INFO, "ata_dev_select: ENTER, ata%u: " | 785 | ata_port_printk(ap, KERN_INFO, "ata_dev_select: ENTER, ata%u: " |
| 782 | "device %u, wait %u\n", | 786 | "device %u, wait %u\n", ap->id, device, wait); |
| 783 | ap->id, device, wait); | ||
| 784 | } | ||
| 785 | 787 | ||
| 786 | if (wait) | 788 | if (wait) |
| 787 | ata_wait_idle(ap); | 789 | ata_wait_idle(ap); |
| @@ -950,7 +952,8 @@ void ata_port_flush_task(struct ata_port *ap) | |||
| 950 | */ | 952 | */ |
| 951 | if (!cancel_delayed_work(&ap->port_task)) { | 953 | if (!cancel_delayed_work(&ap->port_task)) { |
| 952 | if (ata_msg_ctl(ap)) | 954 | if (ata_msg_ctl(ap)) |
| 953 | ata_port_printk(ap, KERN_DEBUG, "%s: flush #2\n", __FUNCTION__); | 955 | ata_port_printk(ap, KERN_DEBUG, "%s: flush #2\n", |
| 956 | __FUNCTION__); | ||
| 954 | flush_workqueue(ata_wq); | 957 | flush_workqueue(ata_wq); |
| 955 | } | 958 | } |
| 956 | 959 | ||
| @@ -1059,7 +1062,7 @@ unsigned ata_exec_internal(struct ata_device *dev, | |||
| 1059 | 1062 | ||
| 1060 | spin_unlock_irqrestore(ap->lock, flags); | 1063 | spin_unlock_irqrestore(ap->lock, flags); |
| 1061 | 1064 | ||
| 1062 | rc = wait_for_completion_timeout(&wait, ATA_TMOUT_INTERNAL); | 1065 | rc = wait_for_completion_timeout(&wait, ata_probe_timeout); |
| 1063 | 1066 | ||
| 1064 | ata_port_flush_task(ap); | 1067 | ata_port_flush_task(ap); |
| 1065 | 1068 | ||
| @@ -1081,7 +1084,7 @@ unsigned ata_exec_internal(struct ata_device *dev, | |||
| 1081 | 1084 | ||
| 1082 | if (ata_msg_warn(ap)) | 1085 | if (ata_msg_warn(ap)) |
| 1083 | ata_dev_printk(dev, KERN_WARNING, | 1086 | ata_dev_printk(dev, KERN_WARNING, |
| 1084 | "qc timeout (cmd 0x%x)\n", command); | 1087 | "qc timeout (cmd 0x%x)\n", command); |
| 1085 | } | 1088 | } |
| 1086 | 1089 | ||
| 1087 | spin_unlock_irqrestore(ap->lock, flags); | 1090 | spin_unlock_irqrestore(ap->lock, flags); |
| @@ -1093,9 +1096,9 @@ unsigned ata_exec_internal(struct ata_device *dev, | |||
| 1093 | 1096 | ||
| 1094 | if (qc->flags & ATA_QCFLAG_FAILED && !qc->err_mask) { | 1097 | if (qc->flags & ATA_QCFLAG_FAILED && !qc->err_mask) { |
| 1095 | if (ata_msg_warn(ap)) | 1098 | if (ata_msg_warn(ap)) |
| 1096 | ata_dev_printk(dev, KERN_WARNING, | 1099 | ata_dev_printk(dev, KERN_WARNING, |
| 1097 | "zero err_mask for failed " | 1100 | "zero err_mask for failed " |
| 1098 | "internal command, assuming AC_ERR_OTHER\n"); | 1101 | "internal command, assuming AC_ERR_OTHER\n"); |
| 1099 | qc->err_mask |= AC_ERR_OTHER; | 1102 | qc->err_mask |= AC_ERR_OTHER; |
| 1100 | } | 1103 | } |
| 1101 | 1104 | ||
| @@ -1132,6 +1135,33 @@ unsigned ata_exec_internal(struct ata_device *dev, | |||
| 1132 | } | 1135 | } |
| 1133 | 1136 | ||
| 1134 | /** | 1137 | /** |
| 1138 | * ata_do_simple_cmd - execute simple internal command | ||
| 1139 | * @dev: Device to which the command is sent | ||
| 1140 | * @cmd: Opcode to execute | ||
| 1141 | * | ||
| 1142 | * Execute a 'simple' command, that only consists of the opcode | ||
| 1143 | * 'cmd' itself, without filling any other registers | ||
| 1144 | * | ||
| 1145 | * LOCKING: | ||
| 1146 | * Kernel thread context (may sleep). | ||
| 1147 | * | ||
| 1148 | * RETURNS: | ||
| 1149 | * Zero on success, AC_ERR_* mask on failure | ||
| 1150 | */ | ||
| 1151 | unsigned int ata_do_simple_cmd(struct ata_device *dev, u8 cmd) | ||
| 1152 | { | ||
| 1153 | struct ata_taskfile tf; | ||
| 1154 | |||
| 1155 | ata_tf_init(dev, &tf); | ||
| 1156 | |||
| 1157 | tf.command = cmd; | ||
| 1158 | tf.flags |= ATA_TFLAG_DEVICE; | ||
| 1159 | tf.protocol = ATA_PROT_NODATA; | ||
| 1160 | |||
| 1161 | return ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0); | ||
| 1162 | } | ||
| 1163 | |||
| 1164 | /** | ||
| 1135 | * ata_pio_need_iordy - check if iordy needed | 1165 | * ata_pio_need_iordy - check if iordy needed |
| 1136 | * @adev: ATA device | 1166 | * @adev: ATA device |
| 1137 | * | 1167 | * |
| @@ -1193,8 +1223,8 @@ int ata_dev_read_id(struct ata_device *dev, unsigned int *p_class, | |||
| 1193 | int rc; | 1223 | int rc; |
| 1194 | 1224 | ||
| 1195 | if (ata_msg_ctl(ap)) | 1225 | if (ata_msg_ctl(ap)) |
| 1196 | ata_dev_printk(dev, KERN_DEBUG, "%s: ENTER, host %u, dev %u\n", | 1226 | ata_dev_printk(dev, KERN_DEBUG, "%s: ENTER, host %u, dev %u\n", |
| 1197 | __FUNCTION__, ap->id, dev->devno); | 1227 | __FUNCTION__, ap->id, dev->devno); |
| 1198 | 1228 | ||
| 1199 | ata_dev_select(ap, dev->devno, 1, 1); /* select device 0/1 */ | 1229 | ata_dev_select(ap, dev->devno, 1, 1); /* select device 0/1 */ |
| 1200 | 1230 | ||
| @@ -1263,9 +1293,9 @@ int ata_dev_read_id(struct ata_device *dev, unsigned int *p_class, | |||
| 1263 | return 0; | 1293 | return 0; |
| 1264 | 1294 | ||
| 1265 | err_out: | 1295 | err_out: |
| 1266 | if (ata_msg_warn(ap)) | 1296 | if (ata_msg_warn(ap)) |
| 1267 | ata_dev_printk(dev, KERN_WARNING, "failed to IDENTIFY " | 1297 | ata_dev_printk(dev, KERN_WARNING, "failed to IDENTIFY " |
| 1268 | "(%s, err_mask=0x%x)\n", reason, err_mask); | 1298 | "(%s, err_mask=0x%x)\n", reason, err_mask); |
| 1269 | return rc; | 1299 | return rc; |
| 1270 | } | 1300 | } |
| 1271 | 1301 | ||
| @@ -1318,19 +1348,21 @@ int ata_dev_configure(struct ata_device *dev, int print_info) | |||
| 1318 | int i, rc; | 1348 | int i, rc; |
| 1319 | 1349 | ||
| 1320 | if (!ata_dev_enabled(dev) && ata_msg_info(ap)) { | 1350 | if (!ata_dev_enabled(dev) && ata_msg_info(ap)) { |
| 1321 | ata_dev_printk(dev, KERN_INFO, "%s: ENTER/EXIT (host %u, dev %u) -- nodev\n", | 1351 | ata_dev_printk(dev, KERN_INFO, |
| 1322 | __FUNCTION__, ap->id, dev->devno); | 1352 | "%s: ENTER/EXIT (host %u, dev %u) -- nodev\n", |
| 1353 | __FUNCTION__, ap->id, dev->devno); | ||
| 1323 | return 0; | 1354 | return 0; |
| 1324 | } | 1355 | } |
| 1325 | 1356 | ||
| 1326 | if (ata_msg_probe(ap)) | 1357 | if (ata_msg_probe(ap)) |
| 1327 | ata_dev_printk(dev, KERN_DEBUG, "%s: ENTER, host %u, dev %u\n", | 1358 | ata_dev_printk(dev, KERN_DEBUG, "%s: ENTER, host %u, dev %u\n", |
| 1328 | __FUNCTION__, ap->id, dev->devno); | 1359 | __FUNCTION__, ap->id, dev->devno); |
| 1329 | 1360 | ||
| 1330 | /* print device capabilities */ | 1361 | /* print device capabilities */ |
| 1331 | if (ata_msg_probe(ap)) | 1362 | if (ata_msg_probe(ap)) |
| 1332 | ata_dev_printk(dev, KERN_DEBUG, "%s: cfg 49:%04x 82:%04x 83:%04x " | 1363 | ata_dev_printk(dev, KERN_DEBUG, |
| 1333 | "84:%04x 85:%04x 86:%04x 87:%04x 88:%04x\n", | 1364 | "%s: cfg 49:%04x 82:%04x 83:%04x 84:%04x " |
| 1365 | "85:%04x 86:%04x 87:%04x 88:%04x\n", | ||
| 1334 | __FUNCTION__, | 1366 | __FUNCTION__, |
| 1335 | id[49], id[82], id[83], id[84], | 1367 | id[49], id[82], id[83], id[84], |
| 1336 | id[85], id[86], id[87], id[88]); | 1368 | id[85], id[86], id[87], id[88]); |
| @@ -1402,14 +1434,16 @@ int ata_dev_configure(struct ata_device *dev, int print_info) | |||
| 1402 | ata_id_major_version(id), | 1434 | ata_id_major_version(id), |
| 1403 | ata_mode_string(xfer_mask), | 1435 | ata_mode_string(xfer_mask), |
| 1404 | (unsigned long long)dev->n_sectors, | 1436 | (unsigned long long)dev->n_sectors, |
| 1405 | dev->cylinders, dev->heads, dev->sectors); | 1437 | dev->cylinders, dev->heads, |
| 1438 | dev->sectors); | ||
| 1406 | } | 1439 | } |
| 1407 | 1440 | ||
| 1408 | if (dev->id[59] & 0x100) { | 1441 | if (dev->id[59] & 0x100) { |
| 1409 | dev->multi_count = dev->id[59] & 0xff; | 1442 | dev->multi_count = dev->id[59] & 0xff; |
| 1410 | if (ata_msg_info(ap)) | 1443 | if (ata_msg_info(ap)) |
| 1411 | ata_dev_printk(dev, KERN_INFO, "ata%u: dev %u multi count %u\n", | 1444 | ata_dev_printk(dev, KERN_INFO, |
| 1412 | ap->id, dev->devno, dev->multi_count); | 1445 | "ata%u: dev %u multi count %u\n", |
| 1446 | ap->id, dev->devno, dev->multi_count); | ||
| 1413 | } | 1447 | } |
| 1414 | 1448 | ||
| 1415 | dev->cdb_len = 16; | 1449 | dev->cdb_len = 16; |
| @@ -1422,8 +1456,8 @@ int ata_dev_configure(struct ata_device *dev, int print_info) | |||
| 1422 | rc = atapi_cdb_len(id); | 1456 | rc = atapi_cdb_len(id); |
| 1423 | if ((rc < 12) || (rc > ATAPI_CDB_LEN)) { | 1457 | if ((rc < 12) || (rc > ATAPI_CDB_LEN)) { |
| 1424 | if (ata_msg_warn(ap)) | 1458 | if (ata_msg_warn(ap)) |
| 1425 | ata_dev_printk(dev, KERN_WARNING, | 1459 | ata_dev_printk(dev, KERN_WARNING, |
| 1426 | "unsupported CDB len\n"); | 1460 | "unsupported CDB len\n"); |
| 1427 | rc = -EINVAL; | 1461 | rc = -EINVAL; |
| 1428 | goto err_out_nosup; | 1462 | goto err_out_nosup; |
| 1429 | } | 1463 | } |
| @@ -1466,8 +1500,8 @@ int ata_dev_configure(struct ata_device *dev, int print_info) | |||
| 1466 | 1500 | ||
| 1467 | err_out_nosup: | 1501 | err_out_nosup: |
| 1468 | if (ata_msg_probe(ap)) | 1502 | if (ata_msg_probe(ap)) |
| 1469 | ata_dev_printk(dev, KERN_DEBUG, | 1503 | ata_dev_printk(dev, KERN_DEBUG, |
| 1470 | "%s: EXIT, err\n", __FUNCTION__); | 1504 | "%s: EXIT, err\n", __FUNCTION__); |
| 1471 | return rc; | 1505 | return rc; |
| 1472 | } | 1506 | } |
| 1473 | 1507 | ||
| @@ -3527,7 +3561,7 @@ void swap_buf_le16(u16 *buf, unsigned int buf_words) | |||
| 3527 | * Inherited from caller. | 3561 | * Inherited from caller. |
| 3528 | */ | 3562 | */ |
| 3529 | 3563 | ||
| 3530 | void ata_mmio_data_xfer(struct ata_device *adev, unsigned char *buf, | 3564 | void ata_mmio_data_xfer(struct ata_device *adev, unsigned char *buf, |
| 3531 | unsigned int buflen, int write_data) | 3565 | unsigned int buflen, int write_data) |
| 3532 | { | 3566 | { |
| 3533 | struct ata_port *ap = adev->ap; | 3567 | struct ata_port *ap = adev->ap; |
| @@ -3573,7 +3607,7 @@ void ata_mmio_data_xfer(struct ata_device *adev, unsigned char *buf, | |||
| 3573 | * Inherited from caller. | 3607 | * Inherited from caller. |
| 3574 | */ | 3608 | */ |
| 3575 | 3609 | ||
| 3576 | void ata_pio_data_xfer(struct ata_device *adev, unsigned char *buf, | 3610 | void ata_pio_data_xfer(struct ata_device *adev, unsigned char *buf, |
| 3577 | unsigned int buflen, int write_data) | 3611 | unsigned int buflen, int write_data) |
| 3578 | { | 3612 | { |
| 3579 | struct ata_port *ap = adev->ap; | 3613 | struct ata_port *ap = adev->ap; |
| @@ -3607,7 +3641,7 @@ void ata_pio_data_xfer(struct ata_device *adev, unsigned char *buf, | |||
| 3607 | * @buflen: buffer length | 3641 | * @buflen: buffer length |
| 3608 | * @write_data: read/write | 3642 | * @write_data: read/write |
| 3609 | * | 3643 | * |
| 3610 | * Transfer data from/to the device data register by PIO. Do the | 3644 | * Transfer data from/to the device data register by PIO. Do the |
| 3611 | * transfer with interrupts disabled. | 3645 | * transfer with interrupts disabled. |
| 3612 | * | 3646 | * |
| 3613 | * LOCKING: | 3647 | * LOCKING: |
| @@ -4946,31 +4980,9 @@ int ata_port_offline(struct ata_port *ap) | |||
| 4946 | return 0; | 4980 | return 0; |
| 4947 | } | 4981 | } |
| 4948 | 4982 | ||
| 4949 | /* | 4983 | int ata_flush_cache(struct ata_device *dev) |
| 4950 | * Execute a 'simple' command, that only consists of the opcode 'cmd' itself, | ||
| 4951 | * without filling any other registers | ||
| 4952 | */ | ||
| 4953 | static int ata_do_simple_cmd(struct ata_device *dev, u8 cmd) | ||
| 4954 | { | ||
| 4955 | struct ata_taskfile tf; | ||
| 4956 | int err; | ||
| 4957 | |||
| 4958 | ata_tf_init(dev, &tf); | ||
| 4959 | |||
| 4960 | tf.command = cmd; | ||
| 4961 | tf.flags |= ATA_TFLAG_DEVICE; | ||
| 4962 | tf.protocol = ATA_PROT_NODATA; | ||
| 4963 | |||
| 4964 | err = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0); | ||
| 4965 | if (err) | ||
| 4966 | ata_dev_printk(dev, KERN_ERR, "%s: ata command failed: %d\n", | ||
| 4967 | __FUNCTION__, err); | ||
| 4968 | |||
| 4969 | return err; | ||
| 4970 | } | ||
| 4971 | |||
| 4972 | static int ata_flush_cache(struct ata_device *dev) | ||
| 4973 | { | 4984 | { |
| 4985 | unsigned int err_mask; | ||
| 4974 | u8 cmd; | 4986 | u8 cmd; |
| 4975 | 4987 | ||
| 4976 | if (!ata_try_flush_cache(dev)) | 4988 | if (!ata_try_flush_cache(dev)) |
| @@ -4981,17 +4993,41 @@ static int ata_flush_cache(struct ata_device *dev) | |||
| 4981 | else | 4993 | else |
| 4982 | cmd = ATA_CMD_FLUSH; | 4994 | cmd = ATA_CMD_FLUSH; |
| 4983 | 4995 | ||
| 4984 | return ata_do_simple_cmd(dev, cmd); | 4996 | err_mask = ata_do_simple_cmd(dev, cmd); |
| 4997 | if (err_mask) { | ||
| 4998 | ata_dev_printk(dev, KERN_ERR, "failed to flush cache\n"); | ||
| 4999 | return -EIO; | ||
| 5000 | } | ||
| 5001 | |||
| 5002 | return 0; | ||
| 4985 | } | 5003 | } |
| 4986 | 5004 | ||
| 4987 | static int ata_standby_drive(struct ata_device *dev) | 5005 | static int ata_standby_drive(struct ata_device *dev) |
| 4988 | { | 5006 | { |
| 4989 | return ata_do_simple_cmd(dev, ATA_CMD_STANDBYNOW1); | 5007 | unsigned int err_mask; |
| 5008 | |||
| 5009 | err_mask = ata_do_simple_cmd(dev, ATA_CMD_STANDBYNOW1); | ||
| 5010 | if (err_mask) { | ||
| 5011 | ata_dev_printk(dev, KERN_ERR, "failed to standby drive " | ||
| 5012 | "(err_mask=0x%x)\n", err_mask); | ||
| 5013 | return -EIO; | ||
| 5014 | } | ||
| 5015 | |||
| 5016 | return 0; | ||
| 4990 | } | 5017 | } |
| 4991 | 5018 | ||
| 4992 | static int ata_start_drive(struct ata_device *dev) | 5019 | static int ata_start_drive(struct ata_device *dev) |
| 4993 | { | 5020 | { |
| 4994 | return ata_do_simple_cmd(dev, ATA_CMD_IDLEIMMEDIATE); | 5021 | unsigned int err_mask; |
| 5022 | |||
| 5023 | err_mask = ata_do_simple_cmd(dev, ATA_CMD_IDLEIMMEDIATE); | ||
| 5024 | if (err_mask) { | ||
| 5025 | ata_dev_printk(dev, KERN_ERR, "failed to start drive " | ||
| 5026 | "(err_mask=0x%x)\n", err_mask); | ||
| 5027 | return -EIO; | ||
| 5028 | } | ||
| 5029 | |||
| 5030 | return 0; | ||
| 4995 | } | 5031 | } |
| 4996 | 5032 | ||
| 4997 | /** | 5033 | /** |
| @@ -5212,7 +5248,7 @@ static void ata_host_init(struct ata_port *ap, struct Scsi_Host *host, | |||
| 5212 | ap->msg_enable = 0x00FF; | 5248 | ap->msg_enable = 0x00FF; |
| 5213 | #elif defined(ATA_DEBUG) | 5249 | #elif defined(ATA_DEBUG) |
| 5214 | ap->msg_enable = ATA_MSG_DRV | ATA_MSG_INFO | ATA_MSG_CTL | ATA_MSG_WARN | ATA_MSG_ERR; | 5250 | ap->msg_enable = ATA_MSG_DRV | ATA_MSG_INFO | ATA_MSG_CTL | ATA_MSG_WARN | ATA_MSG_ERR; |
| 5215 | #else | 5251 | #else |
| 5216 | ap->msg_enable = ATA_MSG_DRV | ATA_MSG_ERR | ATA_MSG_WARN; | 5252 | ap->msg_enable = ATA_MSG_DRV | ATA_MSG_ERR | ATA_MSG_WARN; |
| 5217 | #endif | 5253 | #endif |
| 5218 | 5254 | ||
| @@ -5709,6 +5745,7 @@ int ata_pci_device_resume(struct pci_dev *pdev) | |||
| 5709 | 5745 | ||
| 5710 | static int __init ata_init(void) | 5746 | static int __init ata_init(void) |
| 5711 | { | 5747 | { |
| 5748 | ata_probe_timeout *= HZ; | ||
| 5712 | ata_wq = create_workqueue("ata"); | 5749 | ata_wq = create_workqueue("ata"); |
| 5713 | if (!ata_wq) | 5750 | if (!ata_wq) |
| 5714 | return -ENOMEM; | 5751 | return -ENOMEM; |
diff --git a/drivers/scsi/libata-eh.c b/drivers/scsi/libata-eh.c index 823385981a7a..bf5a72aca8a4 100644 --- a/drivers/scsi/libata-eh.c +++ b/drivers/scsi/libata-eh.c | |||
| @@ -93,6 +93,38 @@ static int ata_ering_map(struct ata_ering *ering, | |||
| 93 | return rc; | 93 | return rc; |
| 94 | } | 94 | } |
| 95 | 95 | ||
| 96 | static unsigned int ata_eh_dev_action(struct ata_device *dev) | ||
| 97 | { | ||
| 98 | struct ata_eh_context *ehc = &dev->ap->eh_context; | ||
| 99 | |||
| 100 | return ehc->i.action | ehc->i.dev_action[dev->devno]; | ||
| 101 | } | ||
| 102 | |||
| 103 | static void ata_eh_clear_action(struct ata_device *dev, | ||
| 104 | struct ata_eh_info *ehi, unsigned int action) | ||
| 105 | { | ||
| 106 | int i; | ||
| 107 | |||
| 108 | if (!dev) { | ||
| 109 | ehi->action &= ~action; | ||
| 110 | for (i = 0; i < ATA_MAX_DEVICES; i++) | ||
| 111 | ehi->dev_action[i] &= ~action; | ||
| 112 | } else { | ||
| 113 | /* doesn't make sense for port-wide EH actions */ | ||
| 114 | WARN_ON(!(action & ATA_EH_PERDEV_MASK)); | ||
| 115 | |||
| 116 | /* break ehi->action into ehi->dev_action */ | ||
| 117 | if (ehi->action & action) { | ||
| 118 | for (i = 0; i < ATA_MAX_DEVICES; i++) | ||
| 119 | ehi->dev_action[i] |= ehi->action & action; | ||
| 120 | ehi->action &= ~action; | ||
| 121 | } | ||
| 122 | |||
| 123 | /* turn off the specified per-dev action */ | ||
| 124 | ehi->dev_action[dev->devno] &= ~action; | ||
| 125 | } | ||
| 126 | } | ||
| 127 | |||
| 96 | /** | 128 | /** |
| 97 | * ata_scsi_timed_out - SCSI layer time out callback | 129 | * ata_scsi_timed_out - SCSI layer time out callback |
| 98 | * @cmd: timed out SCSI command | 130 | * @cmd: timed out SCSI command |
| @@ -702,32 +734,11 @@ static void ata_eh_detach_dev(struct ata_device *dev) | |||
| 702 | ap->flags |= ATA_FLAG_SCSI_HOTPLUG; | 734 | ap->flags |= ATA_FLAG_SCSI_HOTPLUG; |
| 703 | } | 735 | } |
| 704 | 736 | ||
| 705 | spin_unlock_irqrestore(ap->lock, flags); | 737 | /* clear per-dev EH actions */ |
| 706 | } | 738 | ata_eh_clear_action(dev, &ap->eh_info, ATA_EH_PERDEV_MASK); |
| 707 | 739 | ata_eh_clear_action(dev, &ap->eh_context.i, ATA_EH_PERDEV_MASK); | |
| 708 | static void ata_eh_clear_action(struct ata_device *dev, | ||
| 709 | struct ata_eh_info *ehi, unsigned int action) | ||
| 710 | { | ||
| 711 | int i; | ||
| 712 | 740 | ||
| 713 | if (!dev) { | 741 | spin_unlock_irqrestore(ap->lock, flags); |
| 714 | ehi->action &= ~action; | ||
| 715 | for (i = 0; i < ATA_MAX_DEVICES; i++) | ||
| 716 | ehi->dev_action[i] &= ~action; | ||
| 717 | } else { | ||
| 718 | /* doesn't make sense for port-wide EH actions */ | ||
| 719 | WARN_ON(!(action & ATA_EH_PERDEV_MASK)); | ||
| 720 | |||
| 721 | /* break ehi->action into ehi->dev_action */ | ||
| 722 | if (ehi->action & action) { | ||
| 723 | for (i = 0; i < ATA_MAX_DEVICES; i++) | ||
| 724 | ehi->dev_action[i] |= ehi->action & action; | ||
| 725 | ehi->action &= ~action; | ||
| 726 | } | ||
| 727 | |||
| 728 | /* turn off the specified per-dev action */ | ||
| 729 | ehi->dev_action[dev->devno] &= ~action; | ||
| 730 | } | ||
| 731 | } | 742 | } |
| 732 | 743 | ||
| 733 | /** | 744 | /** |
| @@ -1592,7 +1603,7 @@ static int ata_eh_revalidate_and_attach(struct ata_port *ap, | |||
| 1592 | unsigned int action; | 1603 | unsigned int action; |
| 1593 | 1604 | ||
| 1594 | dev = &ap->device[i]; | 1605 | dev = &ap->device[i]; |
| 1595 | action = ehc->i.action | ehc->i.dev_action[dev->devno]; | 1606 | action = ata_eh_dev_action(dev); |
| 1596 | 1607 | ||
| 1597 | if (action & ATA_EH_REVALIDATE && ata_dev_enabled(dev)) { | 1608 | if (action & ATA_EH_REVALIDATE && ata_dev_enabled(dev)) { |
| 1598 | if (ata_port_offline(ap)) { | 1609 | if (ata_port_offline(ap)) { |
diff --git a/drivers/scsi/libata.h b/drivers/scsi/libata.h index bdd488897096..c325679d9b54 100644 --- a/drivers/scsi/libata.h +++ b/drivers/scsi/libata.h | |||
| @@ -29,7 +29,7 @@ | |||
| 29 | #define __LIBATA_H__ | 29 | #define __LIBATA_H__ |
| 30 | 30 | ||
| 31 | #define DRV_NAME "libata" | 31 | #define DRV_NAME "libata" |
| 32 | #define DRV_VERSION "1.30" /* must be exactly four chars */ | 32 | #define DRV_VERSION "2.00" /* must be exactly four chars */ |
| 33 | 33 | ||
| 34 | struct ata_scsi_args { | 34 | struct ata_scsi_args { |
| 35 | struct ata_device *dev; | 35 | struct ata_device *dev; |
| @@ -50,6 +50,7 @@ extern void ata_port_flush_task(struct ata_port *ap); | |||
| 50 | extern unsigned ata_exec_internal(struct ata_device *dev, | 50 | extern unsigned ata_exec_internal(struct ata_device *dev, |
| 51 | struct ata_taskfile *tf, const u8 *cdb, | 51 | struct ata_taskfile *tf, const u8 *cdb, |
| 52 | int dma_dir, void *buf, unsigned int buflen); | 52 | int dma_dir, void *buf, unsigned int buflen); |
| 53 | extern unsigned int ata_do_simple_cmd(struct ata_device *dev, u8 cmd); | ||
| 53 | extern int ata_dev_read_id(struct ata_device *dev, unsigned int *p_class, | 54 | extern int ata_dev_read_id(struct ata_device *dev, unsigned int *p_class, |
| 54 | int post_reset, u16 *id); | 55 | int post_reset, u16 *id); |
| 55 | extern int ata_dev_configure(struct ata_device *dev, int print_info); | 56 | extern int ata_dev_configure(struct ata_device *dev, int print_info); |
| @@ -64,6 +65,7 @@ extern int ata_check_atapi_dma(struct ata_queued_cmd *qc); | |||
| 64 | extern void ata_dev_select(struct ata_port *ap, unsigned int device, | 65 | extern void ata_dev_select(struct ata_port *ap, unsigned int device, |
| 65 | unsigned int wait, unsigned int can_sleep); | 66 | unsigned int wait, unsigned int can_sleep); |
| 66 | extern void swap_buf_le16(u16 *buf, unsigned int buf_words); | 67 | extern void swap_buf_le16(u16 *buf, unsigned int buf_words); |
| 68 | extern int ata_flush_cache(struct ata_device *dev); | ||
| 67 | extern void ata_dev_init(struct ata_device *dev); | 69 | extern void ata_dev_init(struct ata_device *dev); |
| 68 | extern int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg); | 70 | extern int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg); |
| 69 | extern int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg); | 71 | extern int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg); |
diff --git a/drivers/scsi/sata_nv.c b/drivers/scsi/sata_nv.c index d18e7e0932ef..5cc42c6054eb 100644 --- a/drivers/scsi/sata_nv.c +++ b/drivers/scsi/sata_nv.c | |||
| @@ -44,7 +44,7 @@ | |||
| 44 | #include <linux/libata.h> | 44 | #include <linux/libata.h> |
| 45 | 45 | ||
| 46 | #define DRV_NAME "sata_nv" | 46 | #define DRV_NAME "sata_nv" |
| 47 | #define DRV_VERSION "0.9" | 47 | #define DRV_VERSION "2.0" |
| 48 | 48 | ||
| 49 | enum { | 49 | enum { |
| 50 | NV_PORTS = 2, | 50 | NV_PORTS = 2, |
diff --git a/drivers/scsi/sata_sil.c b/drivers/scsi/sata_sil.c index bc9f918a7f28..51d86d750e84 100644 --- a/drivers/scsi/sata_sil.c +++ b/drivers/scsi/sata_sil.c | |||
| @@ -46,12 +46,13 @@ | |||
| 46 | #include <linux/libata.h> | 46 | #include <linux/libata.h> |
| 47 | 47 | ||
| 48 | #define DRV_NAME "sata_sil" | 48 | #define DRV_NAME "sata_sil" |
| 49 | #define DRV_VERSION "1.0" | 49 | #define DRV_VERSION "2.0" |
| 50 | 50 | ||
| 51 | enum { | 51 | enum { |
| 52 | /* | 52 | /* |
| 53 | * host flags | 53 | * host flags |
| 54 | */ | 54 | */ |
| 55 | SIL_FLAG_NO_SATA_IRQ = (1 << 28), | ||
| 55 | SIL_FLAG_RERR_ON_DMA_ACT = (1 << 29), | 56 | SIL_FLAG_RERR_ON_DMA_ACT = (1 << 29), |
| 56 | SIL_FLAG_MOD15WRITE = (1 << 30), | 57 | SIL_FLAG_MOD15WRITE = (1 << 30), |
| 57 | 58 | ||
| @@ -62,8 +63,9 @@ enum { | |||
| 62 | * Controller IDs | 63 | * Controller IDs |
| 63 | */ | 64 | */ |
| 64 | sil_3112 = 0, | 65 | sil_3112 = 0, |
| 65 | sil_3512 = 1, | 66 | sil_3112_no_sata_irq = 1, |
| 66 | sil_3114 = 2, | 67 | sil_3512 = 2, |
| 68 | sil_3114 = 3, | ||
| 67 | 69 | ||
| 68 | /* | 70 | /* |
| 69 | * Register offsets | 71 | * Register offsets |
| @@ -123,8 +125,8 @@ static const struct pci_device_id sil_pci_tbl[] = { | |||
| 123 | { 0x1095, 0x3512, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3512 }, | 125 | { 0x1095, 0x3512, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3512 }, |
| 124 | { 0x1095, 0x3114, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3114 }, | 126 | { 0x1095, 0x3114, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3114 }, |
| 125 | { 0x1002, 0x436e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3112 }, | 127 | { 0x1002, 0x436e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3112 }, |
| 126 | { 0x1002, 0x4379, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3112 }, | 128 | { 0x1002, 0x4379, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3112_no_sata_irq }, |
| 127 | { 0x1002, 0x437a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3112 }, | 129 | { 0x1002, 0x437a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3112_no_sata_irq }, |
| 128 | { } /* terminate list */ | 130 | { } /* terminate list */ |
| 129 | }; | 131 | }; |
| 130 | 132 | ||
| @@ -217,6 +219,16 @@ static const struct ata_port_info sil_port_info[] = { | |||
| 217 | .udma_mask = 0x3f, /* udma0-5 */ | 219 | .udma_mask = 0x3f, /* udma0-5 */ |
| 218 | .port_ops = &sil_ops, | 220 | .port_ops = &sil_ops, |
| 219 | }, | 221 | }, |
| 222 | /* sil_3112_no_sata_irq */ | ||
| 223 | { | ||
| 224 | .sht = &sil_sht, | ||
| 225 | .host_flags = SIL_DFL_HOST_FLAGS | SIL_FLAG_MOD15WRITE | | ||
| 226 | SIL_FLAG_NO_SATA_IRQ, | ||
| 227 | .pio_mask = 0x1f, /* pio0-4 */ | ||
| 228 | .mwdma_mask = 0x07, /* mwdma0-2 */ | ||
| 229 | .udma_mask = 0x3f, /* udma0-5 */ | ||
| 230 | .port_ops = &sil_ops, | ||
| 231 | }, | ||
| 220 | /* sil_3512 */ | 232 | /* sil_3512 */ |
| 221 | { | 233 | { |
| 222 | .sht = &sil_sht, | 234 | .sht = &sil_sht, |
| @@ -437,6 +449,10 @@ static irqreturn_t sil_interrupt(int irq, void *dev_instance, | |||
| 437 | if (unlikely(!ap || ap->flags & ATA_FLAG_DISABLED)) | 449 | if (unlikely(!ap || ap->flags & ATA_FLAG_DISABLED)) |
| 438 | continue; | 450 | continue; |
| 439 | 451 | ||
| 452 | /* turn off SATA_IRQ if not supported */ | ||
| 453 | if (ap->flags & SIL_FLAG_NO_SATA_IRQ) | ||
| 454 | bmdma2 &= ~SIL_DMA_SATA_IRQ; | ||
| 455 | |||
| 440 | if (bmdma2 == 0xffffffff || | 456 | if (bmdma2 == 0xffffffff || |
| 441 | !(bmdma2 & (SIL_DMA_COMPLETE | SIL_DMA_SATA_IRQ))) | 457 | !(bmdma2 & (SIL_DMA_COMPLETE | SIL_DMA_SATA_IRQ))) |
| 442 | continue; | 458 | continue; |
| @@ -474,8 +490,9 @@ static void sil_thaw(struct ata_port *ap) | |||
| 474 | ata_chk_status(ap); | 490 | ata_chk_status(ap); |
| 475 | ata_bmdma_irq_clear(ap); | 491 | ata_bmdma_irq_clear(ap); |
| 476 | 492 | ||
| 477 | /* turn on SATA IRQ */ | 493 | /* turn on SATA IRQ if supported */ |
| 478 | writel(SIL_SIEN_N, mmio_base + sil_port[ap->port_no].sien); | 494 | if (!(ap->flags & SIL_FLAG_NO_SATA_IRQ)) |
| 495 | writel(SIL_SIEN_N, mmio_base + sil_port[ap->port_no].sien); | ||
| 479 | 496 | ||
| 480 | /* turn on IRQ */ | 497 | /* turn on IRQ */ |
| 481 | tmp = readl(mmio_base + SIL_SYSCFG); | 498 | tmp = readl(mmio_base + SIL_SYSCFG); |
diff --git a/drivers/scsi/sata_sil24.c b/drivers/scsi/sata_sil24.c index c8b477c67247..b5f8fa955679 100644 --- a/drivers/scsi/sata_sil24.c +++ b/drivers/scsi/sata_sil24.c | |||
| @@ -31,7 +31,7 @@ | |||
| 31 | #include <asm/io.h> | 31 | #include <asm/io.h> |
| 32 | 32 | ||
| 33 | #define DRV_NAME "sata_sil24" | 33 | #define DRV_NAME "sata_sil24" |
| 34 | #define DRV_VERSION "0.24" | 34 | #define DRV_VERSION "0.3" |
| 35 | 35 | ||
| 36 | /* | 36 | /* |
| 37 | * Port request block (PRB) 32 bytes | 37 | * Port request block (PRB) 32 bytes |
diff --git a/drivers/scsi/sata_svw.c b/drivers/scsi/sata_svw.c index c94b870cf378..7566c2cabaf7 100644 --- a/drivers/scsi/sata_svw.c +++ b/drivers/scsi/sata_svw.c | |||
| @@ -54,7 +54,7 @@ | |||
| 54 | #endif /* CONFIG_PPC_OF */ | 54 | #endif /* CONFIG_PPC_OF */ |
| 55 | 55 | ||
| 56 | #define DRV_NAME "sata_svw" | 56 | #define DRV_NAME "sata_svw" |
| 57 | #define DRV_VERSION "1.8" | 57 | #define DRV_VERSION "2.0" |
| 58 | 58 | ||
| 59 | enum { | 59 | enum { |
| 60 | /* Taskfile registers offsets */ | 60 | /* Taskfile registers offsets */ |
diff --git a/drivers/scsi/sata_uli.c b/drivers/scsi/sata_uli.c index f668c997e9af..64f3c1aeed21 100644 --- a/drivers/scsi/sata_uli.c +++ b/drivers/scsi/sata_uli.c | |||
| @@ -37,7 +37,7 @@ | |||
| 37 | #include <linux/libata.h> | 37 | #include <linux/libata.h> |
| 38 | 38 | ||
| 39 | #define DRV_NAME "sata_uli" | 39 | #define DRV_NAME "sata_uli" |
| 40 | #define DRV_VERSION "0.6" | 40 | #define DRV_VERSION "1.0" |
| 41 | 41 | ||
| 42 | enum { | 42 | enum { |
| 43 | uli_5289 = 0, | 43 | uli_5289 = 0, |
diff --git a/drivers/scsi/sata_via.c b/drivers/scsi/sata_via.c index 322890b400a6..67c3d2999775 100644 --- a/drivers/scsi/sata_via.c +++ b/drivers/scsi/sata_via.c | |||
| @@ -47,7 +47,7 @@ | |||
| 47 | #include <asm/io.h> | 47 | #include <asm/io.h> |
| 48 | 48 | ||
| 49 | #define DRV_NAME "sata_via" | 49 | #define DRV_NAME "sata_via" |
| 50 | #define DRV_VERSION "1.2" | 50 | #define DRV_VERSION "2.0" |
| 51 | 51 | ||
| 52 | enum board_ids_enum { | 52 | enum board_ids_enum { |
| 53 | vt6420, | 53 | vt6420, |
diff --git a/drivers/scsi/sata_vsc.c b/drivers/scsi/sata_vsc.c index 6d0c4f18e652..616fd9634b4b 100644 --- a/drivers/scsi/sata_vsc.c +++ b/drivers/scsi/sata_vsc.c | |||
| @@ -47,7 +47,7 @@ | |||
| 47 | #include <linux/libata.h> | 47 | #include <linux/libata.h> |
| 48 | 48 | ||
| 49 | #define DRV_NAME "sata_vsc" | 49 | #define DRV_NAME "sata_vsc" |
| 50 | #define DRV_VERSION "1.2" | 50 | #define DRV_VERSION "2.0" |
| 51 | 51 | ||
| 52 | enum { | 52 | enum { |
| 53 | /* Interrupt register offsets (from chip base address) */ | 53 | /* Interrupt register offsets (from chip base address) */ |
| @@ -443,16 +443,12 @@ err_out: | |||
| 443 | } | 443 | } |
| 444 | 444 | ||
| 445 | 445 | ||
| 446 | /* | ||
| 447 | * Intel 31244 is supposed to be identical. | ||
| 448 | * Compatibility is untested as of yet. | ||
| 449 | */ | ||
| 450 | static const struct pci_device_id vsc_sata_pci_tbl[] = { | 446 | static const struct pci_device_id vsc_sata_pci_tbl[] = { |
| 451 | { PCI_VENDOR_ID_VITESSE, PCI_DEVICE_ID_VITESSE_VSC7174, | 447 | { PCI_VENDOR_ID_VITESSE, 0x7174, |
| 452 | PCI_ANY_ID, PCI_ANY_ID, 0x10600, 0xFFFFFF, 0 }, | 448 | PCI_ANY_ID, PCI_ANY_ID, 0x10600, 0xFFFFFF, 0 }, |
| 453 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_GD31244, | 449 | { PCI_VENDOR_ID_INTEL, 0x3200, |
| 454 | PCI_ANY_ID, PCI_ANY_ID, 0x10600, 0xFFFFFF, 0 }, | 450 | PCI_ANY_ID, PCI_ANY_ID, 0x10600, 0xFFFFFF, 0 }, |
| 455 | { } | 451 | { } /* terminate list */ |
| 456 | }; | 452 | }; |
| 457 | 453 | ||
| 458 | 454 | ||
diff --git a/include/linux/libata.h b/include/linux/libata.h index 20b1cf527c60..f4284bf89758 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <linux/interrupt.h> | 30 | #include <linux/interrupt.h> |
| 31 | #include <linux/pci.h> | 31 | #include <linux/pci.h> |
| 32 | #include <linux/dma-mapping.h> | 32 | #include <linux/dma-mapping.h> |
| 33 | #include <asm/scatterlist.h> | ||
| 33 | #include <asm/io.h> | 34 | #include <asm/io.h> |
| 34 | #include <linux/ata.h> | 35 | #include <linux/ata.h> |
| 35 | #include <linux/workqueue.h> | 36 | #include <linux/workqueue.h> |
| @@ -887,6 +888,9 @@ static inline unsigned int ata_tag_internal(unsigned int tag) | |||
| 887 | return tag == ATA_MAX_QUEUE - 1; | 888 | return tag == ATA_MAX_QUEUE - 1; |
| 888 | } | 889 | } |
| 889 | 890 | ||
| 891 | /* | ||
| 892 | * device helpers | ||
| 893 | */ | ||
| 890 | static inline unsigned int ata_class_enabled(unsigned int class) | 894 | static inline unsigned int ata_class_enabled(unsigned int class) |
| 891 | { | 895 | { |
| 892 | return class == ATA_DEV_ATA || class == ATA_DEV_ATAPI; | 896 | return class == ATA_DEV_ATA || class == ATA_DEV_ATAPI; |
| @@ -917,6 +921,17 @@ static inline unsigned int ata_dev_absent(const struct ata_device *dev) | |||
| 917 | return ata_class_absent(dev->class); | 921 | return ata_class_absent(dev->class); |
| 918 | } | 922 | } |
| 919 | 923 | ||
| 924 | /* | ||
| 925 | * port helpers | ||
| 926 | */ | ||
| 927 | static inline int ata_port_max_devices(const struct ata_port *ap) | ||
| 928 | { | ||
| 929 | if (ap->flags & ATA_FLAG_SLAVE_POSS) | ||
| 930 | return 2; | ||
| 931 | return 1; | ||
| 932 | } | ||
| 933 | |||
| 934 | |||
| 920 | static inline u8 ata_chk_status(struct ata_port *ap) | 935 | static inline u8 ata_chk_status(struct ata_port *ap) |
| 921 | { | 936 | { |
| 922 | return ap->ops->check_status(ap); | 937 | return ap->ops->check_status(ap); |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index c2fd2d19938b..9ae6b1a75366 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -1202,6 +1202,7 @@ | |||
| 1202 | #define PCI_DEVICE_ID_NVIDIA_NVENET_19 0x03EF | 1202 | #define PCI_DEVICE_ID_NVIDIA_NVENET_19 0x03EF |
| 1203 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2 0x03F6 | 1203 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2 0x03F6 |
| 1204 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3 0x03F7 | 1204 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3 0x03F7 |
| 1205 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE 0x0448 | ||
| 1205 | #define PCI_DEVICE_ID_NVIDIA_NVENET_20 0x0450 | 1206 | #define PCI_DEVICE_ID_NVIDIA_NVENET_20 0x0450 |
| 1206 | #define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451 | 1207 | #define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451 |
| 1207 | #define PCI_DEVICE_ID_NVIDIA_NVENET_22 0x0452 | 1208 | #define PCI_DEVICE_ID_NVIDIA_NVENET_22 0x0452 |
| @@ -2170,7 +2171,6 @@ | |||
| 2170 | #define PCI_DEVICE_ID_INTEL_ICH8_4 0x2815 | 2171 | #define PCI_DEVICE_ID_INTEL_ICH8_4 0x2815 |
| 2171 | #define PCI_DEVICE_ID_INTEL_ICH8_5 0x283e | 2172 | #define PCI_DEVICE_ID_INTEL_ICH8_5 0x283e |
| 2172 | #define PCI_DEVICE_ID_INTEL_ICH8_6 0x2850 | 2173 | #define PCI_DEVICE_ID_INTEL_ICH8_6 0x2850 |
| 2173 | #define PCI_DEVICE_ID_INTEL_GD31244 0x3200 | ||
| 2174 | #define PCI_DEVICE_ID_INTEL_82855PM_HB 0x3340 | 2174 | #define PCI_DEVICE_ID_INTEL_82855PM_HB 0x3340 |
| 2175 | #define PCI_DEVICE_ID_INTEL_82830_HB 0x3575 | 2175 | #define PCI_DEVICE_ID_INTEL_82830_HB 0x3575 |
| 2176 | #define PCI_DEVICE_ID_INTEL_82830_CGC 0x3577 | 2176 | #define PCI_DEVICE_ID_INTEL_82830_CGC 0x3577 |
