diff options
| author | Alan Cox <alan@lxorguk.ukuu.org.uk> | 2006-08-10 13:52:12 -0400 |
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2006-08-14 14:04:37 -0400 |
| commit | b352e57dc3bb5033996adaa67c2f69b795eddd39 (patch) | |
| tree | 2bfec75e331452c84a591b6fad1e1407b22a1922 /include/linux | |
| parent | cea0d336e7e139becc9432499e0ba8234ffbed5f (diff) | |
[PATCH] libata: Add CompactFlash support
The CFA world has some additional rules and drive modes we need to support for
newer expansion cards and on embedded boxes
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 | 20 | ||||
| -rw-r--r-- | include/linux/libata.h | 4 |
2 files changed, 21 insertions, 3 deletions
diff --git a/include/linux/ata.h b/include/linux/ata.h index 8d708a3d505..991b858acc3 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h | |||
| @@ -170,12 +170,16 @@ enum { | |||
| 170 | XFER_UDMA_2 = 0x42, | 170 | XFER_UDMA_2 = 0x42, |
| 171 | XFER_UDMA_1 = 0x41, | 171 | XFER_UDMA_1 = 0x41, |
| 172 | XFER_UDMA_0 = 0x40, | 172 | XFER_UDMA_0 = 0x40, |
| 173 | XFER_MW_DMA_4 = 0x24, /* CFA only */ | ||
| 174 | XFER_MW_DMA_3 = 0x23, /* CFA only */ | ||
| 173 | XFER_MW_DMA_2 = 0x22, | 175 | XFER_MW_DMA_2 = 0x22, |
| 174 | XFER_MW_DMA_1 = 0x21, | 176 | XFER_MW_DMA_1 = 0x21, |
| 175 | XFER_MW_DMA_0 = 0x20, | 177 | XFER_MW_DMA_0 = 0x20, |
| 176 | XFER_SW_DMA_2 = 0x12, | 178 | XFER_SW_DMA_2 = 0x12, |
| 177 | XFER_SW_DMA_1 = 0x11, | 179 | XFER_SW_DMA_1 = 0x11, |
| 178 | XFER_SW_DMA_0 = 0x10, | 180 | XFER_SW_DMA_0 = 0x10, |
| 181 | XFER_PIO_6 = 0x0E, /* CFA only */ | ||
| 182 | XFER_PIO_5 = 0x0D, /* CFA only */ | ||
| 179 | XFER_PIO_4 = 0x0C, | 183 | XFER_PIO_4 = 0x0C, |
| 180 | XFER_PIO_3 = 0x0B, | 184 | XFER_PIO_3 = 0x0B, |
| 181 | XFER_PIO_2 = 0x0A, | 185 | XFER_PIO_2 = 0x0A, |
| @@ -274,7 +278,6 @@ struct ata_taskfile { | |||
| 274 | }; | 278 | }; |
| 275 | 279 | ||
| 276 | #define ata_id_is_ata(id) (((id)[0] & (1 << 15)) == 0) | 280 | #define ata_id_is_ata(id) (((id)[0] & (1 << 15)) == 0) |
| 277 | #define ata_id_is_cfa(id) ((id)[0] == 0x848A) | ||
| 278 | #define ata_id_is_sata(id) ((id)[93] == 0) | 281 | #define ata_id_is_sata(id) ((id)[93] == 0) |
| 279 | #define ata_id_rahead_enabled(id) ((id)[85] & (1 << 6)) | 282 | #define ata_id_rahead_enabled(id) ((id)[85] & (1 << 6)) |
| 280 | #define ata_id_wcache_enabled(id) ((id)[85] & (1 << 5)) | 283 | #define ata_id_wcache_enabled(id) ((id)[85] & (1 << 5)) |
| @@ -306,6 +309,9 @@ static inline unsigned int ata_id_major_version(const u16 *id) | |||
| 306 | { | 309 | { |
| 307 | unsigned int mver; | 310 | unsigned int mver; |
| 308 | 311 | ||
| 312 | if (id[ATA_ID_MAJOR_VER] == 0xFFFF) | ||
| 313 | return 0; | ||
| 314 | |||
| 309 | for (mver = 14; mver >= 1; mver--) | 315 | for (mver = 14; mver >= 1; mver--) |
| 310 | if (id[ATA_ID_MAJOR_VER] & (1 << mver)) | 316 | if (id[ATA_ID_MAJOR_VER] & (1 << mver)) |
| 311 | break; | 317 | break; |
| @@ -324,6 +330,18 @@ static inline int ata_id_current_chs_valid(const u16 *id) | |||
| 324 | id[56]; /* sectors in current translation */ | 330 | id[56]; /* sectors in current translation */ |
| 325 | } | 331 | } |
| 326 | 332 | ||
| 333 | static inline int ata_id_is_cfa(const u16 *id) | ||
| 334 | { | ||
| 335 | u16 v = id[0]; | ||
| 336 | if (v == 0x848A) /* Standard CF */ | ||
| 337 | return 1; | ||
| 338 | /* Could be CF hiding as standard ATA */ | ||
| 339 | if (ata_id_major_version(id) >= 3 && id[82] != 0xFFFF && | ||
| 340 | (id[82] & ( 1 << 2))) | ||
| 341 | return 1; | ||
| 342 | return 0; | ||
| 343 | } | ||
| 344 | |||
| 327 | static inline int atapi_cdb_len(const u16 *dev_id) | 345 | static inline int atapi_cdb_len(const u16 *dev_id) |
| 328 | { | 346 | { |
| 329 | u16 tmp = dev_id[0] & 0x3; | 347 | u16 tmp = dev_id[0] & 0x3; |
diff --git a/include/linux/libata.h b/include/linux/libata.h index 060da736b3a..806682603ac 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -225,8 +225,8 @@ enum { | |||
| 225 | /* encoding various smaller bitmaps into a single | 225 | /* encoding various smaller bitmaps into a single |
| 226 | * unsigned int bitmap | 226 | * unsigned int bitmap |
| 227 | */ | 227 | */ |
| 228 | ATA_BITS_PIO = 5, | 228 | ATA_BITS_PIO = 7, |
| 229 | ATA_BITS_MWDMA = 3, | 229 | ATA_BITS_MWDMA = 5, |
| 230 | ATA_BITS_UDMA = 8, | 230 | ATA_BITS_UDMA = 8, |
| 231 | 231 | ||
| 232 | ATA_SHIFT_PIO = 0, | 232 | ATA_SHIFT_PIO = 0, |
