]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - drivers/ide/ide-tape.c
ide-tape: mv tape->stage_size tape->buffer_size
[linux-2.6-omap-h63xx.git] / drivers / ide / ide-tape.c
1 /*
2  * IDE ATAPI streaming tape driver.
3  *
4  * Copyright (C) 1995-1999  Gadi Oxman <gadio@netvision.net.il>
5  * Copyright (C) 2003-2005  Bartlomiej Zolnierkiewicz
6  *
7  * This driver was constructed as a student project in the software laboratory
8  * of the faculty of electrical engineering in the Technion - Israel's
9  * Institute Of Technology, with the guide of Avner Lottem and Dr. Ilana David.
10  *
11  * It is hereby placed under the terms of the GNU general public license.
12  * (See linux/COPYING).
13  *
14  * For a historical changelog see
15  * Documentation/ide/ChangeLog.ide-tape.1995-2002
16  */
17
18 #define IDETAPE_VERSION "1.20"
19
20 #include <linux/module.h>
21 #include <linux/types.h>
22 #include <linux/string.h>
23 #include <linux/kernel.h>
24 #include <linux/delay.h>
25 #include <linux/timer.h>
26 #include <linux/mm.h>
27 #include <linux/interrupt.h>
28 #include <linux/jiffies.h>
29 #include <linux/major.h>
30 #include <linux/errno.h>
31 #include <linux/genhd.h>
32 #include <linux/slab.h>
33 #include <linux/pci.h>
34 #include <linux/ide.h>
35 #include <linux/smp_lock.h>
36 #include <linux/completion.h>
37 #include <linux/bitops.h>
38 #include <linux/mutex.h>
39 #include <scsi/scsi.h>
40
41 #include <asm/byteorder.h>
42 #include <linux/irq.h>
43 #include <linux/uaccess.h>
44 #include <linux/io.h>
45 #include <asm/unaligned.h>
46 #include <linux/mtio.h>
47
48 enum {
49         /* output errors only */
50         DBG_ERR =               (1 << 0),
51         /* output all sense key/asc */
52         DBG_SENSE =             (1 << 1),
53         /* info regarding all chrdev-related procedures */
54         DBG_CHRDEV =            (1 << 2),
55         /* all remaining procedures */
56         DBG_PROCS =             (1 << 3),
57         /* buffer alloc info (pc_stack & rq_stack) */
58         DBG_PCRQ_STACK =        (1 << 4),
59 };
60
61 /* define to see debug info */
62 #define IDETAPE_DEBUG_LOG               0
63
64 #if IDETAPE_DEBUG_LOG
65 #define debug_log(lvl, fmt, args...)                    \
66 {                                                       \
67         if (tape->debug_mask & lvl)                     \
68         printk(KERN_INFO "ide-tape: " fmt, ## args);    \
69 }
70 #else
71 #define debug_log(lvl, fmt, args...) do {} while (0)
72 #endif
73
74 /**************************** Tunable parameters *****************************/
75 /*
76  * After each failed packet command we issue a request sense command and retry
77  * the packet command IDETAPE_MAX_PC_RETRIES times.
78  *
79  * Setting IDETAPE_MAX_PC_RETRIES to 0 will disable retries.
80  */
81 #define IDETAPE_MAX_PC_RETRIES          3
82
83 /*
84  * With each packet command, we allocate a buffer of IDETAPE_PC_BUFFER_SIZE
85  * bytes. This is used for several packet commands (Not for READ/WRITE commands)
86  */
87 #define IDETAPE_PC_BUFFER_SIZE          256
88
89 /*
90  *      In various places in the driver, we need to allocate storage
91  *      for packet commands and requests, which will remain valid while
92  *      we leave the driver to wait for an interrupt or a timeout event.
93  */
94 #define IDETAPE_PC_STACK                (10 + IDETAPE_MAX_PC_RETRIES)
95
96 /*
97  * Some drives (for example, Seagate STT3401A Travan) require a very long
98  * timeout, because they don't return an interrupt or clear their busy bit
99  * until after the command completes (even retension commands).
100  */
101 #define IDETAPE_WAIT_CMD                (900*HZ)
102
103 /*
104  * The following parameter is used to select the point in the internal tape fifo
105  * in which we will start to refill the buffer. Decreasing the following
106  * parameter will improve the system's latency and interactive response, while
107  * using a high value might improve system throughput.
108  */
109 #define IDETAPE_FIFO_THRESHOLD          2
110
111 /*
112  * DSC polling parameters.
113  *
114  * Polling for DSC (a single bit in the status register) is a very important
115  * function in ide-tape. There are two cases in which we poll for DSC:
116  *
117  * 1. Before a read/write packet command, to ensure that we can transfer data
118  * from/to the tape's data buffers, without causing an actual media access.
119  * In case the tape is not ready yet, we take out our request from the device
120  * request queue, so that ide.c could service requests from the other device
121  * on the same interface in the meantime.
122  *
123  * 2. After the successful initialization of a "media access packet command",
124  * which is a command that can take a long time to complete (the interval can
125  * range from several seconds to even an hour). Again, we postpone our request
126  * in the middle to free the bus for the other device. The polling frequency
127  * here should be lower than the read/write frequency since those media access
128  * commands are slow. We start from a "fast" frequency - IDETAPE_DSC_MA_FAST
129  * (1 second), and if we don't receive DSC after IDETAPE_DSC_MA_THRESHOLD
130  * (5 min), we switch it to a lower frequency - IDETAPE_DSC_MA_SLOW (1 min).
131  *
132  * We also set a timeout for the timer, in case something goes wrong. The
133  * timeout should be longer then the maximum execution time of a tape operation.
134  */
135
136 /* DSC timings. */
137 #define IDETAPE_DSC_RW_MIN              5*HZ/100        /* 50 msec */
138 #define IDETAPE_DSC_RW_MAX              40*HZ/100       /* 400 msec */
139 #define IDETAPE_DSC_RW_TIMEOUT          2*60*HZ         /* 2 minutes */
140 #define IDETAPE_DSC_MA_FAST             2*HZ            /* 2 seconds */
141 #define IDETAPE_DSC_MA_THRESHOLD        5*60*HZ         /* 5 minutes */
142 #define IDETAPE_DSC_MA_SLOW             30*HZ           /* 30 seconds */
143 #define IDETAPE_DSC_MA_TIMEOUT          2*60*60*HZ      /* 2 hours */
144
145 /*************************** End of tunable parameters ***********************/
146
147 /* Read/Write error simulation */
148 #define SIMULATE_ERRORS                 0
149
150 /* tape directions */
151 enum {
152         IDETAPE_DIR_NONE  = (1 << 0),
153         IDETAPE_DIR_READ  = (1 << 1),
154         IDETAPE_DIR_WRITE = (1 << 2),
155 };
156
157 struct idetape_bh {
158         u32 b_size;
159         atomic_t b_count;
160         struct idetape_bh *b_reqnext;
161         char *b_data;
162 };
163
164 /* Tape door status */
165 #define DOOR_UNLOCKED                   0
166 #define DOOR_LOCKED                     1
167 #define DOOR_EXPLICITLY_LOCKED          2
168
169 /* Some defines for the SPACE command */
170 #define IDETAPE_SPACE_OVER_FILEMARK     1
171 #define IDETAPE_SPACE_TO_EOD            3
172
173 /* Some defines for the LOAD UNLOAD command */
174 #define IDETAPE_LU_LOAD_MASK            1
175 #define IDETAPE_LU_RETENSION_MASK       2
176 #define IDETAPE_LU_EOT_MASK             4
177
178 /*
179  * Special requests for our block device strategy routine.
180  *
181  * In order to service a character device command, we add special requests to
182  * the tail of our block device request queue and wait for their completion.
183  */
184
185 enum {
186         REQ_IDETAPE_PC1         = (1 << 0), /* packet command (first stage) */
187         REQ_IDETAPE_PC2         = (1 << 1), /* packet command (second stage) */
188         REQ_IDETAPE_READ        = (1 << 2),
189         REQ_IDETAPE_WRITE       = (1 << 3),
190 };
191
192 /* Error codes returned in rq->errors to the higher part of the driver. */
193 #define IDETAPE_ERROR_GENERAL           101
194 #define IDETAPE_ERROR_FILEMARK          102
195 #define IDETAPE_ERROR_EOD               103
196
197 /* Structures related to the SELECT SENSE / MODE SENSE packet commands. */
198 #define IDETAPE_BLOCK_DESCRIPTOR        0
199 #define IDETAPE_CAPABILITIES_PAGE       0x2a
200
201 /* Tape flag bits values. */
202 enum {
203         IDETAPE_FLAG_IGNORE_DSC         = (1 << 0),
204         /* 0 When the tape position is unknown */
205         IDETAPE_FLAG_ADDRESS_VALID      = (1 << 1),
206         /* Device already opened */
207         IDETAPE_FLAG_BUSY               = (1 << 2),
208         /* Attempt to auto-detect the current user block size */
209         IDETAPE_FLAG_DETECT_BS          = (1 << 3),
210         /* Currently on a filemark */
211         IDETAPE_FLAG_FILEMARK           = (1 << 4),
212         /* DRQ interrupt device */
213         IDETAPE_FLAG_DRQ_INTERRUPT      = (1 << 5),
214         /* 0 = no tape is loaded, so we don't rewind after ejecting */
215         IDETAPE_FLAG_MEDIUM_PRESENT     = (1 << 6),
216 };
217
218 /* A pipeline stage. */
219 typedef struct idetape_stage_s {
220         struct request rq;                      /* The corresponding request */
221         struct idetape_bh *bh;                  /* The data buffers */
222         struct idetape_stage_s *next;           /* Pointer to the next stage */
223 } idetape_stage_t;
224
225 /*
226  * Most of our global data which we need to save even as we leave the driver due
227  * to an interrupt or a timer event is stored in the struct defined below.
228  */
229 typedef struct ide_tape_obj {
230         ide_drive_t     *drive;
231         ide_driver_t    *driver;
232         struct gendisk  *disk;
233         struct kref     kref;
234
235         /*
236          *      Since a typical character device operation requires more
237          *      than one packet command, we provide here enough memory
238          *      for the maximum of interconnected packet commands.
239          *      The packet commands are stored in the circular array pc_stack.
240          *      pc_stack_index points to the last used entry, and warps around
241          *      to the start when we get to the last array entry.
242          *
243          *      pc points to the current processed packet command.
244          *
245          *      failed_pc points to the last failed packet command, or contains
246          *      NULL if we do not need to retry any packet command. This is
247          *      required since an additional packet command is needed before the
248          *      retry, to get detailed information on what went wrong.
249          */
250         /* Current packet command */
251         struct ide_atapi_pc *pc;
252         /* Last failed packet command */
253         struct ide_atapi_pc *failed_pc;
254         /* Packet command stack */
255         struct ide_atapi_pc pc_stack[IDETAPE_PC_STACK];
256         /* Next free packet command storage space */
257         int pc_stack_index;
258         struct request rq_stack[IDETAPE_PC_STACK];
259         /* We implement a circular array */
260         int rq_stack_index;
261
262         /*
263          * DSC polling variables.
264          *
265          * While polling for DSC we use postponed_rq to postpone the current
266          * request so that ide.c will be able to service pending requests on the
267          * other device. Note that at most we will have only one DSC (usually
268          * data transfer) request in the device request queue.
269          */
270         struct request *postponed_rq;
271         /* The time in which we started polling for DSC */
272         unsigned long dsc_polling_start;
273         /* Timer used to poll for dsc */
274         struct timer_list dsc_timer;
275         /* Read/Write dsc polling frequency */
276         unsigned long best_dsc_rw_freq;
277         unsigned long dsc_poll_freq;
278         unsigned long dsc_timeout;
279
280         /* Read position information */
281         u8 partition;
282         /* Current block */
283         unsigned int first_frame;
284
285         /* Last error information */
286         u8 sense_key, asc, ascq;
287
288         /* Character device operation */
289         unsigned int minor;
290         /* device name */
291         char name[4];
292         /* Current character device data transfer direction */
293         u8 chrdev_dir;
294
295         /* tape block size, usually 512 or 1024 bytes */
296         unsigned short blk_size;
297         int user_bs_factor;
298
299         /* Copy of the tape's Capabilities and Mechanical Page */
300         u8 caps[20];
301
302         /*
303          * Active data transfer request parameters.
304          *
305          * At most, there is only one ide-tape originated data transfer request
306          * in the device request queue. This allows ide.c to easily service
307          * requests from the other device when we postpone our active request.
308          */
309
310         /* Data buffer size chosen based on the tape's recommendation */
311         int buffer_size;
312         idetape_stage_t *merge_stage;
313         int merge_stage_size;
314         struct idetape_bh *bh;
315         char *b_data;
316         int b_count;
317
318         /* Pipeline parameters. */
319         int pages_per_stage;
320         /* Wasted space in each stage */
321         int excess_bh_size;
322
323         /* Status/Action flags: long for set_bit */
324         unsigned long flags;
325         /* protects the ide-tape queue */
326         spinlock_t lock;
327
328         /* Measures average tape speed */
329         unsigned long avg_time;
330         int avg_size;
331         int avg_speed;
332
333         /* the door is currently locked */
334         int door_locked;
335         /* the tape hardware is write protected */
336         char drv_write_prot;
337         /* the tape is write protected (hardware or opened as read-only) */
338         char write_prot;
339
340         u32 debug_mask;
341 } idetape_tape_t;
342
343 static DEFINE_MUTEX(idetape_ref_mutex);
344
345 static struct class *idetape_sysfs_class;
346
347 #define to_ide_tape(obj) container_of(obj, struct ide_tape_obj, kref)
348
349 #define ide_tape_g(disk) \
350         container_of((disk)->private_data, struct ide_tape_obj, driver)
351
352 static struct ide_tape_obj *ide_tape_get(struct gendisk *disk)
353 {
354         struct ide_tape_obj *tape = NULL;
355
356         mutex_lock(&idetape_ref_mutex);
357         tape = ide_tape_g(disk);
358         if (tape)
359                 kref_get(&tape->kref);
360         mutex_unlock(&idetape_ref_mutex);
361         return tape;
362 }
363
364 static void ide_tape_release(struct kref *);
365
366 static void ide_tape_put(struct ide_tape_obj *tape)
367 {
368         mutex_lock(&idetape_ref_mutex);
369         kref_put(&tape->kref, ide_tape_release);
370         mutex_unlock(&idetape_ref_mutex);
371 }
372
373 /*
374  * The variables below are used for the character device interface. Additional
375  * state variables are defined in our ide_drive_t structure.
376  */
377 static struct ide_tape_obj *idetape_devs[MAX_HWIFS * MAX_DRIVES];
378
379 #define ide_tape_f(file) ((file)->private_data)
380
381 static struct ide_tape_obj *ide_tape_chrdev_get(unsigned int i)
382 {
383         struct ide_tape_obj *tape = NULL;
384
385         mutex_lock(&idetape_ref_mutex);
386         tape = idetape_devs[i];
387         if (tape)
388                 kref_get(&tape->kref);
389         mutex_unlock(&idetape_ref_mutex);
390         return tape;
391 }
392
393 static void idetape_input_buffers(ide_drive_t *drive, struct ide_atapi_pc *pc,
394                                   unsigned int bcount)
395 {
396         struct idetape_bh *bh = pc->bh;
397         int count;
398
399         while (bcount) {
400                 if (bh == NULL) {
401                         printk(KERN_ERR "ide-tape: bh == NULL in "
402                                 "idetape_input_buffers\n");
403                         ide_atapi_discard_data(drive, bcount);
404                         return;
405                 }
406                 count = min(
407                         (unsigned int)(bh->b_size - atomic_read(&bh->b_count)),
408                         bcount);
409                 HWIF(drive)->atapi_input_bytes(drive, bh->b_data +
410                                         atomic_read(&bh->b_count), count);
411                 bcount -= count;
412                 atomic_add(count, &bh->b_count);
413                 if (atomic_read(&bh->b_count) == bh->b_size) {
414                         bh = bh->b_reqnext;
415                         if (bh)
416                                 atomic_set(&bh->b_count, 0);
417                 }
418         }
419         pc->bh = bh;
420 }
421
422 static void idetape_output_buffers(ide_drive_t *drive, struct ide_atapi_pc *pc,
423                                    unsigned int bcount)
424 {
425         struct idetape_bh *bh = pc->bh;
426         int count;
427
428         while (bcount) {
429                 if (bh == NULL) {
430                         printk(KERN_ERR "ide-tape: bh == NULL in %s\n",
431                                         __func__);
432                         return;
433                 }
434                 count = min((unsigned int)pc->b_count, (unsigned int)bcount);
435                 HWIF(drive)->atapi_output_bytes(drive, pc->b_data, count);
436                 bcount -= count;
437                 pc->b_data += count;
438                 pc->b_count -= count;
439                 if (!pc->b_count) {
440                         bh = bh->b_reqnext;
441                         pc->bh = bh;
442                         if (bh) {
443                                 pc->b_data = bh->b_data;
444                                 pc->b_count = atomic_read(&bh->b_count);
445                         }
446                 }
447         }
448 }
449
450 static void idetape_update_buffers(struct ide_atapi_pc *pc)
451 {
452         struct idetape_bh *bh = pc->bh;
453         int count;
454         unsigned int bcount = pc->xferred;
455
456         if (pc->flags & PC_FLAG_WRITING)
457                 return;
458         while (bcount) {
459                 if (bh == NULL) {
460                         printk(KERN_ERR "ide-tape: bh == NULL in %s\n",
461                                         __func__);
462                         return;
463                 }
464                 count = min((unsigned int)bh->b_size, (unsigned int)bcount);
465                 atomic_set(&bh->b_count, count);
466                 if (atomic_read(&bh->b_count) == bh->b_size)
467                         bh = bh->b_reqnext;
468                 bcount -= count;
469         }
470         pc->bh = bh;
471 }
472
473 /*
474  *      idetape_next_pc_storage returns a pointer to a place in which we can
475  *      safely store a packet command, even though we intend to leave the
476  *      driver. A storage space for a maximum of IDETAPE_PC_STACK packet
477  *      commands is allocated at initialization time.
478  */
479 static struct ide_atapi_pc *idetape_next_pc_storage(ide_drive_t *drive)
480 {
481         idetape_tape_t *tape = drive->driver_data;
482
483         debug_log(DBG_PCRQ_STACK, "pc_stack_index=%d\n", tape->pc_stack_index);
484
485         if (tape->pc_stack_index == IDETAPE_PC_STACK)
486                 tape->pc_stack_index = 0;
487         return (&tape->pc_stack[tape->pc_stack_index++]);
488 }
489
490 /*
491  *      idetape_next_rq_storage is used along with idetape_next_pc_storage.
492  *      Since we queue packet commands in the request queue, we need to
493  *      allocate a request, along with the allocation of a packet command.
494  */
495
496 /**************************************************************
497  *                                                            *
498  *  This should get fixed to use kmalloc(.., GFP_ATOMIC)      *
499  *  followed later on by kfree().   -ml                       *
500  *                                                            *
501  **************************************************************/
502
503 static struct request *idetape_next_rq_storage(ide_drive_t *drive)
504 {
505         idetape_tape_t *tape = drive->driver_data;
506
507         debug_log(DBG_PCRQ_STACK, "rq_stack_index=%d\n", tape->rq_stack_index);
508
509         if (tape->rq_stack_index == IDETAPE_PC_STACK)
510                 tape->rq_stack_index = 0;
511         return (&tape->rq_stack[tape->rq_stack_index++]);
512 }
513
514 static void idetape_init_pc(struct ide_atapi_pc *pc)
515 {
516         memset(pc->c, 0, 12);
517         pc->retries = 0;
518         pc->flags = 0;
519         pc->req_xfer = 0;
520         pc->buf = pc->pc_buf;
521         pc->buf_size = IDETAPE_PC_BUFFER_SIZE;
522         pc->bh = NULL;
523         pc->b_data = NULL;
524 }
525
526 /*
527  * called on each failed packet command retry to analyze the request sense. We
528  * currently do not utilize this information.
529  */
530 static void idetape_analyze_error(ide_drive_t *drive, u8 *sense)
531 {
532         idetape_tape_t *tape = drive->driver_data;
533         struct ide_atapi_pc *pc = tape->failed_pc;
534
535         tape->sense_key = sense[2] & 0xF;
536         tape->asc       = sense[12];
537         tape->ascq      = sense[13];
538
539         debug_log(DBG_ERR, "pc = %x, sense key = %x, asc = %x, ascq = %x\n",
540                  pc->c[0], tape->sense_key, tape->asc, tape->ascq);
541
542         /* Correct pc->xferred by asking the tape.       */
543         if (pc->flags & PC_FLAG_DMA_ERROR) {
544                 pc->xferred = pc->req_xfer -
545                         tape->blk_size *
546                         be32_to_cpu(get_unaligned((u32 *)&sense[3]));
547                 idetape_update_buffers(pc);
548         }
549
550         /*
551          * If error was the result of a zero-length read or write command,
552          * with sense key=5, asc=0x22, ascq=0, let it slide.  Some drives
553          * (i.e. Seagate STT3401A Travan) don't support 0-length read/writes.
554          */
555         if ((pc->c[0] == READ_6 || pc->c[0] == WRITE_6)
556             /* length == 0 */
557             && pc->c[4] == 0 && pc->c[3] == 0 && pc->c[2] == 0) {
558                 if (tape->sense_key == 5) {
559                         /* don't report an error, everything's ok */
560                         pc->error = 0;
561                         /* don't retry read/write */
562                         pc->flags |= PC_FLAG_ABORT;
563                 }
564         }
565         if (pc->c[0] == READ_6 && (sense[2] & 0x80)) {
566                 pc->error = IDETAPE_ERROR_FILEMARK;
567                 pc->flags |= PC_FLAG_ABORT;
568         }
569         if (pc->c[0] == WRITE_6) {
570                 if ((sense[2] & 0x40) || (tape->sense_key == 0xd
571                      && tape->asc == 0x0 && tape->ascq == 0x2)) {
572                         pc->error = IDETAPE_ERROR_EOD;
573                         pc->flags |= PC_FLAG_ABORT;
574                 }
575         }
576         if (pc->c[0] == READ_6 || pc->c[0] == WRITE_6) {
577                 if (tape->sense_key == 8) {
578                         pc->error = IDETAPE_ERROR_EOD;
579                         pc->flags |= PC_FLAG_ABORT;
580                 }
581                 if (!(pc->flags & PC_FLAG_ABORT) &&
582                     pc->xferred)
583                         pc->retries = IDETAPE_MAX_PC_RETRIES + 1;
584         }
585 }
586
587 /* Free a stage along with its related buffers completely. */
588 static void __idetape_kfree_stage(idetape_stage_t *stage)
589 {
590         struct idetape_bh *prev_bh, *bh = stage->bh;
591         int size;
592
593         while (bh != NULL) {
594                 if (bh->b_data != NULL) {
595                         size = (int) bh->b_size;
596                         while (size > 0) {
597                                 free_page((unsigned long) bh->b_data);
598                                 size -= PAGE_SIZE;
599                                 bh->b_data += PAGE_SIZE;
600                         }
601                 }
602                 prev_bh = bh;
603                 bh = bh->b_reqnext;
604                 kfree(prev_bh);
605         }
606         kfree(stage);
607 }
608
609 static int idetape_end_request(ide_drive_t *drive, int uptodate, int nr_sects)
610 {
611         struct request *rq = HWGROUP(drive)->rq;
612         idetape_tape_t *tape = drive->driver_data;
613         unsigned long flags;
614         int error;
615
616         debug_log(DBG_PROCS, "Enter %s\n", __func__);
617
618         switch (uptodate) {
619         case 0: error = IDETAPE_ERROR_GENERAL; break;
620         case 1: error = 0; break;
621         default: error = uptodate;
622         }
623         rq->errors = error;
624         if (error)
625                 tape->failed_pc = NULL;
626
627         if (!blk_special_request(rq)) {
628                 ide_end_request(drive, uptodate, nr_sects);
629                 return 0;
630         }
631
632         spin_lock_irqsave(&tape->lock, flags);
633
634         ide_end_drive_cmd(drive, 0, 0);
635
636         spin_unlock_irqrestore(&tape->lock, flags);
637         return 0;
638 }
639
640 static ide_startstop_t idetape_request_sense_callback(ide_drive_t *drive)
641 {
642         idetape_tape_t *tape = drive->driver_data;
643
644         debug_log(DBG_PROCS, "Enter %s\n", __func__);
645
646         if (!tape->pc->error) {
647                 idetape_analyze_error(drive, tape->pc->buf);
648                 idetape_end_request(drive, 1, 0);
649         } else {
650                 printk(KERN_ERR "ide-tape: Error in REQUEST SENSE itself - "
651                                 "Aborting request!\n");
652                 idetape_end_request(drive, 0, 0);
653         }
654         return ide_stopped;
655 }
656
657 static void idetape_create_request_sense_cmd(struct ide_atapi_pc *pc)
658 {
659         idetape_init_pc(pc);
660         pc->c[0] = REQUEST_SENSE;
661         pc->c[4] = 20;
662         pc->req_xfer = 20;
663         pc->idetape_callback = &idetape_request_sense_callback;
664 }
665
666 static void idetape_init_rq(struct request *rq, u8 cmd)
667 {
668         memset(rq, 0, sizeof(*rq));
669         rq->cmd_type = REQ_TYPE_SPECIAL;
670         rq->cmd[0] = cmd;
671 }
672
673 /*
674  * Generate a new packet command request in front of the request queue, before
675  * the current request, so that it will be processed immediately, on the next
676  * pass through the driver. The function below is called from the request
677  * handling part of the driver (the "bottom" part). Safe storage for the request
678  * should be allocated with ide_tape_next_{pc,rq}_storage() prior to that.
679  *
680  * Memory for those requests is pre-allocated at initialization time, and is
681  * limited to IDETAPE_PC_STACK requests. We assume that we have enough space for
682  * the maximum possible number of inter-dependent packet commands.
683  *
684  * The higher level of the driver - The ioctl handler and the character device
685  * handling functions should queue request to the lower level part and wait for
686  * their completion using idetape_queue_pc_tail or idetape_queue_rw_tail.
687  */
688 static void idetape_queue_pc_head(ide_drive_t *drive, struct ide_atapi_pc *pc,
689                                   struct request *rq)
690 {
691         struct ide_tape_obj *tape = drive->driver_data;
692
693         idetape_init_rq(rq, REQ_IDETAPE_PC1);
694         rq->buffer = (char *) pc;
695         rq->rq_disk = tape->disk;
696         (void) ide_do_drive_cmd(drive, rq, ide_preempt);
697 }
698
699 /*
700  *      idetape_retry_pc is called when an error was detected during the
701  *      last packet command. We queue a request sense packet command in
702  *      the head of the request list.
703  */
704 static ide_startstop_t idetape_retry_pc (ide_drive_t *drive)
705 {
706         idetape_tape_t *tape = drive->driver_data;
707         struct ide_atapi_pc *pc;
708         struct request *rq;
709
710         (void)ide_read_error(drive);
711         pc = idetape_next_pc_storage(drive);
712         rq = idetape_next_rq_storage(drive);
713         idetape_create_request_sense_cmd(pc);
714         set_bit(IDETAPE_FLAG_IGNORE_DSC, &tape->flags);
715         idetape_queue_pc_head(drive, pc, rq);
716         return ide_stopped;
717 }
718
719 /*
720  * Postpone the current request so that ide.c will be able to service requests
721  * from another device on the same hwgroup while we are polling for DSC.
722  */
723 static void idetape_postpone_request(ide_drive_t *drive)
724 {
725         idetape_tape_t *tape = drive->driver_data;
726
727         debug_log(DBG_PROCS, "Enter %s\n", __func__);
728
729         tape->postponed_rq = HWGROUP(drive)->rq;
730         ide_stall_queue(drive, tape->dsc_poll_freq);
731 }
732
733 typedef void idetape_io_buf(ide_drive_t *, struct ide_atapi_pc *, unsigned int);
734
735 /*
736  * This is the usual interrupt handler which will be called during a packet
737  * command. We will transfer some of the data (as requested by the drive) and
738  * will re-point interrupt handler to us. When data transfer is finished, we
739  * will act according to the algorithm described before
740  * idetape_issue_pc.
741  */
742 static ide_startstop_t idetape_pc_intr(ide_drive_t *drive)
743 {
744         ide_hwif_t *hwif = drive->hwif;
745         idetape_tape_t *tape = drive->driver_data;
746         struct ide_atapi_pc *pc = tape->pc;
747         xfer_func_t *xferfunc;
748         idetape_io_buf *iobuf;
749         unsigned int temp;
750 #if SIMULATE_ERRORS
751         static int error_sim_count;
752 #endif
753         u16 bcount;
754         u8 stat, ireason;
755
756         debug_log(DBG_PROCS, "Enter %s - interrupt handler\n", __func__);
757
758         /* Clear the interrupt */
759         stat = ide_read_status(drive);
760
761         if (pc->flags & PC_FLAG_DMA_IN_PROGRESS) {
762                 if (hwif->dma_ops->dma_end(drive) || (stat & ERR_STAT)) {
763                         /*
764                          * A DMA error is sometimes expected. For example,
765                          * if the tape is crossing a filemark during a
766                          * READ command, it will issue an irq and position
767                          * itself before the filemark, so that only a partial
768                          * data transfer will occur (which causes the DMA
769                          * error). In that case, we will later ask the tape
770                          * how much bytes of the original request were
771                          * actually transferred (we can't receive that
772                          * information from the DMA engine on most chipsets).
773                          */
774
775                         /*
776                          * On the contrary, a DMA error is never expected;
777                          * it usually indicates a hardware error or abort.
778                          * If the tape crosses a filemark during a READ
779                          * command, it will issue an irq and position itself
780                          * after the filemark (not before). Only a partial
781                          * data transfer will occur, but no DMA error.
782                          * (AS, 19 Apr 2001)
783                          */
784                         pc->flags |= PC_FLAG_DMA_ERROR;
785                 } else {
786                         pc->xferred = pc->req_xfer;
787                         idetape_update_buffers(pc);
788                 }
789                 debug_log(DBG_PROCS, "DMA finished\n");
790
791         }
792
793         /* No more interrupts */
794         if ((stat & DRQ_STAT) == 0) {
795                 debug_log(DBG_SENSE, "Packet command completed, %d bytes"
796                                 " transferred\n", pc->xferred);
797
798                 pc->flags &= ~PC_FLAG_DMA_IN_PROGRESS;
799                 local_irq_enable();
800
801 #if SIMULATE_ERRORS
802                 if ((pc->c[0] == WRITE_6 || pc->c[0] == READ_6) &&
803                     (++error_sim_count % 100) == 0) {
804                         printk(KERN_INFO "ide-tape: %s: simulating error\n",
805                                 tape->name);
806                         stat |= ERR_STAT;
807                 }
808 #endif
809                 if ((stat & ERR_STAT) && pc->c[0] == REQUEST_SENSE)
810                         stat &= ~ERR_STAT;
811                 if ((stat & ERR_STAT) || (pc->flags & PC_FLAG_DMA_ERROR)) {
812                         /* Error detected */
813                         debug_log(DBG_ERR, "%s: I/O error\n", tape->name);
814
815                         if (pc->c[0] == REQUEST_SENSE) {
816                                 printk(KERN_ERR "ide-tape: I/O error in request"
817                                                 " sense command\n");
818                                 return ide_do_reset(drive);
819                         }
820                         debug_log(DBG_ERR, "[cmd %x]: check condition\n",
821                                         pc->c[0]);
822
823                         /* Retry operation */
824                         return idetape_retry_pc(drive);
825                 }
826                 pc->error = 0;
827                 if ((pc->flags & PC_FLAG_WAIT_FOR_DSC) &&
828                     (stat & SEEK_STAT) == 0) {
829                         /* Media access command */
830                         tape->dsc_polling_start = jiffies;
831                         tape->dsc_poll_freq = IDETAPE_DSC_MA_FAST;
832                         tape->dsc_timeout = jiffies + IDETAPE_DSC_MA_TIMEOUT;
833                         /* Allow ide.c to handle other requests */
834                         idetape_postpone_request(drive);
835                         return ide_stopped;
836                 }
837                 if (tape->failed_pc == pc)
838                         tape->failed_pc = NULL;
839                 /* Command finished - Call the callback function */
840                 return pc->idetape_callback(drive);
841         }
842
843         if (pc->flags & PC_FLAG_DMA_IN_PROGRESS) {
844                 pc->flags &= ~PC_FLAG_DMA_IN_PROGRESS;
845                 printk(KERN_ERR "ide-tape: The tape wants to issue more "
846                                 "interrupts in DMA mode\n");
847                 printk(KERN_ERR "ide-tape: DMA disabled, reverting to PIO\n");
848                 ide_dma_off(drive);
849                 return ide_do_reset(drive);
850         }
851         /* Get the number of bytes to transfer on this interrupt. */
852         bcount = (hwif->INB(hwif->io_ports.lbah_addr) << 8) |
853                   hwif->INB(hwif->io_ports.lbam_addr);
854
855         ireason = hwif->INB(hwif->io_ports.nsect_addr);
856
857         if (ireason & CD) {
858                 printk(KERN_ERR "ide-tape: CoD != 0 in %s\n", __func__);
859                 return ide_do_reset(drive);
860         }
861         if (((ireason & IO) == IO) == !!(pc->flags & PC_FLAG_WRITING)) {
862                 /* Hopefully, we will never get here */
863                 printk(KERN_ERR "ide-tape: We wanted to %s, ",
864                                 (ireason & IO) ? "Write" : "Read");
865                 printk(KERN_ERR "ide-tape: but the tape wants us to %s !\n",
866                                 (ireason & IO) ? "Read" : "Write");
867                 return ide_do_reset(drive);
868         }
869         if (!(pc->flags & PC_FLAG_WRITING)) {
870                 /* Reading - Check that we have enough space */
871                 temp = pc->xferred + bcount;
872                 if (temp > pc->req_xfer) {
873                         if (temp > pc->buf_size) {
874                                 printk(KERN_ERR "ide-tape: The tape wants to "
875                                         "send us more data than expected "
876                                         "- discarding data\n");
877                                 ide_atapi_discard_data(drive, bcount);
878                                 ide_set_handler(drive, &idetape_pc_intr,
879                                                 IDETAPE_WAIT_CMD, NULL);
880                                 return ide_started;
881                         }
882                         debug_log(DBG_SENSE, "The tape wants to send us more "
883                                 "data than expected - allowing transfer\n");
884                 }
885                 iobuf = &idetape_input_buffers;
886                 xferfunc = hwif->atapi_input_bytes;
887         } else {
888                 iobuf = &idetape_output_buffers;
889                 xferfunc = hwif->atapi_output_bytes;
890         }
891
892         if (pc->bh)
893                 iobuf(drive, pc, bcount);
894         else
895                 xferfunc(drive, pc->cur_pos, bcount);
896
897         /* Update the current position */
898         pc->xferred += bcount;
899         pc->cur_pos += bcount;
900
901         debug_log(DBG_SENSE, "[cmd %x] transferred %d bytes on that intr.\n",
902                         pc->c[0], bcount);
903
904         /* And set the interrupt handler again */
905         ide_set_handler(drive, &idetape_pc_intr, IDETAPE_WAIT_CMD, NULL);
906         return ide_started;
907 }
908
909 /*
910  * Packet Command Interface
911  *
912  * The current Packet Command is available in tape->pc, and will not change
913  * until we finish handling it. Each packet command is associated with a
914  * callback function that will be called when the command is finished.
915  *
916  * The handling will be done in three stages:
917  *
918  * 1. idetape_issue_pc will send the packet command to the drive, and will set
919  * the interrupt handler to idetape_pc_intr.
920  *
921  * 2. On each interrupt, idetape_pc_intr will be called. This step will be
922  * repeated until the device signals us that no more interrupts will be issued.
923  *
924  * 3. ATAPI Tape media access commands have immediate status with a delayed
925  * process. In case of a successful initiation of a media access packet command,
926  * the DSC bit will be set when the actual execution of the command is finished.
927  * Since the tape drive will not issue an interrupt, we have to poll for this
928  * event. In this case, we define the request as "low priority request" by
929  * setting rq_status to IDETAPE_RQ_POSTPONED, set a timer to poll for DSC and
930  * exit the driver.
931  *
932  * ide.c will then give higher priority to requests which originate from the
933  * other device, until will change rq_status to RQ_ACTIVE.
934  *
935  * 4. When the packet command is finished, it will be checked for errors.
936  *
937  * 5. In case an error was found, we queue a request sense packet command in
938  * front of the request queue and retry the operation up to
939  * IDETAPE_MAX_PC_RETRIES times.
940  *
941  * 6. In case no error was found, or we decided to give up and not to retry
942  * again, the callback function will be called and then we will handle the next
943  * request.
944  */
945 static ide_startstop_t idetape_transfer_pc(ide_drive_t *drive)
946 {
947         ide_hwif_t *hwif = drive->hwif;
948         idetape_tape_t *tape = drive->driver_data;
949         struct ide_atapi_pc *pc = tape->pc;
950         int retries = 100;
951         ide_startstop_t startstop;
952         u8 ireason;
953
954         if (ide_wait_stat(&startstop, drive, DRQ_STAT, BUSY_STAT, WAIT_READY)) {
955                 printk(KERN_ERR "ide-tape: Strange, packet command initiated "
956                                 "yet DRQ isn't asserted\n");
957                 return startstop;
958         }
959         ireason = hwif->INB(hwif->io_ports.nsect_addr);
960         while (retries-- && ((ireason & CD) == 0 || (ireason & IO))) {
961                 printk(KERN_ERR "ide-tape: (IO,CoD != (0,1) while issuing "
962                                 "a packet command, retrying\n");
963                 udelay(100);
964                 ireason = hwif->INB(hwif->io_ports.nsect_addr);
965                 if (retries == 0) {
966                         printk(KERN_ERR "ide-tape: (IO,CoD != (0,1) while "
967                                         "issuing a packet command, ignoring\n");
968                         ireason |= CD;
969                         ireason &= ~IO;
970                 }
971         }
972         if ((ireason & CD) == 0 || (ireason & IO)) {
973                 printk(KERN_ERR "ide-tape: (IO,CoD) != (0,1) while issuing "
974                                 "a packet command\n");
975                 return ide_do_reset(drive);
976         }
977         /* Set the interrupt routine */
978         ide_set_handler(drive, &idetape_pc_intr, IDETAPE_WAIT_CMD, NULL);
979 #ifdef CONFIG_BLK_DEV_IDEDMA
980         /* Begin DMA, if necessary */
981         if (pc->flags & PC_FLAG_DMA_IN_PROGRESS)
982                 hwif->dma_ops->dma_start(drive);
983 #endif
984         /* Send the actual packet */
985         HWIF(drive)->atapi_output_bytes(drive, pc->c, 12);
986         return ide_started;
987 }
988
989 static ide_startstop_t idetape_issue_pc(ide_drive_t *drive,
990                 struct ide_atapi_pc *pc)
991 {
992         ide_hwif_t *hwif = drive->hwif;
993         idetape_tape_t *tape = drive->driver_data;
994         int dma_ok = 0;
995         u16 bcount;
996
997         if (tape->pc->c[0] == REQUEST_SENSE &&
998             pc->c[0] == REQUEST_SENSE) {
999                 printk(KERN_ERR "ide-tape: possible ide-tape.c bug - "
1000                         "Two request sense in serial were issued\n");
1001         }
1002
1003         if (tape->failed_pc == NULL && pc->c[0] != REQUEST_SENSE)
1004                 tape->failed_pc = pc;
1005         /* Set the current packet command */
1006         tape->pc = pc;
1007
1008         if (pc->retries > IDETAPE_MAX_PC_RETRIES ||
1009                 (pc->flags & PC_FLAG_ABORT)) {
1010                 /*
1011                  * We will "abort" retrying a packet command in case legitimate
1012                  * error code was received (crossing a filemark, or end of the
1013                  * media, for example).
1014                  */
1015                 if (!(pc->flags & PC_FLAG_ABORT)) {
1016                         if (!(pc->c[0] == TEST_UNIT_READY &&
1017                               tape->sense_key == 2 && tape->asc == 4 &&
1018                              (tape->ascq == 1 || tape->ascq == 8))) {
1019                                 printk(KERN_ERR "ide-tape: %s: I/O error, "
1020                                                 "pc = %2x, key = %2x, "
1021                                                 "asc = %2x, ascq = %2x\n",
1022                                                 tape->name, pc->c[0],
1023                                                 tape->sense_key, tape->asc,
1024                                                 tape->ascq);
1025                         }
1026                         /* Giving up */
1027                         pc->error = IDETAPE_ERROR_GENERAL;
1028                 }
1029                 tape->failed_pc = NULL;
1030                 return pc->idetape_callback(drive);
1031         }
1032         debug_log(DBG_SENSE, "Retry #%d, cmd = %02X\n", pc->retries, pc->c[0]);
1033
1034         pc->retries++;
1035         /* We haven't transferred any data yet */
1036         pc->xferred = 0;
1037         pc->cur_pos = pc->buf;
1038         /* Request to transfer the entire buffer at once */
1039         bcount = pc->req_xfer;
1040
1041         if (pc->flags & PC_FLAG_DMA_ERROR) {
1042                 pc->flags &= ~PC_FLAG_DMA_ERROR;
1043                 printk(KERN_WARNING "ide-tape: DMA disabled, "
1044                                 "reverting to PIO\n");
1045                 ide_dma_off(drive);
1046         }
1047         if ((pc->flags & PC_FLAG_DMA_RECOMMENDED) && drive->using_dma)
1048                 dma_ok = !hwif->dma_ops->dma_setup(drive);
1049
1050         ide_pktcmd_tf_load(drive, IDE_TFLAG_NO_SELECT_MASK |
1051                            IDE_TFLAG_OUT_DEVICE, bcount, dma_ok);
1052
1053         if (dma_ok)
1054                 /* Will begin DMA later */
1055                 pc->flags |= PC_FLAG_DMA_IN_PROGRESS;
1056         if (test_bit(IDETAPE_FLAG_DRQ_INTERRUPT, &tape->flags)) {
1057                 ide_execute_command(drive, WIN_PACKETCMD, &idetape_transfer_pc,
1058                                     IDETAPE_WAIT_CMD, NULL);
1059                 return ide_started;
1060         } else {
1061                 hwif->OUTB(WIN_PACKETCMD, hwif->io_ports.command_addr);
1062                 return idetape_transfer_pc(drive);
1063         }
1064 }
1065
1066 static ide_startstop_t idetape_pc_callback(ide_drive_t *drive)
1067 {
1068         idetape_tape_t *tape = drive->driver_data;
1069
1070         debug_log(DBG_PROCS, "Enter %s\n", __func__);
1071
1072         idetape_end_request(drive, tape->pc->error ? 0 : 1, 0);
1073         return ide_stopped;
1074 }
1075
1076 /* A mode sense command is used to "sense" tape parameters. */
1077 static void idetape_create_mode_sense_cmd(struct ide_atapi_pc *pc, u8 page_code)
1078 {
1079         idetape_init_pc(pc);
1080         pc->c[0] = MODE_SENSE;
1081         if (page_code != IDETAPE_BLOCK_DESCRIPTOR)
1082                 /* DBD = 1 - Don't return block descriptors */
1083                 pc->c[1] = 8;
1084         pc->c[2] = page_code;
1085         /*
1086          * Changed pc->c[3] to 0 (255 will at best return unused info).
1087          *
1088          * For SCSI this byte is defined as subpage instead of high byte
1089          * of length and some IDE drives seem to interpret it this way
1090          * and return an error when 255 is used.
1091          */
1092         pc->c[3] = 0;
1093         /* We will just discard data in that case */
1094         pc->c[4] = 255;
1095         if (page_code == IDETAPE_BLOCK_DESCRIPTOR)
1096                 pc->req_xfer = 12;
1097         else if (page_code == IDETAPE_CAPABILITIES_PAGE)
1098                 pc->req_xfer = 24;
1099         else
1100                 pc->req_xfer = 50;
1101         pc->idetape_callback = &idetape_pc_callback;
1102 }
1103
1104 static ide_startstop_t idetape_media_access_finished(ide_drive_t *drive)
1105 {
1106         idetape_tape_t *tape = drive->driver_data;
1107         struct ide_atapi_pc *pc = tape->pc;
1108         u8 stat;
1109
1110         stat = ide_read_status(drive);
1111
1112         if (stat & SEEK_STAT) {
1113                 if (stat & ERR_STAT) {
1114                         /* Error detected */
1115                         if (pc->c[0] != TEST_UNIT_READY)
1116                                 printk(KERN_ERR "ide-tape: %s: I/O error, ",
1117                                                 tape->name);
1118                         /* Retry operation */
1119                         return idetape_retry_pc(drive);
1120                 }
1121                 pc->error = 0;
1122                 if (tape->failed_pc == pc)
1123                         tape->failed_pc = NULL;
1124         } else {
1125                 pc->error = IDETAPE_ERROR_GENERAL;
1126                 tape->failed_pc = NULL;
1127         }
1128         return pc->idetape_callback(drive);
1129 }
1130
1131 static ide_startstop_t idetape_rw_callback(ide_drive_t *drive)
1132 {
1133         idetape_tape_t *tape = drive->driver_data;
1134         struct request *rq = HWGROUP(drive)->rq;
1135         int blocks = tape->pc->xferred / tape->blk_size;
1136
1137         tape->avg_size += blocks * tape->blk_size;
1138
1139         if (time_after_eq(jiffies, tape->avg_time + HZ)) {
1140                 tape->avg_speed = tape->avg_size * HZ /
1141                                 (jiffies - tape->avg_time) / 1024;
1142                 tape->avg_size = 0;
1143                 tape->avg_time = jiffies;
1144         }
1145         debug_log(DBG_PROCS, "Enter %s\n", __func__);
1146
1147         tape->first_frame += blocks;
1148         rq->current_nr_sectors -= blocks;
1149
1150         if (!tape->pc->error)
1151                 idetape_end_request(drive, 1, 0);
1152         else
1153                 idetape_end_request(drive, tape->pc->error, 0);
1154         return ide_stopped;
1155 }
1156
1157 static void idetape_create_read_cmd(idetape_tape_t *tape,
1158                 struct ide_atapi_pc *pc,
1159                 unsigned int length, struct idetape_bh *bh)
1160 {
1161         idetape_init_pc(pc);
1162         pc->c[0] = READ_6;
1163         put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]);
1164         pc->c[1] = 1;
1165         pc->idetape_callback = &idetape_rw_callback;
1166         pc->bh = bh;
1167         atomic_set(&bh->b_count, 0);
1168         pc->buf = NULL;
1169         pc->buf_size = length * tape->blk_size;
1170         pc->req_xfer = pc->buf_size;
1171         if (pc->req_xfer == tape->buffer_size)
1172                 pc->flags |= PC_FLAG_DMA_RECOMMENDED;
1173 }
1174
1175 static void idetape_create_write_cmd(idetape_tape_t *tape,
1176                 struct ide_atapi_pc *pc,
1177                 unsigned int length, struct idetape_bh *bh)
1178 {
1179         idetape_init_pc(pc);
1180         pc->c[0] = WRITE_6;
1181         put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]);
1182         pc->c[1] = 1;
1183         pc->idetape_callback = &idetape_rw_callback;
1184         pc->flags |= PC_FLAG_WRITING;
1185         pc->bh = bh;
1186         pc->b_data = bh->b_data;
1187         pc->b_count = atomic_read(&bh->b_count);
1188         pc->buf = NULL;
1189         pc->buf_size = length * tape->blk_size;
1190         pc->req_xfer = pc->buf_size;
1191         if (pc->req_xfer == tape->buffer_size)
1192                 pc->flags |= PC_FLAG_DMA_RECOMMENDED;
1193 }
1194
1195 static ide_startstop_t idetape_do_request(ide_drive_t *drive,
1196                                           struct request *rq, sector_t block)
1197 {
1198         idetape_tape_t *tape = drive->driver_data;
1199         struct ide_atapi_pc *pc = NULL;
1200         struct request *postponed_rq = tape->postponed_rq;
1201         u8 stat;
1202
1203         debug_log(DBG_SENSE, "sector: %ld, nr_sectors: %ld,"
1204                         " current_nr_sectors: %d\n",
1205                         rq->sector, rq->nr_sectors, rq->current_nr_sectors);
1206
1207         if (!blk_special_request(rq)) {
1208                 /* We do not support buffer cache originated requests. */
1209                 printk(KERN_NOTICE "ide-tape: %s: Unsupported request in "
1210                         "request queue (%d)\n", drive->name, rq->cmd_type);
1211                 ide_end_request(drive, 0, 0);
1212                 return ide_stopped;
1213         }
1214
1215         /* Retry a failed packet command */
1216         if (tape->failed_pc && tape->pc->c[0] == REQUEST_SENSE)
1217                 return idetape_issue_pc(drive, tape->failed_pc);
1218
1219         if (postponed_rq != NULL)
1220                 if (rq != postponed_rq) {
1221                         printk(KERN_ERR "ide-tape: ide-tape.c bug - "
1222                                         "Two DSC requests were queued\n");
1223                         idetape_end_request(drive, 0, 0);
1224                         return ide_stopped;
1225                 }
1226
1227         tape->postponed_rq = NULL;
1228
1229         /*
1230          * If the tape is still busy, postpone our request and service
1231          * the other device meanwhile.
1232          */
1233         stat = ide_read_status(drive);
1234
1235         if (!drive->dsc_overlap && !(rq->cmd[0] & REQ_IDETAPE_PC2))
1236                 set_bit(IDETAPE_FLAG_IGNORE_DSC, &tape->flags);
1237
1238         if (drive->post_reset == 1) {
1239                 set_bit(IDETAPE_FLAG_IGNORE_DSC, &tape->flags);
1240                 drive->post_reset = 0;
1241         }
1242
1243         if (!test_and_clear_bit(IDETAPE_FLAG_IGNORE_DSC, &tape->flags) &&
1244             (stat & SEEK_STAT) == 0) {
1245                 if (postponed_rq == NULL) {
1246                         tape->dsc_polling_start = jiffies;
1247                         tape->dsc_poll_freq = tape->best_dsc_rw_freq;
1248                         tape->dsc_timeout = jiffies + IDETAPE_DSC_RW_TIMEOUT;
1249                 } else if (time_after(jiffies, tape->dsc_timeout)) {
1250                         printk(KERN_ERR "ide-tape: %s: DSC timeout\n",
1251                                 tape->name);
1252                         if (rq->cmd[0] & REQ_IDETAPE_PC2) {
1253                                 idetape_media_access_finished(drive);
1254                                 return ide_stopped;
1255                         } else {
1256                                 return ide_do_reset(drive);
1257                         }
1258                 } else if (time_after(jiffies,
1259                                         tape->dsc_polling_start +
1260                                         IDETAPE_DSC_MA_THRESHOLD))
1261                         tape->dsc_poll_freq = IDETAPE_DSC_MA_SLOW;
1262                 idetape_postpone_request(drive);
1263                 return ide_stopped;
1264         }
1265         if (rq->cmd[0] & REQ_IDETAPE_READ) {
1266                 pc = idetape_next_pc_storage(drive);
1267                 idetape_create_read_cmd(tape, pc, rq->current_nr_sectors,
1268                                         (struct idetape_bh *)rq->special);
1269                 goto out;
1270         }
1271         if (rq->cmd[0] & REQ_IDETAPE_WRITE) {
1272                 pc = idetape_next_pc_storage(drive);
1273                 idetape_create_write_cmd(tape, pc, rq->current_nr_sectors,
1274                                          (struct idetape_bh *)rq->special);
1275                 goto out;
1276         }
1277         if (rq->cmd[0] & REQ_IDETAPE_PC1) {
1278                 pc = (struct ide_atapi_pc *) rq->buffer;
1279                 rq->cmd[0] &= ~(REQ_IDETAPE_PC1);
1280                 rq->cmd[0] |= REQ_IDETAPE_PC2;
1281                 goto out;
1282         }
1283         if (rq->cmd[0] & REQ_IDETAPE_PC2) {
1284                 idetape_media_access_finished(drive);
1285                 return ide_stopped;
1286         }
1287         BUG();
1288 out:
1289         return idetape_issue_pc(drive, pc);
1290 }
1291
1292 /*
1293  * The function below uses __get_free_pages to allocate a data buffer of size
1294  * tape->buffer_size (or a bit more). We attempt to combine sequential pages as
1295  * much as possible.
1296  *
1297  * It returns a pointer to the newly allocated buffer, or NULL in case of
1298  * failure.
1299  */
1300 static idetape_stage_t *ide_tape_kmalloc_buffer(idetape_tape_t *tape, int full,
1301                                                 int clear)
1302 {
1303         idetape_stage_t *stage;
1304         struct idetape_bh *prev_bh, *bh;
1305         int pages = tape->pages_per_stage;
1306         unsigned int order, b_allocd;
1307         char *b_data = NULL;
1308
1309         stage = kmalloc(sizeof(idetape_stage_t), GFP_KERNEL);
1310         if (!stage)
1311                 return NULL;
1312         stage->next = NULL;
1313
1314         stage->bh = kmalloc(sizeof(struct idetape_bh), GFP_KERNEL);
1315         bh = stage->bh;
1316         if (bh == NULL)
1317                 goto abort;
1318
1319         order = fls(pages) - 1;
1320         bh->b_data = (char *) __get_free_pages(GFP_KERNEL, order);
1321         if (!bh->b_data)
1322                 goto abort;
1323         b_allocd = (1 << order) * PAGE_SIZE;
1324         pages &= (order-1);
1325
1326         if (clear)
1327                 memset(bh->b_data, 0, b_allocd);
1328         bh->b_reqnext = NULL;
1329         bh->b_size = b_allocd;
1330         atomic_set(&bh->b_count, full ? bh->b_size : 0);
1331
1332         while (pages) {
1333                 order = fls(pages) - 1;
1334                 b_data = (char *) __get_free_pages(GFP_KERNEL, order);
1335                 if (!b_data)
1336                         goto abort;
1337                 b_allocd = (1 << order) * PAGE_SIZE;
1338
1339                 if (clear)
1340                         memset(b_data, 0, b_allocd);
1341
1342                 /* newly allocated page frames below buffer header or ...*/
1343                 if (bh->b_data == b_data + b_allocd) {
1344                         bh->b_size += b_allocd;
1345                         bh->b_data -= b_allocd;
1346                         if (full)
1347                                 atomic_add(b_allocd, &bh->b_count);
1348                         continue;
1349                 }
1350                 /* they are above the header */
1351                 if (b_data == bh->b_data + bh->b_size) {
1352                         bh->b_size += b_allocd;
1353                         if (full)
1354                                 atomic_add(b_allocd, &bh->b_count);
1355                         continue;
1356                 }
1357                 prev_bh = bh;
1358                 bh = kmalloc(sizeof(struct idetape_bh), GFP_KERNEL);
1359                 if (!bh) {
1360                         free_pages((unsigned long) b_data, order);
1361                         goto abort;
1362                 }
1363                 bh->b_reqnext = NULL;
1364                 bh->b_data = b_data;
1365                 bh->b_size = b_allocd;
1366                 atomic_set(&bh->b_count, full ? bh->b_size : 0);
1367                 prev_bh->b_reqnext = bh;
1368
1369                 pages &= (order-1);
1370         }
1371
1372         bh->b_size -= tape->excess_bh_size;
1373         if (full)
1374                 atomic_sub(tape->excess_bh_size, &bh->b_count);
1375         return stage;
1376 abort:
1377         __idetape_kfree_stage(stage);
1378         return NULL;
1379 }
1380
1381 static int idetape_copy_stage_from_user(idetape_tape_t *tape,
1382                                         const char __user *buf, int n)
1383 {
1384         struct idetape_bh *bh = tape->bh;
1385         int count;
1386         int ret = 0;
1387
1388         while (n) {
1389                 if (bh == NULL) {
1390                         printk(KERN_ERR "ide-tape: bh == NULL in %s\n",
1391                                         __func__);
1392                         return 1;
1393                 }
1394                 count = min((unsigned int)
1395                                 (bh->b_size - atomic_read(&bh->b_count)),
1396                                 (unsigned int)n);
1397                 if (copy_from_user(bh->b_data + atomic_read(&bh->b_count), buf,
1398                                 count))
1399                         ret = 1;
1400                 n -= count;
1401                 atomic_add(count, &bh->b_count);
1402                 buf += count;
1403                 if (atomic_read(&bh->b_count) == bh->b_size) {
1404                         bh = bh->b_reqnext;
1405                         if (bh)
1406                                 atomic_set(&bh->b_count, 0);
1407                 }
1408         }
1409         tape->bh = bh;
1410         return ret;
1411 }
1412
1413 static int idetape_copy_stage_to_user(idetape_tape_t *tape, char __user *buf,
1414                                       int n)
1415 {
1416         struct idetape_bh *bh = tape->bh;
1417         int count;
1418         int ret = 0;
1419
1420         while (n) {
1421                 if (bh == NULL) {
1422                         printk(KERN_ERR "ide-tape: bh == NULL in %s\n",
1423                                         __func__);
1424                         return 1;
1425                 }
1426                 count = min(tape->b_count, n);
1427                 if  (copy_to_user(buf, tape->b_data, count))
1428                         ret = 1;
1429                 n -= count;
1430                 tape->b_data += count;
1431                 tape->b_count -= count;
1432                 buf += count;
1433                 if (!tape->b_count) {
1434                         bh = bh->b_reqnext;
1435                         tape->bh = bh;
1436                         if (bh) {
1437                                 tape->b_data = bh->b_data;
1438                                 tape->b_count = atomic_read(&bh->b_count);
1439                         }
1440                 }
1441         }
1442         return ret;
1443 }
1444
1445 static void idetape_init_merge_stage(idetape_tape_t *tape)
1446 {
1447         struct idetape_bh *bh = tape->merge_stage->bh;
1448
1449         tape->bh = bh;
1450         if (tape->chrdev_dir == IDETAPE_DIR_WRITE)
1451                 atomic_set(&bh->b_count, 0);
1452         else {
1453                 tape->b_data = bh->b_data;
1454                 tape->b_count = atomic_read(&bh->b_count);
1455         }
1456 }
1457
1458 static ide_startstop_t idetape_read_position_callback(ide_drive_t *drive)
1459 {
1460         idetape_tape_t *tape = drive->driver_data;
1461         u8 *readpos = tape->pc->buf;
1462
1463         debug_log(DBG_PROCS, "Enter %s\n", __func__);
1464
1465         if (!tape->pc->error) {
1466                 debug_log(DBG_SENSE, "BOP - %s\n",
1467                                 (readpos[0] & 0x80) ? "Yes" : "No");
1468                 debug_log(DBG_SENSE, "EOP - %s\n",
1469                                 (readpos[0] & 0x40) ? "Yes" : "No");
1470
1471                 if (readpos[0] & 0x4) {
1472                         printk(KERN_INFO "ide-tape: Block location is unknown"
1473                                          "to the tape\n");
1474                         clear_bit(IDETAPE_FLAG_ADDRESS_VALID, &tape->flags);
1475                         idetape_end_request(drive, 0, 0);
1476                 } else {
1477                         debug_log(DBG_SENSE, "Block Location - %u\n",
1478                                         be32_to_cpu(*(u32 *)&readpos[4]));
1479
1480                         tape->partition = readpos[1];
1481                         tape->first_frame =
1482                                 be32_to_cpu(*(u32 *)&readpos[4]);
1483                         set_bit(IDETAPE_FLAG_ADDRESS_VALID, &tape->flags);
1484                         idetape_end_request(drive, 1, 0);
1485                 }
1486         } else {
1487                 idetape_end_request(drive, 0, 0);
1488         }
1489         return ide_stopped;
1490 }
1491
1492 /*
1493  * Write a filemark if write_filemark=1. Flush the device buffers without
1494  * writing a filemark otherwise.
1495  */
1496 static void idetape_create_write_filemark_cmd(ide_drive_t *drive,
1497                 struct ide_atapi_pc *pc, int write_filemark)
1498 {
1499         idetape_init_pc(pc);
1500         pc->c[0] = WRITE_FILEMARKS;
1501         pc->c[4] = write_filemark;
1502         pc->flags |= PC_FLAG_WAIT_FOR_DSC;
1503         pc->idetape_callback = &idetape_pc_callback;
1504 }
1505
1506 static void idetape_create_test_unit_ready_cmd(struct ide_atapi_pc *pc)
1507 {
1508         idetape_init_pc(pc);
1509         pc->c[0] = TEST_UNIT_READY;
1510         pc->idetape_callback = &idetape_pc_callback;
1511 }
1512
1513 /*
1514  * We add a special packet command request to the tail of the request queue, and
1515  * wait for it to be serviced. This is not to be called from within the request
1516  * handling part of the driver! We allocate here data on the stack and it is
1517  * valid until the request is finished. This is not the case for the bottom part
1518  * of the driver, where we are always leaving the functions to wait for an
1519  * interrupt or a timer event.
1520  *
1521  * From the bottom part of the driver, we should allocate safe memory using
1522  * idetape_next_pc_storage() and ide_tape_next_rq_storage(), and add the request
1523  * to the request list without waiting for it to be serviced! In that case, we
1524  * usually use idetape_queue_pc_head().
1525  */
1526 static int idetape_queue_pc_tail(ide_drive_t *drive, struct ide_atapi_pc *pc)
1527 {
1528         struct ide_tape_obj *tape = drive->driver_data;
1529         struct request rq;
1530
1531         idetape_init_rq(&rq, REQ_IDETAPE_PC1);
1532         rq.buffer = (char *) pc;
1533         rq.rq_disk = tape->disk;
1534         return ide_do_drive_cmd(drive, &rq, ide_wait);
1535 }
1536
1537 static void idetape_create_load_unload_cmd(ide_drive_t *drive,
1538                 struct ide_atapi_pc *pc, int cmd)
1539 {
1540         idetape_init_pc(pc);
1541         pc->c[0] = START_STOP;
1542         pc->c[4] = cmd;
1543         pc->flags |= PC_FLAG_WAIT_FOR_DSC;
1544         pc->idetape_callback = &idetape_pc_callback;
1545 }
1546
1547 static int idetape_wait_ready(ide_drive_t *drive, unsigned long timeout)
1548 {
1549         idetape_tape_t *tape = drive->driver_data;
1550         struct ide_atapi_pc pc;
1551         int load_attempted = 0;
1552
1553         /* Wait for the tape to become ready */
1554         set_bit(IDETAPE_FLAG_MEDIUM_PRESENT, &tape->flags);
1555         timeout += jiffies;
1556         while (time_before(jiffies, timeout)) {
1557                 idetape_create_test_unit_ready_cmd(&pc);
1558                 if (!idetape_queue_pc_tail(drive, &pc))
1559                         return 0;
1560                 if ((tape->sense_key == 2 && tape->asc == 4 && tape->ascq == 2)
1561                     || (tape->asc == 0x3A)) {
1562                         /* no media */
1563                         if (load_attempted)
1564                                 return -ENOMEDIUM;
1565                         idetape_create_load_unload_cmd(drive, &pc,
1566                                                         IDETAPE_LU_LOAD_MASK);
1567                         idetape_queue_pc_tail(drive, &pc);
1568                         load_attempted = 1;
1569                 /* not about to be ready */
1570                 } else if (!(tape->sense_key == 2 && tape->asc == 4 &&
1571                              (tape->ascq == 1 || tape->ascq == 8)))
1572                         return -EIO;
1573                 msleep(100);
1574         }
1575         return -EIO;
1576 }
1577
1578 static int idetape_flush_tape_buffers(ide_drive_t *drive)
1579 {
1580         struct ide_atapi_pc pc;
1581         int rc;
1582
1583         idetape_create_write_filemark_cmd(drive, &pc, 0);
1584         rc = idetape_queue_pc_tail(drive, &pc);
1585         if (rc)
1586                 return rc;
1587         idetape_wait_ready(drive, 60 * 5 * HZ);
1588         return 0;
1589 }
1590
1591 static void idetape_create_read_position_cmd(struct ide_atapi_pc *pc)
1592 {
1593         idetape_init_pc(pc);
1594         pc->c[0] = READ_POSITION;
1595         pc->req_xfer = 20;
1596         pc->idetape_callback = &idetape_read_position_callback;
1597 }
1598
1599 static int idetape_read_position(ide_drive_t *drive)
1600 {
1601         idetape_tape_t *tape = drive->driver_data;
1602         struct ide_atapi_pc pc;
1603         int position;
1604
1605         debug_log(DBG_PROCS, "Enter %s\n", __func__);
1606
1607         idetape_create_read_position_cmd(&pc);
1608         if (idetape_queue_pc_tail(drive, &pc))
1609                 return -1;
1610         position = tape->first_frame;
1611         return position;
1612 }
1613
1614 static void idetape_create_locate_cmd(ide_drive_t *drive,
1615                 struct ide_atapi_pc *pc,
1616                 unsigned int block, u8 partition, int skip)
1617 {
1618         idetape_init_pc(pc);
1619         pc->c[0] = POSITION_TO_ELEMENT;
1620         pc->c[1] = 2;
1621         put_unaligned(cpu_to_be32(block), (unsigned int *) &pc->c[3]);
1622         pc->c[8] = partition;
1623         pc->flags |= PC_FLAG_WAIT_FOR_DSC;
1624         pc->idetape_callback = &idetape_pc_callback;
1625 }
1626
1627 static int idetape_create_prevent_cmd(ide_drive_t *drive,
1628                 struct ide_atapi_pc *pc, int prevent)
1629 {
1630         idetape_tape_t *tape = drive->driver_data;
1631
1632         /* device supports locking according to capabilities page */
1633         if (!(tape->caps[6] & 0x01))
1634                 return 0;
1635
1636         idetape_init_pc(pc);
1637         pc->c[0] = ALLOW_MEDIUM_REMOVAL;
1638         pc->c[4] = prevent;
1639         pc->idetape_callback = &idetape_pc_callback;
1640         return 1;
1641 }
1642
1643 static int __idetape_discard_read_pipeline(ide_drive_t *drive)
1644 {
1645         idetape_tape_t *tape = drive->driver_data;
1646
1647         if (tape->chrdev_dir != IDETAPE_DIR_READ)
1648                 return 0;
1649
1650         clear_bit(IDETAPE_FLAG_FILEMARK, &tape->flags);
1651         tape->merge_stage_size = 0;
1652         if (tape->merge_stage != NULL) {
1653                 __idetape_kfree_stage(tape->merge_stage);
1654                 tape->merge_stage = NULL;
1655         }
1656
1657         tape->chrdev_dir = IDETAPE_DIR_NONE;
1658
1659         return 0;
1660 }
1661
1662 /*
1663  * Position the tape to the requested block using the LOCATE packet command.
1664  * A READ POSITION command is then issued to check where we are positioned. Like
1665  * all higher level operations, we queue the commands at the tail of the request
1666  * queue and wait for their completion.
1667  */
1668 static int idetape_position_tape(ide_drive_t *drive, unsigned int block,
1669                 u8 partition, int skip)
1670 {
1671         idetape_tape_t *tape = drive->driver_data;
1672         int retval;
1673         struct ide_atapi_pc pc;
1674
1675         if (tape->chrdev_dir == IDETAPE_DIR_READ)
1676                 __idetape_discard_read_pipeline(drive);
1677         idetape_wait_ready(drive, 60 * 5 * HZ);
1678         idetape_create_locate_cmd(drive, &pc, block, partition, skip);
1679         retval = idetape_queue_pc_tail(drive, &pc);
1680         if (retval)
1681                 return (retval);
1682
1683         idetape_create_read_position_cmd(&pc);
1684         return (idetape_queue_pc_tail(drive, &pc));
1685 }
1686
1687 static void idetape_discard_read_pipeline(ide_drive_t *drive,
1688                                           int restore_position)
1689 {
1690         idetape_tape_t *tape = drive->driver_data;
1691         int cnt;
1692         int seek, position;
1693
1694         cnt = __idetape_discard_read_pipeline(drive);
1695         if (restore_position) {
1696                 position = idetape_read_position(drive);
1697                 seek = position > cnt ? position - cnt : 0;
1698                 if (idetape_position_tape(drive, seek, 0, 0)) {
1699                         printk(KERN_INFO "ide-tape: %s: position_tape failed in"
1700                                          " discard_pipeline()\n", tape->name);
1701                         return;
1702                 }
1703         }
1704 }
1705
1706 /*
1707  * Generate a read/write request for the block device interface and wait for it
1708  * to be serviced.
1709  */
1710 static int idetape_queue_rw_tail(ide_drive_t *drive, int cmd, int blocks,
1711                                  struct idetape_bh *bh)
1712 {
1713         idetape_tape_t *tape = drive->driver_data;
1714         struct request rq;
1715
1716         debug_log(DBG_SENSE, "%s: cmd=%d\n", __func__, cmd);
1717
1718         idetape_init_rq(&rq, cmd);
1719         rq.rq_disk = tape->disk;
1720         rq.special = (void *)bh;
1721         rq.sector = tape->first_frame;
1722         rq.nr_sectors           = blocks;
1723         rq.current_nr_sectors   = blocks;
1724         (void) ide_do_drive_cmd(drive, &rq, ide_wait);
1725
1726         if ((cmd & (REQ_IDETAPE_READ | REQ_IDETAPE_WRITE)) == 0)
1727                 return 0;
1728
1729         if (tape->merge_stage)
1730                 idetape_init_merge_stage(tape);
1731         if (rq.errors == IDETAPE_ERROR_GENERAL)
1732                 return -EIO;
1733         return (tape->blk_size * (blocks-rq.current_nr_sectors));
1734 }
1735
1736 static void idetape_create_inquiry_cmd(struct ide_atapi_pc *pc)
1737 {
1738         idetape_init_pc(pc);
1739         pc->c[0] = INQUIRY;
1740         pc->c[4] = 254;
1741         pc->req_xfer = 254;
1742         pc->idetape_callback = &idetape_pc_callback;
1743 }
1744
1745 static void idetape_create_rewind_cmd(ide_drive_t *drive,
1746                 struct ide_atapi_pc *pc)
1747 {
1748         idetape_init_pc(pc);
1749         pc->c[0] = REZERO_UNIT;
1750         pc->flags |= PC_FLAG_WAIT_FOR_DSC;
1751         pc->idetape_callback = &idetape_pc_callback;
1752 }
1753
1754 static void idetape_create_erase_cmd(struct ide_atapi_pc *pc)
1755 {
1756         idetape_init_pc(pc);
1757         pc->c[0] = ERASE;
1758         pc->c[1] = 1;
1759         pc->flags |= PC_FLAG_WAIT_FOR_DSC;
1760         pc->idetape_callback = &idetape_pc_callback;
1761 }
1762
1763 static void idetape_create_space_cmd(struct ide_atapi_pc *pc, int count, u8 cmd)
1764 {
1765         idetape_init_pc(pc);
1766         pc->c[0] = SPACE;
1767         put_unaligned(cpu_to_be32(count), (unsigned int *) &pc->c[1]);
1768         pc->c[1] = cmd;
1769         pc->flags |= PC_FLAG_WAIT_FOR_DSC;
1770         pc->idetape_callback = &idetape_pc_callback;
1771 }
1772
1773 /* Queue up a character device originated write request. */
1774 static int idetape_add_chrdev_write_request(ide_drive_t *drive, int blocks)
1775 {
1776         idetape_tape_t *tape = drive->driver_data;
1777
1778         debug_log(DBG_CHRDEV, "Enter %s\n", __func__);
1779
1780         return idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE,
1781                                      blocks, tape->merge_stage->bh);
1782 }
1783
1784 static void idetape_empty_write_pipeline(ide_drive_t *drive)
1785 {
1786         idetape_tape_t *tape = drive->driver_data;
1787         int blocks, min;
1788         struct idetape_bh *bh;
1789
1790         if (tape->chrdev_dir != IDETAPE_DIR_WRITE) {
1791                 printk(KERN_ERR "ide-tape: bug: Trying to empty write pipeline,"
1792                                 " but we are not writing.\n");
1793                 return;
1794         }
1795         if (tape->merge_stage_size > tape->buffer_size) {
1796                 printk(KERN_ERR "ide-tape: bug: merge_buffer too big\n");
1797                 tape->merge_stage_size = tape->buffer_size;
1798         }
1799         if (tape->merge_stage_size) {
1800                 blocks = tape->merge_stage_size / tape->blk_size;
1801                 if (tape->merge_stage_size % tape->blk_size) {
1802                         unsigned int i;
1803
1804                         blocks++;
1805                         i = tape->blk_size - tape->merge_stage_size %
1806                                 tape->blk_size;
1807                         bh = tape->bh->b_reqnext;
1808                         while (bh) {
1809                                 atomic_set(&bh->b_count, 0);
1810                                 bh = bh->b_reqnext;
1811                         }
1812                         bh = tape->bh;
1813                         while (i) {
1814                                 if (bh == NULL) {
1815                                         printk(KERN_INFO "ide-tape: bug,"
1816                                                          " bh NULL\n");
1817                                         break;
1818                                 }
1819                                 min = min(i, (unsigned int)(bh->b_size -
1820                                                 atomic_read(&bh->b_count)));
1821                                 memset(bh->b_data + atomic_read(&bh->b_count),
1822                                                 0, min);
1823                                 atomic_add(min, &bh->b_count);
1824                                 i -= min;
1825                                 bh = bh->b_reqnext;
1826                         }
1827                 }
1828                 (void) idetape_add_chrdev_write_request(drive, blocks);
1829                 tape->merge_stage_size = 0;
1830         }
1831         if (tape->merge_stage != NULL) {
1832                 __idetape_kfree_stage(tape->merge_stage);
1833                 tape->merge_stage = NULL;
1834         }
1835         tape->chrdev_dir = IDETAPE_DIR_NONE;
1836 }
1837
1838 static int idetape_init_read(ide_drive_t *drive)
1839 {
1840         idetape_tape_t *tape = drive->driver_data;
1841         int bytes_read;
1842
1843         /* Initialize read operation */
1844         if (tape->chrdev_dir != IDETAPE_DIR_READ) {
1845                 if (tape->chrdev_dir == IDETAPE_DIR_WRITE) {
1846                         idetape_empty_write_pipeline(drive);
1847                         idetape_flush_tape_buffers(drive);
1848                 }
1849                 if (tape->merge_stage || tape->merge_stage_size) {
1850                         printk(KERN_ERR "ide-tape: merge_stage_size should be"
1851                                          " 0 now\n");
1852                         tape->merge_stage_size = 0;
1853                 }
1854                 tape->merge_stage = ide_tape_kmalloc_buffer(tape, 0, 0);
1855                 if (!tape->merge_stage)
1856                         return -ENOMEM;
1857                 tape->chrdev_dir = IDETAPE_DIR_READ;
1858
1859                 /*
1860                  * Issue a read 0 command to ensure that DSC handshake is
1861                  * switched from completion mode to buffer available mode.
1862                  * No point in issuing this if DSC overlap isn't supported, some
1863                  * drives (Seagate STT3401A) will return an error.
1864                  */
1865                 if (drive->dsc_overlap) {
1866                         bytes_read = idetape_queue_rw_tail(drive,
1867                                                         REQ_IDETAPE_READ, 0,
1868                                                         tape->merge_stage->bh);
1869                         if (bytes_read < 0) {
1870                                 __idetape_kfree_stage(tape->merge_stage);
1871                                 tape->merge_stage = NULL;
1872                                 tape->chrdev_dir = IDETAPE_DIR_NONE;
1873                                 return bytes_read;
1874                         }
1875                 }
1876         }
1877
1878         return 0;
1879 }
1880
1881 /* called from idetape_chrdev_read() to service a chrdev read request. */
1882 static int idetape_add_chrdev_read_request(ide_drive_t *drive, int blocks)
1883 {
1884         idetape_tape_t *tape = drive->driver_data;
1885
1886         debug_log(DBG_PROCS, "Enter %s, %d blocks\n", __func__, blocks);
1887
1888         /* If we are at a filemark, return a read length of 0 */
1889         if (test_bit(IDETAPE_FLAG_FILEMARK, &tape->flags))
1890                 return 0;
1891
1892         idetape_init_read(drive);
1893
1894         return idetape_queue_rw_tail(drive, REQ_IDETAPE_READ, blocks,
1895                                      tape->merge_stage->bh);
1896 }
1897
1898 static void idetape_pad_zeros(ide_drive_t *drive, int bcount)
1899 {
1900         idetape_tape_t *tape = drive->driver_data;
1901         struct idetape_bh *bh;
1902         int blocks;
1903
1904         while (bcount) {
1905                 unsigned int count;
1906
1907                 bh = tape->merge_stage->bh;
1908                 count = min(tape->buffer_size, bcount);
1909                 bcount -= count;
1910                 blocks = count / tape->blk_size;
1911                 while (count) {
1912                         atomic_set(&bh->b_count,
1913                                    min(count, (unsigned int)bh->b_size));
1914                         memset(bh->b_data, 0, atomic_read(&bh->b_count));
1915                         count -= atomic_read(&bh->b_count);
1916                         bh = bh->b_reqnext;
1917                 }
1918                 idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE, blocks,
1919                                       tape->merge_stage->bh);
1920         }
1921 }
1922
1923 /*
1924  * Rewinds the tape to the Beginning Of the current Partition (BOP). We
1925  * currently support only one partition.
1926  */
1927 static int idetape_rewind_tape(ide_drive_t *drive)
1928 {
1929         int retval;
1930         struct ide_atapi_pc pc;
1931         idetape_tape_t *tape;
1932         tape = drive->driver_data;
1933
1934         debug_log(DBG_SENSE, "Enter %s\n", __func__);
1935
1936         idetape_create_rewind_cmd(drive, &pc);
1937         retval = idetape_queue_pc_tail(drive, &pc);
1938         if (retval)
1939                 return retval;
1940
1941         idetape_create_read_position_cmd(&pc);
1942         retval = idetape_queue_pc_tail(drive, &pc);
1943         if (retval)
1944                 return retval;
1945         return 0;
1946 }
1947
1948 /* mtio.h compatible commands should be issued to the chrdev interface. */
1949 static int idetape_blkdev_ioctl(ide_drive_t *drive, unsigned int cmd,
1950                                 unsigned long arg)
1951 {
1952         idetape_tape_t *tape = drive->driver_data;
1953         void __user *argp = (void __user *)arg;
1954
1955         struct idetape_config {
1956                 int dsc_rw_frequency;
1957                 int dsc_media_access_frequency;
1958                 int nr_stages;
1959         } config;
1960
1961         debug_log(DBG_PROCS, "Enter %s\n", __func__);
1962
1963         switch (cmd) {
1964         case 0x0340:
1965                 if (copy_from_user(&config, argp, sizeof(config)))
1966                         return -EFAULT;
1967                 tape->best_dsc_rw_freq = config.dsc_rw_frequency;
1968                 break;
1969         case 0x0350:
1970                 config.dsc_rw_frequency = (int) tape->best_dsc_rw_freq;
1971                 config.nr_stages = 1;
1972                 if (copy_to_user(argp, &config, sizeof(config)))
1973                         return -EFAULT;
1974                 break;
1975         default:
1976                 return -EIO;
1977         }
1978         return 0;
1979 }
1980
1981 static int idetape_space_over_filemarks(ide_drive_t *drive, short mt_op,
1982                                         int mt_count)
1983 {
1984         idetape_tape_t *tape = drive->driver_data;
1985         struct ide_atapi_pc pc;
1986         int retval, count = 0;
1987         int sprev = !!(tape->caps[4] & 0x20);
1988
1989         if (mt_count == 0)
1990                 return 0;
1991         if (MTBSF == mt_op || MTBSFM == mt_op) {
1992                 if (!sprev)
1993                         return -EIO;
1994                 mt_count = -mt_count;
1995         }
1996
1997         if (tape->chrdev_dir == IDETAPE_DIR_READ) {
1998                 tape->merge_stage_size = 0;
1999                 if (test_and_clear_bit(IDETAPE_FLAG_FILEMARK, &tape->flags))
2000                         ++count;
2001                 idetape_discard_read_pipeline(drive, 0);
2002         }
2003
2004         /*
2005          * The filemark was not found in our internal pipeline; now we can issue
2006          * the space command.
2007          */
2008         switch (mt_op) {
2009         case MTFSF:
2010         case MTBSF:
2011                 idetape_create_space_cmd(&pc, mt_count - count,
2012                                          IDETAPE_SPACE_OVER_FILEMARK);
2013                 return idetape_queue_pc_tail(drive, &pc);
2014         case MTFSFM:
2015         case MTBSFM:
2016                 if (!sprev)
2017                         return -EIO;
2018                 retval = idetape_space_over_filemarks(drive, MTFSF,
2019                                                       mt_count - count);
2020                 if (retval)
2021                         return retval;
2022                 count = (MTBSFM == mt_op ? 1 : -1);
2023                 return idetape_space_over_filemarks(drive, MTFSF, count);
2024         default:
2025                 printk(KERN_ERR "ide-tape: MTIO operation %d not supported\n",
2026                                 mt_op);
2027                 return -EIO;
2028         }
2029 }
2030
2031 /*
2032  * Our character device read / write functions.
2033  *
2034  * The tape is optimized to maximize throughput when it is transferring an
2035  * integral number of the "continuous transfer limit", which is a parameter of
2036  * the specific tape (26kB on my particular tape, 32kB for Onstream).
2037  *
2038  * As of version 1.3 of the driver, the character device provides an abstract
2039  * continuous view of the media - any mix of block sizes (even 1 byte) on the
2040  * same backup/restore procedure is supported. The driver will internally
2041  * convert the requests to the recommended transfer unit, so that an unmatch
2042  * between the user's block size to the recommended size will only result in a
2043  * (slightly) increased driver overhead, but will no longer hit performance.
2044  * This is not applicable to Onstream.
2045  */
2046 static ssize_t idetape_chrdev_read(struct file *file, char __user *buf,
2047                                    size_t count, loff_t *ppos)
2048 {
2049         struct ide_tape_obj *tape = ide_tape_f(file);
2050         ide_drive_t *drive = tape->drive;
2051         ssize_t bytes_read, temp, actually_read = 0, rc;
2052         ssize_t ret = 0;
2053         u16 ctl = *(u16 *)&tape->caps[12];
2054
2055         debug_log(DBG_CHRDEV, "Enter %s, count %Zd\n", __func__, count);
2056
2057         if (tape->chrdev_dir != IDETAPE_DIR_READ) {
2058                 if (test_bit(IDETAPE_FLAG_DETECT_BS, &tape->flags))
2059                         if (count > tape->blk_size &&
2060                             (count % tape->blk_size) == 0)
2061                                 tape->user_bs_factor = count / tape->blk_size;
2062         }
2063         rc = idetape_init_read(drive);
2064         if (rc < 0)
2065                 return rc;
2066         if (count == 0)
2067                 return (0);
2068         if (tape->merge_stage_size) {
2069                 actually_read = min((unsigned int)(tape->merge_stage_size),
2070                                     (unsigned int)count);
2071                 if (idetape_copy_stage_to_user(tape, buf, actually_read))
2072                         ret = -EFAULT;
2073                 buf += actually_read;
2074                 tape->merge_stage_size -= actually_read;
2075                 count -= actually_read;
2076         }
2077         while (count >= tape->buffer_size) {
2078                 bytes_read = idetape_add_chrdev_read_request(drive, ctl);
2079                 if (bytes_read <= 0)
2080                         goto finish;
2081                 if (idetape_copy_stage_to_user(tape, buf, bytes_read))
2082                         ret = -EFAULT;
2083                 buf += bytes_read;
2084                 count -= bytes_read;
2085                 actually_read += bytes_read;
2086         }
2087         if (count) {
2088                 bytes_read = idetape_add_chrdev_read_request(drive, ctl);
2089                 if (bytes_read <= 0)
2090                         goto finish;
2091                 temp = min((unsigned long)count, (unsigned long)bytes_read);
2092                 if (idetape_copy_stage_to_user(tape, buf, temp))
2093                         ret = -EFAULT;
2094                 actually_read += temp;
2095                 tape->merge_stage_size = bytes_read-temp;
2096         }
2097 finish:
2098         if (!actually_read && test_bit(IDETAPE_FLAG_FILEMARK, &tape->flags)) {
2099                 debug_log(DBG_SENSE, "%s: spacing over filemark\n", tape->name);
2100
2101                 idetape_space_over_filemarks(drive, MTFSF, 1);
2102                 return 0;
2103         }
2104
2105         return ret ? ret : actually_read;
2106 }
2107
2108 static ssize_t idetape_chrdev_write(struct file *file, const char __user *buf,
2109                                      size_t count, loff_t *ppos)
2110 {
2111         struct ide_tape_obj *tape = ide_tape_f(file);
2112         ide_drive_t *drive = tape->drive;
2113         ssize_t actually_written = 0;
2114         ssize_t ret = 0;
2115         u16 ctl = *(u16 *)&tape->caps[12];
2116
2117         /* The drive is write protected. */
2118         if (tape->write_prot)
2119                 return -EACCES;
2120
2121         debug_log(DBG_CHRDEV, "Enter %s, count %Zd\n", __func__, count);
2122
2123         /* Initialize write operation */
2124         if (tape->chrdev_dir != IDETAPE_DIR_WRITE) {
2125                 if (tape->chrdev_dir == IDETAPE_DIR_READ)
2126                         idetape_discard_read_pipeline(drive, 1);
2127                 if (tape->merge_stage || tape->merge_stage_size) {
2128                         printk(KERN_ERR "ide-tape: merge_stage_size "
2129                                 "should be 0 now\n");
2130                         tape->merge_stage_size = 0;
2131                 }
2132                 tape->merge_stage = ide_tape_kmalloc_buffer(tape, 0, 0);
2133                 if (!tape->merge_stage)
2134                         return -ENOMEM;
2135                 tape->chrdev_dir = IDETAPE_DIR_WRITE;
2136                 idetape_init_merge_stage(tape);
2137
2138                 /*
2139                  * Issue a write 0 command to ensure that DSC handshake is
2140                  * switched from completion mode to buffer available mode. No
2141                  * point in issuing this if DSC overlap isn't supported, some
2142                  * drives (Seagate STT3401A) will return an error.
2143                  */
2144                 if (drive->dsc_overlap) {
2145                         ssize_t retval = idetape_queue_rw_tail(drive,
2146                                                         REQ_IDETAPE_WRITE, 0,
2147                                                         tape->merge_stage->bh);
2148                         if (retval < 0) {
2149                                 __idetape_kfree_stage(tape->merge_stage);
2150                                 tape->merge_stage = NULL;
2151                                 tape->chrdev_dir = IDETAPE_DIR_NONE;
2152                                 return retval;
2153                         }
2154                 }
2155         }
2156         if (count == 0)
2157                 return (0);
2158         if (tape->merge_stage_size) {
2159                 if (tape->merge_stage_size >= tape->buffer_size) {
2160                         printk(KERN_ERR "ide-tape: bug: merge buf too big\n");
2161                         tape->merge_stage_size = 0;
2162                 }
2163                 actually_written = min((unsigned int)
2164                                 (tape->buffer_size - tape->merge_stage_size),
2165                                 (unsigned int)count);
2166                 if (idetape_copy_stage_from_user(tape, buf, actually_written))
2167                                 ret = -EFAULT;
2168                 buf += actually_written;
2169                 tape->merge_stage_size += actually_written;
2170                 count -= actually_written;
2171
2172                 if (tape->merge_stage_size == tape->buffer_size) {
2173                         ssize_t retval;
2174                         tape->merge_stage_size = 0;
2175                         retval = idetape_add_chrdev_write_request(drive, ctl);
2176                         if (retval <= 0)
2177                                 return (retval);
2178                 }
2179         }
2180         while (count >= tape->buffer_size) {
2181                 ssize_t retval;
2182                 if (idetape_copy_stage_from_user(tape, buf, tape->buffer_size))
2183                         ret = -EFAULT;
2184                 buf += tape->buffer_size;
2185                 count -= tape->buffer_size;
2186                 retval = idetape_add_chrdev_write_request(drive, ctl);
2187                 actually_written += tape->buffer_size;
2188                 if (retval <= 0)
2189                         return (retval);
2190         }
2191         if (count) {
2192                 actually_written += count;
2193                 if (idetape_copy_stage_from_user(tape, buf, count))
2194                         ret = -EFAULT;
2195                 tape->merge_stage_size += count;
2196         }
2197         return ret ? ret : actually_written;
2198 }
2199
2200 static int idetape_write_filemark(ide_drive_t *drive)
2201 {
2202         struct ide_atapi_pc pc;
2203
2204         /* Write a filemark */
2205         idetape_create_write_filemark_cmd(drive, &pc, 1);
2206         if (idetape_queue_pc_tail(drive, &pc)) {
2207                 printk(KERN_ERR "ide-tape: Couldn't write a filemark\n");
2208                 return -EIO;
2209         }
2210         return 0;
2211 }
2212
2213 /*
2214  * Called from idetape_chrdev_ioctl when the general mtio MTIOCTOP ioctl is
2215  * requested.
2216  *
2217  * Note: MTBSF and MTBSFM are not supported when the tape doesn't support
2218  * spacing over filemarks in the reverse direction. In this case, MTFSFM is also
2219  * usually not supported.
2220  *
2221  * The following commands are currently not supported:
2222  *
2223  * MTFSS, MTBSS, MTWSM, MTSETDENSITY, MTSETDRVBUFFER, MT_ST_BOOLEANS,
2224  * MT_ST_WRITE_THRESHOLD.
2225  */
2226 static int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count)
2227 {
2228         idetape_tape_t *tape = drive->driver_data;
2229         struct ide_atapi_pc pc;
2230         int i, retval;
2231
2232         debug_log(DBG_ERR, "Handling MTIOCTOP ioctl: mt_op=%d, mt_count=%d\n",
2233                         mt_op, mt_count);
2234
2235         switch (mt_op) {
2236         case MTFSF:
2237         case MTFSFM:
2238         case MTBSF:
2239         case MTBSFM:
2240                 if (!mt_count)
2241                         return 0;
2242                 return idetape_space_over_filemarks(drive, mt_op, mt_count);
2243         default:
2244                 break;
2245         }
2246
2247         switch (mt_op) {
2248         case MTWEOF:
2249                 if (tape->write_prot)
2250                         return -EACCES;
2251                 idetape_discard_read_pipeline(drive, 1);
2252                 for (i = 0; i < mt_count; i++) {
2253                         retval = idetape_write_filemark(drive);
2254                         if (retval)
2255                                 return retval;
2256                 }
2257                 return 0;
2258         case MTREW:
2259                 idetape_discard_read_pipeline(drive, 0);
2260                 if (idetape_rewind_tape(drive))
2261                         return -EIO;
2262                 return 0;
2263         case MTLOAD:
2264                 idetape_discard_read_pipeline(drive, 0);
2265                 idetape_create_load_unload_cmd(drive, &pc,
2266                                                IDETAPE_LU_LOAD_MASK);
2267                 return idetape_queue_pc_tail(drive, &pc);
2268         case MTUNLOAD:
2269         case MTOFFL:
2270                 /*
2271                  * If door is locked, attempt to unlock before
2272                  * attempting to eject.
2273                  */
2274                 if (tape->door_locked) {
2275                         if (idetape_create_prevent_cmd(drive, &pc, 0))
2276                                 if (!idetape_queue_pc_tail(drive, &pc))
2277                                         tape->door_locked = DOOR_UNLOCKED;
2278                 }
2279                 idetape_discard_read_pipeline(drive, 0);
2280                 idetape_create_load_unload_cmd(drive, &pc,
2281                                               !IDETAPE_LU_LOAD_MASK);
2282                 retval = idetape_queue_pc_tail(drive, &pc);
2283                 if (!retval)
2284                         clear_bit(IDETAPE_FLAG_MEDIUM_PRESENT, &tape->flags);
2285                 return retval;
2286         case MTNOP:
2287                 idetape_discard_read_pipeline(drive, 0);
2288                 return idetape_flush_tape_buffers(drive);
2289         case MTRETEN:
2290                 idetape_discard_read_pipeline(drive, 0);
2291                 idetape_create_load_unload_cmd(drive, &pc,
2292                         IDETAPE_LU_RETENSION_MASK | IDETAPE_LU_LOAD_MASK);
2293                 return idetape_queue_pc_tail(drive, &pc);
2294         case MTEOM:
2295                 idetape_create_space_cmd(&pc, 0, IDETAPE_SPACE_TO_EOD);
2296                 return idetape_queue_pc_tail(drive, &pc);
2297         case MTERASE:
2298                 (void)idetape_rewind_tape(drive);
2299                 idetape_create_erase_cmd(&pc);
2300                 return idetape_queue_pc_tail(drive, &pc);
2301         case MTSETBLK:
2302                 if (mt_count) {
2303                         if (mt_count < tape->blk_size ||
2304                             mt_count % tape->blk_size)
2305                                 return -EIO;
2306                         tape->user_bs_factor = mt_count / tape->blk_size;
2307                         clear_bit(IDETAPE_FLAG_DETECT_BS, &tape->flags);
2308                 } else
2309                         set_bit(IDETAPE_FLAG_DETECT_BS, &tape->flags);
2310                 return 0;
2311         case MTSEEK:
2312                 idetape_discard_read_pipeline(drive, 0);
2313                 return idetape_position_tape(drive,
2314                         mt_count * tape->user_bs_factor, tape->partition, 0);
2315         case MTSETPART:
2316                 idetape_discard_read_pipeline(drive, 0);
2317                 return idetape_position_tape(drive, 0, mt_count, 0);
2318         case MTFSR:
2319         case MTBSR:
2320         case MTLOCK:
2321                 if (!idetape_create_prevent_cmd(drive, &pc, 1))
2322                         return 0;
2323                 retval = idetape_queue_pc_tail(drive, &pc);
2324                 if (retval)
2325                         return retval;
2326                 tape->door_locked = DOOR_EXPLICITLY_LOCKED;
2327                 return 0;
2328         case MTUNLOCK:
2329                 if (!idetape_create_prevent_cmd(drive, &pc, 0))
2330                         return 0;
2331                 retval = idetape_queue_pc_tail(drive, &pc);
2332                 if (retval)
2333                         return retval;
2334                 tape->door_locked = DOOR_UNLOCKED;
2335                 return 0;
2336         default:
2337                 printk(KERN_ERR "ide-tape: MTIO operation %d not supported\n",
2338                                 mt_op);
2339                 return -EIO;
2340         }
2341 }
2342
2343 /*
2344  * Our character device ioctls. General mtio.h magnetic io commands are
2345  * supported here, and not in the corresponding block interface. Our own
2346  * ide-tape ioctls are supported on both interfaces.
2347  */
2348 static int idetape_chrdev_ioctl(struct inode *inode, struct file *file,
2349                                 unsigned int cmd, unsigned long arg)
2350 {
2351         struct ide_tape_obj *tape = ide_tape_f(file);
2352         ide_drive_t *drive = tape->drive;
2353         struct mtop mtop;
2354         struct mtget mtget;
2355         struct mtpos mtpos;
2356         int block_offset = 0, position = tape->first_frame;
2357         void __user *argp = (void __user *)arg;
2358
2359         debug_log(DBG_CHRDEV, "Enter %s, cmd=%u\n", __func__, cmd);
2360
2361         if (tape->chrdev_dir == IDETAPE_DIR_WRITE) {
2362                 idetape_empty_write_pipeline(drive);
2363                 idetape_flush_tape_buffers(drive);
2364         }
2365         if (cmd == MTIOCGET || cmd == MTIOCPOS) {
2366                 block_offset = tape->merge_stage_size /
2367                         (tape->blk_size * tape->user_bs_factor);
2368                 position = idetape_read_position(drive);
2369                 if (position < 0)
2370                         return -EIO;
2371         }
2372         switch (cmd) {
2373         case MTIOCTOP:
2374                 if (copy_from_user(&mtop, argp, sizeof(struct mtop)))
2375                         return -EFAULT;
2376                 return idetape_mtioctop(drive, mtop.mt_op, mtop.mt_count);
2377         case MTIOCGET:
2378                 memset(&mtget, 0, sizeof(struct mtget));
2379                 mtget.mt_type = MT_ISSCSI2;
2380                 mtget.mt_blkno = position / tape->user_bs_factor - block_offset;
2381                 mtget.mt_dsreg =
2382                         ((tape->blk_size * tape->user_bs_factor)
2383                          << MT_ST_BLKSIZE_SHIFT) & MT_ST_BLKSIZE_MASK;
2384
2385                 if (tape->drv_write_prot)
2386                         mtget.mt_gstat |= GMT_WR_PROT(0xffffffff);
2387
2388                 if (copy_to_user(argp, &mtget, sizeof(struct mtget)))
2389                         return -EFAULT;
2390                 return 0;
2391         case MTIOCPOS:
2392                 mtpos.mt_blkno = position / tape->user_bs_factor - block_offset;
2393                 if (copy_to_user(argp, &mtpos, sizeof(struct mtpos)))
2394                         return -EFAULT;
2395                 return 0;
2396         default:
2397                 if (tape->chrdev_dir == IDETAPE_DIR_READ)
2398                         idetape_discard_read_pipeline(drive, 1);
2399                 return idetape_blkdev_ioctl(drive, cmd, arg);
2400         }
2401 }
2402
2403 /*
2404  * Do a mode sense page 0 with block descriptor and if it succeeds set the tape
2405  * block size with the reported value.
2406  */
2407 static void ide_tape_get_bsize_from_bdesc(ide_drive_t *drive)
2408 {
2409         idetape_tape_t *tape = drive->driver_data;
2410         struct ide_atapi_pc pc;
2411
2412         idetape_create_mode_sense_cmd(&pc, IDETAPE_BLOCK_DESCRIPTOR);
2413         if (idetape_queue_pc_tail(drive, &pc)) {
2414                 printk(KERN_ERR "ide-tape: Can't get block descriptor\n");
2415                 if (tape->blk_size == 0) {
2416                         printk(KERN_WARNING "ide-tape: Cannot deal with zero "
2417                                             "block size, assuming 32k\n");
2418                         tape->blk_size = 32768;
2419                 }
2420                 return;
2421         }
2422         tape->blk_size = (pc.buf[4 + 5] << 16) +
2423                                 (pc.buf[4 + 6] << 8)  +
2424                                  pc.buf[4 + 7];
2425         tape->drv_write_prot = (pc.buf[2] & 0x80) >> 7;
2426 }
2427
2428 static int idetape_chrdev_open(struct inode *inode, struct file *filp)
2429 {
2430         unsigned int minor = iminor(inode), i = minor & ~0xc0;
2431         ide_drive_t *drive;
2432         idetape_tape_t *tape;
2433         struct ide_atapi_pc pc;
2434         int retval;
2435
2436         if (i >= MAX_HWIFS * MAX_DRIVES)
2437                 return -ENXIO;
2438
2439         tape = ide_tape_chrdev_get(i);
2440         if (!tape)
2441                 return -ENXIO;
2442
2443         debug_log(DBG_CHRDEV, "Enter %s\n", __func__);
2444
2445         /*
2446          * We really want to do nonseekable_open(inode, filp); here, but some
2447          * versions of tar incorrectly call lseek on tapes and bail out if that
2448          * fails.  So we disallow pread() and pwrite(), but permit lseeks.
2449          */
2450         filp->f_mode &= ~(FMODE_PREAD | FMODE_PWRITE);
2451
2452         drive = tape->drive;
2453
2454         filp->private_data = tape;
2455
2456         if (test_and_set_bit(IDETAPE_FLAG_BUSY, &tape->flags)) {
2457                 retval = -EBUSY;
2458                 goto out_put_tape;
2459         }
2460
2461         retval = idetape_wait_ready(drive, 60 * HZ);
2462         if (retval) {
2463                 clear_bit(IDETAPE_FLAG_BUSY, &tape->flags);
2464                 printk(KERN_ERR "ide-tape: %s: drive not ready\n", tape->name);
2465                 goto out_put_tape;
2466         }
2467
2468         idetape_read_position(drive);
2469         if (!test_bit(IDETAPE_FLAG_ADDRESS_VALID, &tape->flags))
2470                 (void)idetape_rewind_tape(drive);
2471
2472         /* Read block size and write protect status from drive. */
2473         ide_tape_get_bsize_from_bdesc(drive);
2474
2475         /* Set write protect flag if device is opened as read-only. */
2476         if ((filp->f_flags & O_ACCMODE) == O_RDONLY)
2477                 tape->write_prot = 1;
2478         else
2479                 tape->write_prot = tape->drv_write_prot;
2480
2481         /* Make sure drive isn't write protected if user wants to write. */
2482         if (tape->write_prot) {
2483                 if ((filp->f_flags & O_ACCMODE) == O_WRONLY ||
2484                     (filp->f_flags & O_ACCMODE) == O_RDWR) {
2485                         clear_bit(IDETAPE_FLAG_BUSY, &tape->flags);
2486                         retval = -EROFS;
2487                         goto out_put_tape;
2488                 }
2489         }
2490
2491         /* Lock the tape drive door so user can't eject. */
2492         if (tape->chrdev_dir == IDETAPE_DIR_NONE) {
2493                 if (idetape_create_prevent_cmd(drive, &pc, 1)) {
2494                         if (!idetape_queue_pc_tail(drive, &pc)) {
2495                                 if (tape->door_locked != DOOR_EXPLICITLY_LOCKED)
2496                                         tape->door_locked = DOOR_LOCKED;
2497                         }
2498                 }
2499         }
2500         return 0;
2501
2502 out_put_tape:
2503         ide_tape_put(tape);
2504         return retval;
2505 }
2506
2507 static void idetape_write_release(ide_drive_t *drive, unsigned int minor)
2508 {
2509         idetape_tape_t *tape = drive->driver_data;
2510
2511         idetape_empty_write_pipeline(drive);
2512         tape->merge_stage = ide_tape_kmalloc_buffer(tape, 1, 0);
2513         if (tape->merge_stage != NULL) {
2514                 idetape_pad_zeros(drive, tape->blk_size *
2515                                 (tape->user_bs_factor - 1));
2516                 __idetape_kfree_stage(tape->merge_stage);
2517                 tape->merge_stage = NULL;
2518         }
2519         idetape_write_filemark(drive);
2520         idetape_flush_tape_buffers(drive);
2521         idetape_flush_tape_buffers(drive);
2522 }
2523
2524 static int idetape_chrdev_release(struct inode *inode, struct file *filp)
2525 {
2526         struct ide_tape_obj *tape = ide_tape_f(filp);
2527         ide_drive_t *drive = tape->drive;
2528         struct ide_atapi_pc pc;
2529         unsigned int minor = iminor(inode);
2530
2531         lock_kernel();
2532         tape = drive->driver_data;
2533
2534         debug_log(DBG_CHRDEV, "Enter %s\n", __func__);
2535
2536         if (tape->chrdev_dir == IDETAPE_DIR_WRITE)
2537                 idetape_write_release(drive, minor);
2538         if (tape->chrdev_dir == IDETAPE_DIR_READ) {
2539                 if (minor < 128)
2540                         idetape_discard_read_pipeline(drive, 1);
2541         }
2542
2543         if (minor < 128 && test_bit(IDETAPE_FLAG_MEDIUM_PRESENT, &tape->flags))
2544                 (void) idetape_rewind_tape(drive);
2545         if (tape->chrdev_dir == IDETAPE_DIR_NONE) {
2546                 if (tape->door_locked == DOOR_LOCKED) {
2547                         if (idetape_create_prevent_cmd(drive, &pc, 0)) {
2548                                 if (!idetape_queue_pc_tail(drive, &pc))
2549                                         tape->door_locked = DOOR_UNLOCKED;
2550                         }
2551                 }
2552         }
2553         clear_bit(IDETAPE_FLAG_BUSY, &tape->flags);
2554         ide_tape_put(tape);
2555         unlock_kernel();
2556         return 0;
2557 }
2558
2559 /*
2560  * check the contents of the ATAPI IDENTIFY command results. We return:
2561  *
2562  * 1 - If the tape can be supported by us, based on the information we have so
2563  * far.
2564  *
2565  * 0 - If this tape driver is not currently supported by us.
2566  */
2567 static int idetape_identify_device(ide_drive_t *drive)
2568 {
2569         u8 gcw[2], protocol, device_type, removable, packet_size;
2570
2571         if (drive->id_read == 0)
2572                 return 1;
2573
2574         *((unsigned short *) &gcw) = drive->id->config;
2575
2576         protocol        =   (gcw[1] & 0xC0) >> 6;
2577         device_type     =    gcw[1] & 0x1F;
2578         removable       = !!(gcw[0] & 0x80);
2579         packet_size     =    gcw[0] & 0x3;
2580
2581         /* Check that we can support this device */
2582         if (protocol != 2)
2583                 printk(KERN_ERR "ide-tape: Protocol (0x%02x) is not ATAPI\n",
2584                                 protocol);
2585         else if (device_type != 1)
2586                 printk(KERN_ERR "ide-tape: Device type (0x%02x) is not set "
2587                                 "to tape\n", device_type);
2588         else if (!removable)
2589                 printk(KERN_ERR "ide-tape: The removable flag is not set\n");
2590         else if (packet_size != 0) {
2591                 printk(KERN_ERR "ide-tape: Packet size (0x%02x) is not 12"
2592                                 " bytes\n", packet_size);
2593         } else
2594                 return 1;
2595         return 0;
2596 }
2597
2598 static void idetape_get_inquiry_results(ide_drive_t *drive)
2599 {
2600         idetape_tape_t *tape = drive->driver_data;
2601         struct ide_atapi_pc pc;
2602         char fw_rev[6], vendor_id[10], product_id[18];
2603
2604         idetape_create_inquiry_cmd(&pc);
2605         if (idetape_queue_pc_tail(drive, &pc)) {
2606                 printk(KERN_ERR "ide-tape: %s: can't get INQUIRY results\n",
2607                                 tape->name);
2608                 return;
2609         }
2610         memcpy(vendor_id, &pc.buf[8], 8);
2611         memcpy(product_id, &pc.buf[16], 16);
2612         memcpy(fw_rev, &pc.buf[32], 4);
2613
2614         ide_fixstring(vendor_id, 10, 0);
2615         ide_fixstring(product_id, 18, 0);
2616         ide_fixstring(fw_rev, 6, 0);
2617
2618         printk(KERN_INFO "ide-tape: %s <-> %s: %s %s rev %s\n",
2619                         drive->name, tape->name, vendor_id, product_id, fw_rev);
2620 }
2621
2622 /*
2623  * Ask the tape about its various parameters. In particular, we will adjust our
2624  * data transfer buffer size to the recommended value as returned by the tape.
2625  */
2626 static void idetape_get_mode_sense_results(ide_drive_t *drive)
2627 {
2628         idetape_tape_t *tape = drive->driver_data;
2629         struct ide_atapi_pc pc;
2630         u8 *caps;
2631         u8 speed, max_speed;
2632
2633         idetape_create_mode_sense_cmd(&pc, IDETAPE_CAPABILITIES_PAGE);
2634         if (idetape_queue_pc_tail(drive, &pc)) {
2635                 printk(KERN_ERR "ide-tape: Can't get tape parameters - assuming"
2636                                 " some default values\n");
2637                 tape->blk_size = 512;
2638                 put_unaligned(52,   (u16 *)&tape->caps[12]);
2639                 put_unaligned(540,  (u16 *)&tape->caps[14]);
2640                 put_unaligned(6*52, (u16 *)&tape->caps[16]);
2641                 return;
2642         }
2643         caps = pc.buf + 4 + pc.buf[3];
2644
2645         /* convert to host order and save for later use */
2646         speed = be16_to_cpu(*(u16 *)&caps[14]);
2647         max_speed = be16_to_cpu(*(u16 *)&caps[8]);
2648
2649         put_unaligned(max_speed, (u16 *)&caps[8]);
2650         put_unaligned(be16_to_cpu(*(u16 *)&caps[12]), (u16 *)&caps[12]);
2651         put_unaligned(speed, (u16 *)&caps[14]);
2652         put_unaligned(be16_to_cpu(*(u16 *)&caps[16]), (u16 *)&caps[16]);
2653
2654         if (!speed) {
2655                 printk(KERN_INFO "ide-tape: %s: invalid tape speed "
2656                                 "(assuming 650KB/sec)\n", drive->name);
2657                 put_unaligned(650, (u16 *)&caps[14]);
2658         }
2659         if (!max_speed) {
2660                 printk(KERN_INFO "ide-tape: %s: invalid max_speed "
2661                                 "(assuming 650KB/sec)\n", drive->name);
2662                 put_unaligned(650, (u16 *)&caps[8]);
2663         }
2664
2665         memcpy(&tape->caps, caps, 20);
2666         if (caps[7] & 0x02)
2667                 tape->blk_size = 512;
2668         else if (caps[7] & 0x04)
2669                 tape->blk_size = 1024;
2670 }
2671
2672 #ifdef CONFIG_IDE_PROC_FS
2673 static void idetape_add_settings(ide_drive_t *drive)
2674 {
2675         idetape_tape_t *tape = drive->driver_data;
2676
2677         ide_add_setting(drive, "buffer", SETTING_READ, TYPE_SHORT, 0, 0xffff,
2678                         1, 2, (u16 *)&tape->caps[16], NULL);
2679         ide_add_setting(drive, "speed", SETTING_READ, TYPE_SHORT, 0, 0xffff,
2680                         1, 1, (u16 *)&tape->caps[14], NULL);
2681         ide_add_setting(drive, "buffer_size", SETTING_READ, TYPE_INT, 0, 0xffff,
2682                         1, 1024, &tape->buffer_size, NULL);
2683         ide_add_setting(drive, "tdsc", SETTING_RW, TYPE_INT, IDETAPE_DSC_RW_MIN,
2684                         IDETAPE_DSC_RW_MAX, 1000, HZ, &tape->best_dsc_rw_freq,
2685                         NULL);
2686         ide_add_setting(drive, "dsc_overlap", SETTING_RW, TYPE_BYTE, 0, 1, 1,
2687                         1, &drive->dsc_overlap, NULL);
2688         ide_add_setting(drive, "avg_speed", SETTING_READ, TYPE_INT, 0, 0xffff,
2689                         1, 1, &tape->avg_speed, NULL);
2690         ide_add_setting(drive, "debug_mask", SETTING_RW, TYPE_INT, 0, 0xffff, 1,
2691                         1, &tape->debug_mask, NULL);
2692 }
2693 #else
2694 static inline void idetape_add_settings(ide_drive_t *drive) { ; }
2695 #endif
2696
2697 /*
2698  * The function below is called to:
2699  *
2700  * 1. Initialize our various state variables.
2701  * 2. Ask the tape for its capabilities.
2702  * 3. Allocate a buffer which will be used for data transfer. The buffer size
2703  * is chosen based on the recommendation which we received in step 2.
2704  *
2705  * Note that at this point ide.c already assigned us an irq, so that we can
2706  * queue requests here and wait for their completion.
2707  */
2708 static void idetape_setup(ide_drive_t *drive, idetape_tape_t *tape, int minor)
2709 {
2710         unsigned long t;
2711         int speed;
2712         int buffer_size;
2713         u8 gcw[2];
2714         u16 *ctl = (u16 *)&tape->caps[12];
2715
2716         spin_lock_init(&tape->lock);
2717         drive->dsc_overlap = 1;
2718         if (drive->hwif->host_flags & IDE_HFLAG_NO_DSC) {
2719                 printk(KERN_INFO "ide-tape: %s: disabling DSC overlap\n",
2720                                  tape->name);
2721                 drive->dsc_overlap = 0;
2722         }
2723         /* Seagate Travan drives do not support DSC overlap. */
2724         if (strstr(drive->id->model, "Seagate STT3401"))
2725                 drive->dsc_overlap = 0;
2726         tape->minor = minor;
2727         tape->name[0] = 'h';
2728         tape->name[1] = 't';
2729         tape->name[2] = '0' + minor;
2730         tape->chrdev_dir = IDETAPE_DIR_NONE;
2731         tape->pc = tape->pc_stack;
2732         *((unsigned short *) &gcw) = drive->id->config;
2733
2734         /* Command packet DRQ type */
2735         if (((gcw[0] & 0x60) >> 5) == 1)
2736                 set_bit(IDETAPE_FLAG_DRQ_INTERRUPT, &tape->flags);
2737
2738         idetape_get_inquiry_results(drive);
2739         idetape_get_mode_sense_results(drive);
2740         ide_tape_get_bsize_from_bdesc(drive);
2741         tape->user_bs_factor = 1;
2742         tape->buffer_size = *ctl * tape->blk_size;
2743         while (tape->buffer_size > 0xffff) {
2744                 printk(KERN_NOTICE "ide-tape: decreasing stage size\n");
2745                 *ctl /= 2;
2746                 tape->buffer_size = *ctl * tape->blk_size;
2747         }
2748         buffer_size = tape->buffer_size;
2749         tape->pages_per_stage = buffer_size / PAGE_SIZE;
2750         if (buffer_size % PAGE_SIZE) {
2751                 tape->pages_per_stage++;
2752                 tape->excess_bh_size = PAGE_SIZE - buffer_size % PAGE_SIZE;
2753         }
2754
2755         /* select the "best" DSC read/write polling freq */
2756         speed = max(*(u16 *)&tape->caps[14], *(u16 *)&tape->caps[8]);
2757
2758         t = (IDETAPE_FIFO_THRESHOLD * tape->buffer_size * HZ) / (speed * 1000);
2759
2760         /*
2761          * Ensure that the number we got makes sense; limit it within
2762          * IDETAPE_DSC_RW_MIN and IDETAPE_DSC_RW_MAX.
2763          */
2764         tape->best_dsc_rw_freq = max_t(unsigned long,
2765                                 min_t(unsigned long, t, IDETAPE_DSC_RW_MAX),
2766                                 IDETAPE_DSC_RW_MIN);
2767         printk(KERN_INFO "ide-tape: %s <-> %s: %dKBps, %d*%dkB buffer, "
2768                 "%lums tDSC%s\n",
2769                 drive->name, tape->name, *(u16 *)&tape->caps[14],
2770                 (*(u16 *)&tape->caps[16] * 512) / tape->buffer_size,
2771                 tape->buffer_size / 1024,
2772                 tape->best_dsc_rw_freq * 1000 / HZ,
2773                 drive->using_dma ? ", DMA":"");
2774
2775         idetape_add_settings(drive);
2776 }
2777
2778 static void ide_tape_remove(ide_drive_t *drive)
2779 {
2780         idetape_tape_t *tape = drive->driver_data;
2781
2782         ide_proc_unregister_driver(drive, tape->driver);
2783
2784         ide_unregister_region(tape->disk);
2785
2786         ide_tape_put(tape);
2787 }
2788
2789 static void ide_tape_release(struct kref *kref)
2790 {
2791         struct ide_tape_obj *tape = to_ide_tape(kref);
2792         ide_drive_t *drive = tape->drive;
2793         struct gendisk *g = tape->disk;
2794
2795         BUG_ON(tape->merge_stage_size);
2796
2797         drive->dsc_overlap = 0;
2798         drive->driver_data = NULL;
2799         device_destroy(idetape_sysfs_class, MKDEV(IDETAPE_MAJOR, tape->minor));
2800         device_destroy(idetape_sysfs_class,
2801                         MKDEV(IDETAPE_MAJOR, tape->minor + 128));
2802         idetape_devs[tape->minor] = NULL;
2803         g->private_data = NULL;
2804         put_disk(g);
2805         kfree(tape);
2806 }
2807
2808 #ifdef CONFIG_IDE_PROC_FS
2809 static int proc_idetape_read_name
2810         (char *page, char **start, off_t off, int count, int *eof, void *data)
2811 {
2812         ide_drive_t     *drive = (ide_drive_t *) data;
2813         idetape_tape_t  *tape = drive->driver_data;
2814         char            *out = page;
2815         int             len;
2816
2817         len = sprintf(out, "%s\n", tape->name);
2818         PROC_IDE_READ_RETURN(page, start, off, count, eof, len);
2819 }
2820
2821 static ide_proc_entry_t idetape_proc[] = {
2822         { "capacity",   S_IFREG|S_IRUGO,        proc_ide_read_capacity, NULL },
2823         { "name",       S_IFREG|S_IRUGO,        proc_idetape_read_name, NULL },
2824         { NULL, 0, NULL, NULL }
2825 };
2826 #endif
2827
2828 static int ide_tape_probe(ide_drive_t *);
2829
2830 static ide_driver_t idetape_driver = {
2831         .gen_driver = {
2832                 .owner          = THIS_MODULE,
2833                 .name           = "ide-tape",
2834                 .bus            = &ide_bus_type,
2835         },
2836         .probe                  = ide_tape_probe,
2837         .remove                 = ide_tape_remove,
2838         .version                = IDETAPE_VERSION,
2839         .media                  = ide_tape,
2840         .supports_dsc_overlap   = 1,
2841         .do_request             = idetape_do_request,
2842         .end_request            = idetape_end_request,
2843         .error                  = __ide_error,
2844         .abort                  = __ide_abort,
2845 #ifdef CONFIG_IDE_PROC_FS
2846         .proc                   = idetape_proc,
2847 #endif
2848 };
2849
2850 /* Our character device supporting functions, passed to register_chrdev. */
2851 static const struct file_operations idetape_fops = {
2852         .owner          = THIS_MODULE,
2853         .read           = idetape_chrdev_read,
2854         .write          = idetape_chrdev_write,
2855         .ioctl          = idetape_chrdev_ioctl,
2856         .open           = idetape_chrdev_open,
2857         .release        = idetape_chrdev_release,
2858 };
2859
2860 static int idetape_open(struct inode *inode, struct file *filp)
2861 {
2862         struct gendisk *disk = inode->i_bdev->bd_disk;
2863         struct ide_tape_obj *tape;
2864
2865         tape = ide_tape_get(disk);
2866         if (!tape)
2867                 return -ENXIO;
2868
2869         return 0;
2870 }
2871
2872 static int idetape_release(struct inode *inode, struct file *filp)
2873 {
2874         struct gendisk *disk = inode->i_bdev->bd_disk;
2875         struct ide_tape_obj *tape = ide_tape_g(disk);
2876
2877         ide_tape_put(tape);
2878
2879         return 0;
2880 }
2881
2882 static int idetape_ioctl(struct inode *inode, struct file *file,
2883                         unsigned int cmd, unsigned long arg)
2884 {
2885         struct block_device *bdev = inode->i_bdev;
2886         struct ide_tape_obj *tape = ide_tape_g(bdev->bd_disk);
2887         ide_drive_t *drive = tape->drive;
2888         int err = generic_ide_ioctl(drive, file, bdev, cmd, arg);
2889         if (err == -EINVAL)
2890                 err = idetape_blkdev_ioctl(drive, cmd, arg);
2891         return err;
2892 }
2893
2894 static struct block_device_operations idetape_block_ops = {
2895         .owner          = THIS_MODULE,
2896         .open           = idetape_open,
2897         .release        = idetape_release,
2898         .ioctl          = idetape_ioctl,
2899 };
2900
2901 static int ide_tape_probe(ide_drive_t *drive)
2902 {
2903         idetape_tape_t *tape;
2904         struct gendisk *g;
2905         int minor;
2906
2907         if (!strstr("ide-tape", drive->driver_req))
2908                 goto failed;
2909         if (!drive->present)
2910                 goto failed;
2911         if (drive->media != ide_tape)
2912                 goto failed;
2913         if (!idetape_identify_device(drive)) {
2914                 printk(KERN_ERR "ide-tape: %s: not supported by this version of"
2915                                 " the driver\n", drive->name);
2916                 goto failed;
2917         }
2918         if (drive->scsi) {
2919                 printk(KERN_INFO "ide-tape: passing drive %s to ide-scsi"
2920                                  " emulation.\n", drive->name);
2921                 goto failed;
2922         }
2923         tape = kzalloc(sizeof(idetape_tape_t), GFP_KERNEL);
2924         if (tape == NULL) {
2925                 printk(KERN_ERR "ide-tape: %s: Can't allocate a tape struct\n",
2926                                 drive->name);
2927                 goto failed;
2928         }
2929
2930         g = alloc_disk(1 << PARTN_BITS);
2931         if (!g)
2932                 goto out_free_tape;
2933
2934         ide_init_disk(g, drive);
2935
2936         ide_proc_register_driver(drive, &idetape_driver);
2937
2938         kref_init(&tape->kref);
2939
2940         tape->drive = drive;
2941         tape->driver = &idetape_driver;
2942         tape->disk = g;
2943
2944         g->private_data = &tape->driver;
2945
2946         drive->driver_data = tape;
2947
2948         mutex_lock(&idetape_ref_mutex);
2949         for (minor = 0; idetape_devs[minor]; minor++)
2950                 ;
2951         idetape_devs[minor] = tape;
2952         mutex_unlock(&idetape_ref_mutex);
2953
2954         idetape_setup(drive, tape, minor);
2955
2956         device_create(idetape_sysfs_class, &drive->gendev,
2957                       MKDEV(IDETAPE_MAJOR, minor), "%s", tape->name);
2958         device_create(idetape_sysfs_class, &drive->gendev,
2959                         MKDEV(IDETAPE_MAJOR, minor + 128), "n%s", tape->name);
2960
2961         g->fops = &idetape_block_ops;
2962         ide_register_region(g);
2963
2964         return 0;
2965
2966 out_free_tape:
2967         kfree(tape);
2968 failed:
2969         return -ENODEV;
2970 }
2971
2972 static void __exit idetape_exit(void)
2973 {
2974         driver_unregister(&idetape_driver.gen_driver);
2975         class_destroy(idetape_sysfs_class);
2976         unregister_chrdev(IDETAPE_MAJOR, "ht");
2977 }
2978
2979 static int __init idetape_init(void)
2980 {
2981         int error = 1;
2982         idetape_sysfs_class = class_create(THIS_MODULE, "ide_tape");
2983         if (IS_ERR(idetape_sysfs_class)) {
2984                 idetape_sysfs_class = NULL;
2985                 printk(KERN_ERR "Unable to create sysfs class for ide tapes\n");
2986                 error = -EBUSY;
2987                 goto out;
2988         }
2989
2990         if (register_chrdev(IDETAPE_MAJOR, "ht", &idetape_fops)) {
2991                 printk(KERN_ERR "ide-tape: Failed to register chrdev"
2992                                 " interface\n");
2993                 error = -EBUSY;
2994                 goto out_free_class;
2995         }
2996
2997         error = driver_register(&idetape_driver.gen_driver);
2998         if (error)
2999                 goto out_free_driver;
3000
3001         return 0;
3002
3003 out_free_driver:
3004         driver_unregister(&idetape_driver.gen_driver);
3005 out_free_class:
3006         class_destroy(idetape_sysfs_class);
3007 out:
3008         return error;
3009 }
3010
3011 MODULE_ALIAS("ide:*m-tape*");
3012 module_init(idetape_init);
3013 module_exit(idetape_exit);
3014 MODULE_ALIAS_CHARDEV_MAJOR(IDETAPE_MAJOR);
3015 MODULE_DESCRIPTION("ATAPI Streaming TAPE Driver");
3016 MODULE_LICENSE("GPL");