xref: /linux/arch/s390/include/uapi/asm/tape390.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*6f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
21da177e4SLinus Torvalds /*************************************************************************
31da177e4SLinus Torvalds  *
4cced1dd4SMichael Holzheu  *	   enables user programs to display messages and control encryption
5cced1dd4SMichael Holzheu  *	   on s390 tape devices
61da177e4SLinus Torvalds  *
7cced1dd4SMichael Holzheu  *	   Copyright IBM Corp. 2001, 2006
8cced1dd4SMichael Holzheu  *	   Author(s): Michael Holzheu <holzheu@de.ibm.com>
91da177e4SLinus Torvalds  *
101da177e4SLinus Torvalds  *************************************************************************/
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds #ifndef _TAPE390_H
131da177e4SLinus Torvalds #define _TAPE390_H
141da177e4SLinus Torvalds 
151da177e4SLinus Torvalds #define TAPE390_DISPLAY _IOW('d', 1, struct display_struct)
161da177e4SLinus Torvalds 
171da177e4SLinus Torvalds /*
181da177e4SLinus Torvalds  * The TAPE390_DISPLAY ioctl calls the Load Display command
191da177e4SLinus Torvalds  * which transfers 17 bytes of data from the channel to the subsystem:
201da177e4SLinus Torvalds  *     - 1 format control byte, and
211da177e4SLinus Torvalds  *     - two 8-byte messages
221da177e4SLinus Torvalds  *
231da177e4SLinus Torvalds  * Format control byte:
241da177e4SLinus Torvalds  *   0-2: New Message Overlay
251da177e4SLinus Torvalds  *     3: Alternate Messages
261da177e4SLinus Torvalds  *     4: Blink Message
271da177e4SLinus Torvalds  *     5: Display Low/High Message
281da177e4SLinus Torvalds  *     6: Reserved
291da177e4SLinus Torvalds  *     7: Automatic Load Request
301da177e4SLinus Torvalds  *
311da177e4SLinus Torvalds  */
321da177e4SLinus Torvalds 
331da177e4SLinus Torvalds typedef struct display_struct {
341da177e4SLinus Torvalds         char cntrl;
351da177e4SLinus Torvalds         char message1[8];
361da177e4SLinus Torvalds         char message2[8];
371da177e4SLinus Torvalds } display_struct;
381da177e4SLinus Torvalds 
39cced1dd4SMichael Holzheu /*
40cced1dd4SMichael Holzheu  * Tape encryption support
41cced1dd4SMichael Holzheu  */
42cced1dd4SMichael Holzheu 
43cced1dd4SMichael Holzheu struct tape390_crypt_info {
44cced1dd4SMichael Holzheu 	char capability;
45cced1dd4SMichael Holzheu 	char status;
46cced1dd4SMichael Holzheu 	char medium_status;
47cced1dd4SMichael Holzheu } __attribute__ ((packed));
48cced1dd4SMichael Holzheu 
49cced1dd4SMichael Holzheu 
50cced1dd4SMichael Holzheu /* Macros for "capable" field */
51cced1dd4SMichael Holzheu #define TAPE390_CRYPT_SUPPORTED_MASK 0x01
52cced1dd4SMichael Holzheu #define TAPE390_CRYPT_SUPPORTED(x) \
53cced1dd4SMichael Holzheu 	((x.capability & TAPE390_CRYPT_SUPPORTED_MASK))
54cced1dd4SMichael Holzheu 
55cced1dd4SMichael Holzheu /* Macros for "status" field */
56cced1dd4SMichael Holzheu #define TAPE390_CRYPT_ON_MASK 0x01
57cced1dd4SMichael Holzheu #define TAPE390_CRYPT_ON(x) (((x.status) & TAPE390_CRYPT_ON_MASK))
58cced1dd4SMichael Holzheu 
59cced1dd4SMichael Holzheu /* Macros for "medium status" field */
60cced1dd4SMichael Holzheu #define TAPE390_MEDIUM_LOADED_MASK 0x01
61cced1dd4SMichael Holzheu #define TAPE390_MEDIUM_ENCRYPTED_MASK 0x02
62cced1dd4SMichael Holzheu #define TAPE390_MEDIUM_ENCRYPTED(x) \
63cced1dd4SMichael Holzheu 	(((x.medium_status) & TAPE390_MEDIUM_ENCRYPTED_MASK))
64cced1dd4SMichael Holzheu #define TAPE390_MEDIUM_LOADED(x) \
65cced1dd4SMichael Holzheu 	(((x.medium_status) & TAPE390_MEDIUM_LOADED_MASK))
66cced1dd4SMichael Holzheu 
67cced1dd4SMichael Holzheu /*
68cced1dd4SMichael Holzheu  * The TAPE390_CRYPT_SET ioctl is used to switch on/off encryption.
69cced1dd4SMichael Holzheu  * The "encryption_capable" and "tape_status" fields are ignored for this ioctl!
70cced1dd4SMichael Holzheu  */
71cced1dd4SMichael Holzheu #define TAPE390_CRYPT_SET _IOW('d', 2, struct tape390_crypt_info)
72cced1dd4SMichael Holzheu 
73cced1dd4SMichael Holzheu /*
74cced1dd4SMichael Holzheu  * The TAPE390_CRYPT_QUERY ioctl is used to query the encryption state.
75cced1dd4SMichael Holzheu  */
76cced1dd4SMichael Holzheu #define TAPE390_CRYPT_QUERY _IOR('d', 3, struct tape390_crypt_info)
77cced1dd4SMichael Holzheu 
78cced1dd4SMichael Holzheu /* Values for "kekl1/2_type" and "kekl1/2_type_on_tape" fields */
79cced1dd4SMichael Holzheu #define TAPE390_KEKL_TYPE_NONE 0
80cced1dd4SMichael Holzheu #define TAPE390_KEKL_TYPE_LABEL 1
81cced1dd4SMichael Holzheu #define TAPE390_KEKL_TYPE_HASH 2
82cced1dd4SMichael Holzheu 
83cced1dd4SMichael Holzheu struct tape390_kekl {
84cced1dd4SMichael Holzheu 	unsigned char type;
85cced1dd4SMichael Holzheu 	unsigned char type_on_tape;
86cced1dd4SMichael Holzheu 	char label[65];
87cced1dd4SMichael Holzheu } __attribute__ ((packed));
88cced1dd4SMichael Holzheu 
89cced1dd4SMichael Holzheu struct tape390_kekl_pair {
90cced1dd4SMichael Holzheu 	struct tape390_kekl kekl[2];
91cced1dd4SMichael Holzheu } __attribute__ ((packed));
92cced1dd4SMichael Holzheu 
93cced1dd4SMichael Holzheu /*
94cced1dd4SMichael Holzheu  * The TAPE390_KEKL_SET ioctl is used to set Key Encrypting Key labels.
95cced1dd4SMichael Holzheu  */
96cced1dd4SMichael Holzheu #define TAPE390_KEKL_SET _IOW('d', 4, struct tape390_kekl_pair)
97cced1dd4SMichael Holzheu 
98cced1dd4SMichael Holzheu /*
99cced1dd4SMichael Holzheu  * The TAPE390_KEKL_QUERY ioctl is used to query Key Encrypting Key labels.
100cced1dd4SMichael Holzheu  */
101cced1dd4SMichael Holzheu #define TAPE390_KEKL_QUERY _IOR('d', 5, struct tape390_kekl_pair)
102cced1dd4SMichael Holzheu 
1031da177e4SLinus Torvalds #endif
104