]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/ide/ide-floppy.c
ide: drop dsc_handle argument from ide_pc_intr()
[linux-2.6-omap-h63xx.git] / drivers / ide / ide-floppy.c
index ca12a230d9a607a141c139bbb948b5b320eaee13..b33080675f6b7f13b9fd9b9ea9b8dfe37b207f5a 100644 (file)
 #define debug_log(fmt, args...) do {} while (0)
 #endif
 
-
-/* Some drives require a longer irq timeout. */
-#define IDEFLOPPY_WAIT_CMD             (5 * WAIT_CMD)
-
 /*
  * After each failed packet command we issue a request sense command and retry
  * the packet command IDEFLOPPY_MAX_PC_RETRIES times.
@@ -160,7 +156,7 @@ static void idefloppy_update_buffers(ide_drive_t *drive,
                idefloppy_end_request(drive, 1, 0);
 }
 
-static void ide_floppy_callback(ide_drive_t *drive)
+static void ide_floppy_callback(ide_drive_t *drive, int dsc)
 {
        idefloppy_floppy_t *floppy = drive->driver_data;
        struct ide_atapi_pc *pc = floppy->pc;
@@ -226,8 +222,8 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive)
        idefloppy_floppy_t *floppy = drive->driver_data;
 
        return ide_pc_intr(drive, floppy->pc, idefloppy_pc_intr,
-                          IDEFLOPPY_WAIT_CMD, NULL, idefloppy_update_buffers,
-                          idefloppy_retry_pc, NULL, ide_io_buffers);
+                          WAIT_FLOPPY_CMD, NULL, idefloppy_update_buffers,
+                          idefloppy_retry_pc, ide_io_buffers);
 }
 
 /*
@@ -244,10 +240,9 @@ static int idefloppy_transfer_pc(ide_drive_t *drive)
        drive->hwif->tp_ops->output_data(drive, NULL, floppy->pc->c, 12);
 
        /* Timeout for the packet command */
-       return IDEFLOPPY_WAIT_CMD;
+       return WAIT_FLOPPY_CMD;
 }
 
-
 /*
  * Called as an interrupt (or directly). When the device says it's ready for a
  * packet, we schedule the packet transfer to occur about 2-3 ticks later in
@@ -272,7 +267,7 @@ static ide_startstop_t idefloppy_start_pc_transfer(ide_drive_t *drive)
                timeout = floppy->ticks;
                expiry = &idefloppy_transfer_pc;
        } else {
-               timeout = IDEFLOPPY_WAIT_CMD;
+               timeout = WAIT_FLOPPY_CMD;
                expiry = NULL;
        }
 
@@ -313,7 +308,7 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t *drive,
                pc->error = IDEFLOPPY_ERROR_GENERAL;
 
                floppy->failed_pc = NULL;
-               drive->pc_callback(drive);
+               drive->pc_callback(drive, 0);
                return ide_stopped;
        }
 
@@ -322,16 +317,7 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t *drive,
        pc->retries++;
 
        return ide_issue_pc(drive, pc, idefloppy_start_pc_transfer,
-                           IDEFLOPPY_WAIT_CMD, NULL);
-}
-
-static void idefloppy_create_prevent_cmd(struct ide_atapi_pc *pc, int prevent)
-{
-       debug_log("creating prevent removal command, prevent = %d\n", prevent);
-
-       ide_init_pc(pc);
-       pc->c[0] = GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL;
-       pc->c[4] = prevent;
+                           WAIT_FLOPPY_CMD, NULL);
 }
 
 void ide_floppy_create_read_capacity_cmd(struct ide_atapi_pc *pc)
@@ -368,13 +354,6 @@ void ide_floppy_create_mode_sense_cmd(struct ide_atapi_pc *pc, u8 page_code)
        pc->req_xfer = length;
 }
 
-static void idefloppy_create_start_stop_cmd(struct ide_atapi_pc *pc, int start)
-{
-       ide_init_pc(pc);
-       pc->c[0] = GPCMD_START_STOP_UNIT;
-       pc->c[4] = start;
-}
-
 static void idefloppy_create_rw_cmd(idefloppy_floppy_t *floppy,
                                    struct ide_atapi_pc *pc, struct request *rq,
                                    unsigned long sector)
@@ -650,9 +629,9 @@ static sector_t idefloppy_capacity(ide_drive_t *drive)
 }
 
 #ifdef CONFIG_IDE_PROC_FS
-ide_devset_rw(bios_cyl,  0, 1023, bios_cyl);
-ide_devset_rw(bios_head, 0,  255, bios_head);
-ide_devset_rw(bios_sect, 0,   63, bios_sect);
+ide_devset_rw_field(bios_cyl, bios_cyl);
+ide_devset_rw_field(bios_head, bios_head);
+ide_devset_rw_field(bios_sect, bios_sect);
 
 static int get_ticks(ide_drive_t *drive)
 {
@@ -667,14 +646,14 @@ static int set_ticks(ide_drive_t *drive, int arg)
        return 0;
 }
 
-IDE_DEVSET(ticks, S_RW, 0, 255, get_ticks, set_ticks);
+IDE_DEVSET(ticks, DS_SYNC, get_ticks, set_ticks);
 
-static const struct ide_devset *idefloppy_settings[] = {
-       &ide_devset_bios_cyl,
-       &ide_devset_bios_head,
-       &ide_devset_bios_sect,
-       &ide_devset_ticks,
-       NULL
+static const struct ide_proc_devset idefloppy_settings[] = {
+       IDE_PROC_DEVSET(bios_cyl,  0, 1023),
+       IDE_PROC_DEVSET(bios_head, 0,  255),
+       IDE_PROC_DEVSET(bios_sect, 0,   63),
+       IDE_PROC_DEVSET(ticks,     0,  255),
+       { 0 },
 };
 #endif
 
@@ -712,6 +691,8 @@ static void idefloppy_setup(ide_drive_t *drive, idefloppy_floppy_t *floppy)
        if (strncmp((char *)&id[ATA_ID_PROD], "IOMEGA Clik!", 11) == 0) {
                blk_queue_max_sectors(drive->queue, 64);
                drive->atapi_flags |= IDE_AFLAG_CLIK_DRIVE;
+               /* IOMEGA Clik! drives do not support lock/unlock commands */
+               drive->atapi_flags |= IDE_AFLAG_NO_DOORLOCK;
        }
 
        (void) ide_floppy_get_capacity(drive);
@@ -782,24 +763,11 @@ static ide_driver_t idefloppy_driver = {
 #endif
 };
 
-static void ide_floppy_set_media_lock(ide_drive_t *drive, int on)
-{
-       struct ide_floppy_obj *floppy = drive->driver_data;
-       struct ide_atapi_pc pc;
-
-       /* IOMEGA Clik! drives do not support lock/unlock commands */
-       if ((drive->atapi_flags & IDE_AFLAG_CLIK_DRIVE) == 0) {
-               idefloppy_create_prevent_cmd(&pc, on);
-               (void)ide_queue_pc_tail(drive, floppy->disk, &pc);
-       }
-}
-
 static int idefloppy_open(struct inode *inode, struct file *filp)
 {
        struct gendisk *disk = inode->i_bdev->bd_disk;
        struct ide_floppy_obj *floppy;
        ide_drive_t *drive;
-       struct ide_atapi_pc pc;
        int ret = 0;
 
        debug_log("Reached %s\n", __func__);
@@ -816,13 +784,8 @@ static int idefloppy_open(struct inode *inode, struct file *filp)
                drive->atapi_flags &= ~IDE_AFLAG_FORMAT_IN_PROGRESS;
                /* Just in case */
 
-               ide_init_pc(&pc);
-               pc.c[0] = GPCMD_TEST_UNIT_READY;
-
-               if (ide_queue_pc_tail(drive, disk, &pc)) {
-                       idefloppy_create_start_stop_cmd(&pc, 1);
-                       (void)ide_queue_pc_tail(drive, disk, &pc);
-               }
+               if (ide_do_test_unit_ready(drive, disk))
+                       ide_do_start_stop(drive, disk, 1);
 
                if (ide_floppy_get_capacity(drive)
                   && (filp->f_flags & O_NDELAY) == 0
@@ -842,7 +805,7 @@ static int idefloppy_open(struct inode *inode, struct file *filp)
                }
 
                drive->atapi_flags |= IDE_AFLAG_MEDIA_CHANGED;
-               ide_floppy_set_media_lock(drive, 1);
+               ide_set_media_lock(drive, disk, 1);
                check_disk_change(inode->i_bdev);
        } else if (drive->atapi_flags & IDE_AFLAG_FORMAT_IN_PROGRESS) {
                ret = -EBUSY;
@@ -865,7 +828,7 @@ static int idefloppy_release(struct inode *inode, struct file *filp)
        debug_log("Reached %s\n", __func__);
 
        if (floppy->openers == 1) {
-               ide_floppy_set_media_lock(drive, 0);
+               ide_set_media_lock(drive, disk, 0);
                drive->atapi_flags &= ~IDE_AFLAG_FORMAT_IN_PROGRESS;
        }
 
@@ -891,17 +854,16 @@ static int ide_floppy_lockdoor(ide_drive_t *drive, struct ide_atapi_pc *pc,
                               unsigned long arg, unsigned int cmd)
 {
        idefloppy_floppy_t *floppy = drive->driver_data;
+       struct gendisk *disk = floppy->disk;
        int prevent = (arg && cmd != CDROMEJECT) ? 1 : 0;
 
        if (floppy->openers > 1)
                return -EBUSY;
 
-       ide_floppy_set_media_lock(drive, prevent);
+       ide_set_media_lock(drive, disk, prevent);
 
-       if (cmd == CDROMEJECT) {
-               idefloppy_create_start_stop_cmd(pc, 2);
-               (void)ide_queue_pc_tail(drive, floppy->disk, pc);
-       }
+       if (cmd == CDROMEJECT)
+               ide_do_start_stop(drive, disk, 2);
 
        return 0;
 }