diff options
author | Martin K. Petersen <martin.petersen@oracle.com> | 2015-05-04 21:54:20 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2015-05-05 09:30:19 -0400 |
commit | 406c057c4e00744453d5b0731eb23629ec14dcdf (patch) | |
tree | d0b8c9cb634e4ca537e15815d2e905101ebf8bdd /include/linux/ata.h | |
parent | f303074160d3401970ccae082014e1ee5a9a52c5 (diff) | |
download | lwn-406c057c4e00744453d5b0731eb23629ec14dcdf.tar.gz lwn-406c057c4e00744453d5b0731eb23629ec14dcdf.zip |
libata: READ LOG DMA EXT support can be in either page 119 or 120
Support for the READ/WRITE LOG DMA EXT commands can be signaled either
in page 119 or page 120. We should check both pages.
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'include/linux/ata.h')
-rw-r--r-- | include/linux/ata.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/include/linux/ata.h b/include/linux/ata.h index b666b773e111..fed36418dd1c 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h @@ -704,9 +704,19 @@ static inline bool ata_id_wcache_enabled(const u16 *id) static inline bool ata_id_has_read_log_dma_ext(const u16 *id) { + /* Word 86 must have bit 15 set */ if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15))) return false; - return id[ATA_ID_COMMAND_SET_3] & (1 << 3); + + /* READ LOG DMA EXT support can be signaled either from word 119 + * or from word 120. The format is the same for both words: Bit + * 15 must be cleared, bit 14 set and bit 3 set. + */ + if ((id[ATA_ID_COMMAND_SET_3] & 0xC008) == 0x4008 || + (id[ATA_ID_COMMAND_SET_4] & 0xC008) == 0x4008) + return true; + + return false; } static inline bool ata_id_has_sense_reporting(const u16 *id) |