aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-tape.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-04-18 11:39:24 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-18 11:39:24 -0400
commit188da98800893691e47eea9335a234378e32aceb (patch)
tree57dbf491d23676e011b4946ec1867a6d55a02eef /drivers/ide/ide-tape.c
parent07fe944e87d79f8d7e1b090913fe9f2ace78f41d (diff)
parent273b8385e5817a4765f82257004c5ec661a6a5b2 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: (58 commits) ide: remove ide_init_default_irq() macro ide: move default IDE ports setup to ide_generic host driver ide: remove obsoleted "idex=noprobe" kernel parameter (take 2) ide: remove needless hwif->irq check from ide_hwif_configure() ide: init hwif->{io_ports,irq} explicitly in legacy VLB host drivers ide: limit legacy VLB host drivers to alpha, x86 and mips cmd640: init hwif->{io_ports,irq} explicitly cmd640: cleanup setup_device_ptrs() ide: add ide-4drives host driver (take 3) ide: remove ppc ifdef from init_ide_data() ide: remove ide_default_io_ctl() macro ide: remove CONFIG_IDE_ARCH_OBSOLETE_INIT ide: add CONFIG_IDE_ARCH_OBSOLETE_DEFAULTS (take 2) ppc/pmac: remove no longer needed IDE quirk ppc: don't include <linux/ide.h> ppc: remove ppc_ide_md ppc/pplus: remove ppc_ide_md.ide_init_hwif hook ppc/sandpoint: remove ppc_ide_md hooks ppc/lopec: remove ppc_ide_md hooks ppc/mpc8xx: remove ppc_ide_md hooks ...
Diffstat (limited to 'drivers/ide/ide-tape.c')
-rw-r--r--drivers/ide/ide-tape.c536
1 files changed, 250 insertions, 286 deletions
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c
index 0598ecfd5f37..f43fd070f1b6 100644
--- a/drivers/ide/ide-tape.c
+++ b/drivers/ide/ide-tape.c
@@ -181,49 +181,63 @@ struct idetape_bh {
181 char *b_data; 181 char *b_data;
182}; 182};
183 183
184typedef struct idetape_packet_command_s { 184/* Tape door status */
185 /* Actual packet bytes */ 185#define DOOR_UNLOCKED 0
186 u8 c[12]; 186#define DOOR_LOCKED 1
187 /* On each retry, we increment retries */ 187#define DOOR_EXPLICITLY_LOCKED 2
188 int retries; 188
189 /* Error code */ 189/* Some defines for the SPACE command */
190 int error; 190#define IDETAPE_SPACE_OVER_FILEMARK 1
191 /* Bytes to transfer */ 191#define IDETAPE_SPACE_TO_EOD 3
192 int request_transfer; 192
193 /* Bytes actually transferred */ 193/* Some defines for the LOAD UNLOAD command */
194 int actually_transferred; 194#define IDETAPE_LU_LOAD_MASK 1
195 /* Size of our data buffer */ 195#define IDETAPE_LU_RETENSION_MASK 2
196 int buffer_size; 196#define IDETAPE_LU_EOT_MASK 4
197 struct idetape_bh *bh;
198 char *b_data;
199 int b_count;
200 /* Data buffer */
201 u8 *buffer;
202 /* Pointer into the above buffer */
203 u8 *current_position;
204 /* Called when this packet command is completed */
205 ide_startstop_t (*callback) (ide_drive_t *);
206 /* Temporary buffer */
207 u8 pc_buffer[IDETAPE_PC_BUFFER_SIZE];
208 /* Status/Action bit flags: long for set_bit */
209 unsigned long flags;
210} idetape_pc_t;
211 197
212/* 198/*
213 * Packet command flag bits. 199 * Special requests for our block device strategy routine.
200 *
201 * In order to service a character device command, we add special requests to
202 * the tail of our block device request queue and wait for their completion.
214 */ 203 */
215/* Set when an error is considered normal - We won't retry */ 204
216#define PC_ABORT 0 205enum {
217/* 1 When polling for DSC on a media access command */ 206 REQ_IDETAPE_PC1 = (1 << 0), /* packet command (first stage) */
218#define PC_WAIT_FOR_DSC 1 207 REQ_IDETAPE_PC2 = (1 << 1), /* packet command (second stage) */
219/* 1 when we prefer to use DMA if possible */ 208 REQ_IDETAPE_READ = (1 << 2),
220#define PC_DMA_RECOMMENDED 2 209 REQ_IDETAPE_WRITE = (1 << 3),
221/* 1 while DMA in progress */ 210};
222#define PC_DMA_IN_PROGRESS 3 211
223/* 1 when encountered problem during DMA */ 212/* Error codes returned in rq->errors to the higher part of the driver. */
224#define PC_DMA_ERROR 4 213#define IDETAPE_ERROR_GENERAL 101
225/* Data direction */ 214#define IDETAPE_ERROR_FILEMARK 102
226#define PC_WRITING 5 215#define IDETAPE_ERROR_EOD 103
216
217/* Structures related to the SELECT SENSE / MODE SENSE packet commands. */
218#define IDETAPE_BLOCK_DESCRIPTOR 0
219#define IDETAPE_CAPABILITIES_PAGE 0x2a
220
221/* Tape flag bits values. */
222enum {
223 IDETAPE_FLAG_IGNORE_DSC = (1 << 0),
224 /* 0 When the tape position is unknown */
225 IDETAPE_FLAG_ADDRESS_VALID = (1 << 1),
226 /* Device already opened */
227 IDETAPE_FLAG_BUSY = (1 << 2),
228 /* Error detected in a pipeline stage */
229 IDETAPE_FLAG_PIPELINE_ERR = (1 << 3),
230 /* Attempt to auto-detect the current user block size */
231 IDETAPE_FLAG_DETECT_BS = (1 << 4),
232 /* Currently on a filemark */
233 IDETAPE_FLAG_FILEMARK = (1 << 5),
234 /* DRQ interrupt device */
235 IDETAPE_FLAG_DRQ_INTERRUPT = (1 << 6),
236 /* pipeline active */
237 IDETAPE_FLAG_PIPELINE_ACTIVE = (1 << 7),
238 /* 0 = no tape is loaded, so we don't rewind after ejecting */
239 IDETAPE_FLAG_MEDIUM_PRESENT = (1 << 8),
240};
227 241
228/* A pipeline stage. */ 242/* A pipeline stage. */
229typedef struct idetape_stage_s { 243typedef struct idetape_stage_s {
@@ -258,11 +272,11 @@ typedef struct ide_tape_obj {
258 * retry, to get detailed information on what went wrong. 272 * retry, to get detailed information on what went wrong.
259 */ 273 */
260 /* Current packet command */ 274 /* Current packet command */
261 idetape_pc_t *pc; 275 struct ide_atapi_pc *pc;
262 /* Last failed packet command */ 276 /* Last failed packet command */
263 idetape_pc_t *failed_pc; 277 struct ide_atapi_pc *failed_pc;
264 /* Packet command stack */ 278 /* Packet command stack */
265 idetape_pc_t pc_stack[IDETAPE_PC_STACK]; 279 struct ide_atapi_pc pc_stack[IDETAPE_PC_STACK];
266 /* Next free packet command storage space */ 280 /* Next free packet command storage space */
267 int pc_stack_index; 281 int pc_stack_index;
268 struct request rq_stack[IDETAPE_PC_STACK]; 282 struct request rq_stack[IDETAPE_PC_STACK];
@@ -446,58 +460,6 @@ static void ide_tape_put(struct ide_tape_obj *tape)
446 mutex_unlock(&idetape_ref_mutex); 460 mutex_unlock(&idetape_ref_mutex);
447} 461}
448 462
449/* Tape door status */
450#define DOOR_UNLOCKED 0
451#define DOOR_LOCKED 1
452#define DOOR_EXPLICITLY_LOCKED 2
453
454/*
455 * Tape flag bits values.
456 */
457#define IDETAPE_IGNORE_DSC 0
458#define IDETAPE_ADDRESS_VALID 1 /* 0 When the tape position is unknown */
459#define IDETAPE_BUSY 2 /* Device already opened */
460#define IDETAPE_PIPELINE_ERROR 3 /* Error detected in a pipeline stage */
461#define IDETAPE_DETECT_BS 4 /* Attempt to auto-detect the current user block size */
462#define IDETAPE_FILEMARK 5 /* Currently on a filemark */
463#define IDETAPE_DRQ_INTERRUPT 6 /* DRQ interrupt device */
464#define IDETAPE_READ_ERROR 7
465#define IDETAPE_PIPELINE_ACTIVE 8 /* pipeline active */
466/* 0 = no tape is loaded, so we don't rewind after ejecting */
467#define IDETAPE_MEDIUM_PRESENT 9
468
469/* Some defines for the SPACE command */
470#define IDETAPE_SPACE_OVER_FILEMARK 1
471#define IDETAPE_SPACE_TO_EOD 3
472
473/* Some defines for the LOAD UNLOAD command */
474#define IDETAPE_LU_LOAD_MASK 1
475#define IDETAPE_LU_RETENSION_MASK 2
476#define IDETAPE_LU_EOT_MASK 4
477
478/*
479 * Special requests for our block device strategy routine.
480 *
481 * In order to service a character device command, we add special requests to
482 * the tail of our block device request queue and wait for their completion.
483 */
484
485enum {
486 REQ_IDETAPE_PC1 = (1 << 0), /* packet command (first stage) */
487 REQ_IDETAPE_PC2 = (1 << 1), /* packet command (second stage) */
488 REQ_IDETAPE_READ = (1 << 2),
489 REQ_IDETAPE_WRITE = (1 << 3),
490};
491
492/* Error codes returned in rq->errors to the higher part of the driver. */
493#define IDETAPE_ERROR_GENERAL 101
494#define IDETAPE_ERROR_FILEMARK 102
495#define IDETAPE_ERROR_EOD 103
496
497/* Structures related to the SELECT SENSE / MODE SENSE packet commands. */
498#define IDETAPE_BLOCK_DESCRIPTOR 0
499#define IDETAPE_CAPABILITIES_PAGE 0x2a
500
501/* 463/*
502 * The variables below are used for the character device interface. Additional 464 * The variables below are used for the character device interface. Additional
503 * state variables are defined in our ide_drive_t structure. 465 * state variables are defined in our ide_drive_t structure.
@@ -518,17 +480,7 @@ static struct ide_tape_obj *ide_tape_chrdev_get(unsigned int i)
518 return tape; 480 return tape;
519} 481}
520 482
521/* 483static void idetape_input_buffers(ide_drive_t *drive, struct ide_atapi_pc *pc,
522 * Too bad. The drive wants to send us data which we are not ready to accept.
523 * Just throw it away.
524 */
525static void idetape_discard_data(ide_drive_t *drive, unsigned int bcount)
526{
527 while (bcount--)
528 (void) HWIF(drive)->INB(IDE_DATA_REG);
529}
530
531static void idetape_input_buffers(ide_drive_t *drive, idetape_pc_t *pc,
532 unsigned int bcount) 484 unsigned int bcount)
533{ 485{
534 struct idetape_bh *bh = pc->bh; 486 struct idetape_bh *bh = pc->bh;
@@ -538,7 +490,7 @@ static void idetape_input_buffers(ide_drive_t *drive, idetape_pc_t *pc,
538 if (bh == NULL) { 490 if (bh == NULL) {
539 printk(KERN_ERR "ide-tape: bh == NULL in " 491 printk(KERN_ERR "ide-tape: bh == NULL in "
540 "idetape_input_buffers\n"); 492 "idetape_input_buffers\n");
541 idetape_discard_data(drive, bcount); 493 ide_atapi_discard_data(drive, bcount);
542 return; 494 return;
543 } 495 }
544 count = min( 496 count = min(
@@ -557,7 +509,7 @@ static void idetape_input_buffers(ide_drive_t *drive, idetape_pc_t *pc,
557 pc->bh = bh; 509 pc->bh = bh;
558} 510}
559 511
560static void idetape_output_buffers(ide_drive_t *drive, idetape_pc_t *pc, 512static void idetape_output_buffers(ide_drive_t *drive, struct ide_atapi_pc *pc,
561 unsigned int bcount) 513 unsigned int bcount)
562{ 514{
563 struct idetape_bh *bh = pc->bh; 515 struct idetape_bh *bh = pc->bh;
@@ -585,13 +537,13 @@ static void idetape_output_buffers(ide_drive_t *drive, idetape_pc_t *pc,
585 } 537 }
586} 538}
587 539
588static void idetape_update_buffers(idetape_pc_t *pc) 540static void idetape_update_buffers(struct ide_atapi_pc *pc)
589{ 541{
590 struct idetape_bh *bh = pc->bh; 542 struct idetape_bh *bh = pc->bh;
591 int count; 543 int count;
592 unsigned int bcount = pc->actually_transferred; 544 unsigned int bcount = pc->xferred;
593 545
594 if (test_bit(PC_WRITING, &pc->flags)) 546 if (pc->flags & PC_FLAG_WRITING)
595 return; 547 return;
596 while (bcount) { 548 while (bcount) {
597 if (bh == NULL) { 549 if (bh == NULL) {
@@ -614,7 +566,7 @@ static void idetape_update_buffers(idetape_pc_t *pc)
614 * driver. A storage space for a maximum of IDETAPE_PC_STACK packet 566 * driver. A storage space for a maximum of IDETAPE_PC_STACK packet
615 * commands is allocated at initialization time. 567 * commands is allocated at initialization time.
616 */ 568 */
617static idetape_pc_t *idetape_next_pc_storage(ide_drive_t *drive) 569static struct ide_atapi_pc *idetape_next_pc_storage(ide_drive_t *drive)
618{ 570{
619 idetape_tape_t *tape = drive->driver_data; 571 idetape_tape_t *tape = drive->driver_data;
620 572
@@ -649,14 +601,14 @@ static struct request *idetape_next_rq_storage(ide_drive_t *drive)
649 return (&tape->rq_stack[tape->rq_stack_index++]); 601 return (&tape->rq_stack[tape->rq_stack_index++]);
650} 602}
651 603
652static void idetape_init_pc(idetape_pc_t *pc) 604static void idetape_init_pc(struct ide_atapi_pc *pc)
653{ 605{
654 memset(pc->c, 0, 12); 606 memset(pc->c, 0, 12);
655 pc->retries = 0; 607 pc->retries = 0;
656 pc->flags = 0; 608 pc->flags = 0;
657 pc->request_transfer = 0; 609 pc->req_xfer = 0;
658 pc->buffer = pc->pc_buffer; 610 pc->buf = pc->pc_buf;
659 pc->buffer_size = IDETAPE_PC_BUFFER_SIZE; 611 pc->buf_size = IDETAPE_PC_BUFFER_SIZE;
660 pc->bh = NULL; 612 pc->bh = NULL;
661 pc->b_data = NULL; 613 pc->b_data = NULL;
662} 614}
@@ -668,7 +620,7 @@ static void idetape_init_pc(idetape_pc_t *pc)
668static void idetape_analyze_error(ide_drive_t *drive, u8 *sense) 620static void idetape_analyze_error(ide_drive_t *drive, u8 *sense)
669{ 621{
670 idetape_tape_t *tape = drive->driver_data; 622 idetape_tape_t *tape = drive->driver_data;
671 idetape_pc_t *pc = tape->failed_pc; 623 struct ide_atapi_pc *pc = tape->failed_pc;
672 624
673 tape->sense_key = sense[2] & 0xF; 625 tape->sense_key = sense[2] & 0xF;
674 tape->asc = sense[12]; 626 tape->asc = sense[12];
@@ -677,9 +629,9 @@ static void idetape_analyze_error(ide_drive_t *drive, u8 *sense)
677 debug_log(DBG_ERR, "pc = %x, sense key = %x, asc = %x, ascq = %x\n", 629 debug_log(DBG_ERR, "pc = %x, sense key = %x, asc = %x, ascq = %x\n",
678 pc->c[0], tape->sense_key, tape->asc, tape->ascq); 630 pc->c[0], tape->sense_key, tape->asc, tape->ascq);
679 631
680 /* Correct pc->actually_transferred by asking the tape. */ 632 /* Correct pc->xferred by asking the tape. */
681 if (test_bit(PC_DMA_ERROR, &pc->flags)) { 633 if (pc->flags & PC_FLAG_DMA_ERROR) {
682 pc->actually_transferred = pc->request_transfer - 634 pc->xferred = pc->req_xfer -
683 tape->blk_size * 635 tape->blk_size *
684 be32_to_cpu(get_unaligned((u32 *)&sense[3])); 636 be32_to_cpu(get_unaligned((u32 *)&sense[3]));
685 idetape_update_buffers(pc); 637 idetape_update_buffers(pc);
@@ -697,27 +649,27 @@ static void idetape_analyze_error(ide_drive_t *drive, u8 *sense)
697 /* don't report an error, everything's ok */ 649 /* don't report an error, everything's ok */
698 pc->error = 0; 650 pc->error = 0;
699 /* don't retry read/write */ 651 /* don't retry read/write */
700 set_bit(PC_ABORT, &pc->flags); 652 pc->flags |= PC_FLAG_ABORT;
701 } 653 }
702 } 654 }
703 if (pc->c[0] == READ_6 && (sense[2] & 0x80)) { 655 if (pc->c[0] == READ_6 && (sense[2] & 0x80)) {
704 pc->error = IDETAPE_ERROR_FILEMARK; 656 pc->error = IDETAPE_ERROR_FILEMARK;
705 set_bit(PC_ABORT, &pc->flags); 657 pc->flags |= PC_FLAG_ABORT;
706 } 658 }
707 if (pc->c[0] == WRITE_6) { 659 if (pc->c[0] == WRITE_6) {
708 if ((sense[2] & 0x40) || (tape->sense_key == 0xd 660 if ((sense[2] & 0x40) || (tape->sense_key == 0xd
709 && tape->asc == 0x0 && tape->ascq == 0x2)) { 661 && tape->asc == 0x0 && tape->ascq == 0x2)) {
710 pc->error = IDETAPE_ERROR_EOD; 662 pc->error = IDETAPE_ERROR_EOD;
711 set_bit(PC_ABORT, &pc->flags); 663 pc->flags |= PC_FLAG_ABORT;
712 } 664 }
713 } 665 }
714 if (pc->c[0] == READ_6 || pc->c[0] == WRITE_6) { 666 if (pc->c[0] == READ_6 || pc->c[0] == WRITE_6) {
715 if (tape->sense_key == 8) { 667 if (tape->sense_key == 8) {
716 pc->error = IDETAPE_ERROR_EOD; 668 pc->error = IDETAPE_ERROR_EOD;
717 set_bit(PC_ABORT, &pc->flags); 669 pc->flags |= PC_FLAG_ABORT;
718 } 670 }
719 if (!test_bit(PC_ABORT, &pc->flags) && 671 if (!(pc->flags & PC_FLAG_ABORT) &&
720 pc->actually_transferred) 672 pc->xferred)
721 pc->retries = IDETAPE_MAX_PC_RETRIES + 1; 673 pc->retries = IDETAPE_MAX_PC_RETRIES + 1;
722 } 674 }
723} 675}
@@ -872,14 +824,16 @@ static int idetape_end_request(ide_drive_t *drive, int uptodate, int nr_sects)
872 if (rq->cmd[0] & REQ_IDETAPE_WRITE) { 824 if (rq->cmd[0] & REQ_IDETAPE_WRITE) {
873 remove_stage = 1; 825 remove_stage = 1;
874 if (error) { 826 if (error) {
875 set_bit(IDETAPE_PIPELINE_ERROR, &tape->flags); 827 set_bit(IDETAPE_FLAG_PIPELINE_ERR,
828 &tape->flags);
876 if (error == IDETAPE_ERROR_EOD) 829 if (error == IDETAPE_ERROR_EOD)
877 idetape_abort_pipeline(drive, 830 idetape_abort_pipeline(drive,
878 active_stage); 831 active_stage);
879 } 832 }
880 } else if (rq->cmd[0] & REQ_IDETAPE_READ) { 833 } else if (rq->cmd[0] & REQ_IDETAPE_READ) {
881 if (error == IDETAPE_ERROR_EOD) { 834 if (error == IDETAPE_ERROR_EOD) {
882 set_bit(IDETAPE_PIPELINE_ERROR, &tape->flags); 835 set_bit(IDETAPE_FLAG_PIPELINE_ERR,
836 &tape->flags);
883 idetape_abort_pipeline(drive, active_stage); 837 idetape_abort_pipeline(drive, active_stage);
884 } 838 }
885 } 839 }
@@ -912,7 +866,7 @@ static int idetape_end_request(ide_drive_t *drive, int uptodate, int nr_sects)
912 if (remove_stage) 866 if (remove_stage)
913 idetape_remove_stage_head(drive); 867 idetape_remove_stage_head(drive);
914 if (tape->active_data_rq == NULL) 868 if (tape->active_data_rq == NULL)
915 clear_bit(IDETAPE_PIPELINE_ACTIVE, &tape->flags); 869 clear_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags);
916 spin_unlock_irqrestore(&tape->lock, flags); 870 spin_unlock_irqrestore(&tape->lock, flags);
917 return 0; 871 return 0;
918} 872}
@@ -924,7 +878,7 @@ static ide_startstop_t idetape_request_sense_callback(ide_drive_t *drive)
924 debug_log(DBG_PROCS, "Enter %s\n", __func__); 878 debug_log(DBG_PROCS, "Enter %s\n", __func__);
925 879
926 if (!tape->pc->error) { 880 if (!tape->pc->error) {
927 idetape_analyze_error(drive, tape->pc->buffer); 881 idetape_analyze_error(drive, tape->pc->buf);
928 idetape_end_request(drive, 1, 0); 882 idetape_end_request(drive, 1, 0);
929 } else { 883 } else {
930 printk(KERN_ERR "ide-tape: Error in REQUEST SENSE itself - " 884 printk(KERN_ERR "ide-tape: Error in REQUEST SENSE itself - "
@@ -934,13 +888,13 @@ static ide_startstop_t idetape_request_sense_callback(ide_drive_t *drive)
934 return ide_stopped; 888 return ide_stopped;
935} 889}
936 890
937static void idetape_create_request_sense_cmd(idetape_pc_t *pc) 891static void idetape_create_request_sense_cmd(struct ide_atapi_pc *pc)
938{ 892{
939 idetape_init_pc(pc); 893 idetape_init_pc(pc);
940 pc->c[0] = REQUEST_SENSE; 894 pc->c[0] = REQUEST_SENSE;
941 pc->c[4] = 20; 895 pc->c[4] = 20;
942 pc->request_transfer = 20; 896 pc->req_xfer = 20;
943 pc->callback = &idetape_request_sense_callback; 897 pc->idetape_callback = &idetape_request_sense_callback;
944} 898}
945 899
946static void idetape_init_rq(struct request *rq, u8 cmd) 900static void idetape_init_rq(struct request *rq, u8 cmd)
@@ -965,7 +919,7 @@ static void idetape_init_rq(struct request *rq, u8 cmd)
965 * handling functions should queue request to the lower level part and wait for 919 * handling functions should queue request to the lower level part and wait for
966 * their completion using idetape_queue_pc_tail or idetape_queue_rw_tail. 920 * their completion using idetape_queue_pc_tail or idetape_queue_rw_tail.
967 */ 921 */
968static void idetape_queue_pc_head(ide_drive_t *drive, idetape_pc_t *pc, 922static void idetape_queue_pc_head(ide_drive_t *drive, struct ide_atapi_pc *pc,
969 struct request *rq) 923 struct request *rq)
970{ 924{
971 struct ide_tape_obj *tape = drive->driver_data; 925 struct ide_tape_obj *tape = drive->driver_data;
@@ -984,14 +938,14 @@ static void idetape_queue_pc_head(ide_drive_t *drive, idetape_pc_t *pc,
984static ide_startstop_t idetape_retry_pc (ide_drive_t *drive) 938static ide_startstop_t idetape_retry_pc (ide_drive_t *drive)
985{ 939{
986 idetape_tape_t *tape = drive->driver_data; 940 idetape_tape_t *tape = drive->driver_data;
987 idetape_pc_t *pc; 941 struct ide_atapi_pc *pc;
988 struct request *rq; 942 struct request *rq;
989 943
990 (void)ide_read_error(drive); 944 (void)ide_read_error(drive);
991 pc = idetape_next_pc_storage(drive); 945 pc = idetape_next_pc_storage(drive);
992 rq = idetape_next_rq_storage(drive); 946 rq = idetape_next_rq_storage(drive);
993 idetape_create_request_sense_cmd(pc); 947 idetape_create_request_sense_cmd(pc);
994 set_bit(IDETAPE_IGNORE_DSC, &tape->flags); 948 set_bit(IDETAPE_FLAG_IGNORE_DSC, &tape->flags);
995 idetape_queue_pc_head(drive, pc, rq); 949 idetape_queue_pc_head(drive, pc, rq);
996 return ide_stopped; 950 return ide_stopped;
997} 951}
@@ -1010,7 +964,7 @@ static void idetape_postpone_request(ide_drive_t *drive)
1010 ide_stall_queue(drive, tape->dsc_poll_freq); 964 ide_stall_queue(drive, tape->dsc_poll_freq);
1011} 965}
1012 966
1013typedef void idetape_io_buf(ide_drive_t *, idetape_pc_t *, unsigned int); 967typedef void idetape_io_buf(ide_drive_t *, struct ide_atapi_pc *, unsigned int);
1014 968
1015/* 969/*
1016 * This is the usual interrupt handler which will be called during a packet 970 * This is the usual interrupt handler which will be called during a packet
@@ -1023,7 +977,7 @@ static ide_startstop_t idetape_pc_intr(ide_drive_t *drive)
1023{ 977{
1024 ide_hwif_t *hwif = drive->hwif; 978 ide_hwif_t *hwif = drive->hwif;
1025 idetape_tape_t *tape = drive->driver_data; 979 idetape_tape_t *tape = drive->driver_data;
1026 idetape_pc_t *pc = tape->pc; 980 struct ide_atapi_pc *pc = tape->pc;
1027 xfer_func_t *xferfunc; 981 xfer_func_t *xferfunc;
1028 idetape_io_buf *iobuf; 982 idetape_io_buf *iobuf;
1029 unsigned int temp; 983 unsigned int temp;
@@ -1038,7 +992,7 @@ static ide_startstop_t idetape_pc_intr(ide_drive_t *drive)
1038 /* Clear the interrupt */ 992 /* Clear the interrupt */
1039 stat = ide_read_status(drive); 993 stat = ide_read_status(drive);
1040 994
1041 if (test_bit(PC_DMA_IN_PROGRESS, &pc->flags)) { 995 if (pc->flags & PC_FLAG_DMA_IN_PROGRESS) {
1042 if (hwif->ide_dma_end(drive) || (stat & ERR_STAT)) { 996 if (hwif->ide_dma_end(drive) || (stat & ERR_STAT)) {
1043 /* 997 /*
1044 * A DMA error is sometimes expected. For example, 998 * A DMA error is sometimes expected. For example,
@@ -1061,9 +1015,9 @@ static ide_startstop_t idetape_pc_intr(ide_drive_t *drive)
1061 * data transfer will occur, but no DMA error. 1015 * data transfer will occur, but no DMA error.
1062 * (AS, 19 Apr 2001) 1016 * (AS, 19 Apr 2001)
1063 */ 1017 */
1064 set_bit(PC_DMA_ERROR, &pc->flags); 1018 pc->flags |= PC_FLAG_DMA_ERROR;
1065 } else { 1019 } else {
1066 pc->actually_transferred = pc->request_transfer; 1020 pc->xferred = pc->req_xfer;
1067 idetape_update_buffers(pc); 1021 idetape_update_buffers(pc);
1068 } 1022 }
1069 debug_log(DBG_PROCS, "DMA finished\n"); 1023 debug_log(DBG_PROCS, "DMA finished\n");
@@ -1073,9 +1027,9 @@ static ide_startstop_t idetape_pc_intr(ide_drive_t *drive)
1073 /* No more interrupts */ 1027 /* No more interrupts */
1074 if ((stat & DRQ_STAT) == 0) { 1028 if ((stat & DRQ_STAT) == 0) {
1075 debug_log(DBG_SENSE, "Packet command completed, %d bytes" 1029 debug_log(DBG_SENSE, "Packet command completed, %d bytes"
1076 " transferred\n", pc->actually_transferred); 1030 " transferred\n", pc->xferred);
1077 1031
1078 clear_bit(PC_DMA_IN_PROGRESS, &pc->flags); 1032 pc->flags &= ~PC_FLAG_DMA_IN_PROGRESS;
1079 local_irq_enable(); 1033 local_irq_enable();
1080 1034
1081#if SIMULATE_ERRORS 1035#if SIMULATE_ERRORS
@@ -1088,7 +1042,7 @@ static ide_startstop_t idetape_pc_intr(ide_drive_t *drive)
1088#endif 1042#endif
1089 if ((stat & ERR_STAT) && pc->c[0] == REQUEST_SENSE) 1043 if ((stat & ERR_STAT) && pc->c[0] == REQUEST_SENSE)
1090 stat &= ~ERR_STAT; 1044 stat &= ~ERR_STAT;
1091 if ((stat & ERR_STAT) || test_bit(PC_DMA_ERROR, &pc->flags)) { 1045 if ((stat & ERR_STAT) || (pc->flags & PC_FLAG_DMA_ERROR)) {
1092 /* Error detected */ 1046 /* Error detected */
1093 debug_log(DBG_ERR, "%s: I/O error\n", tape->name); 1047 debug_log(DBG_ERR, "%s: I/O error\n", tape->name);
1094 1048
@@ -1104,7 +1058,7 @@ static ide_startstop_t idetape_pc_intr(ide_drive_t *drive)
1104 return idetape_retry_pc(drive); 1058 return idetape_retry_pc(drive);
1105 } 1059 }
1106 pc->error = 0; 1060 pc->error = 0;
1107 if (test_bit(PC_WAIT_FOR_DSC, &pc->flags) && 1061 if ((pc->flags & PC_FLAG_WAIT_FOR_DSC) &&
1108 (stat & SEEK_STAT) == 0) { 1062 (stat & SEEK_STAT) == 0) {
1109 /* Media access command */ 1063 /* Media access command */
1110 tape->dsc_polling_start = jiffies; 1064 tape->dsc_polling_start = jiffies;
@@ -1117,9 +1071,11 @@ static ide_startstop_t idetape_pc_intr(ide_drive_t *drive)
1117 if (tape->failed_pc == pc) 1071 if (tape->failed_pc == pc)
1118 tape->failed_pc = NULL; 1072 tape->failed_pc = NULL;
1119 /* Command finished - Call the callback function */ 1073 /* Command finished - Call the callback function */
1120 return pc->callback(drive); 1074 return pc->idetape_callback(drive);
1121 } 1075 }
1122 if (test_and_clear_bit(PC_DMA_IN_PROGRESS, &pc->flags)) { 1076
1077 if (pc->flags & PC_FLAG_DMA_IN_PROGRESS) {
1078 pc->flags &= ~PC_FLAG_DMA_IN_PROGRESS;
1123 printk(KERN_ERR "ide-tape: The tape wants to issue more " 1079 printk(KERN_ERR "ide-tape: The tape wants to issue more "
1124 "interrupts in DMA mode\n"); 1080 "interrupts in DMA mode\n");
1125 printk(KERN_ERR "ide-tape: DMA disabled, reverting to PIO\n"); 1081 printk(KERN_ERR "ide-tape: DMA disabled, reverting to PIO\n");
@@ -1127,16 +1083,16 @@ static ide_startstop_t idetape_pc_intr(ide_drive_t *drive)
1127 return ide_do_reset(drive); 1083 return ide_do_reset(drive);
1128 } 1084 }
1129 /* Get the number of bytes to transfer on this interrupt. */ 1085 /* Get the number of bytes to transfer on this interrupt. */
1130 bcount = (hwif->INB(IDE_BCOUNTH_REG) << 8) | 1086 bcount = (hwif->INB(hwif->io_ports[IDE_BCOUNTH_OFFSET]) << 8) |
1131 hwif->INB(IDE_BCOUNTL_REG); 1087 hwif->INB(hwif->io_ports[IDE_BCOUNTL_OFFSET]);
1132 1088
1133 ireason = hwif->INB(IDE_IREASON_REG); 1089 ireason = hwif->INB(hwif->io_ports[IDE_IREASON_OFFSET]);
1134 1090
1135 if (ireason & CD) { 1091 if (ireason & CD) {
1136 printk(KERN_ERR "ide-tape: CoD != 0 in %s\n", __func__); 1092 printk(KERN_ERR "ide-tape: CoD != 0 in %s\n", __func__);
1137 return ide_do_reset(drive); 1093 return ide_do_reset(drive);
1138 } 1094 }
1139 if (((ireason & IO) == IO) == test_bit(PC_WRITING, &pc->flags)) { 1095 if (((ireason & IO) == IO) == !!(pc->flags & PC_FLAG_WRITING)) {
1140 /* Hopefully, we will never get here */ 1096 /* Hopefully, we will never get here */
1141 printk(KERN_ERR "ide-tape: We wanted to %s, ", 1097 printk(KERN_ERR "ide-tape: We wanted to %s, ",
1142 (ireason & IO) ? "Write" : "Read"); 1098 (ireason & IO) ? "Write" : "Read");
@@ -1144,15 +1100,15 @@ static ide_startstop_t idetape_pc_intr(ide_drive_t *drive)
1144 (ireason & IO) ? "Read" : "Write"); 1100 (ireason & IO) ? "Read" : "Write");
1145 return ide_do_reset(drive); 1101 return ide_do_reset(drive);
1146 } 1102 }
1147 if (!test_bit(PC_WRITING, &pc->flags)) { 1103 if (!(pc->flags & PC_FLAG_WRITING)) {
1148 /* Reading - Check that we have enough space */ 1104 /* Reading - Check that we have enough space */
1149 temp = pc->actually_transferred + bcount; 1105 temp = pc->xferred + bcount;
1150 if (temp > pc->request_transfer) { 1106 if (temp > pc->req_xfer) {
1151 if (temp > pc->buffer_size) { 1107 if (temp > pc->buf_size) {
1152 printk(KERN_ERR "ide-tape: The tape wants to " 1108 printk(KERN_ERR "ide-tape: The tape wants to "
1153 "send us more data than expected " 1109 "send us more data than expected "
1154 "- discarding data\n"); 1110 "- discarding data\n");
1155 idetape_discard_data(drive, bcount); 1111 ide_atapi_discard_data(drive, bcount);
1156 ide_set_handler(drive, &idetape_pc_intr, 1112 ide_set_handler(drive, &idetape_pc_intr,
1157 IDETAPE_WAIT_CMD, NULL); 1113 IDETAPE_WAIT_CMD, NULL);
1158 return ide_started; 1114 return ide_started;
@@ -1170,11 +1126,11 @@ static ide_startstop_t idetape_pc_intr(ide_drive_t *drive)
1170 if (pc->bh) 1126 if (pc->bh)
1171 iobuf(drive, pc, bcount); 1127 iobuf(drive, pc, bcount);
1172 else 1128 else
1173 xferfunc(drive, pc->current_position, bcount); 1129 xferfunc(drive, pc->cur_pos, bcount);
1174 1130
1175 /* Update the current position */ 1131 /* Update the current position */
1176 pc->actually_transferred += bcount; 1132 pc->xferred += bcount;
1177 pc->current_position += bcount; 1133 pc->cur_pos += bcount;
1178 1134
1179 debug_log(DBG_SENSE, "[cmd %x] transferred %d bytes on that intr.\n", 1135 debug_log(DBG_SENSE, "[cmd %x] transferred %d bytes on that intr.\n",
1180 pc->c[0], bcount); 1136 pc->c[0], bcount);
@@ -1224,7 +1180,7 @@ static ide_startstop_t idetape_transfer_pc(ide_drive_t *drive)
1224{ 1180{
1225 ide_hwif_t *hwif = drive->hwif; 1181 ide_hwif_t *hwif = drive->hwif;
1226 idetape_tape_t *tape = drive->driver_data; 1182 idetape_tape_t *tape = drive->driver_data;
1227 idetape_pc_t *pc = tape->pc; 1183 struct ide_atapi_pc *pc = tape->pc;
1228 int retries = 100; 1184 int retries = 100;
1229 ide_startstop_t startstop; 1185 ide_startstop_t startstop;
1230 u8 ireason; 1186 u8 ireason;
@@ -1234,12 +1190,12 @@ static ide_startstop_t idetape_transfer_pc(ide_drive_t *drive)
1234 "yet DRQ isn't asserted\n"); 1190 "yet DRQ isn't asserted\n");
1235 return startstop; 1191 return startstop;
1236 } 1192 }
1237 ireason = hwif->INB(IDE_IREASON_REG); 1193 ireason = hwif->INB(hwif->io_ports[IDE_IREASON_OFFSET]);
1238 while (retries-- && ((ireason & CD) == 0 || (ireason & IO))) { 1194 while (retries-- && ((ireason & CD) == 0 || (ireason & IO))) {
1239 printk(KERN_ERR "ide-tape: (IO,CoD != (0,1) while issuing " 1195 printk(KERN_ERR "ide-tape: (IO,CoD != (0,1) while issuing "
1240 "a packet command, retrying\n"); 1196 "a packet command, retrying\n");
1241 udelay(100); 1197 udelay(100);
1242 ireason = hwif->INB(IDE_IREASON_REG); 1198 ireason = hwif->INB(hwif->io_ports[IDE_IREASON_OFFSET]);
1243 if (retries == 0) { 1199 if (retries == 0) {
1244 printk(KERN_ERR "ide-tape: (IO,CoD != (0,1) while " 1200 printk(KERN_ERR "ide-tape: (IO,CoD != (0,1) while "
1245 "issuing a packet command, ignoring\n"); 1201 "issuing a packet command, ignoring\n");
@@ -1256,7 +1212,7 @@ static ide_startstop_t idetape_transfer_pc(ide_drive_t *drive)
1256 ide_set_handler(drive, &idetape_pc_intr, IDETAPE_WAIT_CMD, NULL); 1212 ide_set_handler(drive, &idetape_pc_intr, IDETAPE_WAIT_CMD, NULL);
1257#ifdef CONFIG_BLK_DEV_IDEDMA 1213#ifdef CONFIG_BLK_DEV_IDEDMA
1258 /* Begin DMA, if necessary */ 1214 /* Begin DMA, if necessary */
1259 if (test_bit(PC_DMA_IN_PROGRESS, &pc->flags)) 1215 if (pc->flags & PC_FLAG_DMA_IN_PROGRESS)
1260 hwif->dma_start(drive); 1216 hwif->dma_start(drive);
1261#endif 1217#endif
1262 /* Send the actual packet */ 1218 /* Send the actual packet */
@@ -1264,7 +1220,8 @@ static ide_startstop_t idetape_transfer_pc(ide_drive_t *drive)
1264 return ide_started; 1220 return ide_started;
1265} 1221}
1266 1222
1267static ide_startstop_t idetape_issue_pc(ide_drive_t *drive, idetape_pc_t *pc) 1223static ide_startstop_t idetape_issue_pc(ide_drive_t *drive,
1224 struct ide_atapi_pc *pc)
1268{ 1225{
1269 ide_hwif_t *hwif = drive->hwif; 1226 ide_hwif_t *hwif = drive->hwif;
1270 idetape_tape_t *tape = drive->driver_data; 1227 idetape_tape_t *tape = drive->driver_data;
@@ -1283,13 +1240,13 @@ static ide_startstop_t idetape_issue_pc(ide_drive_t *drive, idetape_pc_t *pc)
1283 tape->pc = pc; 1240 tape->pc = pc;
1284 1241
1285 if (pc->retries > IDETAPE_MAX_PC_RETRIES || 1242 if (pc->retries > IDETAPE_MAX_PC_RETRIES ||
1286 test_bit(PC_ABORT, &pc->flags)) { 1243 (pc->flags & PC_FLAG_ABORT)) {
1287 /* 1244 /*
1288 * We will "abort" retrying a packet command in case legitimate 1245 * We will "abort" retrying a packet command in case legitimate
1289 * error code was received (crossing a filemark, or end of the 1246 * error code was received (crossing a filemark, or end of the
1290 * media, for example). 1247 * media, for example).
1291 */ 1248 */
1292 if (!test_bit(PC_ABORT, &pc->flags)) { 1249 if (!(pc->flags & PC_FLAG_ABORT)) {
1293 if (!(pc->c[0] == TEST_UNIT_READY && 1250 if (!(pc->c[0] == TEST_UNIT_READY &&
1294 tape->sense_key == 2 && tape->asc == 4 && 1251 tape->sense_key == 2 && tape->asc == 4 &&
1295 (tape->ascq == 1 || tape->ascq == 8))) { 1252 (tape->ascq == 1 || tape->ascq == 8))) {
@@ -1304,36 +1261,38 @@ static ide_startstop_t idetape_issue_pc(ide_drive_t *drive, idetape_pc_t *pc)
1304 pc->error = IDETAPE_ERROR_GENERAL; 1261 pc->error = IDETAPE_ERROR_GENERAL;
1305 } 1262 }
1306 tape->failed_pc = NULL; 1263 tape->failed_pc = NULL;
1307 return pc->callback(drive); 1264 return pc->idetape_callback(drive);
1308 } 1265 }
1309 debug_log(DBG_SENSE, "Retry #%d, cmd = %02X\n", pc->retries, pc->c[0]); 1266 debug_log(DBG_SENSE, "Retry #%d, cmd = %02X\n", pc->retries, pc->c[0]);
1310 1267
1311 pc->retries++; 1268 pc->retries++;
1312 /* We haven't transferred any data yet */ 1269 /* We haven't transferred any data yet */
1313 pc->actually_transferred = 0; 1270 pc->xferred = 0;
1314 pc->current_position = pc->buffer; 1271 pc->cur_pos = pc->buf;
1315 /* Request to transfer the entire buffer at once */ 1272 /* Request to transfer the entire buffer at once */
1316 bcount = pc->request_transfer; 1273 bcount = pc->req_xfer;
1317 1274
1318 if (test_and_clear_bit(PC_DMA_ERROR, &pc->flags)) { 1275 if (pc->flags & PC_FLAG_DMA_ERROR) {
1276 pc->flags &= ~PC_FLAG_DMA_ERROR;
1319 printk(KERN_WARNING "ide-tape: DMA disabled, " 1277 printk(KERN_WARNING "ide-tape: DMA disabled, "
1320 "reverting to PIO\n"); 1278 "reverting to PIO\n");
1321 ide_dma_off(drive); 1279 ide_dma_off(drive);
1322 } 1280 }
1323 if (test_bit(PC_DMA_RECOMMENDED, &pc->flags) && drive->using_dma) 1281 if ((pc->flags & PC_FLAG_DMA_RECOMMENDED) && drive->using_dma)
1324 dma_ok = !hwif->dma_setup(drive); 1282 dma_ok = !hwif->dma_setup(drive);
1325 1283
1326 ide_pktcmd_tf_load(drive, IDE_TFLAG_NO_SELECT_MASK | 1284 ide_pktcmd_tf_load(drive, IDE_TFLAG_NO_SELECT_MASK |
1327 IDE_TFLAG_OUT_DEVICE, bcount, dma_ok); 1285 IDE_TFLAG_OUT_DEVICE, bcount, dma_ok);
1328 1286
1329 if (dma_ok) /* Will begin DMA later */ 1287 if (dma_ok)
1330 set_bit(PC_DMA_IN_PROGRESS, &pc->flags); 1288 /* Will begin DMA later */
1331 if (test_bit(IDETAPE_DRQ_INTERRUPT, &tape->flags)) { 1289 pc->flags |= PC_FLAG_DMA_IN_PROGRESS;
1290 if (test_bit(IDETAPE_FLAG_DRQ_INTERRUPT, &tape->flags)) {
1332 ide_execute_command(drive, WIN_PACKETCMD, &idetape_transfer_pc, 1291 ide_execute_command(drive, WIN_PACKETCMD, &idetape_transfer_pc,
1333 IDETAPE_WAIT_CMD, NULL); 1292 IDETAPE_WAIT_CMD, NULL);
1334 return ide_started; 1293 return ide_started;
1335 } else { 1294 } else {
1336 hwif->OUTB(WIN_PACKETCMD, IDE_COMMAND_REG); 1295 hwif->OUTB(WIN_PACKETCMD, hwif->io_ports[IDE_COMMAND_OFFSET]);
1337 return idetape_transfer_pc(drive); 1296 return idetape_transfer_pc(drive);
1338 } 1297 }
1339} 1298}
@@ -1349,7 +1308,7 @@ static ide_startstop_t idetape_pc_callback(ide_drive_t *drive)
1349} 1308}
1350 1309
1351/* A mode sense command is used to "sense" tape parameters. */ 1310/* A mode sense command is used to "sense" tape parameters. */
1352static void idetape_create_mode_sense_cmd(idetape_pc_t *pc, u8 page_code) 1311static void idetape_create_mode_sense_cmd(struct ide_atapi_pc *pc, u8 page_code)
1353{ 1312{
1354 idetape_init_pc(pc); 1313 idetape_init_pc(pc);
1355 pc->c[0] = MODE_SENSE; 1314 pc->c[0] = MODE_SENSE;
@@ -1368,12 +1327,12 @@ static void idetape_create_mode_sense_cmd(idetape_pc_t *pc, u8 page_code)
1368 /* We will just discard data in that case */ 1327 /* We will just discard data in that case */
1369 pc->c[4] = 255; 1328 pc->c[4] = 255;
1370 if (page_code == IDETAPE_BLOCK_DESCRIPTOR) 1329 if (page_code == IDETAPE_BLOCK_DESCRIPTOR)
1371 pc->request_transfer = 12; 1330 pc->req_xfer = 12;
1372 else if (page_code == IDETAPE_CAPABILITIES_PAGE) 1331 else if (page_code == IDETAPE_CAPABILITIES_PAGE)
1373 pc->request_transfer = 24; 1332 pc->req_xfer = 24;
1374 else 1333 else
1375 pc->request_transfer = 50; 1334 pc->req_xfer = 50;
1376 pc->callback = &idetape_pc_callback; 1335 pc->idetape_callback = &idetape_pc_callback;
1377} 1336}
1378 1337
1379static void idetape_calculate_speeds(ide_drive_t *drive) 1338static void idetape_calculate_speeds(ide_drive_t *drive)
@@ -1442,7 +1401,7 @@ static void idetape_calculate_speeds(ide_drive_t *drive)
1442static ide_startstop_t idetape_media_access_finished(ide_drive_t *drive) 1401static ide_startstop_t idetape_media_access_finished(ide_drive_t *drive)
1443{ 1402{
1444 idetape_tape_t *tape = drive->driver_data; 1403 idetape_tape_t *tape = drive->driver_data;
1445 idetape_pc_t *pc = tape->pc; 1404 struct ide_atapi_pc *pc = tape->pc;
1446 u8 stat; 1405 u8 stat;
1447 1406
1448 stat = ide_read_status(drive); 1407 stat = ide_read_status(drive);
@@ -1463,14 +1422,14 @@ static ide_startstop_t idetape_media_access_finished(ide_drive_t *drive)
1463 pc->error = IDETAPE_ERROR_GENERAL; 1422 pc->error = IDETAPE_ERROR_GENERAL;
1464 tape->failed_pc = NULL; 1423 tape->failed_pc = NULL;
1465 } 1424 }
1466 return pc->callback(drive); 1425 return pc->idetape_callback(drive);
1467} 1426}
1468 1427
1469static ide_startstop_t idetape_rw_callback(ide_drive_t *drive) 1428static ide_startstop_t idetape_rw_callback(ide_drive_t *drive)
1470{ 1429{
1471 idetape_tape_t *tape = drive->driver_data; 1430 idetape_tape_t *tape = drive->driver_data;
1472 struct request *rq = HWGROUP(drive)->rq; 1431 struct request *rq = HWGROUP(drive)->rq;
1473 int blocks = tape->pc->actually_transferred / tape->blk_size; 1432 int blocks = tape->pc->xferred / tape->blk_size;
1474 1433
1475 tape->avg_size += blocks * tape->blk_size; 1434 tape->avg_size += blocks * tape->blk_size;
1476 tape->insert_size += blocks * tape->blk_size; 1435 tape->insert_size += blocks * tape->blk_size;
@@ -1502,47 +1461,49 @@ static ide_startstop_t idetape_rw_callback(ide_drive_t *drive)
1502 return ide_stopped; 1461 return ide_stopped;
1503} 1462}
1504 1463
1505static void idetape_create_read_cmd(idetape_tape_t *tape, idetape_pc_t *pc, 1464static void idetape_create_read_cmd(idetape_tape_t *tape,
1465 struct ide_atapi_pc *pc,
1506 unsigned int length, struct idetape_bh *bh) 1466 unsigned int length, struct idetape_bh *bh)
1507{ 1467{
1508 idetape_init_pc(pc); 1468 idetape_init_pc(pc);
1509 pc->c[0] = READ_6; 1469 pc->c[0] = READ_6;
1510 put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]); 1470 put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]);
1511 pc->c[1] = 1; 1471 pc->c[1] = 1;
1512 pc->callback = &idetape_rw_callback; 1472 pc->idetape_callback = &idetape_rw_callback;
1513 pc->bh = bh; 1473 pc->bh = bh;
1514 atomic_set(&bh->b_count, 0); 1474 atomic_set(&bh->b_count, 0);
1515 pc->buffer = NULL; 1475 pc->buf = NULL;
1516 pc->buffer_size = length * tape->blk_size; 1476 pc->buf_size = length * tape->blk_size;
1517 pc->request_transfer = pc->buffer_size; 1477 pc->req_xfer = pc->buf_size;
1518 if (pc->request_transfer == tape->stage_size) 1478 if (pc->req_xfer == tape->stage_size)
1519 set_bit(PC_DMA_RECOMMENDED, &pc->flags); 1479 pc->flags |= PC_FLAG_DMA_RECOMMENDED;
1520} 1480}
1521 1481
1522static void idetape_create_write_cmd(idetape_tape_t *tape, idetape_pc_t *pc, 1482static void idetape_create_write_cmd(idetape_tape_t *tape,
1483 struct ide_atapi_pc *pc,
1523 unsigned int length, struct idetape_bh *bh) 1484 unsigned int length, struct idetape_bh *bh)
1524{ 1485{
1525 idetape_init_pc(pc); 1486 idetape_init_pc(pc);
1526 pc->c[0] = WRITE_6; 1487 pc->c[0] = WRITE_6;
1527 put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]); 1488 put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]);
1528 pc->c[1] = 1; 1489 pc->c[1] = 1;
1529 pc->callback = &idetape_rw_callback; 1490 pc->idetape_callback = &idetape_rw_callback;
1530 set_bit(PC_WRITING, &pc->flags); 1491 pc->flags |= PC_FLAG_WRITING;
1531 pc->bh = bh; 1492 pc->bh = bh;
1532 pc->b_data = bh->b_data; 1493 pc->b_data = bh->b_data;
1533 pc->b_count = atomic_read(&bh->b_count); 1494 pc->b_count = atomic_read(&bh->b_count);
1534 pc->buffer = NULL; 1495 pc->buf = NULL;
1535 pc->buffer_size = length * tape->blk_size; 1496 pc->buf_size = length * tape->blk_size;
1536 pc->request_transfer = pc->buffer_size; 1497 pc->req_xfer = pc->buf_size;
1537 if (pc->request_transfer == tape->stage_size) 1498 if (pc->req_xfer == tape->stage_size)
1538 set_bit(PC_DMA_RECOMMENDED, &pc->flags); 1499 pc->flags |= PC_FLAG_DMA_RECOMMENDED;
1539} 1500}
1540 1501
1541static ide_startstop_t idetape_do_request(ide_drive_t *drive, 1502static ide_startstop_t idetape_do_request(ide_drive_t *drive,
1542 struct request *rq, sector_t block) 1503 struct request *rq, sector_t block)
1543{ 1504{
1544 idetape_tape_t *tape = drive->driver_data; 1505 idetape_tape_t *tape = drive->driver_data;
1545 idetape_pc_t *pc = NULL; 1506 struct ide_atapi_pc *pc = NULL;
1546 struct request *postponed_rq = tape->postponed_rq; 1507 struct request *postponed_rq = tape->postponed_rq;
1547 u8 stat; 1508 u8 stat;
1548 1509
@@ -1579,10 +1540,10 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive,
1579 stat = ide_read_status(drive); 1540 stat = ide_read_status(drive);
1580 1541
1581 if (!drive->dsc_overlap && !(rq->cmd[0] & REQ_IDETAPE_PC2)) 1542 if (!drive->dsc_overlap && !(rq->cmd[0] & REQ_IDETAPE_PC2))
1582 set_bit(IDETAPE_IGNORE_DSC, &tape->flags); 1543 set_bit(IDETAPE_FLAG_IGNORE_DSC, &tape->flags);
1583 1544
1584 if (drive->post_reset == 1) { 1545 if (drive->post_reset == 1) {
1585 set_bit(IDETAPE_IGNORE_DSC, &tape->flags); 1546 set_bit(IDETAPE_FLAG_IGNORE_DSC, &tape->flags);
1586 drive->post_reset = 0; 1547 drive->post_reset = 0;
1587 } 1548 }
1588 1549
@@ -1590,7 +1551,7 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive,
1590 tape->insert_speed = tape->insert_size / 1024 * HZ / 1551 tape->insert_speed = tape->insert_size / 1024 * HZ /
1591 (jiffies - tape->insert_time); 1552 (jiffies - tape->insert_time);
1592 idetape_calculate_speeds(drive); 1553 idetape_calculate_speeds(drive);
1593 if (!test_and_clear_bit(IDETAPE_IGNORE_DSC, &tape->flags) && 1554 if (!test_and_clear_bit(IDETAPE_FLAG_IGNORE_DSC, &tape->flags) &&
1594 (stat & SEEK_STAT) == 0) { 1555 (stat & SEEK_STAT) == 0) {
1595 if (postponed_rq == NULL) { 1556 if (postponed_rq == NULL) {
1596 tape->dsc_polling_start = jiffies; 1557 tape->dsc_polling_start = jiffies;
@@ -1629,7 +1590,7 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive,
1629 goto out; 1590 goto out;
1630 } 1591 }
1631 if (rq->cmd[0] & REQ_IDETAPE_PC1) { 1592 if (rq->cmd[0] & REQ_IDETAPE_PC1) {
1632 pc = (idetape_pc_t *) rq->buffer; 1593 pc = (struct ide_atapi_pc *) rq->buffer;
1633 rq->cmd[0] &= ~(REQ_IDETAPE_PC1); 1594 rq->cmd[0] &= ~(REQ_IDETAPE_PC1);
1634 rq->cmd[0] |= REQ_IDETAPE_PC2; 1595 rq->cmd[0] |= REQ_IDETAPE_PC2;
1635 goto out; 1596 goto out;
@@ -1648,7 +1609,7 @@ static inline int idetape_pipeline_active(idetape_tape_t *tape)
1648{ 1609{
1649 int rc1, rc2; 1610 int rc1, rc2;
1650 1611
1651 rc1 = test_bit(IDETAPE_PIPELINE_ACTIVE, &tape->flags); 1612 rc1 = test_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags);
1652 rc2 = (tape->active_data_rq != NULL); 1613 rc2 = (tape->active_data_rq != NULL);
1653 return rc1; 1614 return rc1;
1654} 1615}
@@ -1881,7 +1842,7 @@ static void idetape_wait_for_request(ide_drive_t *drive, struct request *rq)
1881static ide_startstop_t idetape_read_position_callback(ide_drive_t *drive) 1842static ide_startstop_t idetape_read_position_callback(ide_drive_t *drive)
1882{ 1843{
1883 idetape_tape_t *tape = drive->driver_data; 1844 idetape_tape_t *tape = drive->driver_data;
1884 u8 *readpos = tape->pc->buffer; 1845 u8 *readpos = tape->pc->buf;
1885 1846
1886 debug_log(DBG_PROCS, "Enter %s\n", __func__); 1847 debug_log(DBG_PROCS, "Enter %s\n", __func__);
1887 1848
@@ -1894,7 +1855,7 @@ static ide_startstop_t idetape_read_position_callback(ide_drive_t *drive)
1894 if (readpos[0] & 0x4) { 1855 if (readpos[0] & 0x4) {
1895 printk(KERN_INFO "ide-tape: Block location is unknown" 1856 printk(KERN_INFO "ide-tape: Block location is unknown"
1896 "to the tape\n"); 1857 "to the tape\n");
1897 clear_bit(IDETAPE_ADDRESS_VALID, &tape->flags); 1858 clear_bit(IDETAPE_FLAG_ADDRESS_VALID, &tape->flags);
1898 idetape_end_request(drive, 0, 0); 1859 idetape_end_request(drive, 0, 0);
1899 } else { 1860 } else {
1900 debug_log(DBG_SENSE, "Block Location - %u\n", 1861 debug_log(DBG_SENSE, "Block Location - %u\n",
@@ -1903,7 +1864,7 @@ static ide_startstop_t idetape_read_position_callback(ide_drive_t *drive)
1903 tape->partition = readpos[1]; 1864 tape->partition = readpos[1];
1904 tape->first_frame = 1865 tape->first_frame =
1905 be32_to_cpu(*(u32 *)&readpos[4]); 1866 be32_to_cpu(*(u32 *)&readpos[4]);
1906 set_bit(IDETAPE_ADDRESS_VALID, &tape->flags); 1867 set_bit(IDETAPE_FLAG_ADDRESS_VALID, &tape->flags);
1907 idetape_end_request(drive, 1, 0); 1868 idetape_end_request(drive, 1, 0);
1908 } 1869 }
1909 } else { 1870 } else {
@@ -1917,20 +1878,20 @@ static ide_startstop_t idetape_read_position_callback(ide_drive_t *drive)
1917 * writing a filemark otherwise. 1878 * writing a filemark otherwise.
1918 */ 1879 */
1919static void idetape_create_write_filemark_cmd(ide_drive_t *drive, 1880static void idetape_create_write_filemark_cmd(ide_drive_t *drive,
1920 idetape_pc_t *pc, int write_filemark) 1881 struct ide_atapi_pc *pc, int write_filemark)
1921{ 1882{
1922 idetape_init_pc(pc); 1883 idetape_init_pc(pc);
1923 pc->c[0] = WRITE_FILEMARKS; 1884 pc->c[0] = WRITE_FILEMARKS;
1924 pc->c[4] = write_filemark; 1885 pc->c[4] = write_filemark;
1925 set_bit(PC_WAIT_FOR_DSC, &pc->flags); 1886 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
1926 pc->callback = &idetape_pc_callback; 1887 pc->idetape_callback = &idetape_pc_callback;
1927} 1888}
1928 1889
1929static void idetape_create_test_unit_ready_cmd(idetape_pc_t *pc) 1890static void idetape_create_test_unit_ready_cmd(struct ide_atapi_pc *pc)
1930{ 1891{
1931 idetape_init_pc(pc); 1892 idetape_init_pc(pc);
1932 pc->c[0] = TEST_UNIT_READY; 1893 pc->c[0] = TEST_UNIT_READY;
1933 pc->callback = &idetape_pc_callback; 1894 pc->idetape_callback = &idetape_pc_callback;
1934} 1895}
1935 1896
1936/* 1897/*
@@ -1946,7 +1907,7 @@ static void idetape_create_test_unit_ready_cmd(idetape_pc_t *pc)
1946 * to the request list without waiting for it to be serviced! In that case, we 1907 * to the request list without waiting for it to be serviced! In that case, we
1947 * usually use idetape_queue_pc_head(). 1908 * usually use idetape_queue_pc_head().
1948 */ 1909 */
1949static int __idetape_queue_pc_tail(ide_drive_t *drive, idetape_pc_t *pc) 1910static int __idetape_queue_pc_tail(ide_drive_t *drive, struct ide_atapi_pc *pc)
1950{ 1911{
1951 struct ide_tape_obj *tape = drive->driver_data; 1912 struct ide_tape_obj *tape = drive->driver_data;
1952 struct request rq; 1913 struct request rq;
@@ -1957,24 +1918,24 @@ static int __idetape_queue_pc_tail(ide_drive_t *drive, idetape_pc_t *pc)
1957 return ide_do_drive_cmd(drive, &rq, ide_wait); 1918 return ide_do_drive_cmd(drive, &rq, ide_wait);
1958} 1919}
1959 1920
1960static void idetape_create_load_unload_cmd(ide_drive_t *drive, idetape_pc_t *pc, 1921static void idetape_create_load_unload_cmd(ide_drive_t *drive,
1961 int cmd) 1922 struct ide_atapi_pc *pc, int cmd)
1962{ 1923{
1963 idetape_init_pc(pc); 1924 idetape_init_pc(pc);
1964 pc->c[0] = START_STOP; 1925 pc->c[0] = START_STOP;
1965 pc->c[4] = cmd; 1926 pc->c[4] = cmd;
1966 set_bit(PC_WAIT_FOR_DSC, &pc->flags); 1927 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
1967 pc->callback = &idetape_pc_callback; 1928 pc->idetape_callback = &idetape_pc_callback;
1968} 1929}
1969 1930
1970static int idetape_wait_ready(ide_drive_t *drive, unsigned long timeout) 1931static int idetape_wait_ready(ide_drive_t *drive, unsigned long timeout)
1971{ 1932{
1972 idetape_tape_t *tape = drive->driver_data; 1933 idetape_tape_t *tape = drive->driver_data;
1973 idetape_pc_t pc; 1934 struct ide_atapi_pc pc;
1974 int load_attempted = 0; 1935 int load_attempted = 0;
1975 1936
1976 /* Wait for the tape to become ready */ 1937 /* Wait for the tape to become ready */
1977 set_bit(IDETAPE_MEDIUM_PRESENT, &tape->flags); 1938 set_bit(IDETAPE_FLAG_MEDIUM_PRESENT, &tape->flags);
1978 timeout += jiffies; 1939 timeout += jiffies;
1979 while (time_before(jiffies, timeout)) { 1940 while (time_before(jiffies, timeout)) {
1980 idetape_create_test_unit_ready_cmd(&pc); 1941 idetape_create_test_unit_ready_cmd(&pc);
@@ -1998,14 +1959,14 @@ static int idetape_wait_ready(ide_drive_t *drive, unsigned long timeout)
1998 return -EIO; 1959 return -EIO;
1999} 1960}
2000 1961
2001static int idetape_queue_pc_tail(ide_drive_t *drive, idetape_pc_t *pc) 1962static int idetape_queue_pc_tail(ide_drive_t *drive, struct ide_atapi_pc *pc)
2002{ 1963{
2003 return __idetape_queue_pc_tail(drive, pc); 1964 return __idetape_queue_pc_tail(drive, pc);
2004} 1965}
2005 1966
2006static int idetape_flush_tape_buffers(ide_drive_t *drive) 1967static int idetape_flush_tape_buffers(ide_drive_t *drive)
2007{ 1968{
2008 idetape_pc_t pc; 1969 struct ide_atapi_pc pc;
2009 int rc; 1970 int rc;
2010 1971
2011 idetape_create_write_filemark_cmd(drive, &pc, 0); 1972 idetape_create_write_filemark_cmd(drive, &pc, 0);
@@ -2016,18 +1977,18 @@ static int idetape_flush_tape_buffers(ide_drive_t *drive)
2016 return 0; 1977 return 0;
2017} 1978}
2018 1979
2019static void idetape_create_read_position_cmd(idetape_pc_t *pc) 1980static void idetape_create_read_position_cmd(struct ide_atapi_pc *pc)
2020{ 1981{
2021 idetape_init_pc(pc); 1982 idetape_init_pc(pc);
2022 pc->c[0] = READ_POSITION; 1983 pc->c[0] = READ_POSITION;
2023 pc->request_transfer = 20; 1984 pc->req_xfer = 20;
2024 pc->callback = &idetape_read_position_callback; 1985 pc->idetape_callback = &idetape_read_position_callback;
2025} 1986}
2026 1987
2027static int idetape_read_position(ide_drive_t *drive) 1988static int idetape_read_position(ide_drive_t *drive)
2028{ 1989{
2029 idetape_tape_t *tape = drive->driver_data; 1990 idetape_tape_t *tape = drive->driver_data;
2030 idetape_pc_t pc; 1991 struct ide_atapi_pc pc;
2031 int position; 1992 int position;
2032 1993
2033 debug_log(DBG_PROCS, "Enter %s\n", __func__); 1994 debug_log(DBG_PROCS, "Enter %s\n", __func__);
@@ -2039,7 +2000,8 @@ static int idetape_read_position(ide_drive_t *drive)
2039 return position; 2000 return position;
2040} 2001}
2041 2002
2042static void idetape_create_locate_cmd(ide_drive_t *drive, idetape_pc_t *pc, 2003static void idetape_create_locate_cmd(ide_drive_t *drive,
2004 struct ide_atapi_pc *pc,
2043 unsigned int block, u8 partition, int skip) 2005 unsigned int block, u8 partition, int skip)
2044{ 2006{
2045 idetape_init_pc(pc); 2007 idetape_init_pc(pc);
@@ -2047,12 +2009,12 @@ static void idetape_create_locate_cmd(ide_drive_t *drive, idetape_pc_t *pc,
2047 pc->c[1] = 2; 2009 pc->c[1] = 2;
2048 put_unaligned(cpu_to_be32(block), (unsigned int *) &pc->c[3]); 2010 put_unaligned(cpu_to_be32(block), (unsigned int *) &pc->c[3]);
2049 pc->c[8] = partition; 2011 pc->c[8] = partition;
2050 set_bit(PC_WAIT_FOR_DSC, &pc->flags); 2012 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
2051 pc->callback = &idetape_pc_callback; 2013 pc->idetape_callback = &idetape_pc_callback;
2052} 2014}
2053 2015
2054static int idetape_create_prevent_cmd(ide_drive_t *drive, idetape_pc_t *pc, 2016static int idetape_create_prevent_cmd(ide_drive_t *drive,
2055 int prevent) 2017 struct ide_atapi_pc *pc, int prevent)
2056{ 2018{
2057 idetape_tape_t *tape = drive->driver_data; 2019 idetape_tape_t *tape = drive->driver_data;
2058 2020
@@ -2063,7 +2025,7 @@ static int idetape_create_prevent_cmd(ide_drive_t *drive, idetape_pc_t *pc,
2063 idetape_init_pc(pc); 2025 idetape_init_pc(pc);
2064 pc->c[0] = ALLOW_MEDIUM_REMOVAL; 2026 pc->c[0] = ALLOW_MEDIUM_REMOVAL;
2065 pc->c[4] = prevent; 2027 pc->c[4] = prevent;
2066 pc->callback = &idetape_pc_callback; 2028 pc->idetape_callback = &idetape_pc_callback;
2067 return 1; 2029 return 1;
2068} 2030}
2069 2031
@@ -2078,7 +2040,7 @@ static int __idetape_discard_read_pipeline(ide_drive_t *drive)
2078 2040
2079 /* Remove merge stage. */ 2041 /* Remove merge stage. */
2080 cnt = tape->merge_stage_size / tape->blk_size; 2042 cnt = tape->merge_stage_size / tape->blk_size;
2081 if (test_and_clear_bit(IDETAPE_FILEMARK, &tape->flags)) 2043 if (test_and_clear_bit(IDETAPE_FLAG_FILEMARK, &tape->flags))
2082 ++cnt; /* Filemarks count as 1 sector */ 2044 ++cnt; /* Filemarks count as 1 sector */
2083 tape->merge_stage_size = 0; 2045 tape->merge_stage_size = 0;
2084 if (tape->merge_stage != NULL) { 2046 if (tape->merge_stage != NULL) {
@@ -2087,7 +2049,7 @@ static int __idetape_discard_read_pipeline(ide_drive_t *drive)
2087 } 2049 }
2088 2050
2089 /* Clear pipeline flags. */ 2051 /* Clear pipeline flags. */
2090 clear_bit(IDETAPE_PIPELINE_ERROR, &tape->flags); 2052 clear_bit(IDETAPE_FLAG_PIPELINE_ERR, &tape->flags);
2091 tape->chrdev_dir = IDETAPE_DIR_NONE; 2053 tape->chrdev_dir = IDETAPE_DIR_NONE;
2092 2054
2093 /* Remove pipeline stages. */ 2055 /* Remove pipeline stages. */
@@ -2124,7 +2086,7 @@ static int idetape_position_tape(ide_drive_t *drive, unsigned int block,
2124{ 2086{
2125 idetape_tape_t *tape = drive->driver_data; 2087 idetape_tape_t *tape = drive->driver_data;
2126 int retval; 2088 int retval;
2127 idetape_pc_t pc; 2089 struct ide_atapi_pc pc;
2128 2090
2129 if (tape->chrdev_dir == IDETAPE_DIR_READ) 2091 if (tape->chrdev_dir == IDETAPE_DIR_READ)
2130 __idetape_discard_read_pipeline(drive); 2092 __idetape_discard_read_pipeline(drive);
@@ -2201,46 +2163,47 @@ static void idetape_plug_pipeline(ide_drive_t *drive)
2201 if (tape->next_stage == NULL) 2163 if (tape->next_stage == NULL)
2202 return; 2164 return;
2203 if (!idetape_pipeline_active(tape)) { 2165 if (!idetape_pipeline_active(tape)) {
2204 set_bit(IDETAPE_PIPELINE_ACTIVE, &tape->flags); 2166 set_bit(IDETAPE_FLAG_PIPELINE_ACTIVE, &tape->flags);
2205 idetape_activate_next_stage(drive); 2167 idetape_activate_next_stage(drive);
2206 (void) ide_do_drive_cmd(drive, tape->active_data_rq, ide_end); 2168 (void) ide_do_drive_cmd(drive, tape->active_data_rq, ide_end);
2207 } 2169 }
2208} 2170}
2209 2171
2210static void idetape_create_inquiry_cmd(idetape_pc_t *pc) 2172static void idetape_create_inquiry_cmd(struct ide_atapi_pc *pc)
2211{ 2173{
2212 idetape_init_pc(pc); 2174 idetape_init_pc(pc);
2213 pc->c[0] = INQUIRY; 2175 pc->c[0] = INQUIRY;
2214 pc->c[4] = 254; 2176 pc->c[4] = 254;
2215 pc->request_transfer = 254; 2177 pc->req_xfer = 254;
2216 pc->callback = &idetape_pc_callback; 2178 pc->idetape_callback = &idetape_pc_callback;
2217} 2179}
2218 2180
2219static void idetape_create_rewind_cmd(ide_drive_t *drive, idetape_pc_t *pc) 2181static void idetape_create_rewind_cmd(ide_drive_t *drive,
2182 struct ide_atapi_pc *pc)
2220{ 2183{
2221 idetape_init_pc(pc); 2184 idetape_init_pc(pc);
2222 pc->c[0] = REZERO_UNIT; 2185 pc->c[0] = REZERO_UNIT;
2223 set_bit(PC_WAIT_FOR_DSC, &pc->flags); 2186 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
2224 pc->callback = &idetape_pc_callback; 2187 pc->idetape_callback = &idetape_pc_callback;
2225} 2188}
2226 2189
2227static void idetape_create_erase_cmd(idetape_pc_t *pc) 2190static void idetape_create_erase_cmd(struct ide_atapi_pc *pc)
2228{ 2191{
2229 idetape_init_pc(pc); 2192 idetape_init_pc(pc);
2230 pc->c[0] = ERASE; 2193 pc->c[0] = ERASE;
2231 pc->c[1] = 1; 2194 pc->c[1] = 1;
2232 set_bit(PC_WAIT_FOR_DSC, &pc->flags); 2195 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
2233 pc->callback = &idetape_pc_callback; 2196 pc->idetape_callback = &idetape_pc_callback;
2234} 2197}
2235 2198
2236static void idetape_create_space_cmd(idetape_pc_t *pc, int count, u8 cmd) 2199static void idetape_create_space_cmd(struct ide_atapi_pc *pc, int count, u8 cmd)
2237{ 2200{
2238 idetape_init_pc(pc); 2201 idetape_init_pc(pc);
2239 pc->c[0] = SPACE; 2202 pc->c[0] = SPACE;
2240 put_unaligned(cpu_to_be32(count), (unsigned int *) &pc->c[1]); 2203 put_unaligned(cpu_to_be32(count), (unsigned int *) &pc->c[1]);
2241 pc->c[1] = cmd; 2204 pc->c[1] = cmd;
2242 set_bit(PC_WAIT_FOR_DSC, &pc->flags); 2205 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
2243 pc->callback = &idetape_pc_callback; 2206 pc->idetape_callback = &idetape_pc_callback;
2244} 2207}
2245 2208
2246static void idetape_wait_first_stage(ide_drive_t *drive) 2209static void idetape_wait_first_stage(ide_drive_t *drive)
@@ -2326,7 +2289,7 @@ static int idetape_add_chrdev_write_request(ide_drive_t *drive, int blocks)
2326 idetape_plug_pipeline(drive); 2289 idetape_plug_pipeline(drive);
2327 } 2290 }
2328 } 2291 }
2329 if (test_and_clear_bit(IDETAPE_PIPELINE_ERROR, &tape->flags)) 2292 if (test_and_clear_bit(IDETAPE_FLAG_PIPELINE_ERR, &tape->flags))
2330 /* Return a deferred error */ 2293 /* Return a deferred error */
2331 return -EIO; 2294 return -EIO;
2332 return blocks; 2295 return blocks;
@@ -2402,7 +2365,7 @@ static void idetape_empty_write_pipeline(ide_drive_t *drive)
2402 __idetape_kfree_stage(tape->merge_stage); 2365 __idetape_kfree_stage(tape->merge_stage);
2403 tape->merge_stage = NULL; 2366 tape->merge_stage = NULL;
2404 } 2367 }
2405 clear_bit(IDETAPE_PIPELINE_ERROR, &tape->flags); 2368 clear_bit(IDETAPE_FLAG_PIPELINE_ERR, &tape->flags);
2406 tape->chrdev_dir = IDETAPE_DIR_NONE; 2369 tape->chrdev_dir = IDETAPE_DIR_NONE;
2407 2370
2408 /* 2371 /*
@@ -2490,7 +2453,7 @@ static int idetape_init_read(ide_drive_t *drive, int max_stages)
2490 rq.sector = tape->first_frame; 2453 rq.sector = tape->first_frame;
2491 rq.nr_sectors = blocks; 2454 rq.nr_sectors = blocks;
2492 rq.current_nr_sectors = blocks; 2455 rq.current_nr_sectors = blocks;
2493 if (!test_bit(IDETAPE_PIPELINE_ERROR, &tape->flags) && 2456 if (!test_bit(IDETAPE_FLAG_PIPELINE_ERR, &tape->flags) &&
2494 tape->nr_stages < max_stages) { 2457 tape->nr_stages < max_stages) {
2495 new_stage = idetape_kmalloc_stage(tape); 2458 new_stage = idetape_kmalloc_stage(tape);
2496 while (new_stage != NULL) { 2459 while (new_stage != NULL) {
@@ -2527,13 +2490,13 @@ static int idetape_add_chrdev_read_request(ide_drive_t *drive, int blocks)
2527 debug_log(DBG_PROCS, "Enter %s, %d blocks\n", __func__, blocks); 2490 debug_log(DBG_PROCS, "Enter %s, %d blocks\n", __func__, blocks);
2528 2491
2529 /* If we are at a filemark, return a read length of 0 */ 2492 /* If we are at a filemark, return a read length of 0 */
2530 if (test_bit(IDETAPE_FILEMARK, &tape->flags)) 2493 if (test_bit(IDETAPE_FLAG_FILEMARK, &tape->flags))
2531 return 0; 2494 return 0;
2532 2495
2533 /* Wait for the next block to reach the head of the pipeline. */ 2496 /* Wait for the next block to reach the head of the pipeline. */
2534 idetape_init_read(drive, tape->max_stages); 2497 idetape_init_read(drive, tape->max_stages);
2535 if (tape->first_stage == NULL) { 2498 if (tape->first_stage == NULL) {
2536 if (test_bit(IDETAPE_PIPELINE_ERROR, &tape->flags)) 2499 if (test_bit(IDETAPE_FLAG_PIPELINE_ERR, &tape->flags))
2537 return 0; 2500 return 0;
2538 return idetape_queue_rw_tail(drive, REQ_IDETAPE_READ, blocks, 2501 return idetape_queue_rw_tail(drive, REQ_IDETAPE_READ, blocks,
2539 tape->merge_stage->bh); 2502 tape->merge_stage->bh);
@@ -2550,7 +2513,7 @@ static int idetape_add_chrdev_read_request(ide_drive_t *drive, int blocks)
2550 else { 2513 else {
2551 idetape_switch_buffers(tape, tape->first_stage); 2514 idetape_switch_buffers(tape, tape->first_stage);
2552 if (rq_ptr->errors == IDETAPE_ERROR_FILEMARK) 2515 if (rq_ptr->errors == IDETAPE_ERROR_FILEMARK)
2553 set_bit(IDETAPE_FILEMARK, &tape->flags); 2516 set_bit(IDETAPE_FLAG_FILEMARK, &tape->flags);
2554 spin_lock_irqsave(&tape->lock, flags); 2517 spin_lock_irqsave(&tape->lock, flags);
2555 idetape_remove_stage_head(drive); 2518 idetape_remove_stage_head(drive);
2556 spin_unlock_irqrestore(&tape->lock, flags); 2519 spin_unlock_irqrestore(&tape->lock, flags);
@@ -2618,7 +2581,7 @@ static int idetape_pipeline_size(ide_drive_t *drive)
2618static int idetape_rewind_tape(ide_drive_t *drive) 2581static int idetape_rewind_tape(ide_drive_t *drive)
2619{ 2582{
2620 int retval; 2583 int retval;
2621 idetape_pc_t pc; 2584 struct ide_atapi_pc pc;
2622 idetape_tape_t *tape; 2585 idetape_tape_t *tape;
2623 tape = drive->driver_data; 2586 tape = drive->driver_data;
2624 2587
@@ -2681,7 +2644,7 @@ static int idetape_space_over_filemarks(ide_drive_t *drive, short mt_op,
2681 int mt_count) 2644 int mt_count)
2682{ 2645{
2683 idetape_tape_t *tape = drive->driver_data; 2646 idetape_tape_t *tape = drive->driver_data;
2684 idetape_pc_t pc; 2647 struct ide_atapi_pc pc;
2685 unsigned long flags; 2648 unsigned long flags;
2686 int retval, count = 0; 2649 int retval, count = 0;
2687 int sprev = !!(tape->caps[4] & 0x20); 2650 int sprev = !!(tape->caps[4] & 0x20);
@@ -2697,12 +2660,13 @@ static int idetape_space_over_filemarks(ide_drive_t *drive, short mt_op,
2697 if (tape->chrdev_dir == IDETAPE_DIR_READ) { 2660 if (tape->chrdev_dir == IDETAPE_DIR_READ) {
2698 /* its a read-ahead buffer, scan it for crossed filemarks. */ 2661 /* its a read-ahead buffer, scan it for crossed filemarks. */
2699 tape->merge_stage_size = 0; 2662 tape->merge_stage_size = 0;
2700 if (test_and_clear_bit(IDETAPE_FILEMARK, &tape->flags)) 2663 if (test_and_clear_bit(IDETAPE_FLAG_FILEMARK, &tape->flags))
2701 ++count; 2664 ++count;
2702 while (tape->first_stage != NULL) { 2665 while (tape->first_stage != NULL) {
2703 if (count == mt_count) { 2666 if (count == mt_count) {
2704 if (mt_op == MTFSFM) 2667 if (mt_op == MTFSFM)
2705 set_bit(IDETAPE_FILEMARK, &tape->flags); 2668 set_bit(IDETAPE_FLAG_FILEMARK,
2669 &tape->flags);
2706 return 0; 2670 return 0;
2707 } 2671 }
2708 spin_lock_irqsave(&tape->lock, flags); 2672 spin_lock_irqsave(&tape->lock, flags);
@@ -2786,7 +2750,7 @@ static ssize_t idetape_chrdev_read(struct file *file, char __user *buf,
2786 debug_log(DBG_CHRDEV, "Enter %s, count %Zd\n", __func__, count); 2750 debug_log(DBG_CHRDEV, "Enter %s, count %Zd\n", __func__, count);
2787 2751
2788 if (tape->chrdev_dir != IDETAPE_DIR_READ) { 2752 if (tape->chrdev_dir != IDETAPE_DIR_READ) {
2789 if (test_bit(IDETAPE_DETECT_BS, &tape->flags)) 2753 if (test_bit(IDETAPE_FLAG_DETECT_BS, &tape->flags))
2790 if (count > tape->blk_size && 2754 if (count > tape->blk_size &&
2791 (count % tape->blk_size) == 0) 2755 (count % tape->blk_size) == 0)
2792 tape->user_bs_factor = count / tape->blk_size; 2756 tape->user_bs_factor = count / tape->blk_size;
@@ -2829,7 +2793,7 @@ static ssize_t idetape_chrdev_read(struct file *file, char __user *buf,
2829 tape->merge_stage_size = bytes_read-temp; 2793 tape->merge_stage_size = bytes_read-temp;
2830 } 2794 }
2831finish: 2795finish:
2832 if (!actually_read && test_bit(IDETAPE_FILEMARK, &tape->flags)) { 2796 if (!actually_read && test_bit(IDETAPE_FLAG_FILEMARK, &tape->flags)) {
2833 debug_log(DBG_SENSE, "%s: spacing over filemark\n", tape->name); 2797 debug_log(DBG_SENSE, "%s: spacing over filemark\n", tape->name);
2834 2798
2835 idetape_space_over_filemarks(drive, MTFSF, 1); 2799 idetape_space_over_filemarks(drive, MTFSF, 1);
@@ -2938,7 +2902,7 @@ static ssize_t idetape_chrdev_write(struct file *file, const char __user *buf,
2938 2902
2939static int idetape_write_filemark(ide_drive_t *drive) 2903static int idetape_write_filemark(ide_drive_t *drive)
2940{ 2904{
2941 idetape_pc_t pc; 2905 struct ide_atapi_pc pc;
2942 2906
2943 /* Write a filemark */ 2907 /* Write a filemark */
2944 idetape_create_write_filemark_cmd(drive, &pc, 1); 2908 idetape_create_write_filemark_cmd(drive, &pc, 1);
@@ -2966,7 +2930,7 @@ static int idetape_write_filemark(ide_drive_t *drive)
2966static int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count) 2930static int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count)
2967{ 2931{
2968 idetape_tape_t *tape = drive->driver_data; 2932 idetape_tape_t *tape = drive->driver_data;
2969 idetape_pc_t pc; 2933 struct ide_atapi_pc pc;
2970 int i, retval; 2934 int i, retval;
2971 2935
2972 debug_log(DBG_ERR, "Handling MTIOCTOP ioctl: mt_op=%d, mt_count=%d\n", 2936 debug_log(DBG_ERR, "Handling MTIOCTOP ioctl: mt_op=%d, mt_count=%d\n",
@@ -3022,7 +2986,7 @@ static int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count)
3022 !IDETAPE_LU_LOAD_MASK); 2986 !IDETAPE_LU_LOAD_MASK);
3023 retval = idetape_queue_pc_tail(drive, &pc); 2987 retval = idetape_queue_pc_tail(drive, &pc);
3024 if (!retval) 2988 if (!retval)
3025 clear_bit(IDETAPE_MEDIUM_PRESENT, &tape->flags); 2989 clear_bit(IDETAPE_FLAG_MEDIUM_PRESENT, &tape->flags);
3026 return retval; 2990 return retval;
3027 case MTNOP: 2991 case MTNOP:
3028 idetape_discard_read_pipeline(drive, 0); 2992 idetape_discard_read_pipeline(drive, 0);
@@ -3045,9 +3009,9 @@ static int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count)
3045 mt_count % tape->blk_size) 3009 mt_count % tape->blk_size)
3046 return -EIO; 3010 return -EIO;
3047 tape->user_bs_factor = mt_count / tape->blk_size; 3011 tape->user_bs_factor = mt_count / tape->blk_size;
3048 clear_bit(IDETAPE_DETECT_BS, &tape->flags); 3012 clear_bit(IDETAPE_FLAG_DETECT_BS, &tape->flags);
3049 } else 3013 } else
3050 set_bit(IDETAPE_DETECT_BS, &tape->flags); 3014 set_bit(IDETAPE_FLAG_DETECT_BS, &tape->flags);
3051 return 0; 3015 return 0;
3052 case MTSEEK: 3016 case MTSEEK:
3053 idetape_discard_read_pipeline(drive, 0); 3017 idetape_discard_read_pipeline(drive, 0);
@@ -3149,7 +3113,7 @@ static int idetape_chrdev_ioctl(struct inode *inode, struct file *file,
3149static void ide_tape_get_bsize_from_bdesc(ide_drive_t *drive) 3113static void ide_tape_get_bsize_from_bdesc(ide_drive_t *drive)
3150{ 3114{
3151 idetape_tape_t *tape = drive->driver_data; 3115 idetape_tape_t *tape = drive->driver_data;
3152 idetape_pc_t pc; 3116 struct ide_atapi_pc pc;
3153 3117
3154 idetape_create_mode_sense_cmd(&pc, IDETAPE_BLOCK_DESCRIPTOR); 3118 idetape_create_mode_sense_cmd(&pc, IDETAPE_BLOCK_DESCRIPTOR);
3155 if (idetape_queue_pc_tail(drive, &pc)) { 3119 if (idetape_queue_pc_tail(drive, &pc)) {
@@ -3161,10 +3125,10 @@ static void ide_tape_get_bsize_from_bdesc(ide_drive_t *drive)
3161 } 3125 }
3162 return; 3126 return;
3163 } 3127 }
3164 tape->blk_size = (pc.buffer[4 + 5] << 16) + 3128 tape->blk_size = (pc.buf[4 + 5] << 16) +
3165 (pc.buffer[4 + 6] << 8) + 3129 (pc.buf[4 + 6] << 8) +
3166 pc.buffer[4 + 7]; 3130 pc.buf[4 + 7];
3167 tape->drv_write_prot = (pc.buffer[2] & 0x80) >> 7; 3131 tape->drv_write_prot = (pc.buf[2] & 0x80) >> 7;
3168} 3132}
3169 3133
3170static int idetape_chrdev_open(struct inode *inode, struct file *filp) 3134static int idetape_chrdev_open(struct inode *inode, struct file *filp)
@@ -3172,7 +3136,7 @@ static int idetape_chrdev_open(struct inode *inode, struct file *filp)
3172 unsigned int minor = iminor(inode), i = minor & ~0xc0; 3136 unsigned int minor = iminor(inode), i = minor & ~0xc0;
3173 ide_drive_t *drive; 3137 ide_drive_t *drive;
3174 idetape_tape_t *tape; 3138 idetape_tape_t *tape;
3175 idetape_pc_t pc; 3139 struct ide_atapi_pc pc;
3176 int retval; 3140 int retval;
3177 3141
3178 if (i >= MAX_HWIFS * MAX_DRIVES) 3142 if (i >= MAX_HWIFS * MAX_DRIVES)
@@ -3195,24 +3159,24 @@ static int idetape_chrdev_open(struct inode *inode, struct file *filp)
3195 3159
3196 filp->private_data = tape; 3160 filp->private_data = tape;
3197 3161
3198 if (test_and_set_bit(IDETAPE_BUSY, &tape->flags)) { 3162 if (test_and_set_bit(IDETAPE_FLAG_BUSY, &tape->flags)) {
3199 retval = -EBUSY; 3163 retval = -EBUSY;
3200 goto out_put_tape; 3164 goto out_put_tape;
3201 } 3165 }
3202 3166
3203 retval = idetape_wait_ready(drive, 60 * HZ); 3167 retval = idetape_wait_ready(drive, 60 * HZ);
3204 if (retval) { 3168 if (retval) {
3205 clear_bit(IDETAPE_BUSY, &tape->flags); 3169 clear_bit(IDETAPE_FLAG_BUSY, &tape->flags);
3206 printk(KERN_ERR "ide-tape: %s: drive not ready\n", tape->name); 3170 printk(KERN_ERR "ide-tape: %s: drive not ready\n", tape->name);
3207 goto out_put_tape; 3171 goto out_put_tape;
3208 } 3172 }
3209 3173
3210 idetape_read_position(drive); 3174 idetape_read_position(drive);
3211 if (!test_bit(IDETAPE_ADDRESS_VALID, &tape->flags)) 3175 if (!test_bit(IDETAPE_FLAG_ADDRESS_VALID, &tape->flags))
3212 (void)idetape_rewind_tape(drive); 3176 (void)idetape_rewind_tape(drive);
3213 3177
3214 if (tape->chrdev_dir != IDETAPE_DIR_READ) 3178 if (tape->chrdev_dir != IDETAPE_DIR_READ)
3215 clear_bit(IDETAPE_PIPELINE_ERROR, &tape->flags); 3179 clear_bit(IDETAPE_FLAG_PIPELINE_ERR, &tape->flags);
3216 3180
3217 /* Read block size and write protect status from drive. */ 3181 /* Read block size and write protect status from drive. */
3218 ide_tape_get_bsize_from_bdesc(drive); 3182 ide_tape_get_bsize_from_bdesc(drive);
@@ -3227,7 +3191,7 @@ static int idetape_chrdev_open(struct inode *inode, struct file *filp)
3227 if (tape->write_prot) { 3191 if (tape->write_prot) {
3228 if ((filp->f_flags & O_ACCMODE) == O_WRONLY || 3192 if ((filp->f_flags & O_ACCMODE) == O_WRONLY ||
3229 (filp->f_flags & O_ACCMODE) == O_RDWR) { 3193 (filp->f_flags & O_ACCMODE) == O_RDWR) {
3230 clear_bit(IDETAPE_BUSY, &tape->flags); 3194 clear_bit(IDETAPE_FLAG_BUSY, &tape->flags);
3231 retval = -EROFS; 3195 retval = -EROFS;
3232 goto out_put_tape; 3196 goto out_put_tape;
3233 } 3197 }
@@ -3272,7 +3236,7 @@ static int idetape_chrdev_release(struct inode *inode, struct file *filp)
3272{ 3236{
3273 struct ide_tape_obj *tape = ide_tape_f(filp); 3237 struct ide_tape_obj *tape = ide_tape_f(filp);
3274 ide_drive_t *drive = tape->drive; 3238 ide_drive_t *drive = tape->drive;
3275 idetape_pc_t pc; 3239 struct ide_atapi_pc pc;
3276 unsigned int minor = iminor(inode); 3240 unsigned int minor = iminor(inode);
3277 3241
3278 lock_kernel(); 3242 lock_kernel();
@@ -3292,7 +3256,7 @@ static int idetape_chrdev_release(struct inode *inode, struct file *filp)
3292 __idetape_kfree_stage(tape->cache_stage); 3256 __idetape_kfree_stage(tape->cache_stage);
3293 tape->cache_stage = NULL; 3257 tape->cache_stage = NULL;
3294 } 3258 }
3295 if (minor < 128 && test_bit(IDETAPE_MEDIUM_PRESENT, &tape->flags)) 3259 if (minor < 128 && test_bit(IDETAPE_FLAG_MEDIUM_PRESENT, &tape->flags))
3296 (void) idetape_rewind_tape(drive); 3260 (void) idetape_rewind_tape(drive);
3297 if (tape->chrdev_dir == IDETAPE_DIR_NONE) { 3261 if (tape->chrdev_dir == IDETAPE_DIR_NONE) {
3298 if (tape->door_locked == DOOR_LOCKED) { 3262 if (tape->door_locked == DOOR_LOCKED) {
@@ -3302,7 +3266,7 @@ static int idetape_chrdev_release(struct inode *inode, struct file *filp)
3302 } 3266 }
3303 } 3267 }
3304 } 3268 }
3305 clear_bit(IDETAPE_BUSY, &tape->flags); 3269 clear_bit(IDETAPE_FLAG_BUSY, &tape->flags);
3306 ide_tape_put(tape); 3270 ide_tape_put(tape);
3307 unlock_kernel(); 3271 unlock_kernel();
3308 return 0; 3272 return 0;
@@ -3350,7 +3314,7 @@ static int idetape_identify_device(ide_drive_t *drive)
3350static void idetape_get_inquiry_results(ide_drive_t *drive) 3314static void idetape_get_inquiry_results(ide_drive_t *drive)
3351{ 3315{
3352 idetape_tape_t *tape = drive->driver_data; 3316 idetape_tape_t *tape = drive->driver_data;
3353 idetape_pc_t pc; 3317 struct ide_atapi_pc pc;
3354 char fw_rev[6], vendor_id[10], product_id[18]; 3318 char fw_rev[6], vendor_id[10], product_id[18];
3355 3319
3356 idetape_create_inquiry_cmd(&pc); 3320 idetape_create_inquiry_cmd(&pc);
@@ -3359,9 +3323,9 @@ static void idetape_get_inquiry_results(ide_drive_t *drive)
3359 tape->name); 3323 tape->name);
3360 return; 3324 return;
3361 } 3325 }
3362 memcpy(vendor_id, &pc.buffer[8], 8); 3326 memcpy(vendor_id, &pc.buf[8], 8);
3363 memcpy(product_id, &pc.buffer[16], 16); 3327 memcpy(product_id, &pc.buf[16], 16);
3364 memcpy(fw_rev, &pc.buffer[32], 4); 3328 memcpy(fw_rev, &pc.buf[32], 4);
3365 3329
3366 ide_fixstring(vendor_id, 10, 0); 3330 ide_fixstring(vendor_id, 10, 0);
3367 ide_fixstring(product_id, 18, 0); 3331 ide_fixstring(product_id, 18, 0);
@@ -3378,7 +3342,7 @@ static void idetape_get_inquiry_results(ide_drive_t *drive)
3378static void idetape_get_mode_sense_results(ide_drive_t *drive) 3342static void idetape_get_mode_sense_results(ide_drive_t *drive)
3379{ 3343{
3380 idetape_tape_t *tape = drive->driver_data; 3344 idetape_tape_t *tape = drive->driver_data;
3381 idetape_pc_t pc; 3345 struct ide_atapi_pc pc;
3382 u8 *caps; 3346 u8 *caps;
3383 u8 speed, max_speed; 3347 u8 speed, max_speed;
3384 3348
@@ -3392,7 +3356,7 @@ static void idetape_get_mode_sense_results(ide_drive_t *drive)
3392 put_unaligned(6*52, (u16 *)&tape->caps[16]); 3356 put_unaligned(6*52, (u16 *)&tape->caps[16]);
3393 return; 3357 return;
3394 } 3358 }
3395 caps = pc.buffer + 4 + pc.buffer[3]; 3359 caps = pc.buf + 4 + pc.buf[3];
3396 3360
3397 /* convert to host order and save for later use */ 3361 /* convert to host order and save for later use */
3398 speed = be16_to_cpu(*(u16 *)&caps[14]); 3362 speed = be16_to_cpu(*(u16 *)&caps[14]);
@@ -3506,7 +3470,7 @@ static void idetape_setup(ide_drive_t *drive, idetape_tape_t *tape, int minor)
3506 3470
3507 /* Command packet DRQ type */ 3471 /* Command packet DRQ type */
3508 if (((gcw[0] & 0x60) >> 5) == 1) 3472 if (((gcw[0] & 0x60) >> 5) == 1)
3509 set_bit(IDETAPE_DRQ_INTERRUPT, &tape->flags); 3473 set_bit(IDETAPE_FLAG_DRQ_INTERRUPT, &tape->flags);
3510 3474
3511 tape->min_pipeline = 10; 3475 tape->min_pipeline = 10;
3512 tape->max_pipeline = 10; 3476 tape->max_pipeline = 10;