/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> * Bugreports.to..: <Linux390@de.ibm.com> * Copyright IBM Corp. 1999, 2000 * EMC Symmetrix ioctl Copyright EMC Corporation, 2008 * Author.........: Nigel Hislop <hislop_nigel@emc.com> * * This file is the interface of the DASD device driver, which is exported to user space * any future changes wrt the API will result in a change of the APIVERSION reported * to userspace by the DASDAPIVER-ioctl *
*/
/* * struct dasd_information2_t * represents any data about the device, which is visible to userspace. * including format and featueres.
*/ typedefstruct dasd_information2_t { unsignedint devno; /* S/390 devno */ unsignedint real_devno; /* for aliases */ unsignedint schid; /* S/390 subchannel identifier */ unsignedint cu_type : 16; /* from SenseID */ unsignedint cu_model : 8; /* from SenseID */ unsignedint dev_type : 16; /* from SenseID */ unsignedint dev_model : 8; /* from SenseID */ unsignedint open_count; unsignedint req_queue_len; unsignedint chanq_len; /* length of chanq */ char type[4]; /* from discipline.name, 'none' for unknown */ unsignedint status; /* current device level */ unsignedint label_block; /* where to find the VOLSER */ unsignedint FBA_layout; /* fixed block size (like AIXVOL) */ unsignedint characteristics_size; unsignedint confdata_size; char characteristics[64]; /* from read_device_characteristics */ char configuration_data[256]; /* from read_configuration_data */ unsignedint format; /* format info like formatted/cdl/ldl/... */ unsignedint features; /* dasd features like 'ro',... */ unsignedint reserved0; /* reserved for further use ,... */ unsignedint reserved1; /* reserved for further use ,... */ unsignedint reserved2; /* reserved for further use ,... */ unsignedint reserved3; /* reserved for further use ,... */ unsignedint reserved4; /* reserved for further use ,... */ unsignedint reserved5; /* reserved for further use ,... */ unsignedint reserved6; /* reserved for further use ,... */ unsignedint reserved7; /* reserved for further use ,... */
} dasd_information2_t;
/* * values to be used for dasd_information_t.format * 0x00: NOT formatted * 0x01: Linux disc layout * 0x02: Common disc layout
*/ #define DASD_FORMAT_NONE 0 #define DASD_FORMAT_LDL 1 #define DASD_FORMAT_CDL 2 /* * values to be used for dasd_information_t.features * 0x100: default features * 0x001: readonly (ro) * 0x002: use diag discipline (diag) * 0x004: set the device initially online (internal use only) * 0x008: enable ERP related logging * 0x010: allow I/O to fail on lost paths * 0x020: allow I/O to fail when a lock was stolen * 0x040: give access to raw eckd data * 0x080: enable discard support * 0x100: enable autodisable for IFCC errors (default) * 0x200: enable requeue of all requests on autoquiesce
*/ #define DASD_FEATURE_READONLY 0x001 #define DASD_FEATURE_USEDIAG 0x002 #define DASD_FEATURE_INITIAL_ONLINE 0x004 #define DASD_FEATURE_ERPLOG 0x008 #define DASD_FEATURE_FAILFAST 0x010 #define DASD_FEATURE_FAILONSLCK 0x020 #define DASD_FEATURE_USERAW 0x040 #define DASD_FEATURE_DISCARD 0x080 #define DASD_FEATURE_PATH_AUTODISABLE 0x100 #define DASD_FEATURE_REQUEUEQUIESCE 0x200 #define DASD_FEATURE_DEFAULT DASD_FEATURE_PATH_AUTODISABLE
#define DASD_PARTN_BITS 2
/* * struct dasd_information_t * represents any data about the data, which is visible to userspace
*/ typedefstruct dasd_information_t { unsignedint devno; /* S/390 devno */ unsignedint real_devno; /* for aliases */ unsignedint schid; /* S/390 subchannel identifier */ unsignedint cu_type : 16; /* from SenseID */ unsignedint cu_model : 8; /* from SenseID */ unsignedint dev_type : 16; /* from SenseID */ unsignedint dev_model : 8; /* from SenseID */ unsignedint open_count; unsignedint req_queue_len; unsignedint chanq_len; /* length of chanq */ char type[4]; /* from discipline.name, 'none' for unknown */ unsignedint status; /* current device level */ unsignedint label_block; /* where to find the VOLSER */ unsignedint FBA_layout; /* fixed block size (like AIXVOL) */ unsignedint characteristics_size; unsignedint confdata_size; char characteristics[64]; /* from read_device_characteristics */ char configuration_data[256]; /* from read_configuration_data */
} dasd_information_t;
/* * struct profile_info_t * holds the profinling information
*/ typedefstruct dasd_profile_info_t { unsignedint dasd_io_reqs; /* number of requests processed at all */ unsignedint dasd_io_sects; /* number of sectors processed at all */ unsignedint dasd_io_secs[32]; /* histogram of request's sizes */ unsignedint dasd_io_times[32]; /* histogram of requests's times */ unsignedint dasd_io_timps[32]; /* histogram of requests's times per sector */ unsignedint dasd_io_time1[32]; /* histogram of time from build to start */ unsignedint dasd_io_time2[32]; /* histogram of time from start to irq */ unsignedint dasd_io_time2ps[32]; /* histogram of time from start to irq */ unsignedint dasd_io_time3[32]; /* histogram of time from irq to end */ unsignedint dasd_io_nr_req[32]; /* histogram of # of requests in chanq */
} dasd_profile_info_t;
/* * struct format_data_t * represents all data necessary to format a dasd
*/ typedefstruct format_data_t { unsignedint start_unit; /* from track */ unsignedint stop_unit; /* to track */ unsignedint blksize; /* sectorsize */ unsignedint intensity;
} format_data_t;
/* * struct dasd_copypair_swap_data_t * represents all data necessary to issue a swap of the copy pair relation
*/ struct dasd_copypair_swap_data_t { char primary[20]; /* BUSID of primary */ char secondary[20]; /* BUSID of secondary */
/* Reserved for future updates. */
__u8 reserved[64];
};
/* * values to be used for format_data_t.intensity * 0/8: normal format * 1/9: also write record zero * 3/11: also write home address * 4/12: invalidate track
*/ #define DASD_FMT_INT_FMT_R0 1 /* write record zero */ #define DASD_FMT_INT_FMT_HA 2 /* write home address, also set FMT_R0 ! */ #define DASD_FMT_INT_INVAL 4 /* invalidate tracks */ #define DASD_FMT_INT_COMPAT 8 /* use OS/390 compatible disk layout */ #define DASD_FMT_INT_FMT_NOR0 16 /* remove permission to write record zero */ #define DASD_FMT_INT_ESE_FULL 32 /* release space for entire volume */
/* * struct format_check_t * represents all data necessary to evaluate the format of * different tracks of a dasd
*/ typedefstruct format_check_t { /* Input */ struct format_data_t expect;
/* Output */ unsignedint result; /* Error indication (DASD_FMT_ERR_*) */ unsignedint unit; /* Track that is in error */ unsignedint rec; /* Record that is in error */ unsignedint num_records; /* Records in the track in error */ unsignedint blksize; /* Blocksize of first record in error */ unsignedint key_length; /* Key length of first record in error */
} format_check_t;
/* Values returned in format_check_t when a format error is detected: */ /* Too few records were found on a single track */ #define DASD_FMT_ERR_TOO_FEW_RECORDS 1 /* Too many records were found on a single track */ #define DASD_FMT_ERR_TOO_MANY_RECORDS 2 /* Blocksize/data-length of a record was wrong */ #define DASD_FMT_ERR_BLKSIZE 3 /* A record ID is defined by cylinder, head, and record number (CHR). */ /* On mismatch, this error is set */ #define DASD_FMT_ERR_RECORD_ID 4 /* If key-length was != 0 */ #define DASD_FMT_ERR_KEY_LENGTH 5
/* * struct attrib_data_t * represents the operation (cache) bits for the device. * Used in DE to influence caching of the DASD.
*/ typedefstruct attrib_data_t { unsignedchar operation:3; /* cache operation mode */ unsignedchar reserved:5; /* cache operation mode */
__u16 nr_cyl; /* no of cyliners for read ahaed */
__u8 reserved2[29]; /* for future use */
} __attribute__ ((packed)) attrib_data_t;
/* definition of operation (cache) bits within attributes of DE */ #define DASD_NORMAL_CACHE 0x0 #define DASD_BYPASS_CACHE 0x1 #define DASD_INHIBIT_LOAD 0x2 #define DASD_SEQ_ACCESS 0x3 #define DASD_SEQ_PRESTAGE 0x4 #define DASD_REC_ACCESS 0x5
/* * Perform EMC Symmetrix I/O
*/ typedefstruct dasd_symmio_parms { unsignedchar reserved[8]; /* compat with older releases */ unsignedlonglong psf_data; /* char * cast to u64 */ unsignedlonglong rssd_result; /* char * cast to u64 */ int psf_data_len; int rssd_result_len;
} __attribute__ ((packed)) dasd_symmio_parms_t;
/* * Data returned by Sense Path Group ID (SNID)
*/ struct dasd_snid_data { struct {
__u8 group:2;
__u8 reserve:2;
__u8 mode:1;
__u8 res:3;
} __attribute__ ((packed)) path_state;
__u8 pgid[11];
} __attribute__ ((packed));
/******************************************************************************** * SECTION: Definition of IOCTLs * * Here is how the ioctl-nr should be used: * 0 - 31 DASD driver itself * 32 - 239 still open * 240 - 255 reserved for EMC
*******************************************************************************/
/* Disable the volume (for Linux) */ #define BIODASDDISABLE _IO(DASD_IOCTL_LETTER,0) /* Enable the volume (for Linux) */ #define BIODASDENABLE _IO(DASD_IOCTL_LETTER,1) /* Issue a reserve/release command, rsp. */ #define BIODASDRSRV _IO(DASD_IOCTL_LETTER,2) /* reserve */ #define BIODASDRLSE _IO(DASD_IOCTL_LETTER,3) /* release */ #define BIODASDSLCK _IO(DASD_IOCTL_LETTER,4) /* steal lock */ /* reset profiling information of a device */ #define BIODASDPRRST _IO(DASD_IOCTL_LETTER,5) /* Quiesce IO on device */ #define BIODASDQUIESCE _IO(DASD_IOCTL_LETTER,6) /* Resume IO on device */ #define BIODASDRESUME _IO(DASD_IOCTL_LETTER,7) /* Abort all I/O on a device */ #define BIODASDABORTIO _IO(DASD_IOCTL_LETTER, 240) /* Allow I/O on a device */ #define BIODASDALLOWIO _IO(DASD_IOCTL_LETTER, 241)
/* retrieve API version number */ #define DASDAPIVER _IOR(DASD_IOCTL_LETTER,0,int) /* Get information on a dasd device */ #define BIODASDINFO _IOR(DASD_IOCTL_LETTER,1,dasd_information_t) /* retrieve profiling information of a device */ #define BIODASDPRRD _IOR(DASD_IOCTL_LETTER,2,dasd_profile_info_t) /* Get information on a dasd device (enhanced) */ #define BIODASDINFO2 _IOR(DASD_IOCTL_LETTER,3,dasd_information2_t) /* Performance Statistics Read */ #define BIODASDPSRD _IOR(DASD_IOCTL_LETTER,4,dasd_rssd_perf_stats_t) /* Get Attributes (cache operations) */ #define BIODASDGATTR _IOR(DASD_IOCTL_LETTER,5,attrib_data_t)
/* Get Sense Path Group ID (SNID) data */ #define BIODASDSNID _IOWR(DASD_IOCTL_LETTER, 1, struct dasd_snid_ioctl_data) /* Check device format according to format_check_t */ #define BIODASDCHECKFMT _IOWR(DASD_IOCTL_LETTER, 2, format_check_t)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.