diff options
-rw-r--r-- | drivers/ide/ide-disk.c | 6 | ||||
-rw-r--r-- | drivers/ide/ide-io.c | 2 | ||||
-rw-r--r-- | include/linux/ata.h | 13 | ||||
-rw-r--r-- | include/linux/ide.h | 4 |
4 files changed, 17 insertions, 8 deletions
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c index 7b24dff17460..587d5aac7d5d 100644 --- a/drivers/ide/ide-disk.c +++ b/drivers/ide/ide-disk.c | |||
@@ -576,7 +576,7 @@ static void idedisk_prepare_flush(struct request_queue *q, struct request *rq) | |||
576 | BUG_ON(task == NULL); | 576 | BUG_ON(task == NULL); |
577 | 577 | ||
578 | memset(task, 0, sizeof(*task)); | 578 | memset(task, 0, sizeof(*task)); |
579 | if (ide_id_has_flush_cache_ext(drive->id) && | 579 | if (ata_id_flush_ext_enabled(drive->id) && |
580 | (drive->capacity64 >= (1UL << 28))) | 580 | (drive->capacity64 >= (1UL << 28))) |
581 | task->tf.command = ATA_CMD_FLUSH_EXT; | 581 | task->tf.command = ATA_CMD_FLUSH_EXT; |
582 | else | 582 | else |
@@ -653,7 +653,7 @@ static void update_ordered(ide_drive_t *drive) | |||
653 | capacity = idedisk_capacity(drive); | 653 | capacity = idedisk_capacity(drive); |
654 | barrier = ata_id_flush_enabled(id) && !drive->noflush && | 654 | barrier = ata_id_flush_enabled(id) && !drive->noflush && |
655 | (drive->addressing == 0 || capacity <= (1ULL << 28) || | 655 | (drive->addressing == 0 || capacity <= (1ULL << 28) || |
656 | ide_id_has_flush_cache_ext(id)); | 656 | ata_id_flush_ext_enabled(id)); |
657 | 657 | ||
658 | printk(KERN_INFO "%s: cache flushes %ssupported\n", | 658 | printk(KERN_INFO "%s: cache flushes %ssupported\n", |
659 | drive->name, barrier ? "" : "not "); | 659 | drive->name, barrier ? "" : "not "); |
@@ -699,7 +699,7 @@ static int do_idedisk_flushcache(ide_drive_t *drive) | |||
699 | ide_task_t args; | 699 | ide_task_t args; |
700 | 700 | ||
701 | memset(&args, 0, sizeof(ide_task_t)); | 701 | memset(&args, 0, sizeof(ide_task_t)); |
702 | if (ide_id_has_flush_cache_ext(drive->id)) | 702 | if (ata_id_flush_ext_enabled(drive->id)) |
703 | args.tf.command = ATA_CMD_FLUSH_EXT; | 703 | args.tf.command = ATA_CMD_FLUSH_EXT; |
704 | else | 704 | else |
705 | args.tf.command = ATA_CMD_FLUSH; | 705 | args.tf.command = ATA_CMD_FLUSH; |
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index c1596178fcae..ec6664b0d3a9 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
@@ -188,7 +188,7 @@ static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request * | |||
188 | ide_complete_power_step(drive, rq, 0, 0); | 188 | ide_complete_power_step(drive, rq, 0, 0); |
189 | return ide_stopped; | 189 | return ide_stopped; |
190 | } | 190 | } |
191 | if (ide_id_has_flush_cache_ext(drive->id)) | 191 | if (ata_id_flush_ext_enabled(drive->id)) |
192 | args->tf.command = ATA_CMD_FLUSH_EXT; | 192 | args->tf.command = ATA_CMD_FLUSH_EXT; |
193 | else | 193 | else |
194 | args->tf.command = ATA_CMD_FLUSH; | 194 | args->tf.command = ATA_CMD_FLUSH; |
diff --git a/include/linux/ata.h b/include/linux/ata.h index 921cf0fc337f..81d9adeb819e 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h | |||
@@ -574,6 +574,19 @@ static inline int ata_id_has_flush_ext(const u16 *id) | |||
574 | return id[ATA_ID_COMMAND_SET_2] & (1 << 13); | 574 | return id[ATA_ID_COMMAND_SET_2] & (1 << 13); |
575 | } | 575 | } |
576 | 576 | ||
577 | static inline int ata_id_flush_ext_enabled(const u16 *id) | ||
578 | { | ||
579 | if (ata_id_has_flush_ext(id) == 0) | ||
580 | return 0; | ||
581 | if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000) | ||
582 | return 0; | ||
583 | /* | ||
584 | * some Maxtor disks have bit 13 defined incorrectly | ||
585 | * so check bit 10 too | ||
586 | */ | ||
587 | return (id[ATA_ID_CFS_ENABLE_2] & 0x2400) == 0x2400; | ||
588 | } | ||
589 | |||
577 | static inline int ata_id_has_lba48(const u16 *id) | 590 | static inline int ata_id_has_lba48(const u16 *id) |
578 | { | 591 | { |
579 | if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000) | 592 | if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000) |
diff --git a/include/linux/ide.h b/include/linux/ide.h index d2213d7cc4cb..432eb98f7fe7 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -1453,10 +1453,6 @@ extern struct mutex ide_cfg_mtx; | |||
1453 | extern struct bus_type ide_bus_type; | 1453 | extern struct bus_type ide_bus_type; |
1454 | extern struct class *ide_port_class; | 1454 | extern struct class *ide_port_class; |
1455 | 1455 | ||
1456 | /* some Maxtor disks have bit 13 defined incorrectly so check bit 10 too */ | ||
1457 | #define ide_id_has_flush_cache_ext(id) \ | ||
1458 | (((id)[ATA_ID_CFS_ENABLE_2] & 0x2400) == 0x2400) | ||
1459 | |||
1460 | static inline void ide_dump_identify(u8 *id) | 1456 | static inline void ide_dump_identify(u8 *id) |
1461 | { | 1457 | { |
1462 | print_hex_dump(KERN_INFO, "", DUMP_PREFIX_NONE, 16, 2, id, 512, 0); | 1458 | print_hex_dump(KERN_INFO, "", DUMP_PREFIX_NONE, 16, 2, id, 512, 0); |