aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-disk.c
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-01-25 16:17:07 -0500
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-01-25 16:17:07 -0500
commit9a3c49be5c5f7388eefb712be9a383904140532e (patch)
tree5dc16604e155dcc6c14e65dc3cfce8605f2c8f82 /drivers/ide/ide-disk.c
parent9e42237f26cf517a3f682505f03a3a8d89b3b35d (diff)
ide: add ide_no_data_taskfile() helper
* Add ide_no_data_taskfile() helper and convert ide_raw_taskfile() w/ NO DATA protocol users to use it instead. * Set ->data_phase explicitly in ide_no_data_taskfile() (TASKFILE_NO_DATA is defined as 0x0000). * Unexport task_no_data_intr(). Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/ide-disk.c')
-rw-r--r--drivers/ide/ide-disk.c32
1 files changed, 8 insertions, 24 deletions
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
index 6387222dd200..b534fe97d476 100644
--- a/drivers/ide/ide-disk.c
+++ b/drivers/ide/ide-disk.c
@@ -303,10 +303,8 @@ static u64 idedisk_read_native_max_address(ide_drive_t *drive, int lba48)
303 else 303 else
304 tf->command = WIN_READ_NATIVE_MAX; 304 tf->command = WIN_READ_NATIVE_MAX;
305 tf->device = ATA_LBA; 305 tf->device = ATA_LBA;
306 args.command_type = IDE_DRIVE_TASK_NO_DATA;
307 args.handler = &task_no_data_intr;
308 /* submit command request */ 306 /* submit command request */
309 ide_raw_taskfile(drive, &args, NULL); 307 ide_no_data_taskfile(drive, &args);
310 308
311 /* if OK, compute maximum address value */ 309 /* if OK, compute maximum address value */
312 if ((tf->status & 0x01) == 0) { 310 if ((tf->status & 0x01) == 0) {
@@ -350,10 +348,8 @@ static u64 idedisk_set_max_address(ide_drive_t *drive, u64 addr_req, int lba48)
350 tf->command = WIN_SET_MAX; 348 tf->command = WIN_SET_MAX;
351 } 349 }
352 tf->device |= ATA_LBA; 350 tf->device |= ATA_LBA;
353 args.command_type = IDE_DRIVE_TASK_NO_DATA;
354 args.handler = &task_no_data_intr;
355 /* submit command request */ 351 /* submit command request */
356 ide_raw_taskfile(drive, &args, NULL); 352 ide_no_data_taskfile(drive, &args);
357 /* if OK, compute maximum address value */ 353 /* if OK, compute maximum address value */
358 if ((tf->status & 0x01) == 0) { 354 if ((tf->status & 0x01) == 0) {
359 u32 high, low; 355 u32 high, low;
@@ -500,9 +496,7 @@ static int smart_enable(ide_drive_t *drive)
500 tf->lbam = SMART_LCYL_PASS; 496 tf->lbam = SMART_LCYL_PASS;
501 tf->lbah = SMART_HCYL_PASS; 497 tf->lbah = SMART_HCYL_PASS;
502 tf->command = WIN_SMART; 498 tf->command = WIN_SMART;
503 args.command_type = IDE_DRIVE_TASK_NO_DATA; 499 return ide_no_data_taskfile(drive, &args);
504 args.handler = &task_no_data_intr;
505 return ide_raw_taskfile(drive, &args, NULL);
506} 500}
507 501
508static int get_smart_data(ide_drive_t *drive, u8 *buf, u8 sub_cmd) 502static int get_smart_data(ide_drive_t *drive, u8 *buf, u8 sub_cmd)
@@ -695,9 +689,7 @@ static int write_cache(ide_drive_t *drive, int arg)
695 args.tf.feature = arg ? 689 args.tf.feature = arg ?
696 SETFEATURES_EN_WCACHE : SETFEATURES_DIS_WCACHE; 690 SETFEATURES_EN_WCACHE : SETFEATURES_DIS_WCACHE;
697 args.tf.command = WIN_SETFEATURES; 691 args.tf.command = WIN_SETFEATURES;
698 args.command_type = IDE_DRIVE_TASK_NO_DATA; 692 err = ide_no_data_taskfile(drive, &args);
699 args.handler = &task_no_data_intr;
700 err = ide_raw_taskfile(drive, &args, NULL);
701 if (err == 0) 693 if (err == 0)
702 drive->wcache = arg; 694 drive->wcache = arg;
703 } 695 }
@@ -716,9 +708,7 @@ static int do_idedisk_flushcache (ide_drive_t *drive)
716 args.tf.command = WIN_FLUSH_CACHE_EXT; 708 args.tf.command = WIN_FLUSH_CACHE_EXT;
717 else 709 else
718 args.tf.command = WIN_FLUSH_CACHE; 710 args.tf.command = WIN_FLUSH_CACHE;
719 args.command_type = IDE_DRIVE_TASK_NO_DATA; 711 return ide_no_data_taskfile(drive, &args);
720 args.handler = &task_no_data_intr;
721 return ide_raw_taskfile(drive, &args, NULL);
722} 712}
723 713
724static int set_acoustic (ide_drive_t *drive, int arg) 714static int set_acoustic (ide_drive_t *drive, int arg)
@@ -732,9 +722,7 @@ static int set_acoustic (ide_drive_t *drive, int arg)
732 args.tf.feature = arg ? SETFEATURES_EN_AAM : SETFEATURES_DIS_AAM; 722 args.tf.feature = arg ? SETFEATURES_EN_AAM : SETFEATURES_DIS_AAM;
733 args.tf.nsect = arg; 723 args.tf.nsect = arg;
734 args.tf.command = WIN_SETFEATURES; 724 args.tf.command = WIN_SETFEATURES;
735 args.command_type = IDE_DRIVE_TASK_NO_DATA; 725 ide_no_data_taskfile(drive, &args);
736 args.handler = &task_no_data_intr;
737 ide_raw_taskfile(drive, &args, NULL);
738 drive->acoustic = arg; 726 drive->acoustic = arg;
739 return 0; 727 return 0;
740} 728}
@@ -996,15 +984,13 @@ static int idedisk_open(struct inode *inode, struct file *filp)
996 ide_task_t args; 984 ide_task_t args;
997 memset(&args, 0, sizeof(ide_task_t)); 985 memset(&args, 0, sizeof(ide_task_t));
998 args.tf.command = WIN_DOORLOCK; 986 args.tf.command = WIN_DOORLOCK;
999 args.command_type = IDE_DRIVE_TASK_NO_DATA;
1000 args.handler = &task_no_data_intr;
1001 check_disk_change(inode->i_bdev); 987 check_disk_change(inode->i_bdev);
1002 /* 988 /*
1003 * Ignore the return code from door_lock, 989 * Ignore the return code from door_lock,
1004 * since the open() has already succeeded, 990 * since the open() has already succeeded,
1005 * and the door_lock is irrelevant at this point. 991 * and the door_lock is irrelevant at this point.
1006 */ 992 */
1007 if (drive->doorlocking && ide_raw_taskfile(drive, &args, NULL)) 993 if (drive->doorlocking && ide_no_data_taskfile(drive, &args))
1008 drive->doorlocking = 0; 994 drive->doorlocking = 0;
1009 } 995 }
1010 return 0; 996 return 0;
@@ -1023,9 +1009,7 @@ static int idedisk_release(struct inode *inode, struct file *filp)
1023 ide_task_t args; 1009 ide_task_t args;
1024 memset(&args, 0, sizeof(ide_task_t)); 1010 memset(&args, 0, sizeof(ide_task_t));
1025 args.tf.command = WIN_DOORUNLOCK; 1011 args.tf.command = WIN_DOORUNLOCK;
1026 args.command_type = IDE_DRIVE_TASK_NO_DATA; 1012 if (drive->doorlocking && ide_no_data_taskfile(drive, &args))
1027 args.handler = &task_no_data_intr;
1028 if (drive->doorlocking && ide_raw_taskfile(drive, &args, NULL))
1029 drive->doorlocking = 0; 1013 drive->doorlocking = 0;
1030 } 1014 }
1031 1015