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 - 2010 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
= "20101219";
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/slab.h>
31 #include <linux/errno.h>
32 #include <linux/mtio.h>
33 #include <linux/cdrom.h>
34 #include <linux/ioctl.h>
35 #include <linux/fcntl.h>
36 #include <linux/spinlock.h>
37 #include <linux/blkdev.h>
38 #include <linux/moduleparam.h>
39 #include <linux/cdev.h>
40 #include <linux/idr.h>
41 #include <linux/delay.h>
42 #include <linux/mutex.h>
44 #include <asm/uaccess.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 #define ST_DEB_MSG KERN_NOTICE
64 /* The message level for the debug messages is currently set to KERN_NOTICE
65 so that people can easily see the messages. Later when the debugging messages
66 in the drivers are more widely classified, this may be changed to KERN_DEBUG. */
68 #define DEBC(a) if (debugging) { a ; }
74 #define ST_KILOBYTE 1024
76 #include "st_options.h"
79 static int buffer_kbs
;
80 static int max_sg_segs
;
81 static int try_direct_io
= TRY_DIRECT_IO
;
82 static int try_rdio
= 1;
83 static int try_wdio
= 1;
84 static int debug_flag
;
86 static struct class st_sysfs_class
;
87 static const struct attribute_group
*st_dev_groups
[];
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)");
105 module_param_named(debug_flag
, debug_flag
, int, 0);
106 MODULE_PARM_DESC(debug_flag
, "Enable DEBUG, same as setting debugging=1");
109 /* Extra parameters for testing */
110 module_param_named(try_rdio
, try_rdio
, int, 0);
111 MODULE_PARM_DESC(try_rdio
, "Try direct read i/o when possible");
112 module_param_named(try_wdio
, try_wdio
, int, 0);
113 MODULE_PARM_DESC(try_wdio
, "Try direct write i/o when possible");
116 static int write_threshold_kbs
; /* retained for compatibility */
117 static struct st_dev_parm
{
120 } parms
[] __initdata
= {
122 "buffer_kbs", &buffer_kbs
124 { /* Retained for compatibility with 2.4 */
125 "write_threshold_kbs", &write_threshold_kbs
131 "try_direct_io", &try_direct_io
134 "debug_flag", &debug_flag
139 /* Restrict the number of modes so that names for all are assigned */
140 #if ST_NBR_MODES > 16
141 #error "Maximum number of modes is 16"
143 /* Bit reversed order to get same names for same minors with all
145 static const char *st_formats
[] = {
146 "", "r", "k", "s", "l", "t", "o", "u",
147 "m", "v", "p", "x", "a", "y", "q", "z"};
149 /* The default definitions have been moved to st_options.h */
151 #define ST_FIXED_BUFFER_SIZE (ST_FIXED_BUFFER_BLOCKS * ST_KILOBYTE)
153 /* The buffer size should fit into the 24 bits for length in the
154 6-byte SCSI read and write commands. */
155 #if ST_FIXED_BUFFER_SIZE >= (2 << 24 - 1)
156 #error "Buffer size should not exceed (2 << 24 - 1) bytes!"
159 static int debugging
= DEBUG
;
161 #define MAX_RETRIES 0
162 #define MAX_WRITE_RETRIES 0
163 #define MAX_READY_RETRIES 0
164 #define NO_TAPE NOT_READY
166 #define ST_TIMEOUT (900 * HZ)
167 #define ST_LONG_TIMEOUT (14000 * HZ)
169 /* Remove mode bits and auto-rewind bit (7) */
170 #define TAPE_NR(x) ( ((iminor(x) & ~255) >> (ST_NBR_MODE_BITS + 1)) | \
171 (iminor(x) & ~(-1 << ST_MODE_SHIFT)) )
172 #define TAPE_MODE(x) ((iminor(x) & ST_MODE_MASK) >> ST_MODE_SHIFT)
174 /* Construct the minor number from the device (d), mode (m), and non-rewind (n) data */
175 #define TAPE_MINOR(d, m, n) (((d & ~(255 >> (ST_NBR_MODE_BITS + 1))) << (ST_NBR_MODE_BITS + 1)) | \
176 (d & (255 >> (ST_NBR_MODE_BITS + 1))) | (m << ST_MODE_SHIFT) | ((n != 0) << 7) )
178 /* Internal ioctl to set both density (uppermost 8 bits) and blocksize (lower
180 #define SET_DENS_AND_BLK 0x10001
182 static int st_fixed_buffer_size
= ST_FIXED_BUFFER_SIZE
;
183 static int st_max_sg_segs
= ST_MAX_SG
;
185 static int modes_defined
;
187 static int enlarge_buffer(struct st_buffer
*, int, int);
188 static void clear_buffer(struct st_buffer
*);
189 static void normalize_buffer(struct st_buffer
*);
190 static int append_to_buffer(const char __user
*, struct st_buffer
*, int);
191 static int from_buffer(struct st_buffer
*, char __user
*, int);
192 static void move_buffer_data(struct st_buffer
*, int);
194 static int sgl_map_user_pages(struct st_buffer
*, const unsigned int,
195 unsigned long, size_t, int);
196 static int sgl_unmap_user_pages(struct st_buffer
*, const unsigned int, int);
198 static int st_probe(struct device
*);
199 static int st_remove(struct device
*);
201 static int do_create_sysfs_files(void);
202 static void do_remove_sysfs_files(void);
204 static struct scsi_driver st_template
= {
207 .owner
= THIS_MODULE
,
213 static int st_compression(struct scsi_tape
*, int);
215 static int find_partition(struct scsi_tape
*);
216 static int switch_partition(struct scsi_tape
*);
218 static int st_int_ioctl(struct scsi_tape
*, unsigned int, unsigned long);
220 static void scsi_tape_release(struct kref
*);
222 #define to_scsi_tape(obj) container_of(obj, struct scsi_tape, kref)
224 static DEFINE_MUTEX(st_ref_mutex
);
225 static DEFINE_SPINLOCK(st_index_lock
);
226 static DEFINE_SPINLOCK(st_use_lock
);
227 static DEFINE_IDR(st_index_idr
);
231 #include "osst_detect.h"
232 #ifndef SIGS_FROM_OSST
233 #define SIGS_FROM_OSST \
234 {"OnStream", "SC-", "", "osst"}, \
235 {"OnStream", "DI-", "", "osst"}, \
236 {"OnStream", "DP-", "", "osst"}, \
237 {"OnStream", "USB", "", "osst"}, \
238 {"OnStream", "FW-", "", "osst"}
241 static struct scsi_tape
*scsi_tape_get(int dev
)
243 struct scsi_tape
*STp
= NULL
;
245 mutex_lock(&st_ref_mutex
);
246 spin_lock(&st_index_lock
);
248 STp
= idr_find(&st_index_idr
, dev
);
251 kref_get(&STp
->kref
);
256 if (scsi_device_get(STp
->device
))
262 kref_put(&STp
->kref
, scsi_tape_release
);
265 spin_unlock(&st_index_lock
);
266 mutex_unlock(&st_ref_mutex
);
270 static void scsi_tape_put(struct scsi_tape
*STp
)
272 struct scsi_device
*sdev
= STp
->device
;
274 mutex_lock(&st_ref_mutex
);
275 kref_put(&STp
->kref
, scsi_tape_release
);
276 scsi_device_put(sdev
);
277 mutex_unlock(&st_ref_mutex
);
280 struct st_reject_data
{
284 char *driver_hint
; /* Name of the correct driver, NULL if unknown */
287 static struct st_reject_data reject_list
[] = {
288 /* {"XXX", "Yy-", "", NULL}, example */
292 /* If the device signature is on the list of incompatible drives, the
293 function returns a pointer to the name of the correct driver (if known) */
294 static char * st_incompatible(struct scsi_device
* SDp
)
296 struct st_reject_data
*rp
;
298 for (rp
=&(reject_list
[0]); rp
->vendor
!= NULL
; rp
++)
299 if (!strncmp(rp
->vendor
, SDp
->vendor
, strlen(rp
->vendor
)) &&
300 !strncmp(rp
->model
, SDp
->model
, strlen(rp
->model
)) &&
301 !strncmp(rp
->rev
, SDp
->rev
, strlen(rp
->rev
))) {
303 return rp
->driver_hint
;
311 static inline char *tape_name(struct scsi_tape
*tape
)
313 return tape
->disk
->disk_name
;
316 #define st_printk(prefix, t, fmt, a...) \
317 sdev_prefix_printk(prefix, (t)->device, tape_name(t), fmt, ##a)
319 #define DEBC_printk(t, fmt, a...) \
320 if (debugging) { st_printk(ST_DEB_MSG, t, fmt, ##a ); }
322 #define DEBC_printk(t, fmt, a...)
325 static void st_analyze_sense(struct st_request
*SRpnt
, struct st_cmdstatus
*s
)
328 const u8
*sense
= SRpnt
->sense
;
330 s
->have_sense
= scsi_normalize_sense(SRpnt
->sense
,
331 SCSI_SENSE_BUFFERSIZE
, &s
->sense_hdr
);
337 scsi_get_sense_info_fld(sense
, SCSI_SENSE_BUFFERSIZE
, &s
->uremainder64
);
338 switch (sense
[0] & 0x7f) {
343 s
->flags
= sense
[2] & 0xe0;
349 ucp
= scsi_sense_desc_find(sense
, SCSI_SENSE_BUFFERSIZE
, 4);
350 s
->flags
= ucp
? (ucp
[3] & 0xe0) : 0;
357 /* Convert the result to success code */
358 static int st_chk_result(struct scsi_tape
*STp
, struct st_request
* SRpnt
)
360 int result
= SRpnt
->result
;
362 DEB(const char *stp
;)
363 char *name
= tape_name(STp
);
364 struct st_cmdstatus
*cmdstatp
;
369 cmdstatp
= &STp
->buffer
->cmdstat
;
370 st_analyze_sense(SRpnt
, cmdstatp
);
372 if (cmdstatp
->have_sense
)
373 scode
= STp
->buffer
->cmdstat
.sense_hdr
.sense_key
;
379 st_printk(ST_DEB_MSG
, STp
,
380 "Error: %x, cmd: %x %x %x %x %x %x\n", result
,
381 SRpnt
->cmd
[0], SRpnt
->cmd
[1], SRpnt
->cmd
[2],
382 SRpnt
->cmd
[3], SRpnt
->cmd
[4], SRpnt
->cmd
[5]);
383 if (cmdstatp
->have_sense
)
384 __scsi_print_sense(STp
->device
, name
,
385 SRpnt
->sense
, SCSI_SENSE_BUFFERSIZE
);
387 if (!debugging
) { /* Abnormal conditions for tape */
388 if (!cmdstatp
->have_sense
)
389 st_printk(KERN_WARNING
, STp
,
390 "Error %x (driver bt 0x%x, host bt 0x%x).\n",
391 result
, driver_byte(result
), host_byte(result
));
392 else if (cmdstatp
->have_sense
&&
394 scode
!= RECOVERED_ERROR
&&
395 /* scode != UNIT_ATTENTION && */
396 scode
!= BLANK_CHECK
&&
397 scode
!= VOLUME_OVERFLOW
&&
398 SRpnt
->cmd
[0] != MODE_SENSE
&&
399 SRpnt
->cmd
[0] != TEST_UNIT_READY
) {
401 __scsi_print_sense(STp
->device
, name
,
402 SRpnt
->sense
, SCSI_SENSE_BUFFERSIZE
);
406 if (cmdstatp
->fixed_format
&&
407 STp
->cln_mode
>= EXTENDED_SENSE_START
) { /* Only fixed format sense */
408 if (STp
->cln_sense_value
)
409 STp
->cleaning_req
|= ((SRpnt
->sense
[STp
->cln_mode
] &
410 STp
->cln_sense_mask
) == STp
->cln_sense_value
);
412 STp
->cleaning_req
|= ((SRpnt
->sense
[STp
->cln_mode
] &
413 STp
->cln_sense_mask
) != 0);
415 if (cmdstatp
->have_sense
&&
416 cmdstatp
->sense_hdr
.asc
== 0 && cmdstatp
->sense_hdr
.ascq
== 0x17)
417 STp
->cleaning_req
= 1; /* ASC and ASCQ => cleaning requested */
419 STp
->pos_unknown
|= STp
->device
->was_reset
;
421 if (cmdstatp
->have_sense
&&
422 scode
== RECOVERED_ERROR
423 #if ST_RECOVERED_WRITE_FATAL
424 && SRpnt
->cmd
[0] != WRITE_6
425 && SRpnt
->cmd
[0] != WRITE_FILEMARKS
428 STp
->recover_count
++;
433 if (SRpnt
->cmd
[0] == READ_6
)
435 else if (SRpnt
->cmd
[0] == WRITE_6
)
439 st_printk(ST_DEB_MSG
, STp
,
440 "Recovered %s error (%d).\n",
441 stp
, STp
->recover_count
);
444 if (cmdstatp
->flags
== 0)
450 static struct st_request
*st_allocate_request(struct scsi_tape
*stp
)
452 struct st_request
*streq
;
454 streq
= kzalloc(sizeof(*streq
), GFP_KERNEL
);
458 st_printk(KERN_ERR
, stp
,
459 "Can't get SCSI request.\n");
460 if (signal_pending(current
))
461 stp
->buffer
->syscall_result
= -EINTR
;
463 stp
->buffer
->syscall_result
= -EBUSY
;
469 static void st_release_request(struct st_request
*streq
)
474 static void st_scsi_execute_end(struct request
*req
, int uptodate
)
476 struct st_request
*SRpnt
= req
->end_io_data
;
477 struct scsi_tape
*STp
= SRpnt
->stp
;
480 STp
->buffer
->cmdstat
.midlevel_result
= SRpnt
->result
= req
->errors
;
481 STp
->buffer
->cmdstat
.residual
= req
->resid_len
;
485 complete(SRpnt
->waiting
);
487 blk_rq_unmap_user(tmp
);
488 __blk_put_request(req
->q
, req
);
491 static int st_scsi_execute(struct st_request
*SRpnt
, const unsigned char *cmd
,
492 int data_direction
, void *buffer
, unsigned bufflen
,
493 int timeout
, int retries
)
496 struct rq_map_data
*mdata
= &SRpnt
->stp
->buffer
->map_data
;
498 int write
= (data_direction
== DMA_TO_DEVICE
);
500 req
= blk_get_request(SRpnt
->stp
->device
->request_queue
, write
,
503 return DRIVER_ERROR
<< 24;
505 blk_rq_set_block_pc(req
);
506 req
->cmd_flags
|= REQ_QUIET
;
508 mdata
->null_mapped
= 1;
511 err
= blk_rq_map_user(req
->q
, req
, mdata
, NULL
, bufflen
,
514 blk_put_request(req
);
515 return DRIVER_ERROR
<< 24;
519 SRpnt
->bio
= req
->bio
;
520 req
->cmd_len
= COMMAND_SIZE(cmd
[0]);
521 memset(req
->cmd
, 0, BLK_MAX_CDB
);
522 memcpy(req
->cmd
, cmd
, req
->cmd_len
);
523 req
->sense
= SRpnt
->sense
;
525 req
->timeout
= timeout
;
526 req
->retries
= retries
;
527 req
->end_io_data
= SRpnt
;
529 blk_execute_rq_nowait(req
->q
, NULL
, req
, 1, st_scsi_execute_end
);
533 /* Do the scsi command. Waits until command performed if do_wait is true.
534 Otherwise write_behind_check() is used to check that the command
536 static struct st_request
*
537 st_do_scsi(struct st_request
* SRpnt
, struct scsi_tape
* STp
, unsigned char *cmd
,
538 int bytes
, int direction
, int timeout
, int retries
, int do_wait
)
540 struct completion
*waiting
;
541 struct rq_map_data
*mdata
= &STp
->buffer
->map_data
;
544 /* if async, make sure there's no command outstanding */
545 if (!do_wait
&& ((STp
->buffer
)->last_SRpnt
)) {
546 st_printk(KERN_ERR
, STp
,
547 "Async command already active.\n");
548 if (signal_pending(current
))
549 (STp
->buffer
)->syscall_result
= (-EINTR
);
551 (STp
->buffer
)->syscall_result
= (-EBUSY
);
556 SRpnt
= st_allocate_request(STp
);
561 /* If async IO, set last_SRpnt. This ptr tells write_behind_check
562 which IO is outstanding. It's nulled out when the IO completes. */
564 (STp
->buffer
)->last_SRpnt
= SRpnt
;
566 waiting
= &STp
->wait
;
567 init_completion(waiting
);
568 SRpnt
->waiting
= waiting
;
570 if (STp
->buffer
->do_dio
) {
571 mdata
->page_order
= 0;
572 mdata
->nr_entries
= STp
->buffer
->sg_segs
;
573 mdata
->pages
= STp
->buffer
->mapped_pages
;
575 mdata
->page_order
= STp
->buffer
->reserved_page_order
;
577 DIV_ROUND_UP(bytes
, PAGE_SIZE
<< mdata
->page_order
);
578 mdata
->pages
= STp
->buffer
->reserved_pages
;
582 memcpy(SRpnt
->cmd
, cmd
, sizeof(SRpnt
->cmd
));
583 STp
->buffer
->cmdstat
.have_sense
= 0;
584 STp
->buffer
->syscall_result
= 0;
586 ret
= st_scsi_execute(SRpnt
, cmd
, direction
, NULL
, bytes
, timeout
,
589 /* could not allocate the buffer or request was too large */
590 (STp
->buffer
)->syscall_result
= (-EBUSY
);
591 (STp
->buffer
)->last_SRpnt
= NULL
;
592 } else if (do_wait
) {
593 wait_for_completion(waiting
);
594 SRpnt
->waiting
= NULL
;
595 (STp
->buffer
)->syscall_result
= st_chk_result(STp
, SRpnt
);
602 /* Handle the write-behind checking (waits for completion). Returns -ENOSPC if
603 write has been correct but EOM early warning reached, -EIO if write ended in
604 error or zero if write successful. Asynchronous writes are used only in
605 variable block mode. */
606 static int write_behind_check(struct scsi_tape
* STp
)
609 struct st_buffer
*STbuffer
;
610 struct st_partstat
*STps
;
611 struct st_cmdstatus
*cmdstatp
;
612 struct st_request
*SRpnt
;
614 STbuffer
= STp
->buffer
;
615 if (!STbuffer
->writing
)
619 if (STp
->write_pending
)
625 wait_for_completion(&(STp
->wait
));
626 SRpnt
= STbuffer
->last_SRpnt
;
627 STbuffer
->last_SRpnt
= NULL
;
628 SRpnt
->waiting
= NULL
;
630 (STp
->buffer
)->syscall_result
= st_chk_result(STp
, SRpnt
);
631 st_release_request(SRpnt
);
633 STbuffer
->buffer_bytes
-= STbuffer
->writing
;
634 STps
= &(STp
->ps
[STp
->partition
]);
635 if (STps
->drv_block
>= 0) {
636 if (STp
->block_size
== 0)
639 STps
->drv_block
+= STbuffer
->writing
/ STp
->block_size
;
642 cmdstatp
= &STbuffer
->cmdstat
;
643 if (STbuffer
->syscall_result
) {
645 if (cmdstatp
->have_sense
&& !cmdstatp
->deferred
&&
646 (cmdstatp
->flags
& SENSE_EOM
) &&
647 (cmdstatp
->sense_hdr
.sense_key
== NO_SENSE
||
648 cmdstatp
->sense_hdr
.sense_key
== RECOVERED_ERROR
)) {
649 /* EOM at write-behind, has all data been written? */
650 if (!cmdstatp
->remainder_valid
||
651 cmdstatp
->uremainder64
== 0)
655 STps
->drv_block
= -1;
657 STbuffer
->writing
= 0;
659 DEB(if (debugging
&& retval
)
660 st_printk(ST_DEB_MSG
, STp
,
661 "Async write error %x, return value %d.\n",
662 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
];
676 cmd
[1] = 0x01; /* Space FileMarks */
681 cmd
[2] = cmd
[3] = cmd
[4] = 0xff; /* -1 filemarks */
684 DEBC_printk(STp
, "Stepping over filemark %s.\n",
685 forward
? "forward" : "backward");
687 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, 0, DMA_NONE
,
688 STp
->device
->request_queue
->rq_timeout
,
691 return (STp
->buffer
)->syscall_result
;
693 st_release_request(SRpnt
);
696 if ((STp
->buffer
)->cmdstat
.midlevel_result
!= 0)
697 st_printk(KERN_ERR
, STp
,
698 "Stepping over filemark %s failed.\n",
699 forward
? "forward" : "backward");
701 return (STp
->buffer
)->syscall_result
;
705 /* Flush the write buffer (never need to write if variable blocksize). */
706 static int st_flush_write_buffer(struct scsi_tape
* STp
)
710 unsigned char cmd
[MAX_COMMAND_SIZE
];
711 struct st_request
*SRpnt
;
712 struct st_partstat
*STps
;
714 result
= write_behind_check(STp
);
719 if (STp
->dirty
== 1) {
721 transfer
= STp
->buffer
->buffer_bytes
;
722 DEBC_printk(STp
, "Flushing %d bytes.\n", transfer
);
724 memset(cmd
, 0, MAX_COMMAND_SIZE
);
727 blks
= transfer
/ STp
->block_size
;
732 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, transfer
, DMA_TO_DEVICE
,
733 STp
->device
->request_queue
->rq_timeout
,
734 MAX_WRITE_RETRIES
, 1);
736 return (STp
->buffer
)->syscall_result
;
738 STps
= &(STp
->ps
[STp
->partition
]);
739 if ((STp
->buffer
)->syscall_result
!= 0) {
740 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
742 if (cmdstatp
->have_sense
&& !cmdstatp
->deferred
&&
743 (cmdstatp
->flags
& SENSE_EOM
) &&
744 (cmdstatp
->sense_hdr
.sense_key
== NO_SENSE
||
745 cmdstatp
->sense_hdr
.sense_key
== RECOVERED_ERROR
) &&
746 (!cmdstatp
->remainder_valid
||
747 cmdstatp
->uremainder64
== 0)) { /* All written at EOM early warning */
749 (STp
->buffer
)->buffer_bytes
= 0;
750 if (STps
->drv_block
>= 0)
751 STps
->drv_block
+= blks
;
754 st_printk(KERN_ERR
, STp
, "Error on flush.\n");
755 STps
->drv_block
= (-1);
759 if (STps
->drv_block
>= 0)
760 STps
->drv_block
+= blks
;
762 (STp
->buffer
)->buffer_bytes
= 0;
764 st_release_request(SRpnt
);
771 /* Flush the tape buffer. The tape will be positioned correctly unless
772 seek_next is true. */
773 static int flush_buffer(struct scsi_tape
*STp
, int seek_next
)
775 int backspace
, result
;
776 struct st_buffer
*STbuffer
;
777 struct st_partstat
*STps
;
779 STbuffer
= STp
->buffer
;
782 * If there was a bus reset, block further access
785 if (STp
->pos_unknown
)
788 if (STp
->ready
!= ST_READY
)
790 STps
= &(STp
->ps
[STp
->partition
]);
791 if (STps
->rw
== ST_WRITING
) /* Writing */
792 return st_flush_write_buffer(STp
);
794 if (STp
->block_size
== 0)
797 backspace
= ((STp
->buffer
)->buffer_bytes
+
798 (STp
->buffer
)->read_pointer
) / STp
->block_size
-
799 ((STp
->buffer
)->read_pointer
+ STp
->block_size
- 1) /
801 (STp
->buffer
)->buffer_bytes
= 0;
802 (STp
->buffer
)->read_pointer
= 0;
805 if (STps
->eof
== ST_FM_HIT
) {
806 result
= cross_eof(STp
, 0); /* Back over the EOF hit */
808 STps
->eof
= ST_NOEOF
;
810 if (STps
->drv_file
>= 0)
815 if (!result
&& backspace
> 0)
816 result
= st_int_ioctl(STp
, MTBSR
, backspace
);
817 } else if (STps
->eof
== ST_FM_HIT
) {
818 if (STps
->drv_file
>= 0)
821 STps
->eof
= ST_NOEOF
;
827 /* Set the mode parameters */
828 static int set_mode_densblk(struct scsi_tape
* STp
, struct st_modedef
* STm
)
833 if (!STp
->density_changed
&&
834 STm
->default_density
>= 0 &&
835 STm
->default_density
!= STp
->density
) {
836 arg
= STm
->default_density
;
840 arg
<<= MT_ST_DENSITY_SHIFT
;
841 if (!STp
->blksize_changed
&&
842 STm
->default_blksize
>= 0 &&
843 STm
->default_blksize
!= STp
->block_size
) {
844 arg
|= STm
->default_blksize
;
847 arg
|= STp
->block_size
;
849 st_int_ioctl(STp
, SET_DENS_AND_BLK
, arg
)) {
850 st_printk(KERN_WARNING
, STp
,
851 "Can't set default block size to %d bytes "
853 STm
->default_blksize
, STm
->default_density
);
861 /* Lock or unlock the drive door. Don't use when st_request allocated. */
862 static int do_door_lock(struct scsi_tape
* STp
, int do_lock
)
866 DEBC_printk(STp
, "%socking drive door.\n", do_lock
? "L" : "Unl");
868 retval
= scsi_set_medium_removal(STp
->device
,
869 do_lock
? SCSI_REMOVAL_PREVENT
: SCSI_REMOVAL_ALLOW
);
871 STp
->door_locked
= do_lock
? ST_LOCKED_EXPLICIT
: ST_UNLOCKED
;
873 STp
->door_locked
= ST_LOCK_FAILS
;
878 /* Set the internal state after reset */
879 static void reset_state(struct scsi_tape
*STp
)
882 struct st_partstat
*STps
;
884 STp
->pos_unknown
= 0;
885 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
886 STps
= &(STp
->ps
[i
]);
888 STps
->eof
= ST_NOEOF
;
890 STps
->last_block_valid
= 0;
891 STps
->drv_block
= -1;
894 if (STp
->can_partitions
) {
895 STp
->partition
= find_partition(STp
);
896 if (STp
->partition
< 0)
898 STp
->new_partition
= STp
->partition
;
902 /* Test if the drive is ready. Returns either one of the codes below or a negative system
904 #define CHKRES_READY 0
905 #define CHKRES_NEW_SESSION 1
906 #define CHKRES_NOT_READY 2
907 #define CHKRES_NO_TAPE 3
909 #define MAX_ATTENTIONS 10
911 static int test_ready(struct scsi_tape
*STp
, int do_wait
)
913 int attentions
, waits
, max_wait
, scode
;
914 int retval
= CHKRES_READY
, new_session
= 0;
915 unsigned char cmd
[MAX_COMMAND_SIZE
];
916 struct st_request
*SRpnt
= NULL
;
917 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
919 max_wait
= do_wait
? ST_BLOCK_SECONDS
: 0;
921 for (attentions
=waits
=0; ; ) {
922 memset((void *) &cmd
[0], 0, MAX_COMMAND_SIZE
);
923 cmd
[0] = TEST_UNIT_READY
;
924 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, 0, DMA_NONE
,
925 STp
->long_timeout
, MAX_READY_RETRIES
, 1);
928 retval
= (STp
->buffer
)->syscall_result
;
932 if (cmdstatp
->have_sense
) {
934 scode
= cmdstatp
->sense_hdr
.sense_key
;
936 if (scode
== UNIT_ATTENTION
) { /* New media? */
938 if (attentions
< MAX_ATTENTIONS
) {
948 if (scode
== NOT_READY
) {
949 if (waits
< max_wait
) {
950 if (msleep_interruptible(1000)) {
958 if ((STp
->device
)->scsi_level
>= SCSI_2
&&
959 cmdstatp
->sense_hdr
.asc
== 0x3a) /* Check ASC */
960 retval
= CHKRES_NO_TAPE
;
962 retval
= CHKRES_NOT_READY
;
968 retval
= (STp
->buffer
)->syscall_result
;
970 retval
= new_session
? CHKRES_NEW_SESSION
: CHKRES_READY
;
975 st_release_request(SRpnt
);
980 /* See if the drive is ready and gather information about the tape. Return values:
981 < 0 negative error code from errno.h
983 1 drive not ready (possibly no tape)
985 static int check_tape(struct scsi_tape
*STp
, struct file
*filp
)
987 int i
, retval
, new_session
= 0, do_wait
;
988 unsigned char cmd
[MAX_COMMAND_SIZE
], saved_cleaning
;
989 unsigned short st_flags
= filp
->f_flags
;
990 struct st_request
*SRpnt
= NULL
;
991 struct st_modedef
*STm
;
992 struct st_partstat
*STps
;
993 struct inode
*inode
= file_inode(filp
);
994 int mode
= TAPE_MODE(inode
);
996 STp
->ready
= ST_READY
;
998 if (mode
!= STp
->current_mode
) {
999 DEBC_printk(STp
, "Mode change from %d to %d.\n",
1000 STp
->current_mode
, mode
);
1002 STp
->current_mode
= mode
;
1004 STm
= &(STp
->modes
[STp
->current_mode
]);
1006 saved_cleaning
= STp
->cleaning_req
;
1007 STp
->cleaning_req
= 0;
1009 do_wait
= ((filp
->f_flags
& O_NONBLOCK
) == 0);
1010 retval
= test_ready(STp
, do_wait
);
1015 if (retval
== CHKRES_NEW_SESSION
) {
1016 STp
->pos_unknown
= 0;
1017 STp
->partition
= STp
->new_partition
= 0;
1018 if (STp
->can_partitions
)
1019 STp
->nbr_partitions
= 1; /* This guess will be updated later
1021 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
1022 STps
= &(STp
->ps
[i
]);
1024 STps
->eof
= ST_NOEOF
;
1026 STps
->last_block_valid
= 0;
1027 STps
->drv_block
= 0;
1033 STp
->cleaning_req
|= saved_cleaning
;
1035 if (retval
== CHKRES_NOT_READY
|| retval
== CHKRES_NO_TAPE
) {
1036 if (retval
== CHKRES_NO_TAPE
)
1037 STp
->ready
= ST_NO_TAPE
;
1039 STp
->ready
= ST_NOT_READY
;
1041 STp
->density
= 0; /* Clear the erroneous "residue" */
1042 STp
->write_prot
= 0;
1043 STp
->block_size
= 0;
1044 STp
->ps
[0].drv_file
= STp
->ps
[0].drv_block
= (-1);
1045 STp
->partition
= STp
->new_partition
= 0;
1046 STp
->door_locked
= ST_UNLOCKED
;
1047 return CHKRES_NOT_READY
;
1051 if (STp
->omit_blklims
)
1052 STp
->min_block
= STp
->max_block
= (-1);
1054 memset((void *) &cmd
[0], 0, MAX_COMMAND_SIZE
);
1055 cmd
[0] = READ_BLOCK_LIMITS
;
1057 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, 6, DMA_FROM_DEVICE
,
1058 STp
->device
->request_queue
->rq_timeout
,
1059 MAX_READY_RETRIES
, 1);
1061 retval
= (STp
->buffer
)->syscall_result
;
1065 if (!SRpnt
->result
&& !STp
->buffer
->cmdstat
.have_sense
) {
1066 STp
->max_block
= ((STp
->buffer
)->b_data
[1] << 16) |
1067 ((STp
->buffer
)->b_data
[2] << 8) | (STp
->buffer
)->b_data
[3];
1068 STp
->min_block
= ((STp
->buffer
)->b_data
[4] << 8) |
1069 (STp
->buffer
)->b_data
[5];
1070 if ( DEB( debugging
|| ) !STp
->inited
)
1071 st_printk(KERN_INFO
, STp
,
1072 "Block limits %d - %d bytes.\n",
1073 STp
->min_block
, STp
->max_block
);
1075 STp
->min_block
= STp
->max_block
= (-1);
1076 DEBC_printk(STp
, "Can't read block limits.\n");
1080 memset((void *) &cmd
[0], 0, MAX_COMMAND_SIZE
);
1081 cmd
[0] = MODE_SENSE
;
1084 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, 12, DMA_FROM_DEVICE
,
1085 STp
->device
->request_queue
->rq_timeout
,
1086 MAX_READY_RETRIES
, 1);
1088 retval
= (STp
->buffer
)->syscall_result
;
1092 if ((STp
->buffer
)->syscall_result
!= 0) {
1093 DEBC_printk(STp
, "No Mode Sense.\n");
1094 STp
->block_size
= ST_DEFAULT_BLOCK
; /* Educated guess (?) */
1095 (STp
->buffer
)->syscall_result
= 0; /* Prevent error propagation */
1096 STp
->drv_write_prot
= 0;
1098 DEBC_printk(STp
,"Mode sense. Length %d, "
1099 "medium %x, WBS %x, BLL %d\n",
1100 (STp
->buffer
)->b_data
[0],
1101 (STp
->buffer
)->b_data
[1],
1102 (STp
->buffer
)->b_data
[2],
1103 (STp
->buffer
)->b_data
[3]);
1105 if ((STp
->buffer
)->b_data
[3] >= 8) {
1106 STp
->drv_buffer
= ((STp
->buffer
)->b_data
[2] >> 4) & 7;
1107 STp
->density
= (STp
->buffer
)->b_data
[4];
1108 STp
->block_size
= (STp
->buffer
)->b_data
[9] * 65536 +
1109 (STp
->buffer
)->b_data
[10] * 256 + (STp
->buffer
)->b_data
[11];
1110 DEBC_printk(STp
, "Density %x, tape length: %x, "
1113 (STp
->buffer
)->b_data
[5] * 65536 +
1114 (STp
->buffer
)->b_data
[6] * 256 +
1115 (STp
->buffer
)->b_data
[7],
1118 STp
->drv_write_prot
= ((STp
->buffer
)->b_data
[2] & 0x80) != 0;
1119 if (!STp
->drv_buffer
&& STp
->immediate_filemark
) {
1120 st_printk(KERN_WARNING
, STp
,
1121 "non-buffered tape: disabling "
1122 "writing immediate filemarks\n");
1123 STp
->immediate_filemark
= 0;
1126 st_release_request(SRpnt
);
1130 if (STp
->block_size
> 0)
1131 (STp
->buffer
)->buffer_blocks
=
1132 (STp
->buffer
)->buffer_size
/ STp
->block_size
;
1134 (STp
->buffer
)->buffer_blocks
= 1;
1135 (STp
->buffer
)->buffer_bytes
= (STp
->buffer
)->read_pointer
= 0;
1137 DEBC_printk(STp
, "Block size: %d, buffer size: %d (%d blocks).\n",
1138 STp
->block_size
, (STp
->buffer
)->buffer_size
,
1139 (STp
->buffer
)->buffer_blocks
);
1141 if (STp
->drv_write_prot
) {
1142 STp
->write_prot
= 1;
1144 DEBC_printk(STp
, "Write protected\n");
1147 ((st_flags
& O_ACCMODE
) == O_WRONLY
||
1148 (st_flags
& O_ACCMODE
) == O_RDWR
)) {
1154 if (STp
->can_partitions
&& STp
->nbr_partitions
< 1) {
1155 /* This code is reached when the device is opened for the first time
1156 after the driver has been initialized with tape in the drive and the
1157 partition support has been enabled. */
1158 DEBC_printk(STp
, "Updating partition number in status.\n");
1159 if ((STp
->partition
= find_partition(STp
)) < 0) {
1160 retval
= STp
->partition
;
1163 STp
->new_partition
= STp
->partition
;
1164 STp
->nbr_partitions
= 1; /* This guess will be updated when necessary */
1167 if (new_session
) { /* Change the drive parameters for the new mode */
1168 STp
->density_changed
= STp
->blksize_changed
= 0;
1169 STp
->compression_changed
= 0;
1170 if (!(STm
->defaults_for_writes
) &&
1171 (retval
= set_mode_densblk(STp
, STm
)) < 0)
1174 if (STp
->default_drvbuffer
!= 0xff) {
1175 if (st_int_ioctl(STp
, MTSETDRVBUFFER
, STp
->default_drvbuffer
))
1176 st_printk(KERN_WARNING
, STp
,
1177 "Can't set default drive "
1178 "buffering to %d.\n",
1179 STp
->default_drvbuffer
);
1183 return CHKRES_READY
;
1190 \f/* Open the device. Needs to take the BKL only because of incrementing the SCSI host
1192 static int st_open(struct inode
*inode
, struct file
*filp
)
1194 int i
, retval
= (-EIO
);
1196 struct scsi_tape
*STp
;
1197 struct st_partstat
*STps
;
1198 int dev
= TAPE_NR(inode
);
1201 * We really want to do nonseekable_open(inode, filp); here, but some
1202 * versions of tar incorrectly call lseek on tapes and bail out if that
1203 * fails. So we disallow pread() and pwrite(), but permit lseeks.
1205 filp
->f_mode
&= ~(FMODE_PREAD
| FMODE_PWRITE
);
1207 if (!(STp
= scsi_tape_get(dev
))) {
1211 filp
->private_data
= STp
;
1213 spin_lock(&st_use_lock
);
1215 spin_unlock(&st_use_lock
);
1217 DEBC_printk(STp
, "Device already in use.\n");
1222 spin_unlock(&st_use_lock
);
1223 STp
->rew_at_close
= STp
->autorew_dev
= (iminor(inode
) & 0x80) == 0;
1225 if (scsi_autopm_get_device(STp
->device
) < 0) {
1230 if (!scsi_block_when_processing_errors(STp
->device
)) {
1235 /* See that we have at least a one page buffer available */
1236 if (!enlarge_buffer(STp
->buffer
, PAGE_SIZE
, STp
->restr_dma
)) {
1237 st_printk(KERN_WARNING
, STp
,
1238 "Can't allocate one page tape buffer.\n");
1239 retval
= (-EOVERFLOW
);
1243 (STp
->buffer
)->cleared
= 0;
1244 (STp
->buffer
)->writing
= 0;
1245 (STp
->buffer
)->syscall_result
= 0;
1247 STp
->write_prot
= ((filp
->f_flags
& O_ACCMODE
) == O_RDONLY
);
1250 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
1251 STps
= &(STp
->ps
[i
]);
1254 STp
->try_dio_now
= STp
->try_dio
;
1255 STp
->recover_count
= 0;
1256 DEB( STp
->nbr_waits
= STp
->nbr_finished
= 0;
1257 STp
->nbr_requests
= STp
->nbr_dio
= STp
->nbr_pages
= 0; )
1259 retval
= check_tape(STp
, filp
);
1262 if ((filp
->f_flags
& O_NONBLOCK
) == 0 &&
1263 retval
!= CHKRES_READY
) {
1264 if (STp
->ready
== NO_TAPE
)
1265 retval
= (-ENOMEDIUM
);
1273 normalize_buffer(STp
->buffer
);
1274 spin_lock(&st_use_lock
);
1276 spin_unlock(&st_use_lock
);
1279 scsi_autopm_put_device(STp
->device
);
1285 /* Flush the tape buffer before close */
1286 static int st_flush(struct file
*filp
, fl_owner_t id
)
1288 int result
= 0, result2
;
1289 unsigned char cmd
[MAX_COMMAND_SIZE
];
1290 struct st_request
*SRpnt
;
1291 struct scsi_tape
*STp
= filp
->private_data
;
1292 struct st_modedef
*STm
= &(STp
->modes
[STp
->current_mode
]);
1293 struct st_partstat
*STps
= &(STp
->ps
[STp
->partition
]);
1295 if (file_count(filp
) > 1)
1298 if (STps
->rw
== ST_WRITING
&& !STp
->pos_unknown
) {
1299 result
= st_flush_write_buffer(STp
);
1300 if (result
!= 0 && result
!= (-ENOSPC
))
1304 if (STp
->can_partitions
&&
1305 (result2
= switch_partition(STp
)) < 0) {
1306 DEBC_printk(STp
, "switch_partition at close failed.\n");
1312 DEBC( if (STp
->nbr_requests
)
1313 st_printk(KERN_DEBUG
, STp
,
1314 "Number of r/w requests %d, dio used in %d, "
1315 "pages %d.\n", STp
->nbr_requests
, STp
->nbr_dio
,
1318 if (STps
->rw
== ST_WRITING
&& !STp
->pos_unknown
) {
1319 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
1322 DEBC_printk(STp
, "Async write waits %d, finished %d.\n",
1323 STp
->nbr_waits
, STp
->nbr_finished
);
1325 memset(cmd
, 0, MAX_COMMAND_SIZE
);
1326 cmd
[0] = WRITE_FILEMARKS
;
1327 if (STp
->immediate_filemark
)
1329 cmd
[4] = 1 + STp
->two_fm
;
1331 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, 0, DMA_NONE
,
1332 STp
->device
->request_queue
->rq_timeout
,
1333 MAX_WRITE_RETRIES
, 1);
1335 result
= (STp
->buffer
)->syscall_result
;
1339 if (STp
->buffer
->syscall_result
== 0 ||
1340 (cmdstatp
->have_sense
&& !cmdstatp
->deferred
&&
1341 (cmdstatp
->flags
& SENSE_EOM
) &&
1342 (cmdstatp
->sense_hdr
.sense_key
== NO_SENSE
||
1343 cmdstatp
->sense_hdr
.sense_key
== RECOVERED_ERROR
) &&
1344 (!cmdstatp
->remainder_valid
|| cmdstatp
->uremainder64
== 0))) {
1345 /* Write successful at EOM */
1346 st_release_request(SRpnt
);
1348 if (STps
->drv_file
>= 0)
1350 STps
->drv_block
= 0;
1355 else { /* Write error */
1356 st_release_request(SRpnt
);
1358 st_printk(KERN_ERR
, STp
,
1359 "Error on write filemark.\n");
1364 DEBC_printk(STp
, "Buffer flushed, %d EOF(s) written\n", cmd
[4]);
1365 } else if (!STp
->rew_at_close
) {
1366 STps
= &(STp
->ps
[STp
->partition
]);
1367 if (!STm
->sysv
|| STps
->rw
!= ST_READING
) {
1369 result
= flush_buffer(STp
, 0);
1370 else if (STps
->eof
== ST_FM_HIT
) {
1371 result
= cross_eof(STp
, 0);
1373 if (STps
->drv_file
>= 0)
1375 STps
->drv_block
= 0;
1378 STps
->eof
= ST_NOEOF
;
1380 } else if ((STps
->eof
== ST_NOEOF
&&
1381 !(result
= cross_eof(STp
, 1))) ||
1382 STps
->eof
== ST_FM_HIT
) {
1383 if (STps
->drv_file
>= 0)
1385 STps
->drv_block
= 0;
1391 if (STp
->rew_at_close
) {
1392 result2
= st_int_ioctl(STp
, MTREW
, 1);
1400 /* Close the device and release it. BKL is not needed: this is the only thread
1401 accessing this tape. */
1402 static int st_release(struct inode
*inode
, struct file
*filp
)
1405 struct scsi_tape
*STp
= filp
->private_data
;
1407 if (STp
->door_locked
== ST_LOCKED_AUTO
)
1408 do_door_lock(STp
, 0);
1410 normalize_buffer(STp
->buffer
);
1411 spin_lock(&st_use_lock
);
1413 spin_unlock(&st_use_lock
);
1414 scsi_autopm_put_device(STp
->device
);
1420 /* The checks common to both reading and writing */
1421 static ssize_t
rw_checks(struct scsi_tape
*STp
, struct file
*filp
, size_t count
)
1426 * If we are in the middle of error recovery, don't let anyone
1427 * else try and use this device. Also, if error recovery fails, it
1428 * may try and take the device offline, in which case all further
1429 * access to the device is prohibited.
1431 if (!scsi_block_when_processing_errors(STp
->device
)) {
1436 if (STp
->ready
!= ST_READY
) {
1437 if (STp
->ready
== ST_NO_TAPE
)
1438 retval
= (-ENOMEDIUM
);
1444 if (! STp
->modes
[STp
->current_mode
].defined
) {
1451 * If there was a bus reset, block further access
1454 if (STp
->pos_unknown
) {
1464 st_printk(ST_DEB_MSG
, STp
,
1465 "Incorrect device.\n");
1470 if (STp
->can_partitions
&&
1471 (retval
= switch_partition(STp
)) < 0)
1474 if (STp
->block_size
== 0 && STp
->max_block
> 0 &&
1475 (count
< STp
->min_block
|| count
> STp
->max_block
)) {
1480 if (STp
->do_auto_lock
&& STp
->door_locked
== ST_UNLOCKED
&&
1481 !do_door_lock(STp
, 1))
1482 STp
->door_locked
= ST_LOCKED_AUTO
;
1489 static int setup_buffering(struct scsi_tape
*STp
, const char __user
*buf
,
1490 size_t count
, int is_read
)
1492 int i
, bufsize
, retval
= 0;
1493 struct st_buffer
*STbp
= STp
->buffer
;
1496 i
= STp
->try_dio_now
&& try_rdio
;
1498 i
= STp
->try_dio_now
&& try_wdio
;
1500 if (i
&& ((unsigned long)buf
& queue_dma_alignment(
1501 STp
->device
->request_queue
)) == 0) {
1502 i
= sgl_map_user_pages(STbp
, STbp
->use_sg
, (unsigned long)buf
,
1503 count
, (is_read
? READ
: WRITE
));
1506 STbp
->buffer_bytes
= 0; /* can be used as transfer counter */
1509 STbp
->do_dio
= 0; /* fall back to buffering with any error */
1510 STbp
->sg_segs
= STbp
->do_dio
;
1514 STp
->nbr_pages
+= STbp
->do_dio
;
1519 DEB( STp
->nbr_requests
++; )
1521 if (!STbp
->do_dio
) {
1522 if (STp
->block_size
)
1523 bufsize
= STp
->block_size
> st_fixed_buffer_size
?
1524 STp
->block_size
: st_fixed_buffer_size
;
1527 /* Make sure that data from previous user is not leaked even if
1528 HBA does not return correct residual */
1529 if (is_read
&& STp
->sili
&& !STbp
->cleared
)
1533 if (bufsize
> STbp
->buffer_size
&&
1534 !enlarge_buffer(STbp
, bufsize
, STp
->restr_dma
)) {
1535 st_printk(KERN_WARNING
, STp
,
1536 "Can't allocate %d byte tape buffer.\n",
1538 retval
= (-EOVERFLOW
);
1541 if (STp
->block_size
)
1542 STbp
->buffer_blocks
= bufsize
/ STp
->block_size
;
1550 /* Can be called more than once after each setup_buffer() */
1551 static void release_buffering(struct scsi_tape
*STp
, int is_read
)
1553 struct st_buffer
*STbp
;
1557 sgl_unmap_user_pages(STbp
, STbp
->do_dio
, is_read
);
1566 st_write(struct file
*filp
, const char __user
*buf
, size_t count
, loff_t
* ppos
)
1569 ssize_t i
, do_count
, blks
, transfer
;
1571 int undone
, retry_eot
= 0, scode
;
1573 unsigned char cmd
[MAX_COMMAND_SIZE
];
1574 const char __user
*b_point
;
1575 struct st_request
*SRpnt
= NULL
;
1576 struct scsi_tape
*STp
= filp
->private_data
;
1577 struct st_modedef
*STm
;
1578 struct st_partstat
*STps
;
1579 struct st_buffer
*STbp
;
1581 if (mutex_lock_interruptible(&STp
->lock
))
1582 return -ERESTARTSYS
;
1584 retval
= rw_checks(STp
, filp
, count
);
1585 if (retval
|| count
== 0)
1588 /* Write must be integral number of blocks */
1589 if (STp
->block_size
!= 0 && (count
% STp
->block_size
) != 0) {
1590 st_printk(KERN_WARNING
, STp
,
1591 "Write not multiple of tape block size.\n");
1596 STm
= &(STp
->modes
[STp
->current_mode
]);
1597 STps
= &(STp
->ps
[STp
->partition
]);
1599 if (STp
->write_prot
) {
1605 if (STps
->rw
== ST_READING
) {
1606 retval
= flush_buffer(STp
, 0);
1609 STps
->rw
= ST_WRITING
;
1610 } else if (STps
->rw
!= ST_WRITING
&&
1611 STps
->drv_file
== 0 && STps
->drv_block
== 0) {
1612 if ((retval
= set_mode_densblk(STp
, STm
)) < 0)
1614 if (STm
->default_compression
!= ST_DONT_TOUCH
&&
1615 !(STp
->compression_changed
)) {
1616 if (st_compression(STp
, (STm
->default_compression
== ST_YES
))) {
1617 st_printk(KERN_WARNING
, STp
,
1618 "Can't set default compression.\n");
1619 if (modes_defined
) {
1628 i
= write_behind_check(STp
);
1631 STps
->eof
= ST_EOM_OK
;
1633 STps
->eof
= ST_EOM_ERROR
;
1636 if (STps
->eof
== ST_EOM_OK
) {
1637 STps
->eof
= ST_EOD_1
; /* allow next write */
1641 else if (STps
->eof
== ST_EOM_ERROR
) {
1646 /* Check the buffer readability in cases where copy_user might catch
1647 the problems after some tape movement. */
1648 if (STp
->block_size
!= 0 &&
1650 (copy_from_user(&i
, buf
, 1) != 0 ||
1651 copy_from_user(&i
, buf
+ count
- 1, 1) != 0)) {
1656 retval
= setup_buffering(STp
, buf
, count
, 0);
1662 memset(cmd
, 0, MAX_COMMAND_SIZE
);
1664 cmd
[1] = (STp
->block_size
!= 0);
1666 STps
->rw
= ST_WRITING
;
1669 while (count
> 0 && !retry_eot
) {
1675 if (STp
->block_size
== 0)
1678 do_count
= STbp
->buffer_blocks
* STp
->block_size
-
1680 if (do_count
> count
)
1684 i
= append_to_buffer(b_point
, STbp
, do_count
);
1691 b_point
+= do_count
;
1693 async_write
= STp
->block_size
== 0 && !STbp
->do_dio
&&
1694 STm
->do_async_writes
&& STps
->eof
< ST_EOM_OK
;
1696 if (STp
->block_size
!= 0 && STm
->do_buffer_writes
&&
1697 !(STp
->try_dio_now
&& try_wdio
) && STps
->eof
< ST_EOM_OK
&&
1698 STbp
->buffer_bytes
< STbp
->buffer_size
) {
1700 /* Don't write a buffer that is not full enough. */
1701 if (!async_write
&& count
== 0)
1706 if (STp
->block_size
== 0)
1707 blks
= transfer
= do_count
;
1710 blks
= STbp
->buffer_bytes
;
1713 blks
/= STp
->block_size
;
1714 transfer
= blks
* STp
->block_size
;
1716 cmd
[2] = blks
>> 16;
1720 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, transfer
, DMA_TO_DEVICE
,
1721 STp
->device
->request_queue
->rq_timeout
,
1722 MAX_WRITE_RETRIES
, !async_write
);
1724 retval
= STbp
->syscall_result
;
1727 if (async_write
&& !STbp
->syscall_result
) {
1728 STbp
->writing
= transfer
;
1729 STp
->dirty
= !(STbp
->writing
==
1730 STbp
->buffer_bytes
);
1731 SRpnt
= NULL
; /* Prevent releasing this request! */
1732 DEB( STp
->write_pending
= 1; )
1736 if (STbp
->syscall_result
!= 0) {
1737 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
1739 DEBC_printk(STp
, "Error on write:\n");
1740 if (cmdstatp
->have_sense
&& (cmdstatp
->flags
& SENSE_EOM
)) {
1741 scode
= cmdstatp
->sense_hdr
.sense_key
;
1742 if (cmdstatp
->remainder_valid
)
1743 undone
= (int)cmdstatp
->uremainder64
;
1744 else if (STp
->block_size
== 0 &&
1745 scode
== VOLUME_OVERFLOW
)
1749 if (STp
->block_size
!= 0)
1750 undone
*= STp
->block_size
;
1751 if (undone
<= do_count
) {
1752 /* Only data from this write is not written */
1756 if (STp
->block_size
)
1757 blks
= (transfer
- undone
) / STp
->block_size
;
1758 STps
->eof
= ST_EOM_OK
;
1759 /* Continue in fixed block mode if all written
1760 in this request but still something left to write
1761 (retval left to zero)
1763 if (STp
->block_size
== 0 ||
1764 undone
> 0 || count
== 0)
1765 retval
= (-ENOSPC
); /* EOM within current request */
1766 DEBC_printk(STp
, "EOM with %d "
1767 "bytes unwritten.\n",
1770 /* EOT within data buffered earlier (possible only
1771 in fixed block mode without direct i/o) */
1772 if (!retry_eot
&& !cmdstatp
->deferred
&&
1773 (scode
== NO_SENSE
|| scode
== RECOVERED_ERROR
)) {
1774 move_buffer_data(STp
->buffer
, transfer
- undone
);
1776 if (STps
->drv_block
>= 0) {
1777 STps
->drv_block
+= (transfer
- undone
) /
1780 STps
->eof
= ST_EOM_OK
;
1781 DEBC_printk(STp
, "Retry "
1784 STp
->buffer
->buffer_bytes
);
1788 /* Either error within data buffered by driver or
1791 blks
= do_count
= 0;
1792 STps
->eof
= ST_EOM_ERROR
;
1793 STps
->drv_block
= (-1); /* Too cautious? */
1794 retval
= (-EIO
); /* EOM for old data */
1795 DEBC_printk(STp
, "EOM with "
1801 STps
->drv_block
= (-1); /* Too cautious? */
1802 retval
= STbp
->syscall_result
;
1807 if (STps
->drv_block
>= 0) {
1808 if (STp
->block_size
== 0)
1809 STps
->drv_block
+= (do_count
> 0);
1811 STps
->drv_block
+= blks
;
1814 STbp
->buffer_bytes
= 0;
1817 if (retval
|| retry_eot
) {
1819 retval
= total
- count
;
1824 if (STps
->eof
== ST_EOD_1
)
1825 STps
->eof
= ST_EOM_OK
;
1826 else if (STps
->eof
!= ST_EOM_OK
)
1827 STps
->eof
= ST_NOEOF
;
1828 retval
= total
- count
;
1832 st_release_request(SRpnt
);
1833 release_buffering(STp
, 0);
1834 mutex_unlock(&STp
->lock
);
1839 /* Read data from the tape. Returns zero in the normal case, one if the
1840 eof status has changed, and the negative error code in case of a
1841 fatal error. Otherwise updates the buffer and the eof state.
1843 Does release user buffer mapping if it is set.
1845 static long read_tape(struct scsi_tape
*STp
, long count
,
1846 struct st_request
** aSRpnt
)
1848 int transfer
, blks
, bytes
;
1849 unsigned char cmd
[MAX_COMMAND_SIZE
];
1850 struct st_request
*SRpnt
;
1851 struct st_modedef
*STm
;
1852 struct st_partstat
*STps
;
1853 struct st_buffer
*STbp
;
1859 STm
= &(STp
->modes
[STp
->current_mode
]);
1860 STps
= &(STp
->ps
[STp
->partition
]);
1861 if (STps
->eof
== ST_FM_HIT
)
1865 if (STp
->block_size
== 0)
1866 blks
= bytes
= count
;
1868 if (!(STp
->try_dio_now
&& try_rdio
) && STm
->do_read_ahead
) {
1869 blks
= (STp
->buffer
)->buffer_blocks
;
1870 bytes
= blks
* STp
->block_size
;
1873 if (!STbp
->do_dio
&& bytes
> (STp
->buffer
)->buffer_size
)
1874 bytes
= (STp
->buffer
)->buffer_size
;
1875 blks
= bytes
/ STp
->block_size
;
1876 bytes
= blks
* STp
->block_size
;
1880 memset(cmd
, 0, MAX_COMMAND_SIZE
);
1882 cmd
[1] = (STp
->block_size
!= 0);
1883 if (!cmd
[1] && STp
->sili
)
1885 cmd
[2] = blks
>> 16;
1890 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, bytes
, DMA_FROM_DEVICE
,
1891 STp
->device
->request_queue
->rq_timeout
,
1893 release_buffering(STp
, 1);
1896 return STbp
->syscall_result
;
1898 STbp
->read_pointer
= 0;
1901 /* Something to check */
1902 if (STbp
->syscall_result
) {
1903 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
1907 "Sense: %2x %2x %2x %2x %2x %2x %2x %2x\n",
1908 SRpnt
->sense
[0], SRpnt
->sense
[1],
1909 SRpnt
->sense
[2], SRpnt
->sense
[3],
1910 SRpnt
->sense
[4], SRpnt
->sense
[5],
1911 SRpnt
->sense
[6], SRpnt
->sense
[7]);
1912 if (cmdstatp
->have_sense
) {
1914 if (cmdstatp
->sense_hdr
.sense_key
== BLANK_CHECK
)
1915 cmdstatp
->flags
&= 0xcf; /* No need for EOM in this case */
1917 if (cmdstatp
->flags
!= 0) { /* EOF, EOM, or ILI */
1918 /* Compute the residual count */
1919 if (cmdstatp
->remainder_valid
)
1920 transfer
= (int)cmdstatp
->uremainder64
;
1923 if (STp
->block_size
== 0 &&
1924 cmdstatp
->sense_hdr
.sense_key
== MEDIUM_ERROR
)
1927 if (cmdstatp
->flags
& SENSE_ILI
) { /* ILI */
1928 if (STp
->block_size
== 0 &&
1930 st_printk(KERN_NOTICE
, STp
,
1931 "Failed to read %d "
1932 "byte block with %d "
1936 if (STps
->drv_block
>= 0)
1937 STps
->drv_block
+= 1;
1938 STbp
->buffer_bytes
= 0;
1940 } else if (STp
->block_size
== 0) {
1941 STbp
->buffer_bytes
= bytes
- transfer
;
1943 st_release_request(SRpnt
);
1944 SRpnt
= *aSRpnt
= NULL
;
1945 if (transfer
== blks
) { /* We did not get anything, error */
1946 st_printk(KERN_NOTICE
, STp
,
1949 if (STps
->drv_block
>= 0)
1950 STps
->drv_block
+= blks
- transfer
+ 1;
1951 st_int_ioctl(STp
, MTBSR
, 1);
1954 /* We have some data, deliver it */
1955 STbp
->buffer_bytes
= (blks
- transfer
) *
1957 DEBC_printk(STp
, "ILI but "
1961 STbp
->buffer_bytes
);
1962 if (STps
->drv_block
>= 0)
1963 STps
->drv_block
+= 1;
1964 if (st_int_ioctl(STp
, MTBSR
, 1))
1967 } else if (cmdstatp
->flags
& SENSE_FMK
) { /* FM overrides EOM */
1968 if (STps
->eof
!= ST_FM_HIT
)
1969 STps
->eof
= ST_FM_HIT
;
1971 STps
->eof
= ST_EOD_2
;
1972 if (STp
->block_size
== 0)
1973 STbp
->buffer_bytes
= 0;
1975 STbp
->buffer_bytes
=
1976 bytes
- transfer
* STp
->block_size
;
1977 DEBC_printk(STp
, "EOF detected (%d "
1979 STbp
->buffer_bytes
);
1980 } else if (cmdstatp
->flags
& SENSE_EOM
) {
1981 if (STps
->eof
== ST_FM
)
1982 STps
->eof
= ST_EOD_1
;
1984 STps
->eof
= ST_EOM_OK
;
1985 if (STp
->block_size
== 0)
1986 STbp
->buffer_bytes
= bytes
- transfer
;
1988 STbp
->buffer_bytes
=
1989 bytes
- transfer
* STp
->block_size
;
1991 DEBC_printk(STp
, "EOM detected (%d "
1993 STbp
->buffer_bytes
);
1996 /* end of EOF, EOM, ILI test */
1997 else { /* nonzero sense key */
1998 DEBC_printk(STp
, "Tape error while reading.\n");
1999 STps
->drv_block
= (-1);
2000 if (STps
->eof
== ST_FM
&&
2001 cmdstatp
->sense_hdr
.sense_key
== BLANK_CHECK
) {
2002 DEBC_printk(STp
, "Zero returned for "
2003 "first BLANK CHECK "
2005 STps
->eof
= ST_EOD_2
; /* First BLANK_CHECK after FM */
2006 } else /* Some other extended sense code */
2010 if (STbp
->buffer_bytes
< 0) /* Caused by bogus sense data */
2011 STbp
->buffer_bytes
= 0;
2013 /* End of extended sense test */
2014 else { /* Non-extended sense */
2015 retval
= STbp
->syscall_result
;
2019 /* End of error handling */
2020 else { /* Read successful */
2021 STbp
->buffer_bytes
= bytes
;
2022 if (STp
->sili
) /* In fixed block mode residual is always zero here */
2023 STbp
->buffer_bytes
-= STp
->buffer
->cmdstat
.residual
;
2026 if (STps
->drv_block
>= 0) {
2027 if (STp
->block_size
== 0)
2030 STps
->drv_block
+= STbp
->buffer_bytes
/ STp
->block_size
;
2038 st_read(struct file
*filp
, char __user
*buf
, size_t count
, loff_t
* ppos
)
2042 ssize_t i
, transfer
;
2043 int special
, do_dio
= 0;
2044 struct st_request
*SRpnt
= NULL
;
2045 struct scsi_tape
*STp
= filp
->private_data
;
2046 struct st_modedef
*STm
;
2047 struct st_partstat
*STps
;
2048 struct st_buffer
*STbp
= STp
->buffer
;
2050 if (mutex_lock_interruptible(&STp
->lock
))
2051 return -ERESTARTSYS
;
2053 retval
= rw_checks(STp
, filp
, count
);
2054 if (retval
|| count
== 0)
2057 STm
= &(STp
->modes
[STp
->current_mode
]);
2058 if (STp
->block_size
!= 0 && (count
% STp
->block_size
) != 0) {
2059 if (!STm
->do_read_ahead
) {
2060 retval
= (-EINVAL
); /* Read must be integral number of blocks */
2063 STp
->try_dio_now
= 0; /* Direct i/o can't handle split blocks */
2066 STps
= &(STp
->ps
[STp
->partition
]);
2067 if (STps
->rw
== ST_WRITING
) {
2068 retval
= flush_buffer(STp
, 0);
2071 STps
->rw
= ST_READING
;
2074 if (debugging
&& STps
->eof
!= ST_NOEOF
)
2075 st_printk(ST_DEB_MSG
, STp
,
2076 "EOF/EOM flag up (%d). Bytes %d\n",
2077 STps
->eof
, STbp
->buffer_bytes
);
2080 retval
= setup_buffering(STp
, buf
, count
, 1);
2083 do_dio
= STbp
->do_dio
;
2085 if (STbp
->buffer_bytes
== 0 &&
2086 STps
->eof
>= ST_EOD_1
) {
2087 if (STps
->eof
< ST_EOD
) {
2092 retval
= (-EIO
); /* EOM or Blank Check */
2097 /* Check the buffer writability before any tape movement. Don't alter
2099 if (copy_from_user(&i
, buf
, 1) != 0 ||
2100 copy_to_user(buf
, &i
, 1) != 0 ||
2101 copy_from_user(&i
, buf
+ count
- 1, 1) != 0 ||
2102 copy_to_user(buf
+ count
- 1, &i
, 1) != 0) {
2108 STps
->rw
= ST_READING
;
2111 /* Loop until enough data in buffer or a special condition found */
2112 for (total
= 0, special
= 0; total
< count
&& !special
;) {
2114 /* Get new data if the buffer is empty */
2115 if (STbp
->buffer_bytes
== 0) {
2116 special
= read_tape(STp
, count
- total
, &SRpnt
);
2117 if (special
< 0) { /* No need to continue read */
2123 /* Move the data from driver buffer to user buffer */
2124 if (STbp
->buffer_bytes
> 0) {
2126 if (debugging
&& STps
->eof
!= ST_NOEOF
)
2127 st_printk(ST_DEB_MSG
, STp
,
2128 "EOF up (%d). Left %d, needed %d.\n",
2129 STps
->eof
, STbp
->buffer_bytes
,
2130 (int)(count
- total
));
2132 transfer
= STbp
->buffer_bytes
< count
- total
?
2133 STbp
->buffer_bytes
: count
- total
;
2135 i
= from_buffer(STbp
, buf
, transfer
);
2145 if (STp
->block_size
== 0)
2146 break; /* Read only one variable length block */
2148 } /* for (total = 0, special = 0;
2149 total < count && !special; ) */
2151 /* Change the eof state if no data from tape or buffer */
2153 if (STps
->eof
== ST_FM_HIT
) {
2155 STps
->drv_block
= 0;
2156 if (STps
->drv_file
>= 0)
2158 } else if (STps
->eof
== ST_EOD_1
) {
2159 STps
->eof
= ST_EOD_2
;
2160 STps
->drv_block
= 0;
2161 if (STps
->drv_file
>= 0)
2163 } else if (STps
->eof
== ST_EOD_2
)
2165 } else if (STps
->eof
== ST_FM
)
2166 STps
->eof
= ST_NOEOF
;
2170 if (SRpnt
!= NULL
) {
2171 st_release_request(SRpnt
);
2175 release_buffering(STp
, 1);
2176 STbp
->buffer_bytes
= 0;
2178 mutex_unlock(&STp
->lock
);
2186 /* Set the driver options */
2187 static void st_log_options(struct scsi_tape
* STp
, struct st_modedef
* STm
)
2190 st_printk(KERN_INFO
, STp
,
2191 "Mode %d options: buffer writes: %d, "
2192 "async writes: %d, read ahead: %d\n",
2193 STp
->current_mode
, STm
->do_buffer_writes
,
2194 STm
->do_async_writes
, STm
->do_read_ahead
);
2195 st_printk(KERN_INFO
, STp
,
2196 " can bsr: %d, two FMs: %d, "
2197 "fast mteom: %d, auto lock: %d,\n",
2198 STp
->can_bsr
, STp
->two_fm
, STp
->fast_mteom
,
2200 st_printk(KERN_INFO
, STp
,
2201 " defs for wr: %d, no block limits: %d, "
2202 "partitions: %d, s2 log: %d\n",
2203 STm
->defaults_for_writes
, STp
->omit_blklims
,
2204 STp
->can_partitions
, STp
->scsi2_logical
);
2205 st_printk(KERN_INFO
, STp
,
2206 " sysv: %d nowait: %d sili: %d "
2207 "nowait_filemark: %d\n",
2208 STm
->sysv
, STp
->immediate
, STp
->sili
,
2209 STp
->immediate_filemark
);
2210 st_printk(KERN_INFO
, STp
, " debugging: %d\n", debugging
);
2216 static int st_set_options(struct scsi_tape
*STp
, long options
)
2220 struct st_modedef
*STm
;
2221 struct cdev
*cd0
, *cd1
;
2222 struct device
*d0
, *d1
;
2224 STm
= &(STp
->modes
[STp
->current_mode
]);
2225 if (!STm
->defined
) {
2226 cd0
= STm
->cdevs
[0];
2227 cd1
= STm
->cdevs
[1];
2230 memcpy(STm
, &(STp
->modes
[0]), sizeof(struct st_modedef
));
2231 STm
->cdevs
[0] = cd0
;
2232 STm
->cdevs
[1] = cd1
;
2236 DEBC_printk(STp
, "Initialized mode %d definition from mode 0\n",
2240 code
= options
& MT_ST_OPTIONS
;
2241 if (code
== MT_ST_BOOLEANS
) {
2242 STm
->do_buffer_writes
= (options
& MT_ST_BUFFER_WRITES
) != 0;
2243 STm
->do_async_writes
= (options
& MT_ST_ASYNC_WRITES
) != 0;
2244 STm
->defaults_for_writes
= (options
& MT_ST_DEF_WRITES
) != 0;
2245 STm
->do_read_ahead
= (options
& MT_ST_READ_AHEAD
) != 0;
2246 STp
->two_fm
= (options
& MT_ST_TWO_FM
) != 0;
2247 STp
->fast_mteom
= (options
& MT_ST_FAST_MTEOM
) != 0;
2248 STp
->do_auto_lock
= (options
& MT_ST_AUTO_LOCK
) != 0;
2249 STp
->can_bsr
= (options
& MT_ST_CAN_BSR
) != 0;
2250 STp
->omit_blklims
= (options
& MT_ST_NO_BLKLIMS
) != 0;
2251 if ((STp
->device
)->scsi_level
>= SCSI_2
)
2252 STp
->can_partitions
= (options
& MT_ST_CAN_PARTITIONS
) != 0;
2253 STp
->scsi2_logical
= (options
& MT_ST_SCSI2LOGICAL
) != 0;
2254 STp
->immediate
= (options
& MT_ST_NOWAIT
) != 0;
2255 STp
->immediate_filemark
= (options
& MT_ST_NOWAIT_EOF
) != 0;
2256 STm
->sysv
= (options
& MT_ST_SYSV
) != 0;
2257 STp
->sili
= (options
& MT_ST_SILI
) != 0;
2258 DEB( debugging
= (options
& MT_ST_DEBUGGING
) != 0;
2259 st_log_options(STp
, STm
); )
2260 } else if (code
== MT_ST_SETBOOLEANS
|| code
== MT_ST_CLEARBOOLEANS
) {
2261 value
= (code
== MT_ST_SETBOOLEANS
);
2262 if ((options
& MT_ST_BUFFER_WRITES
) != 0)
2263 STm
->do_buffer_writes
= value
;
2264 if ((options
& MT_ST_ASYNC_WRITES
) != 0)
2265 STm
->do_async_writes
= value
;
2266 if ((options
& MT_ST_DEF_WRITES
) != 0)
2267 STm
->defaults_for_writes
= value
;
2268 if ((options
& MT_ST_READ_AHEAD
) != 0)
2269 STm
->do_read_ahead
= value
;
2270 if ((options
& MT_ST_TWO_FM
) != 0)
2271 STp
->two_fm
= value
;
2272 if ((options
& MT_ST_FAST_MTEOM
) != 0)
2273 STp
->fast_mteom
= value
;
2274 if ((options
& MT_ST_AUTO_LOCK
) != 0)
2275 STp
->do_auto_lock
= value
;
2276 if ((options
& MT_ST_CAN_BSR
) != 0)
2277 STp
->can_bsr
= value
;
2278 if ((options
& MT_ST_NO_BLKLIMS
) != 0)
2279 STp
->omit_blklims
= value
;
2280 if ((STp
->device
)->scsi_level
>= SCSI_2
&&
2281 (options
& MT_ST_CAN_PARTITIONS
) != 0)
2282 STp
->can_partitions
= value
;
2283 if ((options
& MT_ST_SCSI2LOGICAL
) != 0)
2284 STp
->scsi2_logical
= value
;
2285 if ((options
& MT_ST_NOWAIT
) != 0)
2286 STp
->immediate
= value
;
2287 if ((options
& MT_ST_NOWAIT_EOF
) != 0)
2288 STp
->immediate_filemark
= value
;
2289 if ((options
& MT_ST_SYSV
) != 0)
2291 if ((options
& MT_ST_SILI
) != 0)
2294 if ((options
& MT_ST_DEBUGGING
) != 0)
2296 st_log_options(STp
, STm
); )
2297 } else if (code
== MT_ST_WRITE_THRESHOLD
) {
2298 /* Retained for compatibility */
2299 } else if (code
== MT_ST_DEF_BLKSIZE
) {
2300 value
= (options
& ~MT_ST_OPTIONS
);
2301 if (value
== ~MT_ST_OPTIONS
) {
2302 STm
->default_blksize
= (-1);
2303 DEBC_printk(STp
, "Default block size disabled.\n");
2305 STm
->default_blksize
= value
;
2306 DEBC_printk(STp
,"Default block size set to "
2307 "%d bytes.\n", STm
->default_blksize
);
2308 if (STp
->ready
== ST_READY
) {
2309 STp
->blksize_changed
= 0;
2310 set_mode_densblk(STp
, STm
);
2313 } else if (code
== MT_ST_TIMEOUTS
) {
2314 value
= (options
& ~MT_ST_OPTIONS
);
2315 if ((value
& MT_ST_SET_LONG_TIMEOUT
) != 0) {
2316 STp
->long_timeout
= (value
& ~MT_ST_SET_LONG_TIMEOUT
) * HZ
;
2317 DEBC_printk(STp
, "Long timeout set to %d seconds.\n",
2318 (value
& ~MT_ST_SET_LONG_TIMEOUT
));
2320 blk_queue_rq_timeout(STp
->device
->request_queue
,
2322 DEBC_printk(STp
, "Normal timeout set to %d seconds.\n",
2325 } else if (code
== MT_ST_SET_CLN
) {
2326 value
= (options
& ~MT_ST_OPTIONS
) & 0xff;
2328 (value
< EXTENDED_SENSE_START
||
2329 value
>= SCSI_SENSE_BUFFERSIZE
))
2331 STp
->cln_mode
= value
;
2332 STp
->cln_sense_mask
= (options
>> 8) & 0xff;
2333 STp
->cln_sense_value
= (options
>> 16) & 0xff;
2334 st_printk(KERN_INFO
, STp
,
2335 "Cleaning request mode %d, mask %02x, value %02x\n",
2336 value
, STp
->cln_sense_mask
, STp
->cln_sense_value
);
2337 } else if (code
== MT_ST_DEF_OPTIONS
) {
2338 code
= (options
& ~MT_ST_CLEAR_DEFAULT
);
2339 value
= (options
& MT_ST_CLEAR_DEFAULT
);
2340 if (code
== MT_ST_DEF_DENSITY
) {
2341 if (value
== MT_ST_CLEAR_DEFAULT
) {
2342 STm
->default_density
= (-1);
2344 "Density default disabled.\n");
2346 STm
->default_density
= value
& 0xff;
2347 DEBC_printk(STp
, "Density default set to %x\n",
2348 STm
->default_density
);
2349 if (STp
->ready
== ST_READY
) {
2350 STp
->density_changed
= 0;
2351 set_mode_densblk(STp
, STm
);
2354 } else if (code
== MT_ST_DEF_DRVBUFFER
) {
2355 if (value
== MT_ST_CLEAR_DEFAULT
) {
2356 STp
->default_drvbuffer
= 0xff;
2358 "Drive buffer default disabled.\n");
2360 STp
->default_drvbuffer
= value
& 7;
2362 "Drive buffer default set to %x\n",
2363 STp
->default_drvbuffer
);
2364 if (STp
->ready
== ST_READY
)
2365 st_int_ioctl(STp
, MTSETDRVBUFFER
, STp
->default_drvbuffer
);
2367 } else if (code
== MT_ST_DEF_COMPRESSION
) {
2368 if (value
== MT_ST_CLEAR_DEFAULT
) {
2369 STm
->default_compression
= ST_DONT_TOUCH
;
2371 "Compression default disabled.\n");
2373 if ((value
& 0xff00) != 0) {
2374 STp
->c_algo
= (value
& 0xff00) >> 8;
2375 DEBC_printk(STp
, "Compression "
2376 "algorithm set to 0x%x.\n",
2379 if ((value
& 0xff) != 0xff) {
2380 STm
->default_compression
= (value
& 1 ? ST_YES
: ST_NO
);
2381 DEBC_printk(STp
, "Compression default "
2384 if (STp
->ready
== ST_READY
) {
2385 STp
->compression_changed
= 0;
2386 st_compression(STp
, (STm
->default_compression
== ST_YES
));
2397 #define MODE_HEADER_LENGTH 4
2399 /* Mode header and page byte offsets */
2400 #define MH_OFF_DATA_LENGTH 0
2401 #define MH_OFF_MEDIUM_TYPE 1
2402 #define MH_OFF_DEV_SPECIFIC 2
2403 #define MH_OFF_BDESCS_LENGTH 3
2404 #define MP_OFF_PAGE_NBR 0
2405 #define MP_OFF_PAGE_LENGTH 1
2407 /* Mode header and page bit masks */
2408 #define MH_BIT_WP 0x80
2409 #define MP_MSK_PAGE_NBR 0x3f
2411 /* Don't return block descriptors */
2412 #define MODE_SENSE_OMIT_BDESCS 0x08
2414 #define MODE_SELECT_PAGE_FORMAT 0x10
2416 /* Read a mode page into the tape buffer. The block descriptors are included
2417 if incl_block_descs is true. The page control is ored to the page number
2418 parameter, if necessary. */
2419 static int read_mode_page(struct scsi_tape
*STp
, int page
, int omit_block_descs
)
2421 unsigned char cmd
[MAX_COMMAND_SIZE
];
2422 struct st_request
*SRpnt
;
2424 memset(cmd
, 0, MAX_COMMAND_SIZE
);
2425 cmd
[0] = MODE_SENSE
;
2426 if (omit_block_descs
)
2427 cmd
[1] = MODE_SENSE_OMIT_BDESCS
;
2431 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, cmd
[4], DMA_FROM_DEVICE
,
2432 STp
->device
->request_queue
->rq_timeout
, 0, 1);
2434 return (STp
->buffer
)->syscall_result
;
2436 st_release_request(SRpnt
);
2438 return 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
)
2447 unsigned char cmd
[MAX_COMMAND_SIZE
];
2448 struct st_request
*SRpnt
;
2451 memset(cmd
, 0, MAX_COMMAND_SIZE
);
2452 cmd
[0] = MODE_SELECT
;
2453 cmd
[1] = MODE_SELECT_PAGE_FORMAT
;
2454 pgo
= MODE_HEADER_LENGTH
+ (STp
->buffer
)->b_data
[MH_OFF_BDESCS_LENGTH
];
2455 cmd
[4] = pgo
+ (STp
->buffer
)->b_data
[pgo
+ MP_OFF_PAGE_LENGTH
] + 2;
2457 /* Clear reserved fields */
2458 (STp
->buffer
)->b_data
[MH_OFF_DATA_LENGTH
] = 0;
2459 (STp
->buffer
)->b_data
[MH_OFF_MEDIUM_TYPE
] = 0;
2460 (STp
->buffer
)->b_data
[MH_OFF_DEV_SPECIFIC
] &= ~MH_BIT_WP
;
2461 (STp
->buffer
)->b_data
[pgo
+ MP_OFF_PAGE_NBR
] &= MP_MSK_PAGE_NBR
;
2464 STp
->long_timeout
: STp
->device
->request_queue
->rq_timeout
;
2465 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, cmd
[4], DMA_TO_DEVICE
,
2468 return (STp
->buffer
)->syscall_result
;
2470 st_release_request(SRpnt
);
2472 return STp
->buffer
->syscall_result
;
2476 #define COMPRESSION_PAGE 0x0f
2477 #define COMPRESSION_PAGE_LENGTH 16
2479 #define CP_OFF_DCE_DCC 2
2480 #define CP_OFF_C_ALGO 7
2482 #define DCE_MASK 0x80
2483 #define DCC_MASK 0x40
2484 #define RED_MASK 0x60
2487 /* Control the compression with mode page 15. Algorithm not changed if zero.
2489 The block descriptors are read and written because Sony SDT-7000 does not
2490 work without this (suggestion from Michael Schaefer <Michael.Schaefer@dlr.de>).
2491 Including block descriptors should not cause any harm to other drives. */
2493 static int st_compression(struct scsi_tape
* STp
, int state
)
2496 int mpoffs
; /* Offset to mode page start */
2497 unsigned char *b_data
= (STp
->buffer
)->b_data
;
2499 if (STp
->ready
!= ST_READY
)
2502 /* Read the current page contents */
2503 retval
= read_mode_page(STp
, COMPRESSION_PAGE
, 0);
2505 DEBC_printk(STp
, "Compression mode page not supported.\n");
2509 mpoffs
= MODE_HEADER_LENGTH
+ b_data
[MH_OFF_BDESCS_LENGTH
];
2510 DEBC_printk(STp
, "Compression state is %d.\n",
2511 (b_data
[mpoffs
+ CP_OFF_DCE_DCC
] & DCE_MASK
? 1 : 0));
2513 /* Check if compression can be changed */
2514 if ((b_data
[mpoffs
+ CP_OFF_DCE_DCC
] & DCC_MASK
) == 0) {
2515 DEBC_printk(STp
, "Compression not supported.\n");
2521 b_data
[mpoffs
+ CP_OFF_DCE_DCC
] |= DCE_MASK
;
2522 if (STp
->c_algo
!= 0)
2523 b_data
[mpoffs
+ CP_OFF_C_ALGO
] = STp
->c_algo
;
2526 b_data
[mpoffs
+ CP_OFF_DCE_DCC
] &= ~DCE_MASK
;
2527 if (STp
->c_algo
!= 0)
2528 b_data
[mpoffs
+ CP_OFF_C_ALGO
] = 0; /* no compression */
2531 retval
= write_mode_page(STp
, COMPRESSION_PAGE
, 0);
2533 DEBC_printk(STp
, "Compression change failed.\n");
2536 DEBC_printk(STp
, "Compression state changed to %d.\n", state
);
2538 STp
->compression_changed
= 1;
2543 /* Process the load and unload commands (does unload if the load code is zero) */
2544 static int do_load_unload(struct scsi_tape
*STp
, struct file
*filp
, int load_code
)
2546 int retval
= (-EIO
), timeout
;
2547 unsigned char cmd
[MAX_COMMAND_SIZE
];
2548 struct st_partstat
*STps
;
2549 struct st_request
*SRpnt
;
2551 if (STp
->ready
!= ST_READY
&& !load_code
) {
2552 if (STp
->ready
== ST_NO_TAPE
)
2553 return (-ENOMEDIUM
);
2558 memset(cmd
, 0, MAX_COMMAND_SIZE
);
2559 cmd
[0] = START_STOP
;
2563 * If arg >= 1 && arg <= 6 Enhanced load/unload in HP C1553A
2565 if (load_code
>= 1 + MT_ST_HPLOADER_OFFSET
2566 && load_code
<= 6 + MT_ST_HPLOADER_OFFSET
) {
2567 DEBC_printk(STp
, " Enhanced %sload slot %2d.\n",
2568 (cmd
[4]) ? "" : "un",
2569 load_code
- MT_ST_HPLOADER_OFFSET
);
2570 cmd
[3] = load_code
- MT_ST_HPLOADER_OFFSET
; /* MediaID field of C1553A */
2572 if (STp
->immediate
) {
2573 cmd
[1] = 1; /* Don't wait for completion */
2574 timeout
= STp
->device
->request_queue
->rq_timeout
;
2577 timeout
= STp
->long_timeout
;
2581 st_printk(ST_DEB_MSG
, STp
, "Unloading tape.\n");
2583 st_printk(ST_DEB_MSG
, STp
, "Loading tape.\n");
2586 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, 0, DMA_NONE
,
2587 timeout
, MAX_RETRIES
, 1);
2589 return (STp
->buffer
)->syscall_result
;
2591 retval
= (STp
->buffer
)->syscall_result
;
2592 st_release_request(SRpnt
);
2594 if (!retval
) { /* SCSI command successful */
2597 STp
->rew_at_close
= 0;
2598 STp
->ready
= ST_NO_TAPE
;
2601 STp
->rew_at_close
= STp
->autorew_dev
;
2602 retval
= check_tape(STp
, filp
);
2608 STps
= &(STp
->ps
[STp
->partition
]);
2609 STps
->drv_file
= STps
->drv_block
= (-1);
2616 #define ST_DEB_FORWARD 0
2617 #define ST_DEB_BACKWARD 1
2618 static void deb_space_print(struct scsi_tape
*STp
, int direction
, char *units
, unsigned char *cmd
)
2625 sc
= cmd
[2] & 0x80 ? 0xff000000 : 0;
2626 sc
|= (cmd
[2] << 16) | (cmd
[3] << 8) | cmd
[4];
2629 st_printk(ST_DEB_MSG
, STp
, "Spacing tape %s over %d %s.\n",
2630 direction
? "backward" : "forward", sc
, units
);
2633 #define ST_DEB_FORWARD 0
2634 #define ST_DEB_BACKWARD 1
2635 static void deb_space_print(struct scsi_tape
*STp
, int direction
, char *units
, unsigned char *cmd
) {}
2639 /* Internal ioctl function */
2640 static int st_int_ioctl(struct scsi_tape
*STp
, unsigned int cmd_in
, unsigned long arg
)
2646 unsigned char cmd
[MAX_COMMAND_SIZE
];
2647 struct st_request
*SRpnt
;
2648 struct st_partstat
*STps
;
2649 int fileno
, blkno
, at_sm
, undone
;
2650 int datalen
= 0, direction
= DMA_NONE
;
2652 WARN_ON(STp
->buffer
->do_dio
!= 0);
2653 if (STp
->ready
!= ST_READY
) {
2654 if (STp
->ready
== ST_NO_TAPE
)
2655 return (-ENOMEDIUM
);
2659 timeout
= STp
->long_timeout
;
2660 STps
= &(STp
->ps
[STp
->partition
]);
2661 fileno
= STps
->drv_file
;
2662 blkno
= STps
->drv_block
;
2663 at_sm
= STps
->at_sm
;
2665 memset(cmd
, 0, MAX_COMMAND_SIZE
);
2668 chg_eof
= 0; /* Changed from the FSF after this */
2671 cmd
[1] = 0x01; /* Space FileMarks */
2672 cmd
[2] = (arg
>> 16);
2673 cmd
[3] = (arg
>> 8);
2675 deb_space_print(STp
, ST_DEB_FORWARD
, "filemarks", cmd
);
2679 at_sm
&= (arg
== 0);
2682 chg_eof
= 0; /* Changed from the FSF after this */
2685 cmd
[1] = 0x01; /* Space FileMarks */
2687 cmd
[2] = (ltmp
>> 16);
2688 cmd
[3] = (ltmp
>> 8);
2690 deb_space_print(STp
, ST_DEB_BACKWARD
, "filemarks", cmd
);
2693 blkno
= (-1); /* We can't know the block number */
2694 at_sm
&= (arg
== 0);
2698 cmd
[1] = 0x00; /* Space Blocks */
2699 cmd
[2] = (arg
>> 16);
2700 cmd
[3] = (arg
>> 8);
2702 deb_space_print(STp
, ST_DEB_FORWARD
, "blocks", cmd
);
2705 at_sm
&= (arg
== 0);
2709 cmd
[1] = 0x00; /* Space Blocks */
2711 cmd
[2] = (ltmp
>> 16);
2712 cmd
[3] = (ltmp
>> 8);
2714 deb_space_print(STp
, ST_DEB_BACKWARD
, "blocks", cmd
);
2717 at_sm
&= (arg
== 0);
2721 cmd
[1] = 0x04; /* Space Setmarks */
2722 cmd
[2] = (arg
>> 16);
2723 cmd
[3] = (arg
>> 8);
2725 deb_space_print(STp
, ST_DEB_FORWARD
, "setmarks", cmd
);
2727 blkno
= fileno
= (-1);
2733 cmd
[1] = 0x04; /* Space Setmarks */
2735 cmd
[2] = (ltmp
>> 16);
2736 cmd
[3] = (ltmp
>> 8);
2738 deb_space_print(STp
, ST_DEB_BACKWARD
, "setmarks", cmd
);
2740 blkno
= fileno
= (-1);
2747 if (STp
->write_prot
)
2749 cmd
[0] = WRITE_FILEMARKS
;
2750 if (cmd_in
== MTWSM
)
2752 if (cmd_in
== MTWEOFI
||
2753 (cmd_in
== MTWEOF
&& STp
->immediate_filemark
))
2755 cmd
[2] = (arg
>> 16);
2756 cmd
[3] = (arg
>> 8);
2758 timeout
= STp
->device
->request_queue
->rq_timeout
;
2760 if (cmd_in
!= MTWSM
)
2761 st_printk(ST_DEB_MSG
, STp
,
2762 "Writing %d filemarks.\n",
2767 st_printk(ST_DEB_MSG
, STp
,
2768 "Writing %d setmarks.\n",
2776 at_sm
= (cmd_in
== MTWSM
);
2779 cmd
[0] = REZERO_UNIT
;
2780 if (STp
->immediate
) {
2781 cmd
[1] = 1; /* Don't wait for completion */
2782 timeout
= STp
->device
->request_queue
->rq_timeout
;
2784 DEBC_printk(STp
, "Rewinding tape.\n");
2785 fileno
= blkno
= at_sm
= 0;
2788 DEBC_printk(STp
, "No op on tape.\n");
2789 return 0; /* Should do something ? */
2792 cmd
[0] = START_STOP
;
2793 if (STp
->immediate
) {
2794 cmd
[1] = 1; /* Don't wait for completion */
2795 timeout
= STp
->device
->request_queue
->rq_timeout
;
2798 DEBC_printk(STp
, "Retensioning tape.\n");
2799 fileno
= blkno
= at_sm
= 0;
2802 if (!STp
->fast_mteom
) {
2803 /* space to the end of tape */
2804 ioctl_result
= st_int_ioctl(STp
, MTFSF
, 0x7fffff);
2805 fileno
= STps
->drv_file
;
2806 if (STps
->eof
>= ST_EOD_1
)
2808 /* The next lines would hide the number of spaced FileMarks
2809 That's why I inserted the previous lines. I had no luck
2810 with detecting EOM with FSF, so we go now to EOM.
2816 DEBC_printk(STp
, "Spacing to end of recorded medium.\n");
2821 if (STp
->write_prot
)
2824 cmd
[1] = (arg
? 1 : 0); /* Long erase with non-zero argument */
2825 if (STp
->immediate
) {
2826 cmd
[1] |= 2; /* Don't wait for completion */
2827 timeout
= STp
->device
->request_queue
->rq_timeout
;
2830 timeout
= STp
->long_timeout
* 8;
2832 DEBC_printk(STp
, "Erasing tape.\n");
2833 fileno
= blkno
= at_sm
= 0;
2835 case MTSETBLK
: /* Set block length */
2836 case MTSETDENSITY
: /* Set tape density */
2837 case MTSETDRVBUFFER
: /* Set drive buffering */
2838 case SET_DENS_AND_BLK
: /* Set density and block size */
2840 if (STp
->dirty
|| (STp
->buffer
)->buffer_bytes
!= 0)
2841 return (-EIO
); /* Not allowed if data in buffer */
2842 if ((cmd_in
== MTSETBLK
|| cmd_in
== SET_DENS_AND_BLK
) &&
2843 (arg
& MT_ST_BLKSIZE_MASK
) != 0 &&
2844 STp
->max_block
> 0 &&
2845 ((arg
& MT_ST_BLKSIZE_MASK
) < STp
->min_block
||
2846 (arg
& MT_ST_BLKSIZE_MASK
) > STp
->max_block
)) {
2847 st_printk(KERN_WARNING
, STp
, "Illegal block size.\n");
2850 cmd
[0] = MODE_SELECT
;
2851 if ((STp
->use_pf
& USE_PF
))
2852 cmd
[1] = MODE_SELECT_PAGE_FORMAT
;
2853 cmd
[4] = datalen
= 12;
2854 direction
= DMA_TO_DEVICE
;
2856 memset((STp
->buffer
)->b_data
, 0, 12);
2857 if (cmd_in
== MTSETDRVBUFFER
)
2858 (STp
->buffer
)->b_data
[2] = (arg
& 7) << 4;
2860 (STp
->buffer
)->b_data
[2] =
2861 STp
->drv_buffer
<< 4;
2862 (STp
->buffer
)->b_data
[3] = 8; /* block descriptor length */
2863 if (cmd_in
== MTSETDENSITY
) {
2864 (STp
->buffer
)->b_data
[4] = arg
;
2865 STp
->density_changed
= 1; /* At least we tried ;-) */
2866 } else if (cmd_in
== SET_DENS_AND_BLK
)
2867 (STp
->buffer
)->b_data
[4] = arg
>> 24;
2869 (STp
->buffer
)->b_data
[4] = STp
->density
;
2870 if (cmd_in
== MTSETBLK
|| cmd_in
== SET_DENS_AND_BLK
) {
2871 ltmp
= arg
& MT_ST_BLKSIZE_MASK
;
2872 if (cmd_in
== MTSETBLK
)
2873 STp
->blksize_changed
= 1; /* At least we tried ;-) */
2875 ltmp
= STp
->block_size
;
2876 (STp
->buffer
)->b_data
[9] = (ltmp
>> 16);
2877 (STp
->buffer
)->b_data
[10] = (ltmp
>> 8);
2878 (STp
->buffer
)->b_data
[11] = ltmp
;
2879 timeout
= STp
->device
->request_queue
->rq_timeout
;
2881 if (cmd_in
== MTSETBLK
|| cmd_in
== SET_DENS_AND_BLK
)
2882 st_printk(ST_DEB_MSG
, STp
,
2883 "Setting block size to %d bytes.\n",
2884 (STp
->buffer
)->b_data
[9] * 65536 +
2885 (STp
->buffer
)->b_data
[10] * 256 +
2886 (STp
->buffer
)->b_data
[11]);
2887 if (cmd_in
== MTSETDENSITY
|| cmd_in
== SET_DENS_AND_BLK
)
2888 st_printk(ST_DEB_MSG
, STp
,
2889 "Setting density code to %x.\n",
2890 (STp
->buffer
)->b_data
[4]);
2891 if (cmd_in
== MTSETDRVBUFFER
)
2892 st_printk(ST_DEB_MSG
, STp
,
2893 "Setting drive buffer code to %d.\n",
2894 ((STp
->buffer
)->b_data
[2] >> 4) & 7);
2901 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, datalen
, direction
,
2902 timeout
, MAX_RETRIES
, 1);
2904 return (STp
->buffer
)->syscall_result
;
2906 ioctl_result
= (STp
->buffer
)->syscall_result
;
2908 if (!ioctl_result
) { /* SCSI command successful */
2909 st_release_request(SRpnt
);
2911 STps
->drv_block
= blkno
;
2912 STps
->drv_file
= fileno
;
2913 STps
->at_sm
= at_sm
;
2915 if (cmd_in
== MTBSFM
)
2916 ioctl_result
= st_int_ioctl(STp
, MTFSF
, 1);
2917 else if (cmd_in
== MTFSFM
)
2918 ioctl_result
= st_int_ioctl(STp
, MTBSF
, 1);
2920 if (cmd_in
== MTSETBLK
|| cmd_in
== SET_DENS_AND_BLK
) {
2921 STp
->block_size
= arg
& MT_ST_BLKSIZE_MASK
;
2922 if (STp
->block_size
!= 0) {
2923 (STp
->buffer
)->buffer_blocks
=
2924 (STp
->buffer
)->buffer_size
/ STp
->block_size
;
2926 (STp
->buffer
)->buffer_bytes
= (STp
->buffer
)->read_pointer
= 0;
2927 if (cmd_in
== SET_DENS_AND_BLK
)
2928 STp
->density
= arg
>> MT_ST_DENSITY_SHIFT
;
2929 } else if (cmd_in
== MTSETDRVBUFFER
)
2930 STp
->drv_buffer
= (arg
& 7);
2931 else if (cmd_in
== MTSETDENSITY
)
2934 if (cmd_in
== MTEOM
)
2936 else if (cmd_in
== MTFSF
)
2939 STps
->eof
= ST_NOEOF
;
2941 if (cmd_in
== MTWEOF
|| cmd_in
== MTWEOFI
)
2942 STps
->rw
= ST_IDLE
; /* prevent automatic WEOF at close */
2943 } else { /* SCSI command was not completely successful. Don't return
2944 from this block without releasing the SCSI command block! */
2945 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
2947 if (cmdstatp
->flags
& SENSE_EOM
) {
2948 if (cmd_in
!= MTBSF
&& cmd_in
!= MTBSFM
&&
2949 cmd_in
!= MTBSR
&& cmd_in
!= MTBSS
)
2950 STps
->eof
= ST_EOM_OK
;
2951 STps
->drv_block
= 0;
2954 if (cmdstatp
->remainder_valid
)
2955 undone
= (int)cmdstatp
->uremainder64
;
2959 if ((cmd_in
== MTWEOF
|| cmd_in
== MTWEOFI
) &&
2960 cmdstatp
->have_sense
&&
2961 (cmdstatp
->flags
& SENSE_EOM
)) {
2962 if (cmdstatp
->sense_hdr
.sense_key
== NO_SENSE
||
2963 cmdstatp
->sense_hdr
.sense_key
== RECOVERED_ERROR
) {
2964 ioctl_result
= 0; /* EOF(s) written successfully at EOM */
2965 STps
->eof
= ST_NOEOF
;
2966 } else { /* Writing EOF(s) failed */
2970 STps
->eof
= ST_NOEOF
;
2972 STps
->drv_file
= fileno
;
2973 } else if ((cmd_in
== MTFSF
) || (cmd_in
== MTFSFM
)) {
2975 STps
->drv_file
= fileno
- undone
;
2977 STps
->drv_file
= fileno
;
2978 STps
->drv_block
= -1;
2979 STps
->eof
= ST_NOEOF
;
2980 } else if ((cmd_in
== MTBSF
) || (cmd_in
== MTBSFM
)) {
2981 if (arg
> 0 && undone
< 0) /* Some drives get this wrong */
2983 if (STps
->drv_file
>= 0)
2984 STps
->drv_file
= fileno
+ undone
;
2985 STps
->drv_block
= 0;
2986 STps
->eof
= ST_NOEOF
;
2987 } else if (cmd_in
== MTFSR
) {
2988 if (cmdstatp
->flags
& SENSE_FMK
) { /* Hit filemark */
2989 if (STps
->drv_file
>= 0)
2991 STps
->drv_block
= 0;
2994 if (blkno
>= undone
)
2995 STps
->drv_block
= blkno
- undone
;
2997 STps
->drv_block
= (-1);
2998 STps
->eof
= ST_NOEOF
;
3000 } else if (cmd_in
== MTBSR
) {
3001 if (cmdstatp
->flags
& SENSE_FMK
) { /* Hit filemark */
3003 STps
->drv_block
= (-1);
3005 if (arg
> 0 && undone
< 0) /* Some drives get this wrong */
3007 if (STps
->drv_block
>= 0)
3008 STps
->drv_block
= blkno
+ undone
;
3010 STps
->eof
= ST_NOEOF
;
3011 } else if (cmd_in
== MTEOM
) {
3012 STps
->drv_file
= (-1);
3013 STps
->drv_block
= (-1);
3015 } else if (cmd_in
== MTSETBLK
||
3016 cmd_in
== MTSETDENSITY
||
3017 cmd_in
== MTSETDRVBUFFER
||
3018 cmd_in
== SET_DENS_AND_BLK
) {
3019 if (cmdstatp
->sense_hdr
.sense_key
== ILLEGAL_REQUEST
&&
3020 !(STp
->use_pf
& PF_TESTED
)) {
3021 /* Try the other possible state of Page Format if not
3023 STp
->use_pf
= (STp
->use_pf
^ USE_PF
) | PF_TESTED
;
3024 st_release_request(SRpnt
);
3026 return st_int_ioctl(STp
, cmd_in
, arg
);
3029 STps
->eof
= ST_NOEOF
;
3031 if (cmdstatp
->sense_hdr
.sense_key
== BLANK_CHECK
)
3034 st_release_request(SRpnt
);
3038 return ioctl_result
;
3042 /* Get the tape position. If bt == 2, arg points into a kernel space mt_loc
3045 static int get_location(struct scsi_tape
*STp
, unsigned int *block
, int *partition
,
3049 unsigned char scmd
[MAX_COMMAND_SIZE
];
3050 struct st_request
*SRpnt
;
3052 if (STp
->ready
!= ST_READY
)
3055 memset(scmd
, 0, MAX_COMMAND_SIZE
);
3056 if ((STp
->device
)->scsi_level
< SCSI_2
) {
3057 scmd
[0] = QFA_REQUEST_BLOCK
;
3060 scmd
[0] = READ_POSITION
;
3061 if (!logical
&& !STp
->scsi2_logical
)
3064 SRpnt
= st_do_scsi(NULL
, STp
, scmd
, 20, DMA_FROM_DEVICE
,
3065 STp
->device
->request_queue
->rq_timeout
,
3066 MAX_READY_RETRIES
, 1);
3068 return (STp
->buffer
)->syscall_result
;
3070 if ((STp
->buffer
)->syscall_result
!= 0 ||
3071 (STp
->device
->scsi_level
>= SCSI_2
&&
3072 ((STp
->buffer
)->b_data
[0] & 4) != 0)) {
3073 *block
= *partition
= 0;
3074 DEBC_printk(STp
, " Can't read tape position.\n");
3078 if ((STp
->device
)->scsi_level
< SCSI_2
) {
3079 *block
= ((STp
->buffer
)->b_data
[0] << 16)
3080 + ((STp
->buffer
)->b_data
[1] << 8)
3081 + (STp
->buffer
)->b_data
[2];
3084 *block
= ((STp
->buffer
)->b_data
[4] << 24)
3085 + ((STp
->buffer
)->b_data
[5] << 16)
3086 + ((STp
->buffer
)->b_data
[6] << 8)
3087 + (STp
->buffer
)->b_data
[7];
3088 *partition
= (STp
->buffer
)->b_data
[1];
3089 if (((STp
->buffer
)->b_data
[0] & 0x80) &&
3090 (STp
->buffer
)->b_data
[1] == 0) /* BOP of partition 0 */
3091 STp
->ps
[0].drv_block
= STp
->ps
[0].drv_file
= 0;
3093 DEBC_printk(STp
, "Got tape pos. blk %d part %d.\n",
3094 *block
, *partition
);
3096 st_release_request(SRpnt
);
3103 /* Set the tape block and partition. Negative partition means that only the
3104 block should be set in vendor specific way. */
3105 static int set_location(struct scsi_tape
*STp
, unsigned int block
, int partition
,
3108 struct st_partstat
*STps
;
3112 unsigned char scmd
[MAX_COMMAND_SIZE
];
3113 struct st_request
*SRpnt
;
3115 if (STp
->ready
!= ST_READY
)
3117 timeout
= STp
->long_timeout
;
3118 STps
= &(STp
->ps
[STp
->partition
]);
3120 DEBC_printk(STp
, "Setting block to %d and partition to %d.\n",
3122 DEB(if (partition
< 0)
3125 /* Update the location at the partition we are leaving */
3126 if ((!STp
->can_partitions
&& partition
!= 0) ||
3127 partition
>= ST_NBR_PARTITIONS
)
3129 if (partition
!= STp
->partition
) {
3130 if (get_location(STp
, &blk
, &p
, 1))
3131 STps
->last_block_valid
= 0;
3133 STps
->last_block_valid
= 1;
3134 STps
->last_block_visited
= blk
;
3135 DEBC_printk(STp
, "Visited block %d for "
3136 "partition %d saved.\n",
3137 blk
, STp
->partition
);
3141 memset(scmd
, 0, MAX_COMMAND_SIZE
);
3142 if ((STp
->device
)->scsi_level
< SCSI_2
) {
3143 scmd
[0] = QFA_SEEK_BLOCK
;
3144 scmd
[2] = (block
>> 16);
3145 scmd
[3] = (block
>> 8);
3150 scmd
[3] = (block
>> 24);
3151 scmd
[4] = (block
>> 16);
3152 scmd
[5] = (block
>> 8);
3154 if (!logical
&& !STp
->scsi2_logical
)
3156 if (STp
->partition
!= partition
) {
3158 scmd
[8] = partition
;
3159 DEBC_printk(STp
, "Trying to change partition "
3160 "from %d to %d\n", STp
->partition
,
3164 if (STp
->immediate
) {
3165 scmd
[1] |= 1; /* Don't wait for completion */
3166 timeout
= STp
->device
->request_queue
->rq_timeout
;
3169 SRpnt
= st_do_scsi(NULL
, STp
, scmd
, 0, DMA_NONE
,
3170 timeout
, MAX_READY_RETRIES
, 1);
3172 return (STp
->buffer
)->syscall_result
;
3174 STps
->drv_block
= STps
->drv_file
= (-1);
3175 STps
->eof
= ST_NOEOF
;
3176 if ((STp
->buffer
)->syscall_result
!= 0) {
3178 if (STp
->can_partitions
&&
3179 (STp
->device
)->scsi_level
>= SCSI_2
&&
3180 (p
= find_partition(STp
)) >= 0)
3183 if (STp
->can_partitions
) {
3184 STp
->partition
= partition
;
3185 STps
= &(STp
->ps
[partition
]);
3186 if (!STps
->last_block_valid
||
3187 STps
->last_block_visited
!= block
) {
3194 STps
->drv_block
= STps
->drv_file
= 0;
3198 st_release_request(SRpnt
);
3205 /* Find the current partition number for the drive status. Called from open and
3206 returns either partition number of negative error code. */
3207 static int find_partition(struct scsi_tape
*STp
)
3212 if ((i
= get_location(STp
, &block
, &partition
, 1)) < 0)
3214 if (partition
>= ST_NBR_PARTITIONS
)
3220 /* Change the partition if necessary */
3221 static int switch_partition(struct scsi_tape
*STp
)
3223 struct st_partstat
*STps
;
3225 if (STp
->partition
== STp
->new_partition
)
3227 STps
= &(STp
->ps
[STp
->new_partition
]);
3228 if (!STps
->last_block_valid
)
3229 STps
->last_block_visited
= 0;
3230 return set_location(STp
, STps
->last_block_visited
, STp
->new_partition
, 1);
3233 /* Functions for reading and writing the medium partition mode page. */
3235 #define PART_PAGE 0x11
3236 #define PART_PAGE_FIXED_LENGTH 8
3238 #define PP_OFF_MAX_ADD_PARTS 2
3239 #define PP_OFF_NBR_ADD_PARTS 3
3240 #define PP_OFF_FLAGS 4
3241 #define PP_OFF_PART_UNITS 6
3242 #define PP_OFF_RESERVED 7
3244 #define PP_BIT_IDP 0x20
3245 #define PP_MSK_PSUM_MB 0x10
3247 /* Get the number of partitions on the tape. As a side effect reads the
3248 mode page into the tape buffer. */
3249 static int nbr_partitions(struct scsi_tape
*STp
)
3253 if (STp
->ready
!= ST_READY
)
3256 result
= read_mode_page(STp
, PART_PAGE
, 1);
3259 DEBC_printk(STp
, "Can't read medium partition page.\n");
3262 result
= (STp
->buffer
)->b_data
[MODE_HEADER_LENGTH
+
3263 PP_OFF_NBR_ADD_PARTS
] + 1;
3264 DEBC_printk(STp
, "Number of partitions %d.\n", result
);
3271 /* Partition the tape into two partitions if size > 0 or one partition if
3274 The block descriptors are read and written because Sony SDT-7000 does not
3275 work without this (suggestion from Michael Schaefer <Michael.Schaefer@dlr.de>).
3277 My HP C1533A drive returns only one partition size field. This is used to
3278 set the size of partition 1. There is no size field for the default partition.
3279 Michael Schaefer's Sony SDT-7000 returns two descriptors and the second is
3280 used to set the size of partition 1 (this is what the SCSI-3 standard specifies).
3281 The following algorithm is used to accommodate both drives: if the number of
3282 partition size fields is greater than the maximum number of additional partitions
3283 in the mode page, the second field is used. Otherwise the first field is used.
3285 For Seagate DDS drives the page length must be 8 when no partitions is defined
3286 and 10 when 1 partition is defined (information from Eric Lee Green). This is
3287 is acceptable also to some other old drives and enforced if the first partition
3288 size field is used for the first additional partition size.
3290 static int partition_tape(struct scsi_tape
*STp
, int size
)
3293 int pgo
, psd_cnt
, psdo
;
3296 result
= read_mode_page(STp
, PART_PAGE
, 0);
3298 DEBC_printk(STp
, "Can't read partition mode page.\n");
3301 /* The mode page is in the buffer. Let's modify it and write it. */
3302 bp
= (STp
->buffer
)->b_data
;
3303 pgo
= MODE_HEADER_LENGTH
+ bp
[MH_OFF_BDESCS_LENGTH
];
3304 DEBC_printk(STp
, "Partition page length is %d bytes.\n",
3305 bp
[pgo
+ MP_OFF_PAGE_LENGTH
] + 2);
3307 psd_cnt
= (bp
[pgo
+ MP_OFF_PAGE_LENGTH
] + 2 - PART_PAGE_FIXED_LENGTH
) / 2;
3308 psdo
= pgo
+ PART_PAGE_FIXED_LENGTH
;
3309 if (psd_cnt
> bp
[pgo
+ PP_OFF_MAX_ADD_PARTS
]) {
3310 bp
[psdo
] = bp
[psdo
+ 1] = 0xff; /* Rest of the tape */
3313 memset(bp
+ psdo
, 0, bp
[pgo
+ PP_OFF_NBR_ADD_PARTS
] * 2);
3315 DEBC_printk(STp
, "psd_cnt %d, max.parts %d, nbr_parts %d\n",
3316 psd_cnt
, bp
[pgo
+ PP_OFF_MAX_ADD_PARTS
],
3317 bp
[pgo
+ PP_OFF_NBR_ADD_PARTS
]);
3320 bp
[pgo
+ PP_OFF_NBR_ADD_PARTS
] = 0;
3321 if (psd_cnt
<= bp
[pgo
+ PP_OFF_MAX_ADD_PARTS
])
3322 bp
[pgo
+ MP_OFF_PAGE_LENGTH
] = 6;
3323 DEBC_printk(STp
, "Formatting tape with one partition.\n");
3325 bp
[psdo
] = (size
>> 8) & 0xff;
3326 bp
[psdo
+ 1] = size
& 0xff;
3328 if (bp
[pgo
+ MP_OFF_PAGE_LENGTH
] < 8)
3329 bp
[pgo
+ MP_OFF_PAGE_LENGTH
] = 8;
3330 DEBC_printk(STp
, "Formatting tape with two partitions "
3331 "(1 = %d MB).\n", size
);
3333 bp
[pgo
+ PP_OFF_PART_UNITS
] = 0;
3334 bp
[pgo
+ PP_OFF_RESERVED
] = 0;
3335 bp
[pgo
+ PP_OFF_FLAGS
] = PP_BIT_IDP
| PP_MSK_PSUM_MB
;
3337 result
= write_mode_page(STp
, PART_PAGE
, 1);
3339 st_printk(KERN_INFO
, STp
, "Partitioning of tape failed.\n");
3348 /* The ioctl command */
3349 static long st_ioctl(struct file
*file
, unsigned int cmd_in
, unsigned long arg
)
3351 int i
, cmd_nr
, cmd_type
, bt
;
3354 struct scsi_tape
*STp
= file
->private_data
;
3355 struct st_modedef
*STm
;
3356 struct st_partstat
*STps
;
3357 void __user
*p
= (void __user
*)arg
;
3359 if (mutex_lock_interruptible(&STp
->lock
))
3360 return -ERESTARTSYS
;
3363 if (debugging
&& !STp
->in_use
) {
3364 st_printk(ST_DEB_MSG
, STp
, "Incorrect device.\n");
3369 STm
= &(STp
->modes
[STp
->current_mode
]);
3370 STps
= &(STp
->ps
[STp
->partition
]);
3373 * If we are in the middle of error recovery, don't let anyone
3374 * else try and use this device. Also, if error recovery fails, it
3375 * may try and take the device offline, in which case all further
3376 * access to the device is prohibited.
3378 retval
= scsi_ioctl_block_when_processing_errors(STp
->device
, cmd_in
,
3379 file
->f_flags
& O_NDELAY
);
3383 cmd_type
= _IOC_TYPE(cmd_in
);
3384 cmd_nr
= _IOC_NR(cmd_in
);
3386 if (cmd_type
== _IOC_TYPE(MTIOCTOP
) && cmd_nr
== _IOC_NR(MTIOCTOP
)) {
3389 if (_IOC_SIZE(cmd_in
) != sizeof(mtc
)) {
3394 i
= copy_from_user(&mtc
, p
, sizeof(struct mtop
));
3400 if (mtc
.mt_op
== MTSETDRVBUFFER
&& !capable(CAP_SYS_ADMIN
)) {
3401 st_printk(KERN_WARNING
, STp
,
3402 "MTSETDRVBUFFER only allowed for root.\n");
3406 if (!STm
->defined
&&
3407 (mtc
.mt_op
!= MTSETDRVBUFFER
&&
3408 (mtc
.mt_count
& MT_ST_OPTIONS
) == 0)) {
3413 if (!STp
->pos_unknown
) {
3415 if (STps
->eof
== ST_FM_HIT
) {
3416 if (mtc
.mt_op
== MTFSF
|| mtc
.mt_op
== MTFSFM
||
3417 mtc
.mt_op
== MTEOM
) {
3419 if (STps
->drv_file
>= 0)
3420 STps
->drv_file
+= 1;
3421 } else if (mtc
.mt_op
== MTBSF
|| mtc
.mt_op
== MTBSFM
) {
3423 if (STps
->drv_file
>= 0)
3424 STps
->drv_file
+= 1;
3428 if (mtc
.mt_op
== MTSEEK
) {
3429 /* Old position must be restored if partition will be
3431 i
= !STp
->can_partitions
||
3432 (STp
->new_partition
!= STp
->partition
);
3434 i
= mtc
.mt_op
== MTREW
|| mtc
.mt_op
== MTOFFL
||
3435 mtc
.mt_op
== MTRETEN
|| mtc
.mt_op
== MTEOM
||
3436 mtc
.mt_op
== MTLOCK
|| mtc
.mt_op
== MTLOAD
||
3437 mtc
.mt_op
== MTFSF
|| mtc
.mt_op
== MTFSFM
||
3438 mtc
.mt_op
== MTBSF
|| mtc
.mt_op
== MTBSFM
||
3439 mtc
.mt_op
== MTCOMPRESSION
;
3441 i
= flush_buffer(STp
, i
);
3446 if (STps
->rw
== ST_WRITING
&&
3447 (mtc
.mt_op
== MTREW
|| mtc
.mt_op
== MTOFFL
||
3448 mtc
.mt_op
== MTSEEK
||
3449 mtc
.mt_op
== MTBSF
|| mtc
.mt_op
== MTBSFM
)) {
3450 i
= st_int_ioctl(STp
, MTWEOF
, 1);
3455 if (mtc
.mt_op
== MTBSF
|| mtc
.mt_op
== MTBSFM
)
3462 * If there was a bus reset, block further access
3463 * to this device. If the user wants to rewind the tape,
3464 * then reset the flag and allow access again.
3466 if (mtc
.mt_op
!= MTREW
&&
3467 mtc
.mt_op
!= MTOFFL
&&
3468 mtc
.mt_op
!= MTRETEN
&&
3469 mtc
.mt_op
!= MTERASE
&&
3470 mtc
.mt_op
!= MTSEEK
&&
3471 mtc
.mt_op
!= MTEOM
) {
3476 /* remove this when the midlevel properly clears was_reset */
3477 STp
->device
->was_reset
= 0;
3480 if (mtc
.mt_op
!= MTNOP
&& mtc
.mt_op
!= MTSETBLK
&&
3481 mtc
.mt_op
!= MTSETDENSITY
&& mtc
.mt_op
!= MTWSM
&&
3482 mtc
.mt_op
!= MTSETDRVBUFFER
&& mtc
.mt_op
!= MTSETPART
)
3483 STps
->rw
= ST_IDLE
; /* Prevent automatic WEOF and fsf */
3485 if (mtc
.mt_op
== MTOFFL
&& STp
->door_locked
!= ST_UNLOCKED
)
3486 do_door_lock(STp
, 0); /* Ignore result! */
3488 if (mtc
.mt_op
== MTSETDRVBUFFER
&&
3489 (mtc
.mt_count
& MT_ST_OPTIONS
) != 0) {
3490 retval
= st_set_options(STp
, mtc
.mt_count
);
3494 if (mtc
.mt_op
== MTSETPART
) {
3495 if (!STp
->can_partitions
||
3496 mtc
.mt_count
< 0 || mtc
.mt_count
>= ST_NBR_PARTITIONS
) {
3500 if (mtc
.mt_count
>= STp
->nbr_partitions
&&
3501 (STp
->nbr_partitions
= nbr_partitions(STp
)) < 0) {
3505 if (mtc
.mt_count
>= STp
->nbr_partitions
) {
3509 STp
->new_partition
= mtc
.mt_count
;
3514 if (mtc
.mt_op
== MTMKPART
) {
3515 if (!STp
->can_partitions
) {
3519 if ((i
= st_int_ioctl(STp
, MTREW
, 0)) < 0 ||
3520 (i
= partition_tape(STp
, mtc
.mt_count
)) < 0) {
3524 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
3525 STp
->ps
[i
].rw
= ST_IDLE
;
3526 STp
->ps
[i
].at_sm
= 0;
3527 STp
->ps
[i
].last_block_valid
= 0;
3529 STp
->partition
= STp
->new_partition
= 0;
3530 STp
->nbr_partitions
= 1; /* Bad guess ?-) */
3531 STps
->drv_block
= STps
->drv_file
= 0;
3536 if (mtc
.mt_op
== MTSEEK
) {
3537 i
= set_location(STp
, mtc
.mt_count
, STp
->new_partition
, 0);
3538 if (!STp
->can_partitions
)
3539 STp
->ps
[0].rw
= ST_IDLE
;
3544 if (mtc
.mt_op
== MTUNLOAD
|| mtc
.mt_op
== MTOFFL
) {
3545 retval
= do_load_unload(STp
, file
, 0);
3549 if (mtc
.mt_op
== MTLOAD
) {
3550 retval
= do_load_unload(STp
, file
, max(1, mtc
.mt_count
));
3554 if (mtc
.mt_op
== MTLOCK
|| mtc
.mt_op
== MTUNLOCK
) {
3555 retval
= do_door_lock(STp
, (mtc
.mt_op
== MTLOCK
));
3559 if (STp
->can_partitions
&& STp
->ready
== ST_READY
&&
3560 (i
= switch_partition(STp
)) < 0) {
3565 if (mtc
.mt_op
== MTCOMPRESSION
)
3566 retval
= st_compression(STp
, (mtc
.mt_count
& 1));
3568 retval
= st_int_ioctl(STp
, mtc
.mt_op
, mtc
.mt_count
);
3571 if (!STm
->defined
) {
3576 if ((i
= flush_buffer(STp
, 0)) < 0) {
3580 if (STp
->can_partitions
&&
3581 (i
= switch_partition(STp
)) < 0) {
3586 if (cmd_type
== _IOC_TYPE(MTIOCGET
) && cmd_nr
== _IOC_NR(MTIOCGET
)) {
3587 struct mtget mt_status
;
3589 if (_IOC_SIZE(cmd_in
) != sizeof(struct mtget
)) {
3594 mt_status
.mt_type
= STp
->tape_type
;
3595 mt_status
.mt_dsreg
=
3596 ((STp
->block_size
<< MT_ST_BLKSIZE_SHIFT
) & MT_ST_BLKSIZE_MASK
) |
3597 ((STp
->density
<< MT_ST_DENSITY_SHIFT
) & MT_ST_DENSITY_MASK
);
3598 mt_status
.mt_blkno
= STps
->drv_block
;
3599 mt_status
.mt_fileno
= STps
->drv_file
;
3600 if (STp
->block_size
!= 0) {
3601 if (STps
->rw
== ST_WRITING
)
3602 mt_status
.mt_blkno
+=
3603 (STp
->buffer
)->buffer_bytes
/ STp
->block_size
;
3604 else if (STps
->rw
== ST_READING
)
3605 mt_status
.mt_blkno
-=
3606 ((STp
->buffer
)->buffer_bytes
+
3607 STp
->block_size
- 1) / STp
->block_size
;
3610 mt_status
.mt_gstat
= 0;
3611 if (STp
->drv_write_prot
)
3612 mt_status
.mt_gstat
|= GMT_WR_PROT(0xffffffff);
3613 if (mt_status
.mt_blkno
== 0) {
3614 if (mt_status
.mt_fileno
== 0)
3615 mt_status
.mt_gstat
|= GMT_BOT(0xffffffff);
3617 mt_status
.mt_gstat
|= GMT_EOF(0xffffffff);
3619 mt_status
.mt_erreg
= (STp
->recover_reg
<< MT_ST_SOFTERR_SHIFT
);
3620 mt_status
.mt_resid
= STp
->partition
;
3621 if (STps
->eof
== ST_EOM_OK
|| STps
->eof
== ST_EOM_ERROR
)
3622 mt_status
.mt_gstat
|= GMT_EOT(0xffffffff);
3623 else if (STps
->eof
>= ST_EOM_OK
)
3624 mt_status
.mt_gstat
|= GMT_EOD(0xffffffff);
3625 if (STp
->density
== 1)
3626 mt_status
.mt_gstat
|= GMT_D_800(0xffffffff);
3627 else if (STp
->density
== 2)
3628 mt_status
.mt_gstat
|= GMT_D_1600(0xffffffff);
3629 else if (STp
->density
== 3)
3630 mt_status
.mt_gstat
|= GMT_D_6250(0xffffffff);
3631 if (STp
->ready
== ST_READY
)
3632 mt_status
.mt_gstat
|= GMT_ONLINE(0xffffffff);
3633 if (STp
->ready
== ST_NO_TAPE
)
3634 mt_status
.mt_gstat
|= GMT_DR_OPEN(0xffffffff);
3636 mt_status
.mt_gstat
|= GMT_SM(0xffffffff);
3637 if (STm
->do_async_writes
||
3638 (STm
->do_buffer_writes
&& STp
->block_size
!= 0) ||
3639 STp
->drv_buffer
!= 0)
3640 mt_status
.mt_gstat
|= GMT_IM_REP_EN(0xffffffff);
3641 if (STp
->cleaning_req
)
3642 mt_status
.mt_gstat
|= GMT_CLN(0xffffffff);
3644 i
= copy_to_user(p
, &mt_status
, sizeof(struct mtget
));
3650 STp
->recover_reg
= 0; /* Clear after read */
3653 } /* End of MTIOCGET */
3654 if (cmd_type
== _IOC_TYPE(MTIOCPOS
) && cmd_nr
== _IOC_NR(MTIOCPOS
)) {
3655 struct mtpos mt_pos
;
3656 if (_IOC_SIZE(cmd_in
) != sizeof(struct mtpos
)) {
3660 if ((i
= get_location(STp
, &blk
, &bt
, 0)) < 0) {
3664 mt_pos
.mt_blkno
= blk
;
3665 i
= copy_to_user(p
, &mt_pos
, sizeof(struct mtpos
));
3670 mutex_unlock(&STp
->lock
);
3672 case SCSI_IOCTL_GET_IDLUN
:
3673 case SCSI_IOCTL_GET_BUS_NUMBER
:
3676 if ((cmd_in
== SG_IO
||
3677 cmd_in
== SCSI_IOCTL_SEND_COMMAND
||
3678 cmd_in
== CDROM_SEND_PACKET
) &&
3679 !capable(CAP_SYS_RAWIO
))
3682 i
= scsi_cmd_ioctl(STp
->disk
->queue
, STp
->disk
,
3683 file
->f_mode
, cmd_in
, p
);
3688 retval
= scsi_ioctl(STp
->device
, cmd_in
, p
);
3689 if (!retval
&& cmd_in
== SCSI_IOCTL_STOP_UNIT
) { /* unload */
3690 STp
->rew_at_close
= 0;
3691 STp
->ready
= ST_NO_TAPE
;
3696 mutex_unlock(&STp
->lock
);
3700 #ifdef CONFIG_COMPAT
3701 static long st_compat_ioctl(struct file
*file
, unsigned int cmd
, unsigned long arg
)
3703 struct scsi_tape
*STp
= file
->private_data
;
3704 struct scsi_device
*sdev
= STp
->device
;
3705 int ret
= -ENOIOCTLCMD
;
3706 if (sdev
->host
->hostt
->compat_ioctl
) {
3708 ret
= sdev
->host
->hostt
->compat_ioctl(sdev
, cmd
, (void __user
*)arg
);
3717 /* Try to allocate a new tape buffer. Calling function must not hold
3719 static struct st_buffer
*new_tape_buffer(int need_dma
, int max_sg
)
3721 struct st_buffer
*tb
;
3723 tb
= kzalloc(sizeof(struct st_buffer
), GFP_ATOMIC
);
3725 printk(KERN_NOTICE
"st: Can't allocate new tape buffer.\n");
3729 tb
->use_sg
= max_sg
;
3731 tb
->buffer_size
= 0;
3733 tb
->reserved_pages
= kzalloc(max_sg
* sizeof(struct page
*),
3735 if (!tb
->reserved_pages
) {
3744 /* Try to allocate enough space in the tape buffer */
3745 #define ST_MAX_ORDER 6
3747 static int enlarge_buffer(struct st_buffer
* STbuffer
, int new_size
, int need_dma
)
3749 int segs
, max_segs
, b_size
, order
, got
;
3752 if (new_size
<= STbuffer
->buffer_size
)
3755 if (STbuffer
->buffer_size
<= PAGE_SIZE
)
3756 normalize_buffer(STbuffer
); /* Avoid extra segment */
3758 max_segs
= STbuffer
->use_sg
;
3760 priority
= GFP_KERNEL
| __GFP_NOWARN
;
3762 priority
|= GFP_DMA
;
3764 if (STbuffer
->cleared
)
3765 priority
|= __GFP_ZERO
;
3767 if (STbuffer
->frp_segs
) {
3768 order
= STbuffer
->reserved_page_order
;
3769 b_size
= PAGE_SIZE
<< order
;
3771 for (b_size
= PAGE_SIZE
, order
= 0;
3772 order
< ST_MAX_ORDER
&&
3773 max_segs
* (PAGE_SIZE
<< order
) < new_size
;
3774 order
++, b_size
*= 2)
3776 STbuffer
->reserved_page_order
= order
;
3778 if (max_segs
* (PAGE_SIZE
<< order
) < new_size
) {
3779 if (order
== ST_MAX_ORDER
)
3781 normalize_buffer(STbuffer
);
3782 return enlarge_buffer(STbuffer
, new_size
, need_dma
);
3785 for (segs
= STbuffer
->frp_segs
, got
= STbuffer
->buffer_size
;
3786 segs
< max_segs
&& got
< new_size
;) {
3789 page
= alloc_pages(priority
, order
);
3791 DEB(STbuffer
->buffer_size
= got
);
3792 normalize_buffer(STbuffer
);
3796 STbuffer
->frp_segs
+= 1;
3798 STbuffer
->buffer_size
= got
;
3799 STbuffer
->reserved_pages
[segs
] = page
;
3802 STbuffer
->b_data
= page_address(STbuffer
->reserved_pages
[0]);
3808 /* Make sure that no data from previous user is in the internal buffer */
3809 static void clear_buffer(struct st_buffer
* st_bp
)
3813 for (i
=0; i
< st_bp
->frp_segs
; i
++)
3814 memset(page_address(st_bp
->reserved_pages
[i
]), 0,
3815 PAGE_SIZE
<< st_bp
->reserved_page_order
);
3820 /* Release the extra buffer */
3821 static void normalize_buffer(struct st_buffer
* STbuffer
)
3823 int i
, order
= STbuffer
->reserved_page_order
;
3825 for (i
= 0; i
< STbuffer
->frp_segs
; i
++) {
3826 __free_pages(STbuffer
->reserved_pages
[i
], order
);
3827 STbuffer
->buffer_size
-= (PAGE_SIZE
<< order
);
3829 STbuffer
->frp_segs
= 0;
3830 STbuffer
->sg_segs
= 0;
3831 STbuffer
->reserved_page_order
= 0;
3832 STbuffer
->map_data
.offset
= 0;
3836 /* Move data from the user buffer to the tape buffer. Returns zero (success) or
3837 negative error code. */
3838 static int append_to_buffer(const char __user
*ubp
, struct st_buffer
* st_bp
, int do_count
)
3840 int i
, cnt
, res
, offset
;
3841 int length
= PAGE_SIZE
<< st_bp
->reserved_page_order
;
3843 for (i
= 0, offset
= st_bp
->buffer_bytes
;
3844 i
< st_bp
->frp_segs
&& offset
>= length
; i
++)
3846 if (i
== st_bp
->frp_segs
) { /* Should never happen */
3847 printk(KERN_WARNING
"st: append_to_buffer offset overflow.\n");
3850 for (; i
< st_bp
->frp_segs
&& do_count
> 0; i
++) {
3851 struct page
*page
= st_bp
->reserved_pages
[i
];
3852 cnt
= length
- offset
< do_count
? length
- offset
: do_count
;
3853 res
= copy_from_user(page_address(page
) + offset
, ubp
, cnt
);
3857 st_bp
->buffer_bytes
+= cnt
;
3861 if (do_count
) /* Should never happen */
3868 /* Move data from the tape buffer to the user buffer. Returns zero (success) or
3869 negative error code. */
3870 static int from_buffer(struct st_buffer
* st_bp
, char __user
*ubp
, int do_count
)
3872 int i
, cnt
, res
, offset
;
3873 int length
= PAGE_SIZE
<< st_bp
->reserved_page_order
;
3875 for (i
= 0, offset
= st_bp
->read_pointer
;
3876 i
< st_bp
->frp_segs
&& offset
>= length
; i
++)
3878 if (i
== st_bp
->frp_segs
) { /* Should never happen */
3879 printk(KERN_WARNING
"st: from_buffer offset overflow.\n");
3882 for (; i
< st_bp
->frp_segs
&& do_count
> 0; i
++) {
3883 struct page
*page
= st_bp
->reserved_pages
[i
];
3884 cnt
= length
- offset
< do_count
? length
- offset
: do_count
;
3885 res
= copy_to_user(ubp
, page_address(page
) + offset
, cnt
);
3889 st_bp
->buffer_bytes
-= cnt
;
3890 st_bp
->read_pointer
+= cnt
;
3894 if (do_count
) /* Should never happen */
3901 /* Move data towards start of buffer */
3902 static void move_buffer_data(struct st_buffer
* st_bp
, int offset
)
3904 int src_seg
, dst_seg
, src_offset
= 0, dst_offset
;
3906 int length
= PAGE_SIZE
<< st_bp
->reserved_page_order
;
3911 total
=st_bp
->buffer_bytes
- offset
;
3912 for (src_seg
=0; src_seg
< st_bp
->frp_segs
; src_seg
++) {
3913 src_offset
= offset
;
3914 if (src_offset
< length
)
3919 st_bp
->buffer_bytes
= st_bp
->read_pointer
= total
;
3920 for (dst_seg
=dst_offset
=0; total
> 0; ) {
3921 struct page
*dpage
= st_bp
->reserved_pages
[dst_seg
];
3922 struct page
*spage
= st_bp
->reserved_pages
[src_seg
];
3924 count
= min(length
- dst_offset
, length
- src_offset
);
3925 memmove(page_address(dpage
) + dst_offset
,
3926 page_address(spage
) + src_offset
, count
);
3927 src_offset
+= count
;
3928 if (src_offset
>= length
) {
3932 dst_offset
+= count
;
3933 if (dst_offset
>= length
) {
3941 /* Validate the options from command line or module parameters */
3942 static void validate_options(void)
3945 st_fixed_buffer_size
= buffer_kbs
* ST_KILOBYTE
;
3946 if (max_sg_segs
>= ST_FIRST_SG
)
3947 st_max_sg_segs
= max_sg_segs
;
3951 /* Set the boot options. Syntax is defined in Documenation/scsi/st.txt.
3953 static int __init
st_setup(char *str
)
3955 int i
, len
, ints
[5];
3958 stp
= get_options(str
, ARRAY_SIZE(ints
), ints
);
3961 for (i
= 0; i
< ints
[0] && i
< ARRAY_SIZE(parms
); i
++)
3963 *parms
[i
].val
= ints
[i
+ 1];
3965 while (stp
!= NULL
) {
3966 for (i
= 0; i
< ARRAY_SIZE(parms
); i
++) {
3967 len
= strlen(parms
[i
].name
);
3968 if (!strncmp(stp
, parms
[i
].name
, len
) &&
3969 (*(stp
+ len
) == ':' || *(stp
+ len
) == '=')) {
3972 simple_strtoul(stp
+ len
+ 1, NULL
, 0);
3974 printk(KERN_WARNING
"st: Obsolete parameter %s\n",
3979 if (i
>= ARRAY_SIZE(parms
))
3980 printk(KERN_WARNING
"st: invalid parameter in '%s'\n",
3982 stp
= strchr(stp
, ',');
3993 __setup("st=", st_setup
);
3997 static const struct file_operations st_fops
=
3999 .owner
= THIS_MODULE
,
4002 .unlocked_ioctl
= st_ioctl
,
4003 #ifdef CONFIG_COMPAT
4004 .compat_ioctl
= st_compat_ioctl
,
4008 .release
= st_release
,
4009 .llseek
= noop_llseek
,
4012 static int create_one_cdev(struct scsi_tape
*tape
, int mode
, int rew
)
4018 struct st_modedef
*STm
= &(tape
->modes
[mode
]);
4020 int dev_num
= tape
->index
;
4022 cdev_devno
= MKDEV(SCSI_TAPE_MAJOR
, TAPE_MINOR(dev_num
, mode
, rew
));
4024 cdev
= cdev_alloc();
4026 pr_err("st%d: out of memory. Device not attached.\n", dev_num
);
4030 cdev
->owner
= THIS_MODULE
;
4031 cdev
->ops
= &st_fops
;
4033 error
= cdev_add(cdev
, cdev_devno
, 1);
4035 pr_err("st%d: Can't add %s-rewind mode %d\n", dev_num
,
4036 rew
? "non" : "auto", mode
);
4037 pr_err("st%d: Device not attached.\n", dev_num
);
4040 STm
->cdevs
[rew
] = cdev
;
4042 i
= mode
<< (4 - ST_NBR_MODE_BITS
);
4043 snprintf(name
, 10, "%s%s%s", rew
? "n" : "",
4044 tape
->disk
->disk_name
, st_formats
[i
]);
4046 dev
= device_create(&st_sysfs_class
, &tape
->device
->sdev_gendev
,
4047 cdev_devno
, &tape
->modes
[mode
], "%s", name
);
4049 pr_err("st%d: device_create failed\n", dev_num
);
4050 error
= PTR_ERR(dev
);
4054 STm
->devs
[rew
] = dev
;
4058 cdev_del(STm
->cdevs
[rew
]);
4059 STm
->cdevs
[rew
] = NULL
;
4064 static int create_cdevs(struct scsi_tape
*tape
)
4067 for (mode
= 0; mode
< ST_NBR_MODES
; ++mode
) {
4068 error
= create_one_cdev(tape
, mode
, 0);
4071 error
= create_one_cdev(tape
, mode
, 1);
4076 return sysfs_create_link(&tape
->device
->sdev_gendev
.kobj
,
4077 &tape
->modes
[0].devs
[0]->kobj
, "tape");
4080 static void remove_cdevs(struct scsi_tape
*tape
)
4083 sysfs_remove_link(&tape
->device
->sdev_gendev
.kobj
, "tape");
4084 for (mode
= 0; mode
< ST_NBR_MODES
; mode
++) {
4085 struct st_modedef
*STm
= &(tape
->modes
[mode
]);
4086 for (rew
= 0; rew
< 2; rew
++) {
4087 if (STm
->cdevs
[rew
])
4088 cdev_del(STm
->cdevs
[rew
]);
4090 device_unregister(STm
->devs
[rew
]);
4095 static int st_probe(struct device
*dev
)
4097 struct scsi_device
*SDp
= to_scsi_device(dev
);
4098 struct gendisk
*disk
= NULL
;
4099 struct scsi_tape
*tpnt
= NULL
;
4100 struct st_modedef
*STm
;
4101 struct st_partstat
*STps
;
4102 struct st_buffer
*buffer
;
4106 if (SDp
->type
!= TYPE_TAPE
)
4108 if ((stp
= st_incompatible(SDp
))) {
4109 sdev_printk(KERN_INFO
, SDp
, "Found incompatible tape\n");
4110 sdev_printk(KERN_INFO
, SDp
,
4111 "st: The suggested driver is %s.\n", stp
);
4115 scsi_autopm_get_device(SDp
);
4116 i
= queue_max_segments(SDp
->request_queue
);
4117 if (st_max_sg_segs
< i
)
4119 buffer
= new_tape_buffer((SDp
->host
)->unchecked_isa_dma
, i
);
4120 if (buffer
== NULL
) {
4121 sdev_printk(KERN_ERR
, SDp
,
4122 "st: Can't allocate new tape buffer. "
4123 "Device not attached.\n");
4127 disk
= alloc_disk(1);
4129 sdev_printk(KERN_ERR
, SDp
,
4130 "st: out of memory. Device not attached.\n");
4131 goto out_buffer_free
;
4134 tpnt
= kzalloc(sizeof(struct scsi_tape
), GFP_ATOMIC
);
4136 sdev_printk(KERN_ERR
, SDp
,
4137 "st: Can't allocate device descriptor.\n");
4140 kref_init(&tpnt
->kref
);
4142 disk
->private_data
= &tpnt
->driver
;
4143 disk
->queue
= SDp
->request_queue
;
4144 /* SCSI tape doesn't register this gendisk via add_disk(). Manually
4145 * take queue reference that release_disk() expects. */
4146 if (!blk_get_queue(disk
->queue
))
4148 tpnt
->driver
= &st_template
;
4151 if (SDp
->scsi_level
<= 2)
4152 tpnt
->tape_type
= MT_ISSCSI1
;
4154 tpnt
->tape_type
= MT_ISSCSI2
;
4156 tpnt
->buffer
= buffer
;
4157 tpnt
->buffer
->last_SRpnt
= NULL
;
4162 tpnt
->drv_buffer
= 1; /* Try buffering if no mode sense */
4163 tpnt
->restr_dma
= (SDp
->host
)->unchecked_isa_dma
;
4164 tpnt
->use_pf
= (SDp
->scsi_level
>= SCSI_2
);
4166 tpnt
->do_auto_lock
= ST_AUTO_LOCK
;
4167 tpnt
->can_bsr
= (SDp
->scsi_level
> 2 ? 1 : ST_IN_FILE_POS
); /* BSR mandatory in SCSI3 */
4168 tpnt
->can_partitions
= 0;
4169 tpnt
->two_fm
= ST_TWO_FM
;
4170 tpnt
->fast_mteom
= ST_FAST_MTEOM
;
4171 tpnt
->scsi2_logical
= ST_SCSI2LOGICAL
;
4172 tpnt
->sili
= ST_SILI
;
4173 tpnt
->immediate
= ST_NOWAIT
;
4174 tpnt
->immediate_filemark
= 0;
4175 tpnt
->default_drvbuffer
= 0xff; /* No forced buffering */
4176 tpnt
->partition
= 0;
4177 tpnt
->new_partition
= 0;
4178 tpnt
->nbr_partitions
= 0;
4179 blk_queue_rq_timeout(tpnt
->device
->request_queue
, ST_TIMEOUT
);
4180 tpnt
->long_timeout
= ST_LONG_TIMEOUT
;
4181 tpnt
->try_dio
= try_direct_io
&& !SDp
->host
->unchecked_isa_dma
;
4183 for (i
= 0; i
< ST_NBR_MODES
; i
++) {
4184 STm
= &(tpnt
->modes
[i
]);
4186 STm
->sysv
= ST_SYSV
;
4187 STm
->defaults_for_writes
= 0;
4188 STm
->do_async_writes
= ST_ASYNC_WRITES
;
4189 STm
->do_buffer_writes
= ST_BUFFER_WRITES
;
4190 STm
->do_read_ahead
= ST_READ_AHEAD
;
4191 STm
->default_compression
= ST_DONT_TOUCH
;
4192 STm
->default_blksize
= (-1); /* No forced size */
4193 STm
->default_density
= (-1); /* No forced density */
4197 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
4198 STps
= &(tpnt
->ps
[i
]);
4200 STps
->eof
= ST_NOEOF
;
4202 STps
->last_block_valid
= 0;
4203 STps
->drv_block
= (-1);
4204 STps
->drv_file
= (-1);
4207 tpnt
->current_mode
= 0;
4208 tpnt
->modes
[0].defined
= 1;
4210 tpnt
->density_changed
= tpnt
->compression_changed
=
4211 tpnt
->blksize_changed
= 0;
4212 mutex_init(&tpnt
->lock
);
4214 idr_preload(GFP_KERNEL
);
4215 spin_lock(&st_index_lock
);
4216 error
= idr_alloc(&st_index_idr
, tpnt
, 0, ST_MAX_TAPES
+ 1, GFP_NOWAIT
);
4217 spin_unlock(&st_index_lock
);
4220 pr_warn("st: idr allocation failed: %d\n", error
);
4223 tpnt
->index
= error
;
4224 sprintf(disk
->disk_name
, "st%d", tpnt
->index
);
4226 dev_set_drvdata(dev
, tpnt
);
4229 error
= create_cdevs(tpnt
);
4231 goto out_remove_devs
;
4232 scsi_autopm_put_device(SDp
);
4234 sdev_printk(KERN_NOTICE
, SDp
,
4235 "Attached scsi tape %s\n", tape_name(tpnt
));
4236 sdev_printk(KERN_INFO
, SDp
, "%s: try direct i/o: %s (alignment %d B)\n",
4237 tape_name(tpnt
), tpnt
->try_dio
? "yes" : "no",
4238 queue_dma_alignment(SDp
->request_queue
) + 1);
4244 spin_lock(&st_index_lock
);
4245 idr_remove(&st_index_idr
, tpnt
->index
);
4246 spin_unlock(&st_index_lock
);
4248 blk_put_queue(disk
->queue
);
4255 scsi_autopm_put_device(SDp
);
4260 static int st_remove(struct device
*dev
)
4262 struct scsi_tape
*tpnt
= dev_get_drvdata(dev
);
4263 int index
= tpnt
->index
;
4265 scsi_autopm_get_device(to_scsi_device(dev
));
4268 mutex_lock(&st_ref_mutex
);
4269 kref_put(&tpnt
->kref
, scsi_tape_release
);
4270 mutex_unlock(&st_ref_mutex
);
4271 spin_lock(&st_index_lock
);
4272 idr_remove(&st_index_idr
, index
);
4273 spin_unlock(&st_index_lock
);
4278 * scsi_tape_release - Called to free the Scsi_Tape structure
4279 * @kref: pointer to embedded kref
4281 * st_ref_mutex must be held entering this routine. Because it is
4282 * called on last put, you should always use the scsi_tape_get()
4283 * scsi_tape_put() helpers which manipulate the semaphore directly
4284 * and never do a direct kref_put().
4286 static void scsi_tape_release(struct kref
*kref
)
4288 struct scsi_tape
*tpnt
= to_scsi_tape(kref
);
4289 struct gendisk
*disk
= tpnt
->disk
;
4291 tpnt
->device
= NULL
;
4294 normalize_buffer(tpnt
->buffer
);
4295 kfree(tpnt
->buffer
->reserved_pages
);
4296 kfree(tpnt
->buffer
);
4299 disk
->private_data
= NULL
;
4305 static struct class st_sysfs_class
= {
4306 .name
= "scsi_tape",
4307 .dev_groups
= st_dev_groups
,
4310 static int __init
init_st(void)
4316 printk(KERN_INFO
"st: Version %s, fixed bufsize %d, s/g segs %d\n",
4317 verstr
, st_fixed_buffer_size
, st_max_sg_segs
);
4319 debugging
= (debug_flag
> 0) ? debug_flag
: NO_DEBUG
;
4321 printk(KERN_INFO
"st: Debugging enabled debug_flag = %d\n",
4325 err
= class_register(&st_sysfs_class
);
4327 pr_err("Unable register sysfs class for SCSI tapes\n");
4331 err
= register_chrdev_region(MKDEV(SCSI_TAPE_MAJOR
, 0),
4332 ST_MAX_TAPE_ENTRIES
, "st");
4334 printk(KERN_ERR
"Unable to get major %d for SCSI tapes\n",
4339 err
= scsi_register_driver(&st_template
.gendrv
);
4343 err
= do_create_sysfs_files();
4350 scsi_unregister_driver(&st_template
.gendrv
);
4352 unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR
, 0),
4353 ST_MAX_TAPE_ENTRIES
);
4355 class_unregister(&st_sysfs_class
);
4359 static void __exit
exit_st(void)
4361 do_remove_sysfs_files();
4362 scsi_unregister_driver(&st_template
.gendrv
);
4363 unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR
, 0),
4364 ST_MAX_TAPE_ENTRIES
);
4365 class_unregister(&st_sysfs_class
);
4366 printk(KERN_INFO
"st: Unloaded.\n");
4369 module_init(init_st
);
4370 module_exit(exit_st
);
4373 /* The sysfs driver interface. Read-only at the moment */
4374 static ssize_t
st_try_direct_io_show(struct device_driver
*ddp
, char *buf
)
4376 return snprintf(buf
, PAGE_SIZE
, "%d\n", try_direct_io
);
4378 static DRIVER_ATTR(try_direct_io
, S_IRUGO
, st_try_direct_io_show
, NULL
);
4380 static ssize_t
st_fixed_buffer_size_show(struct device_driver
*ddp
, char *buf
)
4382 return snprintf(buf
, PAGE_SIZE
, "%d\n", st_fixed_buffer_size
);
4384 static DRIVER_ATTR(fixed_buffer_size
, S_IRUGO
, st_fixed_buffer_size_show
, NULL
);
4386 static ssize_t
st_max_sg_segs_show(struct device_driver
*ddp
, char *buf
)
4388 return snprintf(buf
, PAGE_SIZE
, "%d\n", st_max_sg_segs
);
4390 static DRIVER_ATTR(max_sg_segs
, S_IRUGO
, st_max_sg_segs_show
, NULL
);
4392 static ssize_t
st_version_show(struct device_driver
*ddd
, char *buf
)
4394 return snprintf(buf
, PAGE_SIZE
, "[%s]\n", verstr
);
4396 static DRIVER_ATTR(version
, S_IRUGO
, st_version_show
, NULL
);
4398 static int do_create_sysfs_files(void)
4400 struct device_driver
*sysfs
= &st_template
.gendrv
;
4403 err
= driver_create_file(sysfs
, &driver_attr_try_direct_io
);
4406 err
= driver_create_file(sysfs
, &driver_attr_fixed_buffer_size
);
4408 goto err_try_direct_io
;
4409 err
= driver_create_file(sysfs
, &driver_attr_max_sg_segs
);
4411 goto err_attr_fixed_buf
;
4412 err
= driver_create_file(sysfs
, &driver_attr_version
);
4414 goto err_attr_max_sg
;
4419 driver_remove_file(sysfs
, &driver_attr_max_sg_segs
);
4421 driver_remove_file(sysfs
, &driver_attr_fixed_buffer_size
);
4423 driver_remove_file(sysfs
, &driver_attr_try_direct_io
);
4427 static void do_remove_sysfs_files(void)
4429 struct device_driver
*sysfs
= &st_template
.gendrv
;
4431 driver_remove_file(sysfs
, &driver_attr_version
);
4432 driver_remove_file(sysfs
, &driver_attr_max_sg_segs
);
4433 driver_remove_file(sysfs
, &driver_attr_fixed_buffer_size
);
4434 driver_remove_file(sysfs
, &driver_attr_try_direct_io
);
4437 /* The sysfs simple class interface */
4439 defined_show(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
4441 struct st_modedef
*STm
= dev_get_drvdata(dev
);
4444 l
= snprintf(buf
, PAGE_SIZE
, "%d\n", STm
->defined
);
4447 static DEVICE_ATTR_RO(defined
);
4450 default_blksize_show(struct device
*dev
, struct device_attribute
*attr
,
4453 struct st_modedef
*STm
= dev_get_drvdata(dev
);
4456 l
= snprintf(buf
, PAGE_SIZE
, "%d\n", STm
->default_blksize
);
4459 static DEVICE_ATTR_RO(default_blksize
);
4462 default_density_show(struct device
*dev
, struct device_attribute
*attr
,
4465 struct st_modedef
*STm
= dev_get_drvdata(dev
);
4469 fmt
= STm
->default_density
>= 0 ? "0x%02x\n" : "%d\n";
4470 l
= snprintf(buf
, PAGE_SIZE
, fmt
, STm
->default_density
);
4473 static DEVICE_ATTR_RO(default_density
);
4476 default_compression_show(struct device
*dev
, struct device_attribute
*attr
,
4479 struct st_modedef
*STm
= dev_get_drvdata(dev
);
4482 l
= snprintf(buf
, PAGE_SIZE
, "%d\n", STm
->default_compression
- 1);
4485 static DEVICE_ATTR_RO(default_compression
);
4488 options_show(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
4490 struct st_modedef
*STm
= dev_get_drvdata(dev
);
4491 struct scsi_tape
*STp
= STm
->tape
;
4495 options
= STm
->do_buffer_writes
? MT_ST_BUFFER_WRITES
: 0;
4496 options
|= STm
->do_async_writes
? MT_ST_ASYNC_WRITES
: 0;
4497 options
|= STm
->do_read_ahead
? MT_ST_READ_AHEAD
: 0;
4498 DEB( options
|= debugging
? MT_ST_DEBUGGING
: 0 );
4499 options
|= STp
->two_fm
? MT_ST_TWO_FM
: 0;
4500 options
|= STp
->fast_mteom
? MT_ST_FAST_MTEOM
: 0;
4501 options
|= STm
->defaults_for_writes
? MT_ST_DEF_WRITES
: 0;
4502 options
|= STp
->can_bsr
? MT_ST_CAN_BSR
: 0;
4503 options
|= STp
->omit_blklims
? MT_ST_NO_BLKLIMS
: 0;
4504 options
|= STp
->can_partitions
? MT_ST_CAN_PARTITIONS
: 0;
4505 options
|= STp
->scsi2_logical
? MT_ST_SCSI2LOGICAL
: 0;
4506 options
|= STm
->sysv
? MT_ST_SYSV
: 0;
4507 options
|= STp
->immediate
? MT_ST_NOWAIT
: 0;
4508 options
|= STp
->immediate_filemark
? MT_ST_NOWAIT_EOF
: 0;
4509 options
|= STp
->sili
? MT_ST_SILI
: 0;
4511 l
= snprintf(buf
, PAGE_SIZE
, "0x%08x\n", options
);
4514 static DEVICE_ATTR_RO(options
);
4516 static struct attribute
*st_dev_attrs
[] = {
4517 &dev_attr_defined
.attr
,
4518 &dev_attr_default_blksize
.attr
,
4519 &dev_attr_default_density
.attr
,
4520 &dev_attr_default_compression
.attr
,
4521 &dev_attr_options
.attr
,
4524 ATTRIBUTE_GROUPS(st_dev
);
4526 /* The following functions may be useful for a larger audience. */
4527 static int sgl_map_user_pages(struct st_buffer
*STbp
,
4528 const unsigned int max_pages
, unsigned long uaddr
,
4529 size_t count
, int rw
)
4531 unsigned long end
= (uaddr
+ count
+ PAGE_SIZE
- 1) >> PAGE_SHIFT
;
4532 unsigned long start
= uaddr
>> PAGE_SHIFT
;
4533 const int nr_pages
= end
- start
;
4535 struct page
**pages
;
4536 struct rq_map_data
*mdata
= &STbp
->map_data
;
4538 /* User attempted Overflow! */
4539 if ((uaddr
+ count
) < uaddr
)
4543 if (nr_pages
> max_pages
)
4550 if ((pages
= kmalloc(max_pages
* sizeof(*pages
), GFP_KERNEL
)) == NULL
)
4553 /* Try to fault in all of the necessary pages */
4554 /* rw==READ means read from drive, write into memory area */
4555 res
= get_user_pages_unlocked(
4561 0, /* don't force */
4564 /* Errors and no page mapped should return here */
4568 for (i
=0; i
< nr_pages
; i
++) {
4569 /* FIXME: flush superflous for rw==READ,
4570 * probably wrong function for rw==WRITE
4572 flush_dcache_page(pages
[i
]);
4575 mdata
->offset
= uaddr
& ~PAGE_MASK
;
4576 STbp
->mapped_pages
= pages
;
4581 for (j
=0; j
< res
; j
++)
4582 page_cache_release(pages
[j
]);
4590 /* And unmap them... */
4591 static int sgl_unmap_user_pages(struct st_buffer
*STbp
,
4592 const unsigned int nr_pages
, int dirtied
)
4596 for (i
=0; i
< nr_pages
; i
++) {
4597 struct page
*page
= STbp
->mapped_pages
[i
];
4601 /* FIXME: cache flush missing for rw==READ
4602 * FIXME: call the correct reference counting function
4604 page_cache_release(page
);
4606 kfree(STbp
->mapped_pages
);
4607 STbp
->mapped_pages
= NULL
;