Loading drivers/ide/ide-tape.c +18 −27 Original line number Diff line number Diff line Loading @@ -952,40 +952,29 @@ static ide_startstop_t idetape_media_access_finished(ide_drive_t *drive) return ide_stopped; } static void idetape_create_read_cmd(idetape_tape_t *tape, struct ide_atapi_pc *pc, unsigned int length, struct idetape_bh *bh) static void ide_tape_create_rw_cmd(idetape_tape_t *tape, struct ide_atapi_pc *pc, unsigned int length, struct idetape_bh *bh, u8 opcode) { idetape_init_pc(pc); pc->c[0] = READ_6; put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]); pc->c[1] = 1; pc->bh = bh; atomic_set(&bh->b_count, 0); pc->buf = NULL; pc->buf_size = length * tape->blk_size; pc->req_xfer = pc->buf_size; if (pc->req_xfer == tape->buffer_size) pc->flags |= PC_FLAG_DMA_OK; } static void idetape_create_write_cmd(idetape_tape_t *tape, struct ide_atapi_pc *pc, unsigned int length, struct idetape_bh *bh) { idetape_init_pc(pc); if (opcode == READ_6) { pc->c[0] = READ_6; atomic_set(&bh->b_count, 0); } else if (opcode == WRITE_6) { pc->c[0] = WRITE_6; put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]); pc->c[1] = 1; pc->flags |= PC_FLAG_WRITING; pc->bh = bh; pc->b_data = bh->b_data; pc->b_count = atomic_read(&bh->b_count); pc->buf = NULL; pc->buf_size = length * tape->blk_size; pc->req_xfer = pc->buf_size; if (pc->req_xfer == tape->buffer_size) pc->flags |= PC_FLAG_DMA_OK; } } static ide_startstop_t idetape_do_request(ide_drive_t *drive, Loading Loading @@ -1062,14 +1051,16 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive, } if (rq->cmd[0] & REQ_IDETAPE_READ) { pc = idetape_next_pc_storage(drive); idetape_create_read_cmd(tape, pc, rq->current_nr_sectors, (struct idetape_bh *)rq->special); ide_tape_create_rw_cmd(tape, pc, rq->current_nr_sectors, (struct idetape_bh *)rq->special, READ_6); goto out; } if (rq->cmd[0] & REQ_IDETAPE_WRITE) { pc = idetape_next_pc_storage(drive); idetape_create_write_cmd(tape, pc, rq->current_nr_sectors, (struct idetape_bh *)rq->special); ide_tape_create_rw_cmd(tape, pc, rq->current_nr_sectors, (struct idetape_bh *)rq->special, WRITE_6); goto out; } if (rq->cmd[0] & REQ_IDETAPE_PC1) { Loading Loading
drivers/ide/ide-tape.c +18 −27 Original line number Diff line number Diff line Loading @@ -952,40 +952,29 @@ static ide_startstop_t idetape_media_access_finished(ide_drive_t *drive) return ide_stopped; } static void idetape_create_read_cmd(idetape_tape_t *tape, struct ide_atapi_pc *pc, unsigned int length, struct idetape_bh *bh) static void ide_tape_create_rw_cmd(idetape_tape_t *tape, struct ide_atapi_pc *pc, unsigned int length, struct idetape_bh *bh, u8 opcode) { idetape_init_pc(pc); pc->c[0] = READ_6; put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]); pc->c[1] = 1; pc->bh = bh; atomic_set(&bh->b_count, 0); pc->buf = NULL; pc->buf_size = length * tape->blk_size; pc->req_xfer = pc->buf_size; if (pc->req_xfer == tape->buffer_size) pc->flags |= PC_FLAG_DMA_OK; } static void idetape_create_write_cmd(idetape_tape_t *tape, struct ide_atapi_pc *pc, unsigned int length, struct idetape_bh *bh) { idetape_init_pc(pc); if (opcode == READ_6) { pc->c[0] = READ_6; atomic_set(&bh->b_count, 0); } else if (opcode == WRITE_6) { pc->c[0] = WRITE_6; put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]); pc->c[1] = 1; pc->flags |= PC_FLAG_WRITING; pc->bh = bh; pc->b_data = bh->b_data; pc->b_count = atomic_read(&bh->b_count); pc->buf = NULL; pc->buf_size = length * tape->blk_size; pc->req_xfer = pc->buf_size; if (pc->req_xfer == tape->buffer_size) pc->flags |= PC_FLAG_DMA_OK; } } static ide_startstop_t idetape_do_request(ide_drive_t *drive, Loading Loading @@ -1062,14 +1051,16 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive, } if (rq->cmd[0] & REQ_IDETAPE_READ) { pc = idetape_next_pc_storage(drive); idetape_create_read_cmd(tape, pc, rq->current_nr_sectors, (struct idetape_bh *)rq->special); ide_tape_create_rw_cmd(tape, pc, rq->current_nr_sectors, (struct idetape_bh *)rq->special, READ_6); goto out; } if (rq->cmd[0] & REQ_IDETAPE_WRITE) { pc = idetape_next_pc_storage(drive); idetape_create_write_cmd(tape, pc, rq->current_nr_sectors, (struct idetape_bh *)rq->special); ide_tape_create_rw_cmd(tape, pc, rq->current_nr_sectors, (struct idetape_bh *)rq->special, WRITE_6); goto out; } if (rq->cmd[0] & REQ_IDETAPE_PC1) { Loading