aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
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
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')
-rw-r--r--drivers/ide/ide-acpi.c7
-rw-r--r--drivers/ide/ide-disk.c32
-rw-r--r--drivers/ide/ide-taskfile.c12
3 files changed, 20 insertions, 31 deletions
diff --git a/drivers/ide/ide-acpi.c b/drivers/ide/ide-acpi.c
index 747c51889f7d..f0a6a3d6d2d3 100644
--- a/drivers/ide/ide-acpi.c
+++ b/drivers/ide/ide-acpi.c
@@ -383,9 +383,6 @@ static int taskfile_load_raw(ide_drive_t *drive,
383 gtf->tfa[3], gtf->tfa[4], gtf->tfa[5], gtf->tfa[6]); 383 gtf->tfa[3], gtf->tfa[4], gtf->tfa[5], gtf->tfa[6]);
384 384
385 memset(&args, 0, sizeof(ide_task_t)); 385 memset(&args, 0, sizeof(ide_task_t));
386 args.command_type = IDE_DRIVE_TASK_NO_DATA;
387 args.data_phase = TASKFILE_NO_DATA;
388 args.handler = &task_no_data_intr;
389 386
390 /* convert gtf to IDE Taskfile */ 387 /* convert gtf to IDE Taskfile */
391 memcpy(&args.tf_array[7], &gtf->tfa, 7); 388 memcpy(&args.tf_array[7], &gtf->tfa, 7);
@@ -395,9 +392,9 @@ static int taskfile_load_raw(ide_drive_t *drive,
395 return err; 392 return err;
396 } 393 }
397 394
398 err = ide_raw_taskfile(drive, &args, NULL); 395 err = ide_no_data_taskfile(drive, &args);
399 if (err) 396 if (err)
400 printk(KERN_ERR "%s: ide_raw_taskfile failed: %u\n", 397 printk(KERN_ERR "%s: ide_no_data_taskfile failed: %u\n",
401 __FUNCTION__, err); 398 __FUNCTION__, err);
402 399
403 return err; 400 return err;
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
diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c
index a79150e6be07..7cb674f81315 100644
--- a/drivers/ide/ide-taskfile.c
+++ b/drivers/ide/ide-taskfile.c
@@ -229,8 +229,6 @@ ide_startstop_t task_no_data_intr (ide_drive_t *drive)
229 return ide_stopped; 229 return ide_stopped;
230} 230}
231 231
232EXPORT_SYMBOL(task_no_data_intr);
233
234static u8 wait_drive_not_busy(ide_drive_t *drive) 232static u8 wait_drive_not_busy(ide_drive_t *drive)
235{ 233{
236 ide_hwif_t *hwif = HWIF(drive); 234 ide_hwif_t *hwif = HWIF(drive);
@@ -524,6 +522,16 @@ int ide_raw_taskfile (ide_drive_t *drive, ide_task_t *args, u8 *buf)
524 522
525EXPORT_SYMBOL(ide_raw_taskfile); 523EXPORT_SYMBOL(ide_raw_taskfile);
526 524
525int ide_no_data_taskfile(ide_drive_t *drive, ide_task_t *task)
526{
527 task->command_type = IDE_DRIVE_TASK_NO_DATA;
528 task->data_phase = TASKFILE_NO_DATA;
529 task->handler = task_no_data_intr;
530
531 return ide_raw_taskfile(drive, task, NULL);
532}
533EXPORT_SYMBOL_GPL(ide_no_data_taskfile);
534
527#ifdef CONFIG_IDE_TASK_IOCTL 535#ifdef CONFIG_IDE_TASK_IOCTL
528int ide_taskfile_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg) 536int ide_taskfile_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg)
529{ 537{