Loading drivers/ide/ide-io.c +4 −94 Original line number Diff line number Diff line Loading @@ -354,7 +354,6 @@ void ide_tf_read(ide_drive_t *drive, ide_task_t *task) void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err) { ide_hwif_t *hwif = HWIF(drive); unsigned long flags; struct request *rq; Loading @@ -362,19 +361,7 @@ void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err) rq = HWGROUP(drive)->rq; spin_unlock_irqrestore(&ide_lock, flags); if (rq->cmd_type == REQ_TYPE_ATA_CMD) { u8 *args = (u8 *) rq->buffer; if (rq->errors == 0) rq->errors = !OK_STAT(stat,READY_STAT,BAD_STAT); if (args) { args[0] = stat; args[1] = err; /* be sure we're looking at the low order bits */ hwif->OUTB(drive->ctl & ~0x80, IDE_CONTROL_REG); args[2] = hwif->INB(IDE_NSECTOR_REG); } } else if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) { if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) { ide_task_t *args = (ide_task_t *) rq->special; if (rq->errors == 0) rq->errors = !OK_STAT(stat,READY_STAT,BAD_STAT); Loading Loading @@ -624,48 +611,6 @@ ide_startstop_t ide_abort(ide_drive_t *drive, const char *msg) return __ide_abort(drive, rq); } /** * drive_cmd_intr - drive command completion interrupt * @drive: drive the completion interrupt occurred on * * drive_cmd_intr() is invoked on completion of a special DRIVE_CMD. * We do any necessary data reading and then wait for the drive to * go non busy. At that point we may read the error data and complete * the request */ static ide_startstop_t drive_cmd_intr (ide_drive_t *drive) { struct request *rq = HWGROUP(drive)->rq; ide_hwif_t *hwif = HWIF(drive); u8 *args = (u8 *)rq->buffer, pio_in = (args && args[3]) ? 1 : 0, stat; if (pio_in) { u8 io_32bit = drive->io_32bit; stat = hwif->INB(IDE_STATUS_REG); if (!OK_STAT(stat, DRQ_STAT, BAD_R_STAT)) { if (stat & (ERR_STAT | DRQ_STAT)) return ide_error(drive, __FUNCTION__, stat); ide_set_handler(drive, &drive_cmd_intr, WAIT_WORSTCASE, NULL); return ide_started; } drive->io_32bit = 0; hwif->ata_input_data(drive, &args[4], args[3] * SECTOR_WORDS); drive->io_32bit = io_32bit; stat = wait_drive_not_busy(drive); } else { local_irq_enable_in_hardirq(); stat = hwif->INB(IDE_STATUS_REG); } if (!OK_STAT(stat, (pio_in ? 0 : READY_STAT), BAD_STAT)) return ide_error(drive, __FUNCTION__, stat); /* calls ide_end_drive_cmd */ ide_end_drive_cmd(drive, stat, hwif->INB(IDE_ERROR_REG)); return ide_stopped; } static void ide_tf_set_specify_cmd(ide_drive_t *drive, struct ide_taskfile *tf) { tf->nsect = drive->sect; Loading Loading @@ -851,16 +796,9 @@ static ide_startstop_t execute_drive_cmd (ide_drive_t *drive, struct request *rq) { ide_hwif_t *hwif = HWIF(drive); u8 *args = rq->buffer; ide_task_t ltask; struct ide_taskfile *tf = <ask.tf; if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) { ide_task_t *task = rq->special; if (task == NULL) goto done; if (task) { hwif->data_phase = task->data_phase; switch (hwif->data_phase) { Loading @@ -877,33 +815,6 @@ static ide_startstop_t execute_drive_cmd (ide_drive_t *drive, return do_rw_taskfile(drive, task); } if (args == NULL) goto done; memset(<ask, 0, sizeof(ltask)); if (rq->cmd_type == REQ_TYPE_ATA_CMD) { #ifdef DEBUG printk("%s: DRIVE_CMD\n", drive->name); #endif tf->feature = args[2]; if (args[0] == WIN_SMART) { tf->nsect = args[3]; tf->lbal = args[1]; tf->lbam = 0x4f; tf->lbah = 0xc2; ltask.tf_flags = IDE_TFLAG_OUT_TF; } else { tf->nsect = args[1]; ltask.tf_flags = IDE_TFLAG_OUT_FEATURE | IDE_TFLAG_OUT_NSECT; } } tf->command = args[0]; ide_tf_load(drive, <ask); ide_execute_command(drive, args[0], &drive_cmd_intr, WAIT_WORSTCASE, NULL); return ide_started; done: /* * NULL is actually a valid way of waiting for * all current requests to be flushed from the queue. Loading Loading @@ -1007,8 +918,7 @@ static ide_startstop_t start_request (ide_drive_t *drive, struct request *rq) if (drive->current_speed == 0xff) ide_config_drive_speed(drive, drive->desired_speed); if (rq->cmd_type == REQ_TYPE_ATA_CMD || rq->cmd_type == REQ_TYPE_ATA_TASKFILE) if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) return execute_drive_cmd(drive, rq); else if (blk_pm_request(rq)) { struct request_pm_state *pm = rq->data; Loading drivers/ide/ide-lib.c +7 −18 Original line number Diff line number Diff line Loading @@ -454,8 +454,7 @@ int ide_set_xfer_rate(ide_drive_t *drive, u8 rate) static void ide_dump_opcode(ide_drive_t *drive) { struct request *rq; u8 opcode = 0; int found = 0; ide_task_t *task = NULL; spin_lock(&ide_lock); rq = NULL; Loading @@ -464,25 +463,15 @@ static void ide_dump_opcode(ide_drive_t *drive) spin_unlock(&ide_lock); if (!rq) return; if (rq->cmd_type == REQ_TYPE_ATA_CMD) { char *args = rq->buffer; if (args) { opcode = args[0]; found = 1; } } else if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) { ide_task_t *args = rq->special; if (args) { opcode = args->tf.command; found = 1; } } if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) task = rq->special; printk("ide: failed opcode was: "); if (!found) printk("unknown\n"); if (task == NULL) printk(KERN_CONT "unknown\n"); else printk("0x%02x\n", opcode); printk(KERN_CONT "0x%02x\n", task->tf.command); } u64 ide_get_lba_addr(struct ide_taskfile *tf, int lba48) Loading include/linux/blkdev.h +0 −1 Original line number Diff line number Diff line Loading @@ -143,7 +143,6 @@ enum rq_cmd_type_bits { * use REQ_TYPE_SPECIAL and use rq->cmd[0] with the range of driver * private REQ_LB opcodes to differentiate what type of request this is */ REQ_TYPE_ATA_CMD, REQ_TYPE_ATA_TASKFILE, REQ_TYPE_ATA_PC, }; Loading Loading
drivers/ide/ide-io.c +4 −94 Original line number Diff line number Diff line Loading @@ -354,7 +354,6 @@ void ide_tf_read(ide_drive_t *drive, ide_task_t *task) void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err) { ide_hwif_t *hwif = HWIF(drive); unsigned long flags; struct request *rq; Loading @@ -362,19 +361,7 @@ void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err) rq = HWGROUP(drive)->rq; spin_unlock_irqrestore(&ide_lock, flags); if (rq->cmd_type == REQ_TYPE_ATA_CMD) { u8 *args = (u8 *) rq->buffer; if (rq->errors == 0) rq->errors = !OK_STAT(stat,READY_STAT,BAD_STAT); if (args) { args[0] = stat; args[1] = err; /* be sure we're looking at the low order bits */ hwif->OUTB(drive->ctl & ~0x80, IDE_CONTROL_REG); args[2] = hwif->INB(IDE_NSECTOR_REG); } } else if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) { if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) { ide_task_t *args = (ide_task_t *) rq->special; if (rq->errors == 0) rq->errors = !OK_STAT(stat,READY_STAT,BAD_STAT); Loading Loading @@ -624,48 +611,6 @@ ide_startstop_t ide_abort(ide_drive_t *drive, const char *msg) return __ide_abort(drive, rq); } /** * drive_cmd_intr - drive command completion interrupt * @drive: drive the completion interrupt occurred on * * drive_cmd_intr() is invoked on completion of a special DRIVE_CMD. * We do any necessary data reading and then wait for the drive to * go non busy. At that point we may read the error data and complete * the request */ static ide_startstop_t drive_cmd_intr (ide_drive_t *drive) { struct request *rq = HWGROUP(drive)->rq; ide_hwif_t *hwif = HWIF(drive); u8 *args = (u8 *)rq->buffer, pio_in = (args && args[3]) ? 1 : 0, stat; if (pio_in) { u8 io_32bit = drive->io_32bit; stat = hwif->INB(IDE_STATUS_REG); if (!OK_STAT(stat, DRQ_STAT, BAD_R_STAT)) { if (stat & (ERR_STAT | DRQ_STAT)) return ide_error(drive, __FUNCTION__, stat); ide_set_handler(drive, &drive_cmd_intr, WAIT_WORSTCASE, NULL); return ide_started; } drive->io_32bit = 0; hwif->ata_input_data(drive, &args[4], args[3] * SECTOR_WORDS); drive->io_32bit = io_32bit; stat = wait_drive_not_busy(drive); } else { local_irq_enable_in_hardirq(); stat = hwif->INB(IDE_STATUS_REG); } if (!OK_STAT(stat, (pio_in ? 0 : READY_STAT), BAD_STAT)) return ide_error(drive, __FUNCTION__, stat); /* calls ide_end_drive_cmd */ ide_end_drive_cmd(drive, stat, hwif->INB(IDE_ERROR_REG)); return ide_stopped; } static void ide_tf_set_specify_cmd(ide_drive_t *drive, struct ide_taskfile *tf) { tf->nsect = drive->sect; Loading Loading @@ -851,16 +796,9 @@ static ide_startstop_t execute_drive_cmd (ide_drive_t *drive, struct request *rq) { ide_hwif_t *hwif = HWIF(drive); u8 *args = rq->buffer; ide_task_t ltask; struct ide_taskfile *tf = <ask.tf; if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) { ide_task_t *task = rq->special; if (task == NULL) goto done; if (task) { hwif->data_phase = task->data_phase; switch (hwif->data_phase) { Loading @@ -877,33 +815,6 @@ static ide_startstop_t execute_drive_cmd (ide_drive_t *drive, return do_rw_taskfile(drive, task); } if (args == NULL) goto done; memset(<ask, 0, sizeof(ltask)); if (rq->cmd_type == REQ_TYPE_ATA_CMD) { #ifdef DEBUG printk("%s: DRIVE_CMD\n", drive->name); #endif tf->feature = args[2]; if (args[0] == WIN_SMART) { tf->nsect = args[3]; tf->lbal = args[1]; tf->lbam = 0x4f; tf->lbah = 0xc2; ltask.tf_flags = IDE_TFLAG_OUT_TF; } else { tf->nsect = args[1]; ltask.tf_flags = IDE_TFLAG_OUT_FEATURE | IDE_TFLAG_OUT_NSECT; } } tf->command = args[0]; ide_tf_load(drive, <ask); ide_execute_command(drive, args[0], &drive_cmd_intr, WAIT_WORSTCASE, NULL); return ide_started; done: /* * NULL is actually a valid way of waiting for * all current requests to be flushed from the queue. Loading Loading @@ -1007,8 +918,7 @@ static ide_startstop_t start_request (ide_drive_t *drive, struct request *rq) if (drive->current_speed == 0xff) ide_config_drive_speed(drive, drive->desired_speed); if (rq->cmd_type == REQ_TYPE_ATA_CMD || rq->cmd_type == REQ_TYPE_ATA_TASKFILE) if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) return execute_drive_cmd(drive, rq); else if (blk_pm_request(rq)) { struct request_pm_state *pm = rq->data; Loading
drivers/ide/ide-lib.c +7 −18 Original line number Diff line number Diff line Loading @@ -454,8 +454,7 @@ int ide_set_xfer_rate(ide_drive_t *drive, u8 rate) static void ide_dump_opcode(ide_drive_t *drive) { struct request *rq; u8 opcode = 0; int found = 0; ide_task_t *task = NULL; spin_lock(&ide_lock); rq = NULL; Loading @@ -464,25 +463,15 @@ static void ide_dump_opcode(ide_drive_t *drive) spin_unlock(&ide_lock); if (!rq) return; if (rq->cmd_type == REQ_TYPE_ATA_CMD) { char *args = rq->buffer; if (args) { opcode = args[0]; found = 1; } } else if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) { ide_task_t *args = rq->special; if (args) { opcode = args->tf.command; found = 1; } } if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) task = rq->special; printk("ide: failed opcode was: "); if (!found) printk("unknown\n"); if (task == NULL) printk(KERN_CONT "unknown\n"); else printk("0x%02x\n", opcode); printk(KERN_CONT "0x%02x\n", task->tf.command); } u64 ide_get_lba_addr(struct ide_taskfile *tf, int lba48) Loading
include/linux/blkdev.h +0 −1 Original line number Diff line number Diff line Loading @@ -143,7 +143,6 @@ enum rq_cmd_type_bits { * use REQ_TYPE_SPECIAL and use rq->cmd[0] with the range of driver * private REQ_LB opcodes to differentiate what type of request this is */ REQ_TYPE_ATA_CMD, REQ_TYPE_ATA_TASKFILE, REQ_TYPE_ATA_PC, }; Loading