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