2 SCSI Tape Driver for Linux version 1.1 and newer. See the accompanying
3 file Documentation/scsi/st.txt for more information.
6 Rewritten from Dwayne Forsyth's SCSI tape driver by Kai Makisara.
7 Contribution and ideas from several people including (in alphabetical
8 order) Klaus Ehrenfried, Eugene Exarevsky, Eric Lee Green, Wolfgang Denk,
9 Steve Hirsch, Andreas Koppenh"ofer, Michael Leodolter, Eyal Lebedinsky,
10 Michael Schaefer, J"org Weule, and Eric Youngdale.
12 Copyright 1992 - 2008 Kai Makisara
13 email Kai.Makisara@kolumbus.fi
15 Some small formal changes - aeb, 950809
17 Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support
20 static const char *verstr
= "20080221";
22 #include <linux/module.h>
25 #include <linux/kernel.h>
26 #include <linux/sched.h>
28 #include <linux/init.h>
29 #include <linux/string.h>
30 #include <linux/errno.h>
31 #include <linux/mtio.h>
32 #include <linux/cdrom.h>
33 #include <linux/ioctl.h>
34 #include <linux/fcntl.h>
35 #include <linux/spinlock.h>
36 #include <linux/blkdev.h>
37 #include <linux/moduleparam.h>
38 #include <linux/cdev.h>
39 #include <linux/delay.h>
40 #include <linux/mutex.h>
42 #include <asm/uaccess.h>
44 #include <asm/system.h>
46 #include <scsi/scsi.h>
47 #include <scsi/scsi_dbg.h>
48 #include <scsi/scsi_device.h>
49 #include <scsi/scsi_driver.h>
50 #include <scsi/scsi_eh.h>
51 #include <scsi/scsi_host.h>
52 #include <scsi/scsi_ioctl.h>
56 /* The driver prints some debugging information on the console if DEBUG
57 is defined and non-zero. */
61 /* The message level for the debug messages is currently set to KERN_NOTICE
62 so that people can easily see the messages. Later when the debugging messages
63 in the drivers are more widely classified, this may be changed to KERN_DEBUG. */
64 #define ST_DEB_MSG KERN_NOTICE
66 #define DEBC(a) if (debugging) { a ; }
72 #define ST_KILOBYTE 1024
74 #include "st_options.h"
77 static int buffer_kbs
;
78 static int max_sg_segs
;
79 static int try_direct_io
= TRY_DIRECT_IO
;
80 static int try_rdio
= 1;
81 static int try_wdio
= 1;
83 static int st_dev_max
;
86 static struct class *st_sysfs_class
;
88 MODULE_AUTHOR("Kai Makisara");
89 MODULE_DESCRIPTION("SCSI tape (st) driver");
90 MODULE_LICENSE("GPL");
91 MODULE_ALIAS_CHARDEV_MAJOR(SCSI_TAPE_MAJOR
);
92 MODULE_ALIAS_SCSI_DEVICE(TYPE_TAPE
);
94 /* Set 'perm' (4th argument) to 0 to disable module_param's definition
95 * of sysfs parameters (which module_param doesn't yet support).
96 * Sysfs parameters defined explicitly later.
98 module_param_named(buffer_kbs
, buffer_kbs
, int, 0);
99 MODULE_PARM_DESC(buffer_kbs
, "Default driver buffer size for fixed block mode (KB; 32)");
100 module_param_named(max_sg_segs
, max_sg_segs
, int, 0);
101 MODULE_PARM_DESC(max_sg_segs
, "Maximum number of scatter/gather segments to use (256)");
102 module_param_named(try_direct_io
, try_direct_io
, int, 0);
103 MODULE_PARM_DESC(try_direct_io
, "Try direct I/O between user buffer and tape drive (1)");
105 /* Extra parameters for testing */
106 module_param_named(try_rdio
, try_rdio
, int, 0);
107 MODULE_PARM_DESC(try_rdio
, "Try direct read i/o when possible");
108 module_param_named(try_wdio
, try_wdio
, int, 0);
109 MODULE_PARM_DESC(try_wdio
, "Try direct write i/o when possible");
112 static int write_threshold_kbs
; /* retained for compatibility */
113 static struct st_dev_parm
{
116 } parms
[] __initdata
= {
118 "buffer_kbs", &buffer_kbs
120 { /* Retained for compatibility with 2.4 */
121 "write_threshold_kbs", &write_threshold_kbs
127 "try_direct_io", &try_direct_io
132 /* Restrict the number of modes so that names for all are assigned */
133 #if ST_NBR_MODES > 16
134 #error "Maximum number of modes is 16"
136 /* Bit reversed order to get same names for same minors with all
138 static const char *st_formats
[] = {
139 "", "r", "k", "s", "l", "t", "o", "u",
140 "m", "v", "p", "x", "a", "y", "q", "z"};
142 /* The default definitions have been moved to st_options.h */
144 #define ST_FIXED_BUFFER_SIZE (ST_FIXED_BUFFER_BLOCKS * ST_KILOBYTE)
146 /* The buffer size should fit into the 24 bits for length in the
147 6-byte SCSI read and write commands. */
148 #if ST_FIXED_BUFFER_SIZE >= (2 << 24 - 1)
149 #error "Buffer size should not exceed (2 << 24 - 1) bytes!"
152 static int debugging
= DEBUG
;
154 #define MAX_RETRIES 0
155 #define MAX_WRITE_RETRIES 0
156 #define MAX_READY_RETRIES 0
157 #define NO_TAPE NOT_READY
159 #define ST_TIMEOUT (900 * HZ)
160 #define ST_LONG_TIMEOUT (14000 * HZ)
162 /* Remove mode bits and auto-rewind bit (7) */
163 #define TAPE_NR(x) ( ((iminor(x) & ~255) >> (ST_NBR_MODE_BITS + 1)) | \
164 (iminor(x) & ~(-1 << ST_MODE_SHIFT)) )
165 #define TAPE_MODE(x) ((iminor(x) & ST_MODE_MASK) >> ST_MODE_SHIFT)
167 /* Construct the minor number from the device (d), mode (m), and non-rewind (n) data */
168 #define TAPE_MINOR(d, m, n) (((d & ~(255 >> (ST_NBR_MODE_BITS + 1))) << (ST_NBR_MODE_BITS + 1)) | \
169 (d & (255 >> (ST_NBR_MODE_BITS + 1))) | (m << ST_MODE_SHIFT) | ((n != 0) << 7) )
171 /* Internal ioctl to set both density (uppermost 8 bits) and blocksize (lower
173 #define SET_DENS_AND_BLK 0x10001
175 static DEFINE_RWLOCK(st_dev_arr_lock
);
177 static int st_fixed_buffer_size
= ST_FIXED_BUFFER_SIZE
;
178 static int st_max_sg_segs
= ST_MAX_SG
;
180 static struct scsi_tape
**scsi_tapes
= NULL
;
182 static int modes_defined
;
184 static struct st_buffer
*new_tape_buffer(int, int, int);
185 static int enlarge_buffer(struct st_buffer
*, int, int);
186 static void normalize_buffer(struct st_buffer
*);
187 static int append_to_buffer(const char __user
*, struct st_buffer
*, int);
188 static int from_buffer(struct st_buffer
*, char __user
*, int);
189 static void move_buffer_data(struct st_buffer
*, int);
190 static void buf_to_sg(struct st_buffer
*, unsigned int);
192 static int sgl_map_user_pages(struct scatterlist
*, const unsigned int,
193 unsigned long, size_t, int);
194 static int sgl_unmap_user_pages(struct scatterlist
*, const unsigned int, int);
196 static int st_probe(struct device
*);
197 static int st_remove(struct device
*);
199 static int do_create_sysfs_files(void);
200 static void do_remove_sysfs_files(void);
201 static int do_create_class_files(struct scsi_tape
*, int, int);
203 static struct scsi_driver st_template
= {
204 .owner
= THIS_MODULE
,
212 static int st_compression(struct scsi_tape
*, int);
214 static int find_partition(struct scsi_tape
*);
215 static int switch_partition(struct scsi_tape
*);
217 static int st_int_ioctl(struct scsi_tape
*, unsigned int, unsigned long);
219 static void scsi_tape_release(struct kref
*);
221 #define to_scsi_tape(obj) container_of(obj, struct scsi_tape, kref)
223 static DEFINE_MUTEX(st_ref_mutex
);
226 #include "osst_detect.h"
227 #ifndef SIGS_FROM_OSST
228 #define SIGS_FROM_OSST \
229 {"OnStream", "SC-", "", "osst"}, \
230 {"OnStream", "DI-", "", "osst"}, \
231 {"OnStream", "DP-", "", "osst"}, \
232 {"OnStream", "USB", "", "osst"}, \
233 {"OnStream", "FW-", "", "osst"}
236 static struct scsi_tape
*scsi_tape_get(int dev
)
238 struct scsi_tape
*STp
= NULL
;
240 mutex_lock(&st_ref_mutex
);
241 write_lock(&st_dev_arr_lock
);
243 if (dev
< st_dev_max
&& scsi_tapes
!= NULL
)
244 STp
= scsi_tapes
[dev
];
247 kref_get(&STp
->kref
);
252 if (scsi_device_get(STp
->device
))
258 kref_put(&STp
->kref
, scsi_tape_release
);
261 write_unlock(&st_dev_arr_lock
);
262 mutex_unlock(&st_ref_mutex
);
266 static void scsi_tape_put(struct scsi_tape
*STp
)
268 struct scsi_device
*sdev
= STp
->device
;
270 mutex_lock(&st_ref_mutex
);
271 kref_put(&STp
->kref
, scsi_tape_release
);
272 scsi_device_put(sdev
);
273 mutex_unlock(&st_ref_mutex
);
276 struct st_reject_data
{
280 char *driver_hint
; /* Name of the correct driver, NULL if unknown */
283 static struct st_reject_data reject_list
[] = {
284 /* {"XXX", "Yy-", "", NULL}, example */
288 /* If the device signature is on the list of incompatible drives, the
289 function returns a pointer to the name of the correct driver (if known) */
290 static char * st_incompatible(struct scsi_device
* SDp
)
292 struct st_reject_data
*rp
;
294 for (rp
=&(reject_list
[0]); rp
->vendor
!= NULL
; rp
++)
295 if (!strncmp(rp
->vendor
, SDp
->vendor
, strlen(rp
->vendor
)) &&
296 !strncmp(rp
->model
, SDp
->model
, strlen(rp
->model
)) &&
297 !strncmp(rp
->rev
, SDp
->rev
, strlen(rp
->rev
))) {
299 return rp
->driver_hint
;
307 static inline char *tape_name(struct scsi_tape
*tape
)
309 return tape
->disk
->disk_name
;
313 static void st_analyze_sense(struct st_request
*SRpnt
, struct st_cmdstatus
*s
)
316 const u8
*sense
= SRpnt
->sense
;
318 s
->have_sense
= scsi_normalize_sense(SRpnt
->sense
,
319 SCSI_SENSE_BUFFERSIZE
, &s
->sense_hdr
);
325 scsi_get_sense_info_fld(sense
, SCSI_SENSE_BUFFERSIZE
, &s
->uremainder64
);
326 switch (sense
[0] & 0x7f) {
331 s
->flags
= sense
[2] & 0xe0;
337 ucp
= scsi_sense_desc_find(sense
, SCSI_SENSE_BUFFERSIZE
, 4);
338 s
->flags
= ucp
? (ucp
[3] & 0xe0) : 0;
345 /* Convert the result to success code */
346 static int st_chk_result(struct scsi_tape
*STp
, struct st_request
* SRpnt
)
348 int result
= SRpnt
->result
;
350 DEB(const char *stp
;)
351 char *name
= tape_name(STp
);
352 struct st_cmdstatus
*cmdstatp
;
357 cmdstatp
= &STp
->buffer
->cmdstat
;
358 st_analyze_sense(SRpnt
, cmdstatp
);
360 if (cmdstatp
->have_sense
)
361 scode
= STp
->buffer
->cmdstat
.sense_hdr
.sense_key
;
367 printk(ST_DEB_MSG
"%s: Error: %x, cmd: %x %x %x %x %x %x\n",
369 SRpnt
->cmd
[0], SRpnt
->cmd
[1], SRpnt
->cmd
[2],
370 SRpnt
->cmd
[3], SRpnt
->cmd
[4], SRpnt
->cmd
[5]);
371 if (cmdstatp
->have_sense
)
372 __scsi_print_sense(name
, SRpnt
->sense
, SCSI_SENSE_BUFFERSIZE
);
374 if (!debugging
) { /* Abnormal conditions for tape */
375 if (!cmdstatp
->have_sense
)
377 "%s: Error %x (sugg. bt 0x%x, driver bt 0x%x, host bt 0x%x).\n",
378 name
, result
, suggestion(result
),
379 driver_byte(result
) & DRIVER_MASK
, host_byte(result
));
380 else if (cmdstatp
->have_sense
&&
382 scode
!= RECOVERED_ERROR
&&
383 /* scode != UNIT_ATTENTION && */
384 scode
!= BLANK_CHECK
&&
385 scode
!= VOLUME_OVERFLOW
&&
386 SRpnt
->cmd
[0] != MODE_SENSE
&&
387 SRpnt
->cmd
[0] != TEST_UNIT_READY
) {
389 __scsi_print_sense(name
, SRpnt
->sense
, SCSI_SENSE_BUFFERSIZE
);
393 if (cmdstatp
->fixed_format
&&
394 STp
->cln_mode
>= EXTENDED_SENSE_START
) { /* Only fixed format sense */
395 if (STp
->cln_sense_value
)
396 STp
->cleaning_req
|= ((SRpnt
->sense
[STp
->cln_mode
] &
397 STp
->cln_sense_mask
) == STp
->cln_sense_value
);
399 STp
->cleaning_req
|= ((SRpnt
->sense
[STp
->cln_mode
] &
400 STp
->cln_sense_mask
) != 0);
402 if (cmdstatp
->have_sense
&&
403 cmdstatp
->sense_hdr
.asc
== 0 && cmdstatp
->sense_hdr
.ascq
== 0x17)
404 STp
->cleaning_req
= 1; /* ASC and ASCQ => cleaning requested */
406 STp
->pos_unknown
|= STp
->device
->was_reset
;
408 if (cmdstatp
->have_sense
&&
409 scode
== RECOVERED_ERROR
410 #if ST_RECOVERED_WRITE_FATAL
411 && SRpnt
->cmd
[0] != WRITE_6
412 && SRpnt
->cmd
[0] != WRITE_FILEMARKS
415 STp
->recover_count
++;
420 if (SRpnt
->cmd
[0] == READ_6
)
422 else if (SRpnt
->cmd
[0] == WRITE_6
)
426 printk(ST_DEB_MSG
"%s: Recovered %s error (%d).\n", name
, stp
,
430 if (cmdstatp
->flags
== 0)
437 /* Wakeup from interrupt */
438 static void st_sleep_done(void *data
, char *sense
, int result
, int resid
)
440 struct st_request
*SRpnt
= data
;
441 struct scsi_tape
*STp
= SRpnt
->stp
;
443 memcpy(SRpnt
->sense
, sense
, SCSI_SENSE_BUFFERSIZE
);
444 (STp
->buffer
)->cmdstat
.midlevel_result
= SRpnt
->result
= result
;
445 DEB( STp
->write_pending
= 0; )
448 complete(SRpnt
->waiting
);
451 static struct st_request
*st_allocate_request(void)
453 return kzalloc(sizeof(struct st_request
), GFP_KERNEL
);
456 static void st_release_request(struct st_request
*streq
)
461 /* Do the scsi command. Waits until command performed if do_wait is true.
462 Otherwise write_behind_check() is used to check that the command
464 static struct st_request
*
465 st_do_scsi(struct st_request
* SRpnt
, struct scsi_tape
* STp
, unsigned char *cmd
,
466 int bytes
, int direction
, int timeout
, int retries
, int do_wait
)
468 struct completion
*waiting
;
470 /* if async, make sure there's no command outstanding */
471 if (!do_wait
&& ((STp
->buffer
)->last_SRpnt
)) {
472 printk(KERN_ERR
"%s: Async command already active.\n",
474 if (signal_pending(current
))
475 (STp
->buffer
)->syscall_result
= (-EINTR
);
477 (STp
->buffer
)->syscall_result
= (-EBUSY
);
482 SRpnt
= st_allocate_request();
484 DEBC( printk(KERN_ERR
"%s: Can't get SCSI request.\n",
486 if (signal_pending(current
))
487 (STp
->buffer
)->syscall_result
= (-EINTR
);
489 (STp
->buffer
)->syscall_result
= (-EBUSY
);
495 /* If async IO, set last_SRpnt. This ptr tells write_behind_check
496 which IO is outstanding. It's nulled out when the IO completes. */
498 (STp
->buffer
)->last_SRpnt
= SRpnt
;
500 waiting
= &STp
->wait
;
501 init_completion(waiting
);
502 SRpnt
->waiting
= waiting
;
504 if (!STp
->buffer
->do_dio
)
505 buf_to_sg(STp
->buffer
, bytes
);
507 memcpy(SRpnt
->cmd
, cmd
, sizeof(SRpnt
->cmd
));
508 STp
->buffer
->cmdstat
.have_sense
= 0;
509 STp
->buffer
->syscall_result
= 0;
511 if (scsi_execute_async(STp
->device
, cmd
, COMMAND_SIZE(cmd
[0]), direction
,
512 &((STp
->buffer
)->sg
[0]), bytes
, (STp
->buffer
)->sg_segs
,
513 timeout
, retries
, SRpnt
, st_sleep_done
, GFP_KERNEL
)) {
514 /* could not allocate the buffer or request was too large */
515 (STp
->buffer
)->syscall_result
= (-EBUSY
);
516 (STp
->buffer
)->last_SRpnt
= NULL
;
519 wait_for_completion(waiting
);
520 SRpnt
->waiting
= NULL
;
521 (STp
->buffer
)->syscall_result
= st_chk_result(STp
, SRpnt
);
528 /* Handle the write-behind checking (waits for completion). Returns -ENOSPC if
529 write has been correct but EOM early warning reached, -EIO if write ended in
530 error or zero if write successful. Asynchronous writes are used only in
531 variable block mode. */
532 static int write_behind_check(struct scsi_tape
* STp
)
535 struct st_buffer
*STbuffer
;
536 struct st_partstat
*STps
;
537 struct st_cmdstatus
*cmdstatp
;
538 struct st_request
*SRpnt
;
540 STbuffer
= STp
->buffer
;
541 if (!STbuffer
->writing
)
545 if (STp
->write_pending
)
551 wait_for_completion(&(STp
->wait
));
552 SRpnt
= STbuffer
->last_SRpnt
;
553 STbuffer
->last_SRpnt
= NULL
;
554 SRpnt
->waiting
= NULL
;
556 (STp
->buffer
)->syscall_result
= st_chk_result(STp
, SRpnt
);
557 st_release_request(SRpnt
);
559 STbuffer
->buffer_bytes
-= STbuffer
->writing
;
560 STps
= &(STp
->ps
[STp
->partition
]);
561 if (STps
->drv_block
>= 0) {
562 if (STp
->block_size
== 0)
565 STps
->drv_block
+= STbuffer
->writing
/ STp
->block_size
;
568 cmdstatp
= &STbuffer
->cmdstat
;
569 if (STbuffer
->syscall_result
) {
571 if (cmdstatp
->have_sense
&& !cmdstatp
->deferred
&&
572 (cmdstatp
->flags
& SENSE_EOM
) &&
573 (cmdstatp
->sense_hdr
.sense_key
== NO_SENSE
||
574 cmdstatp
->sense_hdr
.sense_key
== RECOVERED_ERROR
)) {
575 /* EOM at write-behind, has all data been written? */
576 if (!cmdstatp
->remainder_valid
||
577 cmdstatp
->uremainder64
== 0)
581 STps
->drv_block
= -1;
583 STbuffer
->writing
= 0;
585 DEB(if (debugging
&& retval
)
586 printk(ST_DEB_MSG
"%s: Async write error %x, return value %d.\n",
587 tape_name(STp
), STbuffer
->cmdstat
.midlevel_result
, retval
);) /* end DEB */
593 /* Step over EOF if it has been inadvertently crossed (ioctl not used because
594 it messes up the block number). */
595 static int cross_eof(struct scsi_tape
* STp
, int forward
)
597 struct st_request
*SRpnt
;
598 unsigned char cmd
[MAX_COMMAND_SIZE
];
601 cmd
[1] = 0x01; /* Space FileMarks */
606 cmd
[2] = cmd
[3] = cmd
[4] = 0xff; /* -1 filemarks */
609 DEBC(printk(ST_DEB_MSG
"%s: Stepping over filemark %s.\n",
610 tape_name(STp
), forward
? "forward" : "backward"));
612 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, 0, DMA_NONE
,
613 STp
->device
->timeout
, MAX_RETRIES
, 1);
615 return (STp
->buffer
)->syscall_result
;
617 st_release_request(SRpnt
);
620 if ((STp
->buffer
)->cmdstat
.midlevel_result
!= 0)
621 printk(KERN_ERR
"%s: Stepping over filemark %s failed.\n",
622 tape_name(STp
), forward
? "forward" : "backward");
624 return (STp
->buffer
)->syscall_result
;
628 /* Flush the write buffer (never need to write if variable blocksize). */
629 static int flush_write_buffer(struct scsi_tape
* STp
)
631 int offset
, transfer
, blks
;
633 unsigned char cmd
[MAX_COMMAND_SIZE
];
634 struct st_request
*SRpnt
;
635 struct st_partstat
*STps
;
637 result
= write_behind_check(STp
);
642 if (STp
->dirty
== 1) {
644 offset
= (STp
->buffer
)->buffer_bytes
;
645 transfer
= ((offset
+ STp
->block_size
- 1) /
646 STp
->block_size
) * STp
->block_size
;
647 DEBC(printk(ST_DEB_MSG
"%s: Flushing %d bytes.\n",
648 tape_name(STp
), transfer
));
650 memset((STp
->buffer
)->b_data
+ offset
, 0, transfer
- offset
);
652 memset(cmd
, 0, MAX_COMMAND_SIZE
);
655 blks
= transfer
/ STp
->block_size
;
660 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, transfer
, DMA_TO_DEVICE
,
661 STp
->device
->timeout
, MAX_WRITE_RETRIES
, 1);
663 return (STp
->buffer
)->syscall_result
;
665 STps
= &(STp
->ps
[STp
->partition
]);
666 if ((STp
->buffer
)->syscall_result
!= 0) {
667 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
669 if (cmdstatp
->have_sense
&& !cmdstatp
->deferred
&&
670 (cmdstatp
->flags
& SENSE_EOM
) &&
671 (cmdstatp
->sense_hdr
.sense_key
== NO_SENSE
||
672 cmdstatp
->sense_hdr
.sense_key
== RECOVERED_ERROR
) &&
673 (!cmdstatp
->remainder_valid
||
674 cmdstatp
->uremainder64
== 0)) { /* All written at EOM early warning */
676 (STp
->buffer
)->buffer_bytes
= 0;
677 if (STps
->drv_block
>= 0)
678 STps
->drv_block
+= blks
;
681 printk(KERN_ERR
"%s: Error on flush.\n",
683 STps
->drv_block
= (-1);
687 if (STps
->drv_block
>= 0)
688 STps
->drv_block
+= blks
;
690 (STp
->buffer
)->buffer_bytes
= 0;
692 st_release_request(SRpnt
);
699 /* Flush the tape buffer. The tape will be positioned correctly unless
700 seek_next is true. */
701 static int flush_buffer(struct scsi_tape
*STp
, int seek_next
)
703 int backspace
, result
;
704 struct st_buffer
*STbuffer
;
705 struct st_partstat
*STps
;
707 STbuffer
= STp
->buffer
;
710 * If there was a bus reset, block further access
713 if (STp
->pos_unknown
)
716 if (STp
->ready
!= ST_READY
)
718 STps
= &(STp
->ps
[STp
->partition
]);
719 if (STps
->rw
== ST_WRITING
) /* Writing */
720 return flush_write_buffer(STp
);
722 if (STp
->block_size
== 0)
725 backspace
= ((STp
->buffer
)->buffer_bytes
+
726 (STp
->buffer
)->read_pointer
) / STp
->block_size
-
727 ((STp
->buffer
)->read_pointer
+ STp
->block_size
- 1) /
729 (STp
->buffer
)->buffer_bytes
= 0;
730 (STp
->buffer
)->read_pointer
= 0;
733 if (STps
->eof
== ST_FM_HIT
) {
734 result
= cross_eof(STp
, 0); /* Back over the EOF hit */
736 STps
->eof
= ST_NOEOF
;
738 if (STps
->drv_file
>= 0)
743 if (!result
&& backspace
> 0)
744 result
= st_int_ioctl(STp
, MTBSR
, backspace
);
745 } else if (STps
->eof
== ST_FM_HIT
) {
746 if (STps
->drv_file
>= 0)
749 STps
->eof
= ST_NOEOF
;
755 /* Set the mode parameters */
756 static int set_mode_densblk(struct scsi_tape
* STp
, struct st_modedef
* STm
)
760 char *name
= tape_name(STp
);
762 if (!STp
->density_changed
&&
763 STm
->default_density
>= 0 &&
764 STm
->default_density
!= STp
->density
) {
765 arg
= STm
->default_density
;
769 arg
<<= MT_ST_DENSITY_SHIFT
;
770 if (!STp
->blksize_changed
&&
771 STm
->default_blksize
>= 0 &&
772 STm
->default_blksize
!= STp
->block_size
) {
773 arg
|= STm
->default_blksize
;
776 arg
|= STp
->block_size
;
778 st_int_ioctl(STp
, SET_DENS_AND_BLK
, arg
)) {
780 "%s: Can't set default block size to %d bytes and density %x.\n",
781 name
, STm
->default_blksize
, STm
->default_density
);
789 /* Lock or unlock the drive door. Don't use when st_request allocated. */
790 static int do_door_lock(struct scsi_tape
* STp
, int do_lock
)
793 DEB(char *name
= tape_name(STp
);)
796 cmd
= do_lock
? SCSI_IOCTL_DOORLOCK
: SCSI_IOCTL_DOORUNLOCK
;
797 DEBC(printk(ST_DEB_MSG
"%s: %socking drive door.\n", name
,
798 do_lock
? "L" : "Unl"));
799 retval
= scsi_ioctl(STp
->device
, cmd
, NULL
);
801 STp
->door_locked
= do_lock
? ST_LOCKED_EXPLICIT
: ST_UNLOCKED
;
804 STp
->door_locked
= ST_LOCK_FAILS
;
810 /* Set the internal state after reset */
811 static void reset_state(struct scsi_tape
*STp
)
814 struct st_partstat
*STps
;
816 STp
->pos_unknown
= 0;
817 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
818 STps
= &(STp
->ps
[i
]);
820 STps
->eof
= ST_NOEOF
;
822 STps
->last_block_valid
= 0;
823 STps
->drv_block
= -1;
826 if (STp
->can_partitions
) {
827 STp
->partition
= find_partition(STp
);
828 if (STp
->partition
< 0)
830 STp
->new_partition
= STp
->partition
;
834 /* Test if the drive is ready. Returns either one of the codes below or a negative system
836 #define CHKRES_READY 0
837 #define CHKRES_NEW_SESSION 1
838 #define CHKRES_NOT_READY 2
839 #define CHKRES_NO_TAPE 3
841 #define MAX_ATTENTIONS 10
843 static int test_ready(struct scsi_tape
*STp
, int do_wait
)
845 int attentions
, waits
, max_wait
, scode
;
846 int retval
= CHKRES_READY
, new_session
= 0;
847 unsigned char cmd
[MAX_COMMAND_SIZE
];
848 struct st_request
*SRpnt
= NULL
;
849 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
851 max_wait
= do_wait
? ST_BLOCK_SECONDS
: 0;
853 for (attentions
=waits
=0; ; ) {
854 memset((void *) &cmd
[0], 0, MAX_COMMAND_SIZE
);
855 cmd
[0] = TEST_UNIT_READY
;
856 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, 0, DMA_NONE
,
857 STp
->long_timeout
, MAX_READY_RETRIES
, 1);
860 retval
= (STp
->buffer
)->syscall_result
;
864 if (cmdstatp
->have_sense
) {
866 scode
= cmdstatp
->sense_hdr
.sense_key
;
868 if (scode
== UNIT_ATTENTION
) { /* New media? */
870 if (attentions
< MAX_ATTENTIONS
) {
880 if (scode
== NOT_READY
) {
881 if (waits
< max_wait
) {
882 if (msleep_interruptible(1000)) {
890 if ((STp
->device
)->scsi_level
>= SCSI_2
&&
891 cmdstatp
->sense_hdr
.asc
== 0x3a) /* Check ASC */
892 retval
= CHKRES_NO_TAPE
;
894 retval
= CHKRES_NOT_READY
;
900 retval
= (STp
->buffer
)->syscall_result
;
902 retval
= new_session
? CHKRES_NEW_SESSION
: CHKRES_READY
;
907 st_release_request(SRpnt
);
912 /* See if the drive is ready and gather information about the tape. Return values:
913 < 0 negative error code from errno.h
915 1 drive not ready (possibly no tape)
917 static int check_tape(struct scsi_tape
*STp
, struct file
*filp
)
919 int i
, retval
, new_session
= 0, do_wait
;
920 unsigned char cmd
[MAX_COMMAND_SIZE
], saved_cleaning
;
921 unsigned short st_flags
= filp
->f_flags
;
922 struct st_request
*SRpnt
= NULL
;
923 struct st_modedef
*STm
;
924 struct st_partstat
*STps
;
925 char *name
= tape_name(STp
);
926 struct inode
*inode
= filp
->f_path
.dentry
->d_inode
;
927 int mode
= TAPE_MODE(inode
);
929 STp
->ready
= ST_READY
;
931 if (mode
!= STp
->current_mode
) {
932 DEBC(printk(ST_DEB_MSG
"%s: Mode change from %d to %d.\n",
933 name
, STp
->current_mode
, mode
));
935 STp
->current_mode
= mode
;
937 STm
= &(STp
->modes
[STp
->current_mode
]);
939 saved_cleaning
= STp
->cleaning_req
;
940 STp
->cleaning_req
= 0;
942 do_wait
= ((filp
->f_flags
& O_NONBLOCK
) == 0);
943 retval
= test_ready(STp
, do_wait
);
948 if (retval
== CHKRES_NEW_SESSION
) {
949 STp
->pos_unknown
= 0;
950 STp
->partition
= STp
->new_partition
= 0;
951 if (STp
->can_partitions
)
952 STp
->nbr_partitions
= 1; /* This guess will be updated later
954 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
955 STps
= &(STp
->ps
[i
]);
957 STps
->eof
= ST_NOEOF
;
959 STps
->last_block_valid
= 0;
966 STp
->cleaning_req
|= saved_cleaning
;
968 if (retval
== CHKRES_NOT_READY
|| retval
== CHKRES_NO_TAPE
) {
969 if (retval
== CHKRES_NO_TAPE
)
970 STp
->ready
= ST_NO_TAPE
;
972 STp
->ready
= ST_NOT_READY
;
974 STp
->density
= 0; /* Clear the erroneous "residue" */
977 STp
->ps
[0].drv_file
= STp
->ps
[0].drv_block
= (-1);
978 STp
->partition
= STp
->new_partition
= 0;
979 STp
->door_locked
= ST_UNLOCKED
;
980 return CHKRES_NOT_READY
;
984 if (STp
->omit_blklims
)
985 STp
->min_block
= STp
->max_block
= (-1);
987 memset((void *) &cmd
[0], 0, MAX_COMMAND_SIZE
);
988 cmd
[0] = READ_BLOCK_LIMITS
;
990 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, 6, DMA_FROM_DEVICE
,
991 STp
->device
->timeout
, MAX_READY_RETRIES
, 1);
993 retval
= (STp
->buffer
)->syscall_result
;
997 if (!SRpnt
->result
&& !STp
->buffer
->cmdstat
.have_sense
) {
998 STp
->max_block
= ((STp
->buffer
)->b_data
[1] << 16) |
999 ((STp
->buffer
)->b_data
[2] << 8) | (STp
->buffer
)->b_data
[3];
1000 STp
->min_block
= ((STp
->buffer
)->b_data
[4] << 8) |
1001 (STp
->buffer
)->b_data
[5];
1002 if ( DEB( debugging
|| ) !STp
->inited
)
1004 "%s: Block limits %d - %d bytes.\n", name
,
1005 STp
->min_block
, STp
->max_block
);
1007 STp
->min_block
= STp
->max_block
= (-1);
1008 DEBC(printk(ST_DEB_MSG
"%s: Can't read block limits.\n",
1013 memset((void *) &cmd
[0], 0, MAX_COMMAND_SIZE
);
1014 cmd
[0] = MODE_SENSE
;
1017 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, 12, DMA_FROM_DEVICE
,
1018 STp
->device
->timeout
, MAX_READY_RETRIES
, 1);
1020 retval
= (STp
->buffer
)->syscall_result
;
1024 if ((STp
->buffer
)->syscall_result
!= 0) {
1025 DEBC(printk(ST_DEB_MSG
"%s: No Mode Sense.\n", name
));
1026 STp
->block_size
= ST_DEFAULT_BLOCK
; /* Educated guess (?) */
1027 (STp
->buffer
)->syscall_result
= 0; /* Prevent error propagation */
1028 STp
->drv_write_prot
= 0;
1030 DEBC(printk(ST_DEB_MSG
1031 "%s: Mode sense. Length %d, medium %x, WBS %x, BLL %d\n",
1033 (STp
->buffer
)->b_data
[0], (STp
->buffer
)->b_data
[1],
1034 (STp
->buffer
)->b_data
[2], (STp
->buffer
)->b_data
[3]));
1036 if ((STp
->buffer
)->b_data
[3] >= 8) {
1037 STp
->drv_buffer
= ((STp
->buffer
)->b_data
[2] >> 4) & 7;
1038 STp
->density
= (STp
->buffer
)->b_data
[4];
1039 STp
->block_size
= (STp
->buffer
)->b_data
[9] * 65536 +
1040 (STp
->buffer
)->b_data
[10] * 256 + (STp
->buffer
)->b_data
[11];
1041 DEBC(printk(ST_DEB_MSG
1042 "%s: Density %x, tape length: %x, drv buffer: %d\n",
1043 name
, STp
->density
, (STp
->buffer
)->b_data
[5] * 65536 +
1044 (STp
->buffer
)->b_data
[6] * 256 + (STp
->buffer
)->b_data
[7],
1047 STp
->drv_write_prot
= ((STp
->buffer
)->b_data
[2] & 0x80) != 0;
1049 st_release_request(SRpnt
);
1053 if (STp
->block_size
> 0)
1054 (STp
->buffer
)->buffer_blocks
=
1055 (STp
->buffer
)->buffer_size
/ STp
->block_size
;
1057 (STp
->buffer
)->buffer_blocks
= 1;
1058 (STp
->buffer
)->buffer_bytes
= (STp
->buffer
)->read_pointer
= 0;
1060 DEBC(printk(ST_DEB_MSG
1061 "%s: Block size: %d, buffer size: %d (%d blocks).\n", name
,
1062 STp
->block_size
, (STp
->buffer
)->buffer_size
,
1063 (STp
->buffer
)->buffer_blocks
));
1065 if (STp
->drv_write_prot
) {
1066 STp
->write_prot
= 1;
1068 DEBC(printk(ST_DEB_MSG
"%s: Write protected\n", name
));
1071 ((st_flags
& O_ACCMODE
) == O_WRONLY
||
1072 (st_flags
& O_ACCMODE
) == O_RDWR
)) {
1078 if (STp
->can_partitions
&& STp
->nbr_partitions
< 1) {
1079 /* This code is reached when the device is opened for the first time
1080 after the driver has been initialized with tape in the drive and the
1081 partition support has been enabled. */
1082 DEBC(printk(ST_DEB_MSG
1083 "%s: Updating partition number in status.\n", name
));
1084 if ((STp
->partition
= find_partition(STp
)) < 0) {
1085 retval
= STp
->partition
;
1088 STp
->new_partition
= STp
->partition
;
1089 STp
->nbr_partitions
= 1; /* This guess will be updated when necessary */
1092 if (new_session
) { /* Change the drive parameters for the new mode */
1093 STp
->density_changed
= STp
->blksize_changed
= 0;
1094 STp
->compression_changed
= 0;
1095 if (!(STm
->defaults_for_writes
) &&
1096 (retval
= set_mode_densblk(STp
, STm
)) < 0)
1099 if (STp
->default_drvbuffer
!= 0xff) {
1100 if (st_int_ioctl(STp
, MTSETDRVBUFFER
, STp
->default_drvbuffer
))
1102 "%s: Can't set default drive buffering to %d.\n",
1103 name
, STp
->default_drvbuffer
);
1107 return CHKRES_READY
;
1114 \f/* Open the device. Needs to be called with BKL only because of incrementing the SCSI host
1116 static int st_open(struct inode
*inode
, struct file
*filp
)
1118 int i
, retval
= (-EIO
);
1119 struct scsi_tape
*STp
;
1120 struct st_partstat
*STps
;
1121 int dev
= TAPE_NR(inode
);
1125 * We really want to do nonseekable_open(inode, filp); here, but some
1126 * versions of tar incorrectly call lseek on tapes and bail out if that
1127 * fails. So we disallow pread() and pwrite(), but permit lseeks.
1129 filp
->f_mode
&= ~(FMODE_PREAD
| FMODE_PWRITE
);
1131 if (!(STp
= scsi_tape_get(dev
)))
1134 write_lock(&st_dev_arr_lock
);
1135 filp
->private_data
= STp
;
1136 name
= tape_name(STp
);
1139 write_unlock(&st_dev_arr_lock
);
1141 DEB( printk(ST_DEB_MSG
"%s: Device already in use.\n", name
); )
1146 write_unlock(&st_dev_arr_lock
);
1147 STp
->rew_at_close
= STp
->autorew_dev
= (iminor(inode
) & 0x80) == 0;
1149 if (!scsi_block_when_processing_errors(STp
->device
)) {
1154 /* See that we have at least a one page buffer available */
1155 if (!enlarge_buffer(STp
->buffer
, PAGE_SIZE
, STp
->restr_dma
)) {
1156 printk(KERN_WARNING
"%s: Can't allocate one page tape buffer.\n",
1158 retval
= (-EOVERFLOW
);
1162 (STp
->buffer
)->writing
= 0;
1163 (STp
->buffer
)->syscall_result
= 0;
1165 STp
->write_prot
= ((filp
->f_flags
& O_ACCMODE
) == O_RDONLY
);
1168 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
1169 STps
= &(STp
->ps
[i
]);
1172 STp
->try_dio_now
= STp
->try_dio
;
1173 STp
->recover_count
= 0;
1174 DEB( STp
->nbr_waits
= STp
->nbr_finished
= 0;
1175 STp
->nbr_requests
= STp
->nbr_dio
= STp
->nbr_pages
= 0; )
1177 retval
= check_tape(STp
, filp
);
1180 if ((filp
->f_flags
& O_NONBLOCK
) == 0 &&
1181 retval
!= CHKRES_READY
) {
1182 if (STp
->ready
== NO_TAPE
)
1183 retval
= (-ENOMEDIUM
);
1191 normalize_buffer(STp
->buffer
);
1199 /* Flush the tape buffer before close */
1200 static int st_flush(struct file
*filp
, fl_owner_t id
)
1202 int result
= 0, result2
;
1203 unsigned char cmd
[MAX_COMMAND_SIZE
];
1204 struct st_request
*SRpnt
;
1205 struct scsi_tape
*STp
= filp
->private_data
;
1206 struct st_modedef
*STm
= &(STp
->modes
[STp
->current_mode
]);
1207 struct st_partstat
*STps
= &(STp
->ps
[STp
->partition
]);
1208 char *name
= tape_name(STp
);
1210 if (file_count(filp
) > 1)
1213 if (STps
->rw
== ST_WRITING
&& !STp
->pos_unknown
) {
1214 result
= flush_write_buffer(STp
);
1215 if (result
!= 0 && result
!= (-ENOSPC
))
1219 if (STp
->can_partitions
&&
1220 (result2
= switch_partition(STp
)) < 0) {
1221 DEBC(printk(ST_DEB_MSG
1222 "%s: switch_partition at close failed.\n", name
));
1228 DEBC( if (STp
->nbr_requests
)
1229 printk(KERN_DEBUG
"%s: Number of r/w requests %d, dio used in %d, pages %d.\n",
1230 name
, STp
->nbr_requests
, STp
->nbr_dio
, STp
->nbr_pages
));
1232 if (STps
->rw
== ST_WRITING
&& !STp
->pos_unknown
) {
1233 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
1235 DEBC(printk(ST_DEB_MSG
"%s: Async write waits %d, finished %d.\n",
1236 name
, STp
->nbr_waits
, STp
->nbr_finished
);
1239 memset(cmd
, 0, MAX_COMMAND_SIZE
);
1240 cmd
[0] = WRITE_FILEMARKS
;
1241 cmd
[4] = 1 + STp
->two_fm
;
1243 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, 0, DMA_NONE
,
1244 STp
->device
->timeout
, MAX_WRITE_RETRIES
, 1);
1246 result
= (STp
->buffer
)->syscall_result
;
1250 if (STp
->buffer
->syscall_result
== 0 ||
1251 (cmdstatp
->have_sense
&& !cmdstatp
->deferred
&&
1252 (cmdstatp
->flags
& SENSE_EOM
) &&
1253 (cmdstatp
->sense_hdr
.sense_key
== NO_SENSE
||
1254 cmdstatp
->sense_hdr
.sense_key
== RECOVERED_ERROR
) &&
1255 (!cmdstatp
->remainder_valid
|| cmdstatp
->uremainder64
== 0))) {
1256 /* Write successful at EOM */
1257 st_release_request(SRpnt
);
1259 if (STps
->drv_file
>= 0)
1261 STps
->drv_block
= 0;
1266 else { /* Write error */
1267 st_release_request(SRpnt
);
1269 printk(KERN_ERR
"%s: Error on write filemark.\n", name
);
1274 DEBC(printk(ST_DEB_MSG
"%s: Buffer flushed, %d EOF(s) written\n",
1276 } else if (!STp
->rew_at_close
) {
1277 STps
= &(STp
->ps
[STp
->partition
]);
1278 if (!STm
->sysv
|| STps
->rw
!= ST_READING
) {
1280 result
= flush_buffer(STp
, 0);
1281 else if (STps
->eof
== ST_FM_HIT
) {
1282 result
= cross_eof(STp
, 0);
1284 if (STps
->drv_file
>= 0)
1286 STps
->drv_block
= 0;
1289 STps
->eof
= ST_NOEOF
;
1291 } else if ((STps
->eof
== ST_NOEOF
&&
1292 !(result
= cross_eof(STp
, 1))) ||
1293 STps
->eof
== ST_FM_HIT
) {
1294 if (STps
->drv_file
>= 0)
1296 STps
->drv_block
= 0;
1302 if (STp
->rew_at_close
) {
1303 result2
= st_int_ioctl(STp
, MTREW
, 1);
1311 /* Close the device and release it. BKL is not needed: this is the only thread
1312 accessing this tape. */
1313 static int st_release(struct inode
*inode
, struct file
*filp
)
1316 struct scsi_tape
*STp
= filp
->private_data
;
1318 if (STp
->door_locked
== ST_LOCKED_AUTO
)
1319 do_door_lock(STp
, 0);
1321 normalize_buffer(STp
->buffer
);
1322 write_lock(&st_dev_arr_lock
);
1324 write_unlock(&st_dev_arr_lock
);
1330 /* The checks common to both reading and writing */
1331 static ssize_t
rw_checks(struct scsi_tape
*STp
, struct file
*filp
, size_t count
)
1336 * If we are in the middle of error recovery, don't let anyone
1337 * else try and use this device. Also, if error recovery fails, it
1338 * may try and take the device offline, in which case all further
1339 * access to the device is prohibited.
1341 if (!scsi_block_when_processing_errors(STp
->device
)) {
1346 if (STp
->ready
!= ST_READY
) {
1347 if (STp
->ready
== ST_NO_TAPE
)
1348 retval
= (-ENOMEDIUM
);
1354 if (! STp
->modes
[STp
->current_mode
].defined
) {
1361 * If there was a bus reset, block further access
1364 if (STp
->pos_unknown
) {
1374 printk(ST_DEB_MSG
"%s: Incorrect device.\n", tape_name(STp
));
1379 if (STp
->can_partitions
&&
1380 (retval
= switch_partition(STp
)) < 0)
1383 if (STp
->block_size
== 0 && STp
->max_block
> 0 &&
1384 (count
< STp
->min_block
|| count
> STp
->max_block
)) {
1389 if (STp
->do_auto_lock
&& STp
->door_locked
== ST_UNLOCKED
&&
1390 !do_door_lock(STp
, 1))
1391 STp
->door_locked
= ST_LOCKED_AUTO
;
1398 static int setup_buffering(struct scsi_tape
*STp
, const char __user
*buf
,
1399 size_t count
, int is_read
)
1401 int i
, bufsize
, retval
= 0;
1402 struct st_buffer
*STbp
= STp
->buffer
;
1405 i
= STp
->try_dio_now
&& try_rdio
;
1407 i
= STp
->try_dio_now
&& try_wdio
;
1409 if (i
&& ((unsigned long)buf
& queue_dma_alignment(
1410 STp
->device
->request_queue
)) == 0) {
1411 i
= sgl_map_user_pages(&(STbp
->sg
[0]), STbp
->use_sg
,
1412 (unsigned long)buf
, count
, (is_read
? READ
: WRITE
));
1415 STbp
->buffer_bytes
= 0; /* can be used as transfer counter */
1418 STbp
->do_dio
= 0; /* fall back to buffering with any error */
1419 STbp
->sg_segs
= STbp
->do_dio
;
1420 STbp
->frp_sg_current
= 0;
1424 STp
->nbr_pages
+= STbp
->do_dio
;
1429 DEB( STp
->nbr_requests
++; )
1431 if (!STbp
->do_dio
) {
1432 if (STp
->block_size
)
1433 bufsize
= STp
->block_size
> st_fixed_buffer_size
?
1434 STp
->block_size
: st_fixed_buffer_size
;
1437 if (bufsize
> STbp
->buffer_size
&&
1438 !enlarge_buffer(STbp
, bufsize
, STp
->restr_dma
)) {
1439 printk(KERN_WARNING
"%s: Can't allocate %d byte tape buffer.\n",
1440 tape_name(STp
), bufsize
);
1441 retval
= (-EOVERFLOW
);
1444 if (STp
->block_size
)
1445 STbp
->buffer_blocks
= bufsize
/ STp
->block_size
;
1453 /* Can be called more than once after each setup_buffer() */
1454 static void release_buffering(struct scsi_tape
*STp
, int is_read
)
1456 struct st_buffer
*STbp
;
1460 sgl_unmap_user_pages(&(STbp
->sg
[0]), STbp
->do_dio
, is_read
);
1469 st_write(struct file
*filp
, const char __user
*buf
, size_t count
, loff_t
* ppos
)
1472 ssize_t i
, do_count
, blks
, transfer
;
1474 int undone
, retry_eot
= 0, scode
;
1476 unsigned char cmd
[MAX_COMMAND_SIZE
];
1477 const char __user
*b_point
;
1478 struct st_request
*SRpnt
= NULL
;
1479 struct scsi_tape
*STp
= filp
->private_data
;
1480 struct st_modedef
*STm
;
1481 struct st_partstat
*STps
;
1482 struct st_buffer
*STbp
;
1483 char *name
= tape_name(STp
);
1485 if (mutex_lock_interruptible(&STp
->lock
))
1486 return -ERESTARTSYS
;
1488 retval
= rw_checks(STp
, filp
, count
);
1489 if (retval
|| count
== 0)
1492 /* Write must be integral number of blocks */
1493 if (STp
->block_size
!= 0 && (count
% STp
->block_size
) != 0) {
1494 printk(KERN_WARNING
"%s: Write not multiple of tape block size.\n",
1500 STm
= &(STp
->modes
[STp
->current_mode
]);
1501 STps
= &(STp
->ps
[STp
->partition
]);
1503 if (STp
->write_prot
) {
1509 if (STps
->rw
== ST_READING
) {
1510 retval
= flush_buffer(STp
, 0);
1513 STps
->rw
= ST_WRITING
;
1514 } else if (STps
->rw
!= ST_WRITING
&&
1515 STps
->drv_file
== 0 && STps
->drv_block
== 0) {
1516 if ((retval
= set_mode_densblk(STp
, STm
)) < 0)
1518 if (STm
->default_compression
!= ST_DONT_TOUCH
&&
1519 !(STp
->compression_changed
)) {
1520 if (st_compression(STp
, (STm
->default_compression
== ST_YES
))) {
1521 printk(KERN_WARNING
"%s: Can't set default compression.\n",
1523 if (modes_defined
) {
1532 i
= write_behind_check(STp
);
1535 STps
->eof
= ST_EOM_OK
;
1537 STps
->eof
= ST_EOM_ERROR
;
1540 if (STps
->eof
== ST_EOM_OK
) {
1541 STps
->eof
= ST_EOD_1
; /* allow next write */
1545 else if (STps
->eof
== ST_EOM_ERROR
) {
1550 /* Check the buffer readability in cases where copy_user might catch
1551 the problems after some tape movement. */
1552 if (STp
->block_size
!= 0 &&
1554 (copy_from_user(&i
, buf
, 1) != 0 ||
1555 copy_from_user(&i
, buf
+ count
- 1, 1) != 0)) {
1560 retval
= setup_buffering(STp
, buf
, count
, 0);
1566 memset(cmd
, 0, MAX_COMMAND_SIZE
);
1568 cmd
[1] = (STp
->block_size
!= 0);
1570 STps
->rw
= ST_WRITING
;
1573 while (count
> 0 && !retry_eot
) {
1579 if (STp
->block_size
== 0)
1582 do_count
= STbp
->buffer_blocks
* STp
->block_size
-
1584 if (do_count
> count
)
1588 i
= append_to_buffer(b_point
, STbp
, do_count
);
1595 b_point
+= do_count
;
1597 async_write
= STp
->block_size
== 0 && !STbp
->do_dio
&&
1598 STm
->do_async_writes
&& STps
->eof
< ST_EOM_OK
;
1600 if (STp
->block_size
!= 0 && STm
->do_buffer_writes
&&
1601 !(STp
->try_dio_now
&& try_wdio
) && STps
->eof
< ST_EOM_OK
&&
1602 STbp
->buffer_bytes
< STbp
->buffer_size
) {
1604 /* Don't write a buffer that is not full enough. */
1605 if (!async_write
&& count
== 0)
1610 if (STp
->block_size
== 0)
1611 blks
= transfer
= do_count
;
1614 blks
= STbp
->buffer_bytes
;
1617 blks
/= STp
->block_size
;
1618 transfer
= blks
* STp
->block_size
;
1620 cmd
[2] = blks
>> 16;
1624 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, transfer
, DMA_TO_DEVICE
,
1625 STp
->device
->timeout
, MAX_WRITE_RETRIES
, !async_write
);
1627 retval
= STbp
->syscall_result
;
1630 if (async_write
&& !STbp
->syscall_result
) {
1631 STbp
->writing
= transfer
;
1632 STp
->dirty
= !(STbp
->writing
==
1633 STbp
->buffer_bytes
);
1634 SRpnt
= NULL
; /* Prevent releasing this request! */
1635 DEB( STp
->write_pending
= 1; )
1639 if (STbp
->syscall_result
!= 0) {
1640 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
1642 DEBC(printk(ST_DEB_MSG
"%s: Error on write:\n", name
));
1643 if (cmdstatp
->have_sense
&& (cmdstatp
->flags
& SENSE_EOM
)) {
1644 scode
= cmdstatp
->sense_hdr
.sense_key
;
1645 if (cmdstatp
->remainder_valid
)
1646 undone
= (int)cmdstatp
->uremainder64
;
1647 else if (STp
->block_size
== 0 &&
1648 scode
== VOLUME_OVERFLOW
)
1652 if (STp
->block_size
!= 0)
1653 undone
*= STp
->block_size
;
1654 if (undone
<= do_count
) {
1655 /* Only data from this write is not written */
1658 if (STp
->block_size
)
1659 blks
= (transfer
- undone
) / STp
->block_size
;
1660 STps
->eof
= ST_EOM_OK
;
1661 /* Continue in fixed block mode if all written
1662 in this request but still something left to write
1663 (retval left to zero)
1665 if (STp
->block_size
== 0 ||
1666 undone
> 0 || count
== 0)
1667 retval
= (-ENOSPC
); /* EOM within current request */
1668 DEBC(printk(ST_DEB_MSG
1669 "%s: EOM with %d bytes unwritten.\n",
1672 /* EOT within data buffered earlier (possible only
1673 in fixed block mode without direct i/o) */
1674 if (!retry_eot
&& !cmdstatp
->deferred
&&
1675 (scode
== NO_SENSE
|| scode
== RECOVERED_ERROR
)) {
1676 move_buffer_data(STp
->buffer
, transfer
- undone
);
1678 if (STps
->drv_block
>= 0) {
1679 STps
->drv_block
+= (transfer
- undone
) /
1682 STps
->eof
= ST_EOM_OK
;
1683 DEBC(printk(ST_DEB_MSG
1684 "%s: Retry write of %d bytes at EOM.\n",
1685 name
, STp
->buffer
->buffer_bytes
));
1689 /* Either error within data buffered by driver or
1692 blks
= do_count
= 0;
1693 STps
->eof
= ST_EOM_ERROR
;
1694 STps
->drv_block
= (-1); /* Too cautious? */
1695 retval
= (-EIO
); /* EOM for old data */
1696 DEBC(printk(ST_DEB_MSG
1697 "%s: EOM with lost data.\n",
1703 STps
->drv_block
= (-1); /* Too cautious? */
1704 retval
= STbp
->syscall_result
;
1709 if (STps
->drv_block
>= 0) {
1710 if (STp
->block_size
== 0)
1711 STps
->drv_block
+= (do_count
> 0);
1713 STps
->drv_block
+= blks
;
1716 STbp
->buffer_bytes
= 0;
1719 if (retval
|| retry_eot
) {
1721 retval
= total
- count
;
1726 if (STps
->eof
== ST_EOD_1
)
1727 STps
->eof
= ST_EOM_OK
;
1728 else if (STps
->eof
!= ST_EOM_OK
)
1729 STps
->eof
= ST_NOEOF
;
1730 retval
= total
- count
;
1734 st_release_request(SRpnt
);
1735 release_buffering(STp
, 0);
1736 mutex_unlock(&STp
->lock
);
1741 /* Read data from the tape. Returns zero in the normal case, one if the
1742 eof status has changed, and the negative error code in case of a
1743 fatal error. Otherwise updates the buffer and the eof state.
1745 Does release user buffer mapping if it is set.
1747 static long read_tape(struct scsi_tape
*STp
, long count
,
1748 struct st_request
** aSRpnt
)
1750 int transfer
, blks
, bytes
;
1751 unsigned char cmd
[MAX_COMMAND_SIZE
];
1752 struct st_request
*SRpnt
;
1753 struct st_modedef
*STm
;
1754 struct st_partstat
*STps
;
1755 struct st_buffer
*STbp
;
1757 char *name
= tape_name(STp
);
1762 STm
= &(STp
->modes
[STp
->current_mode
]);
1763 STps
= &(STp
->ps
[STp
->partition
]);
1764 if (STps
->eof
== ST_FM_HIT
)
1768 if (STp
->block_size
== 0)
1769 blks
= bytes
= count
;
1771 if (!(STp
->try_dio_now
&& try_rdio
) && STm
->do_read_ahead
) {
1772 blks
= (STp
->buffer
)->buffer_blocks
;
1773 bytes
= blks
* STp
->block_size
;
1776 if (!STbp
->do_dio
&& bytes
> (STp
->buffer
)->buffer_size
)
1777 bytes
= (STp
->buffer
)->buffer_size
;
1778 blks
= bytes
/ STp
->block_size
;
1779 bytes
= blks
* STp
->block_size
;
1783 memset(cmd
, 0, MAX_COMMAND_SIZE
);
1785 cmd
[1] = (STp
->block_size
!= 0);
1786 cmd
[2] = blks
>> 16;
1791 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, bytes
, DMA_FROM_DEVICE
,
1792 STp
->device
->timeout
, MAX_RETRIES
, 1);
1793 release_buffering(STp
, 1);
1796 return STbp
->syscall_result
;
1798 STbp
->read_pointer
= 0;
1801 /* Something to check */
1802 if (STbp
->syscall_result
) {
1803 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
1806 DEBC(printk(ST_DEB_MSG
"%s: Sense: %2x %2x %2x %2x %2x %2x %2x %2x\n",
1808 SRpnt
->sense
[0], SRpnt
->sense
[1],
1809 SRpnt
->sense
[2], SRpnt
->sense
[3],
1810 SRpnt
->sense
[4], SRpnt
->sense
[5],
1811 SRpnt
->sense
[6], SRpnt
->sense
[7]));
1812 if (cmdstatp
->have_sense
) {
1814 if (cmdstatp
->sense_hdr
.sense_key
== BLANK_CHECK
)
1815 cmdstatp
->flags
&= 0xcf; /* No need for EOM in this case */
1817 if (cmdstatp
->flags
!= 0) { /* EOF, EOM, or ILI */
1818 /* Compute the residual count */
1819 if (cmdstatp
->remainder_valid
)
1820 transfer
= (int)cmdstatp
->uremainder64
;
1823 if (STp
->block_size
== 0 &&
1824 cmdstatp
->sense_hdr
.sense_key
== MEDIUM_ERROR
)
1827 if (cmdstatp
->flags
& SENSE_ILI
) { /* ILI */
1828 if (STp
->block_size
== 0) {
1829 if (transfer
<= 0) {
1832 "%s: Failed to read %d byte block with %d byte transfer.\n",
1833 name
, bytes
- transfer
, bytes
);
1834 if (STps
->drv_block
>= 0)
1835 STps
->drv_block
+= 1;
1836 STbp
->buffer_bytes
= 0;
1839 STbp
->buffer_bytes
= bytes
- transfer
;
1841 st_release_request(SRpnt
);
1842 SRpnt
= *aSRpnt
= NULL
;
1843 if (transfer
== blks
) { /* We did not get anything, error */
1844 printk(KERN_NOTICE
"%s: Incorrect block size.\n", name
);
1845 if (STps
->drv_block
>= 0)
1846 STps
->drv_block
+= blks
- transfer
+ 1;
1847 st_int_ioctl(STp
, MTBSR
, 1);
1850 /* We have some data, deliver it */
1851 STbp
->buffer_bytes
= (blks
- transfer
) *
1853 DEBC(printk(ST_DEB_MSG
1854 "%s: ILI but enough data received %ld %d.\n",
1855 name
, count
, STbp
->buffer_bytes
));
1856 if (STps
->drv_block
>= 0)
1857 STps
->drv_block
+= 1;
1858 if (st_int_ioctl(STp
, MTBSR
, 1))
1861 } else if (cmdstatp
->flags
& SENSE_FMK
) { /* FM overrides EOM */
1862 if (STps
->eof
!= ST_FM_HIT
)
1863 STps
->eof
= ST_FM_HIT
;
1865 STps
->eof
= ST_EOD_2
;
1866 if (STp
->block_size
== 0)
1867 STbp
->buffer_bytes
= 0;
1869 STbp
->buffer_bytes
=
1870 bytes
- transfer
* STp
->block_size
;
1871 DEBC(printk(ST_DEB_MSG
1872 "%s: EOF detected (%d bytes read).\n",
1873 name
, STbp
->buffer_bytes
));
1874 } else if (cmdstatp
->flags
& SENSE_EOM
) {
1875 if (STps
->eof
== ST_FM
)
1876 STps
->eof
= ST_EOD_1
;
1878 STps
->eof
= ST_EOM_OK
;
1879 if (STp
->block_size
== 0)
1880 STbp
->buffer_bytes
= bytes
- transfer
;
1882 STbp
->buffer_bytes
=
1883 bytes
- transfer
* STp
->block_size
;
1885 DEBC(printk(ST_DEB_MSG
"%s: EOM detected (%d bytes read).\n",
1886 name
, STbp
->buffer_bytes
));
1889 /* end of EOF, EOM, ILI test */
1890 else { /* nonzero sense key */
1891 DEBC(printk(ST_DEB_MSG
1892 "%s: Tape error while reading.\n", name
));
1893 STps
->drv_block
= (-1);
1894 if (STps
->eof
== ST_FM
&&
1895 cmdstatp
->sense_hdr
.sense_key
== BLANK_CHECK
) {
1896 DEBC(printk(ST_DEB_MSG
1897 "%s: Zero returned for first BLANK CHECK after EOF.\n",
1899 STps
->eof
= ST_EOD_2
; /* First BLANK_CHECK after FM */
1900 } else /* Some other extended sense code */
1904 if (STbp
->buffer_bytes
< 0) /* Caused by bogus sense data */
1905 STbp
->buffer_bytes
= 0;
1907 /* End of extended sense test */
1908 else { /* Non-extended sense */
1909 retval
= STbp
->syscall_result
;
1913 /* End of error handling */
1914 else /* Read successful */
1915 STbp
->buffer_bytes
= bytes
;
1917 if (STps
->drv_block
>= 0) {
1918 if (STp
->block_size
== 0)
1921 STps
->drv_block
+= STbp
->buffer_bytes
/ STp
->block_size
;
1929 st_read(struct file
*filp
, char __user
*buf
, size_t count
, loff_t
* ppos
)
1933 ssize_t i
, transfer
;
1934 int special
, do_dio
= 0;
1935 struct st_request
*SRpnt
= NULL
;
1936 struct scsi_tape
*STp
= filp
->private_data
;
1937 struct st_modedef
*STm
;
1938 struct st_partstat
*STps
;
1939 struct st_buffer
*STbp
= STp
->buffer
;
1940 DEB( char *name
= tape_name(STp
); )
1942 if (mutex_lock_interruptible(&STp
->lock
))
1943 return -ERESTARTSYS
;
1945 retval
= rw_checks(STp
, filp
, count
);
1946 if (retval
|| count
== 0)
1949 STm
= &(STp
->modes
[STp
->current_mode
]);
1950 if (STp
->block_size
!= 0 && (count
% STp
->block_size
) != 0) {
1951 if (!STm
->do_read_ahead
) {
1952 retval
= (-EINVAL
); /* Read must be integral number of blocks */
1955 STp
->try_dio_now
= 0; /* Direct i/o can't handle split blocks */
1958 STps
= &(STp
->ps
[STp
->partition
]);
1959 if (STps
->rw
== ST_WRITING
) {
1960 retval
= flush_buffer(STp
, 0);
1963 STps
->rw
= ST_READING
;
1966 if (debugging
&& STps
->eof
!= ST_NOEOF
)
1967 printk(ST_DEB_MSG
"%s: EOF/EOM flag up (%d). Bytes %d\n", name
,
1968 STps
->eof
, STbp
->buffer_bytes
);
1971 retval
= setup_buffering(STp
, buf
, count
, 1);
1974 do_dio
= STbp
->do_dio
;
1976 if (STbp
->buffer_bytes
== 0 &&
1977 STps
->eof
>= ST_EOD_1
) {
1978 if (STps
->eof
< ST_EOD
) {
1983 retval
= (-EIO
); /* EOM or Blank Check */
1988 /* Check the buffer writability before any tape movement. Don't alter
1990 if (copy_from_user(&i
, buf
, 1) != 0 ||
1991 copy_to_user(buf
, &i
, 1) != 0 ||
1992 copy_from_user(&i
, buf
+ count
- 1, 1) != 0 ||
1993 copy_to_user(buf
+ count
- 1, &i
, 1) != 0) {
1999 STps
->rw
= ST_READING
;
2002 /* Loop until enough data in buffer or a special condition found */
2003 for (total
= 0, special
= 0; total
< count
&& !special
;) {
2005 /* Get new data if the buffer is empty */
2006 if (STbp
->buffer_bytes
== 0) {
2007 special
= read_tape(STp
, count
- total
, &SRpnt
);
2008 if (special
< 0) { /* No need to continue read */
2014 /* Move the data from driver buffer to user buffer */
2015 if (STbp
->buffer_bytes
> 0) {
2017 if (debugging
&& STps
->eof
!= ST_NOEOF
)
2019 "%s: EOF up (%d). Left %d, needed %d.\n", name
,
2020 STps
->eof
, STbp
->buffer_bytes
,
2021 (int)(count
- total
));
2023 transfer
= STbp
->buffer_bytes
< count
- total
?
2024 STbp
->buffer_bytes
: count
- total
;
2026 i
= from_buffer(STbp
, buf
, transfer
);
2036 if (STp
->block_size
== 0)
2037 break; /* Read only one variable length block */
2039 } /* for (total = 0, special = 0;
2040 total < count && !special; ) */
2042 /* Change the eof state if no data from tape or buffer */
2044 if (STps
->eof
== ST_FM_HIT
) {
2046 STps
->drv_block
= 0;
2047 if (STps
->drv_file
>= 0)
2049 } else if (STps
->eof
== ST_EOD_1
) {
2050 STps
->eof
= ST_EOD_2
;
2051 STps
->drv_block
= 0;
2052 if (STps
->drv_file
>= 0)
2054 } else if (STps
->eof
== ST_EOD_2
)
2056 } else if (STps
->eof
== ST_FM
)
2057 STps
->eof
= ST_NOEOF
;
2061 if (SRpnt
!= NULL
) {
2062 st_release_request(SRpnt
);
2066 release_buffering(STp
, 1);
2067 STbp
->buffer_bytes
= 0;
2069 mutex_unlock(&STp
->lock
);
2077 /* Set the driver options */
2078 static void st_log_options(struct scsi_tape
* STp
, struct st_modedef
* STm
, char *name
)
2082 "%s: Mode %d options: buffer writes: %d, async writes: %d, read ahead: %d\n",
2083 name
, STp
->current_mode
, STm
->do_buffer_writes
, STm
->do_async_writes
,
2084 STm
->do_read_ahead
);
2086 "%s: can bsr: %d, two FMs: %d, fast mteom: %d, auto lock: %d,\n",
2087 name
, STp
->can_bsr
, STp
->two_fm
, STp
->fast_mteom
, STp
->do_auto_lock
);
2089 "%s: defs for wr: %d, no block limits: %d, partitions: %d, s2 log: %d\n",
2090 name
, STm
->defaults_for_writes
, STp
->omit_blklims
, STp
->can_partitions
,
2091 STp
->scsi2_logical
);
2093 "%s: sysv: %d nowait: %d\n", name
, STm
->sysv
, STp
->immediate
);
2094 printk(KERN_INFO
"%s: debugging: %d\n",
2101 static int st_set_options(struct scsi_tape
*STp
, long options
)
2105 struct st_modedef
*STm
;
2106 char *name
= tape_name(STp
);
2107 struct cdev
*cd0
, *cd1
;
2109 STm
= &(STp
->modes
[STp
->current_mode
]);
2110 if (!STm
->defined
) {
2111 cd0
= STm
->cdevs
[0]; cd1
= STm
->cdevs
[1];
2112 memcpy(STm
, &(STp
->modes
[0]), sizeof(struct st_modedef
));
2113 STm
->cdevs
[0] = cd0
; STm
->cdevs
[1] = cd1
;
2115 DEBC(printk(ST_DEB_MSG
2116 "%s: Initialized mode %d definition from mode 0\n",
2117 name
, STp
->current_mode
));
2120 code
= options
& MT_ST_OPTIONS
;
2121 if (code
== MT_ST_BOOLEANS
) {
2122 STm
->do_buffer_writes
= (options
& MT_ST_BUFFER_WRITES
) != 0;
2123 STm
->do_async_writes
= (options
& MT_ST_ASYNC_WRITES
) != 0;
2124 STm
->defaults_for_writes
= (options
& MT_ST_DEF_WRITES
) != 0;
2125 STm
->do_read_ahead
= (options
& MT_ST_READ_AHEAD
) != 0;
2126 STp
->two_fm
= (options
& MT_ST_TWO_FM
) != 0;
2127 STp
->fast_mteom
= (options
& MT_ST_FAST_MTEOM
) != 0;
2128 STp
->do_auto_lock
= (options
& MT_ST_AUTO_LOCK
) != 0;
2129 STp
->can_bsr
= (options
& MT_ST_CAN_BSR
) != 0;
2130 STp
->omit_blklims
= (options
& MT_ST_NO_BLKLIMS
) != 0;
2131 if ((STp
->device
)->scsi_level
>= SCSI_2
)
2132 STp
->can_partitions
= (options
& MT_ST_CAN_PARTITIONS
) != 0;
2133 STp
->scsi2_logical
= (options
& MT_ST_SCSI2LOGICAL
) != 0;
2134 STp
->immediate
= (options
& MT_ST_NOWAIT
) != 0;
2135 STm
->sysv
= (options
& MT_ST_SYSV
) != 0;
2136 DEB( debugging
= (options
& MT_ST_DEBUGGING
) != 0;
2137 st_log_options(STp
, STm
, name
); )
2138 } else if (code
== MT_ST_SETBOOLEANS
|| code
== MT_ST_CLEARBOOLEANS
) {
2139 value
= (code
== MT_ST_SETBOOLEANS
);
2140 if ((options
& MT_ST_BUFFER_WRITES
) != 0)
2141 STm
->do_buffer_writes
= value
;
2142 if ((options
& MT_ST_ASYNC_WRITES
) != 0)
2143 STm
->do_async_writes
= value
;
2144 if ((options
& MT_ST_DEF_WRITES
) != 0)
2145 STm
->defaults_for_writes
= value
;
2146 if ((options
& MT_ST_READ_AHEAD
) != 0)
2147 STm
->do_read_ahead
= value
;
2148 if ((options
& MT_ST_TWO_FM
) != 0)
2149 STp
->two_fm
= value
;
2150 if ((options
& MT_ST_FAST_MTEOM
) != 0)
2151 STp
->fast_mteom
= value
;
2152 if ((options
& MT_ST_AUTO_LOCK
) != 0)
2153 STp
->do_auto_lock
= value
;
2154 if ((options
& MT_ST_CAN_BSR
) != 0)
2155 STp
->can_bsr
= value
;
2156 if ((options
& MT_ST_NO_BLKLIMS
) != 0)
2157 STp
->omit_blklims
= value
;
2158 if ((STp
->device
)->scsi_level
>= SCSI_2
&&
2159 (options
& MT_ST_CAN_PARTITIONS
) != 0)
2160 STp
->can_partitions
= value
;
2161 if ((options
& MT_ST_SCSI2LOGICAL
) != 0)
2162 STp
->scsi2_logical
= value
;
2163 if ((options
& MT_ST_NOWAIT
) != 0)
2164 STp
->immediate
= value
;
2165 if ((options
& MT_ST_SYSV
) != 0)
2168 if ((options
& MT_ST_DEBUGGING
) != 0)
2170 st_log_options(STp
, STm
, name
); )
2171 } else if (code
== MT_ST_WRITE_THRESHOLD
) {
2172 /* Retained for compatibility */
2173 } else if (code
== MT_ST_DEF_BLKSIZE
) {
2174 value
= (options
& ~MT_ST_OPTIONS
);
2175 if (value
== ~MT_ST_OPTIONS
) {
2176 STm
->default_blksize
= (-1);
2177 DEBC( printk(KERN_INFO
"%s: Default block size disabled.\n", name
));
2179 STm
->default_blksize
= value
;
2180 DEBC( printk(KERN_INFO
"%s: Default block size set to %d bytes.\n",
2181 name
, STm
->default_blksize
));
2182 if (STp
->ready
== ST_READY
) {
2183 STp
->blksize_changed
= 0;
2184 set_mode_densblk(STp
, STm
);
2187 } else if (code
== MT_ST_TIMEOUTS
) {
2188 value
= (options
& ~MT_ST_OPTIONS
);
2189 if ((value
& MT_ST_SET_LONG_TIMEOUT
) != 0) {
2190 STp
->long_timeout
= (value
& ~MT_ST_SET_LONG_TIMEOUT
) * HZ
;
2191 DEBC( printk(KERN_INFO
"%s: Long timeout set to %d seconds.\n", name
,
2192 (value
& ~MT_ST_SET_LONG_TIMEOUT
)));
2194 STp
->device
->timeout
= value
* HZ
;
2195 DEBC( printk(KERN_INFO
"%s: Normal timeout set to %d seconds.\n",
2198 } else if (code
== MT_ST_SET_CLN
) {
2199 value
= (options
& ~MT_ST_OPTIONS
) & 0xff;
2201 value
< EXTENDED_SENSE_START
&& value
>= SCSI_SENSE_BUFFERSIZE
)
2203 STp
->cln_mode
= value
;
2204 STp
->cln_sense_mask
= (options
>> 8) & 0xff;
2205 STp
->cln_sense_value
= (options
>> 16) & 0xff;
2207 "%s: Cleaning request mode %d, mask %02x, value %02x\n",
2208 name
, value
, STp
->cln_sense_mask
, STp
->cln_sense_value
);
2209 } else if (code
== MT_ST_DEF_OPTIONS
) {
2210 code
= (options
& ~MT_ST_CLEAR_DEFAULT
);
2211 value
= (options
& MT_ST_CLEAR_DEFAULT
);
2212 if (code
== MT_ST_DEF_DENSITY
) {
2213 if (value
== MT_ST_CLEAR_DEFAULT
) {
2214 STm
->default_density
= (-1);
2215 DEBC( printk(KERN_INFO
"%s: Density default disabled.\n",
2218 STm
->default_density
= value
& 0xff;
2219 DEBC( printk(KERN_INFO
"%s: Density default set to %x\n",
2220 name
, STm
->default_density
));
2221 if (STp
->ready
== ST_READY
) {
2222 STp
->density_changed
= 0;
2223 set_mode_densblk(STp
, STm
);
2226 } else if (code
== MT_ST_DEF_DRVBUFFER
) {
2227 if (value
== MT_ST_CLEAR_DEFAULT
) {
2228 STp
->default_drvbuffer
= 0xff;
2229 DEBC( printk(KERN_INFO
2230 "%s: Drive buffer default disabled.\n", name
));
2232 STp
->default_drvbuffer
= value
& 7;
2233 DEBC( printk(KERN_INFO
2234 "%s: Drive buffer default set to %x\n",
2235 name
, STp
->default_drvbuffer
));
2236 if (STp
->ready
== ST_READY
)
2237 st_int_ioctl(STp
, MTSETDRVBUFFER
, STp
->default_drvbuffer
);
2239 } else if (code
== MT_ST_DEF_COMPRESSION
) {
2240 if (value
== MT_ST_CLEAR_DEFAULT
) {
2241 STm
->default_compression
= ST_DONT_TOUCH
;
2242 DEBC( printk(KERN_INFO
2243 "%s: Compression default disabled.\n", name
));
2245 if ((value
& 0xff00) != 0) {
2246 STp
->c_algo
= (value
& 0xff00) >> 8;
2247 DEBC( printk(KERN_INFO
"%s: Compression algorithm set to 0x%x.\n",
2248 name
, STp
->c_algo
));
2250 if ((value
& 0xff) != 0xff) {
2251 STm
->default_compression
= (value
& 1 ? ST_YES
: ST_NO
);
2252 DEBC( printk(KERN_INFO
"%s: Compression default set to %x\n",
2253 name
, (value
& 1)));
2254 if (STp
->ready
== ST_READY
) {
2255 STp
->compression_changed
= 0;
2256 st_compression(STp
, (STm
->default_compression
== ST_YES
));
2267 #define MODE_HEADER_LENGTH 4
2269 /* Mode header and page byte offsets */
2270 #define MH_OFF_DATA_LENGTH 0
2271 #define MH_OFF_MEDIUM_TYPE 1
2272 #define MH_OFF_DEV_SPECIFIC 2
2273 #define MH_OFF_BDESCS_LENGTH 3
2274 #define MP_OFF_PAGE_NBR 0
2275 #define MP_OFF_PAGE_LENGTH 1
2277 /* Mode header and page bit masks */
2278 #define MH_BIT_WP 0x80
2279 #define MP_MSK_PAGE_NBR 0x3f
2281 /* Don't return block descriptors */
2282 #define MODE_SENSE_OMIT_BDESCS 0x08
2284 #define MODE_SELECT_PAGE_FORMAT 0x10
2286 /* Read a mode page into the tape buffer. The block descriptors are included
2287 if incl_block_descs is true. The page control is ored to the page number
2288 parameter, if necessary. */
2289 static int read_mode_page(struct scsi_tape
*STp
, int page
, int omit_block_descs
)
2291 unsigned char cmd
[MAX_COMMAND_SIZE
];
2292 struct st_request
*SRpnt
= NULL
;
2294 memset(cmd
, 0, MAX_COMMAND_SIZE
);
2295 cmd
[0] = MODE_SENSE
;
2296 if (omit_block_descs
)
2297 cmd
[1] = MODE_SENSE_OMIT_BDESCS
;
2301 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, cmd
[4], DMA_FROM_DEVICE
,
2302 STp
->device
->timeout
, 0, 1);
2304 return (STp
->buffer
)->syscall_result
;
2306 st_release_request(SRpnt
);
2308 return (STp
->buffer
)->syscall_result
;
2312 /* Send the mode page in the tape buffer to the drive. Assumes that the mode data
2313 in the buffer is correctly formatted. The long timeout is used if slow is non-zero. */
2314 static int write_mode_page(struct scsi_tape
*STp
, int page
, int slow
)
2317 unsigned char cmd
[MAX_COMMAND_SIZE
];
2318 struct st_request
*SRpnt
= NULL
;
2320 memset(cmd
, 0, MAX_COMMAND_SIZE
);
2321 cmd
[0] = MODE_SELECT
;
2322 cmd
[1] = MODE_SELECT_PAGE_FORMAT
;
2323 pgo
= MODE_HEADER_LENGTH
+ (STp
->buffer
)->b_data
[MH_OFF_BDESCS_LENGTH
];
2324 cmd
[4] = pgo
+ (STp
->buffer
)->b_data
[pgo
+ MP_OFF_PAGE_LENGTH
] + 2;
2326 /* Clear reserved fields */
2327 (STp
->buffer
)->b_data
[MH_OFF_DATA_LENGTH
] = 0;
2328 (STp
->buffer
)->b_data
[MH_OFF_MEDIUM_TYPE
] = 0;
2329 (STp
->buffer
)->b_data
[MH_OFF_DEV_SPECIFIC
] &= ~MH_BIT_WP
;
2330 (STp
->buffer
)->b_data
[pgo
+ MP_OFF_PAGE_NBR
] &= MP_MSK_PAGE_NBR
;
2332 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, cmd
[4], DMA_TO_DEVICE
,
2333 (slow
? STp
->long_timeout
: STp
->device
->timeout
), 0, 1);
2335 return (STp
->buffer
)->syscall_result
;
2337 st_release_request(SRpnt
);
2339 return (STp
->buffer
)->syscall_result
;
2343 #define COMPRESSION_PAGE 0x0f
2344 #define COMPRESSION_PAGE_LENGTH 16
2346 #define CP_OFF_DCE_DCC 2
2347 #define CP_OFF_C_ALGO 7
2349 #define DCE_MASK 0x80
2350 #define DCC_MASK 0x40
2351 #define RED_MASK 0x60
2354 /* Control the compression with mode page 15. Algorithm not changed if zero.
2356 The block descriptors are read and written because Sony SDT-7000 does not
2357 work without this (suggestion from Michael Schaefer <Michael.Schaefer@dlr.de>).
2358 Including block descriptors should not cause any harm to other drives. */
2360 static int st_compression(struct scsi_tape
* STp
, int state
)
2363 int mpoffs
; /* Offset to mode page start */
2364 unsigned char *b_data
= (STp
->buffer
)->b_data
;
2365 DEB( char *name
= tape_name(STp
); )
2367 if (STp
->ready
!= ST_READY
)
2370 /* Read the current page contents */
2371 retval
= read_mode_page(STp
, COMPRESSION_PAGE
, 0);
2373 DEBC(printk(ST_DEB_MSG
"%s: Compression mode page not supported.\n",
2378 mpoffs
= MODE_HEADER_LENGTH
+ b_data
[MH_OFF_BDESCS_LENGTH
];
2379 DEBC(printk(ST_DEB_MSG
"%s: Compression state is %d.\n", name
,
2380 (b_data
[mpoffs
+ CP_OFF_DCE_DCC
] & DCE_MASK
? 1 : 0)));
2382 /* Check if compression can be changed */
2383 if ((b_data
[mpoffs
+ CP_OFF_DCE_DCC
] & DCC_MASK
) == 0) {
2384 DEBC(printk(ST_DEB_MSG
"%s: Compression not supported.\n", name
));
2390 b_data
[mpoffs
+ CP_OFF_DCE_DCC
] |= DCE_MASK
;
2391 if (STp
->c_algo
!= 0)
2392 b_data
[mpoffs
+ CP_OFF_C_ALGO
] = STp
->c_algo
;
2395 b_data
[mpoffs
+ CP_OFF_DCE_DCC
] &= ~DCE_MASK
;
2396 if (STp
->c_algo
!= 0)
2397 b_data
[mpoffs
+ CP_OFF_C_ALGO
] = 0; /* no compression */
2400 retval
= write_mode_page(STp
, COMPRESSION_PAGE
, 0);
2402 DEBC(printk(ST_DEB_MSG
"%s: Compression change failed.\n", name
));
2405 DEBC(printk(ST_DEB_MSG
"%s: Compression state changed to %d.\n",
2408 STp
->compression_changed
= 1;
2413 /* Process the load and unload commands (does unload if the load code is zero) */
2414 static int do_load_unload(struct scsi_tape
*STp
, struct file
*filp
, int load_code
)
2416 int retval
= (-EIO
), timeout
;
2417 DEB( char *name
= tape_name(STp
); )
2418 unsigned char cmd
[MAX_COMMAND_SIZE
];
2419 struct st_partstat
*STps
;
2420 struct st_request
*SRpnt
;
2422 if (STp
->ready
!= ST_READY
&& !load_code
) {
2423 if (STp
->ready
== ST_NO_TAPE
)
2424 return (-ENOMEDIUM
);
2429 memset(cmd
, 0, MAX_COMMAND_SIZE
);
2430 cmd
[0] = START_STOP
;
2434 * If arg >= 1 && arg <= 6 Enhanced load/unload in HP C1553A
2436 if (load_code
>= 1 + MT_ST_HPLOADER_OFFSET
2437 && load_code
<= 6 + MT_ST_HPLOADER_OFFSET
) {
2438 DEBC(printk(ST_DEB_MSG
"%s: Enhanced %sload slot %2d.\n",
2439 name
, (cmd
[4]) ? "" : "un",
2440 load_code
- MT_ST_HPLOADER_OFFSET
));
2441 cmd
[3] = load_code
- MT_ST_HPLOADER_OFFSET
; /* MediaID field of C1553A */
2443 if (STp
->immediate
) {
2444 cmd
[1] = 1; /* Don't wait for completion */
2445 timeout
= STp
->device
->timeout
;
2448 timeout
= STp
->long_timeout
;
2452 printk(ST_DEB_MSG
"%s: Unloading tape.\n", name
);
2454 printk(ST_DEB_MSG
"%s: Loading tape.\n", name
);
2457 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, 0, DMA_NONE
,
2458 timeout
, MAX_RETRIES
, 1);
2460 return (STp
->buffer
)->syscall_result
;
2462 retval
= (STp
->buffer
)->syscall_result
;
2463 st_release_request(SRpnt
);
2465 if (!retval
) { /* SCSI command successful */
2468 STp
->rew_at_close
= 0;
2469 STp
->ready
= ST_NO_TAPE
;
2472 STp
->rew_at_close
= STp
->autorew_dev
;
2473 retval
= check_tape(STp
, filp
);
2479 STps
= &(STp
->ps
[STp
->partition
]);
2480 STps
->drv_file
= STps
->drv_block
= (-1);
2487 #define ST_DEB_FORWARD 0
2488 #define ST_DEB_BACKWARD 1
2489 static void deb_space_print(char *name
, int direction
, char *units
, unsigned char *cmd
)
2493 sc
= cmd
[2] & 0x80 ? 0xff000000 : 0;
2494 sc
|= (cmd
[2] << 16) | (cmd
[3] << 8) | cmd
[4];
2497 printk(ST_DEB_MSG
"%s: Spacing tape %s over %d %s.\n", name
,
2498 direction
? "backward" : "forward", sc
, units
);
2503 /* Internal ioctl function */
2504 static int st_int_ioctl(struct scsi_tape
*STp
, unsigned int cmd_in
, unsigned long arg
)
2510 unsigned char cmd
[MAX_COMMAND_SIZE
];
2511 struct st_request
*SRpnt
;
2512 struct st_partstat
*STps
;
2513 int fileno
, blkno
, at_sm
, undone
;
2514 int datalen
= 0, direction
= DMA_NONE
;
2515 char *name
= tape_name(STp
);
2517 WARN_ON(STp
->buffer
->do_dio
!= 0);
2518 if (STp
->ready
!= ST_READY
) {
2519 if (STp
->ready
== ST_NO_TAPE
)
2520 return (-ENOMEDIUM
);
2524 timeout
= STp
->long_timeout
;
2525 STps
= &(STp
->ps
[STp
->partition
]);
2526 fileno
= STps
->drv_file
;
2527 blkno
= STps
->drv_block
;
2528 at_sm
= STps
->at_sm
;
2530 memset(cmd
, 0, MAX_COMMAND_SIZE
);
2533 chg_eof
= 0; /* Changed from the FSF after this */
2536 cmd
[1] = 0x01; /* Space FileMarks */
2537 cmd
[2] = (arg
>> 16);
2538 cmd
[3] = (arg
>> 8);
2540 DEBC(deb_space_print(name
, ST_DEB_FORWARD
, "filemarks", cmd
);)
2544 at_sm
&= (arg
== 0);
2547 chg_eof
= 0; /* Changed from the FSF after this */
2550 cmd
[1] = 0x01; /* Space FileMarks */
2552 cmd
[2] = (ltmp
>> 16);
2553 cmd
[3] = (ltmp
>> 8);
2555 DEBC(deb_space_print(name
, ST_DEB_BACKWARD
, "filemarks", cmd
);)
2558 blkno
= (-1); /* We can't know the block number */
2559 at_sm
&= (arg
== 0);
2563 cmd
[1] = 0x00; /* Space Blocks */
2564 cmd
[2] = (arg
>> 16);
2565 cmd
[3] = (arg
>> 8);
2567 DEBC(deb_space_print(name
, ST_DEB_FORWARD
, "blocks", cmd
);)
2570 at_sm
&= (arg
== 0);
2574 cmd
[1] = 0x00; /* Space Blocks */
2576 cmd
[2] = (ltmp
>> 16);
2577 cmd
[3] = (ltmp
>> 8);
2579 DEBC(deb_space_print(name
, ST_DEB_BACKWARD
, "blocks", cmd
);)
2582 at_sm
&= (arg
== 0);
2586 cmd
[1] = 0x04; /* Space Setmarks */
2587 cmd
[2] = (arg
>> 16);
2588 cmd
[3] = (arg
>> 8);
2590 DEBC(deb_space_print(name
, ST_DEB_FORWARD
, "setmarks", cmd
);)
2592 blkno
= fileno
= (-1);
2598 cmd
[1] = 0x04; /* Space Setmarks */
2600 cmd
[2] = (ltmp
>> 16);
2601 cmd
[3] = (ltmp
>> 8);
2603 DEBC(deb_space_print(name
, ST_DEB_BACKWARD
, "setmarks", cmd
);)
2605 blkno
= fileno
= (-1);
2611 if (STp
->write_prot
)
2613 cmd
[0] = WRITE_FILEMARKS
;
2614 if (cmd_in
== MTWSM
)
2616 cmd
[2] = (arg
>> 16);
2617 cmd
[3] = (arg
>> 8);
2619 timeout
= STp
->device
->timeout
;
2621 if (cmd_in
== MTWEOF
)
2622 printk(ST_DEB_MSG
"%s: Writing %d filemarks.\n", name
,
2623 cmd
[2] * 65536 + cmd
[3] * 256 + cmd
[4]);
2625 printk(ST_DEB_MSG
"%s: Writing %d setmarks.\n", name
,
2626 cmd
[2] * 65536 + cmd
[3] * 256 + cmd
[4]);
2631 at_sm
= (cmd_in
== MTWSM
);
2634 cmd
[0] = REZERO_UNIT
;
2635 if (STp
->immediate
) {
2636 cmd
[1] = 1; /* Don't wait for completion */
2637 timeout
= STp
->device
->timeout
;
2639 DEBC(printk(ST_DEB_MSG
"%s: Rewinding tape.\n", name
));
2640 fileno
= blkno
= at_sm
= 0;
2643 DEBC(printk(ST_DEB_MSG
"%s: No op on tape.\n", name
));
2644 return 0; /* Should do something ? */
2647 cmd
[0] = START_STOP
;
2648 if (STp
->immediate
) {
2649 cmd
[1] = 1; /* Don't wait for completion */
2650 timeout
= STp
->device
->timeout
;
2653 DEBC(printk(ST_DEB_MSG
"%s: Retensioning tape.\n", name
));
2654 fileno
= blkno
= at_sm
= 0;
2657 if (!STp
->fast_mteom
) {
2658 /* space to the end of tape */
2659 ioctl_result
= st_int_ioctl(STp
, MTFSF
, 0x7fffff);
2660 fileno
= STps
->drv_file
;
2661 if (STps
->eof
>= ST_EOD_1
)
2663 /* The next lines would hide the number of spaced FileMarks
2664 That's why I inserted the previous lines. I had no luck
2665 with detecting EOM with FSF, so we go now to EOM.
2671 DEBC(printk(ST_DEB_MSG
"%s: Spacing to end of recorded medium.\n",
2677 if (STp
->write_prot
)
2680 cmd
[1] = (arg
? 1 : 0); /* Long erase with non-zero argument */
2681 if (STp
->immediate
) {
2682 cmd
[1] |= 2; /* Don't wait for completion */
2683 timeout
= STp
->device
->timeout
;
2686 timeout
= STp
->long_timeout
* 8;
2688 DEBC(printk(ST_DEB_MSG
"%s: Erasing tape.\n", name
));
2689 fileno
= blkno
= at_sm
= 0;
2691 case MTSETBLK
: /* Set block length */
2692 case MTSETDENSITY
: /* Set tape density */
2693 case MTSETDRVBUFFER
: /* Set drive buffering */
2694 case SET_DENS_AND_BLK
: /* Set density and block size */
2696 if (STp
->dirty
|| (STp
->buffer
)->buffer_bytes
!= 0)
2697 return (-EIO
); /* Not allowed if data in buffer */
2698 if ((cmd_in
== MTSETBLK
|| cmd_in
== SET_DENS_AND_BLK
) &&
2699 (arg
& MT_ST_BLKSIZE_MASK
) != 0 &&
2700 STp
->max_block
> 0 &&
2701 ((arg
& MT_ST_BLKSIZE_MASK
) < STp
->min_block
||
2702 (arg
& MT_ST_BLKSIZE_MASK
) > STp
->max_block
)) {
2703 printk(KERN_WARNING
"%s: Illegal block size.\n", name
);
2706 cmd
[0] = MODE_SELECT
;
2707 if ((STp
->use_pf
& USE_PF
))
2708 cmd
[1] = MODE_SELECT_PAGE_FORMAT
;
2709 cmd
[4] = datalen
= 12;
2710 direction
= DMA_TO_DEVICE
;
2712 memset((STp
->buffer
)->b_data
, 0, 12);
2713 if (cmd_in
== MTSETDRVBUFFER
)
2714 (STp
->buffer
)->b_data
[2] = (arg
& 7) << 4;
2716 (STp
->buffer
)->b_data
[2] =
2717 STp
->drv_buffer
<< 4;
2718 (STp
->buffer
)->b_data
[3] = 8; /* block descriptor length */
2719 if (cmd_in
== MTSETDENSITY
) {
2720 (STp
->buffer
)->b_data
[4] = arg
;
2721 STp
->density_changed
= 1; /* At least we tried ;-) */
2722 } else if (cmd_in
== SET_DENS_AND_BLK
)
2723 (STp
->buffer
)->b_data
[4] = arg
>> 24;
2725 (STp
->buffer
)->b_data
[4] = STp
->density
;
2726 if (cmd_in
== MTSETBLK
|| cmd_in
== SET_DENS_AND_BLK
) {
2727 ltmp
= arg
& MT_ST_BLKSIZE_MASK
;
2728 if (cmd_in
== MTSETBLK
)
2729 STp
->blksize_changed
= 1; /* At least we tried ;-) */
2731 ltmp
= STp
->block_size
;
2732 (STp
->buffer
)->b_data
[9] = (ltmp
>> 16);
2733 (STp
->buffer
)->b_data
[10] = (ltmp
>> 8);
2734 (STp
->buffer
)->b_data
[11] = ltmp
;
2735 timeout
= STp
->device
->timeout
;
2737 if (cmd_in
== MTSETBLK
|| cmd_in
== SET_DENS_AND_BLK
)
2739 "%s: Setting block size to %d bytes.\n", name
,
2740 (STp
->buffer
)->b_data
[9] * 65536 +
2741 (STp
->buffer
)->b_data
[10] * 256 +
2742 (STp
->buffer
)->b_data
[11]);
2743 if (cmd_in
== MTSETDENSITY
|| cmd_in
== SET_DENS_AND_BLK
)
2745 "%s: Setting density code to %x.\n", name
,
2746 (STp
->buffer
)->b_data
[4]);
2747 if (cmd_in
== MTSETDRVBUFFER
)
2749 "%s: Setting drive buffer code to %d.\n", name
,
2750 ((STp
->buffer
)->b_data
[2] >> 4) & 7);
2757 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, datalen
, direction
,
2758 timeout
, MAX_RETRIES
, 1);
2760 return (STp
->buffer
)->syscall_result
;
2762 ioctl_result
= (STp
->buffer
)->syscall_result
;
2764 if (!ioctl_result
) { /* SCSI command successful */
2765 st_release_request(SRpnt
);
2767 STps
->drv_block
= blkno
;
2768 STps
->drv_file
= fileno
;
2769 STps
->at_sm
= at_sm
;
2771 if (cmd_in
== MTBSFM
)
2772 ioctl_result
= st_int_ioctl(STp
, MTFSF
, 1);
2773 else if (cmd_in
== MTFSFM
)
2774 ioctl_result
= st_int_ioctl(STp
, MTBSF
, 1);
2776 if (cmd_in
== MTSETBLK
|| cmd_in
== SET_DENS_AND_BLK
) {
2777 int old_block_size
= STp
->block_size
;
2778 STp
->block_size
= arg
& MT_ST_BLKSIZE_MASK
;
2779 if (STp
->block_size
!= 0) {
2780 if (old_block_size
== 0)
2781 normalize_buffer(STp
->buffer
);
2782 (STp
->buffer
)->buffer_blocks
=
2783 (STp
->buffer
)->buffer_size
/ STp
->block_size
;
2785 (STp
->buffer
)->buffer_bytes
= (STp
->buffer
)->read_pointer
= 0;
2786 if (cmd_in
== SET_DENS_AND_BLK
)
2787 STp
->density
= arg
>> MT_ST_DENSITY_SHIFT
;
2788 } else if (cmd_in
== MTSETDRVBUFFER
)
2789 STp
->drv_buffer
= (arg
& 7);
2790 else if (cmd_in
== MTSETDENSITY
)
2793 if (cmd_in
== MTEOM
)
2795 else if (cmd_in
== MTFSF
)
2798 STps
->eof
= ST_NOEOF
;
2800 if (cmd_in
== MTWEOF
)
2802 } else { /* SCSI command was not completely successful. Don't return
2803 from this block without releasing the SCSI command block! */
2804 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
2806 if (cmdstatp
->flags
& SENSE_EOM
) {
2807 if (cmd_in
!= MTBSF
&& cmd_in
!= MTBSFM
&&
2808 cmd_in
!= MTBSR
&& cmd_in
!= MTBSS
)
2809 STps
->eof
= ST_EOM_OK
;
2810 STps
->drv_block
= 0;
2813 if (cmdstatp
->remainder_valid
)
2814 undone
= (int)cmdstatp
->uremainder64
;
2818 if (cmd_in
== MTWEOF
&&
2819 cmdstatp
->have_sense
&&
2820 (cmdstatp
->flags
& SENSE_EOM
)) {
2821 if (cmdstatp
->sense_hdr
.sense_key
== NO_SENSE
||
2822 cmdstatp
->sense_hdr
.sense_key
== RECOVERED_ERROR
) {
2823 ioctl_result
= 0; /* EOF(s) written successfully at EOM */
2824 STps
->eof
= ST_NOEOF
;
2825 } else { /* Writing EOF(s) failed */
2829 STps
->eof
= ST_NOEOF
;
2831 STps
->drv_file
= fileno
;
2832 } else if ((cmd_in
== MTFSF
) || (cmd_in
== MTFSFM
)) {
2834 STps
->drv_file
= fileno
- undone
;
2836 STps
->drv_file
= fileno
;
2837 STps
->drv_block
= -1;
2838 STps
->eof
= ST_NOEOF
;
2839 } else if ((cmd_in
== MTBSF
) || (cmd_in
== MTBSFM
)) {
2840 if (arg
> 0 && undone
< 0) /* Some drives get this wrong */
2842 if (STps
->drv_file
>= 0)
2843 STps
->drv_file
= fileno
+ undone
;
2844 STps
->drv_block
= 0;
2845 STps
->eof
= ST_NOEOF
;
2846 } else if (cmd_in
== MTFSR
) {
2847 if (cmdstatp
->flags
& SENSE_FMK
) { /* Hit filemark */
2848 if (STps
->drv_file
>= 0)
2850 STps
->drv_block
= 0;
2853 if (blkno
>= undone
)
2854 STps
->drv_block
= blkno
- undone
;
2856 STps
->drv_block
= (-1);
2857 STps
->eof
= ST_NOEOF
;
2859 } else if (cmd_in
== MTBSR
) {
2860 if (cmdstatp
->flags
& SENSE_FMK
) { /* Hit filemark */
2862 STps
->drv_block
= (-1);
2864 if (arg
> 0 && undone
< 0) /* Some drives get this wrong */
2866 if (STps
->drv_block
>= 0)
2867 STps
->drv_block
= blkno
+ undone
;
2869 STps
->eof
= ST_NOEOF
;
2870 } else if (cmd_in
== MTEOM
) {
2871 STps
->drv_file
= (-1);
2872 STps
->drv_block
= (-1);
2874 } else if (cmd_in
== MTSETBLK
||
2875 cmd_in
== MTSETDENSITY
||
2876 cmd_in
== MTSETDRVBUFFER
||
2877 cmd_in
== SET_DENS_AND_BLK
) {
2878 if (cmdstatp
->sense_hdr
.sense_key
== ILLEGAL_REQUEST
&&
2879 !(STp
->use_pf
& PF_TESTED
)) {
2880 /* Try the other possible state of Page Format if not
2882 STp
->use_pf
= !STp
->use_pf
| PF_TESTED
;
2883 st_release_request(SRpnt
);
2885 return st_int_ioctl(STp
, cmd_in
, arg
);
2888 STps
->eof
= ST_NOEOF
;
2890 if (cmdstatp
->sense_hdr
.sense_key
== BLANK_CHECK
)
2893 st_release_request(SRpnt
);
2897 return ioctl_result
;
2901 /* Get the tape position. If bt == 2, arg points into a kernel space mt_loc
2904 static int get_location(struct scsi_tape
*STp
, unsigned int *block
, int *partition
,
2908 unsigned char scmd
[MAX_COMMAND_SIZE
];
2909 struct st_request
*SRpnt
;
2910 DEB( char *name
= tape_name(STp
); )
2912 if (STp
->ready
!= ST_READY
)
2915 memset(scmd
, 0, MAX_COMMAND_SIZE
);
2916 if ((STp
->device
)->scsi_level
< SCSI_2
) {
2917 scmd
[0] = QFA_REQUEST_BLOCK
;
2920 scmd
[0] = READ_POSITION
;
2921 if (!logical
&& !STp
->scsi2_logical
)
2924 SRpnt
= st_do_scsi(NULL
, STp
, scmd
, 20, DMA_FROM_DEVICE
,
2925 STp
->device
->timeout
, MAX_READY_RETRIES
, 1);
2927 return (STp
->buffer
)->syscall_result
;
2929 if ((STp
->buffer
)->syscall_result
!= 0 ||
2930 (STp
->device
->scsi_level
>= SCSI_2
&&
2931 ((STp
->buffer
)->b_data
[0] & 4) != 0)) {
2932 *block
= *partition
= 0;
2933 DEBC(printk(ST_DEB_MSG
"%s: Can't read tape position.\n", name
));
2937 if ((STp
->device
)->scsi_level
< SCSI_2
) {
2938 *block
= ((STp
->buffer
)->b_data
[0] << 16)
2939 + ((STp
->buffer
)->b_data
[1] << 8)
2940 + (STp
->buffer
)->b_data
[2];
2943 *block
= ((STp
->buffer
)->b_data
[4] << 24)
2944 + ((STp
->buffer
)->b_data
[5] << 16)
2945 + ((STp
->buffer
)->b_data
[6] << 8)
2946 + (STp
->buffer
)->b_data
[7];
2947 *partition
= (STp
->buffer
)->b_data
[1];
2948 if (((STp
->buffer
)->b_data
[0] & 0x80) &&
2949 (STp
->buffer
)->b_data
[1] == 0) /* BOP of partition 0 */
2950 STp
->ps
[0].drv_block
= STp
->ps
[0].drv_file
= 0;
2952 DEBC(printk(ST_DEB_MSG
"%s: Got tape pos. blk %d part %d.\n", name
,
2953 *block
, *partition
));
2955 st_release_request(SRpnt
);
2962 /* Set the tape block and partition. Negative partition means that only the
2963 block should be set in vendor specific way. */
2964 static int set_location(struct scsi_tape
*STp
, unsigned int block
, int partition
,
2967 struct st_partstat
*STps
;
2971 unsigned char scmd
[MAX_COMMAND_SIZE
];
2972 struct st_request
*SRpnt
;
2973 DEB( char *name
= tape_name(STp
); )
2975 if (STp
->ready
!= ST_READY
)
2977 timeout
= STp
->long_timeout
;
2978 STps
= &(STp
->ps
[STp
->partition
]);
2980 DEBC(printk(ST_DEB_MSG
"%s: Setting block to %d and partition to %d.\n",
2981 name
, block
, partition
));
2982 DEB(if (partition
< 0)
2985 /* Update the location at the partition we are leaving */
2986 if ((!STp
->can_partitions
&& partition
!= 0) ||
2987 partition
>= ST_NBR_PARTITIONS
)
2989 if (partition
!= STp
->partition
) {
2990 if (get_location(STp
, &blk
, &p
, 1))
2991 STps
->last_block_valid
= 0;
2993 STps
->last_block_valid
= 1;
2994 STps
->last_block_visited
= blk
;
2995 DEBC(printk(ST_DEB_MSG
2996 "%s: Visited block %d for partition %d saved.\n",
2997 name
, blk
, STp
->partition
));
3001 memset(scmd
, 0, MAX_COMMAND_SIZE
);
3002 if ((STp
->device
)->scsi_level
< SCSI_2
) {
3003 scmd
[0] = QFA_SEEK_BLOCK
;
3004 scmd
[2] = (block
>> 16);
3005 scmd
[3] = (block
>> 8);
3010 scmd
[3] = (block
>> 24);
3011 scmd
[4] = (block
>> 16);
3012 scmd
[5] = (block
>> 8);
3014 if (!logical
&& !STp
->scsi2_logical
)
3016 if (STp
->partition
!= partition
) {
3018 scmd
[8] = partition
;
3019 DEBC(printk(ST_DEB_MSG
3020 "%s: Trying to change partition from %d to %d\n",
3021 name
, STp
->partition
, partition
));
3024 if (STp
->immediate
) {
3025 scmd
[1] |= 1; /* Don't wait for completion */
3026 timeout
= STp
->device
->timeout
;
3029 SRpnt
= st_do_scsi(NULL
, STp
, scmd
, 0, DMA_NONE
,
3030 timeout
, MAX_READY_RETRIES
, 1);
3032 return (STp
->buffer
)->syscall_result
;
3034 STps
->drv_block
= STps
->drv_file
= (-1);
3035 STps
->eof
= ST_NOEOF
;
3036 if ((STp
->buffer
)->syscall_result
!= 0) {
3038 if (STp
->can_partitions
&&
3039 (STp
->device
)->scsi_level
>= SCSI_2
&&
3040 (p
= find_partition(STp
)) >= 0)
3043 if (STp
->can_partitions
) {
3044 STp
->partition
= partition
;
3045 STps
= &(STp
->ps
[partition
]);
3046 if (!STps
->last_block_valid
||
3047 STps
->last_block_visited
!= block
) {
3054 STps
->drv_block
= STps
->drv_file
= 0;
3058 st_release_request(SRpnt
);
3065 /* Find the current partition number for the drive status. Called from open and
3066 returns either partition number of negative error code. */
3067 static int find_partition(struct scsi_tape
*STp
)
3072 if ((i
= get_location(STp
, &block
, &partition
, 1)) < 0)
3074 if (partition
>= ST_NBR_PARTITIONS
)
3080 /* Change the partition if necessary */
3081 static int switch_partition(struct scsi_tape
*STp
)
3083 struct st_partstat
*STps
;
3085 if (STp
->partition
== STp
->new_partition
)
3087 STps
= &(STp
->ps
[STp
->new_partition
]);
3088 if (!STps
->last_block_valid
)
3089 STps
->last_block_visited
= 0;
3090 return set_location(STp
, STps
->last_block_visited
, STp
->new_partition
, 1);
3093 /* Functions for reading and writing the medium partition mode page. */
3095 #define PART_PAGE 0x11
3096 #define PART_PAGE_FIXED_LENGTH 8
3098 #define PP_OFF_MAX_ADD_PARTS 2
3099 #define PP_OFF_NBR_ADD_PARTS 3
3100 #define PP_OFF_FLAGS 4
3101 #define PP_OFF_PART_UNITS 6
3102 #define PP_OFF_RESERVED 7
3104 #define PP_BIT_IDP 0x20
3105 #define PP_MSK_PSUM_MB 0x10
3107 /* Get the number of partitions on the tape. As a side effect reads the
3108 mode page into the tape buffer. */
3109 static int nbr_partitions(struct scsi_tape
*STp
)
3112 DEB( char *name
= tape_name(STp
); )
3114 if (STp
->ready
!= ST_READY
)
3117 result
= read_mode_page(STp
, PART_PAGE
, 1);
3120 DEBC(printk(ST_DEB_MSG
"%s: Can't read medium partition page.\n",
3124 result
= (STp
->buffer
)->b_data
[MODE_HEADER_LENGTH
+
3125 PP_OFF_NBR_ADD_PARTS
] + 1;
3126 DEBC(printk(ST_DEB_MSG
"%s: Number of partitions %d.\n", name
, result
));
3133 /* Partition the tape into two partitions if size > 0 or one partition if
3136 The block descriptors are read and written because Sony SDT-7000 does not
3137 work without this (suggestion from Michael Schaefer <Michael.Schaefer@dlr.de>).
3139 My HP C1533A drive returns only one partition size field. This is used to
3140 set the size of partition 1. There is no size field for the default partition.
3141 Michael Schaefer's Sony SDT-7000 returns two descriptors and the second is
3142 used to set the size of partition 1 (this is what the SCSI-3 standard specifies).
3143 The following algorithm is used to accommodate both drives: if the number of
3144 partition size fields is greater than the maximum number of additional partitions
3145 in the mode page, the second field is used. Otherwise the first field is used.
3147 For Seagate DDS drives the page length must be 8 when no partitions is defined
3148 and 10 when 1 partition is defined (information from Eric Lee Green). This is
3149 is acceptable also to some other old drives and enforced if the first partition
3150 size field is used for the first additional partition size.
3152 static int partition_tape(struct scsi_tape
*STp
, int size
)
3154 char *name
= tape_name(STp
);
3156 int pgo
, psd_cnt
, psdo
;
3159 result
= read_mode_page(STp
, PART_PAGE
, 0);
3161 DEBC(printk(ST_DEB_MSG
"%s: Can't read partition mode page.\n", name
));
3164 /* The mode page is in the buffer. Let's modify it and write it. */
3165 bp
= (STp
->buffer
)->b_data
;
3166 pgo
= MODE_HEADER_LENGTH
+ bp
[MH_OFF_BDESCS_LENGTH
];
3167 DEBC(printk(ST_DEB_MSG
"%s: Partition page length is %d bytes.\n",
3168 name
, bp
[pgo
+ MP_OFF_PAGE_LENGTH
] + 2));
3170 psd_cnt
= (bp
[pgo
+ MP_OFF_PAGE_LENGTH
] + 2 - PART_PAGE_FIXED_LENGTH
) / 2;
3171 psdo
= pgo
+ PART_PAGE_FIXED_LENGTH
;
3172 if (psd_cnt
> bp
[pgo
+ PP_OFF_MAX_ADD_PARTS
]) {
3173 bp
[psdo
] = bp
[psdo
+ 1] = 0xff; /* Rest of the tape */
3176 memset(bp
+ psdo
, 0, bp
[pgo
+ PP_OFF_NBR_ADD_PARTS
] * 2);
3178 DEBC(printk("%s: psd_cnt %d, max.parts %d, nbr_parts %d\n", name
,
3179 psd_cnt
, bp
[pgo
+ PP_OFF_MAX_ADD_PARTS
],
3180 bp
[pgo
+ PP_OFF_NBR_ADD_PARTS
]));
3183 bp
[pgo
+ PP_OFF_NBR_ADD_PARTS
] = 0;
3184 if (psd_cnt
<= bp
[pgo
+ PP_OFF_MAX_ADD_PARTS
])
3185 bp
[pgo
+ MP_OFF_PAGE_LENGTH
] = 6;
3186 DEBC(printk(ST_DEB_MSG
"%s: Formatting tape with one partition.\n",
3189 bp
[psdo
] = (size
>> 8) & 0xff;
3190 bp
[psdo
+ 1] = size
& 0xff;
3192 if (bp
[pgo
+ MP_OFF_PAGE_LENGTH
] < 8)
3193 bp
[pgo
+ MP_OFF_PAGE_LENGTH
] = 8;
3194 DEBC(printk(ST_DEB_MSG
3195 "%s: Formatting tape with two partitions (1 = %d MB).\n",
3198 bp
[pgo
+ PP_OFF_PART_UNITS
] = 0;
3199 bp
[pgo
+ PP_OFF_RESERVED
] = 0;
3200 bp
[pgo
+ PP_OFF_FLAGS
] = PP_BIT_IDP
| PP_MSK_PSUM_MB
;
3202 result
= write_mode_page(STp
, PART_PAGE
, 1);
3204 printk(KERN_INFO
"%s: Partitioning of tape failed.\n", name
);
3213 /* The ioctl command */
3214 static long st_ioctl(struct file
*file
, unsigned int cmd_in
, unsigned long arg
)
3216 int i
, cmd_nr
, cmd_type
, bt
;
3219 struct scsi_tape
*STp
= file
->private_data
;
3220 struct st_modedef
*STm
;
3221 struct st_partstat
*STps
;
3222 char *name
= tape_name(STp
);
3223 void __user
*p
= (void __user
*)arg
;
3225 if (mutex_lock_interruptible(&STp
->lock
))
3226 return -ERESTARTSYS
;
3229 if (debugging
&& !STp
->in_use
) {
3230 printk(ST_DEB_MSG
"%s: Incorrect device.\n", name
);
3235 STm
= &(STp
->modes
[STp
->current_mode
]);
3236 STps
= &(STp
->ps
[STp
->partition
]);
3239 * If we are in the middle of error recovery, don't let anyone
3240 * else try and use this device. Also, if error recovery fails, it
3241 * may try and take the device offline, in which case all further
3242 * access to the device is prohibited.
3244 retval
= scsi_nonblockable_ioctl(STp
->device
, cmd_in
, p
, file
);
3245 if (!scsi_block_when_processing_errors(STp
->device
) || retval
!= -ENODEV
)
3249 cmd_type
= _IOC_TYPE(cmd_in
);
3250 cmd_nr
= _IOC_NR(cmd_in
);
3252 if (cmd_type
== _IOC_TYPE(MTIOCTOP
) && cmd_nr
== _IOC_NR(MTIOCTOP
)) {
3255 if (_IOC_SIZE(cmd_in
) != sizeof(mtc
)) {
3260 i
= copy_from_user(&mtc
, p
, sizeof(struct mtop
));
3266 if (mtc
.mt_op
== MTSETDRVBUFFER
&& !capable(CAP_SYS_ADMIN
)) {
3268 "%s: MTSETDRVBUFFER only allowed for root.\n", name
);
3272 if (!STm
->defined
&&
3273 (mtc
.mt_op
!= MTSETDRVBUFFER
&&
3274 (mtc
.mt_count
& MT_ST_OPTIONS
) == 0)) {
3279 if (!STp
->pos_unknown
) {
3281 if (STps
->eof
== ST_FM_HIT
) {
3282 if (mtc
.mt_op
== MTFSF
|| mtc
.mt_op
== MTFSFM
||
3283 mtc
.mt_op
== MTEOM
) {
3285 if (STps
->drv_file
>= 0)
3286 STps
->drv_file
+= 1;
3287 } else if (mtc
.mt_op
== MTBSF
|| mtc
.mt_op
== MTBSFM
) {
3289 if (STps
->drv_file
>= 0)
3290 STps
->drv_file
+= 1;
3294 if (mtc
.mt_op
== MTSEEK
) {
3295 /* Old position must be restored if partition will be
3297 i
= !STp
->can_partitions
||
3298 (STp
->new_partition
!= STp
->partition
);
3300 i
= mtc
.mt_op
== MTREW
|| mtc
.mt_op
== MTOFFL
||
3301 mtc
.mt_op
== MTRETEN
|| mtc
.mt_op
== MTEOM
||
3302 mtc
.mt_op
== MTLOCK
|| mtc
.mt_op
== MTLOAD
||
3303 mtc
.mt_op
== MTFSF
|| mtc
.mt_op
== MTFSFM
||
3304 mtc
.mt_op
== MTBSF
|| mtc
.mt_op
== MTBSFM
||
3305 mtc
.mt_op
== MTCOMPRESSION
;
3307 i
= flush_buffer(STp
, i
);
3312 if (STps
->rw
== ST_WRITING
&&
3313 (mtc
.mt_op
== MTREW
|| mtc
.mt_op
== MTOFFL
||
3314 mtc
.mt_op
== MTSEEK
||
3315 mtc
.mt_op
== MTBSF
|| mtc
.mt_op
== MTBSFM
)) {
3316 i
= st_int_ioctl(STp
, MTWEOF
, 1);
3321 if (mtc
.mt_op
== MTBSF
|| mtc
.mt_op
== MTBSFM
)
3328 * If there was a bus reset, block further access
3329 * to this device. If the user wants to rewind the tape,
3330 * then reset the flag and allow access again.
3332 if (mtc
.mt_op
!= MTREW
&&
3333 mtc
.mt_op
!= MTOFFL
&&
3334 mtc
.mt_op
!= MTRETEN
&&
3335 mtc
.mt_op
!= MTERASE
&&
3336 mtc
.mt_op
!= MTSEEK
&&
3337 mtc
.mt_op
!= MTEOM
) {
3342 /* remove this when the midlevel properly clears was_reset */
3343 STp
->device
->was_reset
= 0;
3346 if (mtc
.mt_op
!= MTNOP
&& mtc
.mt_op
!= MTSETBLK
&&
3347 mtc
.mt_op
!= MTSETDENSITY
&& mtc
.mt_op
!= MTWSM
&&
3348 mtc
.mt_op
!= MTSETDRVBUFFER
&& mtc
.mt_op
!= MTSETPART
)
3349 STps
->rw
= ST_IDLE
; /* Prevent automatic WEOF and fsf */
3351 if (mtc
.mt_op
== MTOFFL
&& STp
->door_locked
!= ST_UNLOCKED
)
3352 do_door_lock(STp
, 0); /* Ignore result! */
3354 if (mtc
.mt_op
== MTSETDRVBUFFER
&&
3355 (mtc
.mt_count
& MT_ST_OPTIONS
) != 0) {
3356 retval
= st_set_options(STp
, mtc
.mt_count
);
3360 if (mtc
.mt_op
== MTSETPART
) {
3361 if (!STp
->can_partitions
||
3362 mtc
.mt_count
< 0 || mtc
.mt_count
>= ST_NBR_PARTITIONS
) {
3366 if (mtc
.mt_count
>= STp
->nbr_partitions
&&
3367 (STp
->nbr_partitions
= nbr_partitions(STp
)) < 0) {
3371 if (mtc
.mt_count
>= STp
->nbr_partitions
) {
3375 STp
->new_partition
= mtc
.mt_count
;
3380 if (mtc
.mt_op
== MTMKPART
) {
3381 if (!STp
->can_partitions
) {
3385 if ((i
= st_int_ioctl(STp
, MTREW
, 0)) < 0 ||
3386 (i
= partition_tape(STp
, mtc
.mt_count
)) < 0) {
3390 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
3391 STp
->ps
[i
].rw
= ST_IDLE
;
3392 STp
->ps
[i
].at_sm
= 0;
3393 STp
->ps
[i
].last_block_valid
= 0;
3395 STp
->partition
= STp
->new_partition
= 0;
3396 STp
->nbr_partitions
= 1; /* Bad guess ?-) */
3397 STps
->drv_block
= STps
->drv_file
= 0;
3402 if (mtc
.mt_op
== MTSEEK
) {
3403 i
= set_location(STp
, mtc
.mt_count
, STp
->new_partition
, 0);
3404 if (!STp
->can_partitions
)
3405 STp
->ps
[0].rw
= ST_IDLE
;
3410 if (mtc
.mt_op
== MTUNLOAD
|| mtc
.mt_op
== MTOFFL
) {
3411 retval
= do_load_unload(STp
, file
, 0);
3415 if (mtc
.mt_op
== MTLOAD
) {
3416 retval
= do_load_unload(STp
, file
, max(1, mtc
.mt_count
));
3420 if (mtc
.mt_op
== MTLOCK
|| mtc
.mt_op
== MTUNLOCK
) {
3421 retval
= do_door_lock(STp
, (mtc
.mt_op
== MTLOCK
));
3425 if (STp
->can_partitions
&& STp
->ready
== ST_READY
&&
3426 (i
= switch_partition(STp
)) < 0) {
3431 if (mtc
.mt_op
== MTCOMPRESSION
)
3432 retval
= st_compression(STp
, (mtc
.mt_count
& 1));
3434 retval
= st_int_ioctl(STp
, mtc
.mt_op
, mtc
.mt_count
);
3437 if (!STm
->defined
) {
3442 if ((i
= flush_buffer(STp
, 0)) < 0) {
3446 if (STp
->can_partitions
&&
3447 (i
= switch_partition(STp
)) < 0) {
3452 if (cmd_type
== _IOC_TYPE(MTIOCGET
) && cmd_nr
== _IOC_NR(MTIOCGET
)) {
3453 struct mtget mt_status
;
3455 if (_IOC_SIZE(cmd_in
) != sizeof(struct mtget
)) {
3460 mt_status
.mt_type
= STp
->tape_type
;
3461 mt_status
.mt_dsreg
=
3462 ((STp
->block_size
<< MT_ST_BLKSIZE_SHIFT
) & MT_ST_BLKSIZE_MASK
) |
3463 ((STp
->density
<< MT_ST_DENSITY_SHIFT
) & MT_ST_DENSITY_MASK
);
3464 mt_status
.mt_blkno
= STps
->drv_block
;
3465 mt_status
.mt_fileno
= STps
->drv_file
;
3466 if (STp
->block_size
!= 0) {
3467 if (STps
->rw
== ST_WRITING
)
3468 mt_status
.mt_blkno
+=
3469 (STp
->buffer
)->buffer_bytes
/ STp
->block_size
;
3470 else if (STps
->rw
== ST_READING
)
3471 mt_status
.mt_blkno
-=
3472 ((STp
->buffer
)->buffer_bytes
+
3473 STp
->block_size
- 1) / STp
->block_size
;
3476 mt_status
.mt_gstat
= 0;
3477 if (STp
->drv_write_prot
)
3478 mt_status
.mt_gstat
|= GMT_WR_PROT(0xffffffff);
3479 if (mt_status
.mt_blkno
== 0) {
3480 if (mt_status
.mt_fileno
== 0)
3481 mt_status
.mt_gstat
|= GMT_BOT(0xffffffff);
3483 mt_status
.mt_gstat
|= GMT_EOF(0xffffffff);
3485 mt_status
.mt_erreg
= (STp
->recover_reg
<< MT_ST_SOFTERR_SHIFT
);
3486 mt_status
.mt_resid
= STp
->partition
;
3487 if (STps
->eof
== ST_EOM_OK
|| STps
->eof
== ST_EOM_ERROR
)
3488 mt_status
.mt_gstat
|= GMT_EOT(0xffffffff);
3489 else if (STps
->eof
>= ST_EOM_OK
)
3490 mt_status
.mt_gstat
|= GMT_EOD(0xffffffff);
3491 if (STp
->density
== 1)
3492 mt_status
.mt_gstat
|= GMT_D_800(0xffffffff);
3493 else if (STp
->density
== 2)
3494 mt_status
.mt_gstat
|= GMT_D_1600(0xffffffff);
3495 else if (STp
->density
== 3)
3496 mt_status
.mt_gstat
|= GMT_D_6250(0xffffffff);
3497 if (STp
->ready
== ST_READY
)
3498 mt_status
.mt_gstat
|= GMT_ONLINE(0xffffffff);
3499 if (STp
->ready
== ST_NO_TAPE
)
3500 mt_status
.mt_gstat
|= GMT_DR_OPEN(0xffffffff);
3502 mt_status
.mt_gstat
|= GMT_SM(0xffffffff);
3503 if (STm
->do_async_writes
||
3504 (STm
->do_buffer_writes
&& STp
->block_size
!= 0) ||
3505 STp
->drv_buffer
!= 0)
3506 mt_status
.mt_gstat
|= GMT_IM_REP_EN(0xffffffff);
3507 if (STp
->cleaning_req
)
3508 mt_status
.mt_gstat
|= GMT_CLN(0xffffffff);
3510 i
= copy_to_user(p
, &mt_status
, sizeof(struct mtget
));
3516 STp
->recover_reg
= 0; /* Clear after read */
3519 } /* End of MTIOCGET */
3520 if (cmd_type
== _IOC_TYPE(MTIOCPOS
) && cmd_nr
== _IOC_NR(MTIOCPOS
)) {
3521 struct mtpos mt_pos
;
3522 if (_IOC_SIZE(cmd_in
) != sizeof(struct mtpos
)) {
3526 if ((i
= get_location(STp
, &blk
, &bt
, 0)) < 0) {
3530 mt_pos
.mt_blkno
= blk
;
3531 i
= copy_to_user(p
, &mt_pos
, sizeof(struct mtpos
));
3536 mutex_unlock(&STp
->lock
);
3538 case SCSI_IOCTL_GET_IDLUN
:
3539 case SCSI_IOCTL_GET_BUS_NUMBER
:
3542 if ((cmd_in
== SG_IO
||
3543 cmd_in
== SCSI_IOCTL_SEND_COMMAND
||
3544 cmd_in
== CDROM_SEND_PACKET
) &&
3545 !capable(CAP_SYS_RAWIO
))
3548 i
= scsi_cmd_ioctl(file
, STp
->disk
->queue
,
3549 STp
->disk
, cmd_in
, p
);
3554 retval
= scsi_ioctl(STp
->device
, cmd_in
, p
);
3555 if (!retval
&& cmd_in
== SCSI_IOCTL_STOP_UNIT
) { /* unload */
3556 STp
->rew_at_close
= 0;
3557 STp
->ready
= ST_NO_TAPE
;
3562 mutex_unlock(&STp
->lock
);
3566 #ifdef CONFIG_COMPAT
3567 static long st_compat_ioctl(struct file
*file
, unsigned int cmd
, unsigned long arg
)
3569 struct scsi_tape
*STp
= file
->private_data
;
3570 struct scsi_device
*sdev
= STp
->device
;
3571 int ret
= -ENOIOCTLCMD
;
3572 if (sdev
->host
->hostt
->compat_ioctl
) {
3574 ret
= sdev
->host
->hostt
->compat_ioctl(sdev
, cmd
, (void __user
*)arg
);
3583 /* Try to allocate a new tape buffer. Calling function must not hold
3585 static struct st_buffer
*
3586 new_tape_buffer(int from_initialization
, int need_dma
, int max_sg
)
3590 struct st_buffer
*tb
;
3592 if (from_initialization
)
3593 priority
= GFP_ATOMIC
;
3595 priority
= GFP_KERNEL
;
3597 i
= sizeof(struct st_buffer
) + (max_sg
- 1) * sizeof(struct scatterlist
) +
3598 max_sg
* sizeof(struct st_buf_fragment
);
3599 tb
= kzalloc(i
, priority
);
3601 printk(KERN_NOTICE
"st: Can't allocate new tape buffer.\n");
3604 tb
->frp_segs
= tb
->orig_frp_segs
= 0;
3605 tb
->use_sg
= max_sg
;
3606 tb
->frp
= (struct st_buf_fragment
*)(&(tb
->sg
[0]) + max_sg
);
3609 tb
->buffer_size
= got
;
3610 sg_init_table(tb
->sg
, max_sg
);
3616 /* Try to allocate enough space in the tape buffer */
3617 static int enlarge_buffer(struct st_buffer
* STbuffer
, int new_size
, int need_dma
)
3619 int segs
, nbr
, max_segs
, b_size
, order
, got
;
3622 if (new_size
<= STbuffer
->buffer_size
)
3625 if (STbuffer
->buffer_size
<= PAGE_SIZE
)
3626 normalize_buffer(STbuffer
); /* Avoid extra segment */
3628 max_segs
= STbuffer
->use_sg
;
3629 nbr
= max_segs
- STbuffer
->frp_segs
;
3633 priority
= GFP_KERNEL
| __GFP_NOWARN
;
3635 priority
|= GFP_DMA
;
3636 for (b_size
= PAGE_SIZE
, order
=0; order
<= 6 &&
3637 b_size
< new_size
- STbuffer
->buffer_size
;
3638 order
++, b_size
*= 2)
3641 for (segs
= STbuffer
->frp_segs
, got
= STbuffer
->buffer_size
;
3642 segs
< max_segs
&& got
< new_size
;) {
3643 STbuffer
->frp
[segs
].page
= alloc_pages(priority
, order
);
3644 if (STbuffer
->frp
[segs
].page
== NULL
) {
3645 if (new_size
- got
<= (max_segs
- segs
) * b_size
/ 2) {
3646 b_size
/= 2; /* Large enough for the rest of the buffers */
3650 DEB(STbuffer
->buffer_size
= got
);
3651 normalize_buffer(STbuffer
);
3654 STbuffer
->frp
[segs
].length
= b_size
;
3655 STbuffer
->frp_segs
+= 1;
3657 STbuffer
->buffer_size
= got
;
3660 STbuffer
->b_data
= page_address(STbuffer
->frp
[0].page
);
3666 /* Release the extra buffer */
3667 static void normalize_buffer(struct st_buffer
* STbuffer
)
3671 for (i
= STbuffer
->orig_frp_segs
; i
< STbuffer
->frp_segs
; i
++) {
3672 order
= get_order(STbuffer
->frp
[i
].length
);
3673 __free_pages(STbuffer
->frp
[i
].page
, order
);
3674 STbuffer
->buffer_size
-= STbuffer
->frp
[i
].length
;
3676 STbuffer
->frp_segs
= STbuffer
->orig_frp_segs
;
3677 STbuffer
->frp_sg_current
= 0;
3678 STbuffer
->sg_segs
= 0;
3682 /* Move data from the user buffer to the tape buffer. Returns zero (success) or
3683 negative error code. */
3684 static int append_to_buffer(const char __user
*ubp
, struct st_buffer
* st_bp
, int do_count
)
3686 int i
, cnt
, res
, offset
;
3688 for (i
= 0, offset
= st_bp
->buffer_bytes
;
3689 i
< st_bp
->frp_segs
&& offset
>= st_bp
->frp
[i
].length
; i
++)
3690 offset
-= st_bp
->frp
[i
].length
;
3691 if (i
== st_bp
->frp_segs
) { /* Should never happen */
3692 printk(KERN_WARNING
"st: append_to_buffer offset overflow.\n");
3695 for (; i
< st_bp
->frp_segs
&& do_count
> 0; i
++) {
3696 cnt
= st_bp
->frp
[i
].length
- offset
< do_count
?
3697 st_bp
->frp
[i
].length
- offset
: do_count
;
3698 res
= copy_from_user(page_address(st_bp
->frp
[i
].page
) + offset
, ubp
, cnt
);
3702 st_bp
->buffer_bytes
+= cnt
;
3706 if (do_count
) /* Should never happen */
3713 /* Move data from the tape buffer to the user buffer. Returns zero (success) or
3714 negative error code. */
3715 static int from_buffer(struct st_buffer
* st_bp
, char __user
*ubp
, int do_count
)
3717 int i
, cnt
, res
, offset
;
3719 for (i
= 0, offset
= st_bp
->read_pointer
;
3720 i
< st_bp
->frp_segs
&& offset
>= st_bp
->frp
[i
].length
; i
++)
3721 offset
-= st_bp
->frp
[i
].length
;
3722 if (i
== st_bp
->frp_segs
) { /* Should never happen */
3723 printk(KERN_WARNING
"st: from_buffer offset overflow.\n");
3726 for (; i
< st_bp
->frp_segs
&& do_count
> 0; i
++) {
3727 cnt
= st_bp
->frp
[i
].length
- offset
< do_count
?
3728 st_bp
->frp
[i
].length
- offset
: do_count
;
3729 res
= copy_to_user(ubp
, page_address(st_bp
->frp
[i
].page
) + offset
, cnt
);
3733 st_bp
->buffer_bytes
-= cnt
;
3734 st_bp
->read_pointer
+= cnt
;
3738 if (do_count
) /* Should never happen */
3745 /* Move data towards start of buffer */
3746 static void move_buffer_data(struct st_buffer
* st_bp
, int offset
)
3748 int src_seg
, dst_seg
, src_offset
= 0, dst_offset
;
3754 total
=st_bp
->buffer_bytes
- offset
;
3755 for (src_seg
=0; src_seg
< st_bp
->frp_segs
; src_seg
++) {
3756 src_offset
= offset
;
3757 if (src_offset
< st_bp
->frp
[src_seg
].length
)
3759 offset
-= st_bp
->frp
[src_seg
].length
;
3762 st_bp
->buffer_bytes
= st_bp
->read_pointer
= total
;
3763 for (dst_seg
=dst_offset
=0; total
> 0; ) {
3764 count
= min(st_bp
->frp
[dst_seg
].length
- dst_offset
,
3765 st_bp
->frp
[src_seg
].length
- src_offset
);
3766 memmove(page_address(st_bp
->frp
[dst_seg
].page
) + dst_offset
,
3767 page_address(st_bp
->frp
[src_seg
].page
) + src_offset
, count
);
3768 src_offset
+= count
;
3769 if (src_offset
>= st_bp
->frp
[src_seg
].length
) {
3773 dst_offset
+= count
;
3774 if (dst_offset
>= st_bp
->frp
[dst_seg
].length
) {
3783 /* Fill the s/g list up to the length required for this transfer */
3784 static void buf_to_sg(struct st_buffer
*STbp
, unsigned int length
)
3788 struct scatterlist
*sg
;
3789 struct st_buf_fragment
*frp
;
3791 if (length
== STbp
->frp_sg_current
)
3792 return; /* work already done */
3794 sg
= &(STbp
->sg
[0]);
3796 for (i
=count
=0; count
< length
; i
++) {
3797 if (length
- count
> frp
[i
].length
)
3798 sg_set_page(&sg
[i
], frp
[i
].page
, frp
[i
].length
, 0);
3800 sg_set_page(&sg
[i
], frp
[i
].page
, length
- count
, 0);
3801 count
+= sg
[i
].length
;
3804 STbp
->frp_sg_current
= length
;
3808 /* Validate the options from command line or module parameters */
3809 static void validate_options(void)
3812 st_fixed_buffer_size
= buffer_kbs
* ST_KILOBYTE
;
3813 if (max_sg_segs
>= ST_FIRST_SG
)
3814 st_max_sg_segs
= max_sg_segs
;
3818 /* Set the boot options. Syntax is defined in Documenation/scsi/st.txt.
3820 static int __init
st_setup(char *str
)
3822 int i
, len
, ints
[5];
3825 stp
= get_options(str
, ARRAY_SIZE(ints
), ints
);
3828 for (i
= 0; i
< ints
[0] && i
< ARRAY_SIZE(parms
); i
++)
3830 *parms
[i
].val
= ints
[i
+ 1];
3832 while (stp
!= NULL
) {
3833 for (i
= 0; i
< ARRAY_SIZE(parms
); i
++) {
3834 len
= strlen(parms
[i
].name
);
3835 if (!strncmp(stp
, parms
[i
].name
, len
) &&
3836 (*(stp
+ len
) == ':' || *(stp
+ len
) == '=')) {
3839 simple_strtoul(stp
+ len
+ 1, NULL
, 0);
3841 printk(KERN_WARNING
"st: Obsolete parameter %s\n",
3846 if (i
>= ARRAY_SIZE(parms
))
3847 printk(KERN_WARNING
"st: invalid parameter in '%s'\n",
3849 stp
= strchr(stp
, ',');
3860 __setup("st=", st_setup
);
3864 static const struct file_operations st_fops
=
3866 .owner
= THIS_MODULE
,
3869 .unlocked_ioctl
= st_ioctl
,
3870 #ifdef CONFIG_COMPAT
3871 .compat_ioctl
= st_compat_ioctl
,
3875 .release
= st_release
,
3878 static int st_probe(struct device
*dev
)
3880 struct scsi_device
*SDp
= to_scsi_device(dev
);
3881 struct gendisk
*disk
= NULL
;
3882 struct cdev
*cdev
= NULL
;
3883 struct scsi_tape
*tpnt
= NULL
;
3884 struct st_modedef
*STm
;
3885 struct st_partstat
*STps
;
3886 struct st_buffer
*buffer
;
3887 int i
, j
, mode
, dev_num
, error
;
3890 if (SDp
->type
!= TYPE_TAPE
)
3892 if ((stp
= st_incompatible(SDp
))) {
3893 sdev_printk(KERN_INFO
, SDp
, "Found incompatible tape\n");
3894 printk(KERN_INFO
"st: The suggested driver is %s.\n", stp
);
3898 i
= min(SDp
->request_queue
->max_hw_segments
,
3899 SDp
->request_queue
->max_phys_segments
);
3900 if (st_max_sg_segs
< i
)
3902 buffer
= new_tape_buffer(1, (SDp
->host
)->unchecked_isa_dma
, i
);
3903 if (buffer
== NULL
) {
3905 "st: Can't allocate new tape buffer. Device not attached.\n");
3909 disk
= alloc_disk(1);
3911 printk(KERN_ERR
"st: out of memory. Device not attached.\n");
3912 goto out_buffer_free
;
3915 write_lock(&st_dev_arr_lock
);
3916 if (st_nr_dev
>= st_dev_max
) {
3917 struct scsi_tape
**tmp_da
;
3920 tmp_dev_max
= max(st_nr_dev
* 2, 8);
3921 if (tmp_dev_max
> ST_MAX_TAPES
)
3922 tmp_dev_max
= ST_MAX_TAPES
;
3923 if (tmp_dev_max
<= st_nr_dev
) {
3924 write_unlock(&st_dev_arr_lock
);
3925 printk(KERN_ERR
"st: Too many tape devices (max. %d).\n",
3930 tmp_da
= kzalloc(tmp_dev_max
* sizeof(struct scsi_tape
*), GFP_ATOMIC
);
3931 if (tmp_da
== NULL
) {
3932 write_unlock(&st_dev_arr_lock
);
3933 printk(KERN_ERR
"st: Can't extend device array.\n");
3937 if (scsi_tapes
!= NULL
) {
3938 memcpy(tmp_da
, scsi_tapes
,
3939 st_dev_max
* sizeof(struct scsi_tape
*));
3942 scsi_tapes
= tmp_da
;
3944 st_dev_max
= tmp_dev_max
;
3947 for (i
= 0; i
< st_dev_max
; i
++)
3948 if (scsi_tapes
[i
] == NULL
)
3950 if (i
>= st_dev_max
)
3951 panic("scsi_devices corrupt (st)");
3953 tpnt
= kzalloc(sizeof(struct scsi_tape
), GFP_ATOMIC
);
3955 write_unlock(&st_dev_arr_lock
);
3956 printk(KERN_ERR
"st: Can't allocate device descriptor.\n");
3959 kref_init(&tpnt
->kref
);
3961 sprintf(disk
->disk_name
, "st%d", i
);
3962 disk
->private_data
= &tpnt
->driver
;
3963 disk
->queue
= SDp
->request_queue
;
3964 tpnt
->driver
= &st_template
;
3965 scsi_tapes
[i
] = tpnt
;
3969 if (SDp
->scsi_level
<= 2)
3970 tpnt
->tape_type
= MT_ISSCSI1
;
3972 tpnt
->tape_type
= MT_ISSCSI2
;
3974 tpnt
->buffer
= buffer
;
3975 tpnt
->buffer
->last_SRpnt
= NULL
;
3980 tpnt
->drv_buffer
= 1; /* Try buffering if no mode sense */
3981 tpnt
->restr_dma
= (SDp
->host
)->unchecked_isa_dma
;
3982 tpnt
->use_pf
= (SDp
->scsi_level
>= SCSI_2
);
3984 tpnt
->do_auto_lock
= ST_AUTO_LOCK
;
3985 tpnt
->can_bsr
= (SDp
->scsi_level
> 2 ? 1 : ST_IN_FILE_POS
); /* BSR mandatory in SCSI3 */
3986 tpnt
->can_partitions
= 0;
3987 tpnt
->two_fm
= ST_TWO_FM
;
3988 tpnt
->fast_mteom
= ST_FAST_MTEOM
;
3989 tpnt
->scsi2_logical
= ST_SCSI2LOGICAL
;
3990 tpnt
->immediate
= ST_NOWAIT
;
3991 tpnt
->default_drvbuffer
= 0xff; /* No forced buffering */
3992 tpnt
->partition
= 0;
3993 tpnt
->new_partition
= 0;
3994 tpnt
->nbr_partitions
= 0;
3995 tpnt
->device
->timeout
= ST_TIMEOUT
;
3996 tpnt
->long_timeout
= ST_LONG_TIMEOUT
;
3997 tpnt
->try_dio
= try_direct_io
&& !SDp
->host
->unchecked_isa_dma
;
3999 for (i
= 0; i
< ST_NBR_MODES
; i
++) {
4000 STm
= &(tpnt
->modes
[i
]);
4002 STm
->sysv
= ST_SYSV
;
4003 STm
->defaults_for_writes
= 0;
4004 STm
->do_async_writes
= ST_ASYNC_WRITES
;
4005 STm
->do_buffer_writes
= ST_BUFFER_WRITES
;
4006 STm
->do_read_ahead
= ST_READ_AHEAD
;
4007 STm
->default_compression
= ST_DONT_TOUCH
;
4008 STm
->default_blksize
= (-1); /* No forced size */
4009 STm
->default_density
= (-1); /* No forced density */
4012 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
4013 STps
= &(tpnt
->ps
[i
]);
4015 STps
->eof
= ST_NOEOF
;
4017 STps
->last_block_valid
= 0;
4018 STps
->drv_block
= (-1);
4019 STps
->drv_file
= (-1);
4022 tpnt
->current_mode
= 0;
4023 tpnt
->modes
[0].defined
= 1;
4025 tpnt
->density_changed
= tpnt
->compression_changed
=
4026 tpnt
->blksize_changed
= 0;
4027 mutex_init(&tpnt
->lock
);
4030 write_unlock(&st_dev_arr_lock
);
4032 for (mode
= 0; mode
< ST_NBR_MODES
; ++mode
) {
4033 STm
= &(tpnt
->modes
[mode
]);
4034 for (j
=0; j
< 2; j
++) {
4035 cdev
= cdev_alloc();
4038 "st%d: out of memory. Device not attached.\n",
4042 cdev
->owner
= THIS_MODULE
;
4043 cdev
->ops
= &st_fops
;
4045 error
= cdev_add(cdev
,
4046 MKDEV(SCSI_TAPE_MAJOR
, TAPE_MINOR(dev_num
, mode
, j
)),
4049 printk(KERN_ERR
"st%d: Can't add %s-rewind mode %d\n",
4050 dev_num
, j
? "non" : "auto", mode
);
4051 printk(KERN_ERR
"st%d: Device not attached.\n", dev_num
);
4054 STm
->cdevs
[j
] = cdev
;
4057 error
= do_create_class_files(tpnt
, dev_num
, mode
);
4062 sdev_printk(KERN_NOTICE
, SDp
,
4063 "Attached scsi tape %s\n", tape_name(tpnt
));
4064 sdev_printk(KERN_INFO
, SDp
, "%s: try direct i/o: %s (alignment %d B)\n",
4065 tape_name(tpnt
), tpnt
->try_dio
? "yes" : "no",
4066 queue_dma_alignment(SDp
->request_queue
) + 1);
4071 for (mode
=0; mode
< ST_NBR_MODES
; mode
++) {
4072 STm
= &(tpnt
->modes
[mode
]);
4073 sysfs_remove_link(&tpnt
->device
->sdev_gendev
.kobj
,
4075 for (j
=0; j
< 2; j
++) {
4076 if (STm
->cdevs
[j
]) {
4077 if (cdev
== STm
->cdevs
[j
])
4079 class_device_destroy(st_sysfs_class
,
4080 MKDEV(SCSI_TAPE_MAJOR
,
4081 TAPE_MINOR(i
, mode
, j
)));
4082 cdev_del(STm
->cdevs
[j
]);
4088 write_lock(&st_dev_arr_lock
);
4089 scsi_tapes
[dev_num
] = NULL
;
4091 write_unlock(&st_dev_arr_lock
);
4102 static int st_remove(struct device
*dev
)
4104 struct scsi_device
*SDp
= to_scsi_device(dev
);
4105 struct scsi_tape
*tpnt
;
4108 write_lock(&st_dev_arr_lock
);
4109 for (i
= 0; i
< st_dev_max
; i
++) {
4110 tpnt
= scsi_tapes
[i
];
4111 if (tpnt
!= NULL
&& tpnt
->device
== SDp
) {
4112 scsi_tapes
[i
] = NULL
;
4114 write_unlock(&st_dev_arr_lock
);
4115 sysfs_remove_link(&tpnt
->device
->sdev_gendev
.kobj
,
4117 for (mode
= 0; mode
< ST_NBR_MODES
; ++mode
) {
4118 for (j
=0; j
< 2; j
++) {
4119 class_device_destroy(st_sysfs_class
,
4120 MKDEV(SCSI_TAPE_MAJOR
,
4121 TAPE_MINOR(i
, mode
, j
)));
4122 cdev_del(tpnt
->modes
[mode
].cdevs
[j
]);
4123 tpnt
->modes
[mode
].cdevs
[j
] = NULL
;
4127 mutex_lock(&st_ref_mutex
);
4128 kref_put(&tpnt
->kref
, scsi_tape_release
);
4129 mutex_unlock(&st_ref_mutex
);
4134 write_unlock(&st_dev_arr_lock
);
4139 * scsi_tape_release - Called to free the Scsi_Tape structure
4140 * @kref: pointer to embedded kref
4142 * st_ref_mutex must be held entering this routine. Because it is
4143 * called on last put, you should always use the scsi_tape_get()
4144 * scsi_tape_put() helpers which manipulate the semaphore directly
4145 * and never do a direct kref_put().
4147 static void scsi_tape_release(struct kref
*kref
)
4149 struct scsi_tape
*tpnt
= to_scsi_tape(kref
);
4150 struct gendisk
*disk
= tpnt
->disk
;
4152 tpnt
->device
= NULL
;
4155 tpnt
->buffer
->orig_frp_segs
= 0;
4156 normalize_buffer(tpnt
->buffer
);
4157 kfree(tpnt
->buffer
);
4160 disk
->private_data
= NULL
;
4166 static int __init
init_st(void)
4172 printk(KERN_INFO
"st: Version %s, fixed bufsize %d, s/g segs %d\n",
4173 verstr
, st_fixed_buffer_size
, st_max_sg_segs
);
4175 st_sysfs_class
= class_create(THIS_MODULE
, "scsi_tape");
4176 if (IS_ERR(st_sysfs_class
)) {
4177 printk(KERN_ERR
"Unable create sysfs class for SCSI tapes\n");
4178 return PTR_ERR(st_sysfs_class
);
4181 err
= register_chrdev_region(MKDEV(SCSI_TAPE_MAJOR
, 0),
4182 ST_MAX_TAPE_ENTRIES
, "st");
4184 printk(KERN_ERR
"Unable to get major %d for SCSI tapes\n",
4189 err
= scsi_register_driver(&st_template
.gendrv
);
4193 err
= do_create_sysfs_files();
4200 scsi_unregister_driver(&st_template
.gendrv
);
4202 unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR
, 0),
4203 ST_MAX_TAPE_ENTRIES
);
4205 class_destroy(st_sysfs_class
);
4209 static void __exit
exit_st(void)
4211 do_remove_sysfs_files();
4212 scsi_unregister_driver(&st_template
.gendrv
);
4213 unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR
, 0),
4214 ST_MAX_TAPE_ENTRIES
);
4215 class_destroy(st_sysfs_class
);
4217 printk(KERN_INFO
"st: Unloaded.\n");
4220 module_init(init_st
);
4221 module_exit(exit_st
);
4224 /* The sysfs driver interface. Read-only at the moment */
4225 static ssize_t
st_try_direct_io_show(struct device_driver
*ddp
, char *buf
)
4227 return snprintf(buf
, PAGE_SIZE
, "%d\n", try_direct_io
);
4229 static DRIVER_ATTR(try_direct_io
, S_IRUGO
, st_try_direct_io_show
, NULL
);
4231 static ssize_t
st_fixed_buffer_size_show(struct device_driver
*ddp
, char *buf
)
4233 return snprintf(buf
, PAGE_SIZE
, "%d\n", st_fixed_buffer_size
);
4235 static DRIVER_ATTR(fixed_buffer_size
, S_IRUGO
, st_fixed_buffer_size_show
, NULL
);
4237 static ssize_t
st_max_sg_segs_show(struct device_driver
*ddp
, char *buf
)
4239 return snprintf(buf
, PAGE_SIZE
, "%d\n", st_max_sg_segs
);
4241 static DRIVER_ATTR(max_sg_segs
, S_IRUGO
, st_max_sg_segs_show
, NULL
);
4243 static ssize_t
st_version_show(struct device_driver
*ddd
, char *buf
)
4245 return snprintf(buf
, PAGE_SIZE
, "[%s]\n", verstr
);
4247 static DRIVER_ATTR(version
, S_IRUGO
, st_version_show
, NULL
);
4249 static int do_create_sysfs_files(void)
4251 struct device_driver
*sysfs
= &st_template
.gendrv
;
4254 err
= driver_create_file(sysfs
, &driver_attr_try_direct_io
);
4257 err
= driver_create_file(sysfs
, &driver_attr_fixed_buffer_size
);
4259 goto err_try_direct_io
;
4260 err
= driver_create_file(sysfs
, &driver_attr_max_sg_segs
);
4262 goto err_attr_fixed_buf
;
4263 err
= driver_create_file(sysfs
, &driver_attr_version
);
4265 goto err_attr_max_sg
;
4270 driver_remove_file(sysfs
, &driver_attr_max_sg_segs
);
4272 driver_remove_file(sysfs
, &driver_attr_fixed_buffer_size
);
4274 driver_remove_file(sysfs
, &driver_attr_try_direct_io
);
4278 static void do_remove_sysfs_files(void)
4280 struct device_driver
*sysfs
= &st_template
.gendrv
;
4282 driver_remove_file(sysfs
, &driver_attr_version
);
4283 driver_remove_file(sysfs
, &driver_attr_max_sg_segs
);
4284 driver_remove_file(sysfs
, &driver_attr_fixed_buffer_size
);
4285 driver_remove_file(sysfs
, &driver_attr_try_direct_io
);
4289 /* The sysfs simple class interface */
4290 static ssize_t
st_defined_show(struct class_device
*class_dev
, char *buf
)
4292 struct st_modedef
*STm
= (struct st_modedef
*)class_get_devdata(class_dev
);
4295 l
= snprintf(buf
, PAGE_SIZE
, "%d\n", STm
->defined
);
4299 CLASS_DEVICE_ATTR(defined
, S_IRUGO
, st_defined_show
, NULL
);
4301 static ssize_t
st_defblk_show(struct class_device
*class_dev
, char *buf
)
4303 struct st_modedef
*STm
= (struct st_modedef
*)class_get_devdata(class_dev
);
4306 l
= snprintf(buf
, PAGE_SIZE
, "%d\n", STm
->default_blksize
);
4310 CLASS_DEVICE_ATTR(default_blksize
, S_IRUGO
, st_defblk_show
, NULL
);
4312 static ssize_t
st_defdensity_show(struct class_device
*class_dev
, char *buf
)
4314 struct st_modedef
*STm
= (struct st_modedef
*)class_get_devdata(class_dev
);
4318 fmt
= STm
->default_density
>= 0 ? "0x%02x\n" : "%d\n";
4319 l
= snprintf(buf
, PAGE_SIZE
, fmt
, STm
->default_density
);
4323 CLASS_DEVICE_ATTR(default_density
, S_IRUGO
, st_defdensity_show
, NULL
);
4325 static ssize_t
st_defcompression_show(struct class_device
*class_dev
, char *buf
)
4327 struct st_modedef
*STm
= (struct st_modedef
*)class_get_devdata(class_dev
);
4330 l
= snprintf(buf
, PAGE_SIZE
, "%d\n", STm
->default_compression
- 1);
4334 CLASS_DEVICE_ATTR(default_compression
, S_IRUGO
, st_defcompression_show
, NULL
);
4336 static int do_create_class_files(struct scsi_tape
*STp
, int dev_num
, int mode
)
4340 struct class_device
*st_class_member
;
4342 for (rew
=0; rew
< 2; rew
++) {
4343 /* Make sure that the minor numbers corresponding to the four
4344 first modes always get the same names */
4345 i
= mode
<< (4 - ST_NBR_MODE_BITS
);
4346 snprintf(name
, 10, "%s%s%s", rew
? "n" : "",
4347 STp
->disk
->disk_name
, st_formats
[i
]);
4349 class_device_create(st_sysfs_class
, NULL
,
4350 MKDEV(SCSI_TAPE_MAJOR
,
4351 TAPE_MINOR(dev_num
, mode
, rew
)),
4352 &STp
->device
->sdev_gendev
, "%s", name
);
4353 if (IS_ERR(st_class_member
)) {
4354 printk(KERN_WARNING
"st%d: class_device_create failed\n",
4356 error
= PTR_ERR(st_class_member
);
4359 class_set_devdata(st_class_member
, &STp
->modes
[mode
]);
4361 error
= class_device_create_file(st_class_member
,
4362 &class_device_attr_defined
);
4363 if (error
) goto out
;
4364 error
= class_device_create_file(st_class_member
,
4365 &class_device_attr_default_blksize
);
4366 if (error
) goto out
;
4367 error
= class_device_create_file(st_class_member
,
4368 &class_device_attr_default_density
);
4369 if (error
) goto out
;
4370 error
= class_device_create_file(st_class_member
,
4371 &class_device_attr_default_compression
);
4372 if (error
) goto out
;
4374 if (mode
== 0 && rew
== 0) {
4375 error
= sysfs_create_link(&STp
->device
->sdev_gendev
.kobj
,
4376 &st_class_member
->kobj
,
4380 "st%d: Can't create sysfs link from SCSI device.\n",
4393 /* The following functions may be useful for a larger audience. */
4394 static int sgl_map_user_pages(struct scatterlist
*sgl
, const unsigned int max_pages
,
4395 unsigned long uaddr
, size_t count
, int rw
)
4397 unsigned long end
= (uaddr
+ count
+ PAGE_SIZE
- 1) >> PAGE_SHIFT
;
4398 unsigned long start
= uaddr
>> PAGE_SHIFT
;
4399 const int nr_pages
= end
- start
;
4401 struct page
**pages
;
4403 /* User attempted Overflow! */
4404 if ((uaddr
+ count
) < uaddr
)
4408 if (nr_pages
> max_pages
)
4415 if ((pages
= kmalloc(max_pages
* sizeof(*pages
), GFP_KERNEL
)) == NULL
)
4418 /* Try to fault in all of the necessary pages */
4419 down_read(¤t
->mm
->mmap_sem
);
4420 /* rw==READ means read from drive, write into memory area */
4421 res
= get_user_pages(
4427 0, /* don't force */
4430 up_read(¤t
->mm
->mmap_sem
);
4432 /* Errors and no page mapped should return here */
4436 for (i
=0; i
< nr_pages
; i
++) {
4437 /* FIXME: flush superflous for rw==READ,
4438 * probably wrong function for rw==WRITE
4440 flush_dcache_page(pages
[i
]);
4443 /* Populate the scatter/gather list */
4444 sg_set_page(&sgl
[0], pages
[0], 0, uaddr
& ~PAGE_MASK
);
4446 sgl
[0].length
= PAGE_SIZE
- sgl
[0].offset
;
4447 count
-= sgl
[0].length
;
4448 for (i
=1; i
< nr_pages
; i
++) {
4449 sg_set_page(&sgl
[i
], pages
[i
],
4450 count
< PAGE_SIZE
? count
: PAGE_SIZE
, 0);;
4455 sgl
[0].length
= count
;
4463 for (j
=0; j
< res
; j
++)
4464 page_cache_release(pages
[j
]);
4472 /* And unmap them... */
4473 static int sgl_unmap_user_pages(struct scatterlist
*sgl
, const unsigned int nr_pages
,
4478 for (i
=0; i
< nr_pages
; i
++) {
4479 struct page
*page
= sg_page(&sgl
[i
]);
4483 /* FIXME: cache flush missing for rw==READ
4484 * FIXME: call the correct reference counting function
4486 page_cache_release(page
);