aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/ata.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/ata.h')
-rw-r--r--include/linux/ata.h25
1 files changed, 18 insertions, 7 deletions
diff --git a/include/linux/ata.h b/include/linux/ata.h
index a53318b8cbd0..6617c9f8f2ca 100644
--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -89,6 +89,8 @@ enum {
89 ATA_ID_DLF = 128, 89 ATA_ID_DLF = 128,
90 ATA_ID_CSFO = 129, 90 ATA_ID_CSFO = 129,
91 ATA_ID_CFA_POWER = 160, 91 ATA_ID_CFA_POWER = 160,
92 ATA_ID_CFA_KEY_MGMT = 162,
93 ATA_ID_CFA_MODES = 163,
92 ATA_ID_ROT_SPEED = 217, 94 ATA_ID_ROT_SPEED = 217,
93 ATA_ID_PIO4 = (1 << 1), 95 ATA_ID_PIO4 = (1 << 1),
94 96
@@ -106,6 +108,8 @@ enum {
106 ATA_PIO5 = ATA_PIO4 | (1 << 5), 108 ATA_PIO5 = ATA_PIO4 | (1 << 5),
107 ATA_PIO6 = ATA_PIO5 | (1 << 6), 109 ATA_PIO6 = ATA_PIO5 | (1 << 6),
108 110
111 ATA_PIO4_ONLY = (1 << 4),
112
109 ATA_SWDMA0 = (1 << 0), 113 ATA_SWDMA0 = (1 << 0),
110 ATA_SWDMA1 = ATA_SWDMA0 | (1 << 1), 114 ATA_SWDMA1 = ATA_SWDMA0 | (1 << 1),
111 ATA_SWDMA2 = ATA_SWDMA1 | (1 << 2), 115 ATA_SWDMA2 = ATA_SWDMA1 | (1 << 2),
@@ -115,6 +119,8 @@ enum {
115 ATA_MWDMA0 = (1 << 0), 119 ATA_MWDMA0 = (1 << 0),
116 ATA_MWDMA1 = ATA_MWDMA0 | (1 << 1), 120 ATA_MWDMA1 = ATA_MWDMA0 | (1 << 1),
117 ATA_MWDMA2 = ATA_MWDMA1 | (1 << 2), 121 ATA_MWDMA2 = ATA_MWDMA1 | (1 << 2),
122 ATA_MWDMA3 = ATA_MWDMA2 | (1 << 3),
123 ATA_MWDMA4 = ATA_MWDMA3 | (1 << 4),
118 124
119 ATA_MWDMA12_ONLY = (1 << 1) | (1 << 2), 125 ATA_MWDMA12_ONLY = (1 << 1) | (1 << 2),
120 ATA_MWDMA2_ONLY = (1 << 2), 126 ATA_MWDMA2_ONLY = (1 << 2),
@@ -129,6 +135,8 @@ enum {
129 ATA_UDMA7 = ATA_UDMA6 | (1 << 7), 135 ATA_UDMA7 = ATA_UDMA6 | (1 << 7),
130 /* ATA_UDMA7 is just for completeness... doesn't exist (yet?). */ 136 /* ATA_UDMA7 is just for completeness... doesn't exist (yet?). */
131 137
138 ATA_UDMA24_ONLY = (1 << 2) | (1 << 4),
139
132 ATA_UDMA_MASK_40C = ATA_UDMA2, /* udma0-2 */ 140 ATA_UDMA_MASK_40C = ATA_UDMA2, /* udma0-2 */
133 141
134 /* DMA-related */ 142 /* DMA-related */
@@ -242,8 +250,6 @@ enum {
242 ATA_CMD_MEDIA_UNLOCK = 0xDF, 250 ATA_CMD_MEDIA_UNLOCK = 0xDF,
243 /* marked obsolete in the ATA/ATAPI-7 spec */ 251 /* marked obsolete in the ATA/ATAPI-7 spec */
244 ATA_CMD_RESTORE = 0x10, 252 ATA_CMD_RESTORE = 0x10,
245 /* EXABYTE specific */
246 ATA_EXABYTE_ENABLE_NEST = 0xF0,
247 253
248 /* READ_LOG_EXT pages */ 254 /* READ_LOG_EXT pages */
249 ATA_LOG_SATA_NCQ = 0x10, 255 ATA_LOG_SATA_NCQ = 0x10,
@@ -731,12 +737,17 @@ static inline int ata_id_current_chs_valid(const u16 *id)
731 737
732static inline int ata_id_is_cfa(const u16 *id) 738static inline int ata_id_is_cfa(const u16 *id)
733{ 739{
734 if (id[ATA_ID_CONFIG] == 0x848A) /* Standard CF */ 740 if (id[ATA_ID_CONFIG] == 0x848A) /* Traditional CF */
735 return 1; 741 return 1;
736 /* Could be CF hiding as standard ATA */ 742 /*
737 if (ata_id_major_version(id) >= 3 && 743 * CF specs don't require specific value in the word 0 anymore and yet
738 id[ATA_ID_COMMAND_SET_1] != 0xFFFF && 744 * they forbid to report the ATA version in the word 80 and require the
739 (id[ATA_ID_COMMAND_SET_1] & (1 << 2))) 745 * CFA feature set support to be indicated in the word 83 in this case.
746 * Unfortunately, some cards only follow either of this requirements,
747 * and while those that don't indicate CFA feature support need some
748 * sort of quirk list, it seems impractical for the ones that do...
749 */
750 if ((id[ATA_ID_COMMAND_SET_2] & 0xC004) == 0x4004)
740 return 1; 751 return 1;
741 return 0; 752 return 0;
742} 753}