Skip to content

Commit

Permalink
ide: ide_id_has_flush_cache() -> ata_id_flush_enabled()
Browse files Browse the repository at this point in the history
* Add ata_id_flush_enabled() inline helper to <linux/ata.h>.

* ide_id_has_flush_cache() -> ata_id_flush_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>
  • Loading branch information
Bartlomiej Zolnierkiewicz committed Oct 10, 2008
1 parent 1a4e4d4 commit 4b58f17
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 7 deletions.
6 changes: 3 additions & 3 deletions drivers/ide/ide-disk.c
Original file line number Diff line number Diff line change
Expand Up @@ -651,7 +651,7 @@ static void update_ordered(ide_drive_t *drive)
* not available so we don't need to recheck that.
*/
capacity = idedisk_capacity(drive);
barrier = ide_id_has_flush_cache(id) && !drive->noflush &&
barrier = ata_id_flush_enabled(id) && !drive->noflush &&
(drive->addressing == 0 || capacity <= (1ULL << 28) ||
ide_id_has_flush_cache_ext(id));

Expand All @@ -678,7 +678,7 @@ static int set_wcache(ide_drive_t *drive, int arg)
if (arg < 0 || arg > 1)
return -EINVAL;

if (ide_id_has_flush_cache(drive->id)) {
if (ata_id_flush_enabled(drive->id)) {
memset(&args, 0, sizeof(ide_task_t));
args.tf.feature = arg ?
SETFEATURES_WC_ON : SETFEATURES_WC_OFF;
Expand Down Expand Up @@ -886,7 +886,7 @@ static void idedisk_setup(ide_drive_t *drive)

static void ide_cacheflush_p(ide_drive_t *drive)
{
if (!drive->wcache || !ide_id_has_flush_cache(drive->id))
if (!drive->wcache || ata_id_flush_enabled(drive->id) == 0)
return;

if (do_idedisk_flushcache(drive))
Expand Down
2 changes: 1 addition & 1 deletion drivers/ide/ide-io.c
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request *
if (drive->media != ide_disk)
break;
/* Not supported? Switch to next step now. */
if (!drive->wcache || !ide_id_has_flush_cache(drive->id)) {
if (!drive->wcache || ata_id_flush_enabled(drive->id) == 0) {
ide_complete_power_step(drive, rq, 0, 0);
return ide_stopped;
}
Expand Down
9 changes: 9 additions & 0 deletions include/linux/ata.h
Original file line number Diff line number Diff line change
Expand Up @@ -558,6 +558,15 @@ static inline int ata_id_has_flush(const u16 *id)
return id[ATA_ID_COMMAND_SET_2] & (1 << 12);
}

static inline int ata_id_flush_enabled(const u16 *id)
{
if (ata_id_has_flush(id) == 0)
return 0;
if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000)
return 0;
return id[ATA_ID_CFS_ENABLE_2] & (1 << 12);
}

static inline int ata_id_has_flush_ext(const u16 *id)
{
if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000)
Expand Down
3 changes: 0 additions & 3 deletions include/linux/ide.h
Original file line number Diff line number Diff line change
Expand Up @@ -1453,9 +1453,6 @@ extern struct mutex ide_cfg_mtx;
extern struct bus_type ide_bus_type;
extern struct class *ide_port_class;

/* check if CACHE FLUSH command is supported (as defined in ATA-6) */
#define ide_id_has_flush_cache(id) ((id)[ATA_ID_CFS_ENABLE_2] & 0x1000)

/* 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)
Expand Down

0 comments on commit 4b58f17

Please sign in to comment.