2 SCSI Tape Driver for Linux version 1.1 and newer. See the accompanying
3 file Documentation/scsi/st.txt for more information.
6 Rewritten from Dwayne Forsyth's SCSI tape driver by Kai Makisara.
7 Contribution and ideas from several people including (in alphabetical
8 order) Klaus Ehrenfried, Eugene Exarevsky, Eric Lee Green, Wolfgang Denk,
9 Steve Hirsch, Andreas Koppenh"ofer, Michael Leodolter, Eyal Lebedinsky,
10 Michael Schaefer, J"org Weule, and Eric Youngdale.
12 Copyright 1992 - 2008 Kai Makisara
13 email Kai.Makisara@kolumbus.fi
15 Some small formal changes - aeb, 950809
17 Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support
20 static const char *verstr = "20080504";
22 #include <linux/module.h>
25 #include <linux/kernel.h>
26 #include <linux/sched.h>
28 #include <linux/init.h>
29 #include <linux/string.h>
30 #include <linux/errno.h>
31 #include <linux/mtio.h>
32 #include <linux/cdrom.h>
33 #include <linux/ioctl.h>
34 #include <linux/fcntl.h>
35 #include <linux/spinlock.h>
36 #include <linux/blkdev.h>
37 #include <linux/moduleparam.h>
38 #include <linux/cdev.h>
39 #include <linux/delay.h>
40 #include <linux/mutex.h>
41 #include <linux/smp_lock.h>
43 #include <asm/uaccess.h>
45 #include <asm/system.h>
47 #include <scsi/scsi.h>
48 #include <scsi/scsi_dbg.h>
49 #include <scsi/scsi_device.h>
50 #include <scsi/scsi_driver.h>
51 #include <scsi/scsi_eh.h>
52 #include <scsi/scsi_host.h>
53 #include <scsi/scsi_ioctl.h>
57 /* The driver prints some debugging information on the console if DEBUG
58 is defined and non-zero. */
62 /* The message level for the debug messages is currently set to KERN_NOTICE
63 so that people can easily see the messages. Later when the debugging messages
64 in the drivers are more widely classified, this may be changed to KERN_DEBUG. */
65 #define ST_DEB_MSG KERN_NOTICE
67 #define DEBC(a) if (debugging) { a ; }
73 #define ST_KILOBYTE 1024
75 #include "st_options.h"
78 static int buffer_kbs;
79 static int max_sg_segs;
80 static int try_direct_io = TRY_DIRECT_IO;
81 static int try_rdio = 1;
82 static int try_wdio = 1;
84 static int st_dev_max;
87 static struct class *st_sysfs_class;
89 MODULE_AUTHOR("Kai Makisara");
90 MODULE_DESCRIPTION("SCSI tape (st) driver");
91 MODULE_LICENSE("GPL");
92 MODULE_ALIAS_CHARDEV_MAJOR(SCSI_TAPE_MAJOR);
93 MODULE_ALIAS_SCSI_DEVICE(TYPE_TAPE);
95 /* Set 'perm' (4th argument) to 0 to disable module_param's definition
96 * of sysfs parameters (which module_param doesn't yet support).
97 * Sysfs parameters defined explicitly later.
99 module_param_named(buffer_kbs, buffer_kbs, int, 0);
100 MODULE_PARM_DESC(buffer_kbs, "Default driver buffer size for fixed block mode (KB; 32)");
101 module_param_named(max_sg_segs, max_sg_segs, int, 0);
102 MODULE_PARM_DESC(max_sg_segs, "Maximum number of scatter/gather segments to use (256)");
103 module_param_named(try_direct_io, try_direct_io, int, 0);
104 MODULE_PARM_DESC(try_direct_io, "Try direct I/O between user buffer and tape drive (1)");
106 /* Extra parameters for testing */
107 module_param_named(try_rdio, try_rdio, int, 0);
108 MODULE_PARM_DESC(try_rdio, "Try direct read i/o when possible");
109 module_param_named(try_wdio, try_wdio, int, 0);
110 MODULE_PARM_DESC(try_wdio, "Try direct write i/o when possible");
113 static int write_threshold_kbs; /* retained for compatibility */
114 static struct st_dev_parm {
117 } parms[] __initdata = {
119 "buffer_kbs", &buffer_kbs
121 { /* Retained for compatibility with 2.4 */
122 "write_threshold_kbs", &write_threshold_kbs
128 "try_direct_io", &try_direct_io
133 /* Restrict the number of modes so that names for all are assigned */
134 #if ST_NBR_MODES > 16
135 #error "Maximum number of modes is 16"
137 /* Bit reversed order to get same names for same minors with all
139 static const char *st_formats[] = {
140 "", "r", "k", "s", "l", "t", "o", "u",
141 "m", "v", "p", "x", "a", "y", "q", "z"};
143 /* The default definitions have been moved to st_options.h */
145 #define ST_FIXED_BUFFER_SIZE (ST_FIXED_BUFFER_BLOCKS * ST_KILOBYTE)
147 /* The buffer size should fit into the 24 bits for length in the
148 6-byte SCSI read and write commands. */
149 #if ST_FIXED_BUFFER_SIZE >= (2 << 24 - 1)
150 #error "Buffer size should not exceed (2 << 24 - 1) bytes!"
153 static int debugging = DEBUG;
155 #define MAX_RETRIES 0
156 #define MAX_WRITE_RETRIES 0
157 #define MAX_READY_RETRIES 0
158 #define NO_TAPE NOT_READY
160 #define ST_TIMEOUT (900 * HZ)
161 #define ST_LONG_TIMEOUT (14000 * HZ)
163 /* Remove mode bits and auto-rewind bit (7) */
164 #define TAPE_NR(x) ( ((iminor(x) & ~255) >> (ST_NBR_MODE_BITS + 1)) | \
165 (iminor(x) & ~(-1 << ST_MODE_SHIFT)) )
166 #define TAPE_MODE(x) ((iminor(x) & ST_MODE_MASK) >> ST_MODE_SHIFT)
168 /* Construct the minor number from the device (d), mode (m), and non-rewind (n) data */
169 #define TAPE_MINOR(d, m, n) (((d & ~(255 >> (ST_NBR_MODE_BITS + 1))) << (ST_NBR_MODE_BITS + 1)) | \
170 (d & (255 >> (ST_NBR_MODE_BITS + 1))) | (m << ST_MODE_SHIFT) | ((n != 0) << 7) )
172 /* Internal ioctl to set both density (uppermost 8 bits) and blocksize (lower
174 #define SET_DENS_AND_BLK 0x10001
176 static DEFINE_RWLOCK(st_dev_arr_lock);
178 static int st_fixed_buffer_size = ST_FIXED_BUFFER_SIZE;
179 static int st_max_sg_segs = ST_MAX_SG;
181 static struct scsi_tape **scsi_tapes = NULL;
183 static int modes_defined;
185 static int enlarge_buffer(struct st_buffer *, int, int);
186 static void clear_buffer(struct st_buffer *);
187 static void normalize_buffer(struct st_buffer *);
188 static int append_to_buffer(const char __user *, struct st_buffer *, int);
189 static int from_buffer(struct st_buffer *, char __user *, int);
190 static void move_buffer_data(struct st_buffer *, int);
192 static int sgl_map_user_pages(struct st_buffer *, const unsigned int,
193 unsigned long, size_t, int);
194 static int sgl_unmap_user_pages(struct st_buffer *, const unsigned int, int);
196 static int st_probe(struct device *);
197 static int st_remove(struct device *);
199 static int do_create_sysfs_files(void);
200 static void do_remove_sysfs_files(void);
201 static int do_create_class_files(struct scsi_tape *, int, int);
203 static struct scsi_driver st_template = {
204 .owner = THIS_MODULE,
212 static int st_compression(struct scsi_tape *, int);
214 static int find_partition(struct scsi_tape *);
215 static int switch_partition(struct scsi_tape *);
217 static int st_int_ioctl(struct scsi_tape *, unsigned int, unsigned long);
219 static void scsi_tape_release(struct kref *);
221 #define to_scsi_tape(obj) container_of(obj, struct scsi_tape, kref)
223 static DEFINE_MUTEX(st_ref_mutex);
226 #include "osst_detect.h"
227 #ifndef SIGS_FROM_OSST
228 #define SIGS_FROM_OSST \
229 {"OnStream", "SC-", "", "osst"}, \
230 {"OnStream", "DI-", "", "osst"}, \
231 {"OnStream", "DP-", "", "osst"}, \
232 {"OnStream", "USB", "", "osst"}, \
233 {"OnStream", "FW-", "", "osst"}
236 static struct scsi_tape *scsi_tape_get(int dev)
238 struct scsi_tape *STp = NULL;
240 mutex_lock(&st_ref_mutex);
241 write_lock(&st_dev_arr_lock);
243 if (dev < st_dev_max && scsi_tapes != NULL)
244 STp = scsi_tapes[dev];
247 kref_get(&STp->kref);
252 if (scsi_device_get(STp->device))
258 kref_put(&STp->kref, scsi_tape_release);
261 write_unlock(&st_dev_arr_lock);
262 mutex_unlock(&st_ref_mutex);
266 static void scsi_tape_put(struct scsi_tape *STp)
268 struct scsi_device *sdev = STp->device;
270 mutex_lock(&st_ref_mutex);
271 kref_put(&STp->kref, scsi_tape_release);
272 scsi_device_put(sdev);
273 mutex_unlock(&st_ref_mutex);
276 struct st_reject_data {
280 char *driver_hint; /* Name of the correct driver, NULL if unknown */
283 static struct st_reject_data reject_list[] = {
284 /* {"XXX", "Yy-", "", NULL}, example */
288 /* If the device signature is on the list of incompatible drives, the
289 function returns a pointer to the name of the correct driver (if known) */
290 static char * st_incompatible(struct scsi_device* SDp)
292 struct st_reject_data *rp;
294 for (rp=&(reject_list[0]); rp->vendor != NULL; rp++)
295 if (!strncmp(rp->vendor, SDp->vendor, strlen(rp->vendor)) &&
296 !strncmp(rp->model, SDp->model, strlen(rp->model)) &&
297 !strncmp(rp->rev, SDp->rev, strlen(rp->rev))) {
299 return rp->driver_hint;
307 static inline char *tape_name(struct scsi_tape *tape)
309 return tape->disk->disk_name;
313 static void st_analyze_sense(struct st_request *SRpnt, struct st_cmdstatus *s)
316 const u8 *sense = SRpnt->sense;
318 s->have_sense = scsi_normalize_sense(SRpnt->sense,
319 SCSI_SENSE_BUFFERSIZE, &s->sense_hdr);
325 scsi_get_sense_info_fld(sense, SCSI_SENSE_BUFFERSIZE, &s->uremainder64);
326 switch (sense[0] & 0x7f) {
331 s->flags = sense[2] & 0xe0;
337 ucp = scsi_sense_desc_find(sense, SCSI_SENSE_BUFFERSIZE, 4);
338 s->flags = ucp ? (ucp[3] & 0xe0) : 0;
345 /* Convert the result to success code */
346 static int st_chk_result(struct scsi_tape *STp, struct st_request * SRpnt)
348 int result = SRpnt->result;
350 DEB(const char *stp;)
351 char *name = tape_name(STp);
352 struct st_cmdstatus *cmdstatp;
357 cmdstatp = &STp->buffer->cmdstat;
358 st_analyze_sense(SRpnt, cmdstatp);
360 if (cmdstatp->have_sense)
361 scode = STp->buffer->cmdstat.sense_hdr.sense_key;
367 printk(ST_DEB_MSG "%s: Error: %x, cmd: %x %x %x %x %x %x\n",
369 SRpnt->cmd[0], SRpnt->cmd[1], SRpnt->cmd[2],
370 SRpnt->cmd[3], SRpnt->cmd[4], SRpnt->cmd[5]);
371 if (cmdstatp->have_sense)
372 __scsi_print_sense(name, SRpnt->sense, SCSI_SENSE_BUFFERSIZE);
374 if (!debugging) { /* Abnormal conditions for tape */
375 if (!cmdstatp->have_sense)
377 "%s: Error %x (sugg. bt 0x%x, driver bt 0x%x, host bt 0x%x).\n",
378 name, result, suggestion(result),
379 driver_byte(result) & DRIVER_MASK, host_byte(result));
380 else if (cmdstatp->have_sense &&
382 scode != RECOVERED_ERROR &&
383 /* scode != UNIT_ATTENTION && */
384 scode != BLANK_CHECK &&
385 scode != VOLUME_OVERFLOW &&
386 SRpnt->cmd[0] != MODE_SENSE &&
387 SRpnt->cmd[0] != TEST_UNIT_READY) {
389 __scsi_print_sense(name, SRpnt->sense, SCSI_SENSE_BUFFERSIZE);
393 if (cmdstatp->fixed_format &&
394 STp->cln_mode >= EXTENDED_SENSE_START) { /* Only fixed format sense */
395 if (STp->cln_sense_value)
396 STp->cleaning_req |= ((SRpnt->sense[STp->cln_mode] &
397 STp->cln_sense_mask) == STp->cln_sense_value);
399 STp->cleaning_req |= ((SRpnt->sense[STp->cln_mode] &
400 STp->cln_sense_mask) != 0);
402 if (cmdstatp->have_sense &&
403 cmdstatp->sense_hdr.asc == 0 && cmdstatp->sense_hdr.ascq == 0x17)
404 STp->cleaning_req = 1; /* ASC and ASCQ => cleaning requested */
406 STp->pos_unknown |= STp->device->was_reset;
408 if (cmdstatp->have_sense &&
409 scode == RECOVERED_ERROR
410 #if ST_RECOVERED_WRITE_FATAL
411 && SRpnt->cmd[0] != WRITE_6
412 && SRpnt->cmd[0] != WRITE_FILEMARKS
415 STp->recover_count++;
420 if (SRpnt->cmd[0] == READ_6)
422 else if (SRpnt->cmd[0] == WRITE_6)
426 printk(ST_DEB_MSG "%s: Recovered %s error (%d).\n", name, stp,
430 if (cmdstatp->flags == 0)
436 static struct st_request *st_allocate_request(struct scsi_tape *stp)
438 struct st_request *streq;
440 streq = kzalloc(sizeof(*streq), GFP_KERNEL);
444 DEBC(printk(KERN_ERR "%s: Can't get SCSI request.\n",
446 if (signal_pending(current))
447 stp->buffer->syscall_result = -EINTR;
449 stp->buffer->syscall_result = -EBUSY;
455 static void st_release_request(struct st_request *streq)
460 static void st_scsi_execute_end(struct request *req, int uptodate)
462 struct st_request *SRpnt = req->end_io_data;
463 struct scsi_tape *STp = SRpnt->stp;
465 STp->buffer->cmdstat.midlevel_result = SRpnt->result = req->errors;
466 STp->buffer->cmdstat.residual = req->data_len;
469 complete(SRpnt->waiting);
471 blk_rq_unmap_user(SRpnt->bio);
472 __blk_put_request(req->q, req);
475 static int st_scsi_execute(struct st_request *SRpnt, const unsigned char *cmd,
476 int data_direction, void *buffer, unsigned bufflen,
477 int timeout, int retries)
480 struct rq_map_data *mdata = &SRpnt->stp->buffer->map_data;
482 int write = (data_direction == DMA_TO_DEVICE);
484 req = blk_get_request(SRpnt->stp->device->request_queue, write,
487 return DRIVER_ERROR << 24;
489 req->cmd_type = REQ_TYPE_BLOCK_PC;
490 req->cmd_flags |= REQ_QUIET;
492 mdata->null_mapped = 1;
494 err = blk_rq_map_user(req->q, req, mdata, NULL, bufflen, GFP_KERNEL);
496 blk_put_request(req);
497 return DRIVER_ERROR << 24;
500 SRpnt->bio = req->bio;
501 req->cmd_len = COMMAND_SIZE(cmd[0]);
502 memset(req->cmd, 0, BLK_MAX_CDB);
503 memcpy(req->cmd, cmd, req->cmd_len);
504 req->sense = SRpnt->sense;
506 req->timeout = timeout;
507 req->retries = retries;
508 req->end_io_data = SRpnt;
510 blk_execute_rq_nowait(req->q, NULL, req, 1, st_scsi_execute_end);
514 /* Do the scsi command. Waits until command performed if do_wait is true.
515 Otherwise write_behind_check() is used to check that the command
517 static struct st_request *
518 st_do_scsi(struct st_request * SRpnt, struct scsi_tape * STp, unsigned char *cmd,
519 int bytes, int direction, int timeout, int retries, int do_wait)
521 struct completion *waiting;
522 struct rq_map_data *mdata = &STp->buffer->map_data;
525 /* if async, make sure there's no command outstanding */
526 if (!do_wait && ((STp->buffer)->last_SRpnt)) {
527 printk(KERN_ERR "%s: Async command already active.\n",
529 if (signal_pending(current))
530 (STp->buffer)->syscall_result = (-EINTR);
532 (STp->buffer)->syscall_result = (-EBUSY);
537 SRpnt = st_allocate_request(STp);
542 /* If async IO, set last_SRpnt. This ptr tells write_behind_check
543 which IO is outstanding. It's nulled out when the IO completes. */
545 (STp->buffer)->last_SRpnt = SRpnt;
547 waiting = &STp->wait;
548 init_completion(waiting);
549 SRpnt->waiting = waiting;
551 if (STp->buffer->do_dio) {
552 mdata->nr_entries = STp->buffer->sg_segs;
553 mdata->pages = STp->buffer->mapped_pages;
556 DIV_ROUND_UP(bytes, PAGE_SIZE << mdata->page_order);
557 STp->buffer->map_data.pages = STp->buffer->reserved_pages;
558 STp->buffer->map_data.offset = 0;
561 memcpy(SRpnt->cmd, cmd, sizeof(SRpnt->cmd));
562 STp->buffer->cmdstat.have_sense = 0;
563 STp->buffer->syscall_result = 0;
565 ret = st_scsi_execute(SRpnt, cmd, direction, NULL, bytes, timeout,
568 /* could not allocate the buffer or request was too large */
569 (STp->buffer)->syscall_result = (-EBUSY);
570 (STp->buffer)->last_SRpnt = NULL;
571 } else if (do_wait) {
572 wait_for_completion(waiting);
573 SRpnt->waiting = NULL;
574 (STp->buffer)->syscall_result = st_chk_result(STp, SRpnt);
580 static int st_scsi_kern_execute(struct st_request *streq,
581 const unsigned char *cmd, int data_direction,
582 void *buffer, unsigned bufflen, int timeout,
585 struct scsi_tape *stp = streq->stp;
588 stp->buffer->cmdstat.have_sense = 0;
589 memcpy(streq->cmd, cmd, sizeof(streq->cmd));
591 ret = scsi_execute(stp->device, cmd, data_direction, buffer, bufflen,
592 streq->sense, timeout, retries, 0, &resid);
593 if (driver_byte(ret) & DRIVER_ERROR)
596 stp->buffer->cmdstat.midlevel_result = streq->result = ret;
597 stp->buffer->cmdstat.residual = resid;
598 stp->buffer->syscall_result = st_chk_result(stp, streq);
603 /* Handle the write-behind checking (waits for completion). Returns -ENOSPC if
604 write has been correct but EOM early warning reached, -EIO if write ended in
605 error or zero if write successful. Asynchronous writes are used only in
606 variable block mode. */
607 static int write_behind_check(struct scsi_tape * STp)
610 struct st_buffer *STbuffer;
611 struct st_partstat *STps;
612 struct st_cmdstatus *cmdstatp;
613 struct st_request *SRpnt;
615 STbuffer = STp->buffer;
616 if (!STbuffer->writing)
620 if (STp->write_pending)
626 wait_for_completion(&(STp->wait));
627 SRpnt = STbuffer->last_SRpnt;
628 STbuffer->last_SRpnt = NULL;
629 SRpnt->waiting = NULL;
631 (STp->buffer)->syscall_result = st_chk_result(STp, SRpnt);
632 st_release_request(SRpnt);
634 STbuffer->buffer_bytes -= STbuffer->writing;
635 STps = &(STp->ps[STp->partition]);
636 if (STps->drv_block >= 0) {
637 if (STp->block_size == 0)
640 STps->drv_block += STbuffer->writing / STp->block_size;
643 cmdstatp = &STbuffer->cmdstat;
644 if (STbuffer->syscall_result) {
646 if (cmdstatp->have_sense && !cmdstatp->deferred &&
647 (cmdstatp->flags & SENSE_EOM) &&
648 (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
649 cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR)) {
650 /* EOM at write-behind, has all data been written? */
651 if (!cmdstatp->remainder_valid ||
652 cmdstatp->uremainder64 == 0)
656 STps->drv_block = -1;
658 STbuffer->writing = 0;
660 DEB(if (debugging && retval)
661 printk(ST_DEB_MSG "%s: Async write error %x, return value %d.\n",
662 tape_name(STp), STbuffer->cmdstat.midlevel_result, retval);) /* end DEB */
668 /* Step over EOF if it has been inadvertently crossed (ioctl not used because
669 it messes up the block number). */
670 static int cross_eof(struct scsi_tape * STp, int forward)
672 struct st_request *SRpnt;
673 unsigned char cmd[MAX_COMMAND_SIZE];
677 cmd[1] = 0x01; /* Space FileMarks */
682 cmd[2] = cmd[3] = cmd[4] = 0xff; /* -1 filemarks */
685 DEBC(printk(ST_DEB_MSG "%s: Stepping over filemark %s.\n",
686 tape_name(STp), forward ? "forward" : "backward"));
688 SRpnt = st_allocate_request(STp);
690 return STp->buffer->syscall_result;
692 ret = st_scsi_kern_execute(SRpnt, cmd, DMA_NONE, NULL, 0,
693 STp->device->request_queue->rq_timeout,
698 ret = STp->buffer->syscall_result;
700 if ((STp->buffer)->cmdstat.midlevel_result != 0)
701 printk(KERN_ERR "%s: Stepping over filemark %s failed.\n",
702 tape_name(STp), forward ? "forward" : "backward");
705 st_release_request(SRpnt);
711 /* Flush the write buffer (never need to write if variable blocksize). */
712 static int st_flush_write_buffer(struct scsi_tape * STp)
716 unsigned char cmd[MAX_COMMAND_SIZE];
717 struct st_request *SRpnt;
718 struct st_partstat *STps;
720 result = write_behind_check(STp);
725 if (STp->dirty == 1) {
727 transfer = STp->buffer->buffer_bytes;
728 DEBC(printk(ST_DEB_MSG "%s: Flushing %d bytes.\n",
729 tape_name(STp), transfer));
731 memset(cmd, 0, MAX_COMMAND_SIZE);
734 blks = transfer / STp->block_size;
739 SRpnt = st_do_scsi(NULL, STp, cmd, transfer, DMA_TO_DEVICE,
740 STp->device->request_queue->rq_timeout,
741 MAX_WRITE_RETRIES, 1);
743 return (STp->buffer)->syscall_result;
745 STps = &(STp->ps[STp->partition]);
746 if ((STp->buffer)->syscall_result != 0) {
747 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
749 if (cmdstatp->have_sense && !cmdstatp->deferred &&
750 (cmdstatp->flags & SENSE_EOM) &&
751 (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
752 cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) &&
753 (!cmdstatp->remainder_valid ||
754 cmdstatp->uremainder64 == 0)) { /* All written at EOM early warning */
756 (STp->buffer)->buffer_bytes = 0;
757 if (STps->drv_block >= 0)
758 STps->drv_block += blks;
761 printk(KERN_ERR "%s: Error on flush.\n",
763 STps->drv_block = (-1);
767 if (STps->drv_block >= 0)
768 STps->drv_block += blks;
770 (STp->buffer)->buffer_bytes = 0;
772 st_release_request(SRpnt);
779 /* Flush the tape buffer. The tape will be positioned correctly unless
780 seek_next is true. */
781 static int flush_buffer(struct scsi_tape *STp, int seek_next)
783 int backspace, result;
784 struct st_buffer *STbuffer;
785 struct st_partstat *STps;
787 STbuffer = STp->buffer;
790 * If there was a bus reset, block further access
793 if (STp->pos_unknown)
796 if (STp->ready != ST_READY)
798 STps = &(STp->ps[STp->partition]);
799 if (STps->rw == ST_WRITING) /* Writing */
800 return st_flush_write_buffer(STp);
802 if (STp->block_size == 0)
805 backspace = ((STp->buffer)->buffer_bytes +
806 (STp->buffer)->read_pointer) / STp->block_size -
807 ((STp->buffer)->read_pointer + STp->block_size - 1) /
809 (STp->buffer)->buffer_bytes = 0;
810 (STp->buffer)->read_pointer = 0;
813 if (STps->eof == ST_FM_HIT) {
814 result = cross_eof(STp, 0); /* Back over the EOF hit */
816 STps->eof = ST_NOEOF;
818 if (STps->drv_file >= 0)
823 if (!result && backspace > 0)
824 result = st_int_ioctl(STp, MTBSR, backspace);
825 } else if (STps->eof == ST_FM_HIT) {
826 if (STps->drv_file >= 0)
829 STps->eof = ST_NOEOF;
835 /* Set the mode parameters */
836 static int set_mode_densblk(struct scsi_tape * STp, struct st_modedef * STm)
840 char *name = tape_name(STp);
842 if (!STp->density_changed &&
843 STm->default_density >= 0 &&
844 STm->default_density != STp->density) {
845 arg = STm->default_density;
849 arg <<= MT_ST_DENSITY_SHIFT;
850 if (!STp->blksize_changed &&
851 STm->default_blksize >= 0 &&
852 STm->default_blksize != STp->block_size) {
853 arg |= STm->default_blksize;
856 arg |= STp->block_size;
858 st_int_ioctl(STp, SET_DENS_AND_BLK, arg)) {
860 "%s: Can't set default block size to %d bytes and density %x.\n",
861 name, STm->default_blksize, STm->default_density);
869 /* Lock or unlock the drive door. Don't use when st_request allocated. */
870 static int do_door_lock(struct scsi_tape * STp, int do_lock)
873 DEB(char *name = tape_name(STp);)
876 cmd = do_lock ? SCSI_IOCTL_DOORLOCK : SCSI_IOCTL_DOORUNLOCK;
877 DEBC(printk(ST_DEB_MSG "%s: %socking drive door.\n", name,
878 do_lock ? "L" : "Unl"));
879 retval = scsi_ioctl(STp->device, cmd, NULL);
881 STp->door_locked = do_lock ? ST_LOCKED_EXPLICIT : ST_UNLOCKED;
884 STp->door_locked = ST_LOCK_FAILS;
890 /* Set the internal state after reset */
891 static void reset_state(struct scsi_tape *STp)
894 struct st_partstat *STps;
896 STp->pos_unknown = 0;
897 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
898 STps = &(STp->ps[i]);
900 STps->eof = ST_NOEOF;
902 STps->last_block_valid = 0;
903 STps->drv_block = -1;
906 if (STp->can_partitions) {
907 STp->partition = find_partition(STp);
908 if (STp->partition < 0)
910 STp->new_partition = STp->partition;
914 /* Test if the drive is ready. Returns either one of the codes below or a negative system
916 #define CHKRES_READY 0
917 #define CHKRES_NEW_SESSION 1
918 #define CHKRES_NOT_READY 2
919 #define CHKRES_NO_TAPE 3
921 #define MAX_ATTENTIONS 10
923 static int test_ready(struct scsi_tape *STp, int do_wait)
925 int attentions, waits, max_wait, scode;
926 int retval = CHKRES_READY, new_session = 0;
927 unsigned char cmd[MAX_COMMAND_SIZE];
928 struct st_request *SRpnt;
929 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
931 SRpnt = st_allocate_request(STp);
933 return STp->buffer->syscall_result;
935 max_wait = do_wait ? ST_BLOCK_SECONDS : 0;
937 for (attentions=waits=0; ; ) {
938 memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
939 cmd[0] = TEST_UNIT_READY;
941 retval = st_scsi_kern_execute(SRpnt, cmd, DMA_NONE, NULL, 0,
947 if (cmdstatp->have_sense) {
949 scode = cmdstatp->sense_hdr.sense_key;
951 if (scode == UNIT_ATTENTION) { /* New media? */
953 if (attentions < MAX_ATTENTIONS) {
963 if (scode == NOT_READY) {
964 if (waits < max_wait) {
965 if (msleep_interruptible(1000)) {
973 if ((STp->device)->scsi_level >= SCSI_2 &&
974 cmdstatp->sense_hdr.asc == 0x3a) /* Check ASC */
975 retval = CHKRES_NO_TAPE;
977 retval = CHKRES_NOT_READY;
983 retval = (STp->buffer)->syscall_result;
985 retval = new_session ? CHKRES_NEW_SESSION : CHKRES_READY;
989 st_release_request(SRpnt);
995 /* See if the drive is ready and gather information about the tape. Return values:
996 < 0 negative error code from errno.h
998 1 drive not ready (possibly no tape)
1000 static int check_tape(struct scsi_tape *STp, struct file *filp)
1002 int i, retval, new_session = 0, do_wait;
1003 unsigned char cmd[MAX_COMMAND_SIZE], saved_cleaning;
1004 unsigned short st_flags = filp->f_flags;
1005 struct st_request *SRpnt = NULL;
1006 struct st_modedef *STm;
1007 struct st_partstat *STps;
1008 char *name = tape_name(STp);
1009 struct inode *inode = filp->f_path.dentry->d_inode;
1010 int mode = TAPE_MODE(inode);
1012 STp->ready = ST_READY;
1014 if (mode != STp->current_mode) {
1015 DEBC(printk(ST_DEB_MSG "%s: Mode change from %d to %d.\n",
1016 name, STp->current_mode, mode));
1018 STp->current_mode = mode;
1020 STm = &(STp->modes[STp->current_mode]);
1022 saved_cleaning = STp->cleaning_req;
1023 STp->cleaning_req = 0;
1025 do_wait = ((filp->f_flags & O_NONBLOCK) == 0);
1026 retval = test_ready(STp, do_wait);
1031 if (retval == CHKRES_NEW_SESSION) {
1032 STp->pos_unknown = 0;
1033 STp->partition = STp->new_partition = 0;
1034 if (STp->can_partitions)
1035 STp->nbr_partitions = 1; /* This guess will be updated later
1037 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
1038 STps = &(STp->ps[i]);
1040 STps->eof = ST_NOEOF;
1042 STps->last_block_valid = 0;
1043 STps->drv_block = 0;
1049 STp->cleaning_req |= saved_cleaning;
1051 if (retval == CHKRES_NOT_READY || retval == CHKRES_NO_TAPE) {
1052 if (retval == CHKRES_NO_TAPE)
1053 STp->ready = ST_NO_TAPE;
1055 STp->ready = ST_NOT_READY;
1057 STp->density = 0; /* Clear the erroneous "residue" */
1058 STp->write_prot = 0;
1059 STp->block_size = 0;
1060 STp->ps[0].drv_file = STp->ps[0].drv_block = (-1);
1061 STp->partition = STp->new_partition = 0;
1062 STp->door_locked = ST_UNLOCKED;
1063 return CHKRES_NOT_READY;
1067 SRpnt = st_allocate_request(STp);
1069 retval = STp->buffer->syscall_result;
1073 if (STp->omit_blklims)
1074 STp->min_block = STp->max_block = (-1);
1076 memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
1077 cmd[0] = READ_BLOCK_LIMITS;
1079 retval = st_scsi_kern_execute(SRpnt, cmd, DMA_FROM_DEVICE,
1080 STp->buffer->b_data, 6,
1081 STp->device->request_queue->rq_timeout,
1084 st_release_request(SRpnt);
1088 if (!SRpnt->result && !STp->buffer->cmdstat.have_sense) {
1089 STp->max_block = ((STp->buffer)->b_data[1] << 16) |
1090 ((STp->buffer)->b_data[2] << 8) | (STp->buffer)->b_data[3];
1091 STp->min_block = ((STp->buffer)->b_data[4] << 8) |
1092 (STp->buffer)->b_data[5];
1093 if ( DEB( debugging || ) !STp->inited)
1095 "%s: Block limits %d - %d bytes.\n", name,
1096 STp->min_block, STp->max_block);
1098 STp->min_block = STp->max_block = (-1);
1099 DEBC(printk(ST_DEB_MSG "%s: Can't read block limits.\n",
1104 memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
1105 cmd[0] = MODE_SENSE;
1108 retval = st_scsi_kern_execute(SRpnt, cmd, DMA_FROM_DEVICE,
1109 STp->buffer->b_data, 12,
1110 STp->device->request_queue->rq_timeout,
1113 st_release_request(SRpnt);
1117 if ((STp->buffer)->syscall_result != 0) {
1118 DEBC(printk(ST_DEB_MSG "%s: No Mode Sense.\n", name));
1119 STp->block_size = ST_DEFAULT_BLOCK; /* Educated guess (?) */
1120 (STp->buffer)->syscall_result = 0; /* Prevent error propagation */
1121 STp->drv_write_prot = 0;
1123 DEBC(printk(ST_DEB_MSG
1124 "%s: Mode sense. Length %d, medium %x, WBS %x, BLL %d\n",
1126 (STp->buffer)->b_data[0], (STp->buffer)->b_data[1],
1127 (STp->buffer)->b_data[2], (STp->buffer)->b_data[3]));
1129 if ((STp->buffer)->b_data[3] >= 8) {
1130 STp->drv_buffer = ((STp->buffer)->b_data[2] >> 4) & 7;
1131 STp->density = (STp->buffer)->b_data[4];
1132 STp->block_size = (STp->buffer)->b_data[9] * 65536 +
1133 (STp->buffer)->b_data[10] * 256 + (STp->buffer)->b_data[11];
1134 DEBC(printk(ST_DEB_MSG
1135 "%s: Density %x, tape length: %x, drv buffer: %d\n",
1136 name, STp->density, (STp->buffer)->b_data[5] * 65536 +
1137 (STp->buffer)->b_data[6] * 256 + (STp->buffer)->b_data[7],
1140 STp->drv_write_prot = ((STp->buffer)->b_data[2] & 0x80) != 0;
1142 st_release_request(SRpnt);
1146 if (STp->block_size > 0)
1147 (STp->buffer)->buffer_blocks =
1148 (STp->buffer)->buffer_size / STp->block_size;
1150 (STp->buffer)->buffer_blocks = 1;
1151 (STp->buffer)->buffer_bytes = (STp->buffer)->read_pointer = 0;
1153 DEBC(printk(ST_DEB_MSG
1154 "%s: Block size: %d, buffer size: %d (%d blocks).\n", name,
1155 STp->block_size, (STp->buffer)->buffer_size,
1156 (STp->buffer)->buffer_blocks));
1158 if (STp->drv_write_prot) {
1159 STp->write_prot = 1;
1161 DEBC(printk(ST_DEB_MSG "%s: Write protected\n", name));
1164 ((st_flags & O_ACCMODE) == O_WRONLY ||
1165 (st_flags & O_ACCMODE) == O_RDWR)) {
1171 if (STp->can_partitions && STp->nbr_partitions < 1) {
1172 /* This code is reached when the device is opened for the first time
1173 after the driver has been initialized with tape in the drive and the
1174 partition support has been enabled. */
1175 DEBC(printk(ST_DEB_MSG
1176 "%s: Updating partition number in status.\n", name));
1177 if ((STp->partition = find_partition(STp)) < 0) {
1178 retval = STp->partition;
1181 STp->new_partition = STp->partition;
1182 STp->nbr_partitions = 1; /* This guess will be updated when necessary */
1185 if (new_session) { /* Change the drive parameters for the new mode */
1186 STp->density_changed = STp->blksize_changed = 0;
1187 STp->compression_changed = 0;
1188 if (!(STm->defaults_for_writes) &&
1189 (retval = set_mode_densblk(STp, STm)) < 0)
1192 if (STp->default_drvbuffer != 0xff) {
1193 if (st_int_ioctl(STp, MTSETDRVBUFFER, STp->default_drvbuffer))
1195 "%s: Can't set default drive buffering to %d.\n",
1196 name, STp->default_drvbuffer);
1200 return CHKRES_READY;
1207 \f/* Open the device. Needs to take the BKL only because of incrementing the SCSI host
1209 static int st_open(struct inode *inode, struct file *filp)
1211 int i, retval = (-EIO);
1212 struct scsi_tape *STp;
1213 struct st_partstat *STps;
1214 int dev = TAPE_NR(inode);
1219 * We really want to do nonseekable_open(inode, filp); here, but some
1220 * versions of tar incorrectly call lseek on tapes and bail out if that
1221 * fails. So we disallow pread() and pwrite(), but permit lseeks.
1223 filp->f_mode &= ~(FMODE_PREAD | FMODE_PWRITE);
1225 if (!(STp = scsi_tape_get(dev))) {
1230 write_lock(&st_dev_arr_lock);
1231 filp->private_data = STp;
1232 name = tape_name(STp);
1235 write_unlock(&st_dev_arr_lock);
1238 DEB( printk(ST_DEB_MSG "%s: Device already in use.\n", name); )
1243 write_unlock(&st_dev_arr_lock);
1244 STp->rew_at_close = STp->autorew_dev = (iminor(inode) & 0x80) == 0;
1246 if (!scsi_block_when_processing_errors(STp->device)) {
1251 /* See that we have at least a one page buffer available */
1252 if (!enlarge_buffer(STp->buffer, PAGE_SIZE, STp->restr_dma)) {
1253 printk(KERN_WARNING "%s: Can't allocate one page tape buffer.\n",
1255 retval = (-EOVERFLOW);
1259 (STp->buffer)->cleared = 0;
1260 (STp->buffer)->writing = 0;
1261 (STp->buffer)->syscall_result = 0;
1263 STp->write_prot = ((filp->f_flags & O_ACCMODE) == O_RDONLY);
1266 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
1267 STps = &(STp->ps[i]);
1270 STp->try_dio_now = STp->try_dio;
1271 STp->recover_count = 0;
1272 DEB( STp->nbr_waits = STp->nbr_finished = 0;
1273 STp->nbr_requests = STp->nbr_dio = STp->nbr_pages = 0; )
1275 retval = check_tape(STp, filp);
1278 if ((filp->f_flags & O_NONBLOCK) == 0 &&
1279 retval != CHKRES_READY) {
1280 if (STp->ready == NO_TAPE)
1281 retval = (-ENOMEDIUM);
1290 normalize_buffer(STp->buffer);
1299 /* Flush the tape buffer before close */
1300 static int st_flush(struct file *filp, fl_owner_t id)
1302 int result = 0, result2;
1303 unsigned char cmd[MAX_COMMAND_SIZE];
1304 struct st_request *SRpnt;
1305 struct scsi_tape *STp = filp->private_data;
1306 struct st_modedef *STm = &(STp->modes[STp->current_mode]);
1307 struct st_partstat *STps = &(STp->ps[STp->partition]);
1308 char *name = tape_name(STp);
1310 if (file_count(filp) > 1)
1313 if (STps->rw == ST_WRITING && !STp->pos_unknown) {
1314 result = st_flush_write_buffer(STp);
1315 if (result != 0 && result != (-ENOSPC))
1319 if (STp->can_partitions &&
1320 (result2 = switch_partition(STp)) < 0) {
1321 DEBC(printk(ST_DEB_MSG
1322 "%s: switch_partition at close failed.\n", name));
1328 DEBC( if (STp->nbr_requests)
1329 printk(KERN_DEBUG "%s: Number of r/w requests %d, dio used in %d, pages %d.\n",
1330 name, STp->nbr_requests, STp->nbr_dio, STp->nbr_pages));
1332 if (STps->rw == ST_WRITING && !STp->pos_unknown) {
1333 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1335 DEBC(printk(ST_DEB_MSG "%s: Async write waits %d, finished %d.\n",
1336 name, STp->nbr_waits, STp->nbr_finished);
1339 memset(cmd, 0, MAX_COMMAND_SIZE);
1340 cmd[0] = WRITE_FILEMARKS;
1341 cmd[4] = 1 + STp->two_fm;
1343 SRpnt = st_allocate_request(STp);
1345 result = STp->buffer->syscall_result;
1349 result = st_scsi_kern_execute(SRpnt, cmd, DMA_NONE, NULL, 0,
1350 STp->device->request_queue->rq_timeout,
1353 st_release_request(SRpnt);
1357 if (STp->buffer->syscall_result == 0 ||
1358 (cmdstatp->have_sense && !cmdstatp->deferred &&
1359 (cmdstatp->flags & SENSE_EOM) &&
1360 (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
1361 cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) &&
1362 (!cmdstatp->remainder_valid || cmdstatp->uremainder64 == 0))) {
1363 /* Write successful at EOM */
1364 st_release_request(SRpnt);
1366 if (STps->drv_file >= 0)
1368 STps->drv_block = 0;
1373 else { /* Write error */
1374 st_release_request(SRpnt);
1376 printk(KERN_ERR "%s: Error on write filemark.\n", name);
1381 DEBC(printk(ST_DEB_MSG "%s: Buffer flushed, %d EOF(s) written\n",
1383 } else if (!STp->rew_at_close) {
1384 STps = &(STp->ps[STp->partition]);
1385 if (!STm->sysv || STps->rw != ST_READING) {
1387 result = flush_buffer(STp, 0);
1388 else if (STps->eof == ST_FM_HIT) {
1389 result = cross_eof(STp, 0);
1391 if (STps->drv_file >= 0)
1393 STps->drv_block = 0;
1396 STps->eof = ST_NOEOF;
1398 } else if ((STps->eof == ST_NOEOF &&
1399 !(result = cross_eof(STp, 1))) ||
1400 STps->eof == ST_FM_HIT) {
1401 if (STps->drv_file >= 0)
1403 STps->drv_block = 0;
1409 if (STp->rew_at_close) {
1410 result2 = st_int_ioctl(STp, MTREW, 1);
1418 /* Close the device and release it. BKL is not needed: this is the only thread
1419 accessing this tape. */
1420 static int st_release(struct inode *inode, struct file *filp)
1423 struct scsi_tape *STp = filp->private_data;
1425 if (STp->door_locked == ST_LOCKED_AUTO)
1426 do_door_lock(STp, 0);
1428 normalize_buffer(STp->buffer);
1429 write_lock(&st_dev_arr_lock);
1431 write_unlock(&st_dev_arr_lock);
1437 /* The checks common to both reading and writing */
1438 static ssize_t rw_checks(struct scsi_tape *STp, struct file *filp, size_t count)
1443 * If we are in the middle of error recovery, don't let anyone
1444 * else try and use this device. Also, if error recovery fails, it
1445 * may try and take the device offline, in which case all further
1446 * access to the device is prohibited.
1448 if (!scsi_block_when_processing_errors(STp->device)) {
1453 if (STp->ready != ST_READY) {
1454 if (STp->ready == ST_NO_TAPE)
1455 retval = (-ENOMEDIUM);
1461 if (! STp->modes[STp->current_mode].defined) {
1468 * If there was a bus reset, block further access
1471 if (STp->pos_unknown) {
1481 printk(ST_DEB_MSG "%s: Incorrect device.\n", tape_name(STp));
1486 if (STp->can_partitions &&
1487 (retval = switch_partition(STp)) < 0)
1490 if (STp->block_size == 0 && STp->max_block > 0 &&
1491 (count < STp->min_block || count > STp->max_block)) {
1496 if (STp->do_auto_lock && STp->door_locked == ST_UNLOCKED &&
1497 !do_door_lock(STp, 1))
1498 STp->door_locked = ST_LOCKED_AUTO;
1505 static int setup_buffering(struct scsi_tape *STp, const char __user *buf,
1506 size_t count, int is_read)
1508 int i, bufsize, retval = 0;
1509 struct st_buffer *STbp = STp->buffer;
1512 i = STp->try_dio_now && try_rdio;
1514 i = STp->try_dio_now && try_wdio;
1516 if (i && ((unsigned long)buf & queue_dma_alignment(
1517 STp->device->request_queue)) == 0) {
1518 i = sgl_map_user_pages(STbp, STbp->use_sg, (unsigned long)buf,
1519 count, (is_read ? READ : WRITE));
1522 STbp->buffer_bytes = 0; /* can be used as transfer counter */
1525 STbp->do_dio = 0; /* fall back to buffering with any error */
1526 STbp->sg_segs = STbp->do_dio;
1527 STbp->frp_sg_current = 0;
1531 STp->nbr_pages += STbp->do_dio;
1536 DEB( STp->nbr_requests++; )
1538 if (!STbp->do_dio) {
1539 if (STp->block_size)
1540 bufsize = STp->block_size > st_fixed_buffer_size ?
1541 STp->block_size : st_fixed_buffer_size;
1544 /* Make sure that data from previous user is not leaked even if
1545 HBA does not return correct residual */
1546 if (is_read && STp->sili && !STbp->cleared)
1550 if (bufsize > STbp->buffer_size &&
1551 !enlarge_buffer(STbp, bufsize, STp->restr_dma)) {
1552 printk(KERN_WARNING "%s: Can't allocate %d byte tape buffer.\n",
1553 tape_name(STp), bufsize);
1554 retval = (-EOVERFLOW);
1557 if (STp->block_size)
1558 STbp->buffer_blocks = bufsize / STp->block_size;
1566 /* Can be called more than once after each setup_buffer() */
1567 static void release_buffering(struct scsi_tape *STp, int is_read)
1569 struct st_buffer *STbp;
1573 sgl_unmap_user_pages(STbp, STbp->do_dio, is_read);
1582 st_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
1585 ssize_t i, do_count, blks, transfer;
1587 int undone, retry_eot = 0, scode;
1589 unsigned char cmd[MAX_COMMAND_SIZE];
1590 const char __user *b_point;
1591 struct st_request *SRpnt = NULL;
1592 struct scsi_tape *STp = filp->private_data;
1593 struct st_modedef *STm;
1594 struct st_partstat *STps;
1595 struct st_buffer *STbp;
1596 char *name = tape_name(STp);
1598 if (mutex_lock_interruptible(&STp->lock))
1599 return -ERESTARTSYS;
1601 retval = rw_checks(STp, filp, count);
1602 if (retval || count == 0)
1605 /* Write must be integral number of blocks */
1606 if (STp->block_size != 0 && (count % STp->block_size) != 0) {
1607 printk(KERN_WARNING "%s: Write not multiple of tape block size.\n",
1613 STm = &(STp->modes[STp->current_mode]);
1614 STps = &(STp->ps[STp->partition]);
1616 if (STp->write_prot) {
1622 if (STps->rw == ST_READING) {
1623 retval = flush_buffer(STp, 0);
1626 STps->rw = ST_WRITING;
1627 } else if (STps->rw != ST_WRITING &&
1628 STps->drv_file == 0 && STps->drv_block == 0) {
1629 if ((retval = set_mode_densblk(STp, STm)) < 0)
1631 if (STm->default_compression != ST_DONT_TOUCH &&
1632 !(STp->compression_changed)) {
1633 if (st_compression(STp, (STm->default_compression == ST_YES))) {
1634 printk(KERN_WARNING "%s: Can't set default compression.\n",
1636 if (modes_defined) {
1645 i = write_behind_check(STp);
1648 STps->eof = ST_EOM_OK;
1650 STps->eof = ST_EOM_ERROR;
1653 if (STps->eof == ST_EOM_OK) {
1654 STps->eof = ST_EOD_1; /* allow next write */
1658 else if (STps->eof == ST_EOM_ERROR) {
1663 /* Check the buffer readability in cases where copy_user might catch
1664 the problems after some tape movement. */
1665 if (STp->block_size != 0 &&
1667 (copy_from_user(&i, buf, 1) != 0 ||
1668 copy_from_user(&i, buf + count - 1, 1) != 0)) {
1673 retval = setup_buffering(STp, buf, count, 0);
1679 memset(cmd, 0, MAX_COMMAND_SIZE);
1681 cmd[1] = (STp->block_size != 0);
1683 STps->rw = ST_WRITING;
1686 while (count > 0 && !retry_eot) {
1692 if (STp->block_size == 0)
1695 do_count = STbp->buffer_blocks * STp->block_size -
1697 if (do_count > count)
1701 i = append_to_buffer(b_point, STbp, do_count);
1708 b_point += do_count;
1710 async_write = STp->block_size == 0 && !STbp->do_dio &&
1711 STm->do_async_writes && STps->eof < ST_EOM_OK;
1713 if (STp->block_size != 0 && STm->do_buffer_writes &&
1714 !(STp->try_dio_now && try_wdio) && STps->eof < ST_EOM_OK &&
1715 STbp->buffer_bytes < STbp->buffer_size) {
1717 /* Don't write a buffer that is not full enough. */
1718 if (!async_write && count == 0)
1723 if (STp->block_size == 0)
1724 blks = transfer = do_count;
1727 blks = STbp->buffer_bytes;
1730 blks /= STp->block_size;
1731 transfer = blks * STp->block_size;
1733 cmd[2] = blks >> 16;
1737 SRpnt = st_do_scsi(SRpnt, STp, cmd, transfer, DMA_TO_DEVICE,
1738 STp->device->request_queue->rq_timeout,
1739 MAX_WRITE_RETRIES, !async_write);
1741 retval = STbp->syscall_result;
1744 if (async_write && !STbp->syscall_result) {
1745 STbp->writing = transfer;
1746 STp->dirty = !(STbp->writing ==
1747 STbp->buffer_bytes);
1748 SRpnt = NULL; /* Prevent releasing this request! */
1749 DEB( STp->write_pending = 1; )
1753 if (STbp->syscall_result != 0) {
1754 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1756 DEBC(printk(ST_DEB_MSG "%s: Error on write:\n", name));
1757 if (cmdstatp->have_sense && (cmdstatp->flags & SENSE_EOM)) {
1758 scode = cmdstatp->sense_hdr.sense_key;
1759 if (cmdstatp->remainder_valid)
1760 undone = (int)cmdstatp->uremainder64;
1761 else if (STp->block_size == 0 &&
1762 scode == VOLUME_OVERFLOW)
1766 if (STp->block_size != 0)
1767 undone *= STp->block_size;
1768 if (undone <= do_count) {
1769 /* Only data from this write is not written */
1773 if (STp->block_size)
1774 blks = (transfer - undone) / STp->block_size;
1775 STps->eof = ST_EOM_OK;
1776 /* Continue in fixed block mode if all written
1777 in this request but still something left to write
1778 (retval left to zero)
1780 if (STp->block_size == 0 ||
1781 undone > 0 || count == 0)
1782 retval = (-ENOSPC); /* EOM within current request */
1783 DEBC(printk(ST_DEB_MSG
1784 "%s: EOM with %d bytes unwritten.\n",
1787 /* EOT within data buffered earlier (possible only
1788 in fixed block mode without direct i/o) */
1789 if (!retry_eot && !cmdstatp->deferred &&
1790 (scode == NO_SENSE || scode == RECOVERED_ERROR)) {
1791 move_buffer_data(STp->buffer, transfer - undone);
1793 if (STps->drv_block >= 0) {
1794 STps->drv_block += (transfer - undone) /
1797 STps->eof = ST_EOM_OK;
1798 DEBC(printk(ST_DEB_MSG
1799 "%s: Retry write of %d bytes at EOM.\n",
1800 name, STp->buffer->buffer_bytes));
1804 /* Either error within data buffered by driver or
1807 blks = do_count = 0;
1808 STps->eof = ST_EOM_ERROR;
1809 STps->drv_block = (-1); /* Too cautious? */
1810 retval = (-EIO); /* EOM for old data */
1811 DEBC(printk(ST_DEB_MSG
1812 "%s: EOM with lost data.\n",
1818 STps->drv_block = (-1); /* Too cautious? */
1819 retval = STbp->syscall_result;
1824 if (STps->drv_block >= 0) {
1825 if (STp->block_size == 0)
1826 STps->drv_block += (do_count > 0);
1828 STps->drv_block += blks;
1831 STbp->buffer_bytes = 0;
1834 if (retval || retry_eot) {
1836 retval = total - count;
1841 if (STps->eof == ST_EOD_1)
1842 STps->eof = ST_EOM_OK;
1843 else if (STps->eof != ST_EOM_OK)
1844 STps->eof = ST_NOEOF;
1845 retval = total - count;
1849 st_release_request(SRpnt);
1850 release_buffering(STp, 0);
1851 mutex_unlock(&STp->lock);
1856 /* Read data from the tape. Returns zero in the normal case, one if the
1857 eof status has changed, and the negative error code in case of a
1858 fatal error. Otherwise updates the buffer and the eof state.
1860 Does release user buffer mapping if it is set.
1862 static long read_tape(struct scsi_tape *STp, long count,
1863 struct st_request ** aSRpnt)
1865 int transfer, blks, bytes;
1866 unsigned char cmd[MAX_COMMAND_SIZE];
1867 struct st_request *SRpnt;
1868 struct st_modedef *STm;
1869 struct st_partstat *STps;
1870 struct st_buffer *STbp;
1872 char *name = tape_name(STp);
1877 STm = &(STp->modes[STp->current_mode]);
1878 STps = &(STp->ps[STp->partition]);
1879 if (STps->eof == ST_FM_HIT)
1883 if (STp->block_size == 0)
1884 blks = bytes = count;
1886 if (!(STp->try_dio_now && try_rdio) && STm->do_read_ahead) {
1887 blks = (STp->buffer)->buffer_blocks;
1888 bytes = blks * STp->block_size;
1891 if (!STbp->do_dio && bytes > (STp->buffer)->buffer_size)
1892 bytes = (STp->buffer)->buffer_size;
1893 blks = bytes / STp->block_size;
1894 bytes = blks * STp->block_size;
1898 memset(cmd, 0, MAX_COMMAND_SIZE);
1900 cmd[1] = (STp->block_size != 0);
1901 if (!cmd[1] && STp->sili)
1903 cmd[2] = blks >> 16;
1908 SRpnt = st_do_scsi(SRpnt, STp, cmd, bytes, DMA_FROM_DEVICE,
1909 STp->device->request_queue->rq_timeout,
1911 release_buffering(STp, 1);
1914 return STbp->syscall_result;
1916 STbp->read_pointer = 0;
1919 /* Something to check */
1920 if (STbp->syscall_result) {
1921 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1924 DEBC(printk(ST_DEB_MSG "%s: Sense: %2x %2x %2x %2x %2x %2x %2x %2x\n",
1926 SRpnt->sense[0], SRpnt->sense[1],
1927 SRpnt->sense[2], SRpnt->sense[3],
1928 SRpnt->sense[4], SRpnt->sense[5],
1929 SRpnt->sense[6], SRpnt->sense[7]));
1930 if (cmdstatp->have_sense) {
1932 if (cmdstatp->sense_hdr.sense_key == BLANK_CHECK)
1933 cmdstatp->flags &= 0xcf; /* No need for EOM in this case */
1935 if (cmdstatp->flags != 0) { /* EOF, EOM, or ILI */
1936 /* Compute the residual count */
1937 if (cmdstatp->remainder_valid)
1938 transfer = (int)cmdstatp->uremainder64;
1941 if (STp->block_size == 0 &&
1942 cmdstatp->sense_hdr.sense_key == MEDIUM_ERROR)
1945 if (cmdstatp->flags & SENSE_ILI) { /* ILI */
1946 if (STp->block_size == 0) {
1947 if (transfer <= 0) {
1950 "%s: Failed to read %d byte block with %d byte transfer.\n",
1951 name, bytes - transfer, bytes);
1952 if (STps->drv_block >= 0)
1953 STps->drv_block += 1;
1954 STbp->buffer_bytes = 0;
1957 STbp->buffer_bytes = bytes - transfer;
1959 st_release_request(SRpnt);
1960 SRpnt = *aSRpnt = NULL;
1961 if (transfer == blks) { /* We did not get anything, error */
1962 printk(KERN_NOTICE "%s: Incorrect block size.\n", name);
1963 if (STps->drv_block >= 0)
1964 STps->drv_block += blks - transfer + 1;
1965 st_int_ioctl(STp, MTBSR, 1);
1968 /* We have some data, deliver it */
1969 STbp->buffer_bytes = (blks - transfer) *
1971 DEBC(printk(ST_DEB_MSG
1972 "%s: ILI but enough data received %ld %d.\n",
1973 name, count, STbp->buffer_bytes));
1974 if (STps->drv_block >= 0)
1975 STps->drv_block += 1;
1976 if (st_int_ioctl(STp, MTBSR, 1))
1979 } else if (cmdstatp->flags & SENSE_FMK) { /* FM overrides EOM */
1980 if (STps->eof != ST_FM_HIT)
1981 STps->eof = ST_FM_HIT;
1983 STps->eof = ST_EOD_2;
1984 if (STp->block_size == 0)
1985 STbp->buffer_bytes = 0;
1987 STbp->buffer_bytes =
1988 bytes - transfer * STp->block_size;
1989 DEBC(printk(ST_DEB_MSG
1990 "%s: EOF detected (%d bytes read).\n",
1991 name, STbp->buffer_bytes));
1992 } else if (cmdstatp->flags & SENSE_EOM) {
1993 if (STps->eof == ST_FM)
1994 STps->eof = ST_EOD_1;
1996 STps->eof = ST_EOM_OK;
1997 if (STp->block_size == 0)
1998 STbp->buffer_bytes = bytes - transfer;
2000 STbp->buffer_bytes =
2001 bytes - transfer * STp->block_size;
2003 DEBC(printk(ST_DEB_MSG "%s: EOM detected (%d bytes read).\n",
2004 name, STbp->buffer_bytes));
2007 /* end of EOF, EOM, ILI test */
2008 else { /* nonzero sense key */
2009 DEBC(printk(ST_DEB_MSG
2010 "%s: Tape error while reading.\n", name));
2011 STps->drv_block = (-1);
2012 if (STps->eof == ST_FM &&
2013 cmdstatp->sense_hdr.sense_key == BLANK_CHECK) {
2014 DEBC(printk(ST_DEB_MSG
2015 "%s: Zero returned for first BLANK CHECK after EOF.\n",
2017 STps->eof = ST_EOD_2; /* First BLANK_CHECK after FM */
2018 } else /* Some other extended sense code */
2022 if (STbp->buffer_bytes < 0) /* Caused by bogus sense data */
2023 STbp->buffer_bytes = 0;
2025 /* End of extended sense test */
2026 else { /* Non-extended sense */
2027 retval = STbp->syscall_result;
2031 /* End of error handling */
2032 else { /* Read successful */
2033 STbp->buffer_bytes = bytes;
2034 if (STp->sili) /* In fixed block mode residual is always zero here */
2035 STbp->buffer_bytes -= STp->buffer->cmdstat.residual;
2038 if (STps->drv_block >= 0) {
2039 if (STp->block_size == 0)
2042 STps->drv_block += STbp->buffer_bytes / STp->block_size;
2050 st_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos)
2054 ssize_t i, transfer;
2055 int special, do_dio = 0;
2056 struct st_request *SRpnt = NULL;
2057 struct scsi_tape *STp = filp->private_data;
2058 struct st_modedef *STm;
2059 struct st_partstat *STps;
2060 struct st_buffer *STbp = STp->buffer;
2061 DEB( char *name = tape_name(STp); )
2063 if (mutex_lock_interruptible(&STp->lock))
2064 return -ERESTARTSYS;
2066 retval = rw_checks(STp, filp, count);
2067 if (retval || count == 0)
2070 STm = &(STp->modes[STp->current_mode]);
2071 if (STp->block_size != 0 && (count % STp->block_size) != 0) {
2072 if (!STm->do_read_ahead) {
2073 retval = (-EINVAL); /* Read must be integral number of blocks */
2076 STp->try_dio_now = 0; /* Direct i/o can't handle split blocks */
2079 STps = &(STp->ps[STp->partition]);
2080 if (STps->rw == ST_WRITING) {
2081 retval = flush_buffer(STp, 0);
2084 STps->rw = ST_READING;
2087 if (debugging && STps->eof != ST_NOEOF)
2088 printk(ST_DEB_MSG "%s: EOF/EOM flag up (%d). Bytes %d\n", name,
2089 STps->eof, STbp->buffer_bytes);
2092 retval = setup_buffering(STp, buf, count, 1);
2095 do_dio = STbp->do_dio;
2097 if (STbp->buffer_bytes == 0 &&
2098 STps->eof >= ST_EOD_1) {
2099 if (STps->eof < ST_EOD) {
2104 retval = (-EIO); /* EOM or Blank Check */
2109 /* Check the buffer writability before any tape movement. Don't alter
2111 if (copy_from_user(&i, buf, 1) != 0 ||
2112 copy_to_user(buf, &i, 1) != 0 ||
2113 copy_from_user(&i, buf + count - 1, 1) != 0 ||
2114 copy_to_user(buf + count - 1, &i, 1) != 0) {
2120 STps->rw = ST_READING;
2123 /* Loop until enough data in buffer or a special condition found */
2124 for (total = 0, special = 0; total < count && !special;) {
2126 /* Get new data if the buffer is empty */
2127 if (STbp->buffer_bytes == 0) {
2128 special = read_tape(STp, count - total, &SRpnt);
2129 if (special < 0) { /* No need to continue read */
2135 /* Move the data from driver buffer to user buffer */
2136 if (STbp->buffer_bytes > 0) {
2138 if (debugging && STps->eof != ST_NOEOF)
2140 "%s: EOF up (%d). Left %d, needed %d.\n", name,
2141 STps->eof, STbp->buffer_bytes,
2142 (int)(count - total));
2144 transfer = STbp->buffer_bytes < count - total ?
2145 STbp->buffer_bytes : count - total;
2147 i = from_buffer(STbp, buf, transfer);
2157 if (STp->block_size == 0)
2158 break; /* Read only one variable length block */
2160 } /* for (total = 0, special = 0;
2161 total < count && !special; ) */
2163 /* Change the eof state if no data from tape or buffer */
2165 if (STps->eof == ST_FM_HIT) {
2167 STps->drv_block = 0;
2168 if (STps->drv_file >= 0)
2170 } else if (STps->eof == ST_EOD_1) {
2171 STps->eof = ST_EOD_2;
2172 STps->drv_block = 0;
2173 if (STps->drv_file >= 0)
2175 } else if (STps->eof == ST_EOD_2)
2177 } else if (STps->eof == ST_FM)
2178 STps->eof = ST_NOEOF;
2182 if (SRpnt != NULL) {
2183 st_release_request(SRpnt);
2187 release_buffering(STp, 1);
2188 STbp->buffer_bytes = 0;
2190 mutex_unlock(&STp->lock);
2198 /* Set the driver options */
2199 static void st_log_options(struct scsi_tape * STp, struct st_modedef * STm, char *name)
2203 "%s: Mode %d options: buffer writes: %d, async writes: %d, read ahead: %d\n",
2204 name, STp->current_mode, STm->do_buffer_writes, STm->do_async_writes,
2205 STm->do_read_ahead);
2207 "%s: can bsr: %d, two FMs: %d, fast mteom: %d, auto lock: %d,\n",
2208 name, STp->can_bsr, STp->two_fm, STp->fast_mteom, STp->do_auto_lock);
2210 "%s: defs for wr: %d, no block limits: %d, partitions: %d, s2 log: %d\n",
2211 name, STm->defaults_for_writes, STp->omit_blklims, STp->can_partitions,
2212 STp->scsi2_logical);
2214 "%s: sysv: %d nowait: %d sili: %d\n", name, STm->sysv, STp->immediate,
2216 printk(KERN_INFO "%s: debugging: %d\n",
2223 static int st_set_options(struct scsi_tape *STp, long options)
2227 struct st_modedef *STm;
2228 char *name = tape_name(STp);
2229 struct cdev *cd0, *cd1;
2231 STm = &(STp->modes[STp->current_mode]);
2232 if (!STm->defined) {
2233 cd0 = STm->cdevs[0]; cd1 = STm->cdevs[1];
2234 memcpy(STm, &(STp->modes[0]), sizeof(struct st_modedef));
2235 STm->cdevs[0] = cd0; STm->cdevs[1] = cd1;
2237 DEBC(printk(ST_DEB_MSG
2238 "%s: Initialized mode %d definition from mode 0\n",
2239 name, STp->current_mode));
2242 code = options & MT_ST_OPTIONS;
2243 if (code == MT_ST_BOOLEANS) {
2244 STm->do_buffer_writes = (options & MT_ST_BUFFER_WRITES) != 0;
2245 STm->do_async_writes = (options & MT_ST_ASYNC_WRITES) != 0;
2246 STm->defaults_for_writes = (options & MT_ST_DEF_WRITES) != 0;
2247 STm->do_read_ahead = (options & MT_ST_READ_AHEAD) != 0;
2248 STp->two_fm = (options & MT_ST_TWO_FM) != 0;
2249 STp->fast_mteom = (options & MT_ST_FAST_MTEOM) != 0;
2250 STp->do_auto_lock = (options & MT_ST_AUTO_LOCK) != 0;
2251 STp->can_bsr = (options & MT_ST_CAN_BSR) != 0;
2252 STp->omit_blklims = (options & MT_ST_NO_BLKLIMS) != 0;
2253 if ((STp->device)->scsi_level >= SCSI_2)
2254 STp->can_partitions = (options & MT_ST_CAN_PARTITIONS) != 0;
2255 STp->scsi2_logical = (options & MT_ST_SCSI2LOGICAL) != 0;
2256 STp->immediate = (options & MT_ST_NOWAIT) != 0;
2257 STm->sysv = (options & MT_ST_SYSV) != 0;
2258 STp->sili = (options & MT_ST_SILI) != 0;
2259 DEB( debugging = (options & MT_ST_DEBUGGING) != 0;
2260 st_log_options(STp, STm, name); )
2261 } else if (code == MT_ST_SETBOOLEANS || code == MT_ST_CLEARBOOLEANS) {
2262 value = (code == MT_ST_SETBOOLEANS);
2263 if ((options & MT_ST_BUFFER_WRITES) != 0)
2264 STm->do_buffer_writes = value;
2265 if ((options & MT_ST_ASYNC_WRITES) != 0)
2266 STm->do_async_writes = value;
2267 if ((options & MT_ST_DEF_WRITES) != 0)
2268 STm->defaults_for_writes = value;
2269 if ((options & MT_ST_READ_AHEAD) != 0)
2270 STm->do_read_ahead = value;
2271 if ((options & MT_ST_TWO_FM) != 0)
2272 STp->two_fm = value;
2273 if ((options & MT_ST_FAST_MTEOM) != 0)
2274 STp->fast_mteom = value;
2275 if ((options & MT_ST_AUTO_LOCK) != 0)
2276 STp->do_auto_lock = value;
2277 if ((options & MT_ST_CAN_BSR) != 0)
2278 STp->can_bsr = value;
2279 if ((options & MT_ST_NO_BLKLIMS) != 0)
2280 STp->omit_blklims = value;
2281 if ((STp->device)->scsi_level >= SCSI_2 &&
2282 (options & MT_ST_CAN_PARTITIONS) != 0)
2283 STp->can_partitions = value;
2284 if ((options & MT_ST_SCSI2LOGICAL) != 0)
2285 STp->scsi2_logical = value;
2286 if ((options & MT_ST_NOWAIT) != 0)
2287 STp->immediate = value;
2288 if ((options & MT_ST_SYSV) != 0)
2290 if ((options & MT_ST_SILI) != 0)
2293 if ((options & MT_ST_DEBUGGING) != 0)
2295 st_log_options(STp, STm, name); )
2296 } else if (code == MT_ST_WRITE_THRESHOLD) {
2297 /* Retained for compatibility */
2298 } else if (code == MT_ST_DEF_BLKSIZE) {
2299 value = (options & ~MT_ST_OPTIONS);
2300 if (value == ~MT_ST_OPTIONS) {
2301 STm->default_blksize = (-1);
2302 DEBC( printk(KERN_INFO "%s: Default block size disabled.\n", name));
2304 STm->default_blksize = value;
2305 DEBC( printk(KERN_INFO "%s: Default block size set to %d bytes.\n",
2306 name, STm->default_blksize));
2307 if (STp->ready == ST_READY) {
2308 STp->blksize_changed = 0;
2309 set_mode_densblk(STp, STm);
2312 } else if (code == MT_ST_TIMEOUTS) {
2313 value = (options & ~MT_ST_OPTIONS);
2314 if ((value & MT_ST_SET_LONG_TIMEOUT) != 0) {
2315 STp->long_timeout = (value & ~MT_ST_SET_LONG_TIMEOUT) * HZ;
2316 DEBC( printk(KERN_INFO "%s: Long timeout set to %d seconds.\n", name,
2317 (value & ~MT_ST_SET_LONG_TIMEOUT)));
2319 blk_queue_rq_timeout(STp->device->request_queue,
2321 DEBC( printk(KERN_INFO "%s: Normal timeout set to %d seconds.\n",
2324 } else if (code == MT_ST_SET_CLN) {
2325 value = (options & ~MT_ST_OPTIONS) & 0xff;
2327 value < EXTENDED_SENSE_START && value >= SCSI_SENSE_BUFFERSIZE)
2329 STp->cln_mode = value;
2330 STp->cln_sense_mask = (options >> 8) & 0xff;
2331 STp->cln_sense_value = (options >> 16) & 0xff;
2333 "%s: Cleaning request mode %d, mask %02x, value %02x\n",
2334 name, value, STp->cln_sense_mask, STp->cln_sense_value);
2335 } else if (code == MT_ST_DEF_OPTIONS) {
2336 code = (options & ~MT_ST_CLEAR_DEFAULT);
2337 value = (options & MT_ST_CLEAR_DEFAULT);
2338 if (code == MT_ST_DEF_DENSITY) {
2339 if (value == MT_ST_CLEAR_DEFAULT) {
2340 STm->default_density = (-1);
2341 DEBC( printk(KERN_INFO "%s: Density default disabled.\n",
2344 STm->default_density = value & 0xff;
2345 DEBC( printk(KERN_INFO "%s: Density default set to %x\n",
2346 name, STm->default_density));
2347 if (STp->ready == ST_READY) {
2348 STp->density_changed = 0;
2349 set_mode_densblk(STp, STm);
2352 } else if (code == MT_ST_DEF_DRVBUFFER) {
2353 if (value == MT_ST_CLEAR_DEFAULT) {
2354 STp->default_drvbuffer = 0xff;
2355 DEBC( printk(KERN_INFO
2356 "%s: Drive buffer default disabled.\n", name));
2358 STp->default_drvbuffer = value & 7;
2359 DEBC( printk(KERN_INFO
2360 "%s: Drive buffer default set to %x\n",
2361 name, STp->default_drvbuffer));
2362 if (STp->ready == ST_READY)
2363 st_int_ioctl(STp, MTSETDRVBUFFER, STp->default_drvbuffer);
2365 } else if (code == MT_ST_DEF_COMPRESSION) {
2366 if (value == MT_ST_CLEAR_DEFAULT) {
2367 STm->default_compression = ST_DONT_TOUCH;
2368 DEBC( printk(KERN_INFO
2369 "%s: Compression default disabled.\n", name));
2371 if ((value & 0xff00) != 0) {
2372 STp->c_algo = (value & 0xff00) >> 8;
2373 DEBC( printk(KERN_INFO "%s: Compression algorithm set to 0x%x.\n",
2374 name, STp->c_algo));
2376 if ((value & 0xff) != 0xff) {
2377 STm->default_compression = (value & 1 ? ST_YES : ST_NO);
2378 DEBC( printk(KERN_INFO "%s: Compression default set to %x\n",
2379 name, (value & 1)));
2380 if (STp->ready == ST_READY) {
2381 STp->compression_changed = 0;
2382 st_compression(STp, (STm->default_compression == ST_YES));
2393 #define MODE_HEADER_LENGTH 4
2395 /* Mode header and page byte offsets */
2396 #define MH_OFF_DATA_LENGTH 0
2397 #define MH_OFF_MEDIUM_TYPE 1
2398 #define MH_OFF_DEV_SPECIFIC 2
2399 #define MH_OFF_BDESCS_LENGTH 3
2400 #define MP_OFF_PAGE_NBR 0
2401 #define MP_OFF_PAGE_LENGTH 1
2403 /* Mode header and page bit masks */
2404 #define MH_BIT_WP 0x80
2405 #define MP_MSK_PAGE_NBR 0x3f
2407 /* Don't return block descriptors */
2408 #define MODE_SENSE_OMIT_BDESCS 0x08
2410 #define MODE_SELECT_PAGE_FORMAT 0x10
2412 /* Read a mode page into the tape buffer. The block descriptors are included
2413 if incl_block_descs is true. The page control is ored to the page number
2414 parameter, if necessary. */
2415 static int read_mode_page(struct scsi_tape *STp, int page, int omit_block_descs)
2417 unsigned char cmd[MAX_COMMAND_SIZE];
2418 struct st_request *SRpnt;
2421 memset(cmd, 0, MAX_COMMAND_SIZE);
2422 cmd[0] = MODE_SENSE;
2423 if (omit_block_descs)
2424 cmd[1] = MODE_SENSE_OMIT_BDESCS;
2428 SRpnt = st_allocate_request(STp);
2430 return STp->buffer->syscall_result;
2432 ret = st_scsi_kern_execute(SRpnt, cmd, DMA_FROM_DEVICE,
2433 STp->buffer->b_data, cmd[4],
2434 STp->device->request_queue->rq_timeout,
2436 st_release_request(SRpnt);
2438 return ret ? : STp->buffer->syscall_result;
2442 /* Send the mode page in the tape buffer to the drive. Assumes that the mode data
2443 in the buffer is correctly formatted. The long timeout is used if slow is non-zero. */
2444 static int write_mode_page(struct scsi_tape *STp, int page, int slow)
2446 int pgo, timeout, ret = 0;
2447 unsigned char cmd[MAX_COMMAND_SIZE];
2448 struct st_request *SRpnt;
2450 memset(cmd, 0, MAX_COMMAND_SIZE);
2451 cmd[0] = MODE_SELECT;
2452 cmd[1] = MODE_SELECT_PAGE_FORMAT;
2453 pgo = MODE_HEADER_LENGTH + (STp->buffer)->b_data[MH_OFF_BDESCS_LENGTH];
2454 cmd[4] = pgo + (STp->buffer)->b_data[pgo + MP_OFF_PAGE_LENGTH] + 2;
2456 /* Clear reserved fields */
2457 (STp->buffer)->b_data[MH_OFF_DATA_LENGTH] = 0;
2458 (STp->buffer)->b_data[MH_OFF_MEDIUM_TYPE] = 0;
2459 (STp->buffer)->b_data[MH_OFF_DEV_SPECIFIC] &= ~MH_BIT_WP;
2460 (STp->buffer)->b_data[pgo + MP_OFF_PAGE_NBR] &= MP_MSK_PAGE_NBR;
2462 SRpnt = st_allocate_request(STp);
2466 timeout = slow ? STp->long_timeout :
2467 STp->device->request_queue->rq_timeout;
2469 ret = st_scsi_kern_execute(SRpnt, cmd, DMA_TO_DEVICE,
2470 STp->buffer->b_data, cmd[4], timeout, 0);
2472 ret = STp->buffer->syscall_result;
2474 st_release_request(SRpnt);
2480 #define COMPRESSION_PAGE 0x0f
2481 #define COMPRESSION_PAGE_LENGTH 16
2483 #define CP_OFF_DCE_DCC 2
2484 #define CP_OFF_C_ALGO 7
2486 #define DCE_MASK 0x80
2487 #define DCC_MASK 0x40
2488 #define RED_MASK 0x60
2491 /* Control the compression with mode page 15. Algorithm not changed if zero.
2493 The block descriptors are read and written because Sony SDT-7000 does not
2494 work without this (suggestion from Michael Schaefer <Michael.Schaefer@dlr.de>).
2495 Including block descriptors should not cause any harm to other drives. */
2497 static int st_compression(struct scsi_tape * STp, int state)
2500 int mpoffs; /* Offset to mode page start */
2501 unsigned char *b_data = (STp->buffer)->b_data;
2502 DEB( char *name = tape_name(STp); )
2504 if (STp->ready != ST_READY)
2507 /* Read the current page contents */
2508 retval = read_mode_page(STp, COMPRESSION_PAGE, 0);
2510 DEBC(printk(ST_DEB_MSG "%s: Compression mode page not supported.\n",
2515 mpoffs = MODE_HEADER_LENGTH + b_data[MH_OFF_BDESCS_LENGTH];
2516 DEBC(printk(ST_DEB_MSG "%s: Compression state is %d.\n", name,
2517 (b_data[mpoffs + CP_OFF_DCE_DCC] & DCE_MASK ? 1 : 0)));
2519 /* Check if compression can be changed */
2520 if ((b_data[mpoffs + CP_OFF_DCE_DCC] & DCC_MASK) == 0) {
2521 DEBC(printk(ST_DEB_MSG "%s: Compression not supported.\n", name));
2527 b_data[mpoffs + CP_OFF_DCE_DCC] |= DCE_MASK;
2528 if (STp->c_algo != 0)
2529 b_data[mpoffs + CP_OFF_C_ALGO] = STp->c_algo;
2532 b_data[mpoffs + CP_OFF_DCE_DCC] &= ~DCE_MASK;
2533 if (STp->c_algo != 0)
2534 b_data[mpoffs + CP_OFF_C_ALGO] = 0; /* no compression */
2537 retval = write_mode_page(STp, COMPRESSION_PAGE, 0);
2539 DEBC(printk(ST_DEB_MSG "%s: Compression change failed.\n", name));
2542 DEBC(printk(ST_DEB_MSG "%s: Compression state changed to %d.\n",
2545 STp->compression_changed = 1;
2550 /* Process the load and unload commands (does unload if the load code is zero) */
2551 static int do_load_unload(struct scsi_tape *STp, struct file *filp, int load_code)
2553 int retval = (-EIO), timeout;
2554 DEB( char *name = tape_name(STp); )
2555 unsigned char cmd[MAX_COMMAND_SIZE];
2556 struct st_partstat *STps;
2557 struct st_request *SRpnt;
2559 if (STp->ready != ST_READY && !load_code) {
2560 if (STp->ready == ST_NO_TAPE)
2561 return (-ENOMEDIUM);
2566 memset(cmd, 0, MAX_COMMAND_SIZE);
2567 cmd[0] = START_STOP;
2571 * If arg >= 1 && arg <= 6 Enhanced load/unload in HP C1553A
2573 if (load_code >= 1 + MT_ST_HPLOADER_OFFSET
2574 && load_code <= 6 + MT_ST_HPLOADER_OFFSET) {
2575 DEBC(printk(ST_DEB_MSG "%s: Enhanced %sload slot %2d.\n",
2576 name, (cmd[4]) ? "" : "un",
2577 load_code - MT_ST_HPLOADER_OFFSET));
2578 cmd[3] = load_code - MT_ST_HPLOADER_OFFSET; /* MediaID field of C1553A */
2580 if (STp->immediate) {
2581 cmd[1] = 1; /* Don't wait for completion */
2582 timeout = STp->device->request_queue->rq_timeout;
2585 timeout = STp->long_timeout;
2589 printk(ST_DEB_MSG "%s: Unloading tape.\n", name);
2591 printk(ST_DEB_MSG "%s: Loading tape.\n", name);
2594 SRpnt = st_allocate_request(STp);
2596 return STp->buffer->syscall_result;
2598 retval = st_scsi_kern_execute(SRpnt, cmd, DMA_NONE, NULL, 0, timeout,
2603 retval = (STp->buffer)->syscall_result;
2605 if (!retval) { /* SCSI command successful */
2608 STp->rew_at_close = 0;
2609 STp->ready = ST_NO_TAPE;
2612 STp->rew_at_close = STp->autorew_dev;
2613 retval = check_tape(STp, filp);
2619 STps = &(STp->ps[STp->partition]);
2620 STps->drv_file = STps->drv_block = (-1);
2623 st_release_request(SRpnt);
2629 #define ST_DEB_FORWARD 0
2630 #define ST_DEB_BACKWARD 1
2631 static void deb_space_print(char *name, int direction, char *units, unsigned char *cmd)
2635 sc = cmd[2] & 0x80 ? 0xff000000 : 0;
2636 sc |= (cmd[2] << 16) | (cmd[3] << 8) | cmd[4];
2639 printk(ST_DEB_MSG "%s: Spacing tape %s over %d %s.\n", name,
2640 direction ? "backward" : "forward", sc, units);
2645 /* Internal ioctl function */
2646 static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned long arg)
2652 unsigned char cmd[MAX_COMMAND_SIZE];
2653 struct st_request *SRpnt;
2654 struct st_partstat *STps;
2655 int fileno, blkno, at_sm, undone;
2656 int datalen = 0, direction = DMA_NONE;
2657 char *name = tape_name(STp);
2659 WARN_ON(STp->buffer->do_dio != 0);
2660 if (STp->ready != ST_READY) {
2661 if (STp->ready == ST_NO_TAPE)
2662 return (-ENOMEDIUM);
2666 timeout = STp->long_timeout;
2667 STps = &(STp->ps[STp->partition]);
2668 fileno = STps->drv_file;
2669 blkno = STps->drv_block;
2670 at_sm = STps->at_sm;
2672 memset(cmd, 0, MAX_COMMAND_SIZE);
2675 chg_eof = 0; /* Changed from the FSF after this */
2678 cmd[1] = 0x01; /* Space FileMarks */
2679 cmd[2] = (arg >> 16);
2680 cmd[3] = (arg >> 8);
2682 DEBC(deb_space_print(name, ST_DEB_FORWARD, "filemarks", cmd);)
2686 at_sm &= (arg == 0);
2689 chg_eof = 0; /* Changed from the FSF after this */
2692 cmd[1] = 0x01; /* Space FileMarks */
2694 cmd[2] = (ltmp >> 16);
2695 cmd[3] = (ltmp >> 8);
2697 DEBC(deb_space_print(name, ST_DEB_BACKWARD, "filemarks", cmd);)
2700 blkno = (-1); /* We can't know the block number */
2701 at_sm &= (arg == 0);
2705 cmd[1] = 0x00; /* Space Blocks */
2706 cmd[2] = (arg >> 16);
2707 cmd[3] = (arg >> 8);
2709 DEBC(deb_space_print(name, ST_DEB_FORWARD, "blocks", cmd);)
2712 at_sm &= (arg == 0);
2716 cmd[1] = 0x00; /* Space Blocks */
2718 cmd[2] = (ltmp >> 16);
2719 cmd[3] = (ltmp >> 8);
2721 DEBC(deb_space_print(name, ST_DEB_BACKWARD, "blocks", cmd);)
2724 at_sm &= (arg == 0);
2728 cmd[1] = 0x04; /* Space Setmarks */
2729 cmd[2] = (arg >> 16);
2730 cmd[3] = (arg >> 8);
2732 DEBC(deb_space_print(name, ST_DEB_FORWARD, "setmarks", cmd);)
2734 blkno = fileno = (-1);
2740 cmd[1] = 0x04; /* Space Setmarks */
2742 cmd[2] = (ltmp >> 16);
2743 cmd[3] = (ltmp >> 8);
2745 DEBC(deb_space_print(name, ST_DEB_BACKWARD, "setmarks", cmd);)
2747 blkno = fileno = (-1);
2753 if (STp->write_prot)
2755 cmd[0] = WRITE_FILEMARKS;
2756 if (cmd_in == MTWSM)
2758 cmd[2] = (arg >> 16);
2759 cmd[3] = (arg >> 8);
2761 timeout = STp->device->request_queue->rq_timeout;
2763 if (cmd_in == MTWEOF)
2764 printk(ST_DEB_MSG "%s: Writing %d filemarks.\n", name,
2765 cmd[2] * 65536 + cmd[3] * 256 + cmd[4]);
2767 printk(ST_DEB_MSG "%s: Writing %d setmarks.\n", name,
2768 cmd[2] * 65536 + cmd[3] * 256 + cmd[4]);
2773 at_sm = (cmd_in == MTWSM);
2776 cmd[0] = REZERO_UNIT;
2777 if (STp->immediate) {
2778 cmd[1] = 1; /* Don't wait for completion */
2779 timeout = STp->device->request_queue->rq_timeout;
2781 DEBC(printk(ST_DEB_MSG "%s: Rewinding tape.\n", name));
2782 fileno = blkno = at_sm = 0;
2785 DEBC(printk(ST_DEB_MSG "%s: No op on tape.\n", name));
2786 return 0; /* Should do something ? */
2789 cmd[0] = START_STOP;
2790 if (STp->immediate) {
2791 cmd[1] = 1; /* Don't wait for completion */
2792 timeout = STp->device->request_queue->rq_timeout;
2795 DEBC(printk(ST_DEB_MSG "%s: Retensioning tape.\n", name));
2796 fileno = blkno = at_sm = 0;
2799 if (!STp->fast_mteom) {
2800 /* space to the end of tape */
2801 ioctl_result = st_int_ioctl(STp, MTFSF, 0x7fffff);
2802 fileno = STps->drv_file;
2803 if (STps->eof >= ST_EOD_1)
2805 /* The next lines would hide the number of spaced FileMarks
2806 That's why I inserted the previous lines. I had no luck
2807 with detecting EOM with FSF, so we go now to EOM.
2813 DEBC(printk(ST_DEB_MSG "%s: Spacing to end of recorded medium.\n",
2819 if (STp->write_prot)
2822 cmd[1] = (arg ? 1 : 0); /* Long erase with non-zero argument */
2823 if (STp->immediate) {
2824 cmd[1] |= 2; /* Don't wait for completion */
2825 timeout = STp->device->request_queue->rq_timeout;
2828 timeout = STp->long_timeout * 8;
2830 DEBC(printk(ST_DEB_MSG "%s: Erasing tape.\n", name));
2831 fileno = blkno = at_sm = 0;
2833 case MTSETBLK: /* Set block length */
2834 case MTSETDENSITY: /* Set tape density */
2835 case MTSETDRVBUFFER: /* Set drive buffering */
2836 case SET_DENS_AND_BLK: /* Set density and block size */
2838 if (STp->dirty || (STp->buffer)->buffer_bytes != 0)
2839 return (-EIO); /* Not allowed if data in buffer */
2840 if ((cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK) &&
2841 (arg & MT_ST_BLKSIZE_MASK) != 0 &&
2842 STp->max_block > 0 &&
2843 ((arg & MT_ST_BLKSIZE_MASK) < STp->min_block ||
2844 (arg & MT_ST_BLKSIZE_MASK) > STp->max_block)) {
2845 printk(KERN_WARNING "%s: Illegal block size.\n", name);
2848 cmd[0] = MODE_SELECT;
2849 if ((STp->use_pf & USE_PF))
2850 cmd[1] = MODE_SELECT_PAGE_FORMAT;
2851 cmd[4] = datalen = 12;
2852 direction = DMA_TO_DEVICE;
2854 memset((STp->buffer)->b_data, 0, 12);
2855 if (cmd_in == MTSETDRVBUFFER)
2856 (STp->buffer)->b_data[2] = (arg & 7) << 4;
2858 (STp->buffer)->b_data[2] =
2859 STp->drv_buffer << 4;
2860 (STp->buffer)->b_data[3] = 8; /* block descriptor length */
2861 if (cmd_in == MTSETDENSITY) {
2862 (STp->buffer)->b_data[4] = arg;
2863 STp->density_changed = 1; /* At least we tried ;-) */
2864 } else if (cmd_in == SET_DENS_AND_BLK)
2865 (STp->buffer)->b_data[4] = arg >> 24;
2867 (STp->buffer)->b_data[4] = STp->density;
2868 if (cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK) {
2869 ltmp = arg & MT_ST_BLKSIZE_MASK;
2870 if (cmd_in == MTSETBLK)
2871 STp->blksize_changed = 1; /* At least we tried ;-) */
2873 ltmp = STp->block_size;
2874 (STp->buffer)->b_data[9] = (ltmp >> 16);
2875 (STp->buffer)->b_data[10] = (ltmp >> 8);
2876 (STp->buffer)->b_data[11] = ltmp;
2877 timeout = STp->device->request_queue->rq_timeout;
2879 if (cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK)
2881 "%s: Setting block size to %d bytes.\n", name,
2882 (STp->buffer)->b_data[9] * 65536 +
2883 (STp->buffer)->b_data[10] * 256 +
2884 (STp->buffer)->b_data[11]);
2885 if (cmd_in == MTSETDENSITY || cmd_in == SET_DENS_AND_BLK)
2887 "%s: Setting density code to %x.\n", name,
2888 (STp->buffer)->b_data[4]);
2889 if (cmd_in == MTSETDRVBUFFER)
2891 "%s: Setting drive buffer code to %d.\n", name,
2892 ((STp->buffer)->b_data[2] >> 4) & 7);
2899 SRpnt = st_allocate_request(STp);
2901 return (STp->buffer)->syscall_result;
2903 ioctl_result = st_scsi_kern_execute(SRpnt, cmd, direction,
2904 STp->buffer->b_data, datalen,
2905 timeout, MAX_RETRIES);
2907 ioctl_result = (STp->buffer)->syscall_result;
2909 if (!ioctl_result) { /* SCSI command successful */
2910 st_release_request(SRpnt);
2912 STps->drv_block = blkno;
2913 STps->drv_file = fileno;
2914 STps->at_sm = at_sm;
2916 if (cmd_in == MTBSFM)
2917 ioctl_result = st_int_ioctl(STp, MTFSF, 1);
2918 else if (cmd_in == MTFSFM)
2919 ioctl_result = st_int_ioctl(STp, MTBSF, 1);
2921 if (cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK) {
2922 int old_block_size = STp->block_size;
2923 STp->block_size = arg & MT_ST_BLKSIZE_MASK;
2924 if (STp->block_size != 0) {
2925 if (old_block_size == 0)
2926 normalize_buffer(STp->buffer);
2927 (STp->buffer)->buffer_blocks =
2928 (STp->buffer)->buffer_size / STp->block_size;
2930 (STp->buffer)->buffer_bytes = (STp->buffer)->read_pointer = 0;
2931 if (cmd_in == SET_DENS_AND_BLK)
2932 STp->density = arg >> MT_ST_DENSITY_SHIFT;
2933 } else if (cmd_in == MTSETDRVBUFFER)
2934 STp->drv_buffer = (arg & 7);
2935 else if (cmd_in == MTSETDENSITY)
2938 if (cmd_in == MTEOM)
2940 else if (cmd_in == MTFSF)
2943 STps->eof = ST_NOEOF;
2945 if (cmd_in == MTWEOF)
2947 } else { /* SCSI command was not completely successful. Don't return
2948 from this block without releasing the SCSI command block! */
2949 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
2951 if (cmdstatp->flags & SENSE_EOM) {
2952 if (cmd_in != MTBSF && cmd_in != MTBSFM &&
2953 cmd_in != MTBSR && cmd_in != MTBSS)
2954 STps->eof = ST_EOM_OK;
2955 STps->drv_block = 0;
2958 if (cmdstatp->remainder_valid)
2959 undone = (int)cmdstatp->uremainder64;
2963 if (cmd_in == MTWEOF &&
2964 cmdstatp->have_sense &&
2965 (cmdstatp->flags & SENSE_EOM)) {
2966 if (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
2967 cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) {
2968 ioctl_result = 0; /* EOF(s) written successfully at EOM */
2969 STps->eof = ST_NOEOF;
2970 } else { /* Writing EOF(s) failed */
2974 STps->eof = ST_NOEOF;
2976 STps->drv_file = fileno;
2977 } else if ((cmd_in == MTFSF) || (cmd_in == MTFSFM)) {
2979 STps->drv_file = fileno - undone;
2981 STps->drv_file = fileno;
2982 STps->drv_block = -1;
2983 STps->eof = ST_NOEOF;
2984 } else if ((cmd_in == MTBSF) || (cmd_in == MTBSFM)) {
2985 if (arg > 0 && undone < 0) /* Some drives get this wrong */
2987 if (STps->drv_file >= 0)
2988 STps->drv_file = fileno + undone;
2989 STps->drv_block = 0;
2990 STps->eof = ST_NOEOF;
2991 } else if (cmd_in == MTFSR) {
2992 if (cmdstatp->flags & SENSE_FMK) { /* Hit filemark */
2993 if (STps->drv_file >= 0)
2995 STps->drv_block = 0;
2998 if (blkno >= undone)
2999 STps->drv_block = blkno - undone;
3001 STps->drv_block = (-1);
3002 STps->eof = ST_NOEOF;
3004 } else if (cmd_in == MTBSR) {
3005 if (cmdstatp->flags & SENSE_FMK) { /* Hit filemark */
3007 STps->drv_block = (-1);
3009 if (arg > 0 && undone < 0) /* Some drives get this wrong */
3011 if (STps->drv_block >= 0)
3012 STps->drv_block = blkno + undone;
3014 STps->eof = ST_NOEOF;
3015 } else if (cmd_in == MTEOM) {
3016 STps->drv_file = (-1);
3017 STps->drv_block = (-1);
3019 } else if (cmd_in == MTSETBLK ||
3020 cmd_in == MTSETDENSITY ||
3021 cmd_in == MTSETDRVBUFFER ||
3022 cmd_in == SET_DENS_AND_BLK) {
3023 if (cmdstatp->sense_hdr.sense_key == ILLEGAL_REQUEST &&
3024 !(STp->use_pf & PF_TESTED)) {
3025 /* Try the other possible state of Page Format if not
3027 STp->use_pf = !STp->use_pf | PF_TESTED;
3028 st_release_request(SRpnt);
3030 return st_int_ioctl(STp, cmd_in, arg);
3033 STps->eof = ST_NOEOF;
3035 if (cmdstatp->sense_hdr.sense_key == BLANK_CHECK)
3038 st_release_request(SRpnt);
3042 return ioctl_result;
3046 /* Get the tape position. If bt == 2, arg points into a kernel space mt_loc
3049 static int get_location(struct scsi_tape *STp, unsigned int *block, int *partition,
3053 unsigned char scmd[MAX_COMMAND_SIZE];
3054 struct st_request *SRpnt;
3055 DEB( char *name = tape_name(STp); )
3057 if (STp->ready != ST_READY)
3060 memset(scmd, 0, MAX_COMMAND_SIZE);
3061 if ((STp->device)->scsi_level < SCSI_2) {
3062 scmd[0] = QFA_REQUEST_BLOCK;
3065 scmd[0] = READ_POSITION;
3066 if (!logical && !STp->scsi2_logical)
3070 SRpnt = st_allocate_request(STp);
3072 return STp->buffer->syscall_result;
3074 result = st_scsi_kern_execute(SRpnt, scmd, DMA_FROM_DEVICE,
3075 STp->buffer->b_data, 20,
3076 STp->device->request_queue->rq_timeout,
3081 if ((STp->buffer)->syscall_result != 0 ||
3082 (STp->device->scsi_level >= SCSI_2 &&
3083 ((STp->buffer)->b_data[0] & 4) != 0)) {
3084 *block = *partition = 0;
3085 DEBC(printk(ST_DEB_MSG "%s: Can't read tape position.\n", name));
3089 if ((STp->device)->scsi_level < SCSI_2) {
3090 *block = ((STp->buffer)->b_data[0] << 16)
3091 + ((STp->buffer)->b_data[1] << 8)
3092 + (STp->buffer)->b_data[2];
3095 *block = ((STp->buffer)->b_data[4] << 24)
3096 + ((STp->buffer)->b_data[5] << 16)
3097 + ((STp->buffer)->b_data[6] << 8)
3098 + (STp->buffer)->b_data[7];
3099 *partition = (STp->buffer)->b_data[1];
3100 if (((STp->buffer)->b_data[0] & 0x80) &&
3101 (STp->buffer)->b_data[1] == 0) /* BOP of partition 0 */
3102 STp->ps[0].drv_block = STp->ps[0].drv_file = 0;
3104 DEBC(printk(ST_DEB_MSG "%s: Got tape pos. blk %d part %d.\n", name,
3105 *block, *partition));
3108 st_release_request(SRpnt);
3115 /* Set the tape block and partition. Negative partition means that only the
3116 block should be set in vendor specific way. */
3117 static int set_location(struct scsi_tape *STp, unsigned int block, int partition,
3120 struct st_partstat *STps;
3124 unsigned char scmd[MAX_COMMAND_SIZE];
3125 struct st_request *SRpnt;
3126 DEB( char *name = tape_name(STp); )
3128 if (STp->ready != ST_READY)
3130 timeout = STp->long_timeout;
3131 STps = &(STp->ps[STp->partition]);
3133 DEBC(printk(ST_DEB_MSG "%s: Setting block to %d and partition to %d.\n",
3134 name, block, partition));
3135 DEB(if (partition < 0)
3138 /* Update the location at the partition we are leaving */
3139 if ((!STp->can_partitions && partition != 0) ||
3140 partition >= ST_NBR_PARTITIONS)
3142 if (partition != STp->partition) {
3143 if (get_location(STp, &blk, &p, 1))
3144 STps->last_block_valid = 0;
3146 STps->last_block_valid = 1;
3147 STps->last_block_visited = blk;
3148 DEBC(printk(ST_DEB_MSG
3149 "%s: Visited block %d for partition %d saved.\n",
3150 name, blk, STp->partition));
3154 memset(scmd, 0, MAX_COMMAND_SIZE);
3155 if ((STp->device)->scsi_level < SCSI_2) {
3156 scmd[0] = QFA_SEEK_BLOCK;
3157 scmd[2] = (block >> 16);
3158 scmd[3] = (block >> 8);
3163 scmd[3] = (block >> 24);
3164 scmd[4] = (block >> 16);
3165 scmd[5] = (block >> 8);
3167 if (!logical && !STp->scsi2_logical)
3169 if (STp->partition != partition) {
3171 scmd[8] = partition;
3172 DEBC(printk(ST_DEB_MSG
3173 "%s: Trying to change partition from %d to %d\n",
3174 name, STp->partition, partition));
3177 if (STp->immediate) {
3178 scmd[1] |= 1; /* Don't wait for completion */
3179 timeout = STp->device->request_queue->rq_timeout;
3182 SRpnt = st_allocate_request(STp);
3184 return STp->buffer->syscall_result;
3186 result = st_scsi_kern_execute(SRpnt, scmd, DMA_NONE, NULL, 0,
3187 timeout, MAX_READY_RETRIES);
3191 STps->drv_block = STps->drv_file = (-1);
3192 STps->eof = ST_NOEOF;
3193 if ((STp->buffer)->syscall_result != 0) {
3195 if (STp->can_partitions &&
3196 (STp->device)->scsi_level >= SCSI_2 &&
3197 (p = find_partition(STp)) >= 0)
3200 if (STp->can_partitions) {
3201 STp->partition = partition;
3202 STps = &(STp->ps[partition]);
3203 if (!STps->last_block_valid ||
3204 STps->last_block_visited != block) {
3211 STps->drv_block = STps->drv_file = 0;
3215 st_release_request(SRpnt);
3222 /* Find the current partition number for the drive status. Called from open and
3223 returns either partition number of negative error code. */
3224 static int find_partition(struct scsi_tape *STp)
3229 if ((i = get_location(STp, &block, &partition, 1)) < 0)
3231 if (partition >= ST_NBR_PARTITIONS)
3237 /* Change the partition if necessary */
3238 static int switch_partition(struct scsi_tape *STp)
3240 struct st_partstat *STps;
3242 if (STp->partition == STp->new_partition)
3244 STps = &(STp->ps[STp->new_partition]);
3245 if (!STps->last_block_valid)
3246 STps->last_block_visited = 0;
3247 return set_location(STp, STps->last_block_visited, STp->new_partition, 1);
3250 /* Functions for reading and writing the medium partition mode page. */
3252 #define PART_PAGE 0x11
3253 #define PART_PAGE_FIXED_LENGTH 8
3255 #define PP_OFF_MAX_ADD_PARTS 2
3256 #define PP_OFF_NBR_ADD_PARTS 3
3257 #define PP_OFF_FLAGS 4
3258 #define PP_OFF_PART_UNITS 6
3259 #define PP_OFF_RESERVED 7
3261 #define PP_BIT_IDP 0x20
3262 #define PP_MSK_PSUM_MB 0x10
3264 /* Get the number of partitions on the tape. As a side effect reads the
3265 mode page into the tape buffer. */
3266 static int nbr_partitions(struct scsi_tape *STp)
3269 DEB( char *name = tape_name(STp); )
3271 if (STp->ready != ST_READY)
3274 result = read_mode_page(STp, PART_PAGE, 1);
3277 DEBC(printk(ST_DEB_MSG "%s: Can't read medium partition page.\n",
3281 result = (STp->buffer)->b_data[MODE_HEADER_LENGTH +
3282 PP_OFF_NBR_ADD_PARTS] + 1;
3283 DEBC(printk(ST_DEB_MSG "%s: Number of partitions %d.\n", name, result));
3290 /* Partition the tape into two partitions if size > 0 or one partition if
3293 The block descriptors are read and written because Sony SDT-7000 does not
3294 work without this (suggestion from Michael Schaefer <Michael.Schaefer@dlr.de>).
3296 My HP C1533A drive returns only one partition size field. This is used to
3297 set the size of partition 1. There is no size field for the default partition.
3298 Michael Schaefer's Sony SDT-7000 returns two descriptors and the second is
3299 used to set the size of partition 1 (this is what the SCSI-3 standard specifies).
3300 The following algorithm is used to accommodate both drives: if the number of
3301 partition size fields is greater than the maximum number of additional partitions
3302 in the mode page, the second field is used. Otherwise the first field is used.
3304 For Seagate DDS drives the page length must be 8 when no partitions is defined
3305 and 10 when 1 partition is defined (information from Eric Lee Green). This is
3306 is acceptable also to some other old drives and enforced if the first partition
3307 size field is used for the first additional partition size.
3309 static int partition_tape(struct scsi_tape *STp, int size)
3311 char *name = tape_name(STp);
3313 int pgo, psd_cnt, psdo;
3316 result = read_mode_page(STp, PART_PAGE, 0);
3318 DEBC(printk(ST_DEB_MSG "%s: Can't read partition mode page.\n", name));
3321 /* The mode page is in the buffer. Let's modify it and write it. */
3322 bp = (STp->buffer)->b_data;
3323 pgo = MODE_HEADER_LENGTH + bp[MH_OFF_BDESCS_LENGTH];
3324 DEBC(printk(ST_DEB_MSG "%s: Partition page length is %d bytes.\n",
3325 name, bp[pgo + MP_OFF_PAGE_LENGTH] + 2));
3327 psd_cnt = (bp[pgo + MP_OFF_PAGE_LENGTH] + 2 - PART_PAGE_FIXED_LENGTH) / 2;
3328 psdo = pgo + PART_PAGE_FIXED_LENGTH;
3329 if (psd_cnt > bp[pgo + PP_OFF_MAX_ADD_PARTS]) {
3330 bp[psdo] = bp[psdo + 1] = 0xff; /* Rest of the tape */
3333 memset(bp + psdo, 0, bp[pgo + PP_OFF_NBR_ADD_PARTS] * 2);
3335 DEBC(printk("%s: psd_cnt %d, max.parts %d, nbr_parts %d\n", name,
3336 psd_cnt, bp[pgo + PP_OFF_MAX_ADD_PARTS],
3337 bp[pgo + PP_OFF_NBR_ADD_PARTS]));
3340 bp[pgo + PP_OFF_NBR_ADD_PARTS] = 0;
3341 if (psd_cnt <= bp[pgo + PP_OFF_MAX_ADD_PARTS])
3342 bp[pgo + MP_OFF_PAGE_LENGTH] = 6;
3343 DEBC(printk(ST_DEB_MSG "%s: Formatting tape with one partition.\n",
3346 bp[psdo] = (size >> 8) & 0xff;
3347 bp[psdo + 1] = size & 0xff;
3349 if (bp[pgo + MP_OFF_PAGE_LENGTH] < 8)
3350 bp[pgo + MP_OFF_PAGE_LENGTH] = 8;
3351 DEBC(printk(ST_DEB_MSG
3352 "%s: Formatting tape with two partitions (1 = %d MB).\n",
3355 bp[pgo + PP_OFF_PART_UNITS] = 0;
3356 bp[pgo + PP_OFF_RESERVED] = 0;
3357 bp[pgo + PP_OFF_FLAGS] = PP_BIT_IDP | PP_MSK_PSUM_MB;
3359 result = write_mode_page(STp, PART_PAGE, 1);
3361 printk(KERN_INFO "%s: Partitioning of tape failed.\n", name);
3370 /* The ioctl command */
3371 static long st_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
3373 int i, cmd_nr, cmd_type, bt;
3376 struct scsi_tape *STp = file->private_data;
3377 struct st_modedef *STm;
3378 struct st_partstat *STps;
3379 char *name = tape_name(STp);
3380 void __user *p = (void __user *)arg;
3382 if (mutex_lock_interruptible(&STp->lock))
3383 return -ERESTARTSYS;
3386 if (debugging && !STp->in_use) {
3387 printk(ST_DEB_MSG "%s: Incorrect device.\n", name);
3392 STm = &(STp->modes[STp->current_mode]);
3393 STps = &(STp->ps[STp->partition]);
3396 * If we are in the middle of error recovery, don't let anyone
3397 * else try and use this device. Also, if error recovery fails, it
3398 * may try and take the device offline, in which case all further
3399 * access to the device is prohibited.
3401 retval = scsi_nonblockable_ioctl(STp->device, cmd_in, p,
3402 file->f_flags & O_NDELAY);
3403 if (!scsi_block_when_processing_errors(STp->device) || retval != -ENODEV)
3407 cmd_type = _IOC_TYPE(cmd_in);
3408 cmd_nr = _IOC_NR(cmd_in);
3410 if (cmd_type == _IOC_TYPE(MTIOCTOP) && cmd_nr == _IOC_NR(MTIOCTOP)) {
3413 if (_IOC_SIZE(cmd_in) != sizeof(mtc)) {
3418 i = copy_from_user(&mtc, p, sizeof(struct mtop));
3424 if (mtc.mt_op == MTSETDRVBUFFER && !capable(CAP_SYS_ADMIN)) {
3426 "%s: MTSETDRVBUFFER only allowed for root.\n", name);
3430 if (!STm->defined &&
3431 (mtc.mt_op != MTSETDRVBUFFER &&
3432 (mtc.mt_count & MT_ST_OPTIONS) == 0)) {
3437 if (!STp->pos_unknown) {
3439 if (STps->eof == ST_FM_HIT) {
3440 if (mtc.mt_op == MTFSF || mtc.mt_op == MTFSFM ||
3441 mtc.mt_op == MTEOM) {
3443 if (STps->drv_file >= 0)
3444 STps->drv_file += 1;
3445 } else if (mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM) {
3447 if (STps->drv_file >= 0)
3448 STps->drv_file += 1;
3452 if (mtc.mt_op == MTSEEK) {
3453 /* Old position must be restored if partition will be
3455 i = !STp->can_partitions ||
3456 (STp->new_partition != STp->partition);
3458 i = mtc.mt_op == MTREW || mtc.mt_op == MTOFFL ||
3459 mtc.mt_op == MTRETEN || mtc.mt_op == MTEOM ||
3460 mtc.mt_op == MTLOCK || mtc.mt_op == MTLOAD ||
3461 mtc.mt_op == MTFSF || mtc.mt_op == MTFSFM ||
3462 mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM ||
3463 mtc.mt_op == MTCOMPRESSION;
3465 i = flush_buffer(STp, i);
3470 if (STps->rw == ST_WRITING &&
3471 (mtc.mt_op == MTREW || mtc.mt_op == MTOFFL ||
3472 mtc.mt_op == MTSEEK ||
3473 mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM)) {
3474 i = st_int_ioctl(STp, MTWEOF, 1);
3479 if (mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM)
3486 * If there was a bus reset, block further access
3487 * to this device. If the user wants to rewind the tape,
3488 * then reset the flag and allow access again.
3490 if (mtc.mt_op != MTREW &&
3491 mtc.mt_op != MTOFFL &&
3492 mtc.mt_op != MTRETEN &&
3493 mtc.mt_op != MTERASE &&
3494 mtc.mt_op != MTSEEK &&
3495 mtc.mt_op != MTEOM) {
3500 /* remove this when the midlevel properly clears was_reset */
3501 STp->device->was_reset = 0;
3504 if (mtc.mt_op != MTNOP && mtc.mt_op != MTSETBLK &&
3505 mtc.mt_op != MTSETDENSITY && mtc.mt_op != MTWSM &&
3506 mtc.mt_op != MTSETDRVBUFFER && mtc.mt_op != MTSETPART)
3507 STps->rw = ST_IDLE; /* Prevent automatic WEOF and fsf */
3509 if (mtc.mt_op == MTOFFL && STp->door_locked != ST_UNLOCKED)
3510 do_door_lock(STp, 0); /* Ignore result! */
3512 if (mtc.mt_op == MTSETDRVBUFFER &&
3513 (mtc.mt_count & MT_ST_OPTIONS) != 0) {
3514 retval = st_set_options(STp, mtc.mt_count);
3518 if (mtc.mt_op == MTSETPART) {
3519 if (!STp->can_partitions ||
3520 mtc.mt_count < 0 || mtc.mt_count >= ST_NBR_PARTITIONS) {
3524 if (mtc.mt_count >= STp->nbr_partitions &&
3525 (STp->nbr_partitions = nbr_partitions(STp)) < 0) {
3529 if (mtc.mt_count >= STp->nbr_partitions) {
3533 STp->new_partition = mtc.mt_count;
3538 if (mtc.mt_op == MTMKPART) {
3539 if (!STp->can_partitions) {
3543 if ((i = st_int_ioctl(STp, MTREW, 0)) < 0 ||
3544 (i = partition_tape(STp, mtc.mt_count)) < 0) {
3548 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
3549 STp->ps[i].rw = ST_IDLE;
3550 STp->ps[i].at_sm = 0;
3551 STp->ps[i].last_block_valid = 0;
3553 STp->partition = STp->new_partition = 0;
3554 STp->nbr_partitions = 1; /* Bad guess ?-) */
3555 STps->drv_block = STps->drv_file = 0;
3560 if (mtc.mt_op == MTSEEK) {
3561 i = set_location(STp, mtc.mt_count, STp->new_partition, 0);
3562 if (!STp->can_partitions)
3563 STp->ps[0].rw = ST_IDLE;
3568 if (mtc.mt_op == MTUNLOAD || mtc.mt_op == MTOFFL) {
3569 retval = do_load_unload(STp, file, 0);
3573 if (mtc.mt_op == MTLOAD) {
3574 retval = do_load_unload(STp, file, max(1, mtc.mt_count));
3578 if (mtc.mt_op == MTLOCK || mtc.mt_op == MTUNLOCK) {
3579 retval = do_door_lock(STp, (mtc.mt_op == MTLOCK));
3583 if (STp->can_partitions && STp->ready == ST_READY &&
3584 (i = switch_partition(STp)) < 0) {
3589 if (mtc.mt_op == MTCOMPRESSION)
3590 retval = st_compression(STp, (mtc.mt_count & 1));
3592 retval = st_int_ioctl(STp, mtc.mt_op, mtc.mt_count);
3595 if (!STm->defined) {
3600 if ((i = flush_buffer(STp, 0)) < 0) {
3604 if (STp->can_partitions &&
3605 (i = switch_partition(STp)) < 0) {
3610 if (cmd_type == _IOC_TYPE(MTIOCGET) && cmd_nr == _IOC_NR(MTIOCGET)) {
3611 struct mtget mt_status;
3613 if (_IOC_SIZE(cmd_in) != sizeof(struct mtget)) {
3618 mt_status.mt_type = STp->tape_type;
3619 mt_status.mt_dsreg =
3620 ((STp->block_size << MT_ST_BLKSIZE_SHIFT) & MT_ST_BLKSIZE_MASK) |
3621 ((STp->density << MT_ST_DENSITY_SHIFT) & MT_ST_DENSITY_MASK);
3622 mt_status.mt_blkno = STps->drv_block;
3623 mt_status.mt_fileno = STps->drv_file;
3624 if (STp->block_size != 0) {
3625 if (STps->rw == ST_WRITING)
3626 mt_status.mt_blkno +=
3627 (STp->buffer)->buffer_bytes / STp->block_size;
3628 else if (STps->rw == ST_READING)
3629 mt_status.mt_blkno -=
3630 ((STp->buffer)->buffer_bytes +
3631 STp->block_size - 1) / STp->block_size;
3634 mt_status.mt_gstat = 0;
3635 if (STp->drv_write_prot)
3636 mt_status.mt_gstat |= GMT_WR_PROT(0xffffffff);
3637 if (mt_status.mt_blkno == 0) {
3638 if (mt_status.mt_fileno == 0)
3639 mt_status.mt_gstat |= GMT_BOT(0xffffffff);
3641 mt_status.mt_gstat |= GMT_EOF(0xffffffff);
3643 mt_status.mt_erreg = (STp->recover_reg << MT_ST_SOFTERR_SHIFT);
3644 mt_status.mt_resid = STp->partition;
3645 if (STps->eof == ST_EOM_OK || STps->eof == ST_EOM_ERROR)
3646 mt_status.mt_gstat |= GMT_EOT(0xffffffff);
3647 else if (STps->eof >= ST_EOM_OK)
3648 mt_status.mt_gstat |= GMT_EOD(0xffffffff);
3649 if (STp->density == 1)
3650 mt_status.mt_gstat |= GMT_D_800(0xffffffff);
3651 else if (STp->density == 2)
3652 mt_status.mt_gstat |= GMT_D_1600(0xffffffff);
3653 else if (STp->density == 3)
3654 mt_status.mt_gstat |= GMT_D_6250(0xffffffff);
3655 if (STp->ready == ST_READY)
3656 mt_status.mt_gstat |= GMT_ONLINE(0xffffffff);
3657 if (STp->ready == ST_NO_TAPE)
3658 mt_status.mt_gstat |= GMT_DR_OPEN(0xffffffff);
3660 mt_status.mt_gstat |= GMT_SM(0xffffffff);
3661 if (STm->do_async_writes ||
3662 (STm->do_buffer_writes && STp->block_size != 0) ||
3663 STp->drv_buffer != 0)
3664 mt_status.mt_gstat |= GMT_IM_REP_EN(0xffffffff);
3665 if (STp->cleaning_req)
3666 mt_status.mt_gstat |= GMT_CLN(0xffffffff);
3668 i = copy_to_user(p, &mt_status, sizeof(struct mtget));
3674 STp->recover_reg = 0; /* Clear after read */
3677 } /* End of MTIOCGET */
3678 if (cmd_type == _IOC_TYPE(MTIOCPOS) && cmd_nr == _IOC_NR(MTIOCPOS)) {
3679 struct mtpos mt_pos;
3680 if (_IOC_SIZE(cmd_in) != sizeof(struct mtpos)) {
3684 if ((i = get_location(STp, &blk, &bt, 0)) < 0) {
3688 mt_pos.mt_blkno = blk;
3689 i = copy_to_user(p, &mt_pos, sizeof(struct mtpos));
3694 mutex_unlock(&STp->lock);
3696 case SCSI_IOCTL_GET_IDLUN:
3697 case SCSI_IOCTL_GET_BUS_NUMBER:
3700 if ((cmd_in == SG_IO ||
3701 cmd_in == SCSI_IOCTL_SEND_COMMAND ||
3702 cmd_in == CDROM_SEND_PACKET) &&
3703 !capable(CAP_SYS_RAWIO))
3706 i = scsi_cmd_ioctl(STp->disk->queue, STp->disk,
3707 file->f_mode, cmd_in, p);
3712 retval = scsi_ioctl(STp->device, cmd_in, p);
3713 if (!retval && cmd_in == SCSI_IOCTL_STOP_UNIT) { /* unload */
3714 STp->rew_at_close = 0;
3715 STp->ready = ST_NO_TAPE;
3720 mutex_unlock(&STp->lock);
3724 #ifdef CONFIG_COMPAT
3725 static long st_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
3727 struct scsi_tape *STp = file->private_data;
3728 struct scsi_device *sdev = STp->device;
3729 int ret = -ENOIOCTLCMD;
3730 if (sdev->host->hostt->compat_ioctl) {
3732 ret = sdev->host->hostt->compat_ioctl(sdev, cmd, (void __user *)arg);
3741 /* Try to allocate a new tape buffer. Calling function must not hold
3743 static struct st_buffer *new_tape_buffer(int need_dma, int max_sg)
3745 struct st_buffer *tb;
3747 tb = kzalloc(sizeof(struct st_buffer), GFP_ATOMIC);
3749 printk(KERN_NOTICE "st: Can't allocate new tape buffer.\n");
3752 tb->frp_segs = tb->orig_frp_segs = 0;
3753 tb->use_sg = max_sg;
3755 tb->buffer_size = 0;
3757 tb->reserved_pages = kzalloc(max_sg * sizeof(struct page *),
3759 if (!tb->reserved_pages) {
3768 /* Try to allocate enough space in the tape buffer */
3769 static int enlarge_buffer(struct st_buffer * STbuffer, int new_size, int need_dma)
3771 int segs, nbr, max_segs, b_size, order, got;
3774 if (new_size <= STbuffer->buffer_size)
3777 if (STbuffer->buffer_size <= PAGE_SIZE)
3778 normalize_buffer(STbuffer); /* Avoid extra segment */
3780 max_segs = STbuffer->use_sg;
3781 nbr = max_segs - STbuffer->frp_segs;
3785 priority = GFP_KERNEL | __GFP_NOWARN;
3787 priority |= GFP_DMA;
3789 if (STbuffer->cleared)
3790 priority |= __GFP_ZERO;
3792 if (STbuffer->frp_segs) {
3793 order = STbuffer->map_data.page_order;
3794 b_size = PAGE_SIZE << order;
3796 for (b_size = PAGE_SIZE, order = 0;
3797 order <= 6 && b_size < new_size; order++, b_size *= 2)
3801 for (segs = STbuffer->frp_segs, got = STbuffer->buffer_size;
3802 segs < max_segs && got < new_size;) {
3805 page = alloc_pages(priority, order);
3807 DEB(STbuffer->buffer_size = got);
3808 normalize_buffer(STbuffer);
3812 STbuffer->frp_segs += 1;
3814 STbuffer->buffer_size = got;
3815 STbuffer->reserved_pages[segs] = page;
3818 STbuffer->b_data = page_address(STbuffer->reserved_pages[0]);
3819 STbuffer->map_data.page_order = order;
3825 /* Make sure that no data from previous user is in the internal buffer */
3826 static void clear_buffer(struct st_buffer * st_bp)
3830 for (i=0; i < st_bp->frp_segs; i++)
3831 memset(page_address(st_bp->reserved_pages[i]), 0,
3832 PAGE_SIZE << st_bp->map_data.page_order);
3837 /* Release the extra buffer */
3838 static void normalize_buffer(struct st_buffer * STbuffer)
3840 int i, order = STbuffer->map_data.page_order;
3842 for (i = STbuffer->orig_frp_segs; i < STbuffer->frp_segs; i++) {
3843 __free_pages(STbuffer->reserved_pages[i], order);
3844 STbuffer->buffer_size -= (PAGE_SIZE << order);
3846 STbuffer->frp_segs = STbuffer->orig_frp_segs;
3847 STbuffer->frp_sg_current = 0;
3848 STbuffer->sg_segs = 0;
3849 STbuffer->map_data.page_order = 0;
3850 STbuffer->map_data.offset = 0;
3854 /* Move data from the user buffer to the tape buffer. Returns zero (success) or
3855 negative error code. */
3856 static int append_to_buffer(const char __user *ubp, struct st_buffer * st_bp, int do_count)
3858 int i, cnt, res, offset;
3859 int length = PAGE_SIZE << st_bp->map_data.page_order;
3861 for (i = 0, offset = st_bp->buffer_bytes;
3862 i < st_bp->frp_segs && offset >= length; i++)
3864 if (i == st_bp->frp_segs) { /* Should never happen */
3865 printk(KERN_WARNING "st: append_to_buffer offset overflow.\n");
3868 for (; i < st_bp->frp_segs && do_count > 0; i++) {
3869 struct page *page = st_bp->reserved_pages[i];
3870 cnt = length - offset < do_count ? length - offset : do_count;
3871 res = copy_from_user(page_address(page) + offset, ubp, cnt);
3875 st_bp->buffer_bytes += cnt;
3879 if (do_count) /* Should never happen */
3886 /* Move data from the tape buffer to the user buffer. Returns zero (success) or
3887 negative error code. */
3888 static int from_buffer(struct st_buffer * st_bp, char __user *ubp, int do_count)
3890 int i, cnt, res, offset;
3891 int length = PAGE_SIZE << st_bp->map_data.page_order;
3893 for (i = 0, offset = st_bp->read_pointer;
3894 i < st_bp->frp_segs && offset >= length; i++)
3896 if (i == st_bp->frp_segs) { /* Should never happen */
3897 printk(KERN_WARNING "st: from_buffer offset overflow.\n");
3900 for (; i < st_bp->frp_segs && do_count > 0; i++) {
3901 struct page *page = st_bp->reserved_pages[i];
3902 cnt = length - offset < do_count ? length - offset : do_count;
3903 res = copy_to_user(ubp, page_address(page) + offset, cnt);
3907 st_bp->buffer_bytes -= cnt;
3908 st_bp->read_pointer += cnt;
3912 if (do_count) /* Should never happen */
3919 /* Move data towards start of buffer */
3920 static void move_buffer_data(struct st_buffer * st_bp, int offset)
3922 int src_seg, dst_seg, src_offset = 0, dst_offset;
3924 int length = PAGE_SIZE << st_bp->map_data.page_order;
3929 total=st_bp->buffer_bytes - offset;
3930 for (src_seg=0; src_seg < st_bp->frp_segs; src_seg++) {
3931 src_offset = offset;
3932 if (src_offset < length)
3937 st_bp->buffer_bytes = st_bp->read_pointer = total;
3938 for (dst_seg=dst_offset=0; total > 0; ) {
3939 struct page *dpage = st_bp->reserved_pages[dst_seg];
3940 struct page *spage = st_bp->reserved_pages[src_seg];
3942 count = min(length - dst_offset, length - src_offset);
3943 memmove(page_address(dpage) + dst_offset,
3944 page_address(spage) + src_offset, count);
3945 src_offset += count;
3946 if (src_offset >= length) {
3950 dst_offset += count;
3951 if (dst_offset >= length) {
3959 /* Validate the options from command line or module parameters */
3960 static void validate_options(void)
3963 st_fixed_buffer_size = buffer_kbs * ST_KILOBYTE;
3964 if (max_sg_segs >= ST_FIRST_SG)
3965 st_max_sg_segs = max_sg_segs;
3969 /* Set the boot options. Syntax is defined in Documenation/scsi/st.txt.
3971 static int __init st_setup(char *str)
3973 int i, len, ints[5];
3976 stp = get_options(str, ARRAY_SIZE(ints), ints);
3979 for (i = 0; i < ints[0] && i < ARRAY_SIZE(parms); i++)
3981 *parms[i].val = ints[i + 1];
3983 while (stp != NULL) {
3984 for (i = 0; i < ARRAY_SIZE(parms); i++) {
3985 len = strlen(parms[i].name);
3986 if (!strncmp(stp, parms[i].name, len) &&
3987 (*(stp + len) == ':' || *(stp + len) == '=')) {
3990 simple_strtoul(stp + len + 1, NULL, 0);
3992 printk(KERN_WARNING "st: Obsolete parameter %s\n",
3997 if (i >= ARRAY_SIZE(parms))
3998 printk(KERN_WARNING "st: invalid parameter in '%s'\n",
4000 stp = strchr(stp, ',');
4011 __setup("st=", st_setup);
4015 static const struct file_operations st_fops =
4017 .owner = THIS_MODULE,
4020 .unlocked_ioctl = st_ioctl,
4021 #ifdef CONFIG_COMPAT
4022 .compat_ioctl = st_compat_ioctl,
4026 .release = st_release,
4029 static int st_probe(struct device *dev)
4031 struct scsi_device *SDp = to_scsi_device(dev);
4032 struct gendisk *disk = NULL;
4033 struct cdev *cdev = NULL;
4034 struct scsi_tape *tpnt = NULL;
4035 struct st_modedef *STm;
4036 struct st_partstat *STps;
4037 struct st_buffer *buffer;
4038 int i, j, mode, dev_num, error;
4041 if (SDp->type != TYPE_TAPE)
4043 if ((stp = st_incompatible(SDp))) {
4044 sdev_printk(KERN_INFO, SDp, "Found incompatible tape\n");
4045 printk(KERN_INFO "st: The suggested driver is %s.\n", stp);
4049 i = min(SDp->request_queue->max_hw_segments,
4050 SDp->request_queue->max_phys_segments);
4051 if (st_max_sg_segs < i)
4053 buffer = new_tape_buffer((SDp->host)->unchecked_isa_dma, i);
4054 if (buffer == NULL) {
4056 "st: Can't allocate new tape buffer. Device not attached.\n");
4060 disk = alloc_disk(1);
4062 printk(KERN_ERR "st: out of memory. Device not attached.\n");
4063 goto out_buffer_free;
4066 write_lock(&st_dev_arr_lock);
4067 if (st_nr_dev >= st_dev_max) {
4068 struct scsi_tape **tmp_da;
4071 tmp_dev_max = max(st_nr_dev * 2, 8);
4072 if (tmp_dev_max > ST_MAX_TAPES)
4073 tmp_dev_max = ST_MAX_TAPES;
4074 if (tmp_dev_max <= st_nr_dev) {
4075 write_unlock(&st_dev_arr_lock);
4076 printk(KERN_ERR "st: Too many tape devices (max. %d).\n",
4081 tmp_da = kzalloc(tmp_dev_max * sizeof(struct scsi_tape *), GFP_ATOMIC);
4082 if (tmp_da == NULL) {
4083 write_unlock(&st_dev_arr_lock);
4084 printk(KERN_ERR "st: Can't extend device array.\n");
4088 if (scsi_tapes != NULL) {
4089 memcpy(tmp_da, scsi_tapes,
4090 st_dev_max * sizeof(struct scsi_tape *));
4093 scsi_tapes = tmp_da;
4095 st_dev_max = tmp_dev_max;
4098 for (i = 0; i < st_dev_max; i++)
4099 if (scsi_tapes[i] == NULL)
4101 if (i >= st_dev_max)
4102 panic("scsi_devices corrupt (st)");
4104 tpnt = kzalloc(sizeof(struct scsi_tape), GFP_ATOMIC);
4106 write_unlock(&st_dev_arr_lock);
4107 printk(KERN_ERR "st: Can't allocate device descriptor.\n");
4110 kref_init(&tpnt->kref);
4112 sprintf(disk->disk_name, "st%d", i);
4113 disk->private_data = &tpnt->driver;
4114 disk->queue = SDp->request_queue;
4115 tpnt->driver = &st_template;
4116 scsi_tapes[i] = tpnt;
4120 if (SDp->scsi_level <= 2)
4121 tpnt->tape_type = MT_ISSCSI1;
4123 tpnt->tape_type = MT_ISSCSI2;
4125 tpnt->buffer = buffer;
4126 tpnt->buffer->last_SRpnt = NULL;
4131 tpnt->drv_buffer = 1; /* Try buffering if no mode sense */
4132 tpnt->restr_dma = (SDp->host)->unchecked_isa_dma;
4133 tpnt->use_pf = (SDp->scsi_level >= SCSI_2);
4135 tpnt->do_auto_lock = ST_AUTO_LOCK;
4136 tpnt->can_bsr = (SDp->scsi_level > 2 ? 1 : ST_IN_FILE_POS); /* BSR mandatory in SCSI3 */
4137 tpnt->can_partitions = 0;
4138 tpnt->two_fm = ST_TWO_FM;
4139 tpnt->fast_mteom = ST_FAST_MTEOM;
4140 tpnt->scsi2_logical = ST_SCSI2LOGICAL;
4141 tpnt->sili = ST_SILI;
4142 tpnt->immediate = ST_NOWAIT;
4143 tpnt->default_drvbuffer = 0xff; /* No forced buffering */
4144 tpnt->partition = 0;
4145 tpnt->new_partition = 0;
4146 tpnt->nbr_partitions = 0;
4147 blk_queue_rq_timeout(tpnt->device->request_queue, ST_TIMEOUT);
4148 tpnt->long_timeout = ST_LONG_TIMEOUT;
4149 tpnt->try_dio = try_direct_io && !SDp->host->unchecked_isa_dma;
4151 for (i = 0; i < ST_NBR_MODES; i++) {
4152 STm = &(tpnt->modes[i]);
4154 STm->sysv = ST_SYSV;
4155 STm->defaults_for_writes = 0;
4156 STm->do_async_writes = ST_ASYNC_WRITES;
4157 STm->do_buffer_writes = ST_BUFFER_WRITES;
4158 STm->do_read_ahead = ST_READ_AHEAD;
4159 STm->default_compression = ST_DONT_TOUCH;
4160 STm->default_blksize = (-1); /* No forced size */
4161 STm->default_density = (-1); /* No forced density */
4164 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
4165 STps = &(tpnt->ps[i]);
4167 STps->eof = ST_NOEOF;
4169 STps->last_block_valid = 0;
4170 STps->drv_block = (-1);
4171 STps->drv_file = (-1);
4174 tpnt->current_mode = 0;
4175 tpnt->modes[0].defined = 1;
4177 tpnt->density_changed = tpnt->compression_changed =
4178 tpnt->blksize_changed = 0;
4179 mutex_init(&tpnt->lock);
4182 write_unlock(&st_dev_arr_lock);
4184 for (mode = 0; mode < ST_NBR_MODES; ++mode) {
4185 STm = &(tpnt->modes[mode]);
4186 for (j=0; j < 2; j++) {
4187 cdev = cdev_alloc();
4190 "st%d: out of memory. Device not attached.\n",
4194 cdev->owner = THIS_MODULE;
4195 cdev->ops = &st_fops;
4197 error = cdev_add(cdev,
4198 MKDEV(SCSI_TAPE_MAJOR, TAPE_MINOR(dev_num, mode, j)),
4201 printk(KERN_ERR "st%d: Can't add %s-rewind mode %d\n",
4202 dev_num, j ? "non" : "auto", mode);
4203 printk(KERN_ERR "st%d: Device not attached.\n", dev_num);
4206 STm->cdevs[j] = cdev;
4209 error = do_create_class_files(tpnt, dev_num, mode);
4214 sdev_printk(KERN_NOTICE, SDp,
4215 "Attached scsi tape %s\n", tape_name(tpnt));
4216 sdev_printk(KERN_INFO, SDp, "%s: try direct i/o: %s (alignment %d B)\n",
4217 tape_name(tpnt), tpnt->try_dio ? "yes" : "no",
4218 queue_dma_alignment(SDp->request_queue) + 1);
4223 for (mode=0; mode < ST_NBR_MODES; mode++) {
4224 STm = &(tpnt->modes[mode]);
4225 sysfs_remove_link(&tpnt->device->sdev_gendev.kobj,
4227 for (j=0; j < 2; j++) {
4228 if (STm->cdevs[j]) {
4229 if (cdev == STm->cdevs[j])
4231 device_destroy(st_sysfs_class,
4232 MKDEV(SCSI_TAPE_MAJOR,
4233 TAPE_MINOR(i, mode, j)));
4234 cdev_del(STm->cdevs[j]);
4240 write_lock(&st_dev_arr_lock);
4241 scsi_tapes[dev_num] = NULL;
4243 write_unlock(&st_dev_arr_lock);
4254 static int st_remove(struct device *dev)
4256 struct scsi_device *SDp = to_scsi_device(dev);
4257 struct scsi_tape *tpnt;
4260 write_lock(&st_dev_arr_lock);
4261 for (i = 0; i < st_dev_max; i++) {
4262 tpnt = scsi_tapes[i];
4263 if (tpnt != NULL && tpnt->device == SDp) {
4264 scsi_tapes[i] = NULL;
4266 write_unlock(&st_dev_arr_lock);
4267 sysfs_remove_link(&tpnt->device->sdev_gendev.kobj,
4269 for (mode = 0; mode < ST_NBR_MODES; ++mode) {
4270 for (j=0; j < 2; j++) {
4271 device_destroy(st_sysfs_class,
4272 MKDEV(SCSI_TAPE_MAJOR,
4273 TAPE_MINOR(i, mode, j)));
4274 cdev_del(tpnt->modes[mode].cdevs[j]);
4275 tpnt->modes[mode].cdevs[j] = NULL;
4279 mutex_lock(&st_ref_mutex);
4280 kref_put(&tpnt->kref, scsi_tape_release);
4281 mutex_unlock(&st_ref_mutex);
4286 write_unlock(&st_dev_arr_lock);
4291 * scsi_tape_release - Called to free the Scsi_Tape structure
4292 * @kref: pointer to embedded kref
4294 * st_ref_mutex must be held entering this routine. Because it is
4295 * called on last put, you should always use the scsi_tape_get()
4296 * scsi_tape_put() helpers which manipulate the semaphore directly
4297 * and never do a direct kref_put().
4299 static void scsi_tape_release(struct kref *kref)
4301 struct scsi_tape *tpnt = to_scsi_tape(kref);
4302 struct gendisk *disk = tpnt->disk;
4304 tpnt->device = NULL;
4307 tpnt->buffer->orig_frp_segs = 0;
4308 normalize_buffer(tpnt->buffer);
4309 kfree(tpnt->buffer->reserved_pages);
4310 kfree(tpnt->buffer);
4313 disk->private_data = NULL;
4319 static int __init init_st(void)
4325 printk(KERN_INFO "st: Version %s, fixed bufsize %d, s/g segs %d\n",
4326 verstr, st_fixed_buffer_size, st_max_sg_segs);
4328 st_sysfs_class = class_create(THIS_MODULE, "scsi_tape");
4329 if (IS_ERR(st_sysfs_class)) {
4330 printk(KERN_ERR "Unable create sysfs class for SCSI tapes\n");
4331 return PTR_ERR(st_sysfs_class);
4334 err = register_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4335 ST_MAX_TAPE_ENTRIES, "st");
4337 printk(KERN_ERR "Unable to get major %d for SCSI tapes\n",
4342 err = scsi_register_driver(&st_template.gendrv);
4346 err = do_create_sysfs_files();
4353 scsi_unregister_driver(&st_template.gendrv);
4355 unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4356 ST_MAX_TAPE_ENTRIES);
4358 class_destroy(st_sysfs_class);
4362 static void __exit exit_st(void)
4364 do_remove_sysfs_files();
4365 scsi_unregister_driver(&st_template.gendrv);
4366 unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4367 ST_MAX_TAPE_ENTRIES);
4368 class_destroy(st_sysfs_class);
4370 printk(KERN_INFO "st: Unloaded.\n");
4373 module_init(init_st);
4374 module_exit(exit_st);
4377 /* The sysfs driver interface. Read-only at the moment */
4378 static ssize_t st_try_direct_io_show(struct device_driver *ddp, char *buf)
4380 return snprintf(buf, PAGE_SIZE, "%d\n", try_direct_io);
4382 static DRIVER_ATTR(try_direct_io, S_IRUGO, st_try_direct_io_show, NULL);
4384 static ssize_t st_fixed_buffer_size_show(struct device_driver *ddp, char *buf)
4386 return snprintf(buf, PAGE_SIZE, "%d\n", st_fixed_buffer_size);
4388 static DRIVER_ATTR(fixed_buffer_size, S_IRUGO, st_fixed_buffer_size_show, NULL);
4390 static ssize_t st_max_sg_segs_show(struct device_driver *ddp, char *buf)
4392 return snprintf(buf, PAGE_SIZE, "%d\n", st_max_sg_segs);
4394 static DRIVER_ATTR(max_sg_segs, S_IRUGO, st_max_sg_segs_show, NULL);
4396 static ssize_t st_version_show(struct device_driver *ddd, char *buf)
4398 return snprintf(buf, PAGE_SIZE, "[%s]\n", verstr);
4400 static DRIVER_ATTR(version, S_IRUGO, st_version_show, NULL);
4402 static int do_create_sysfs_files(void)
4404 struct device_driver *sysfs = &st_template.gendrv;
4407 err = driver_create_file(sysfs, &driver_attr_try_direct_io);
4410 err = driver_create_file(sysfs, &driver_attr_fixed_buffer_size);
4412 goto err_try_direct_io;
4413 err = driver_create_file(sysfs, &driver_attr_max_sg_segs);
4415 goto err_attr_fixed_buf;
4416 err = driver_create_file(sysfs, &driver_attr_version);
4418 goto err_attr_max_sg;
4423 driver_remove_file(sysfs, &driver_attr_max_sg_segs);
4425 driver_remove_file(sysfs, &driver_attr_fixed_buffer_size);
4427 driver_remove_file(sysfs, &driver_attr_try_direct_io);
4431 static void do_remove_sysfs_files(void)
4433 struct device_driver *sysfs = &st_template.gendrv;
4435 driver_remove_file(sysfs, &driver_attr_version);
4436 driver_remove_file(sysfs, &driver_attr_max_sg_segs);
4437 driver_remove_file(sysfs, &driver_attr_fixed_buffer_size);
4438 driver_remove_file(sysfs, &driver_attr_try_direct_io);
4442 /* The sysfs simple class interface */
4444 st_defined_show(struct device *dev, struct device_attribute *attr, char *buf)
4446 struct st_modedef *STm = dev_get_drvdata(dev);
4449 l = snprintf(buf, PAGE_SIZE, "%d\n", STm->defined);
4453 DEVICE_ATTR(defined, S_IRUGO, st_defined_show, NULL);
4456 st_defblk_show(struct device *dev, struct device_attribute *attr, char *buf)
4458 struct st_modedef *STm = dev_get_drvdata(dev);
4461 l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_blksize);
4465 DEVICE_ATTR(default_blksize, S_IRUGO, st_defblk_show, NULL);
4468 st_defdensity_show(struct device *dev, struct device_attribute *attr, char *buf)
4470 struct st_modedef *STm = dev_get_drvdata(dev);
4474 fmt = STm->default_density >= 0 ? "0x%02x\n" : "%d\n";
4475 l = snprintf(buf, PAGE_SIZE, fmt, STm->default_density);
4479 DEVICE_ATTR(default_density, S_IRUGO, st_defdensity_show, NULL);
4482 st_defcompression_show(struct device *dev, struct device_attribute *attr,
4485 struct st_modedef *STm = dev_get_drvdata(dev);
4488 l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_compression - 1);
4492 DEVICE_ATTR(default_compression, S_IRUGO, st_defcompression_show, NULL);
4495 st_options_show(struct device *dev, struct device_attribute *attr, char *buf)
4497 struct st_modedef *STm = dev_get_drvdata(dev);
4498 struct scsi_tape *STp;
4502 for (i=0; i < st_dev_max; i++) {
4503 for (j=0; j < ST_NBR_MODES; j++)
4504 if (&scsi_tapes[i]->modes[j] == STm)
4506 if (j < ST_NBR_MODES)
4509 if (i == st_dev_max)
4510 return 0; /* should never happen */
4512 STp = scsi_tapes[i];
4514 options = STm->do_buffer_writes ? MT_ST_BUFFER_WRITES : 0;
4515 options |= STm->do_async_writes ? MT_ST_ASYNC_WRITES : 0;
4516 options |= STm->do_read_ahead ? MT_ST_READ_AHEAD : 0;
4517 DEB( options |= debugging ? MT_ST_DEBUGGING : 0 );
4518 options |= STp->two_fm ? MT_ST_TWO_FM : 0;
4519 options |= STp->fast_mteom ? MT_ST_FAST_MTEOM : 0;
4520 options |= STm->defaults_for_writes ? MT_ST_DEF_WRITES : 0;
4521 options |= STp->can_bsr ? MT_ST_CAN_BSR : 0;
4522 options |= STp->omit_blklims ? MT_ST_NO_BLKLIMS : 0;
4523 options |= STp->can_partitions ? MT_ST_CAN_PARTITIONS : 0;
4524 options |= STp->scsi2_logical ? MT_ST_SCSI2LOGICAL : 0;
4525 options |= STm->sysv ? MT_ST_SYSV : 0;
4526 options |= STp->immediate ? MT_ST_NOWAIT : 0;
4527 options |= STp->sili ? MT_ST_SILI : 0;
4529 l = snprintf(buf, PAGE_SIZE, "0x%08x\n", options);
4533 DEVICE_ATTR(options, S_IRUGO, st_options_show, NULL);
4535 static int do_create_class_files(struct scsi_tape *STp, int dev_num, int mode)
4539 struct device *st_class_member;
4541 for (rew=0; rew < 2; rew++) {
4542 /* Make sure that the minor numbers corresponding to the four
4543 first modes always get the same names */
4544 i = mode << (4 - ST_NBR_MODE_BITS);
4545 snprintf(name, 10, "%s%s%s", rew ? "n" : "",
4546 STp->disk->disk_name, st_formats[i]);
4548 device_create(st_sysfs_class, &STp->device->sdev_gendev,
4549 MKDEV(SCSI_TAPE_MAJOR,
4550 TAPE_MINOR(dev_num, mode, rew)),
4551 &STp->modes[mode], "%s", name);
4552 if (IS_ERR(st_class_member)) {
4553 printk(KERN_WARNING "st%d: device_create failed\n",
4555 error = PTR_ERR(st_class_member);
4559 error = device_create_file(st_class_member,
4561 if (error) goto out;
4562 error = device_create_file(st_class_member,
4563 &dev_attr_default_blksize);
4564 if (error) goto out;
4565 error = device_create_file(st_class_member,
4566 &dev_attr_default_density);
4567 if (error) goto out;
4568 error = device_create_file(st_class_member,
4569 &dev_attr_default_compression);
4570 if (error) goto out;
4571 error = device_create_file(st_class_member,
4573 if (error) goto out;
4575 if (mode == 0 && rew == 0) {
4576 error = sysfs_create_link(&STp->device->sdev_gendev.kobj,
4577 &st_class_member->kobj,
4581 "st%d: Can't create sysfs link from SCSI device.\n",
4594 /* The following functions may be useful for a larger audience. */
4595 static int sgl_map_user_pages(struct st_buffer *STbp,
4596 const unsigned int max_pages, unsigned long uaddr,
4597 size_t count, int rw)
4599 unsigned long end = (uaddr + count + PAGE_SIZE - 1) >> PAGE_SHIFT;
4600 unsigned long start = uaddr >> PAGE_SHIFT;
4601 const int nr_pages = end - start;
4603 struct page **pages;
4604 struct rq_map_data *mdata = &STbp->map_data;
4606 /* User attempted Overflow! */
4607 if ((uaddr + count) < uaddr)
4611 if (nr_pages > max_pages)
4618 if ((pages = kmalloc(max_pages * sizeof(*pages), GFP_KERNEL)) == NULL)
4621 /* Try to fault in all of the necessary pages */
4622 down_read(¤t->mm->mmap_sem);
4623 /* rw==READ means read from drive, write into memory area */
4624 res = get_user_pages(
4630 0, /* don't force */
4633 up_read(¤t->mm->mmap_sem);
4635 /* Errors and no page mapped should return here */
4639 for (i=0; i < nr_pages; i++) {
4640 /* FIXME: flush superflous for rw==READ,
4641 * probably wrong function for rw==WRITE
4643 flush_dcache_page(pages[i]);
4646 mdata->offset = uaddr & ~PAGE_MASK;
4647 mdata->page_order = 0;
4648 STbp->mapped_pages = pages;
4653 for (j=0; j < res; j++)
4654 page_cache_release(pages[j]);
4662 /* And unmap them... */
4663 static int sgl_unmap_user_pages(struct st_buffer *STbp,
4664 const unsigned int nr_pages, int dirtied)
4668 for (i=0; i < nr_pages; i++) {
4669 struct page *page = STbp->mapped_pages[i];
4673 /* FIXME: cache flush missing for rw==READ
4674 * FIXME: call the correct reference counting function
4676 page_cache_release(page);
4678 kfree(STbp->mapped_pages);
4679 STbp->mapped_pages = NULL;