static ide_startstop_t ide_floppy_issue_pc(ide_drive_t *drive, struct ide_cmd *cmd, struct ide_atapi_pc *pc) { struct ide_disk_obj *floppy = drive->driver_data; if (drive->failed_pc == NULL && pc->c[0] != GPCMD_REQUEST_SENSE) drive->failed_pc = pc; /* Set the current packet command */ drive->pc = pc; if (pc->retries > IDEFLOPPY_MAX_PC_RETRIES) { if (!(pc->flags & PC_FLAG_SUPPRESS_ERROR)) ide_floppy_report_error(floppy, pc); /* Giving up */ pc->error = IDE_DRV_ERROR_GENERAL; drive->failed_pc = NULL; drive->pc_callback(drive, 0); return ide_stopped; } ide_debug_log(IDE_DBG_FUNC, "retry #%d", pc->retries); pc->retries++; return ide_issue_pc(drive, cmd); }
static ide_startstop_t ide_floppy_issue_pc(ide_drive_t *drive, struct ide_cmd *cmd, struct ide_atapi_pc *pc) { struct ide_disk_obj *floppy = drive->driver_data; if (drive->failed_pc == NULL && pc->c[0] != GPCMD_REQUEST_SENSE) drive->failed_pc = pc; drive->pc = pc; if (pc->retries > IDEFLOPPY_MAX_PC_RETRIES) { unsigned int done = blk_rq_bytes(drive->hwif->rq); if (!(pc->flags & PC_FLAG_SUPPRESS_ERROR)) ide_floppy_report_error(floppy, pc); pc->error = IDE_DRV_ERROR_GENERAL; drive->failed_pc = NULL; drive->pc_callback(drive, 0); ide_complete_rq(drive, -EIO, done); return ide_stopped; } ide_debug_log(IDE_DBG_FUNC, "retry #%d", pc->retries); pc->retries++; return ide_issue_pc(drive, cmd); }
static ide_startstop_t idescsi_issue_pc(ide_drive_t *drive, struct ide_atapi_pc *pc) { idescsi_scsi_t *scsi = drive_to_idescsi(drive); /* Set the current packet command */ scsi->pc = pc; return ide_issue_pc(drive, pc, idescsi_transfer_pc, get_timeout(pc), idescsi_expiry); }