| .. | .. |
|---|
| 1 | 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
|---|
| 2 | | -/* |
|---|
| 2 | +/* |
|---|
| 3 | 3 | * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> |
|---|
| 4 | 4 | * Bugreports.to..: <Linux390@de.ibm.com> |
|---|
| 5 | 5 | * Copyright IBM Corp. 1999, 2000 |
|---|
| .. | .. |
|---|
| 21 | 21 | |
|---|
| 22 | 22 | #define DASD_API_VERSION 6 |
|---|
| 23 | 23 | |
|---|
| 24 | | -/* |
|---|
| 24 | +/* |
|---|
| 25 | 25 | * struct dasd_information2_t |
|---|
| 26 | 26 | * represents any data about the device, which is visible to userspace. |
|---|
| 27 | 27 | * including foramt and featueres. |
|---|
| 28 | 28 | */ |
|---|
| 29 | 29 | typedef struct dasd_information2_t { |
|---|
| 30 | | - unsigned int devno; /* S/390 devno */ |
|---|
| 31 | | - unsigned int real_devno; /* for aliases */ |
|---|
| 32 | | - unsigned int schid; /* S/390 subchannel identifier */ |
|---|
| 33 | | - unsigned int cu_type : 16; /* from SenseID */ |
|---|
| 34 | | - unsigned int cu_model : 8; /* from SenseID */ |
|---|
| 35 | | - unsigned int dev_type : 16; /* from SenseID */ |
|---|
| 36 | | - unsigned int dev_model : 8; /* from SenseID */ |
|---|
| 37 | | - unsigned int open_count; |
|---|
| 38 | | - unsigned int req_queue_len; |
|---|
| 39 | | - unsigned int chanq_len; /* length of chanq */ |
|---|
| 40 | | - char type[4]; /* from discipline.name, 'none' for unknown */ |
|---|
| 41 | | - unsigned int status; /* current device level */ |
|---|
| 42 | | - unsigned int label_block; /* where to find the VOLSER */ |
|---|
| 43 | | - unsigned int FBA_layout; /* fixed block size (like AIXVOL) */ |
|---|
| 44 | | - unsigned int characteristics_size; |
|---|
| 45 | | - unsigned int confdata_size; |
|---|
| 46 | | - char characteristics[64]; /* from read_device_characteristics */ |
|---|
| 47 | | - char configuration_data[256]; /* from read_configuration_data */ |
|---|
| 48 | | - unsigned int format; /* format info like formatted/cdl/ldl/... */ |
|---|
| 49 | | - unsigned int features; /* dasd features like 'ro',... */ |
|---|
| 50 | | - unsigned int reserved0; /* reserved for further use ,... */ |
|---|
| 51 | | - unsigned int reserved1; /* reserved for further use ,... */ |
|---|
| 52 | | - unsigned int reserved2; /* reserved for further use ,... */ |
|---|
| 53 | | - unsigned int reserved3; /* reserved for further use ,... */ |
|---|
| 54 | | - unsigned int reserved4; /* reserved for further use ,... */ |
|---|
| 55 | | - unsigned int reserved5; /* reserved for further use ,... */ |
|---|
| 56 | | - unsigned int reserved6; /* reserved for further use ,... */ |
|---|
| 57 | | - unsigned int reserved7; /* reserved for further use ,... */ |
|---|
| 30 | + unsigned int devno; /* S/390 devno */ |
|---|
| 31 | + unsigned int real_devno; /* for aliases */ |
|---|
| 32 | + unsigned int schid; /* S/390 subchannel identifier */ |
|---|
| 33 | + unsigned int cu_type : 16; /* from SenseID */ |
|---|
| 34 | + unsigned int cu_model : 8; /* from SenseID */ |
|---|
| 35 | + unsigned int dev_type : 16; /* from SenseID */ |
|---|
| 36 | + unsigned int dev_model : 8; /* from SenseID */ |
|---|
| 37 | + unsigned int open_count; |
|---|
| 38 | + unsigned int req_queue_len; |
|---|
| 39 | + unsigned int chanq_len; /* length of chanq */ |
|---|
| 40 | + char type[4]; /* from discipline.name, 'none' for unknown */ |
|---|
| 41 | + unsigned int status; /* current device level */ |
|---|
| 42 | + unsigned int label_block; /* where to find the VOLSER */ |
|---|
| 43 | + unsigned int FBA_layout; /* fixed block size (like AIXVOL) */ |
|---|
| 44 | + unsigned int characteristics_size; |
|---|
| 45 | + unsigned int confdata_size; |
|---|
| 46 | + char characteristics[64]; /* from read_device_characteristics */ |
|---|
| 47 | + char configuration_data[256]; /* from read_configuration_data */ |
|---|
| 48 | + unsigned int format; /* format info like formatted/cdl/ldl/... */ |
|---|
| 49 | + unsigned int features; /* dasd features like 'ro',... */ |
|---|
| 50 | + unsigned int reserved0; /* reserved for further use ,... */ |
|---|
| 51 | + unsigned int reserved1; /* reserved for further use ,... */ |
|---|
| 52 | + unsigned int reserved2; /* reserved for further use ,... */ |
|---|
| 53 | + unsigned int reserved3; /* reserved for further use ,... */ |
|---|
| 54 | + unsigned int reserved4; /* reserved for further use ,... */ |
|---|
| 55 | + unsigned int reserved5; /* reserved for further use ,... */ |
|---|
| 56 | + unsigned int reserved6; /* reserved for further use ,... */ |
|---|
| 57 | + unsigned int reserved7; /* reserved for further use ,... */ |
|---|
| 58 | 58 | } dasd_information2_t; |
|---|
| 59 | 59 | |
|---|
| 60 | 60 | /* |
|---|
| .. | .. |
|---|
| 92 | 92 | |
|---|
| 93 | 93 | #define DASD_PARTN_BITS 2 |
|---|
| 94 | 94 | |
|---|
| 95 | | -/* |
|---|
| 95 | +/* |
|---|
| 96 | 96 | * struct dasd_information_t |
|---|
| 97 | 97 | * represents any data about the data, which is visible to userspace |
|---|
| 98 | 98 | */ |
|---|
| 99 | 99 | typedef struct dasd_information_t { |
|---|
| 100 | | - unsigned int devno; /* S/390 devno */ |
|---|
| 101 | | - unsigned int real_devno; /* for aliases */ |
|---|
| 102 | | - unsigned int schid; /* S/390 subchannel identifier */ |
|---|
| 103 | | - unsigned int cu_type : 16; /* from SenseID */ |
|---|
| 104 | | - unsigned int cu_model : 8; /* from SenseID */ |
|---|
| 105 | | - unsigned int dev_type : 16; /* from SenseID */ |
|---|
| 106 | | - unsigned int dev_model : 8; /* from SenseID */ |
|---|
| 107 | | - unsigned int open_count; |
|---|
| 108 | | - unsigned int req_queue_len; |
|---|
| 109 | | - unsigned int chanq_len; /* length of chanq */ |
|---|
| 110 | | - char type[4]; /* from discipline.name, 'none' for unknown */ |
|---|
| 111 | | - unsigned int status; /* current device level */ |
|---|
| 112 | | - unsigned int label_block; /* where to find the VOLSER */ |
|---|
| 113 | | - unsigned int FBA_layout; /* fixed block size (like AIXVOL) */ |
|---|
| 114 | | - unsigned int characteristics_size; |
|---|
| 115 | | - unsigned int confdata_size; |
|---|
| 116 | | - char characteristics[64]; /* from read_device_characteristics */ |
|---|
| 117 | | - char configuration_data[256]; /* from read_configuration_data */ |
|---|
| 100 | + unsigned int devno; /* S/390 devno */ |
|---|
| 101 | + unsigned int real_devno; /* for aliases */ |
|---|
| 102 | + unsigned int schid; /* S/390 subchannel identifier */ |
|---|
| 103 | + unsigned int cu_type : 16; /* from SenseID */ |
|---|
| 104 | + unsigned int cu_model : 8; /* from SenseID */ |
|---|
| 105 | + unsigned int dev_type : 16; /* from SenseID */ |
|---|
| 106 | + unsigned int dev_model : 8; /* from SenseID */ |
|---|
| 107 | + unsigned int open_count; |
|---|
| 108 | + unsigned int req_queue_len; |
|---|
| 109 | + unsigned int chanq_len; /* length of chanq */ |
|---|
| 110 | + char type[4]; /* from discipline.name, 'none' for unknown */ |
|---|
| 111 | + unsigned int status; /* current device level */ |
|---|
| 112 | + unsigned int label_block; /* where to find the VOLSER */ |
|---|
| 113 | + unsigned int FBA_layout; /* fixed block size (like AIXVOL) */ |
|---|
| 114 | + unsigned int characteristics_size; |
|---|
| 115 | + unsigned int confdata_size; |
|---|
| 116 | + char characteristics[64]; /* from read_device_characteristics */ |
|---|
| 117 | + char configuration_data[256]; /* from read_configuration_data */ |
|---|
| 118 | 118 | } dasd_information_t; |
|---|
| 119 | 119 | |
|---|
| 120 | 120 | /* |
|---|
| 121 | 121 | * Read Subsystem Data - Performance Statistics |
|---|
| 122 | | - */ |
|---|
| 122 | + */ |
|---|
| 123 | 123 | typedef struct dasd_rssd_perf_stats_t { |
|---|
| 124 | 124 | unsigned char invalid:1; |
|---|
| 125 | 125 | unsigned char format:3; |
|---|
| .. | .. |
|---|
| 154 | 154 | unsigned char reseved2[96]; |
|---|
| 155 | 155 | } __attribute__((packed)) dasd_rssd_perf_stats_t; |
|---|
| 156 | 156 | |
|---|
| 157 | | -/* |
|---|
| 157 | +/* |
|---|
| 158 | 158 | * struct profile_info_t |
|---|
| 159 | | - * holds the profinling information |
|---|
| 159 | + * holds the profinling information |
|---|
| 160 | 160 | */ |
|---|
| 161 | 161 | typedef struct dasd_profile_info_t { |
|---|
| 162 | | - unsigned int dasd_io_reqs; /* number of requests processed at all */ |
|---|
| 163 | | - unsigned int dasd_io_sects; /* number of sectors processed at all */ |
|---|
| 164 | | - unsigned int dasd_io_secs[32]; /* histogram of request's sizes */ |
|---|
| 165 | | - unsigned int dasd_io_times[32]; /* histogram of requests's times */ |
|---|
| 166 | | - unsigned int dasd_io_timps[32]; /* histogram of requests's times per sector */ |
|---|
| 167 | | - unsigned int dasd_io_time1[32]; /* histogram of time from build to start */ |
|---|
| 168 | | - unsigned int dasd_io_time2[32]; /* histogram of time from start to irq */ |
|---|
| 169 | | - unsigned int dasd_io_time2ps[32]; /* histogram of time from start to irq */ |
|---|
| 170 | | - unsigned int dasd_io_time3[32]; /* histogram of time from irq to end */ |
|---|
| 171 | | - unsigned int dasd_io_nr_req[32]; /* histogram of # of requests in chanq */ |
|---|
| 162 | + unsigned int dasd_io_reqs; /* number of requests processed at all */ |
|---|
| 163 | + unsigned int dasd_io_sects; /* number of sectors processed at all */ |
|---|
| 164 | + unsigned int dasd_io_secs[32]; /* histogram of request's sizes */ |
|---|
| 165 | + unsigned int dasd_io_times[32]; /* histogram of requests's times */ |
|---|
| 166 | + unsigned int dasd_io_timps[32]; /* histogram of requests's times per sector */ |
|---|
| 167 | + unsigned int dasd_io_time1[32]; /* histogram of time from build to start */ |
|---|
| 168 | + unsigned int dasd_io_time2[32]; /* histogram of time from start to irq */ |
|---|
| 169 | + unsigned int dasd_io_time2ps[32]; /* histogram of time from start to irq */ |
|---|
| 170 | + unsigned int dasd_io_time3[32]; /* histogram of time from irq to end */ |
|---|
| 171 | + unsigned int dasd_io_nr_req[32]; /* histogram of # of requests in chanq */ |
|---|
| 172 | 172 | } dasd_profile_info_t; |
|---|
| 173 | 173 | |
|---|
| 174 | 174 | /* |
|---|
| .. | .. |
|---|
| 189 | 189 | * 3/11: also write home address |
|---|
| 190 | 190 | * 4/12: invalidate track |
|---|
| 191 | 191 | */ |
|---|
| 192 | | -#define DASD_FMT_INT_FMT_R0 1 /* write record zero */ |
|---|
| 193 | | -#define DASD_FMT_INT_FMT_HA 2 /* write home address, also set FMT_R0 ! */ |
|---|
| 194 | | -#define DASD_FMT_INT_INVAL 4 /* invalidate tracks */ |
|---|
| 195 | | -#define DASD_FMT_INT_COMPAT 8 /* use OS/390 compatible disk layout */ |
|---|
| 192 | +#define DASD_FMT_INT_FMT_R0 1 /* write record zero */ |
|---|
| 193 | +#define DASD_FMT_INT_FMT_HA 2 /* write home address, also set FMT_R0 ! */ |
|---|
| 194 | +#define DASD_FMT_INT_INVAL 4 /* invalidate tracks */ |
|---|
| 195 | +#define DASD_FMT_INT_COMPAT 8 /* use OS/390 compatible disk layout */ |
|---|
| 196 | +#define DASD_FMT_INT_FMT_NOR0 16 /* remove permission to write record zero */ |
|---|
| 197 | +#define DASD_FMT_INT_ESE_FULL 32 /* release space for entire volume */ |
|---|
| 196 | 198 | |
|---|
| 197 | 199 | /* |
|---|
| 198 | 200 | * struct format_check_t |
|---|
| .. | .. |
|---|
| 225 | 227 | /* If key-length was != 0 */ |
|---|
| 226 | 228 | #define DASD_FMT_ERR_KEY_LENGTH 5 |
|---|
| 227 | 229 | |
|---|
| 228 | | -/* |
|---|
| 230 | +/* |
|---|
| 229 | 231 | * struct attrib_data_t |
|---|
| 230 | 232 | * represents the operation (cache) bits for the device. |
|---|
| 231 | 233 | * Used in DE to influence caching of the DASD. |
|---|
| .. | .. |
|---|
| 281 | 283 | * Here ist how the ioctl-nr should be used: |
|---|
| 282 | 284 | * 0 - 31 DASD driver itself |
|---|
| 283 | 285 | * 32 - 239 still open |
|---|
| 284 | | - * 240 - 255 reserved for EMC |
|---|
| 286 | + * 240 - 255 reserved for EMC |
|---|
| 285 | 287 | *******************************************************************************/ |
|---|
| 286 | 288 | |
|---|
| 287 | 289 | /* Disable the volume (for Linux) */ |
|---|
| 288 | | -#define BIODASDDISABLE _IO(DASD_IOCTL_LETTER,0) |
|---|
| 290 | +#define BIODASDDISABLE _IO(DASD_IOCTL_LETTER,0) |
|---|
| 289 | 291 | /* Enable the volume (for Linux) */ |
|---|
| 290 | | -#define BIODASDENABLE _IO(DASD_IOCTL_LETTER,1) |
|---|
| 292 | +#define BIODASDENABLE _IO(DASD_IOCTL_LETTER,1) |
|---|
| 291 | 293 | /* Issue a reserve/release command, rsp. */ |
|---|
| 292 | 294 | #define BIODASDRSRV _IO(DASD_IOCTL_LETTER,2) /* reserve */ |
|---|
| 293 | 295 | #define BIODASDRLSE _IO(DASD_IOCTL_LETTER,3) /* release */ |
|---|
| .. | .. |
|---|
| 295 | 297 | /* reset profiling information of a device */ |
|---|
| 296 | 298 | #define BIODASDPRRST _IO(DASD_IOCTL_LETTER,5) |
|---|
| 297 | 299 | /* Quiesce IO on device */ |
|---|
| 298 | | -#define BIODASDQUIESCE _IO(DASD_IOCTL_LETTER,6) |
|---|
| 300 | +#define BIODASDQUIESCE _IO(DASD_IOCTL_LETTER,6) |
|---|
| 299 | 301 | /* Resume IO on device */ |
|---|
| 300 | | -#define BIODASDRESUME _IO(DASD_IOCTL_LETTER,7) |
|---|
| 302 | +#define BIODASDRESUME _IO(DASD_IOCTL_LETTER,7) |
|---|
| 301 | 303 | /* Abort all I/O on a device */ |
|---|
| 302 | 304 | #define BIODASDABORTIO _IO(DASD_IOCTL_LETTER, 240) |
|---|
| 303 | 305 | /* Allow I/O on a device */ |
|---|
| .. | .. |
|---|
| 315 | 317 | /* Performance Statistics Read */ |
|---|
| 316 | 318 | #define BIODASDPSRD _IOR(DASD_IOCTL_LETTER,4,dasd_rssd_perf_stats_t) |
|---|
| 317 | 319 | /* Get Attributes (cache operations) */ |
|---|
| 318 | | -#define BIODASDGATTR _IOR(DASD_IOCTL_LETTER,5,attrib_data_t) |
|---|
| 320 | +#define BIODASDGATTR _IOR(DASD_IOCTL_LETTER,5,attrib_data_t) |
|---|
| 319 | 321 | |
|---|
| 320 | 322 | |
|---|
| 321 | 323 | /* #define BIODASDFORMAT _IOW(IOCTL_LETTER,0,format_data_t) , deprecated */ |
|---|
| 322 | | -#define BIODASDFMT _IOW(DASD_IOCTL_LETTER,1,format_data_t) |
|---|
| 324 | +#define BIODASDFMT _IOW(DASD_IOCTL_LETTER,1,format_data_t) |
|---|
| 323 | 325 | /* Set Attributes (cache operations) */ |
|---|
| 324 | | -#define BIODASDSATTR _IOW(DASD_IOCTL_LETTER,2,attrib_data_t) |
|---|
| 326 | +#define BIODASDSATTR _IOW(DASD_IOCTL_LETTER,2,attrib_data_t) |
|---|
| 327 | +/* Release Allocated Space */ |
|---|
| 328 | +#define BIODASDRAS _IOW(DASD_IOCTL_LETTER, 3, format_data_t) |
|---|
| 325 | 329 | |
|---|
| 326 | 330 | /* Get Sense Path Group ID (SNID) data */ |
|---|
| 327 | 331 | #define BIODASDSNID _IOWR(DASD_IOCTL_LETTER, 1, struct dasd_snid_ioctl_data) |
|---|