aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-10-10 16:39:39 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-10-10 16:39:39 -0400
commit0c8a6c7aead1d3be85ce53e3aaacd52e38ede03e (patch)
tree2d43e9303f10c0f06b45bc97e661f0156aaf57da
parent0578042db3191e1ac76b53d213f2a691c3e1eaed (diff)
ide: add ide_do_start_stop() helper
* Add ide_do_start_stop() helper and convert ide-{floppy,tape}.c to use it. * Remove no longer used idefloppy_create_start_stop_cmd() and idetape_create_load_unload_cmd(). There should be no functional changes caused by this patch. Acked-by: Borislav Petkov <petkovbb@gmail.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
-rw-r--r--drivers/ide/ide-atapi.c15
-rw-r--r--drivers/ide/ide-floppy.c19
-rw-r--r--drivers/ide/ide-tape.c24
-rw-r--r--include/linux/ide.h1
4 files changed, 24 insertions, 35 deletions
diff --git a/drivers/ide/ide-atapi.c b/drivers/ide/ide-atapi.c
index c647a40c0d33..58411591edf3 100644
--- a/drivers/ide/ide-atapi.c
+++ b/drivers/ide/ide-atapi.c
@@ -162,6 +162,21 @@ int ide_queue_pc_tail(ide_drive_t *drive, struct gendisk *disk,
162} 162}
163EXPORT_SYMBOL_GPL(ide_queue_pc_tail); 163EXPORT_SYMBOL_GPL(ide_queue_pc_tail);
164 164
165int ide_do_start_stop(ide_drive_t *drive, struct gendisk *disk, int start)
166{
167 struct ide_atapi_pc pc;
168
169 ide_init_pc(&pc);
170 pc.c[0] = START_STOP;
171 pc.c[4] = start;
172
173 if (drive->media == ide_tape)
174 pc.flags |= PC_FLAG_WAIT_FOR_DSC;
175
176 return ide_queue_pc_tail(drive, disk, &pc);
177}
178EXPORT_SYMBOL_GPL(ide_do_start_stop);
179
165int ide_set_media_lock(ide_drive_t *drive, struct gendisk *disk, int on) 180int ide_set_media_lock(ide_drive_t *drive, struct gendisk *disk, int on)
166{ 181{
167 struct ide_atapi_pc pc; 182 struct ide_atapi_pc pc;
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index f39cf404b030..b221a456e535 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -359,13 +359,6 @@ void ide_floppy_create_mode_sense_cmd(struct ide_atapi_pc *pc, u8 page_code)
359 pc->req_xfer = length; 359 pc->req_xfer = length;
360} 360}
361 361
362static void idefloppy_create_start_stop_cmd(struct ide_atapi_pc *pc, int start)
363{
364 ide_init_pc(pc);
365 pc->c[0] = GPCMD_START_STOP_UNIT;
366 pc->c[4] = start;
367}
368
369static void idefloppy_create_rw_cmd(idefloppy_floppy_t *floppy, 362static void idefloppy_create_rw_cmd(idefloppy_floppy_t *floppy,
370 struct ide_atapi_pc *pc, struct request *rq, 363 struct ide_atapi_pc *pc, struct request *rq,
371 unsigned long sector) 364 unsigned long sector)
@@ -800,10 +793,8 @@ static int idefloppy_open(struct inode *inode, struct file *filp)
800 ide_init_pc(&pc); 793 ide_init_pc(&pc);
801 pc.c[0] = GPCMD_TEST_UNIT_READY; 794 pc.c[0] = GPCMD_TEST_UNIT_READY;
802 795
803 if (ide_queue_pc_tail(drive, disk, &pc)) { 796 if (ide_queue_pc_tail(drive, disk, &pc))
804 idefloppy_create_start_stop_cmd(&pc, 1); 797 ide_do_start_stop(drive, disk, 1);
805 (void)ide_queue_pc_tail(drive, disk, &pc);
806 }
807 798
808 if (ide_floppy_get_capacity(drive) 799 if (ide_floppy_get_capacity(drive)
809 && (filp->f_flags & O_NDELAY) == 0 800 && (filp->f_flags & O_NDELAY) == 0
@@ -880,10 +871,8 @@ static int ide_floppy_lockdoor(ide_drive_t *drive, struct ide_atapi_pc *pc,
880 871
881 ide_set_media_lock(drive, disk, prevent); 872 ide_set_media_lock(drive, disk, prevent);
882 873
883 if (cmd == CDROMEJECT) { 874 if (cmd == CDROMEJECT)
884 idefloppy_create_start_stop_cmd(pc, 2); 875 ide_do_start_stop(drive, disk, 2);
885 (void)ide_queue_pc_tail(drive, disk, pc);
886 }
887 876
888 return 0; 877 return 0;
889} 878}
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c
index b7f3eebc0d15..5204bef4a21c 100644
--- a/drivers/ide/ide-tape.c
+++ b/drivers/ide/ide-tape.c
@@ -1125,15 +1125,6 @@ static void idetape_create_test_unit_ready_cmd(struct ide_atapi_pc *pc)
1125 pc->c[0] = TEST_UNIT_READY; 1125 pc->c[0] = TEST_UNIT_READY;
1126} 1126}
1127 1127
1128static void idetape_create_load_unload_cmd(ide_drive_t *drive,
1129 struct ide_atapi_pc *pc, int cmd)
1130{
1131 ide_init_pc(pc);
1132 pc->c[0] = START_STOP;
1133 pc->c[4] = cmd;
1134 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
1135}
1136
1137static int idetape_wait_ready(ide_drive_t *drive, unsigned long timeout) 1128static int idetape_wait_ready(ide_drive_t *drive, unsigned long timeout)
1138{ 1129{
1139 idetape_tape_t *tape = drive->driver_data; 1130 idetape_tape_t *tape = drive->driver_data;
@@ -1153,9 +1144,7 @@ static int idetape_wait_ready(ide_drive_t *drive, unsigned long timeout)
1153 /* no media */ 1144 /* no media */
1154 if (load_attempted) 1145 if (load_attempted)
1155 return -ENOMEDIUM; 1146 return -ENOMEDIUM;
1156 idetape_create_load_unload_cmd(drive, &pc, 1147 ide_do_start_stop(drive, disk, IDETAPE_LU_LOAD_MASK);
1157 IDETAPE_LU_LOAD_MASK);
1158 ide_queue_pc_tail(drive, disk, &pc);
1159 load_attempted = 1; 1148 load_attempted = 1;
1160 /* not about to be ready */ 1149 /* not about to be ready */
1161 } else if (!(tape->sense_key == 2 && tape->asc == 4 && 1150 } else if (!(tape->sense_key == 2 && tape->asc == 4 &&
@@ -1836,9 +1825,7 @@ static int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count)
1836 return 0; 1825 return 0;
1837 case MTLOAD: 1826 case MTLOAD:
1838 ide_tape_discard_merge_buffer(drive, 0); 1827 ide_tape_discard_merge_buffer(drive, 0);
1839 idetape_create_load_unload_cmd(drive, &pc, 1828 return ide_do_start_stop(drive, disk, IDETAPE_LU_LOAD_MASK);
1840 IDETAPE_LU_LOAD_MASK);
1841 return ide_queue_pc_tail(drive, disk, &pc);
1842 case MTUNLOAD: 1829 case MTUNLOAD:
1843 case MTOFFL: 1830 case MTOFFL:
1844 /* 1831 /*
@@ -1850,9 +1837,7 @@ static int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count)
1850 tape->door_locked = DOOR_UNLOCKED; 1837 tape->door_locked = DOOR_UNLOCKED;
1851 } 1838 }
1852 ide_tape_discard_merge_buffer(drive, 0); 1839 ide_tape_discard_merge_buffer(drive, 0);
1853 idetape_create_load_unload_cmd(drive, &pc, 1840 retval = ide_do_start_stop(drive, disk, !IDETAPE_LU_LOAD_MASK);
1854 !IDETAPE_LU_LOAD_MASK);
1855 retval = ide_queue_pc_tail(drive, disk, &pc);
1856 if (!retval) 1841 if (!retval)
1857 clear_bit(IDE_AFLAG_MEDIUM_PRESENT, &drive->atapi_flags); 1842 clear_bit(IDE_AFLAG_MEDIUM_PRESENT, &drive->atapi_flags);
1858 return retval; 1843 return retval;
@@ -1861,9 +1846,8 @@ static int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count)
1861 return idetape_flush_tape_buffers(drive); 1846 return idetape_flush_tape_buffers(drive);
1862 case MTRETEN: 1847 case MTRETEN:
1863 ide_tape_discard_merge_buffer(drive, 0); 1848 ide_tape_discard_merge_buffer(drive, 0);
1864 idetape_create_load_unload_cmd(drive, &pc, 1849 return ide_do_start_stop(drive, disk,
1865 IDETAPE_LU_RETENSION_MASK | IDETAPE_LU_LOAD_MASK); 1850 IDETAPE_LU_RETENSION_MASK | IDETAPE_LU_LOAD_MASK);
1866 return ide_queue_pc_tail(drive, disk, &pc);
1867 case MTEOM: 1851 case MTEOM:
1868 idetape_create_space_cmd(&pc, 0, IDETAPE_SPACE_TO_EOD); 1852 idetape_create_space_cmd(&pc, 0, IDETAPE_SPACE_TO_EOD);
1869 return ide_queue_pc_tail(drive, disk, &pc); 1853 return ide_queue_pc_tail(drive, disk, &pc);
diff --git a/include/linux/ide.h b/include/linux/ide.h
index ac067a3c1be3..be79122b9431 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -1142,6 +1142,7 @@ void ide_queue_pc_head(ide_drive_t *, struct gendisk *, struct ide_atapi_pc *,
1142 struct request *); 1142 struct request *);
1143int ide_queue_pc_tail(ide_drive_t *, struct gendisk *, struct ide_atapi_pc *); 1143int ide_queue_pc_tail(ide_drive_t *, struct gendisk *, struct ide_atapi_pc *);
1144 1144
1145int ide_do_start_stop(ide_drive_t *, struct gendisk *, int);
1145int ide_set_media_lock(ide_drive_t *, struct gendisk *, int); 1146int ide_set_media_lock(ide_drive_t *, struct gendisk *, int);
1146 1147
1147ide_startstop_t ide_pc_intr(ide_drive_t *drive, struct ide_atapi_pc *pc, 1148ide_startstop_t ide_pc_intr(ide_drive_t *drive, struct ide_atapi_pc *pc,