^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Horst Hummel <Horst.Hummel@de.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Bugreports.to..: <Linux390@de.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright IBM Corp. 1999, 2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #ifndef DASD_ECKD_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define DASD_ECKD_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) /*****************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * SECTION: CCW Definitions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) ****************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #define DASD_ECKD_CCW_WRITE 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define DASD_ECKD_CCW_READ 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define DASD_ECKD_CCW_WRITE_HOME_ADDRESS 0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define DASD_ECKD_CCW_READ_HOME_ADDRESS 0x0a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define DASD_ECKD_CCW_WRITE_KD 0x0d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define DASD_ECKD_CCW_READ_KD 0x0e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define DASD_ECKD_CCW_ERASE 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define DASD_ECKD_CCW_READ_COUNT 0x12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define DASD_ECKD_CCW_SLCK 0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define DASD_ECKD_CCW_WRITE_RECORD_ZERO 0x15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define DASD_ECKD_CCW_READ_RECORD_ZERO 0x16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define DASD_ECKD_CCW_WRITE_CKD 0x1d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define DASD_ECKD_CCW_READ_CKD 0x1e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define DASD_ECKD_CCW_PSF 0x27
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define DASD_ECKD_CCW_SNID 0x34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define DASD_ECKD_CCW_RSSD 0x3e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define DASD_ECKD_CCW_LOCATE_RECORD 0x47
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define DASD_ECKD_CCW_LOCATE_RECORD_EXT 0x4b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #define DASD_ECKD_CCW_SNSS 0x54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #define DASD_ECKD_CCW_DEFINE_EXTENT 0x63
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define DASD_ECKD_CCW_WRITE_MT 0x85
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define DASD_ECKD_CCW_READ_MT 0x86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define DASD_ECKD_CCW_WRITE_KD_MT 0x8d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define DASD_ECKD_CCW_READ_KD_MT 0x8e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define DASD_ECKD_CCW_READ_COUNT_MT 0x92
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define DASD_ECKD_CCW_RELEASE 0x94
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define DASD_ECKD_CCW_WRITE_FULL_TRACK 0x95
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define DASD_ECKD_CCW_READ_CKD_MT 0x9e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define DASD_ECKD_CCW_WRITE_CKD_MT 0x9d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define DASD_ECKD_CCW_WRITE_TRACK_DATA 0xA5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define DASD_ECKD_CCW_READ_TRACK_DATA 0xA6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define DASD_ECKD_CCW_RESERVE 0xB4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define DASD_ECKD_CCW_READ_TRACK 0xDE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define DASD_ECKD_CCW_PFX 0xE7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define DASD_ECKD_CCW_PFX_READ 0xEA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define DASD_ECKD_CCW_RSCK 0xF9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define DASD_ECKD_CCW_RCD 0xFA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define DASD_ECKD_CCW_DSO 0xF7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) /* Define Subssystem Function / Orders */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define DSO_ORDER_RAS 0x81
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) * Perform Subsystem Function / Orders
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) #define PSF_ORDER_PRSSD 0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define PSF_ORDER_CUIR_RESPONSE 0x1A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define PSF_ORDER_SSC 0x1D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) * Perform Subsystem Function / Sub-Orders
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define PSF_SUBORDER_QHA 0x1C /* Query Host Access */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #define PSF_SUBORDER_VSQ 0x52 /* Volume Storage Query */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define PSF_SUBORDER_LCQ 0x53 /* Logical Configuration Query */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) * CUIR response condition codes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define PSF_CUIR_INVALID 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) #define PSF_CUIR_COMPLETED 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define PSF_CUIR_NOT_SUPPORTED 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define PSF_CUIR_ERROR_IN_REQ 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define PSF_CUIR_DENIED 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define PSF_CUIR_LAST_PATH 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define PSF_CUIR_DEVICE_ONLINE 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #define PSF_CUIR_VARY_FAILURE 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define PSF_CUIR_SOFTWARE_FAILURE 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define PSF_CUIR_NOT_RECOGNIZED 0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) * CUIR codes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define CUIR_QUIESCE 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #define CUIR_RESUME 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) * Out-of-space (OOS) Codes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) #define REPO_WARN 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #define REPO_EXHAUST 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) #define POOL_WARN 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define POOL_EXHAUST 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) #define REPO_RELIEVE 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define POOL_RELIEVE 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) * attention message definitions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define ATTENTION_LENGTH_CUIR 0x0e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define ATTENTION_FORMAT_CUIR 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #define ATTENTION_LENGTH_OOS 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define ATTENTION_FORMAT_OOS 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define DASD_ECKD_PG_GROUPED 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) * Size that is reportet for large volumes in the old 16-bit no_cyl field
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define LV_COMPAT_CYL 0xFFFE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define FCX_MAX_DATA_FACTOR 65536
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define DASD_ECKD_RCD_DATA_SIZE 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define DASD_ECKD_PATH_THRHLD 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define DASD_ECKD_PATH_INTERVAL 300
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) * Maximum number of blocks to be chained
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define DASD_ECKD_MAX_BLOCKS 190
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define DASD_ECKD_MAX_BLOCKS_RAW 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) /*****************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) * SECTION: Type Definitions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) ****************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) struct eckd_count {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) __u16 cyl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) __u16 head;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) __u8 record;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) __u8 kl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) __u16 dl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) struct ch_t {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) __u16 cyl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) __u16 head;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) struct chr_t {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) __u16 cyl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) __u16 head;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) __u8 record;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) struct DE_eckd_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) unsigned char perm:2; /* Permissions on this extent */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) unsigned char reserved:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) unsigned char seek:2; /* Seek control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) unsigned char auth:2; /* Access authorization */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) unsigned char pci:1; /* PCI Fetch mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) } __attribute__ ((packed)) mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) unsigned char mode:2; /* Architecture mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) unsigned char ckd:1; /* CKD Conversion */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) unsigned char operation:3; /* Operation mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) unsigned char cfw:1; /* Cache fast write */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) unsigned char dfw:1; /* DASD fast write */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) } __attribute__ ((packed)) attributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) __u16 blk_size; /* Blocksize */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) __u16 fast_write_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) __u8 ga_additional; /* Global Attributes Additional */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) __u8 ga_extended; /* Global Attributes Extended */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) struct ch_t beg_ext;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) struct ch_t end_ext;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) unsigned long ep_sys_time; /* Ext Parameter - System Time Stamp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) __u8 ep_format; /* Extended Parameter format byte */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) __u8 ep_prio; /* Extended Parameter priority I/O byte */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) __u8 ep_reserved1; /* Extended Parameter Reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) __u8 ep_rec_per_track; /* Number of records on a track */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) __u8 ep_reserved[4]; /* Extended Parameter Reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) struct LO_eckd_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) unsigned char orientation:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) unsigned char operation:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) } __attribute__ ((packed)) operation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) unsigned char last_bytes_used:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) unsigned char reserved:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) unsigned char read_count_suffix:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) } __attribute__ ((packed)) auxiliary;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) __u8 unused;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) __u8 count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) struct ch_t seek_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) struct chr_t search_arg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) __u8 sector;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) __u16 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) struct LRE_eckd_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) unsigned char orientation:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) unsigned char operation:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) } __attribute__ ((packed)) operation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) unsigned char length_valid:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) unsigned char length_scope:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) unsigned char imbedded_ccw_valid:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) unsigned char check_bytes:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) unsigned char imbedded_count_valid:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) unsigned char reserved:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) unsigned char read_count_suffix:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) } __attribute__ ((packed)) auxiliary;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) __u8 imbedded_ccw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) __u8 count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) struct ch_t seek_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) struct chr_t search_arg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) __u8 sector;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) __u16 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) __u8 imbedded_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) __u8 extended_operation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) __u16 extended_parameter_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) __u8 extended_parameter[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) /* Prefix data for format 0x00 and 0x01 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) struct PFX_eckd_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) unsigned char format;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) unsigned char define_extent:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) unsigned char time_stamp:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) unsigned char verify_base:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) unsigned char hyper_pav:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) unsigned char reserved:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) } __attribute__ ((packed)) validity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) __u8 base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) __u8 aux;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) __u8 base_lss;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) __u8 reserved[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) struct DE_eckd_data define_extent;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) struct LRE_eckd_data locate_record;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) struct dasd_eckd_characteristics {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) __u16 cu_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) unsigned char support:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) unsigned char async:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) unsigned char reserved:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) unsigned char cache_info:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) unsigned char model:3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) } __attribute__ ((packed)) cu_model;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) __u16 dev_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) __u8 dev_model;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) unsigned char mult_burst:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) unsigned char RT_in_LR:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) unsigned char reserved1:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) unsigned char RD_IN_LR:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) unsigned char reserved2:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) unsigned char reserved3:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) unsigned char defect_wr:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) unsigned char XRC_supported:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) unsigned char reserved4:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) unsigned char striping:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) unsigned char reserved5:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) unsigned char cfw:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) unsigned char reserved6:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) unsigned char cache:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) unsigned char dual_copy:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) unsigned char dfw:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) unsigned char reset_alleg:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) unsigned char sense_down:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) } __attribute__ ((packed)) facilities;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) __u8 dev_class;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) __u8 unit_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) __u16 no_cyl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) __u16 trk_per_cyl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) __u8 sec_per_trk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) __u8 byte_per_track[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) __u16 home_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) __u8 formula;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) __u8 f1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) __u16 f2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) __u16 f3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) } __attribute__ ((packed)) f_0x01;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) __u8 f1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) __u8 f2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) __u8 f3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) __u8 f4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) __u8 f5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) } __attribute__ ((packed)) f_0x02;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) } __attribute__ ((packed)) factors;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) __u16 first_alt_trk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) __u16 no_alt_trk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) __u16 first_dia_trk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) __u16 no_dia_trk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) __u16 first_sup_trk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) __u16 no_sup_trk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) __u8 MDR_ID;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) __u8 OBR_ID;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) __u8 director;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) __u8 rd_trk_set;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) __u16 max_rec_zero;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) __u8 reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) __u8 RWANY_in_LR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) __u8 factor6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) __u8 factor7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) __u8 factor8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) __u8 reserved2[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) __u8 reserved3[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) __u32 long_no_cyl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) /* elements of the configuration data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) struct dasd_ned {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) __u8 identifier:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) __u8 token_id:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) __u8 sno_valid:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) __u8 subst_sno:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) __u8 recNED:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) __u8 emuNED:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) __u8 reserved:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) } __attribute__ ((packed)) flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) __u8 descriptor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) __u8 dev_class;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) __u8 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) __u8 dev_type[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) __u8 dev_model[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) __u8 HDA_manufacturer[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) __u8 HDA_location[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) __u8 HDA_seqno[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) __u8 ID;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) __u8 unit_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) struct dasd_sneq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) __u8 identifier:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) __u8 reserved:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) } __attribute__ ((packed)) flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) __u8 res1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) __u16 format;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) __u8 res2[4]; /* byte 4- 7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) __u8 sua_flags; /* byte 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) __u8 base_unit_addr; /* byte 9 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) __u8 res3[22]; /* byte 10-31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) struct vd_sneq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) __u8 identifier:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) __u8 reserved:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) } __attribute__ ((packed)) flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) __u8 res1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) __u16 format;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) __u8 res2[4]; /* byte 4- 7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) __u8 uit[16]; /* byte 8-23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) __u8 res3[8]; /* byte 24-31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) struct dasd_gneq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) __u8 identifier:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) __u8 reserved:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) } __attribute__ ((packed)) flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) __u8 record_selector;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) __u8 reserved[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) __u8 value:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) __u8 number:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) } __attribute__ ((packed)) timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) __u8 reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) __u16 subsystemID;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) __u8 reserved2[22];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) struct dasd_rssd_features {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) char feature[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) struct dasd_rssd_messages {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) __u16 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) __u8 format;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) __u8 code;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) __u32 message_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) __u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) char messages[4087];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) * Read Subsystem Data - Volume Storage Query
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) struct dasd_rssd_vsq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) __u8 tse:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) __u8 space_not_available:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) __u8 ese:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) __u8 unused:5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) } __packed vol_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) __u8 unused1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) __u16 extent_pool_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) __u8 warn_cap_limit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) __u8 warn_cap_guaranteed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) __u16 unused2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) __u32 limit_capacity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) __u32 guaranteed_capacity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) __u32 space_allocated;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) __u32 space_configured;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) __u32 logical_capacity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) * Extent Pool Summary
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) struct dasd_ext_pool_sum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) __u16 pool_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) __u8 repo_warn_thrshld;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) __u8 warn_thrshld;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) __u8 type:1; /* 0 - CKD / 1 - FB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) __u8 track_space_efficient:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) __u8 extent_space_efficient:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) __u8 standard_volume:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) __u8 extent_size_valid:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) __u8 capacity_at_warnlevel:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) __u8 pool_oos:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) __u8 unused0:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) __u8 unused1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) } __packed flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) __u8 reserved0:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) __u8 size_1G:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) __u8 reserved1:5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) __u8 size_16M:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) } __packed extent_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) __u8 unused;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) * Read Subsystem Data-Response - Logical Configuration Query - Header
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) struct dasd_rssd_lcq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) __u16 data_length; /* Length of data returned */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) __u16 pool_count; /* Count of extent pools returned - Max: 448 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) __u8 pool_info_valid:1; /* Detailed Information valid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) __u8 pool_id_volume:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) __u8 pool_id_cec:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) __u8 unused0:5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) __u8 unused1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) } __packed header_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) char sfi_type[6]; /* Storage Facility Image Type (EBCDIC) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) char sfi_model[3]; /* Storage Facility Image Model (EBCDIC) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) __u8 sfi_seq_num[10]; /* Storage Facility Image Sequence Number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) __u8 reserved[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) struct dasd_ext_pool_sum ext_pool_sum[448];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) struct dasd_oos_message {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) __u16 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) __u8 format;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) __u8 code;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) __u8 percentage_empty;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) __u8 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) __u16 ext_pool_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) __u16 token;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) __u8 unused[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) struct dasd_cuir_message {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) __u16 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) __u8 format;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) __u8 code;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) __u32 message_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) __u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) __u8 neq_map[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) __u8 ned_map;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) __u8 record_selector;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) struct dasd_psf_cuir_response {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) __u8 order;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) __u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) __u8 cc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) __u8 chpid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) __u16 device_nr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) __u16 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) __u32 message_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) __u64 system_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) __u8 cssid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) __u8 ssid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) struct dasd_ckd_path_group_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) __u8 status_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) __u8 pgid[11];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) __u8 sysplex_name[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) __u32 timestamp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) __u32 cylinder;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) __u8 reserved[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) struct dasd_ckd_host_information {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) __u8 access_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) __u8 entry_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) __u16 entry_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) __u8 entry[16390];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) struct dasd_psf_query_host_access {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) __u8 access_flag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) __u8 version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) __u16 CKD_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) __u16 SCSI_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) __u8 unused[10];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) __u8 host_access_information[16394];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) * Perform Subsystem Function - Prepare for Read Subsystem Data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) struct dasd_psf_prssd_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) unsigned char order;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) unsigned char flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) unsigned char reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) unsigned char reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) unsigned char lss;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) unsigned char volume;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) unsigned char suborder;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) unsigned char varies[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) } __attribute__ ((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) * Perform Subsystem Function - Set Subsystem Characteristics
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) struct dasd_psf_ssc_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) unsigned char order;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) unsigned char flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) unsigned char cu_type[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) unsigned char suborder;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) unsigned char reserved[59];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) /* Maximum number of extents for a single Release Allocated Space command */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) #define DASD_ECKD_RAS_EXTS_MAX 110U
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) struct dasd_dso_ras_ext_range {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) struct ch_t beg_ext;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) struct ch_t end_ext;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) * Define Subsytem Operation - Release Allocated Space
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) struct dasd_dso_ras_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) __u8 order;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) __u8 message:1; /* Must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) __u8 reserved1:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) __u8 vol_type:1; /* 0 - CKD/FBA, 1 - FB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) __u8 reserved2:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) } __packed flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) /* Operation Flags to specify scope */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) __u8 reserved1:2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) /* Release Space by Extent */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) __u8 by_extent:1; /* 0 - entire volume, 1 - specified extents */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) __u8 guarantee_init:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) __u8 force_release:1; /* Internal - will be ignored */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) __u16 reserved2:11;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) } __packed op_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) __u8 lss;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) __u8 dev_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) __u32 reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) __u8 reserved2[10];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) __u16 nr_exts; /* Defines number of ext_scope - max 110 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) __u16 reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) * some structures and definitions for alias handling
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) struct dasd_unit_address_configuration {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) char ua_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) char base_ua;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) } unit[256];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) #define MAX_DEVICES_PER_LCU 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) /* flags on the LCU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) #define NEED_UAC_UPDATE 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) #define UPDATE_PENDING 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) enum pavtype {NO_PAV, BASE_PAV, HYPER_PAV};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) struct alias_root {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) struct list_head serverlist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) spinlock_t lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) struct alias_server {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) struct list_head server;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) struct dasd_uid uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) struct list_head lculist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) struct summary_unit_check_work_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) char reason;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) struct dasd_device *device;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) struct work_struct worker;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) struct read_uac_work_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) struct dasd_device *device;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) struct delayed_work dwork;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) struct alias_lcu {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) struct list_head lcu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) struct dasd_uid uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) enum pavtype pav;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) char flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) spinlock_t lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) struct list_head grouplist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) struct list_head active_devices;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) struct list_head inactive_devices;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) struct dasd_unit_address_configuration *uac;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) struct summary_unit_check_work_data suc_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) struct read_uac_work_data ruac_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) struct dasd_ccw_req *rsu_cqr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) struct completion lcu_setup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) struct alias_pav_group {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) struct list_head group;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) struct dasd_uid uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) struct alias_lcu *lcu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) struct list_head baselist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) struct list_head aliaslist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) struct dasd_device *next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) struct dasd_conf_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) struct dasd_ned neds[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) u8 reserved[64];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) struct dasd_gneq gneq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) struct dasd_eckd_private {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) struct dasd_eckd_characteristics rdc_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) u8 *conf_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) int conf_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) /* pointers to specific parts in the conf_data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) struct dasd_ned *ned;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) struct dasd_sneq *sneq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) struct vd_sneq *vdsneq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) struct dasd_gneq *gneq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) struct eckd_count count_area[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) int init_cqr_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) int uses_cdl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) struct attrib_data_t attrib; /* e.g. cache operations */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) struct dasd_rssd_features features;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) struct dasd_rssd_vsq vsq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) struct dasd_ext_pool_sum eps;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) u32 real_cyl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) /* alias managemnet */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) struct dasd_uid uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) struct alias_pav_group *pavgroup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) struct alias_lcu *lcu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) int count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) u32 fcx_max_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) char suc_reason;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) int dasd_alias_make_device_known_to_lcu(struct dasd_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) void dasd_alias_disconnect_device_from_lcu(struct dasd_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) int dasd_alias_add_device(struct dasd_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) int dasd_alias_remove_device(struct dasd_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) struct dasd_device *dasd_alias_get_start_dev(struct dasd_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) void dasd_alias_handle_summary_unit_check(struct work_struct *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) void dasd_eckd_reset_ccw_to_base_io(struct dasd_ccw_req *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) int dasd_alias_update_add_device(struct dasd_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) #endif /* DASD_ECKD_H */