1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> 4*4882a593Smuzhiyun * Bugreports.to..: <Linux390@de.ibm.com> 5*4882a593Smuzhiyun * Copyright IBM Corp. 1999, 2000 6*4882a593Smuzhiyun * EMC Symmetrix ioctl Copyright EMC Corporation, 2008 7*4882a593Smuzhiyun * Author.........: Nigel Hislop <hislop_nigel@emc.com> 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This file is the interface of the DASD device driver, which is exported to user space 10*4882a593Smuzhiyun * any future changes wrt the API will result in a change of the APIVERSION reported 11*4882a593Smuzhiyun * to userspace by the DASDAPIVER-ioctl 12*4882a593Smuzhiyun * 13*4882a593Smuzhiyun */ 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #ifndef DASD_H 16*4882a593Smuzhiyun #define DASD_H 17*4882a593Smuzhiyun #include <linux/types.h> 18*4882a593Smuzhiyun #include <linux/ioctl.h> 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #define DASD_IOCTL_LETTER 'D' 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define DASD_API_VERSION 6 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /* 25*4882a593Smuzhiyun * struct dasd_information2_t 26*4882a593Smuzhiyun * represents any data about the device, which is visible to userspace. 27*4882a593Smuzhiyun * including foramt and featueres. 28*4882a593Smuzhiyun */ 29*4882a593Smuzhiyun typedef struct dasd_information2_t { 30*4882a593Smuzhiyun unsigned int devno; /* S/390 devno */ 31*4882a593Smuzhiyun unsigned int real_devno; /* for aliases */ 32*4882a593Smuzhiyun unsigned int schid; /* S/390 subchannel identifier */ 33*4882a593Smuzhiyun unsigned int cu_type : 16; /* from SenseID */ 34*4882a593Smuzhiyun unsigned int cu_model : 8; /* from SenseID */ 35*4882a593Smuzhiyun unsigned int dev_type : 16; /* from SenseID */ 36*4882a593Smuzhiyun unsigned int dev_model : 8; /* from SenseID */ 37*4882a593Smuzhiyun unsigned int open_count; 38*4882a593Smuzhiyun unsigned int req_queue_len; 39*4882a593Smuzhiyun unsigned int chanq_len; /* length of chanq */ 40*4882a593Smuzhiyun char type[4]; /* from discipline.name, 'none' for unknown */ 41*4882a593Smuzhiyun unsigned int status; /* current device level */ 42*4882a593Smuzhiyun unsigned int label_block; /* where to find the VOLSER */ 43*4882a593Smuzhiyun unsigned int FBA_layout; /* fixed block size (like AIXVOL) */ 44*4882a593Smuzhiyun unsigned int characteristics_size; 45*4882a593Smuzhiyun unsigned int confdata_size; 46*4882a593Smuzhiyun char characteristics[64]; /* from read_device_characteristics */ 47*4882a593Smuzhiyun char configuration_data[256]; /* from read_configuration_data */ 48*4882a593Smuzhiyun unsigned int format; /* format info like formatted/cdl/ldl/... */ 49*4882a593Smuzhiyun unsigned int features; /* dasd features like 'ro',... */ 50*4882a593Smuzhiyun unsigned int reserved0; /* reserved for further use ,... */ 51*4882a593Smuzhiyun unsigned int reserved1; /* reserved for further use ,... */ 52*4882a593Smuzhiyun unsigned int reserved2; /* reserved for further use ,... */ 53*4882a593Smuzhiyun unsigned int reserved3; /* reserved for further use ,... */ 54*4882a593Smuzhiyun unsigned int reserved4; /* reserved for further use ,... */ 55*4882a593Smuzhiyun unsigned int reserved5; /* reserved for further use ,... */ 56*4882a593Smuzhiyun unsigned int reserved6; /* reserved for further use ,... */ 57*4882a593Smuzhiyun unsigned int reserved7; /* reserved for further use ,... */ 58*4882a593Smuzhiyun } dasd_information2_t; 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun /* 61*4882a593Smuzhiyun * values to be used for dasd_information_t.format 62*4882a593Smuzhiyun * 0x00: NOT formatted 63*4882a593Smuzhiyun * 0x01: Linux disc layout 64*4882a593Smuzhiyun * 0x02: Common disc layout 65*4882a593Smuzhiyun */ 66*4882a593Smuzhiyun #define DASD_FORMAT_NONE 0 67*4882a593Smuzhiyun #define DASD_FORMAT_LDL 1 68*4882a593Smuzhiyun #define DASD_FORMAT_CDL 2 69*4882a593Smuzhiyun /* 70*4882a593Smuzhiyun * values to be used for dasd_information_t.features 71*4882a593Smuzhiyun * 0x100: default features 72*4882a593Smuzhiyun * 0x001: readonly (ro) 73*4882a593Smuzhiyun * 0x002: use diag discipline (diag) 74*4882a593Smuzhiyun * 0x004: set the device initially online (internal use only) 75*4882a593Smuzhiyun * 0x008: enable ERP related logging 76*4882a593Smuzhiyun * 0x010: allow I/O to fail on lost paths 77*4882a593Smuzhiyun * 0x020: allow I/O to fail when a lock was stolen 78*4882a593Smuzhiyun * 0x040: give access to raw eckd data 79*4882a593Smuzhiyun * 0x080: enable discard support 80*4882a593Smuzhiyun * 0x100: enable autodisable for IFCC errors (default) 81*4882a593Smuzhiyun */ 82*4882a593Smuzhiyun #define DASD_FEATURE_READONLY 0x001 83*4882a593Smuzhiyun #define DASD_FEATURE_USEDIAG 0x002 84*4882a593Smuzhiyun #define DASD_FEATURE_INITIAL_ONLINE 0x004 85*4882a593Smuzhiyun #define DASD_FEATURE_ERPLOG 0x008 86*4882a593Smuzhiyun #define DASD_FEATURE_FAILFAST 0x010 87*4882a593Smuzhiyun #define DASD_FEATURE_FAILONSLCK 0x020 88*4882a593Smuzhiyun #define DASD_FEATURE_USERAW 0x040 89*4882a593Smuzhiyun #define DASD_FEATURE_DISCARD 0x080 90*4882a593Smuzhiyun #define DASD_FEATURE_PATH_AUTODISABLE 0x100 91*4882a593Smuzhiyun #define DASD_FEATURE_DEFAULT DASD_FEATURE_PATH_AUTODISABLE 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun #define DASD_PARTN_BITS 2 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun /* 96*4882a593Smuzhiyun * struct dasd_information_t 97*4882a593Smuzhiyun * represents any data about the data, which is visible to userspace 98*4882a593Smuzhiyun */ 99*4882a593Smuzhiyun typedef struct dasd_information_t { 100*4882a593Smuzhiyun unsigned int devno; /* S/390 devno */ 101*4882a593Smuzhiyun unsigned int real_devno; /* for aliases */ 102*4882a593Smuzhiyun unsigned int schid; /* S/390 subchannel identifier */ 103*4882a593Smuzhiyun unsigned int cu_type : 16; /* from SenseID */ 104*4882a593Smuzhiyun unsigned int cu_model : 8; /* from SenseID */ 105*4882a593Smuzhiyun unsigned int dev_type : 16; /* from SenseID */ 106*4882a593Smuzhiyun unsigned int dev_model : 8; /* from SenseID */ 107*4882a593Smuzhiyun unsigned int open_count; 108*4882a593Smuzhiyun unsigned int req_queue_len; 109*4882a593Smuzhiyun unsigned int chanq_len; /* length of chanq */ 110*4882a593Smuzhiyun char type[4]; /* from discipline.name, 'none' for unknown */ 111*4882a593Smuzhiyun unsigned int status; /* current device level */ 112*4882a593Smuzhiyun unsigned int label_block; /* where to find the VOLSER */ 113*4882a593Smuzhiyun unsigned int FBA_layout; /* fixed block size (like AIXVOL) */ 114*4882a593Smuzhiyun unsigned int characteristics_size; 115*4882a593Smuzhiyun unsigned int confdata_size; 116*4882a593Smuzhiyun char characteristics[64]; /* from read_device_characteristics */ 117*4882a593Smuzhiyun char configuration_data[256]; /* from read_configuration_data */ 118*4882a593Smuzhiyun } dasd_information_t; 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun /* 121*4882a593Smuzhiyun * Read Subsystem Data - Performance Statistics 122*4882a593Smuzhiyun */ 123*4882a593Smuzhiyun typedef struct dasd_rssd_perf_stats_t { 124*4882a593Smuzhiyun unsigned char invalid:1; 125*4882a593Smuzhiyun unsigned char format:3; 126*4882a593Smuzhiyun unsigned char data_format:4; 127*4882a593Smuzhiyun unsigned char unit_address; 128*4882a593Smuzhiyun unsigned short device_status; 129*4882a593Smuzhiyun unsigned int nr_read_normal; 130*4882a593Smuzhiyun unsigned int nr_read_normal_hits; 131*4882a593Smuzhiyun unsigned int nr_write_normal; 132*4882a593Smuzhiyun unsigned int nr_write_fast_normal_hits; 133*4882a593Smuzhiyun unsigned int nr_read_seq; 134*4882a593Smuzhiyun unsigned int nr_read_seq_hits; 135*4882a593Smuzhiyun unsigned int nr_write_seq; 136*4882a593Smuzhiyun unsigned int nr_write_fast_seq_hits; 137*4882a593Smuzhiyun unsigned int nr_read_cache; 138*4882a593Smuzhiyun unsigned int nr_read_cache_hits; 139*4882a593Smuzhiyun unsigned int nr_write_cache; 140*4882a593Smuzhiyun unsigned int nr_write_fast_cache_hits; 141*4882a593Smuzhiyun unsigned int nr_inhibit_cache; 142*4882a593Smuzhiyun unsigned int nr_bybass_cache; 143*4882a593Smuzhiyun unsigned int nr_seq_dasd_to_cache; 144*4882a593Smuzhiyun unsigned int nr_dasd_to_cache; 145*4882a593Smuzhiyun unsigned int nr_cache_to_dasd; 146*4882a593Smuzhiyun unsigned int nr_delayed_fast_write; 147*4882a593Smuzhiyun unsigned int nr_normal_fast_write; 148*4882a593Smuzhiyun unsigned int nr_seq_fast_write; 149*4882a593Smuzhiyun unsigned int nr_cache_miss; 150*4882a593Smuzhiyun unsigned char status2; 151*4882a593Smuzhiyun unsigned int nr_quick_write_promotes; 152*4882a593Smuzhiyun unsigned char reserved; 153*4882a593Smuzhiyun unsigned short ssid; 154*4882a593Smuzhiyun unsigned char reseved2[96]; 155*4882a593Smuzhiyun } __attribute__((packed)) dasd_rssd_perf_stats_t; 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun /* 158*4882a593Smuzhiyun * struct profile_info_t 159*4882a593Smuzhiyun * holds the profinling information 160*4882a593Smuzhiyun */ 161*4882a593Smuzhiyun typedef struct dasd_profile_info_t { 162*4882a593Smuzhiyun unsigned int dasd_io_reqs; /* number of requests processed at all */ 163*4882a593Smuzhiyun unsigned int dasd_io_sects; /* number of sectors processed at all */ 164*4882a593Smuzhiyun unsigned int dasd_io_secs[32]; /* histogram of request's sizes */ 165*4882a593Smuzhiyun unsigned int dasd_io_times[32]; /* histogram of requests's times */ 166*4882a593Smuzhiyun unsigned int dasd_io_timps[32]; /* histogram of requests's times per sector */ 167*4882a593Smuzhiyun unsigned int dasd_io_time1[32]; /* histogram of time from build to start */ 168*4882a593Smuzhiyun unsigned int dasd_io_time2[32]; /* histogram of time from start to irq */ 169*4882a593Smuzhiyun unsigned int dasd_io_time2ps[32]; /* histogram of time from start to irq */ 170*4882a593Smuzhiyun unsigned int dasd_io_time3[32]; /* histogram of time from irq to end */ 171*4882a593Smuzhiyun unsigned int dasd_io_nr_req[32]; /* histogram of # of requests in chanq */ 172*4882a593Smuzhiyun } dasd_profile_info_t; 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun /* 175*4882a593Smuzhiyun * struct format_data_t 176*4882a593Smuzhiyun * represents all data necessary to format a dasd 177*4882a593Smuzhiyun */ 178*4882a593Smuzhiyun typedef struct format_data_t { 179*4882a593Smuzhiyun unsigned int start_unit; /* from track */ 180*4882a593Smuzhiyun unsigned int stop_unit; /* to track */ 181*4882a593Smuzhiyun unsigned int blksize; /* sectorsize */ 182*4882a593Smuzhiyun unsigned int intensity; 183*4882a593Smuzhiyun } format_data_t; 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun /* 186*4882a593Smuzhiyun * values to be used for format_data_t.intensity 187*4882a593Smuzhiyun * 0/8: normal format 188*4882a593Smuzhiyun * 1/9: also write record zero 189*4882a593Smuzhiyun * 3/11: also write home address 190*4882a593Smuzhiyun * 4/12: invalidate track 191*4882a593Smuzhiyun */ 192*4882a593Smuzhiyun #define DASD_FMT_INT_FMT_R0 1 /* write record zero */ 193*4882a593Smuzhiyun #define DASD_FMT_INT_FMT_HA 2 /* write home address, also set FMT_R0 ! */ 194*4882a593Smuzhiyun #define DASD_FMT_INT_INVAL 4 /* invalidate tracks */ 195*4882a593Smuzhiyun #define DASD_FMT_INT_COMPAT 8 /* use OS/390 compatible disk layout */ 196*4882a593Smuzhiyun #define DASD_FMT_INT_FMT_NOR0 16 /* remove permission to write record zero */ 197*4882a593Smuzhiyun #define DASD_FMT_INT_ESE_FULL 32 /* release space for entire volume */ 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun /* 200*4882a593Smuzhiyun * struct format_check_t 201*4882a593Smuzhiyun * represents all data necessary to evaluate the format of 202*4882a593Smuzhiyun * different tracks of a dasd 203*4882a593Smuzhiyun */ 204*4882a593Smuzhiyun typedef struct format_check_t { 205*4882a593Smuzhiyun /* Input */ 206*4882a593Smuzhiyun struct format_data_t expect; 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun /* Output */ 209*4882a593Smuzhiyun unsigned int result; /* Error indication (DASD_FMT_ERR_*) */ 210*4882a593Smuzhiyun unsigned int unit; /* Track that is in error */ 211*4882a593Smuzhiyun unsigned int rec; /* Record that is in error */ 212*4882a593Smuzhiyun unsigned int num_records; /* Records in the track in error */ 213*4882a593Smuzhiyun unsigned int blksize; /* Blocksize of first record in error */ 214*4882a593Smuzhiyun unsigned int key_length; /* Key length of first record in error */ 215*4882a593Smuzhiyun } format_check_t; 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun /* Values returned in format_check_t when a format error is detected: */ 218*4882a593Smuzhiyun /* Too few records were found on a single track */ 219*4882a593Smuzhiyun #define DASD_FMT_ERR_TOO_FEW_RECORDS 1 220*4882a593Smuzhiyun /* Too many records were found on a single track */ 221*4882a593Smuzhiyun #define DASD_FMT_ERR_TOO_MANY_RECORDS 2 222*4882a593Smuzhiyun /* Blocksize/data-length of a record was wrong */ 223*4882a593Smuzhiyun #define DASD_FMT_ERR_BLKSIZE 3 224*4882a593Smuzhiyun /* A record ID is defined by cylinder, head, and record number (CHR). */ 225*4882a593Smuzhiyun /* On mismatch, this error is set */ 226*4882a593Smuzhiyun #define DASD_FMT_ERR_RECORD_ID 4 227*4882a593Smuzhiyun /* If key-length was != 0 */ 228*4882a593Smuzhiyun #define DASD_FMT_ERR_KEY_LENGTH 5 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun /* 231*4882a593Smuzhiyun * struct attrib_data_t 232*4882a593Smuzhiyun * represents the operation (cache) bits for the device. 233*4882a593Smuzhiyun * Used in DE to influence caching of the DASD. 234*4882a593Smuzhiyun */ 235*4882a593Smuzhiyun typedef struct attrib_data_t { 236*4882a593Smuzhiyun unsigned char operation:3; /* cache operation mode */ 237*4882a593Smuzhiyun unsigned char reserved:5; /* cache operation mode */ 238*4882a593Smuzhiyun __u16 nr_cyl; /* no of cyliners for read ahaed */ 239*4882a593Smuzhiyun __u8 reserved2[29]; /* for future use */ 240*4882a593Smuzhiyun } __attribute__ ((packed)) attrib_data_t; 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun /* definition of operation (cache) bits within attributes of DE */ 243*4882a593Smuzhiyun #define DASD_NORMAL_CACHE 0x0 244*4882a593Smuzhiyun #define DASD_BYPASS_CACHE 0x1 245*4882a593Smuzhiyun #define DASD_INHIBIT_LOAD 0x2 246*4882a593Smuzhiyun #define DASD_SEQ_ACCESS 0x3 247*4882a593Smuzhiyun #define DASD_SEQ_PRESTAGE 0x4 248*4882a593Smuzhiyun #define DASD_REC_ACCESS 0x5 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun /* 251*4882a593Smuzhiyun * Perform EMC Symmetrix I/O 252*4882a593Smuzhiyun */ 253*4882a593Smuzhiyun typedef struct dasd_symmio_parms { 254*4882a593Smuzhiyun unsigned char reserved[8]; /* compat with older releases */ 255*4882a593Smuzhiyun unsigned long long psf_data; /* char * cast to u64 */ 256*4882a593Smuzhiyun unsigned long long rssd_result; /* char * cast to u64 */ 257*4882a593Smuzhiyun int psf_data_len; 258*4882a593Smuzhiyun int rssd_result_len; 259*4882a593Smuzhiyun } __attribute__ ((packed)) dasd_symmio_parms_t; 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun /* 262*4882a593Smuzhiyun * Data returned by Sense Path Group ID (SNID) 263*4882a593Smuzhiyun */ 264*4882a593Smuzhiyun struct dasd_snid_data { 265*4882a593Smuzhiyun struct { 266*4882a593Smuzhiyun __u8 group:2; 267*4882a593Smuzhiyun __u8 reserve:2; 268*4882a593Smuzhiyun __u8 mode:1; 269*4882a593Smuzhiyun __u8 res:3; 270*4882a593Smuzhiyun } __attribute__ ((packed)) path_state; 271*4882a593Smuzhiyun __u8 pgid[11]; 272*4882a593Smuzhiyun } __attribute__ ((packed)); 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun struct dasd_snid_ioctl_data { 275*4882a593Smuzhiyun struct dasd_snid_data data; 276*4882a593Smuzhiyun __u8 path_mask; 277*4882a593Smuzhiyun } __attribute__ ((packed)); 278*4882a593Smuzhiyun 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun /******************************************************************************** 281*4882a593Smuzhiyun * SECTION: Definition of IOCTLs 282*4882a593Smuzhiyun * 283*4882a593Smuzhiyun * Here ist how the ioctl-nr should be used: 284*4882a593Smuzhiyun * 0 - 31 DASD driver itself 285*4882a593Smuzhiyun * 32 - 239 still open 286*4882a593Smuzhiyun * 240 - 255 reserved for EMC 287*4882a593Smuzhiyun *******************************************************************************/ 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun /* Disable the volume (for Linux) */ 290*4882a593Smuzhiyun #define BIODASDDISABLE _IO(DASD_IOCTL_LETTER,0) 291*4882a593Smuzhiyun /* Enable the volume (for Linux) */ 292*4882a593Smuzhiyun #define BIODASDENABLE _IO(DASD_IOCTL_LETTER,1) 293*4882a593Smuzhiyun /* Issue a reserve/release command, rsp. */ 294*4882a593Smuzhiyun #define BIODASDRSRV _IO(DASD_IOCTL_LETTER,2) /* reserve */ 295*4882a593Smuzhiyun #define BIODASDRLSE _IO(DASD_IOCTL_LETTER,3) /* release */ 296*4882a593Smuzhiyun #define BIODASDSLCK _IO(DASD_IOCTL_LETTER,4) /* steal lock */ 297*4882a593Smuzhiyun /* reset profiling information of a device */ 298*4882a593Smuzhiyun #define BIODASDPRRST _IO(DASD_IOCTL_LETTER,5) 299*4882a593Smuzhiyun /* Quiesce IO on device */ 300*4882a593Smuzhiyun #define BIODASDQUIESCE _IO(DASD_IOCTL_LETTER,6) 301*4882a593Smuzhiyun /* Resume IO on device */ 302*4882a593Smuzhiyun #define BIODASDRESUME _IO(DASD_IOCTL_LETTER,7) 303*4882a593Smuzhiyun /* Abort all I/O on a device */ 304*4882a593Smuzhiyun #define BIODASDABORTIO _IO(DASD_IOCTL_LETTER, 240) 305*4882a593Smuzhiyun /* Allow I/O on a device */ 306*4882a593Smuzhiyun #define BIODASDALLOWIO _IO(DASD_IOCTL_LETTER, 241) 307*4882a593Smuzhiyun 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun /* retrieve API version number */ 310*4882a593Smuzhiyun #define DASDAPIVER _IOR(DASD_IOCTL_LETTER,0,int) 311*4882a593Smuzhiyun /* Get information on a dasd device */ 312*4882a593Smuzhiyun #define BIODASDINFO _IOR(DASD_IOCTL_LETTER,1,dasd_information_t) 313*4882a593Smuzhiyun /* retrieve profiling information of a device */ 314*4882a593Smuzhiyun #define BIODASDPRRD _IOR(DASD_IOCTL_LETTER,2,dasd_profile_info_t) 315*4882a593Smuzhiyun /* Get information on a dasd device (enhanced) */ 316*4882a593Smuzhiyun #define BIODASDINFO2 _IOR(DASD_IOCTL_LETTER,3,dasd_information2_t) 317*4882a593Smuzhiyun /* Performance Statistics Read */ 318*4882a593Smuzhiyun #define BIODASDPSRD _IOR(DASD_IOCTL_LETTER,4,dasd_rssd_perf_stats_t) 319*4882a593Smuzhiyun /* Get Attributes (cache operations) */ 320*4882a593Smuzhiyun #define BIODASDGATTR _IOR(DASD_IOCTL_LETTER,5,attrib_data_t) 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun 323*4882a593Smuzhiyun /* #define BIODASDFORMAT _IOW(IOCTL_LETTER,0,format_data_t) , deprecated */ 324*4882a593Smuzhiyun #define BIODASDFMT _IOW(DASD_IOCTL_LETTER,1,format_data_t) 325*4882a593Smuzhiyun /* Set Attributes (cache operations) */ 326*4882a593Smuzhiyun #define BIODASDSATTR _IOW(DASD_IOCTL_LETTER,2,attrib_data_t) 327*4882a593Smuzhiyun /* Release Allocated Space */ 328*4882a593Smuzhiyun #define BIODASDRAS _IOW(DASD_IOCTL_LETTER, 3, format_data_t) 329*4882a593Smuzhiyun 330*4882a593Smuzhiyun /* Get Sense Path Group ID (SNID) data */ 331*4882a593Smuzhiyun #define BIODASDSNID _IOWR(DASD_IOCTL_LETTER, 1, struct dasd_snid_ioctl_data) 332*4882a593Smuzhiyun /* Check device format according to format_check_t */ 333*4882a593Smuzhiyun #define BIODASDCHECKFMT _IOWR(DASD_IOCTL_LETTER, 2, format_check_t) 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun #define BIODASDSYMMIO _IOWR(DASD_IOCTL_LETTER, 240, dasd_symmio_parms_t) 336*4882a593Smuzhiyun 337*4882a593Smuzhiyun #endif /* DASD_H */ 338*4882a593Smuzhiyun 339