diff options
author | Alan Cox <alan@lxorguk.ukuu.org.uk> | 2007-11-05 17:58:58 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-11-05 18:10:28 -0500 |
commit | 6bbfd53d47abd1fb20d7c93a9b19a75970b66f49 (patch) | |
tree | 9c28b3b033e32dd5a03c08b61bdddcd79283791f /include/linux | |
parent | 73946f9fc5be1433f1e182d11303188390ff242f (diff) |
libata: handle broken cable reporting
One or two ancient drives predated the cable spec and didn't sent the
valid bits for the field. I had hoped to leave this out of libata as a
piece of historical annoyance but a recent CD drive shows the same bug so
we have to import support for it.
Same concept as Bartlomiej's changes old IDE except that as we have
centralised blacklists we can avoid keeping another private table of stuff
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/ata.h | 9 | ||||
-rw-r--r-- | include/linux/libata.h | 1 |
2 files changed, 10 insertions, 0 deletions
diff --git a/include/linux/ata.h b/include/linux/ata.h index 304825b1c977..5c4e54a2a8d6 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h | |||
@@ -537,6 +537,15 @@ static inline int ata_drive_40wire(const u16 *dev_id) | |||
537 | return 1; | 537 | return 1; |
538 | } | 538 | } |
539 | 539 | ||
540 | static inline int ata_drive_40wire_relaxed(const u16 *dev_id) | ||
541 | { | ||
542 | if (ata_id_is_sata(dev_id)) | ||
543 | return 0; /* SATA */ | ||
544 | if ((dev_id[93] & 0x2000) == 0x2000) | ||
545 | return 0; /* 80 wire */ | ||
546 | return 1; | ||
547 | } | ||
548 | |||
540 | static inline int atapi_cdb_len(const u16 *dev_id) | 549 | static inline int atapi_cdb_len(const u16 *dev_id) |
541 | { | 550 | { |
542 | u16 tmp = dev_id[0] & 0x3; | 551 | u16 tmp = dev_id[0] & 0x3; |
diff --git a/include/linux/libata.h b/include/linux/libata.h index 1e277852ba42..56a5673aebad 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -339,6 +339,7 @@ enum { | |||
339 | ATA_HORKAGE_SKIP_PM = (1 << 5), /* Skip PM operations */ | 339 | ATA_HORKAGE_SKIP_PM = (1 << 5), /* Skip PM operations */ |
340 | ATA_HORKAGE_HPA_SIZE = (1 << 6), /* native size off by one */ | 340 | ATA_HORKAGE_HPA_SIZE = (1 << 6), /* native size off by one */ |
341 | ATA_HORKAGE_IPM = (1 << 7), /* Link PM problems */ | 341 | ATA_HORKAGE_IPM = (1 << 7), /* Link PM problems */ |
342 | ATA_HORKAGE_IVB = (1 << 8), /* cbl det validity bit bugs */ | ||
342 | 343 | ||
343 | /* DMA mask for user DMA control: User visible values; DO NOT | 344 | /* DMA mask for user DMA control: User visible values; DO NOT |
344 | renumber */ | 345 | renumber */ |