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