1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*4882a593Smuzhiyun /************************************************************************* 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * enables user programs to display messages and control encryption 5*4882a593Smuzhiyun * on s390 tape devices 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Copyright IBM Corp. 2001, 2006 8*4882a593Smuzhiyun * Author(s): Michael Holzheu <holzheu@de.ibm.com> 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun *************************************************************************/ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifndef _TAPE390_H 13*4882a593Smuzhiyun #define _TAPE390_H 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define TAPE390_DISPLAY _IOW('d', 1, struct display_struct) 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun /* 18*4882a593Smuzhiyun * The TAPE390_DISPLAY ioctl calls the Load Display command 19*4882a593Smuzhiyun * which transfers 17 bytes of data from the channel to the subsystem: 20*4882a593Smuzhiyun * - 1 format control byte, and 21*4882a593Smuzhiyun * - two 8-byte messages 22*4882a593Smuzhiyun * 23*4882a593Smuzhiyun * Format control byte: 24*4882a593Smuzhiyun * 0-2: New Message Overlay 25*4882a593Smuzhiyun * 3: Alternate Messages 26*4882a593Smuzhiyun * 4: Blink Message 27*4882a593Smuzhiyun * 5: Display Low/High Message 28*4882a593Smuzhiyun * 6: Reserved 29*4882a593Smuzhiyun * 7: Automatic Load Request 30*4882a593Smuzhiyun * 31*4882a593Smuzhiyun */ 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun typedef struct display_struct { 34*4882a593Smuzhiyun char cntrl; 35*4882a593Smuzhiyun char message1[8]; 36*4882a593Smuzhiyun char message2[8]; 37*4882a593Smuzhiyun } display_struct; 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun /* 40*4882a593Smuzhiyun * Tape encryption support 41*4882a593Smuzhiyun */ 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun struct tape390_crypt_info { 44*4882a593Smuzhiyun char capability; 45*4882a593Smuzhiyun char status; 46*4882a593Smuzhiyun char medium_status; 47*4882a593Smuzhiyun } __attribute__ ((packed)); 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun /* Macros for "capable" field */ 51*4882a593Smuzhiyun #define TAPE390_CRYPT_SUPPORTED_MASK 0x01 52*4882a593Smuzhiyun #define TAPE390_CRYPT_SUPPORTED(x) \ 53*4882a593Smuzhiyun ((x.capability & TAPE390_CRYPT_SUPPORTED_MASK)) 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun /* Macros for "status" field */ 56*4882a593Smuzhiyun #define TAPE390_CRYPT_ON_MASK 0x01 57*4882a593Smuzhiyun #define TAPE390_CRYPT_ON(x) (((x.status) & TAPE390_CRYPT_ON_MASK)) 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun /* Macros for "medium status" field */ 60*4882a593Smuzhiyun #define TAPE390_MEDIUM_LOADED_MASK 0x01 61*4882a593Smuzhiyun #define TAPE390_MEDIUM_ENCRYPTED_MASK 0x02 62*4882a593Smuzhiyun #define TAPE390_MEDIUM_ENCRYPTED(x) \ 63*4882a593Smuzhiyun (((x.medium_status) & TAPE390_MEDIUM_ENCRYPTED_MASK)) 64*4882a593Smuzhiyun #define TAPE390_MEDIUM_LOADED(x) \ 65*4882a593Smuzhiyun (((x.medium_status) & TAPE390_MEDIUM_LOADED_MASK)) 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /* 68*4882a593Smuzhiyun * The TAPE390_CRYPT_SET ioctl is used to switch on/off encryption. 69*4882a593Smuzhiyun * The "encryption_capable" and "tape_status" fields are ignored for this ioctl! 70*4882a593Smuzhiyun */ 71*4882a593Smuzhiyun #define TAPE390_CRYPT_SET _IOW('d', 2, struct tape390_crypt_info) 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun /* 74*4882a593Smuzhiyun * The TAPE390_CRYPT_QUERY ioctl is used to query the encryption state. 75*4882a593Smuzhiyun */ 76*4882a593Smuzhiyun #define TAPE390_CRYPT_QUERY _IOR('d', 3, struct tape390_crypt_info) 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun /* Values for "kekl1/2_type" and "kekl1/2_type_on_tape" fields */ 79*4882a593Smuzhiyun #define TAPE390_KEKL_TYPE_NONE 0 80*4882a593Smuzhiyun #define TAPE390_KEKL_TYPE_LABEL 1 81*4882a593Smuzhiyun #define TAPE390_KEKL_TYPE_HASH 2 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun struct tape390_kekl { 84*4882a593Smuzhiyun unsigned char type; 85*4882a593Smuzhiyun unsigned char type_on_tape; 86*4882a593Smuzhiyun char label[65]; 87*4882a593Smuzhiyun } __attribute__ ((packed)); 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun struct tape390_kekl_pair { 90*4882a593Smuzhiyun struct tape390_kekl kekl[2]; 91*4882a593Smuzhiyun } __attribute__ ((packed)); 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun /* 94*4882a593Smuzhiyun * The TAPE390_KEKL_SET ioctl is used to set Key Encrypting Key labels. 95*4882a593Smuzhiyun */ 96*4882a593Smuzhiyun #define TAPE390_KEKL_SET _IOW('d', 4, struct tape390_kekl_pair) 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun /* 99*4882a593Smuzhiyun * The TAPE390_KEKL_QUERY ioctl is used to query Key Encrypting Key labels. 100*4882a593Smuzhiyun */ 101*4882a593Smuzhiyun #define TAPE390_KEKL_QUERY _IOR('d', 5, struct tape390_kekl_pair) 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun #endif 104