ide: ide_id_has_flush_cache_ext() -> ata_id_flush_ext_enabled()
* Add ata_id_flush_ext_enabled() inline helper to <linux/ata.h>. * ide_id_has_flush_cache_ext() -> ata_id_flush_ext_enabled() The latter one also checks if the command is marked as supported in word 83 and validity of words 83 & 86. Cc: Jeff Garzik <jgarzik@pobox.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
4b58f17d7c
commit
ff2779b568
|
@ -576,7 +576,7 @@ static void idedisk_prepare_flush(struct request_queue *q, struct request *rq)
|
|||
BUG_ON(task == NULL);
|
||||
|
||||
memset(task, 0, sizeof(*task));
|
||||
if (ide_id_has_flush_cache_ext(drive->id) &&
|
||||
if (ata_id_flush_ext_enabled(drive->id) &&
|
||||
(drive->capacity64 >= (1UL << 28)))
|
||||
task->tf.command = ATA_CMD_FLUSH_EXT;
|
||||
else
|
||||
|
@ -653,7 +653,7 @@ static void update_ordered(ide_drive_t *drive)
|
|||
capacity = idedisk_capacity(drive);
|
||||
barrier = ata_id_flush_enabled(id) && !drive->noflush &&
|
||||
(drive->addressing == 0 || capacity <= (1ULL << 28) ||
|
||||
ide_id_has_flush_cache_ext(id));
|
||||
ata_id_flush_ext_enabled(id));
|
||||
|
||||
printk(KERN_INFO "%s: cache flushes %ssupported\n",
|
||||
drive->name, barrier ? "" : "not ");
|
||||
|
@ -699,7 +699,7 @@ static int do_idedisk_flushcache(ide_drive_t *drive)
|
|||
ide_task_t args;
|
||||
|
||||
memset(&args, 0, sizeof(ide_task_t));
|
||||
if (ide_id_has_flush_cache_ext(drive->id))
|
||||
if (ata_id_flush_ext_enabled(drive->id))
|
||||
args.tf.command = ATA_CMD_FLUSH_EXT;
|
||||
else
|
||||
args.tf.command = ATA_CMD_FLUSH;
|
||||
|
|
|
@ -188,7 +188,7 @@ static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request *
|
|||
ide_complete_power_step(drive, rq, 0, 0);
|
||||
return ide_stopped;
|
||||
}
|
||||
if (ide_id_has_flush_cache_ext(drive->id))
|
||||
if (ata_id_flush_ext_enabled(drive->id))
|
||||
args->tf.command = ATA_CMD_FLUSH_EXT;
|
||||
else
|
||||
args->tf.command = ATA_CMD_FLUSH;
|
||||
|
|
|
@ -574,6 +574,19 @@ static inline int ata_id_has_flush_ext(const u16 *id)
|
|||
return id[ATA_ID_COMMAND_SET_2] & (1 << 13);
|
||||
}
|
||||
|
||||
static inline int ata_id_flush_ext_enabled(const u16 *id)
|
||||
{
|
||||
if (ata_id_has_flush_ext(id) == 0)
|
||||
return 0;
|
||||
if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000)
|
||||
return 0;
|
||||
/*
|
||||
* some Maxtor disks have bit 13 defined incorrectly
|
||||
* so check bit 10 too
|
||||
*/
|
||||
return (id[ATA_ID_CFS_ENABLE_2] & 0x2400) == 0x2400;
|
||||
}
|
||||
|
||||
static inline int ata_id_has_lba48(const u16 *id)
|
||||
{
|
||||
if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000)
|
||||
|
|
|
@ -1453,10 +1453,6 @@ extern struct mutex ide_cfg_mtx;
|
|||
extern struct bus_type ide_bus_type;
|
||||
extern struct class *ide_port_class;
|
||||
|
||||
/* some Maxtor disks have bit 13 defined incorrectly so check bit 10 too */
|
||||
#define ide_id_has_flush_cache_ext(id) \
|
||||
(((id)[ATA_ID_CFS_ENABLE_2] & 0x2400) == 0x2400)
|
||||
|
||||
static inline void ide_dump_identify(u8 *id)
|
||||
{
|
||||
print_hex_dump(KERN_INFO, "", DUMP_PREFIX_NONE, 16, 2, id, 512, 0);
|
||||
|
|
Loading…
Reference in New Issue