Commit b6cba4ee authored by Stefan Bader's avatar Stefan Bader Committed by Linus Torvalds
Browse files

[PATCH] s390: 3590 tape driver



      Michael Holzheu <holzheu@de.ibm.com>,
      Martin Schwidefsky <schwidefsky@de.ibm.com>

Signed-off-by: default avatarStefan Bader <shbader@de.ibm.com>
Signed-off-by: default avatarMichael Holzheu <holzheu@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 5f384338
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -183,7 +183,13 @@ config S390_TAPE_34XX
	  tape subsystems and 100% compatibles.
	  It is safe to say "Y" here.


config S390_TAPE_3590
	tristate "Support for 3590 tape hardware"
	depends on S390_TAPE
	help
	  Select this option if you want to access IBM 3590 magnetic
	  tape subsystems and 100% compatibles.
	  It is safe to say "Y" here.

config VMLOGRDR
	tristate "Support for the z/VM recording system services (VM only)"
+1 −0
Original line number Diff line number Diff line
@@ -26,4 +26,5 @@ tape-$(CONFIG_PROC_FS) += tape_proc.o
tape-objs := tape_core.o tape_std.o tape_char.o $(tape-y)
obj-$(CONFIG_S390_TAPE) += tape.o tape_class.o
obj-$(CONFIG_S390_TAPE_34XX) += tape_34xx.o
obj-$(CONFIG_S390_TAPE_3590) += tape_3590.o
obj-$(CONFIG_MONREADER) += monreader.o
+1 −7
Original line number Diff line number Diff line
@@ -2,8 +2,7 @@
 *  drivers/s390/char/tape_34xx.c
 *    tape device discipline for 3480/3490 tapes.
 *
 *  S390 and zSeries version
 *    Copyright (C) 2001,2002 IBM Deutschland Entwicklung GmbH, IBM Corporation
 *    Copyright (C) IBM Corp. 2001,2006
 *    Author(s): Carsten Otte <cotte@de.ibm.com>
 *		 Tuan Ngo-Anh <ngoanh@de.ibm.com>
 *		 Martin Schwidefsky <schwidefsky@de.ibm.com>
@@ -28,11 +27,6 @@
debug_info_t *TAPE_DBF_AREA = NULL;
EXPORT_SYMBOL(TAPE_DBF_AREA);

enum tape_34xx_type {
	tape_3480,
	tape_3490,
};

#define TAPE34XX_FMT_3480	0
#define TAPE34XX_FMT_3480_2_XF	1
#define TAPE34XX_FMT_3480_XF	2
+1301 −0

File added.

Preview size limit exceeded, changes collapsed.

+124 −0
Original line number Diff line number Diff line
/*
 *  drivers/s390/char/tape_3590.h
 *    tape device discipline for 3590 tapes.
 *
 *    Copyright (C) IBM Corp. 2001,2006
 *    Author(s): Stefan Bader <shbader@de.ibm.com>
 *		 Michael Holzheu <holzheu@de.ibm.com>
 *		 Martin Schwidefsky <schwidefsky@de.ibm.com>
 */

#ifndef _TAPE_3590_H
#define _TAPE_3590_H

#define MEDIUM_SENSE	0xc2
#define READ_PREVIOUS	0x0a
#define MODE_SENSE	0xcf
#define PERFORM_SS_FUNC 0x77
#define READ_SS_DATA	0x3e

#define PREP_RD_SS_DATA 0x18
#define RD_ATTMSG	0x3

#define SENSE_BRA_PER  0
#define SENSE_BRA_CONT 1
#define SENSE_BRA_RE   2
#define SENSE_BRA_DRE  3

#define SENSE_FMT_LIBRARY	0x23
#define SENSE_FMT_UNSOLICITED	0x40
#define SENSE_FMT_COMMAND_REJ	0x41
#define SENSE_FMT_COMMAND_EXEC0 0x50
#define SENSE_FMT_COMMAND_EXEC1 0x51
#define SENSE_FMT_EVENT0	0x60
#define SENSE_FMT_EVENT1	0x61
#define SENSE_FMT_MIM		0x70
#define SENSE_FMT_SIM		0x71

#define MSENSE_UNASSOCIATED	 0x00
#define MSENSE_ASSOCIATED_MOUNT	 0x01
#define MSENSE_ASSOCIATED_UMOUNT 0x02

#define TAPE_3590_MAX_MSG	 0xb0

/* Datatypes */

struct tape_3590_disc_data {
	unsigned char modeset_byte;
	int read_back_op;
};

struct tape_3590_sense {

	unsigned int command_rej:1;
	unsigned int interv_req:1;
	unsigned int bus_out_check:1;
	unsigned int eq_check:1;
	unsigned int data_check:1;
	unsigned int overrun:1;
	unsigned int def_unit_check:1;
	unsigned int assgnd_elsew:1;

	unsigned int locate_fail:1;
	unsigned int inst_online:1;
	unsigned int reserved:1;
	unsigned int blk_seq_err:1;
	unsigned int begin_part:1;
	unsigned int wr_mode:1;
	unsigned int wr_prot:1;
	unsigned int not_cap:1;

	unsigned int bra:2;
	unsigned int lc:3;
	unsigned int vlf_active:1;
	unsigned int stm:1;
	unsigned int med_pos:1;

	unsigned int rac:8;

	unsigned int rc_rqc:16;

	unsigned int mc:8;

	unsigned int sense_fmt:8;

	union {
		struct {
			unsigned int emc:4;
			unsigned int smc:4;
			unsigned int sev:2;
			unsigned int reserved:6;
			unsigned int md:8;
			unsigned int refcode:8;
			unsigned int mid:16;
			unsigned int mp:16;
			unsigned char volid[6];
			unsigned int fid:8;
		} f70;
		struct {
			unsigned int emc:4;
			unsigned int smc:4;
			unsigned int sev:2;
			unsigned int reserved1:5;
			unsigned int mdf:1;
			unsigned char md[3];
			unsigned int simid:8;
			unsigned int uid:16;
			unsigned int refcode1:16;
			unsigned int refcode2:16;
			unsigned int refcode3:16;
			unsigned int reserved2:8;
		} f71;
		unsigned char data[14];
	} fmt;
	unsigned char pad[10];

} __attribute__ ((packed));

struct tape_3590_med_sense {
	unsigned int macst:4;
	unsigned int masst:4;
	char pad[127];
} __attribute__ ((packed));

#endif /* _TAPE_3590_H */
Loading