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