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