]> Pileus Git - ~andy/linux/blob - drivers/ide/ide-tape.c
fc61bbef3bb940a78e088eaf75e31240ea4f7a15
[~andy/linux] / 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 DRV_NAME "ide-tape"
19
20 #define IDETAPE_VERSION "1.20"
21
22 #include <linux/module.h>
23 #include <linux/types.h>
24 #include <linux/string.h>
25 #include <linux/kernel.h>
26 #include <linux/delay.h>
27 #include <linux/timer.h>
28 #include <linux/mm.h>
29 #include <linux/interrupt.h>
30 #include <linux/jiffies.h>
31 #include <linux/major.h>
32 #include <linux/errno.h>
33 #include <linux/genhd.h>
34 #include <linux/slab.h>
35 #include <linux/pci.h>
36 #include <linux/ide.h>
37 #include <linux/smp_lock.h>
38 #include <linux/completion.h>
39 #include <linux/bitops.h>
40 #include <linux/mutex.h>
41 #include <scsi/scsi.h>
42
43 #include <asm/byteorder.h>
44 #include <linux/irq.h>
45 #include <linux/uaccess.h>
46 #include <linux/io.h>
47 #include <asm/unaligned.h>
48 #include <linux/mtio.h>
49
50 enum {
51         /* output errors only */
52         DBG_ERR =               (1 << 0),
53         /* output all sense key/asc */
54         DBG_SENSE =             (1 << 1),
55         /* info regarding all chrdev-related procedures */
56         DBG_CHRDEV =            (1 << 2),
57         /* all remaining procedures */
58         DBG_PROCS =             (1 << 3),
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  * The following parameter is used to select the point in the internal tape fifo
85  * in which we will start to refill the buffer. Decreasing the following
86  * parameter will improve the system's latency and interactive response, while
87  * using a high value might improve system throughput.
88  */
89 #define IDETAPE_FIFO_THRESHOLD          2
90
91 /*
92  * DSC polling parameters.
93  *
94  * Polling for DSC (a single bit in the status register) is a very important
95  * function in ide-tape. There are two cases in which we poll for DSC:
96  *
97  * 1. Before a read/write packet command, to ensure that we can transfer data
98  * from/to the tape's data buffers, without causing an actual media access.
99  * In case the tape is not ready yet, we take out our request from the device
100  * request queue, so that ide.c could service requests from the other device
101  * on the same interface in the meantime.
102  *
103  * 2. After the successful initialization of a "media access packet command",
104  * which is a command that can take a long time to complete (the interval can
105  * range from several seconds to even an hour). Again, we postpone our request
106  * in the middle to free the bus for the other device. The polling frequency
107  * here should be lower than the read/write frequency since those media access
108  * commands are slow. We start from a "fast" frequency - IDETAPE_DSC_MA_FAST
109  * (1 second), and if we don't receive DSC after IDETAPE_DSC_MA_THRESHOLD
110  * (5 min), we switch it to a lower frequency - IDETAPE_DSC_MA_SLOW (1 min).
111  *
112  * We also set a timeout for the timer, in case something goes wrong. The
113  * timeout should be longer then the maximum execution time of a tape operation.
114  */
115
116 /* DSC timings. */
117 #define IDETAPE_DSC_RW_MIN              5*HZ/100        /* 50 msec */
118 #define IDETAPE_DSC_RW_MAX              40*HZ/100       /* 400 msec */
119 #define IDETAPE_DSC_RW_TIMEOUT          2*60*HZ         /* 2 minutes */
120 #define IDETAPE_DSC_MA_FAST             2*HZ            /* 2 seconds */
121 #define IDETAPE_DSC_MA_THRESHOLD        5*60*HZ         /* 5 minutes */
122 #define IDETAPE_DSC_MA_SLOW             30*HZ           /* 30 seconds */
123 #define IDETAPE_DSC_MA_TIMEOUT          2*60*60*HZ      /* 2 hours */
124
125 /*************************** End of tunable parameters ***********************/
126
127 /* tape directions */
128 enum {
129         IDETAPE_DIR_NONE  = (1 << 0),
130         IDETAPE_DIR_READ  = (1 << 1),
131         IDETAPE_DIR_WRITE = (1 << 2),
132 };
133
134 struct idetape_bh {
135         u32 b_size;
136         atomic_t b_count;
137         struct idetape_bh *b_reqnext;
138         char *b_data;
139 };
140
141 /* Tape door status */
142 #define DOOR_UNLOCKED                   0
143 #define DOOR_LOCKED                     1
144 #define DOOR_EXPLICITLY_LOCKED          2
145
146 /* Some defines for the SPACE command */
147 #define IDETAPE_SPACE_OVER_FILEMARK     1
148 #define IDETAPE_SPACE_TO_EOD            3
149
150 /* Some defines for the LOAD UNLOAD command */
151 #define IDETAPE_LU_LOAD_MASK            1
152 #define IDETAPE_LU_RETENSION_MASK       2
153 #define IDETAPE_LU_EOT_MASK             4
154
155 /* Structures related to the SELECT SENSE / MODE SENSE packet commands. */
156 #define IDETAPE_BLOCK_DESCRIPTOR        0
157 #define IDETAPE_CAPABILITIES_PAGE       0x2a
158
159 /*
160  * Most of our global data which we need to save even as we leave the driver due
161  * to an interrupt or a timer event is stored in the struct defined below.
162  */
163 typedef struct ide_tape_obj {
164         ide_drive_t             *drive;
165         struct ide_driver       *driver;
166         struct gendisk          *disk;
167         struct device           dev;
168
169         /* used by REQ_IDETAPE_{READ,WRITE} requests */
170         struct ide_atapi_pc queued_pc;
171
172         /*
173          * DSC polling variables.
174          *
175          * While polling for DSC we use postponed_rq to postpone the current
176          * request so that ide.c will be able to service pending requests on the
177          * other device. Note that at most we will have only one DSC (usually
178          * data transfer) request in the device request queue.
179          */
180         struct request *postponed_rq;
181         /* The time in which we started polling for DSC */
182         unsigned long dsc_polling_start;
183         /* Timer used to poll for dsc */
184         struct timer_list dsc_timer;
185         /* Read/Write dsc polling frequency */
186         unsigned long best_dsc_rw_freq;
187         unsigned long dsc_poll_freq;
188         unsigned long dsc_timeout;
189
190         /* Read position information */
191         u8 partition;
192         /* Current block */
193         unsigned int first_frame;
194
195         /* Last error information */
196         u8 sense_key, asc, ascq;
197
198         /* Character device operation */
199         unsigned int minor;
200         /* device name */
201         char name[4];
202         /* Current character device data transfer direction */
203         u8 chrdev_dir;
204
205         /* tape block size, usually 512 or 1024 bytes */
206         unsigned short blk_size;
207         int user_bs_factor;
208
209         /* Copy of the tape's Capabilities and Mechanical Page */
210         u8 caps[20];
211
212         /*
213          * Active data transfer request parameters.
214          *
215          * At most, there is only one ide-tape originated data transfer request
216          * in the device request queue. This allows ide.c to easily service
217          * requests from the other device when we postpone our active request.
218          */
219
220         /* Data buffer size chosen based on the tape's recommendation */
221         int buffer_size;
222         /* merge buffer */
223         struct idetape_bh *merge_bh;
224         /* size of the merge buffer */
225         int merge_bh_size;
226         /* pointer to current buffer head within the merge buffer */
227         struct idetape_bh *bh;
228         char *b_data;
229         int b_count;
230
231         int pages_per_buffer;
232         /* Wasted space in each stage */
233         int excess_bh_size;
234
235         /* Measures average tape speed */
236         unsigned long avg_time;
237         int avg_size;
238         int avg_speed;
239
240         /* the door is currently locked */
241         int door_locked;
242         /* the tape hardware is write protected */
243         char drv_write_prot;
244         /* the tape is write protected (hardware or opened as read-only) */
245         char write_prot;
246
247         u32 debug_mask;
248 } idetape_tape_t;
249
250 static DEFINE_MUTEX(idetape_ref_mutex);
251
252 static struct class *idetape_sysfs_class;
253
254 static void ide_tape_release(struct device *);
255
256 static struct ide_tape_obj *ide_tape_get(struct gendisk *disk)
257 {
258         struct ide_tape_obj *tape = NULL;
259
260         mutex_lock(&idetape_ref_mutex);
261         tape = ide_drv_g(disk, ide_tape_obj);
262         if (tape) {
263                 if (ide_device_get(tape->drive))
264                         tape = NULL;
265                 else
266                         get_device(&tape->dev);
267         }
268         mutex_unlock(&idetape_ref_mutex);
269         return tape;
270 }
271
272 static void ide_tape_put(struct ide_tape_obj *tape)
273 {
274         ide_drive_t *drive = tape->drive;
275
276         mutex_lock(&idetape_ref_mutex);
277         put_device(&tape->dev);
278         ide_device_put(drive);
279         mutex_unlock(&idetape_ref_mutex);
280 }
281
282 /*
283  * The variables below are used for the character device interface. Additional
284  * state variables are defined in our ide_drive_t structure.
285  */
286 static struct ide_tape_obj *idetape_devs[MAX_HWIFS * MAX_DRIVES];
287
288 static struct ide_tape_obj *ide_tape_chrdev_get(unsigned int i)
289 {
290         struct ide_tape_obj *tape = NULL;
291
292         mutex_lock(&idetape_ref_mutex);
293         tape = idetape_devs[i];
294         if (tape)
295                 get_device(&tape->dev);
296         mutex_unlock(&idetape_ref_mutex);
297         return tape;
298 }
299
300 static void idetape_input_buffers(ide_drive_t *drive, struct ide_atapi_pc *pc,
301                                   unsigned int bcount)
302 {
303         struct idetape_bh *bh = pc->bh;
304         int count;
305
306         while (bcount) {
307                 if (bh == NULL) {
308                         printk(KERN_ERR "ide-tape: bh == NULL in "
309                                 "idetape_input_buffers\n");
310                         ide_pad_transfer(drive, 0, bcount);
311                         return;
312                 }
313                 count = min(
314                         (unsigned int)(bh->b_size - atomic_read(&bh->b_count)),
315                         bcount);
316                 drive->hwif->tp_ops->input_data(drive, NULL, bh->b_data +
317                                         atomic_read(&bh->b_count), count);
318                 bcount -= count;
319                 atomic_add(count, &bh->b_count);
320                 if (atomic_read(&bh->b_count) == bh->b_size) {
321                         bh = bh->b_reqnext;
322                         if (bh)
323                                 atomic_set(&bh->b_count, 0);
324                 }
325         }
326         pc->bh = bh;
327 }
328
329 static void idetape_output_buffers(ide_drive_t *drive, struct ide_atapi_pc *pc,
330                                    unsigned int bcount)
331 {
332         struct idetape_bh *bh = pc->bh;
333         int count;
334
335         while (bcount) {
336                 if (bh == NULL) {
337                         printk(KERN_ERR "ide-tape: bh == NULL in %s\n",
338                                         __func__);
339                         return;
340                 }
341                 count = min((unsigned int)pc->b_count, (unsigned int)bcount);
342                 drive->hwif->tp_ops->output_data(drive, NULL, pc->b_data, count);
343                 bcount -= count;
344                 pc->b_data += count;
345                 pc->b_count -= count;
346                 if (!pc->b_count) {
347                         bh = bh->b_reqnext;
348                         pc->bh = bh;
349                         if (bh) {
350                                 pc->b_data = bh->b_data;
351                                 pc->b_count = atomic_read(&bh->b_count);
352                         }
353                 }
354         }
355 }
356
357 static void idetape_update_buffers(ide_drive_t *drive, struct ide_atapi_pc *pc)
358 {
359         struct idetape_bh *bh = pc->bh;
360         int count;
361         unsigned int bcount = pc->xferred;
362
363         if (pc->flags & PC_FLAG_WRITING)
364                 return;
365         while (bcount) {
366                 if (bh == NULL) {
367                         printk(KERN_ERR "ide-tape: bh == NULL in %s\n",
368                                         __func__);
369                         return;
370                 }
371                 count = min((unsigned int)bh->b_size, (unsigned int)bcount);
372                 atomic_set(&bh->b_count, count);
373                 if (atomic_read(&bh->b_count) == bh->b_size)
374                         bh = bh->b_reqnext;
375                 bcount -= count;
376         }
377         pc->bh = bh;
378 }
379
380 /*
381  * called on each failed packet command retry to analyze the request sense. We
382  * currently do not utilize this information.
383  */
384 static void idetape_analyze_error(ide_drive_t *drive, u8 *sense)
385 {
386         idetape_tape_t *tape = drive->driver_data;
387         struct ide_atapi_pc *pc = drive->failed_pc;
388
389         tape->sense_key = sense[2] & 0xF;
390         tape->asc       = sense[12];
391         tape->ascq      = sense[13];
392
393         debug_log(DBG_ERR, "pc = %x, sense key = %x, asc = %x, ascq = %x\n",
394                  pc->c[0], tape->sense_key, tape->asc, tape->ascq);
395
396         /* Correct pc->xferred by asking the tape.       */
397         if (pc->flags & PC_FLAG_DMA_ERROR) {
398                 pc->xferred = pc->req_xfer -
399                         tape->blk_size *
400                         get_unaligned_be32(&sense[3]);
401                 idetape_update_buffers(drive, pc);
402         }
403
404         /*
405          * If error was the result of a zero-length read or write command,
406          * with sense key=5, asc=0x22, ascq=0, let it slide.  Some drives
407          * (i.e. Seagate STT3401A Travan) don't support 0-length read/writes.
408          */
409         if ((pc->c[0] == READ_6 || pc->c[0] == WRITE_6)
410             /* length == 0 */
411             && pc->c[4] == 0 && pc->c[3] == 0 && pc->c[2] == 0) {
412                 if (tape->sense_key == 5) {
413                         /* don't report an error, everything's ok */
414                         pc->error = 0;
415                         /* don't retry read/write */
416                         pc->flags |= PC_FLAG_ABORT;
417                 }
418         }
419         if (pc->c[0] == READ_6 && (sense[2] & 0x80)) {
420                 pc->error = IDE_DRV_ERROR_FILEMARK;
421                 pc->flags |= PC_FLAG_ABORT;
422         }
423         if (pc->c[0] == WRITE_6) {
424                 if ((sense[2] & 0x40) || (tape->sense_key == 0xd
425                      && tape->asc == 0x0 && tape->ascq == 0x2)) {
426                         pc->error = IDE_DRV_ERROR_EOD;
427                         pc->flags |= PC_FLAG_ABORT;
428                 }
429         }
430         if (pc->c[0] == READ_6 || pc->c[0] == WRITE_6) {
431                 if (tape->sense_key == 8) {
432                         pc->error = IDE_DRV_ERROR_EOD;
433                         pc->flags |= PC_FLAG_ABORT;
434                 }
435                 if (!(pc->flags & PC_FLAG_ABORT) &&
436                     pc->xferred)
437                         pc->retries = IDETAPE_MAX_PC_RETRIES + 1;
438         }
439 }
440
441 /* Free data buffers completely. */
442 static void ide_tape_kfree_buffer(idetape_tape_t *tape)
443 {
444         struct idetape_bh *prev_bh, *bh = tape->merge_bh;
445
446         while (bh) {
447                 u32 size = bh->b_size;
448
449                 while (size) {
450                         unsigned int order = fls(size >> PAGE_SHIFT)-1;
451
452                         if (bh->b_data)
453                                 free_pages((unsigned long)bh->b_data, order);
454
455                         size &= (order-1);
456                         bh->b_data += (1 << order) * PAGE_SIZE;
457                 }
458                 prev_bh = bh;
459                 bh = bh->b_reqnext;
460                 kfree(prev_bh);
461         }
462 }
463
464 static void ide_tape_handle_dsc(ide_drive_t *);
465
466 static void ide_tape_callback(ide_drive_t *drive, int dsc)
467 {
468         idetape_tape_t *tape = drive->driver_data;
469         struct ide_atapi_pc *pc = drive->pc;
470         struct request *rq = drive->hwif->rq;
471         int uptodate = pc->error ? 0 : 1;
472         int err = uptodate ? 0 : IDE_DRV_ERROR_GENERAL;
473
474         debug_log(DBG_PROCS, "Enter %s\n", __func__);
475
476         if (dsc)
477                 ide_tape_handle_dsc(drive);
478
479         if (drive->failed_pc == pc)
480                 drive->failed_pc = NULL;
481
482         if (pc->c[0] == REQUEST_SENSE) {
483                 if (uptodate)
484                         idetape_analyze_error(drive, pc->buf);
485                 else
486                         printk(KERN_ERR "ide-tape: Error in REQUEST SENSE "
487                                         "itself - Aborting request!\n");
488         } else if (pc->c[0] == READ_6 || pc->c[0] == WRITE_6) {
489                 int blocks = pc->xferred / tape->blk_size;
490
491                 tape->avg_size += blocks * tape->blk_size;
492
493                 if (time_after_eq(jiffies, tape->avg_time + HZ)) {
494                         tape->avg_speed = tape->avg_size * HZ /
495                                 (jiffies - tape->avg_time) / 1024;
496                         tape->avg_size = 0;
497                         tape->avg_time = jiffies;
498                 }
499
500                 tape->first_frame += blocks;
501                 rq->current_nr_sectors -= blocks;
502
503                 if (pc->error) {
504                         uptodate = 0;
505                         err = pc->error;
506                 }
507         } else if (pc->c[0] == READ_POSITION && uptodate) {
508                 u8 *readpos = pc->buf;
509
510                 debug_log(DBG_SENSE, "BOP - %s\n",
511                                 (readpos[0] & 0x80) ? "Yes" : "No");
512                 debug_log(DBG_SENSE, "EOP - %s\n",
513                                 (readpos[0] & 0x40) ? "Yes" : "No");
514
515                 if (readpos[0] & 0x4) {
516                         printk(KERN_INFO "ide-tape: Block location is unknown"
517                                          "to the tape\n");
518                         clear_bit(IDE_AFLAG_ADDRESS_VALID, &drive->atapi_flags);
519                         uptodate = 0;
520                         err = IDE_DRV_ERROR_GENERAL;
521                 } else {
522                         debug_log(DBG_SENSE, "Block Location - %u\n",
523                                         be32_to_cpup((__be32 *)&readpos[4]));
524
525                         tape->partition = readpos[1];
526                         tape->first_frame = be32_to_cpup((__be32 *)&readpos[4]);
527                         set_bit(IDE_AFLAG_ADDRESS_VALID, &drive->atapi_flags);
528                 }
529         }
530
531         rq->errors = err;
532
533         if (uptodate == 0)
534                 drive->failed_pc = NULL;
535
536         if (blk_special_request(rq))
537                 ide_complete_rq(drive, 0);
538         else
539                 ide_end_request(drive, uptodate, 0);
540 }
541
542 /*
543  * Postpone the current request so that ide.c will be able to service requests
544  * from another device on the same port while we are polling for DSC.
545  */
546 static void idetape_postpone_request(ide_drive_t *drive)
547 {
548         idetape_tape_t *tape = drive->driver_data;
549
550         debug_log(DBG_PROCS, "Enter %s\n", __func__);
551
552         tape->postponed_rq = drive->hwif->rq;
553
554         ide_stall_queue(drive, tape->dsc_poll_freq);
555 }
556
557 static void ide_tape_handle_dsc(ide_drive_t *drive)
558 {
559         idetape_tape_t *tape = drive->driver_data;
560
561         /* Media access command */
562         tape->dsc_polling_start = jiffies;
563         tape->dsc_poll_freq = IDETAPE_DSC_MA_FAST;
564         tape->dsc_timeout = jiffies + IDETAPE_DSC_MA_TIMEOUT;
565         /* Allow ide.c to handle other requests */
566         idetape_postpone_request(drive);
567 }
568
569 static int ide_tape_io_buffers(ide_drive_t *drive, struct ide_atapi_pc *pc,
570                                 unsigned int bcount, int write)
571 {
572         if (write)
573                 idetape_output_buffers(drive, pc, bcount);
574         else
575                 idetape_input_buffers(drive, pc, bcount);
576
577         return bcount;
578 }
579
580 /*
581  * Packet Command Interface
582  *
583  * The current Packet Command is available in drive->pc, and will not change
584  * until we finish handling it. Each packet command is associated with a
585  * callback function that will be called when the command is finished.
586  *
587  * The handling will be done in three stages:
588  *
589  * 1. idetape_issue_pc will send the packet command to the drive, and will set
590  * the interrupt handler to ide_pc_intr.
591  *
592  * 2. On each interrupt, ide_pc_intr will be called. This step will be
593  * repeated until the device signals us that no more interrupts will be issued.
594  *
595  * 3. ATAPI Tape media access commands have immediate status with a delayed
596  * process. In case of a successful initiation of a media access packet command,
597  * the DSC bit will be set when the actual execution of the command is finished.
598  * Since the tape drive will not issue an interrupt, we have to poll for this
599  * event. In this case, we define the request as "low priority request" by
600  * setting rq_status to IDETAPE_RQ_POSTPONED, set a timer to poll for DSC and
601  * exit the driver.
602  *
603  * ide.c will then give higher priority to requests which originate from the
604  * other device, until will change rq_status to RQ_ACTIVE.
605  *
606  * 4. When the packet command is finished, it will be checked for errors.
607  *
608  * 5. In case an error was found, we queue a request sense packet command in
609  * front of the request queue and retry the operation up to
610  * IDETAPE_MAX_PC_RETRIES times.
611  *
612  * 6. In case no error was found, or we decided to give up and not to retry
613  * again, the callback function will be called and then we will handle the next
614  * request.
615  */
616
617 static ide_startstop_t idetape_issue_pc(ide_drive_t *drive,
618                 struct ide_atapi_pc *pc)
619 {
620         idetape_tape_t *tape = drive->driver_data;
621
622         if (drive->pc->c[0] == REQUEST_SENSE &&
623             pc->c[0] == REQUEST_SENSE) {
624                 printk(KERN_ERR "ide-tape: possible ide-tape.c bug - "
625                         "Two request sense in serial were issued\n");
626         }
627
628         if (drive->failed_pc == NULL && pc->c[0] != REQUEST_SENSE)
629                 drive->failed_pc = pc;
630
631         /* Set the current packet command */
632         drive->pc = pc;
633
634         if (pc->retries > IDETAPE_MAX_PC_RETRIES ||
635                 (pc->flags & PC_FLAG_ABORT)) {
636                 /*
637                  * We will "abort" retrying a packet command in case legitimate
638                  * error code was received (crossing a filemark, or end of the
639                  * media, for example).
640                  */
641                 if (!(pc->flags & PC_FLAG_ABORT)) {
642                         if (!(pc->c[0] == TEST_UNIT_READY &&
643                               tape->sense_key == 2 && tape->asc == 4 &&
644                              (tape->ascq == 1 || tape->ascq == 8))) {
645                                 printk(KERN_ERR "ide-tape: %s: I/O error, "
646                                                 "pc = %2x, key = %2x, "
647                                                 "asc = %2x, ascq = %2x\n",
648                                                 tape->name, pc->c[0],
649                                                 tape->sense_key, tape->asc,
650                                                 tape->ascq);
651                         }
652                         /* Giving up */
653                         pc->error = IDE_DRV_ERROR_GENERAL;
654                 }
655                 drive->failed_pc = NULL;
656                 drive->pc_callback(drive, 0);
657                 return ide_stopped;
658         }
659         debug_log(DBG_SENSE, "Retry #%d, cmd = %02X\n", pc->retries, pc->c[0]);
660
661         pc->retries++;
662
663         return ide_issue_pc(drive);
664 }
665
666 /* A mode sense command is used to "sense" tape parameters. */
667 static void idetape_create_mode_sense_cmd(struct ide_atapi_pc *pc, u8 page_code)
668 {
669         ide_init_pc(pc);
670         pc->c[0] = MODE_SENSE;
671         if (page_code != IDETAPE_BLOCK_DESCRIPTOR)
672                 /* DBD = 1 - Don't return block descriptors */
673                 pc->c[1] = 8;
674         pc->c[2] = page_code;
675         /*
676          * Changed pc->c[3] to 0 (255 will at best return unused info).
677          *
678          * For SCSI this byte is defined as subpage instead of high byte
679          * of length and some IDE drives seem to interpret it this way
680          * and return an error when 255 is used.
681          */
682         pc->c[3] = 0;
683         /* We will just discard data in that case */
684         pc->c[4] = 255;
685         if (page_code == IDETAPE_BLOCK_DESCRIPTOR)
686                 pc->req_xfer = 12;
687         else if (page_code == IDETAPE_CAPABILITIES_PAGE)
688                 pc->req_xfer = 24;
689         else
690                 pc->req_xfer = 50;
691 }
692
693 static ide_startstop_t idetape_media_access_finished(ide_drive_t *drive)
694 {
695         ide_hwif_t *hwif = drive->hwif;
696         idetape_tape_t *tape = drive->driver_data;
697         struct ide_atapi_pc *pc = drive->pc;
698         u8 stat;
699
700         stat = hwif->tp_ops->read_status(hwif);
701
702         if (stat & ATA_DSC) {
703                 if (stat & ATA_ERR) {
704                         /* Error detected */
705                         if (pc->c[0] != TEST_UNIT_READY)
706                                 printk(KERN_ERR "ide-tape: %s: I/O error, ",
707                                                 tape->name);
708                         /* Retry operation */
709                         ide_retry_pc(drive, tape->disk);
710                         return ide_stopped;
711                 }
712                 pc->error = 0;
713         } else {
714                 pc->error = IDE_DRV_ERROR_GENERAL;
715                 drive->failed_pc = NULL;
716         }
717         drive->pc_callback(drive, 0);
718         return ide_stopped;
719 }
720
721 static void ide_tape_create_rw_cmd(idetape_tape_t *tape,
722                                    struct ide_atapi_pc *pc, struct request *rq,
723                                    u8 opcode)
724 {
725         struct idetape_bh *bh = (struct idetape_bh *)rq->special;
726         unsigned int length = rq->current_nr_sectors;
727
728         ide_init_pc(pc);
729         put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]);
730         pc->c[1] = 1;
731         pc->bh = bh;
732         pc->buf = NULL;
733         pc->buf_size = length * tape->blk_size;
734         pc->req_xfer = pc->buf_size;
735         if (pc->req_xfer == tape->buffer_size)
736                 pc->flags |= PC_FLAG_DMA_OK;
737
738         if (opcode == READ_6) {
739                 pc->c[0] = READ_6;
740                 atomic_set(&bh->b_count, 0);
741         } else if (opcode == WRITE_6) {
742                 pc->c[0] = WRITE_6;
743                 pc->flags |= PC_FLAG_WRITING;
744                 pc->b_data = bh->b_data;
745                 pc->b_count = atomic_read(&bh->b_count);
746         }
747
748         memcpy(rq->cmd, pc->c, 12);
749 }
750
751 static ide_startstop_t idetape_do_request(ide_drive_t *drive,
752                                           struct request *rq, sector_t block)
753 {
754         ide_hwif_t *hwif = drive->hwif;
755         idetape_tape_t *tape = drive->driver_data;
756         struct ide_atapi_pc *pc = NULL;
757         struct request *postponed_rq = tape->postponed_rq;
758         u8 stat;
759
760         debug_log(DBG_SENSE, "sector: %llu, nr_sectors: %lu,"
761                         " current_nr_sectors: %u\n",
762                         (unsigned long long)rq->sector, rq->nr_sectors,
763                         rq->current_nr_sectors);
764
765         if (!blk_special_request(rq)) {
766                 /* We do not support buffer cache originated requests. */
767                 printk(KERN_NOTICE "ide-tape: %s: Unsupported request in "
768                         "request queue (%d)\n", drive->name, rq->cmd_type);
769                 ide_end_request(drive, 0, 0);
770                 return ide_stopped;
771         }
772
773         /* Retry a failed packet command */
774         if (drive->failed_pc && drive->pc->c[0] == REQUEST_SENSE) {
775                 pc = drive->failed_pc;
776                 goto out;
777         }
778
779         if (postponed_rq != NULL)
780                 if (rq != postponed_rq) {
781                         printk(KERN_ERR "ide-tape: ide-tape.c bug - "
782                                         "Two DSC requests were queued\n");
783                         rq->errors = IDE_DRV_ERROR_GENERAL;
784                         drive->failed_pc = NULL;
785                         ide_complete_rq(drive, 0);
786                         return ide_stopped;
787                 }
788
789         tape->postponed_rq = NULL;
790
791         /*
792          * If the tape is still busy, postpone our request and service
793          * the other device meanwhile.
794          */
795         stat = hwif->tp_ops->read_status(hwif);
796
797         if ((drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) == 0 &&
798             (rq->cmd[13] & REQ_IDETAPE_PC2) == 0)
799                 set_bit(IDE_AFLAG_IGNORE_DSC, &drive->atapi_flags);
800
801         if (drive->dev_flags & IDE_DFLAG_POST_RESET) {
802                 set_bit(IDE_AFLAG_IGNORE_DSC, &drive->atapi_flags);
803                 drive->dev_flags &= ~IDE_DFLAG_POST_RESET;
804         }
805
806         if (!test_and_clear_bit(IDE_AFLAG_IGNORE_DSC, &drive->atapi_flags) &&
807             (stat & ATA_DSC) == 0) {
808                 if (postponed_rq == NULL) {
809                         tape->dsc_polling_start = jiffies;
810                         tape->dsc_poll_freq = tape->best_dsc_rw_freq;
811                         tape->dsc_timeout = jiffies + IDETAPE_DSC_RW_TIMEOUT;
812                 } else if (time_after(jiffies, tape->dsc_timeout)) {
813                         printk(KERN_ERR "ide-tape: %s: DSC timeout\n",
814                                 tape->name);
815                         if (rq->cmd[13] & REQ_IDETAPE_PC2) {
816                                 idetape_media_access_finished(drive);
817                                 return ide_stopped;
818                         } else {
819                                 return ide_do_reset(drive);
820                         }
821                 } else if (time_after(jiffies,
822                                         tape->dsc_polling_start +
823                                         IDETAPE_DSC_MA_THRESHOLD))
824                         tape->dsc_poll_freq = IDETAPE_DSC_MA_SLOW;
825                 idetape_postpone_request(drive);
826                 return ide_stopped;
827         }
828         if (rq->cmd[13] & REQ_IDETAPE_READ) {
829                 pc = &tape->queued_pc;
830                 ide_tape_create_rw_cmd(tape, pc, rq, READ_6);
831                 goto out;
832         }
833         if (rq->cmd[13] & REQ_IDETAPE_WRITE) {
834                 pc = &tape->queued_pc;
835                 ide_tape_create_rw_cmd(tape, pc, rq, WRITE_6);
836                 goto out;
837         }
838         if (rq->cmd[13] & REQ_IDETAPE_PC1) {
839                 pc = (struct ide_atapi_pc *) rq->buffer;
840                 rq->cmd[13] &= ~(REQ_IDETAPE_PC1);
841                 rq->cmd[13] |= REQ_IDETAPE_PC2;
842                 goto out;
843         }
844         if (rq->cmd[13] & REQ_IDETAPE_PC2) {
845                 idetape_media_access_finished(drive);
846                 return ide_stopped;
847         }
848         BUG();
849
850 out:
851         return idetape_issue_pc(drive, pc);
852 }
853
854 /*
855  * The function below uses __get_free_pages to allocate a data buffer of size
856  * tape->buffer_size (or a bit more). We attempt to combine sequential pages as
857  * much as possible.
858  *
859  * It returns a pointer to the newly allocated buffer, or NULL in case of
860  * failure.
861  */
862 static struct idetape_bh *ide_tape_kmalloc_buffer(idetape_tape_t *tape,
863                                                   int full, int clear)
864 {
865         struct idetape_bh *prev_bh, *bh, *merge_bh;
866         int pages = tape->pages_per_buffer;
867         unsigned int order, b_allocd;
868         char *b_data = NULL;
869
870         merge_bh = kmalloc(sizeof(struct idetape_bh), GFP_KERNEL);
871         bh = merge_bh;
872         if (bh == NULL)
873                 goto abort;
874
875         order = fls(pages) - 1;
876         bh->b_data = (char *) __get_free_pages(GFP_KERNEL, order);
877         if (!bh->b_data)
878                 goto abort;
879         b_allocd = (1 << order) * PAGE_SIZE;
880         pages &= (order-1);
881
882         if (clear)
883                 memset(bh->b_data, 0, b_allocd);
884         bh->b_reqnext = NULL;
885         bh->b_size = b_allocd;
886         atomic_set(&bh->b_count, full ? bh->b_size : 0);
887
888         while (pages) {
889                 order = fls(pages) - 1;
890                 b_data = (char *) __get_free_pages(GFP_KERNEL, order);
891                 if (!b_data)
892                         goto abort;
893                 b_allocd = (1 << order) * PAGE_SIZE;
894
895                 if (clear)
896                         memset(b_data, 0, b_allocd);
897
898                 /* newly allocated page frames below buffer header or ...*/
899                 if (bh->b_data == b_data + b_allocd) {
900                         bh->b_size += b_allocd;
901                         bh->b_data -= b_allocd;
902                         if (full)
903                                 atomic_add(b_allocd, &bh->b_count);
904                         continue;
905                 }
906                 /* they are above the header */
907                 if (b_data == bh->b_data + bh->b_size) {
908                         bh->b_size += b_allocd;
909                         if (full)
910                                 atomic_add(b_allocd, &bh->b_count);
911                         continue;
912                 }
913                 prev_bh = bh;
914                 bh = kmalloc(sizeof(struct idetape_bh), GFP_KERNEL);
915                 if (!bh) {
916                         free_pages((unsigned long) b_data, order);
917                         goto abort;
918                 }
919                 bh->b_reqnext = NULL;
920                 bh->b_data = b_data;
921                 bh->b_size = b_allocd;
922                 atomic_set(&bh->b_count, full ? bh->b_size : 0);
923                 prev_bh->b_reqnext = bh;
924
925                 pages &= (order-1);
926         }
927
928         bh->b_size -= tape->excess_bh_size;
929         if (full)
930                 atomic_sub(tape->excess_bh_size, &bh->b_count);
931         return merge_bh;
932 abort:
933         ide_tape_kfree_buffer(tape);
934         return NULL;
935 }
936
937 static int idetape_copy_stage_from_user(idetape_tape_t *tape,
938                                         const char __user *buf, int n)
939 {
940         struct idetape_bh *bh = tape->bh;
941         int count;
942         int ret = 0;
943
944         while (n) {
945                 if (bh == NULL) {
946                         printk(KERN_ERR "ide-tape: bh == NULL in %s\n",
947                                         __func__);
948                         return 1;
949                 }
950                 count = min((unsigned int)
951                                 (bh->b_size - atomic_read(&bh->b_count)),
952                                 (unsigned int)n);
953                 if (copy_from_user(bh->b_data + atomic_read(&bh->b_count), buf,
954                                 count))
955                         ret = 1;
956                 n -= count;
957                 atomic_add(count, &bh->b_count);
958                 buf += count;
959                 if (atomic_read(&bh->b_count) == bh->b_size) {
960                         bh = bh->b_reqnext;
961                         if (bh)
962                                 atomic_set(&bh->b_count, 0);
963                 }
964         }
965         tape->bh = bh;
966         return ret;
967 }
968
969 static int idetape_copy_stage_to_user(idetape_tape_t *tape, char __user *buf,
970                                       int n)
971 {
972         struct idetape_bh *bh = tape->bh;
973         int count;
974         int ret = 0;
975
976         while (n) {
977                 if (bh == NULL) {
978                         printk(KERN_ERR "ide-tape: bh == NULL in %s\n",
979                                         __func__);
980                         return 1;
981                 }
982                 count = min(tape->b_count, n);
983                 if  (copy_to_user(buf, tape->b_data, count))
984                         ret = 1;
985                 n -= count;
986                 tape->b_data += count;
987                 tape->b_count -= count;
988                 buf += count;
989                 if (!tape->b_count) {
990                         bh = bh->b_reqnext;
991                         tape->bh = bh;
992                         if (bh) {
993                                 tape->b_data = bh->b_data;
994                                 tape->b_count = atomic_read(&bh->b_count);
995                         }
996                 }
997         }
998         return ret;
999 }
1000
1001 static void idetape_init_merge_buffer(idetape_tape_t *tape)
1002 {
1003         struct idetape_bh *bh = tape->merge_bh;
1004         tape->bh = tape->merge_bh;
1005
1006         if (tape->chrdev_dir == IDETAPE_DIR_WRITE)
1007                 atomic_set(&bh->b_count, 0);
1008         else {
1009                 tape->b_data = bh->b_data;
1010                 tape->b_count = atomic_read(&bh->b_count);
1011         }
1012 }
1013
1014 /*
1015  * Write a filemark if write_filemark=1. Flush the device buffers without
1016  * writing a filemark otherwise.
1017  */
1018 static void idetape_create_write_filemark_cmd(ide_drive_t *drive,
1019                 struct ide_atapi_pc *pc, int write_filemark)
1020 {
1021         ide_init_pc(pc);
1022         pc->c[0] = WRITE_FILEMARKS;
1023         pc->c[4] = write_filemark;
1024         pc->flags |= PC_FLAG_WAIT_FOR_DSC;
1025 }
1026
1027 static int idetape_wait_ready(ide_drive_t *drive, unsigned long timeout)
1028 {
1029         idetape_tape_t *tape = drive->driver_data;
1030         struct gendisk *disk = tape->disk;
1031         int load_attempted = 0;
1032
1033         /* Wait for the tape to become ready */
1034         set_bit(IDE_AFLAG_MEDIUM_PRESENT, &drive->atapi_flags);
1035         timeout += jiffies;
1036         while (time_before(jiffies, timeout)) {
1037                 if (ide_do_test_unit_ready(drive, disk) == 0)
1038                         return 0;
1039                 if ((tape->sense_key == 2 && tape->asc == 4 && tape->ascq == 2)
1040                     || (tape->asc == 0x3A)) {
1041                         /* no media */
1042                         if (load_attempted)
1043                                 return -ENOMEDIUM;
1044                         ide_do_start_stop(drive, disk, IDETAPE_LU_LOAD_MASK);
1045                         load_attempted = 1;
1046                 /* not about to be ready */
1047                 } else if (!(tape->sense_key == 2 && tape->asc == 4 &&
1048                              (tape->ascq == 1 || tape->ascq == 8)))
1049                         return -EIO;
1050                 msleep(100);
1051         }
1052         return -EIO;
1053 }
1054
1055 static int idetape_flush_tape_buffers(ide_drive_t *drive)
1056 {
1057         struct ide_tape_obj *tape = drive->driver_data;
1058         struct ide_atapi_pc pc;
1059         int rc;
1060
1061         idetape_create_write_filemark_cmd(drive, &pc, 0);
1062         rc = ide_queue_pc_tail(drive, tape->disk, &pc);
1063         if (rc)
1064                 return rc;
1065         idetape_wait_ready(drive, 60 * 5 * HZ);
1066         return 0;
1067 }
1068
1069 static void idetape_create_read_position_cmd(struct ide_atapi_pc *pc)
1070 {
1071         ide_init_pc(pc);
1072         pc->c[0] = READ_POSITION;
1073         pc->req_xfer = 20;
1074 }
1075
1076 static int idetape_read_position(ide_drive_t *drive)
1077 {
1078         idetape_tape_t *tape = drive->driver_data;
1079         struct ide_atapi_pc pc;
1080         int position;
1081
1082         debug_log(DBG_PROCS, "Enter %s\n", __func__);
1083
1084         idetape_create_read_position_cmd(&pc);
1085         if (ide_queue_pc_tail(drive, tape->disk, &pc))
1086                 return -1;
1087         position = tape->first_frame;
1088         return position;
1089 }
1090
1091 static void idetape_create_locate_cmd(ide_drive_t *drive,
1092                 struct ide_atapi_pc *pc,
1093                 unsigned int block, u8 partition, int skip)
1094 {
1095         ide_init_pc(pc);
1096         pc->c[0] = POSITION_TO_ELEMENT;
1097         pc->c[1] = 2;
1098         put_unaligned(cpu_to_be32(block), (unsigned int *) &pc->c[3]);
1099         pc->c[8] = partition;
1100         pc->flags |= PC_FLAG_WAIT_FOR_DSC;
1101 }
1102
1103 static void __ide_tape_discard_merge_buffer(ide_drive_t *drive)
1104 {
1105         idetape_tape_t *tape = drive->driver_data;
1106
1107         if (tape->chrdev_dir != IDETAPE_DIR_READ)
1108                 return;
1109
1110         clear_bit(IDE_AFLAG_FILEMARK, &drive->atapi_flags);
1111         tape->merge_bh_size = 0;
1112         if (tape->merge_bh != NULL) {
1113                 ide_tape_kfree_buffer(tape);
1114                 tape->merge_bh = NULL;
1115         }
1116
1117         tape->chrdev_dir = IDETAPE_DIR_NONE;
1118 }
1119
1120 /*
1121  * Position the tape to the requested block using the LOCATE packet command.
1122  * A READ POSITION command is then issued to check where we are positioned. Like
1123  * all higher level operations, we queue the commands at the tail of the request
1124  * queue and wait for their completion.
1125  */
1126 static int idetape_position_tape(ide_drive_t *drive, unsigned int block,
1127                 u8 partition, int skip)
1128 {
1129         idetape_tape_t *tape = drive->driver_data;
1130         struct gendisk *disk = tape->disk;
1131         int retval;
1132         struct ide_atapi_pc pc;
1133
1134         if (tape->chrdev_dir == IDETAPE_DIR_READ)
1135                 __ide_tape_discard_merge_buffer(drive);
1136         idetape_wait_ready(drive, 60 * 5 * HZ);
1137         idetape_create_locate_cmd(drive, &pc, block, partition, skip);
1138         retval = ide_queue_pc_tail(drive, disk, &pc);
1139         if (retval)
1140                 return (retval);
1141
1142         idetape_create_read_position_cmd(&pc);
1143         return ide_queue_pc_tail(drive, disk, &pc);
1144 }
1145
1146 static void ide_tape_discard_merge_buffer(ide_drive_t *drive,
1147                                           int restore_position)
1148 {
1149         idetape_tape_t *tape = drive->driver_data;
1150         int seek, position;
1151
1152         __ide_tape_discard_merge_buffer(drive);
1153         if (restore_position) {
1154                 position = idetape_read_position(drive);
1155                 seek = position > 0 ? position : 0;
1156                 if (idetape_position_tape(drive, seek, 0, 0)) {
1157                         printk(KERN_INFO "ide-tape: %s: position_tape failed in"
1158                                          " %s\n", tape->name, __func__);
1159                         return;
1160                 }
1161         }
1162 }
1163
1164 /*
1165  * Generate a read/write request for the block device interface and wait for it
1166  * to be serviced.
1167  */
1168 static int idetape_queue_rw_tail(ide_drive_t *drive, int cmd, int blocks,
1169                                  struct idetape_bh *bh)
1170 {
1171         idetape_tape_t *tape = drive->driver_data;
1172         struct request *rq;
1173         int ret, errors;
1174
1175         debug_log(DBG_SENSE, "%s: cmd=%d\n", __func__, cmd);
1176
1177         rq = blk_get_request(drive->queue, READ, __GFP_WAIT);
1178         rq->cmd_type = REQ_TYPE_SPECIAL;
1179         rq->cmd[13] = cmd;
1180         rq->rq_disk = tape->disk;
1181         rq->special = (void *)bh;
1182         rq->sector = tape->first_frame;
1183         rq->nr_sectors = blocks;
1184         rq->current_nr_sectors = blocks;
1185         blk_execute_rq(drive->queue, tape->disk, rq, 0);
1186
1187         errors = rq->errors;
1188         ret = tape->blk_size * (blocks - rq->current_nr_sectors);
1189         blk_put_request(rq);
1190
1191         if ((cmd & (REQ_IDETAPE_READ | REQ_IDETAPE_WRITE)) == 0)
1192                 return 0;
1193
1194         if (tape->merge_bh)
1195                 idetape_init_merge_buffer(tape);
1196         if (errors == IDE_DRV_ERROR_GENERAL)
1197                 return -EIO;
1198         return ret;
1199 }
1200
1201 static void idetape_create_inquiry_cmd(struct ide_atapi_pc *pc)
1202 {
1203         ide_init_pc(pc);
1204         pc->c[0] = INQUIRY;
1205         pc->c[4] = 254;
1206         pc->req_xfer = 254;
1207 }
1208
1209 static void idetape_create_rewind_cmd(ide_drive_t *drive,
1210                 struct ide_atapi_pc *pc)
1211 {
1212         ide_init_pc(pc);
1213         pc->c[0] = REZERO_UNIT;
1214         pc->flags |= PC_FLAG_WAIT_FOR_DSC;
1215 }
1216
1217 static void idetape_create_erase_cmd(struct ide_atapi_pc *pc)
1218 {
1219         ide_init_pc(pc);
1220         pc->c[0] = ERASE;
1221         pc->c[1] = 1;
1222         pc->flags |= PC_FLAG_WAIT_FOR_DSC;
1223 }
1224
1225 static void idetape_create_space_cmd(struct ide_atapi_pc *pc, int count, u8 cmd)
1226 {
1227         ide_init_pc(pc);
1228         pc->c[0] = SPACE;
1229         put_unaligned(cpu_to_be32(count), (unsigned int *) &pc->c[1]);
1230         pc->c[1] = cmd;
1231         pc->flags |= PC_FLAG_WAIT_FOR_DSC;
1232 }
1233
1234 /* Queue up a character device originated write request. */
1235 static int idetape_add_chrdev_write_request(ide_drive_t *drive, int blocks)
1236 {
1237         idetape_tape_t *tape = drive->driver_data;
1238
1239         debug_log(DBG_CHRDEV, "Enter %s\n", __func__);
1240
1241         return idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE,
1242                                      blocks, tape->merge_bh);
1243 }
1244
1245 static void ide_tape_flush_merge_buffer(ide_drive_t *drive)
1246 {
1247         idetape_tape_t *tape = drive->driver_data;
1248         int blocks, min;
1249         struct idetape_bh *bh;
1250
1251         if (tape->chrdev_dir != IDETAPE_DIR_WRITE) {
1252                 printk(KERN_ERR "ide-tape: bug: Trying to empty merge buffer"
1253                                 " but we are not writing.\n");
1254                 return;
1255         }
1256         if (tape->merge_bh_size > tape->buffer_size) {
1257                 printk(KERN_ERR "ide-tape: bug: merge_buffer too big\n");
1258                 tape->merge_bh_size = tape->buffer_size;
1259         }
1260         if (tape->merge_bh_size) {
1261                 blocks = tape->merge_bh_size / tape->blk_size;
1262                 if (tape->merge_bh_size % tape->blk_size) {
1263                         unsigned int i;
1264
1265                         blocks++;
1266                         i = tape->blk_size - tape->merge_bh_size %
1267                                 tape->blk_size;
1268                         bh = tape->bh->b_reqnext;
1269                         while (bh) {
1270                                 atomic_set(&bh->b_count, 0);
1271                                 bh = bh->b_reqnext;
1272                         }
1273                         bh = tape->bh;
1274                         while (i) {
1275                                 if (bh == NULL) {
1276                                         printk(KERN_INFO "ide-tape: bug,"
1277                                                          " bh NULL\n");
1278                                         break;
1279                                 }
1280                                 min = min(i, (unsigned int)(bh->b_size -
1281                                                 atomic_read(&bh->b_count)));
1282                                 memset(bh->b_data + atomic_read(&bh->b_count),
1283                                                 0, min);
1284                                 atomic_add(min, &bh->b_count);
1285                                 i -= min;
1286                                 bh = bh->b_reqnext;
1287                         }
1288                 }
1289                 (void) idetape_add_chrdev_write_request(drive, blocks);
1290                 tape->merge_bh_size = 0;
1291         }
1292         if (tape->merge_bh != NULL) {
1293                 ide_tape_kfree_buffer(tape);
1294                 tape->merge_bh = NULL;
1295         }
1296         tape->chrdev_dir = IDETAPE_DIR_NONE;
1297 }
1298
1299 static int idetape_init_read(ide_drive_t *drive)
1300 {
1301         idetape_tape_t *tape = drive->driver_data;
1302         int bytes_read;
1303
1304         /* Initialize read operation */
1305         if (tape->chrdev_dir != IDETAPE_DIR_READ) {
1306                 if (tape->chrdev_dir == IDETAPE_DIR_WRITE) {
1307                         ide_tape_flush_merge_buffer(drive);
1308                         idetape_flush_tape_buffers(drive);
1309                 }
1310                 if (tape->merge_bh || tape->merge_bh_size) {
1311                         printk(KERN_ERR "ide-tape: merge_bh_size should be"
1312                                          " 0 now\n");
1313                         tape->merge_bh_size = 0;
1314                 }
1315                 tape->merge_bh = ide_tape_kmalloc_buffer(tape, 0, 0);
1316                 if (!tape->merge_bh)
1317                         return -ENOMEM;
1318                 tape->chrdev_dir = IDETAPE_DIR_READ;
1319
1320                 /*
1321                  * Issue a read 0 command to ensure that DSC handshake is
1322                  * switched from completion mode to buffer available mode.
1323                  * No point in issuing this if DSC overlap isn't supported, some
1324                  * drives (Seagate STT3401A) will return an error.
1325                  */
1326                 if (drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) {
1327                         bytes_read = idetape_queue_rw_tail(drive,
1328                                                         REQ_IDETAPE_READ, 0,
1329                                                         tape->merge_bh);
1330                         if (bytes_read < 0) {
1331                                 ide_tape_kfree_buffer(tape);
1332                                 tape->merge_bh = NULL;
1333                                 tape->chrdev_dir = IDETAPE_DIR_NONE;
1334                                 return bytes_read;
1335                         }
1336                 }
1337         }
1338
1339         return 0;
1340 }
1341
1342 /* called from idetape_chrdev_read() to service a chrdev read request. */
1343 static int idetape_add_chrdev_read_request(ide_drive_t *drive, int blocks)
1344 {
1345         idetape_tape_t *tape = drive->driver_data;
1346
1347         debug_log(DBG_PROCS, "Enter %s, %d blocks\n", __func__, blocks);
1348
1349         /* If we are at a filemark, return a read length of 0 */
1350         if (test_bit(IDE_AFLAG_FILEMARK, &drive->atapi_flags))
1351                 return 0;
1352
1353         idetape_init_read(drive);
1354
1355         return idetape_queue_rw_tail(drive, REQ_IDETAPE_READ, blocks,
1356                                      tape->merge_bh);
1357 }
1358
1359 static void idetape_pad_zeros(ide_drive_t *drive, int bcount)
1360 {
1361         idetape_tape_t *tape = drive->driver_data;
1362         struct idetape_bh *bh;
1363         int blocks;
1364
1365         while (bcount) {
1366                 unsigned int count;
1367
1368                 bh = tape->merge_bh;
1369                 count = min(tape->buffer_size, bcount);
1370                 bcount -= count;
1371                 blocks = count / tape->blk_size;
1372                 while (count) {
1373                         atomic_set(&bh->b_count,
1374                                    min(count, (unsigned int)bh->b_size));
1375                         memset(bh->b_data, 0, atomic_read(&bh->b_count));
1376                         count -= atomic_read(&bh->b_count);
1377                         bh = bh->b_reqnext;
1378                 }
1379                 idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE, blocks,
1380                                       tape->merge_bh);
1381         }
1382 }
1383
1384 /*
1385  * Rewinds the tape to the Beginning Of the current Partition (BOP). We
1386  * currently support only one partition.
1387  */
1388 static int idetape_rewind_tape(ide_drive_t *drive)
1389 {
1390         struct ide_tape_obj *tape = drive->driver_data;
1391         struct gendisk *disk = tape->disk;
1392         int retval;
1393         struct ide_atapi_pc pc;
1394
1395         debug_log(DBG_SENSE, "Enter %s\n", __func__);
1396
1397         idetape_create_rewind_cmd(drive, &pc);
1398         retval = ide_queue_pc_tail(drive, disk, &pc);
1399         if (retval)
1400                 return retval;
1401
1402         idetape_create_read_position_cmd(&pc);
1403         retval = ide_queue_pc_tail(drive, disk, &pc);
1404         if (retval)
1405                 return retval;
1406         return 0;
1407 }
1408
1409 /* mtio.h compatible commands should be issued to the chrdev interface. */
1410 static int idetape_blkdev_ioctl(ide_drive_t *drive, unsigned int cmd,
1411                                 unsigned long arg)
1412 {
1413         idetape_tape_t *tape = drive->driver_data;
1414         void __user *argp = (void __user *)arg;
1415
1416         struct idetape_config {
1417                 int dsc_rw_frequency;
1418                 int dsc_media_access_frequency;
1419                 int nr_stages;
1420         } config;
1421
1422         debug_log(DBG_PROCS, "Enter %s\n", __func__);
1423
1424         switch (cmd) {
1425         case 0x0340:
1426                 if (copy_from_user(&config, argp, sizeof(config)))
1427                         return -EFAULT;
1428                 tape->best_dsc_rw_freq = config.dsc_rw_frequency;
1429                 break;
1430         case 0x0350:
1431                 config.dsc_rw_frequency = (int) tape->best_dsc_rw_freq;
1432                 config.nr_stages = 1;
1433                 if (copy_to_user(argp, &config, sizeof(config)))
1434                         return -EFAULT;
1435                 break;
1436         default:
1437                 return -EIO;
1438         }
1439         return 0;
1440 }
1441
1442 static int idetape_space_over_filemarks(ide_drive_t *drive, short mt_op,
1443                                         int mt_count)
1444 {
1445         idetape_tape_t *tape = drive->driver_data;
1446         struct gendisk *disk = tape->disk;
1447         struct ide_atapi_pc pc;
1448         int retval, count = 0;
1449         int sprev = !!(tape->caps[4] & 0x20);
1450
1451         if (mt_count == 0)
1452                 return 0;
1453         if (MTBSF == mt_op || MTBSFM == mt_op) {
1454                 if (!sprev)
1455                         return -EIO;
1456                 mt_count = -mt_count;
1457         }
1458
1459         if (tape->chrdev_dir == IDETAPE_DIR_READ) {
1460                 tape->merge_bh_size = 0;
1461                 if (test_and_clear_bit(IDE_AFLAG_FILEMARK, &drive->atapi_flags))
1462                         ++count;
1463                 ide_tape_discard_merge_buffer(drive, 0);
1464         }
1465
1466         switch (mt_op) {
1467         case MTFSF:
1468         case MTBSF:
1469                 idetape_create_space_cmd(&pc, mt_count - count,
1470                                          IDETAPE_SPACE_OVER_FILEMARK);
1471                 return ide_queue_pc_tail(drive, disk, &pc);
1472         case MTFSFM:
1473         case MTBSFM:
1474                 if (!sprev)
1475                         return -EIO;
1476                 retval = idetape_space_over_filemarks(drive, MTFSF,
1477                                                       mt_count - count);
1478                 if (retval)
1479                         return retval;
1480                 count = (MTBSFM == mt_op ? 1 : -1);
1481                 return idetape_space_over_filemarks(drive, MTFSF, count);
1482         default:
1483                 printk(KERN_ERR "ide-tape: MTIO operation %d not supported\n",
1484                                 mt_op);
1485                 return -EIO;
1486         }
1487 }
1488
1489 /*
1490  * Our character device read / write functions.
1491  *
1492  * The tape is optimized to maximize throughput when it is transferring an
1493  * integral number of the "continuous transfer limit", which is a parameter of
1494  * the specific tape (26kB on my particular tape, 32kB for Onstream).
1495  *
1496  * As of version 1.3 of the driver, the character device provides an abstract
1497  * continuous view of the media - any mix of block sizes (even 1 byte) on the
1498  * same backup/restore procedure is supported. The driver will internally
1499  * convert the requests to the recommended transfer unit, so that an unmatch
1500  * between the user's block size to the recommended size will only result in a
1501  * (slightly) increased driver overhead, but will no longer hit performance.
1502  * This is not applicable to Onstream.
1503  */
1504 static ssize_t idetape_chrdev_read(struct file *file, char __user *buf,
1505                                    size_t count, loff_t *ppos)
1506 {
1507         struct ide_tape_obj *tape = file->private_data;
1508         ide_drive_t *drive = tape->drive;
1509         ssize_t bytes_read, temp, actually_read = 0, rc;
1510         ssize_t ret = 0;
1511         u16 ctl = *(u16 *)&tape->caps[12];
1512
1513         debug_log(DBG_CHRDEV, "Enter %s, count %Zd\n", __func__, count);
1514
1515         if (tape->chrdev_dir != IDETAPE_DIR_READ) {
1516                 if (test_bit(IDE_AFLAG_DETECT_BS, &drive->atapi_flags))
1517                         if (count > tape->blk_size &&
1518                             (count % tape->blk_size) == 0)
1519                                 tape->user_bs_factor = count / tape->blk_size;
1520         }
1521         rc = idetape_init_read(drive);
1522         if (rc < 0)
1523                 return rc;
1524         if (count == 0)
1525                 return (0);
1526         if (tape->merge_bh_size) {
1527                 actually_read = min((unsigned int)(tape->merge_bh_size),
1528                                     (unsigned int)count);
1529                 if (idetape_copy_stage_to_user(tape, buf, actually_read))
1530                         ret = -EFAULT;
1531                 buf += actually_read;
1532                 tape->merge_bh_size -= actually_read;
1533                 count -= actually_read;
1534         }
1535         while (count >= tape->buffer_size) {
1536                 bytes_read = idetape_add_chrdev_read_request(drive, ctl);
1537                 if (bytes_read <= 0)
1538                         goto finish;
1539                 if (idetape_copy_stage_to_user(tape, buf, bytes_read))
1540                         ret = -EFAULT;
1541                 buf += bytes_read;
1542                 count -= bytes_read;
1543                 actually_read += bytes_read;
1544         }
1545         if (count) {
1546                 bytes_read = idetape_add_chrdev_read_request(drive, ctl);
1547                 if (bytes_read <= 0)
1548                         goto finish;
1549                 temp = min((unsigned long)count, (unsigned long)bytes_read);
1550                 if (idetape_copy_stage_to_user(tape, buf, temp))
1551                         ret = -EFAULT;
1552                 actually_read += temp;
1553                 tape->merge_bh_size = bytes_read-temp;
1554         }
1555 finish:
1556         if (!actually_read && test_bit(IDE_AFLAG_FILEMARK, &drive->atapi_flags)) {
1557                 debug_log(DBG_SENSE, "%s: spacing over filemark\n", tape->name);
1558
1559                 idetape_space_over_filemarks(drive, MTFSF, 1);
1560                 return 0;
1561         }
1562
1563         return ret ? ret : actually_read;
1564 }
1565
1566 static ssize_t idetape_chrdev_write(struct file *file, const char __user *buf,
1567                                      size_t count, loff_t *ppos)
1568 {
1569         struct ide_tape_obj *tape = file->private_data;
1570         ide_drive_t *drive = tape->drive;
1571         ssize_t actually_written = 0;
1572         ssize_t ret = 0;
1573         u16 ctl = *(u16 *)&tape->caps[12];
1574
1575         /* The drive is write protected. */
1576         if (tape->write_prot)
1577                 return -EACCES;
1578
1579         debug_log(DBG_CHRDEV, "Enter %s, count %Zd\n", __func__, count);
1580
1581         /* Initialize write operation */
1582         if (tape->chrdev_dir != IDETAPE_DIR_WRITE) {
1583                 if (tape->chrdev_dir == IDETAPE_DIR_READ)
1584                         ide_tape_discard_merge_buffer(drive, 1);
1585                 if (tape->merge_bh || tape->merge_bh_size) {
1586                         printk(KERN_ERR "ide-tape: merge_bh_size "
1587                                 "should be 0 now\n");
1588                         tape->merge_bh_size = 0;
1589                 }
1590                 tape->merge_bh = ide_tape_kmalloc_buffer(tape, 0, 0);
1591                 if (!tape->merge_bh)
1592                         return -ENOMEM;
1593                 tape->chrdev_dir = IDETAPE_DIR_WRITE;
1594                 idetape_init_merge_buffer(tape);
1595
1596                 /*
1597                  * Issue a write 0 command to ensure that DSC handshake is
1598                  * switched from completion mode to buffer available mode. No
1599                  * point in issuing this if DSC overlap isn't supported, some
1600                  * drives (Seagate STT3401A) will return an error.
1601                  */
1602                 if (drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) {
1603                         ssize_t retval = idetape_queue_rw_tail(drive,
1604                                                         REQ_IDETAPE_WRITE, 0,
1605                                                         tape->merge_bh);
1606                         if (retval < 0) {
1607                                 ide_tape_kfree_buffer(tape);
1608                                 tape->merge_bh = NULL;
1609                                 tape->chrdev_dir = IDETAPE_DIR_NONE;
1610                                 return retval;
1611                         }
1612                 }
1613         }
1614         if (count == 0)
1615                 return (0);
1616         if (tape->merge_bh_size) {
1617                 if (tape->merge_bh_size >= tape->buffer_size) {
1618                         printk(KERN_ERR "ide-tape: bug: merge buf too big\n");
1619                         tape->merge_bh_size = 0;
1620                 }
1621                 actually_written = min((unsigned int)
1622                                 (tape->buffer_size - tape->merge_bh_size),
1623                                 (unsigned int)count);
1624                 if (idetape_copy_stage_from_user(tape, buf, actually_written))
1625                                 ret = -EFAULT;
1626                 buf += actually_written;
1627                 tape->merge_bh_size += actually_written;
1628                 count -= actually_written;
1629
1630                 if (tape->merge_bh_size == tape->buffer_size) {
1631                         ssize_t retval;
1632                         tape->merge_bh_size = 0;
1633                         retval = idetape_add_chrdev_write_request(drive, ctl);
1634                         if (retval <= 0)
1635                                 return (retval);
1636                 }
1637         }
1638         while (count >= tape->buffer_size) {
1639                 ssize_t retval;
1640                 if (idetape_copy_stage_from_user(tape, buf, tape->buffer_size))
1641                         ret = -EFAULT;
1642                 buf += tape->buffer_size;
1643                 count -= tape->buffer_size;
1644                 retval = idetape_add_chrdev_write_request(drive, ctl);
1645                 actually_written += tape->buffer_size;
1646                 if (retval <= 0)
1647                         return (retval);
1648         }
1649         if (count) {
1650                 actually_written += count;
1651                 if (idetape_copy_stage_from_user(tape, buf, count))
1652                         ret = -EFAULT;
1653                 tape->merge_bh_size += count;
1654         }
1655         return ret ? ret : actually_written;
1656 }
1657
1658 static int idetape_write_filemark(ide_drive_t *drive)
1659 {
1660         struct ide_tape_obj *tape = drive->driver_data;
1661         struct ide_atapi_pc pc;
1662
1663         /* Write a filemark */
1664         idetape_create_write_filemark_cmd(drive, &pc, 1);
1665         if (ide_queue_pc_tail(drive, tape->disk, &pc)) {
1666                 printk(KERN_ERR "ide-tape: Couldn't write a filemark\n");
1667                 return -EIO;
1668         }
1669         return 0;
1670 }
1671
1672 /*
1673  * Called from idetape_chrdev_ioctl when the general mtio MTIOCTOP ioctl is
1674  * requested.
1675  *
1676  * Note: MTBSF and MTBSFM are not supported when the tape doesn't support
1677  * spacing over filemarks in the reverse direction. In this case, MTFSFM is also
1678  * usually not supported.
1679  *
1680  * The following commands are currently not supported:
1681  *
1682  * MTFSS, MTBSS, MTWSM, MTSETDENSITY, MTSETDRVBUFFER, MT_ST_BOOLEANS,
1683  * MT_ST_WRITE_THRESHOLD.
1684  */
1685 static int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count)
1686 {
1687         idetape_tape_t *tape = drive->driver_data;
1688         struct gendisk *disk = tape->disk;
1689         struct ide_atapi_pc pc;
1690         int i, retval;
1691
1692         debug_log(DBG_ERR, "Handling MTIOCTOP ioctl: mt_op=%d, mt_count=%d\n",
1693                         mt_op, mt_count);
1694
1695         switch (mt_op) {
1696         case MTFSF:
1697         case MTFSFM:
1698         case MTBSF:
1699         case MTBSFM:
1700                 if (!mt_count)
1701                         return 0;
1702                 return idetape_space_over_filemarks(drive, mt_op, mt_count);
1703         default:
1704                 break;
1705         }
1706
1707         switch (mt_op) {
1708         case MTWEOF:
1709                 if (tape->write_prot)
1710                         return -EACCES;
1711                 ide_tape_discard_merge_buffer(drive, 1);
1712                 for (i = 0; i < mt_count; i++) {
1713                         retval = idetape_write_filemark(drive);
1714                         if (retval)
1715                                 return retval;
1716                 }
1717                 return 0;
1718         case MTREW:
1719                 ide_tape_discard_merge_buffer(drive, 0);
1720                 if (idetape_rewind_tape(drive))
1721                         return -EIO;
1722                 return 0;
1723         case MTLOAD:
1724                 ide_tape_discard_merge_buffer(drive, 0);
1725                 return ide_do_start_stop(drive, disk, IDETAPE_LU_LOAD_MASK);
1726         case MTUNLOAD:
1727         case MTOFFL:
1728                 /*
1729                  * If door is locked, attempt to unlock before
1730                  * attempting to eject.
1731                  */
1732                 if (tape->door_locked) {
1733                         if (!ide_set_media_lock(drive, disk, 0))
1734                                 tape->door_locked = DOOR_UNLOCKED;
1735                 }
1736                 ide_tape_discard_merge_buffer(drive, 0);
1737                 retval = ide_do_start_stop(drive, disk, !IDETAPE_LU_LOAD_MASK);
1738                 if (!retval)
1739                         clear_bit(IDE_AFLAG_MEDIUM_PRESENT, &drive->atapi_flags);
1740                 return retval;
1741         case MTNOP:
1742                 ide_tape_discard_merge_buffer(drive, 0);
1743                 return idetape_flush_tape_buffers(drive);
1744         case MTRETEN:
1745                 ide_tape_discard_merge_buffer(drive, 0);
1746                 return ide_do_start_stop(drive, disk,
1747                         IDETAPE_LU_RETENSION_MASK | IDETAPE_LU_LOAD_MASK);
1748         case MTEOM:
1749                 idetape_create_space_cmd(&pc, 0, IDETAPE_SPACE_TO_EOD);
1750                 return ide_queue_pc_tail(drive, disk, &pc);
1751         case MTERASE:
1752                 (void)idetape_rewind_tape(drive);
1753                 idetape_create_erase_cmd(&pc);
1754                 return ide_queue_pc_tail(drive, disk, &pc);
1755         case MTSETBLK:
1756                 if (mt_count) {
1757                         if (mt_count < tape->blk_size ||
1758                             mt_count % tape->blk_size)
1759                                 return -EIO;
1760                         tape->user_bs_factor = mt_count / tape->blk_size;
1761                         clear_bit(IDE_AFLAG_DETECT_BS, &drive->atapi_flags);
1762                 } else
1763                         set_bit(IDE_AFLAG_DETECT_BS, &drive->atapi_flags);
1764                 return 0;
1765         case MTSEEK:
1766                 ide_tape_discard_merge_buffer(drive, 0);
1767                 return idetape_position_tape(drive,
1768                         mt_count * tape->user_bs_factor, tape->partition, 0);
1769         case MTSETPART:
1770                 ide_tape_discard_merge_buffer(drive, 0);
1771                 return idetape_position_tape(drive, 0, mt_count, 0);
1772         case MTFSR:
1773         case MTBSR:
1774         case MTLOCK:
1775                 retval = ide_set_media_lock(drive, disk, 1);
1776                 if (retval)
1777                         return retval;
1778                 tape->door_locked = DOOR_EXPLICITLY_LOCKED;
1779                 return 0;
1780         case MTUNLOCK:
1781                 retval = ide_set_media_lock(drive, disk, 0);
1782                 if (retval)
1783                         return retval;
1784                 tape->door_locked = DOOR_UNLOCKED;
1785                 return 0;
1786         default:
1787                 printk(KERN_ERR "ide-tape: MTIO operation %d not supported\n",
1788                                 mt_op);
1789                 return -EIO;
1790         }
1791 }
1792
1793 /*
1794  * Our character device ioctls. General mtio.h magnetic io commands are
1795  * supported here, and not in the corresponding block interface. Our own
1796  * ide-tape ioctls are supported on both interfaces.
1797  */
1798 static int idetape_chrdev_ioctl(struct inode *inode, struct file *file,
1799                                 unsigned int cmd, unsigned long arg)
1800 {
1801         struct ide_tape_obj *tape = file->private_data;
1802         ide_drive_t *drive = tape->drive;
1803         struct mtop mtop;
1804         struct mtget mtget;
1805         struct mtpos mtpos;
1806         int block_offset = 0, position = tape->first_frame;
1807         void __user *argp = (void __user *)arg;
1808
1809         debug_log(DBG_CHRDEV, "Enter %s, cmd=%u\n", __func__, cmd);
1810
1811         if (tape->chrdev_dir == IDETAPE_DIR_WRITE) {
1812                 ide_tape_flush_merge_buffer(drive);
1813                 idetape_flush_tape_buffers(drive);
1814         }
1815         if (cmd == MTIOCGET || cmd == MTIOCPOS) {
1816                 block_offset = tape->merge_bh_size /
1817                         (tape->blk_size * tape->user_bs_factor);
1818                 position = idetape_read_position(drive);
1819                 if (position < 0)
1820                         return -EIO;
1821         }
1822         switch (cmd) {
1823         case MTIOCTOP:
1824                 if (copy_from_user(&mtop, argp, sizeof(struct mtop)))
1825                         return -EFAULT;
1826                 return idetape_mtioctop(drive, mtop.mt_op, mtop.mt_count);
1827         case MTIOCGET:
1828                 memset(&mtget, 0, sizeof(struct mtget));
1829                 mtget.mt_type = MT_ISSCSI2;
1830                 mtget.mt_blkno = position / tape->user_bs_factor - block_offset;
1831                 mtget.mt_dsreg =
1832                         ((tape->blk_size * tape->user_bs_factor)
1833                          << MT_ST_BLKSIZE_SHIFT) & MT_ST_BLKSIZE_MASK;
1834
1835                 if (tape->drv_write_prot)
1836                         mtget.mt_gstat |= GMT_WR_PROT(0xffffffff);
1837
1838                 if (copy_to_user(argp, &mtget, sizeof(struct mtget)))
1839                         return -EFAULT;
1840                 return 0;
1841         case MTIOCPOS:
1842                 mtpos.mt_blkno = position / tape->user_bs_factor - block_offset;
1843                 if (copy_to_user(argp, &mtpos, sizeof(struct mtpos)))
1844                         return -EFAULT;
1845                 return 0;
1846         default:
1847                 if (tape->chrdev_dir == IDETAPE_DIR_READ)
1848                         ide_tape_discard_merge_buffer(drive, 1);
1849                 return idetape_blkdev_ioctl(drive, cmd, arg);
1850         }
1851 }
1852
1853 /*
1854  * Do a mode sense page 0 with block descriptor and if it succeeds set the tape
1855  * block size with the reported value.
1856  */
1857 static void ide_tape_get_bsize_from_bdesc(ide_drive_t *drive)
1858 {
1859         idetape_tape_t *tape = drive->driver_data;
1860         struct ide_atapi_pc pc;
1861
1862         idetape_create_mode_sense_cmd(&pc, IDETAPE_BLOCK_DESCRIPTOR);
1863         if (ide_queue_pc_tail(drive, tape->disk, &pc)) {
1864                 printk(KERN_ERR "ide-tape: Can't get block descriptor\n");
1865                 if (tape->blk_size == 0) {
1866                         printk(KERN_WARNING "ide-tape: Cannot deal with zero "
1867                                             "block size, assuming 32k\n");
1868                         tape->blk_size = 32768;
1869                 }
1870                 return;
1871         }
1872         tape->blk_size = (pc.buf[4 + 5] << 16) +
1873                                 (pc.buf[4 + 6] << 8)  +
1874                                  pc.buf[4 + 7];
1875         tape->drv_write_prot = (pc.buf[2] & 0x80) >> 7;
1876 }
1877
1878 static int idetape_chrdev_open(struct inode *inode, struct file *filp)
1879 {
1880         unsigned int minor = iminor(inode), i = minor & ~0xc0;
1881         ide_drive_t *drive;
1882         idetape_tape_t *tape;
1883         int retval;
1884
1885         if (i >= MAX_HWIFS * MAX_DRIVES)
1886                 return -ENXIO;
1887
1888         lock_kernel();
1889         tape = ide_tape_chrdev_get(i);
1890         if (!tape) {
1891                 unlock_kernel();
1892                 return -ENXIO;
1893         }
1894
1895         debug_log(DBG_CHRDEV, "Enter %s\n", __func__);
1896
1897         /*
1898          * We really want to do nonseekable_open(inode, filp); here, but some
1899          * versions of tar incorrectly call lseek on tapes and bail out if that
1900          * fails.  So we disallow pread() and pwrite(), but permit lseeks.
1901          */
1902         filp->f_mode &= ~(FMODE_PREAD | FMODE_PWRITE);
1903
1904         drive = tape->drive;
1905
1906         filp->private_data = tape;
1907
1908         if (test_and_set_bit(IDE_AFLAG_BUSY, &drive->atapi_flags)) {
1909                 retval = -EBUSY;
1910                 goto out_put_tape;
1911         }
1912
1913         retval = idetape_wait_ready(drive, 60 * HZ);
1914         if (retval) {
1915                 clear_bit(IDE_AFLAG_BUSY, &drive->atapi_flags);
1916                 printk(KERN_ERR "ide-tape: %s: drive not ready\n", tape->name);
1917                 goto out_put_tape;
1918         }
1919
1920         idetape_read_position(drive);
1921         if (!test_bit(IDE_AFLAG_ADDRESS_VALID, &drive->atapi_flags))
1922                 (void)idetape_rewind_tape(drive);
1923
1924         /* Read block size and write protect status from drive. */
1925         ide_tape_get_bsize_from_bdesc(drive);
1926
1927         /* Set write protect flag if device is opened as read-only. */
1928         if ((filp->f_flags & O_ACCMODE) == O_RDONLY)
1929                 tape->write_prot = 1;
1930         else
1931                 tape->write_prot = tape->drv_write_prot;
1932
1933         /* Make sure drive isn't write protected if user wants to write. */
1934         if (tape->write_prot) {
1935                 if ((filp->f_flags & O_ACCMODE) == O_WRONLY ||
1936                     (filp->f_flags & O_ACCMODE) == O_RDWR) {
1937                         clear_bit(IDE_AFLAG_BUSY, &drive->atapi_flags);
1938                         retval = -EROFS;
1939                         goto out_put_tape;
1940                 }
1941         }
1942
1943         /* Lock the tape drive door so user can't eject. */
1944         if (tape->chrdev_dir == IDETAPE_DIR_NONE) {
1945                 if (!ide_set_media_lock(drive, tape->disk, 1)) {
1946                         if (tape->door_locked != DOOR_EXPLICITLY_LOCKED)
1947                                 tape->door_locked = DOOR_LOCKED;
1948                 }
1949         }
1950         unlock_kernel();
1951         return 0;
1952
1953 out_put_tape:
1954         ide_tape_put(tape);
1955         unlock_kernel();
1956         return retval;
1957 }
1958
1959 static void idetape_write_release(ide_drive_t *drive, unsigned int minor)
1960 {
1961         idetape_tape_t *tape = drive->driver_data;
1962
1963         ide_tape_flush_merge_buffer(drive);
1964         tape->merge_bh = ide_tape_kmalloc_buffer(tape, 1, 0);
1965         if (tape->merge_bh != NULL) {
1966                 idetape_pad_zeros(drive, tape->blk_size *
1967                                 (tape->user_bs_factor - 1));
1968                 ide_tape_kfree_buffer(tape);
1969                 tape->merge_bh = NULL;
1970         }
1971         idetape_write_filemark(drive);
1972         idetape_flush_tape_buffers(drive);
1973         idetape_flush_tape_buffers(drive);
1974 }
1975
1976 static int idetape_chrdev_release(struct inode *inode, struct file *filp)
1977 {
1978         struct ide_tape_obj *tape = filp->private_data;
1979         ide_drive_t *drive = tape->drive;
1980         unsigned int minor = iminor(inode);
1981
1982         lock_kernel();
1983         tape = drive->driver_data;
1984
1985         debug_log(DBG_CHRDEV, "Enter %s\n", __func__);
1986
1987         if (tape->chrdev_dir == IDETAPE_DIR_WRITE)
1988                 idetape_write_release(drive, minor);
1989         if (tape->chrdev_dir == IDETAPE_DIR_READ) {
1990                 if (minor < 128)
1991                         ide_tape_discard_merge_buffer(drive, 1);
1992         }
1993
1994         if (minor < 128 && test_bit(IDE_AFLAG_MEDIUM_PRESENT, &drive->atapi_flags))
1995                 (void) idetape_rewind_tape(drive);
1996         if (tape->chrdev_dir == IDETAPE_DIR_NONE) {
1997                 if (tape->door_locked == DOOR_LOCKED) {
1998                         if (!ide_set_media_lock(drive, tape->disk, 0))
1999                                 tape->door_locked = DOOR_UNLOCKED;
2000                 }
2001         }
2002         clear_bit(IDE_AFLAG_BUSY, &drive->atapi_flags);
2003         ide_tape_put(tape);
2004         unlock_kernel();
2005         return 0;
2006 }
2007
2008 static void idetape_get_inquiry_results(ide_drive_t *drive)
2009 {
2010         idetape_tape_t *tape = drive->driver_data;
2011         struct ide_atapi_pc pc;
2012         char fw_rev[4], vendor_id[8], product_id[16];
2013
2014         idetape_create_inquiry_cmd(&pc);
2015         if (ide_queue_pc_tail(drive, tape->disk, &pc)) {
2016                 printk(KERN_ERR "ide-tape: %s: can't get INQUIRY results\n",
2017                                 tape->name);
2018                 return;
2019         }
2020         memcpy(vendor_id, &pc.buf[8], 8);
2021         memcpy(product_id, &pc.buf[16], 16);
2022         memcpy(fw_rev, &pc.buf[32], 4);
2023
2024         ide_fixstring(vendor_id, 8, 0);
2025         ide_fixstring(product_id, 16, 0);
2026         ide_fixstring(fw_rev, 4, 0);
2027
2028         printk(KERN_INFO "ide-tape: %s <-> %s: %.8s %.16s rev %.4s\n",
2029                         drive->name, tape->name, vendor_id, product_id, fw_rev);
2030 }
2031
2032 /*
2033  * Ask the tape about its various parameters. In particular, we will adjust our
2034  * data transfer buffer size to the recommended value as returned by the tape.
2035  */
2036 static void idetape_get_mode_sense_results(ide_drive_t *drive)
2037 {
2038         idetape_tape_t *tape = drive->driver_data;
2039         struct ide_atapi_pc pc;
2040         u8 *caps;
2041         u8 speed, max_speed;
2042
2043         idetape_create_mode_sense_cmd(&pc, IDETAPE_CAPABILITIES_PAGE);
2044         if (ide_queue_pc_tail(drive, tape->disk, &pc)) {
2045                 printk(KERN_ERR "ide-tape: Can't get tape parameters - assuming"
2046                                 " some default values\n");
2047                 tape->blk_size = 512;
2048                 put_unaligned(52,   (u16 *)&tape->caps[12]);
2049                 put_unaligned(540,  (u16 *)&tape->caps[14]);
2050                 put_unaligned(6*52, (u16 *)&tape->caps[16]);
2051                 return;
2052         }
2053         caps = pc.buf + 4 + pc.buf[3];
2054
2055         /* convert to host order and save for later use */
2056         speed = be16_to_cpup((__be16 *)&caps[14]);
2057         max_speed = be16_to_cpup((__be16 *)&caps[8]);
2058
2059         *(u16 *)&caps[8] = max_speed;
2060         *(u16 *)&caps[12] = be16_to_cpup((__be16 *)&caps[12]);
2061         *(u16 *)&caps[14] = speed;
2062         *(u16 *)&caps[16] = be16_to_cpup((__be16 *)&caps[16]);
2063
2064         if (!speed) {
2065                 printk(KERN_INFO "ide-tape: %s: invalid tape speed "
2066                                 "(assuming 650KB/sec)\n", drive->name);
2067                 *(u16 *)&caps[14] = 650;
2068         }
2069         if (!max_speed) {
2070                 printk(KERN_INFO "ide-tape: %s: invalid max_speed "
2071                                 "(assuming 650KB/sec)\n", drive->name);
2072                 *(u16 *)&caps[8] = 650;
2073         }
2074
2075         memcpy(&tape->caps, caps, 20);
2076
2077         /* device lacks locking support according to capabilities page */
2078         if ((caps[6] & 1) == 0)
2079                 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING;
2080
2081         if (caps[7] & 0x02)
2082                 tape->blk_size = 512;
2083         else if (caps[7] & 0x04)
2084                 tape->blk_size = 1024;
2085 }
2086
2087 #ifdef CONFIG_IDE_PROC_FS
2088 #define ide_tape_devset_get(name, field) \
2089 static int get_##name(ide_drive_t *drive) \
2090 { \
2091         idetape_tape_t *tape = drive->driver_data; \
2092         return tape->field; \
2093 }
2094
2095 #define ide_tape_devset_set(name, field) \
2096 static int set_##name(ide_drive_t *drive, int arg) \
2097 { \
2098         idetape_tape_t *tape = drive->driver_data; \
2099         tape->field = arg; \
2100         return 0; \
2101 }
2102
2103 #define ide_tape_devset_rw_field(_name, _field) \
2104 ide_tape_devset_get(_name, _field) \
2105 ide_tape_devset_set(_name, _field) \
2106 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2107
2108 #define ide_tape_devset_r_field(_name, _field) \
2109 ide_tape_devset_get(_name, _field) \
2110 IDE_DEVSET(_name, 0, get_##_name, NULL)
2111
2112 static int mulf_tdsc(ide_drive_t *drive)        { return 1000; }
2113 static int divf_tdsc(ide_drive_t *drive)        { return   HZ; }
2114 static int divf_buffer(ide_drive_t *drive)      { return    2; }
2115 static int divf_buffer_size(ide_drive_t *drive) { return 1024; }
2116
2117 ide_devset_rw_flag(dsc_overlap, IDE_DFLAG_DSC_OVERLAP);
2118
2119 ide_tape_devset_rw_field(debug_mask, debug_mask);
2120 ide_tape_devset_rw_field(tdsc, best_dsc_rw_freq);
2121
2122 ide_tape_devset_r_field(avg_speed, avg_speed);
2123 ide_tape_devset_r_field(speed, caps[14]);
2124 ide_tape_devset_r_field(buffer, caps[16]);
2125 ide_tape_devset_r_field(buffer_size, buffer_size);
2126
2127 static const struct ide_proc_devset idetape_settings[] = {
2128         __IDE_PROC_DEVSET(avg_speed,    0, 0xffff, NULL, NULL),
2129         __IDE_PROC_DEVSET(buffer,       0, 0xffff, NULL, divf_buffer),
2130         __IDE_PROC_DEVSET(buffer_size,  0, 0xffff, NULL, divf_buffer_size),
2131         __IDE_PROC_DEVSET(debug_mask,   0, 0xffff, NULL, NULL),
2132         __IDE_PROC_DEVSET(dsc_overlap,  0,      1, NULL, NULL),
2133         __IDE_PROC_DEVSET(speed,        0, 0xffff, NULL, NULL),
2134         __IDE_PROC_DEVSET(tdsc,         IDETAPE_DSC_RW_MIN, IDETAPE_DSC_RW_MAX,
2135                                         mulf_tdsc, divf_tdsc),
2136         { NULL },
2137 };
2138 #endif
2139
2140 /*
2141  * The function below is called to:
2142  *
2143  * 1. Initialize our various state variables.
2144  * 2. Ask the tape for its capabilities.
2145  * 3. Allocate a buffer which will be used for data transfer. The buffer size
2146  * is chosen based on the recommendation which we received in step 2.
2147  *
2148  * Note that at this point ide.c already assigned us an irq, so that we can
2149  * queue requests here and wait for their completion.
2150  */
2151 static void idetape_setup(ide_drive_t *drive, idetape_tape_t *tape, int minor)
2152 {
2153         unsigned long t;
2154         int speed;
2155         int buffer_size;
2156         u16 *ctl = (u16 *)&tape->caps[12];
2157
2158         drive->pc_callback       = ide_tape_callback;
2159         drive->pc_update_buffers = idetape_update_buffers;
2160         drive->pc_io_buffers     = ide_tape_io_buffers;
2161
2162         drive->dev_flags |= IDE_DFLAG_DSC_OVERLAP;
2163
2164         if (drive->hwif->host_flags & IDE_HFLAG_NO_DSC) {
2165                 printk(KERN_INFO "ide-tape: %s: disabling DSC overlap\n",
2166                                  tape->name);
2167                 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP;
2168         }
2169
2170         /* Seagate Travan drives do not support DSC overlap. */
2171         if (strstr((char *)&drive->id[ATA_ID_PROD], "Seagate STT3401"))
2172                 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP;
2173
2174         tape->minor = minor;
2175         tape->name[0] = 'h';
2176         tape->name[1] = 't';
2177         tape->name[2] = '0' + minor;
2178         tape->chrdev_dir = IDETAPE_DIR_NONE;
2179
2180         idetape_get_inquiry_results(drive);
2181         idetape_get_mode_sense_results(drive);
2182         ide_tape_get_bsize_from_bdesc(drive);
2183         tape->user_bs_factor = 1;
2184         tape->buffer_size = *ctl * tape->blk_size;
2185         while (tape->buffer_size > 0xffff) {
2186                 printk(KERN_NOTICE "ide-tape: decreasing stage size\n");
2187                 *ctl /= 2;
2188                 tape->buffer_size = *ctl * tape->blk_size;
2189         }
2190         buffer_size = tape->buffer_size;
2191         tape->pages_per_buffer = buffer_size / PAGE_SIZE;
2192         if (buffer_size % PAGE_SIZE) {
2193                 tape->pages_per_buffer++;
2194                 tape->excess_bh_size = PAGE_SIZE - buffer_size % PAGE_SIZE;
2195         }
2196
2197         /* select the "best" DSC read/write polling freq */
2198         speed = max(*(u16 *)&tape->caps[14], *(u16 *)&tape->caps[8]);
2199
2200         t = (IDETAPE_FIFO_THRESHOLD * tape->buffer_size * HZ) / (speed * 1000);
2201
2202         /*
2203          * Ensure that the number we got makes sense; limit it within
2204          * IDETAPE_DSC_RW_MIN and IDETAPE_DSC_RW_MAX.
2205          */
2206         tape->best_dsc_rw_freq = clamp_t(unsigned long, t, IDETAPE_DSC_RW_MIN,
2207                                          IDETAPE_DSC_RW_MAX);
2208         printk(KERN_INFO "ide-tape: %s <-> %s: %dKBps, %d*%dkB buffer, "
2209                 "%lums tDSC%s\n",
2210                 drive->name, tape->name, *(u16 *)&tape->caps[14],
2211                 (*(u16 *)&tape->caps[16] * 512) / tape->buffer_size,
2212                 tape->buffer_size / 1024,
2213                 tape->best_dsc_rw_freq * 1000 / HZ,
2214                 (drive->dev_flags & IDE_DFLAG_USING_DMA) ? ", DMA" : "");
2215
2216         ide_proc_register_driver(drive, tape->driver);
2217 }
2218
2219 static void ide_tape_remove(ide_drive_t *drive)
2220 {
2221         idetape_tape_t *tape = drive->driver_data;
2222
2223         ide_proc_unregister_driver(drive, tape->driver);
2224         device_del(&tape->dev);
2225         ide_unregister_region(tape->disk);
2226
2227         mutex_lock(&idetape_ref_mutex);
2228         put_device(&tape->dev);
2229         mutex_unlock(&idetape_ref_mutex);
2230 }
2231
2232 static void ide_tape_release(struct device *dev)
2233 {
2234         struct ide_tape_obj *tape = to_ide_drv(dev, ide_tape_obj);
2235         ide_drive_t *drive = tape->drive;
2236         struct gendisk *g = tape->disk;
2237
2238         BUG_ON(tape->merge_bh_size);
2239
2240         drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP;
2241         drive->driver_data = NULL;
2242         device_destroy(idetape_sysfs_class, MKDEV(IDETAPE_MAJOR, tape->minor));
2243         device_destroy(idetape_sysfs_class,
2244                         MKDEV(IDETAPE_MAJOR, tape->minor + 128));
2245         idetape_devs[tape->minor] = NULL;
2246         g->private_data = NULL;
2247         put_disk(g);
2248         kfree(tape);
2249 }
2250
2251 #ifdef CONFIG_IDE_PROC_FS
2252 static int proc_idetape_read_name
2253         (char *page, char **start, off_t off, int count, int *eof, void *data)
2254 {
2255         ide_drive_t     *drive = (ide_drive_t *) data;
2256         idetape_tape_t  *tape = drive->driver_data;
2257         char            *out = page;
2258         int             len;
2259
2260         len = sprintf(out, "%s\n", tape->name);
2261         PROC_IDE_READ_RETURN(page, start, off, count, eof, len);
2262 }
2263
2264 static ide_proc_entry_t idetape_proc[] = {
2265         { "capacity",   S_IFREG|S_IRUGO,        proc_ide_read_capacity, NULL },
2266         { "name",       S_IFREG|S_IRUGO,        proc_idetape_read_name, NULL },
2267         { NULL, 0, NULL, NULL }
2268 };
2269
2270 static ide_proc_entry_t *ide_tape_proc_entries(ide_drive_t *drive)
2271 {
2272         return idetape_proc;
2273 }
2274
2275 static const struct ide_proc_devset *ide_tape_proc_devsets(ide_drive_t *drive)
2276 {
2277         return idetape_settings;
2278 }
2279 #endif
2280
2281 static int ide_tape_probe(ide_drive_t *);
2282
2283 static struct ide_driver idetape_driver = {
2284         .gen_driver = {
2285                 .owner          = THIS_MODULE,
2286                 .name           = "ide-tape",
2287                 .bus            = &ide_bus_type,
2288         },
2289         .probe                  = ide_tape_probe,
2290         .remove                 = ide_tape_remove,
2291         .version                = IDETAPE_VERSION,
2292         .do_request             = idetape_do_request,
2293 #ifdef CONFIG_IDE_PROC_FS
2294         .proc_entries           = ide_tape_proc_entries,
2295         .proc_devsets           = ide_tape_proc_devsets,
2296 #endif
2297 };
2298
2299 /* Our character device supporting functions, passed to register_chrdev. */
2300 static const struct file_operations idetape_fops = {
2301         .owner          = THIS_MODULE,
2302         .read           = idetape_chrdev_read,
2303         .write          = idetape_chrdev_write,
2304         .ioctl          = idetape_chrdev_ioctl,
2305         .open           = idetape_chrdev_open,
2306         .release        = idetape_chrdev_release,
2307 };
2308
2309 static int idetape_open(struct block_device *bdev, fmode_t mode)
2310 {
2311         struct ide_tape_obj *tape = ide_tape_get(bdev->bd_disk);
2312
2313         if (!tape)
2314                 return -ENXIO;
2315
2316         return 0;
2317 }
2318
2319 static int idetape_release(struct gendisk *disk, fmode_t mode)
2320 {
2321         struct ide_tape_obj *tape = ide_drv_g(disk, ide_tape_obj);
2322
2323         ide_tape_put(tape);
2324         return 0;
2325 }
2326
2327 static int idetape_ioctl(struct block_device *bdev, fmode_t mode,
2328                         unsigned int cmd, unsigned long arg)
2329 {
2330         struct ide_tape_obj *tape = ide_drv_g(bdev->bd_disk, ide_tape_obj);
2331         ide_drive_t *drive = tape->drive;
2332         int err = generic_ide_ioctl(drive, bdev, cmd, arg);
2333         if (err == -EINVAL)
2334                 err = idetape_blkdev_ioctl(drive, cmd, arg);
2335         return err;
2336 }
2337
2338 static struct block_device_operations idetape_block_ops = {
2339         .owner          = THIS_MODULE,
2340         .open           = idetape_open,
2341         .release        = idetape_release,
2342         .locked_ioctl   = idetape_ioctl,
2343 };
2344
2345 static int ide_tape_probe(ide_drive_t *drive)
2346 {
2347         idetape_tape_t *tape;
2348         struct gendisk *g;
2349         int minor;
2350
2351         if (!strstr("ide-tape", drive->driver_req))
2352                 goto failed;
2353
2354         if (drive->media != ide_tape)
2355                 goto failed;
2356
2357         if ((drive->dev_flags & IDE_DFLAG_ID_READ) &&
2358             ide_check_atapi_device(drive, DRV_NAME) == 0) {
2359                 printk(KERN_ERR "ide-tape: %s: not supported by this version of"
2360                                 " the driver\n", drive->name);
2361                 goto failed;
2362         }
2363         tape = kzalloc(sizeof(idetape_tape_t), GFP_KERNEL);
2364         if (tape == NULL) {
2365                 printk(KERN_ERR "ide-tape: %s: Can't allocate a tape struct\n",
2366                                 drive->name);
2367                 goto failed;
2368         }
2369
2370         g = alloc_disk(1 << PARTN_BITS);
2371         if (!g)
2372                 goto out_free_tape;
2373
2374         ide_init_disk(g, drive);
2375
2376         tape->dev.parent = &drive->gendev;
2377         tape->dev.release = ide_tape_release;
2378         dev_set_name(&tape->dev, dev_name(&drive->gendev));
2379
2380         if (device_register(&tape->dev))
2381                 goto out_free_disk;
2382
2383         tape->drive = drive;
2384         tape->driver = &idetape_driver;
2385         tape->disk = g;
2386
2387         g->private_data = &tape->driver;
2388
2389         drive->driver_data = tape;
2390
2391         mutex_lock(&idetape_ref_mutex);
2392         for (minor = 0; idetape_devs[minor]; minor++)
2393                 ;
2394         idetape_devs[minor] = tape;
2395         mutex_unlock(&idetape_ref_mutex);
2396
2397         idetape_setup(drive, tape, minor);
2398
2399         device_create(idetape_sysfs_class, &drive->gendev,
2400                       MKDEV(IDETAPE_MAJOR, minor), NULL, "%s", tape->name);
2401         device_create(idetape_sysfs_class, &drive->gendev,
2402                       MKDEV(IDETAPE_MAJOR, minor + 128), NULL,
2403                       "n%s", tape->name);
2404
2405         g->fops = &idetape_block_ops;
2406         ide_register_region(g);
2407
2408         return 0;
2409
2410 out_free_disk:
2411         put_disk(g);
2412 out_free_tape:
2413         kfree(tape);
2414 failed:
2415         return -ENODEV;
2416 }
2417
2418 static void __exit idetape_exit(void)
2419 {
2420         driver_unregister(&idetape_driver.gen_driver);
2421         class_destroy(idetape_sysfs_class);
2422         unregister_chrdev(IDETAPE_MAJOR, "ht");
2423 }
2424
2425 static int __init idetape_init(void)
2426 {
2427         int error = 1;
2428         idetape_sysfs_class = class_create(THIS_MODULE, "ide_tape");
2429         if (IS_ERR(idetape_sysfs_class)) {
2430                 idetape_sysfs_class = NULL;
2431                 printk(KERN_ERR "Unable to create sysfs class for ide tapes\n");
2432                 error = -EBUSY;
2433                 goto out;
2434         }
2435
2436         if (register_chrdev(IDETAPE_MAJOR, "ht", &idetape_fops)) {
2437                 printk(KERN_ERR "ide-tape: Failed to register chrdev"
2438                                 " interface\n");
2439                 error = -EBUSY;
2440                 goto out_free_class;
2441         }
2442
2443         error = driver_register(&idetape_driver.gen_driver);
2444         if (error)
2445                 goto out_free_driver;
2446
2447         return 0;
2448
2449 out_free_driver:
2450         driver_unregister(&idetape_driver.gen_driver);
2451 out_free_class:
2452         class_destroy(idetape_sysfs_class);
2453 out:
2454         return error;
2455 }
2456
2457 MODULE_ALIAS("ide:*m-tape*");
2458 module_init(idetape_init);
2459 module_exit(idetape_exit);
2460 MODULE_ALIAS_CHARDEV_MAJOR(IDETAPE_MAJOR);
2461 MODULE_DESCRIPTION("ATAPI Streaming TAPE Driver");
2462 MODULE_LICENSE("GPL");