162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 262306a36Sopenharmony_ci/************************************************************************* 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * enables user programs to display messages and control encryption 562306a36Sopenharmony_ci * on s390 tape devices 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Copyright IBM Corp. 2001, 2006 862306a36Sopenharmony_ci * Author(s): Michael Holzheu <holzheu@de.ibm.com> 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci *************************************************************************/ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#ifndef _TAPE390_H 1362306a36Sopenharmony_ci#define _TAPE390_H 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#define TAPE390_DISPLAY _IOW('d', 1, struct display_struct) 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci/* 1862306a36Sopenharmony_ci * The TAPE390_DISPLAY ioctl calls the Load Display command 1962306a36Sopenharmony_ci * which transfers 17 bytes of data from the channel to the subsystem: 2062306a36Sopenharmony_ci * - 1 format control byte, and 2162306a36Sopenharmony_ci * - two 8-byte messages 2262306a36Sopenharmony_ci * 2362306a36Sopenharmony_ci * Format control byte: 2462306a36Sopenharmony_ci * 0-2: New Message Overlay 2562306a36Sopenharmony_ci * 3: Alternate Messages 2662306a36Sopenharmony_ci * 4: Blink Message 2762306a36Sopenharmony_ci * 5: Display Low/High Message 2862306a36Sopenharmony_ci * 6: Reserved 2962306a36Sopenharmony_ci * 7: Automatic Load Request 3062306a36Sopenharmony_ci * 3162306a36Sopenharmony_ci */ 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_citypedef struct display_struct { 3462306a36Sopenharmony_ci char cntrl; 3562306a36Sopenharmony_ci char message1[8]; 3662306a36Sopenharmony_ci char message2[8]; 3762306a36Sopenharmony_ci} display_struct; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci/* 4062306a36Sopenharmony_ci * Tape encryption support 4162306a36Sopenharmony_ci */ 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cistruct tape390_crypt_info { 4462306a36Sopenharmony_ci char capability; 4562306a36Sopenharmony_ci char status; 4662306a36Sopenharmony_ci char medium_status; 4762306a36Sopenharmony_ci} __attribute__ ((packed)); 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci/* Macros for "capable" field */ 5162306a36Sopenharmony_ci#define TAPE390_CRYPT_SUPPORTED_MASK 0x01 5262306a36Sopenharmony_ci#define TAPE390_CRYPT_SUPPORTED(x) \ 5362306a36Sopenharmony_ci ((x.capability & TAPE390_CRYPT_SUPPORTED_MASK)) 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci/* Macros for "status" field */ 5662306a36Sopenharmony_ci#define TAPE390_CRYPT_ON_MASK 0x01 5762306a36Sopenharmony_ci#define TAPE390_CRYPT_ON(x) (((x.status) & TAPE390_CRYPT_ON_MASK)) 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci/* Macros for "medium status" field */ 6062306a36Sopenharmony_ci#define TAPE390_MEDIUM_LOADED_MASK 0x01 6162306a36Sopenharmony_ci#define TAPE390_MEDIUM_ENCRYPTED_MASK 0x02 6262306a36Sopenharmony_ci#define TAPE390_MEDIUM_ENCRYPTED(x) \ 6362306a36Sopenharmony_ci (((x.medium_status) & TAPE390_MEDIUM_ENCRYPTED_MASK)) 6462306a36Sopenharmony_ci#define TAPE390_MEDIUM_LOADED(x) \ 6562306a36Sopenharmony_ci (((x.medium_status) & TAPE390_MEDIUM_LOADED_MASK)) 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci/* 6862306a36Sopenharmony_ci * The TAPE390_CRYPT_SET ioctl is used to switch on/off encryption. 6962306a36Sopenharmony_ci * The "encryption_capable" and "tape_status" fields are ignored for this ioctl! 7062306a36Sopenharmony_ci */ 7162306a36Sopenharmony_ci#define TAPE390_CRYPT_SET _IOW('d', 2, struct tape390_crypt_info) 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci/* 7462306a36Sopenharmony_ci * The TAPE390_CRYPT_QUERY ioctl is used to query the encryption state. 7562306a36Sopenharmony_ci */ 7662306a36Sopenharmony_ci#define TAPE390_CRYPT_QUERY _IOR('d', 3, struct tape390_crypt_info) 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci/* Values for "kekl1/2_type" and "kekl1/2_type_on_tape" fields */ 7962306a36Sopenharmony_ci#define TAPE390_KEKL_TYPE_NONE 0 8062306a36Sopenharmony_ci#define TAPE390_KEKL_TYPE_LABEL 1 8162306a36Sopenharmony_ci#define TAPE390_KEKL_TYPE_HASH 2 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_cistruct tape390_kekl { 8462306a36Sopenharmony_ci unsigned char type; 8562306a36Sopenharmony_ci unsigned char type_on_tape; 8662306a36Sopenharmony_ci char label[65]; 8762306a36Sopenharmony_ci} __attribute__ ((packed)); 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_cistruct tape390_kekl_pair { 9062306a36Sopenharmony_ci struct tape390_kekl kekl[2]; 9162306a36Sopenharmony_ci} __attribute__ ((packed)); 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci/* 9462306a36Sopenharmony_ci * The TAPE390_KEKL_SET ioctl is used to set Key Encrypting Key labels. 9562306a36Sopenharmony_ci */ 9662306a36Sopenharmony_ci#define TAPE390_KEKL_SET _IOW('d', 4, struct tape390_kekl_pair) 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci/* 9962306a36Sopenharmony_ci * The TAPE390_KEKL_QUERY ioctl is used to query Key Encrypting Key labels. 10062306a36Sopenharmony_ci */ 10162306a36Sopenharmony_ci#define TAPE390_KEKL_QUERY _IOR('d', 5, struct tape390_kekl_pair) 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci#endif 104