Преглед изворни кода

ide: drop dsc_handle argument from ide_pc_intr()

* Add 'int dsc' argument to ->pc_callback method.

* Call ide_tape_handle_dsc() internally in ide_tape_callback()
  if dsc argument is set and update ide_pc_intr() accordingly.

There should be no functional changes caused by this patch.

Cc: Borislav Petkov <petkovbb@gmail.com>
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Bartlomiej Zolnierkiewicz пре 16 година
родитељ
комит
b14c72127f
5 измењених фајлова са 23 додато и 21 уклоњено
  1. 7 9
      drivers/ide/ide-atapi.c
  2. 3 3
      drivers/ide/ide-floppy.c
  3. 9 4
      drivers/ide/ide-tape.c
  4. 2 3
      drivers/scsi/ide-scsi.c
  5. 2 2
      include/linux/ide.h

+ 7 - 9
drivers/ide/ide-atapi.c

@@ -207,7 +207,7 @@ EXPORT_SYMBOL_GPL(ide_set_media_lock);
 ide_startstop_t ide_pc_intr(ide_drive_t *drive, struct ide_atapi_pc *pc,
 ide_startstop_t ide_pc_intr(ide_drive_t *drive, struct ide_atapi_pc *pc,
 	ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry,
 	ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry,
 	void (*update_buffers)(ide_drive_t *, struct ide_atapi_pc *),
 	void (*update_buffers)(ide_drive_t *, struct ide_atapi_pc *),
-	void (*retry_pc)(ide_drive_t *), void (*dsc_handle)(ide_drive_t *),
+	void (*retry_pc)(ide_drive_t *),
 	int (*io_buffers)(ide_drive_t *, struct ide_atapi_pc *, unsigned, int))
 	int (*io_buffers)(ide_drive_t *, struct ide_atapi_pc *, unsigned, int))
 {
 {
 	ide_hwif_t *hwif = drive->hwif;
 	ide_hwif_t *hwif = drive->hwif;
@@ -216,12 +216,12 @@ ide_startstop_t ide_pc_intr(ide_drive_t *drive, struct ide_atapi_pc *pc,
 	xfer_func_t *xferfunc;
 	xfer_func_t *xferfunc;
 	unsigned int temp;
 	unsigned int temp;
 	u16 bcount;
 	u16 bcount;
-	u8 stat, ireason, scsi = drive->scsi;
+	u8 stat, ireason, scsi = drive->scsi, dsc = 0;
 
 
 	debug_log("Enter %s - interrupt handler\n", __func__);
 	debug_log("Enter %s - interrupt handler\n", __func__);
 
 
 	if (pc->flags & PC_FLAG_TIMEDOUT) {
 	if (pc->flags & PC_FLAG_TIMEDOUT) {
-		drive->pc_callback(drive);
+		drive->pc_callback(drive, 0);
 		return ide_stopped;
 		return ide_stopped;
 	}
 	}
 
 
@@ -283,14 +283,12 @@ ide_startstop_t ide_pc_intr(ide_drive_t *drive, struct ide_atapi_pc *pc,
 		}
 		}
 cmd_finished:
 cmd_finished:
 		pc->error = 0;
 		pc->error = 0;
-		if ((pc->flags & PC_FLAG_WAIT_FOR_DSC) &&
-		    (stat & ATA_DSC) == 0) {
-			dsc_handle(drive);
-			return ide_stopped;
-		}
+
+		if ((pc->flags & PC_FLAG_WAIT_FOR_DSC) && (stat & ATA_DSC) == 0)
+			dsc = 1;
 
 
 		/* Command finished - Call the callback function */
 		/* Command finished - Call the callback function */
-		drive->pc_callback(drive);
+		drive->pc_callback(drive, dsc);
 
 
 		return ide_stopped;
 		return ide_stopped;
 	}
 	}

+ 3 - 3
drivers/ide/ide-floppy.c

@@ -156,7 +156,7 @@ static void idefloppy_update_buffers(ide_drive_t *drive,
 		idefloppy_end_request(drive, 1, 0);
 		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;
 	idefloppy_floppy_t *floppy = drive->driver_data;
 	struct ide_atapi_pc *pc = floppy->pc;
 	struct ide_atapi_pc *pc = floppy->pc;
@@ -223,7 +223,7 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive)
 
 
 	return ide_pc_intr(drive, floppy->pc, idefloppy_pc_intr,
 	return ide_pc_intr(drive, floppy->pc, idefloppy_pc_intr,
 			   WAIT_FLOPPY_CMD, NULL, idefloppy_update_buffers,
 			   WAIT_FLOPPY_CMD, NULL, idefloppy_update_buffers,
-			   idefloppy_retry_pc, NULL, ide_io_buffers);
+			   idefloppy_retry_pc, ide_io_buffers);
 }
 }
 
 
 /*
 /*
@@ -308,7 +308,7 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t *drive,
 		pc->error = IDEFLOPPY_ERROR_GENERAL;
 		pc->error = IDEFLOPPY_ERROR_GENERAL;
 
 
 		floppy->failed_pc = NULL;
 		floppy->failed_pc = NULL;
-		drive->pc_callback(drive);
+		drive->pc_callback(drive, 0);
 		return ide_stopped;
 		return ide_stopped;
 	}
 	}
 
 

+ 9 - 4
drivers/ide/ide-tape.c

@@ -522,7 +522,9 @@ static int idetape_end_request(ide_drive_t *drive, int uptodate, int nr_sects)
 	return 0;
 	return 0;
 }
 }
 
 
-static void ide_tape_callback(ide_drive_t *drive)
+static void ide_tape_handle_dsc(ide_drive_t *);
+
+static void ide_tape_callback(ide_drive_t *drive, int dsc)
 {
 {
 	idetape_tape_t *tape = drive->driver_data;
 	idetape_tape_t *tape = drive->driver_data;
 	struct ide_atapi_pc *pc = tape->pc;
 	struct ide_atapi_pc *pc = tape->pc;
@@ -530,6 +532,9 @@ static void ide_tape_callback(ide_drive_t *drive)
 
 
 	debug_log(DBG_PROCS, "Enter %s\n", __func__);
 	debug_log(DBG_PROCS, "Enter %s\n", __func__);
 
 
+	if (dsc)
+		ide_tape_handle_dsc(drive);
+
 	if (tape->failed_pc == pc)
 	if (tape->failed_pc == pc)
 		tape->failed_pc = NULL;
 		tape->failed_pc = NULL;
 
 
@@ -658,7 +663,7 @@ static ide_startstop_t idetape_pc_intr(ide_drive_t *drive)
 
 
 	return ide_pc_intr(drive, tape->pc, idetape_pc_intr, WAIT_TAPE_CMD,
 	return ide_pc_intr(drive, tape->pc, idetape_pc_intr, WAIT_TAPE_CMD,
 			   NULL, idetape_update_buffers, idetape_retry_pc,
 			   NULL, idetape_update_buffers, idetape_retry_pc,
-			   ide_tape_handle_dsc, ide_tape_io_buffers);
+			   ide_tape_io_buffers);
 }
 }
 
 
 /*
 /*
@@ -743,7 +748,7 @@ static ide_startstop_t idetape_issue_pc(ide_drive_t *drive,
 			pc->error = IDETAPE_ERROR_GENERAL;
 			pc->error = IDETAPE_ERROR_GENERAL;
 		}
 		}
 		tape->failed_pc = NULL;
 		tape->failed_pc = NULL;
-		drive->pc_callback(drive);
+		drive->pc_callback(drive, 0);
 		return ide_stopped;
 		return ide_stopped;
 	}
 	}
 	debug_log(DBG_SENSE, "Retry #%d, cmd = %02X\n", pc->retries, pc->c[0]);
 	debug_log(DBG_SENSE, "Retry #%d, cmd = %02X\n", pc->retries, pc->c[0]);
@@ -805,7 +810,7 @@ static ide_startstop_t idetape_media_access_finished(ide_drive_t *drive)
 		pc->error = IDETAPE_ERROR_GENERAL;
 		pc->error = IDETAPE_ERROR_GENERAL;
 		tape->failed_pc = NULL;
 		tape->failed_pc = NULL;
 	}
 	}
-	drive->pc_callback(drive);
+	drive->pc_callback(drive, 0);
 	return ide_stopped;
 	return ide_stopped;
 }
 }
 
 

+ 2 - 3
drivers/scsi/ide-scsi.c

@@ -137,7 +137,7 @@ static void ide_scsi_hex_dump(u8 *data, int len)
 
 
 static int idescsi_end_request(ide_drive_t *, int, int);
 static int idescsi_end_request(ide_drive_t *, int, int);
 
 
-static void ide_scsi_callback(ide_drive_t *drive)
+static void ide_scsi_callback(ide_drive_t *drive, int dsc)
 {
 {
 	idescsi_scsi_t *scsi = drive_to_idescsi(drive);
 	idescsi_scsi_t *scsi = drive_to_idescsi(drive);
 	struct ide_atapi_pc *pc = scsi->pc;
 	struct ide_atapi_pc *pc = scsi->pc;
@@ -298,8 +298,7 @@ static ide_startstop_t idescsi_pc_intr (ide_drive_t *drive)
 	struct ide_atapi_pc *pc = scsi->pc;
 	struct ide_atapi_pc *pc = scsi->pc;
 
 
 	return ide_pc_intr(drive, pc, idescsi_pc_intr, get_timeout(pc),
 	return ide_pc_intr(drive, pc, idescsi_pc_intr, get_timeout(pc),
-			   idescsi_expiry, NULL, NULL, NULL,
-			   ide_io_buffers);
+			   idescsi_expiry, NULL, NULL, ide_io_buffers);
 }
 }
 
 
 static ide_startstop_t idescsi_transfer_pc(ide_drive_t *drive)
 static ide_startstop_t idescsi_transfer_pc(ide_drive_t *drive)

+ 2 - 2
include/linux/ide.h

@@ -485,7 +485,7 @@ struct ide_drive_s {
 	struct completion gendev_rel_comp;	/* to deal with device release() */
 	struct completion gendev_rel_comp;	/* to deal with device release() */
 
 
 	/* callback for packet commands */
 	/* callback for packet commands */
-	void (*pc_callback)(struct ide_drive_s *);
+	void (*pc_callback)(struct ide_drive_s *, int);
 
 
 	unsigned long atapi_flags;
 	unsigned long atapi_flags;
 };
 };
@@ -1174,7 +1174,7 @@ int ide_set_media_lock(ide_drive_t *, struct gendisk *, int);
 ide_startstop_t ide_pc_intr(ide_drive_t *drive, struct ide_atapi_pc *pc,
 ide_startstop_t ide_pc_intr(ide_drive_t *drive, struct ide_atapi_pc *pc,
 	ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry,
 	ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry,
 	void (*update_buffers)(ide_drive_t *, struct ide_atapi_pc *),
 	void (*update_buffers)(ide_drive_t *, struct ide_atapi_pc *),
-	void (*retry_pc)(ide_drive_t *), void (*dsc_handle)(ide_drive_t *),
+	void (*retry_pc)(ide_drive_t *),
 	int (*io_buffers)(ide_drive_t *, struct ide_atapi_pc *, unsigned int,
 	int (*io_buffers)(ide_drive_t *, struct ide_atapi_pc *, unsigned int,
 			   int));
 			   int));
 ide_startstop_t ide_transfer_pc(ide_drive_t *, struct ide_atapi_pc *,
 ide_startstop_t ide_transfer_pc(ide_drive_t *, struct ide_atapi_pc *,