aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/libata-core.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-11-07 01:43:03 -0500
committerDavid S. Miller <davem@davemloft.net>2008-11-07 01:43:03 -0500
commit9eeda9abd1faf489f3df9a1f557975f4c8650363 (patch)
tree3e0a58e25b776cfbee193195460324dccb1886c7 /drivers/ata/libata-core.c
parent61c9eaf90081cbe6dc4f389e0056bff76eca19ec (diff)
parent4bab0ea1d42dd1927af9df6fbf0003fc00617c50 (diff)
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/wireless/ath5k/base.c net/8021q/vlan_core.c
Diffstat (limited to 'drivers/ata/libata-core.c')
-rw-r--r--drivers/ata/libata-core.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 2ff633c119e..622350d9b2e 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -1268,7 +1268,7 @@ u64 ata_tf_to_lba48(const struct ata_taskfile *tf)
1268 1268
1269 sectors |= ((u64)(tf->hob_lbah & 0xff)) << 40; 1269 sectors |= ((u64)(tf->hob_lbah & 0xff)) << 40;
1270 sectors |= ((u64)(tf->hob_lbam & 0xff)) << 32; 1270 sectors |= ((u64)(tf->hob_lbam & 0xff)) << 32;
1271 sectors |= (tf->hob_lbal & 0xff) << 24; 1271 sectors |= ((u64)(tf->hob_lbal & 0xff)) << 24;
1272 sectors |= (tf->lbah & 0xff) << 16; 1272 sectors |= (tf->lbah & 0xff) << 16;
1273 sectors |= (tf->lbam & 0xff) << 8; 1273 sectors |= (tf->lbam & 0xff) << 8;
1274 sectors |= (tf->lbal & 0xff); 1274 sectors |= (tf->lbal & 0xff);
@@ -1602,7 +1602,6 @@ unsigned long ata_id_xfermask(const u16 *id)
1602/** 1602/**
1603 * ata_pio_queue_task - Queue port_task 1603 * ata_pio_queue_task - Queue port_task
1604 * @ap: The ata_port to queue port_task for 1604 * @ap: The ata_port to queue port_task for
1605 * @fn: workqueue function to be scheduled
1606 * @data: data for @fn to use 1605 * @data: data for @fn to use
1607 * @delay: delay time in msecs for workqueue function 1606 * @delay: delay time in msecs for workqueue function
1608 * 1607 *
@@ -2159,6 +2158,10 @@ retry:
2159static inline u8 ata_dev_knobble(struct ata_device *dev) 2158static inline u8 ata_dev_knobble(struct ata_device *dev)
2160{ 2159{
2161 struct ata_port *ap = dev->link->ap; 2160 struct ata_port *ap = dev->link->ap;
2161
2162 if (ata_dev_blacklisted(dev) & ATA_HORKAGE_BRIDGE_OK)
2163 return 0;
2164
2162 return ((ap->cbl == ATA_CBL_SATA) && (!ata_id_is_sata(dev->id))); 2165 return ((ap->cbl == ATA_CBL_SATA) && (!ata_id_is_sata(dev->id)));
2163} 2166}
2164 2167
@@ -4021,6 +4024,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
4021 4024
4022 /* Weird ATAPI devices */ 4025 /* Weird ATAPI devices */
4023 { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 }, 4026 { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 },
4027 { "QUANTUM DAT DAT72-000", NULL, ATA_HORKAGE_ATAPI_MOD16_DMA },
4024 4028
4025 /* Devices we expect to fail diagnostics */ 4029 /* Devices we expect to fail diagnostics */
4026 4030
@@ -4063,6 +4067,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
4063 { "TSSTcorp CDDVDW SH-S202N", "SB00", ATA_HORKAGE_IVB, }, 4067 { "TSSTcorp CDDVDW SH-S202N", "SB00", ATA_HORKAGE_IVB, },
4064 { "TSSTcorp CDDVDW SH-S202N", "SB01", ATA_HORKAGE_IVB, }, 4068 { "TSSTcorp CDDVDW SH-S202N", "SB01", ATA_HORKAGE_IVB, },
4065 4069
4070 /* Devices that do not need bridging limits applied */
4071 { "MTRON MSP-SATA*", NULL, ATA_HORKAGE_BRIDGE_OK, },
4072
4066 /* End Marker */ 4073 /* End Marker */
4067 { } 4074 { }
4068}; 4075};
@@ -4438,7 +4445,8 @@ int atapi_check_dma(struct ata_queued_cmd *qc)
4438 /* Don't allow DMA if it isn't multiple of 16 bytes. Quite a 4445 /* Don't allow DMA if it isn't multiple of 16 bytes. Quite a
4439 * few ATAPI devices choke on such DMA requests. 4446 * few ATAPI devices choke on such DMA requests.
4440 */ 4447 */
4441 if (unlikely(qc->nbytes & 15)) 4448 if (!(qc->dev->horkage & ATA_HORKAGE_ATAPI_MOD16_DMA) &&
4449 unlikely(qc->nbytes & 15))
4442 return 1; 4450 return 1;
4443 4451
4444 if (ap->ops->check_atapi_dma) 4452 if (ap->ops->check_atapi_dma)
@@ -4648,7 +4656,6 @@ static void ata_verify_xfer(struct ata_queued_cmd *qc)
4648/** 4656/**
4649 * ata_qc_complete - Complete an active ATA command 4657 * ata_qc_complete - Complete an active ATA command
4650 * @qc: Command to complete 4658 * @qc: Command to complete
4651 * @err_mask: ATA Status register contents
4652 * 4659 *
4653 * Indicate to the mid and upper layers that an ATA 4660 * Indicate to the mid and upper layers that an ATA
4654 * command has completed, with either an ok or not-ok status. 4661 * command has completed, with either an ok or not-ok status.
@@ -5929,7 +5936,7 @@ static void ata_port_detach(struct ata_port *ap)
5929 * to us. Restore SControl and disable all existing devices. 5936 * to us. Restore SControl and disable all existing devices.
5930 */ 5937 */
5931 __ata_port_for_each_link(link, ap) { 5938 __ata_port_for_each_link(link, ap) {
5932 sata_scr_write(link, SCR_CONTROL, link->saved_scontrol); 5939 sata_scr_write(link, SCR_CONTROL, link->saved_scontrol & 0xff0);
5933 ata_link_for_each_dev(dev, link) 5940 ata_link_for_each_dev(dev, link)
5934 ata_dev_disable(dev); 5941 ata_dev_disable(dev);
5935 } 5942 }