| /* |
| * File...........: linux/drivers/s390/block/dasd_eckd.h |
| * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> |
| * Horst Hummel <Horst.Hummel@de.ibm.com> |
| * Bugreports.to..: <Linux390@de.ibm.com> |
| * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 |
| * |
| */ |
| |
| #ifndef DASD_ECKD_H |
| #define DASD_ECKD_H |
| |
| /***************************************************************************** |
| * SECTION: CCW Definitions |
| ****************************************************************************/ |
| #define DASD_ECKD_CCW_WRITE 0x05 |
| #define DASD_ECKD_CCW_READ 0x06 |
| #define DASD_ECKD_CCW_WRITE_HOME_ADDRESS 0x09 |
| #define DASD_ECKD_CCW_READ_HOME_ADDRESS 0x0a |
| #define DASD_ECKD_CCW_WRITE_KD 0x0d |
| #define DASD_ECKD_CCW_READ_KD 0x0e |
| #define DASD_ECKD_CCW_ERASE 0x11 |
| #define DASD_ECKD_CCW_READ_COUNT 0x12 |
| #define DASD_ECKD_CCW_SLCK 0x14 |
| #define DASD_ECKD_CCW_WRITE_RECORD_ZERO 0x15 |
| #define DASD_ECKD_CCW_READ_RECORD_ZERO 0x16 |
| #define DASD_ECKD_CCW_WRITE_CKD 0x1d |
| #define DASD_ECKD_CCW_READ_CKD 0x1e |
| #define DASD_ECKD_CCW_PSF 0x27 |
| #define DASD_ECKD_CCW_RSSD 0x3e |
| #define DASD_ECKD_CCW_LOCATE_RECORD 0x47 |
| #define DASD_ECKD_CCW_SNSS 0x54 |
| #define DASD_ECKD_CCW_DEFINE_EXTENT 0x63 |
| #define DASD_ECKD_CCW_WRITE_MT 0x85 |
| #define DASD_ECKD_CCW_READ_MT 0x86 |
| #define DASD_ECKD_CCW_WRITE_KD_MT 0x8d |
| #define DASD_ECKD_CCW_READ_KD_MT 0x8e |
| #define DASD_ECKD_CCW_RELEASE 0x94 |
| #define DASD_ECKD_CCW_READ_CKD_MT 0x9e |
| #define DASD_ECKD_CCW_WRITE_CKD_MT 0x9d |
| #define DASD_ECKD_CCW_RESERVE 0xB4 |
| |
| /* |
| * Perform Subsystem Function / Sub-Orders |
| */ |
| #define PSF_ORDER_PRSSD 0x18 |
| #define PSF_ORDER_SSC 0x1D |
| |
| /***************************************************************************** |
| * SECTION: Type Definitions |
| ****************************************************************************/ |
| |
| struct eckd_count { |
| __u16 cyl; |
| __u16 head; |
| __u8 record; |
| __u8 kl; |
| __u16 dl; |
| } __attribute__ ((packed)); |
| |
| struct ch_t { |
| __u16 cyl; |
| __u16 head; |
| } __attribute__ ((packed)); |
| |
| struct chs_t { |
| __u16 cyl; |
| __u16 head; |
| __u32 sector; |
| } __attribute__ ((packed)); |
| |
| struct chr_t { |
| __u16 cyl; |
| __u16 head; |
| __u8 record; |
| } __attribute__ ((packed)); |
| |
| struct geom_t { |
| __u16 cyl; |
| __u16 head; |
| __u32 sector; |
| } __attribute__ ((packed)); |
| |
| struct eckd_home { |
| __u8 skip_control[14]; |
| __u16 cell_number; |
| __u8 physical_addr[3]; |
| __u8 flag; |
| struct ch_t track_addr; |
| __u8 reserved; |
| __u8 key_length; |
| __u8 reserved2[2]; |
| } __attribute__ ((packed)); |
| |
| struct DE_eckd_data { |
| struct { |
| unsigned char perm:2; /* Permissions on this extent */ |
| unsigned char reserved:1; |
| unsigned char seek:2; /* Seek control */ |
| unsigned char auth:2; /* Access authorization */ |
| unsigned char pci:1; /* PCI Fetch mode */ |
| } __attribute__ ((packed)) mask; |
| struct { |
| unsigned char mode:2; /* Architecture mode */ |
| unsigned char ckd:1; /* CKD Conversion */ |
| unsigned char operation:3; /* Operation mode */ |
| unsigned char cfw:1; /* Cache fast write */ |
| unsigned char dfw:1; /* DASD fast write */ |
| } __attribute__ ((packed)) attributes; |
| __u16 blk_size; /* Blocksize */ |
| __u16 fast_write_id; |
| __u8 ga_additional; /* Global Attributes Additional */ |
| __u8 ga_extended; /* Global Attributes Extended */ |
| struct ch_t beg_ext; |
| struct ch_t end_ext; |
| unsigned long long ep_sys_time; /* Ext Parameter - System Time Stamp */ |
| __u8 ep_format; /* Extended Parameter format byte */ |
| __u8 ep_prio; /* Extended Parameter priority I/O byte */ |
| __u8 ep_reserved[6]; /* Extended Parameter Reserved */ |
| } __attribute__ ((packed)); |
| |
| struct LO_eckd_data { |
| struct { |
| unsigned char orientation:2; |
| unsigned char operation:6; |
| } __attribute__ ((packed)) operation; |
| struct { |
| unsigned char last_bytes_used:1; |
| unsigned char reserved:6; |
| unsigned char read_count_suffix:1; |
| } __attribute__ ((packed)) auxiliary; |
| __u8 unused; |
| __u8 count; |
| struct ch_t seek_addr; |
| struct chr_t search_arg; |
| __u8 sector; |
| __u16 length; |
| } __attribute__ ((packed)); |
| |
| struct dasd_eckd_characteristics { |
| __u16 cu_type; |
| struct { |
| unsigned char support:2; |
| unsigned char async:1; |
| unsigned char reserved:1; |
| unsigned char cache_info:1; |
| unsigned char model:3; |
| } __attribute__ ((packed)) cu_model; |
| __u16 dev_type; |
| __u8 dev_model; |
| struct { |
| unsigned char mult_burst:1; |
| unsigned char RT_in_LR:1; |
| unsigned char reserved1:1; |
| unsigned char RD_IN_LR:1; |
| unsigned char reserved2:4; |
| unsigned char reserved3:8; |
| unsigned char defect_wr:1; |
| unsigned char XRC_supported:1; |
| unsigned char reserved4:1; |
| unsigned char striping:1; |
| unsigned char reserved5:4; |
| unsigned char cfw:1; |
| unsigned char reserved6:2; |
| unsigned char cache:1; |
| unsigned char dual_copy:1; |
| unsigned char dfw:1; |
| unsigned char reset_alleg:1; |
| unsigned char sense_down:1; |
| } __attribute__ ((packed)) facilities; |
| __u8 dev_class; |
| __u8 unit_type; |
| __u16 no_cyl; |
| __u16 trk_per_cyl; |
| __u8 sec_per_trk; |
| __u8 byte_per_track[3]; |
| __u16 home_bytes; |
| __u8 formula; |
| union { |
| struct { |
| __u8 f1; |
| __u16 f2; |
| __u16 f3; |
| } __attribute__ ((packed)) f_0x01; |
| struct { |
| __u8 f1; |
| __u8 f2; |
| __u8 f3; |
| __u8 f4; |
| __u8 f5; |
| } __attribute__ ((packed)) f_0x02; |
| } __attribute__ ((packed)) factors; |
| __u16 first_alt_trk; |
| __u16 no_alt_trk; |
| __u16 first_dia_trk; |
| __u16 no_dia_trk; |
| __u16 first_sup_trk; |
| __u16 no_sup_trk; |
| __u8 MDR_ID; |
| __u8 OBR_ID; |
| __u8 director; |
| __u8 rd_trk_set; |
| __u16 max_rec_zero; |
| __u8 reserved1; |
| __u8 RWANY_in_LR; |
| __u8 factor6; |
| __u8 factor7; |
| __u8 factor8; |
| __u8 reserved2[3]; |
| __u8 reserved3[10]; |
| } __attribute__ ((packed)); |
| |
| struct dasd_eckd_confdata { |
| struct { |
| struct { |
| unsigned char identifier:2; |
| unsigned char token_id:1; |
| unsigned char sno_valid:1; |
| unsigned char subst_sno:1; |
| unsigned char recNED:1; |
| unsigned char emuNED:1; |
| unsigned char reserved:1; |
| } __attribute__ ((packed)) flags; |
| __u8 descriptor; |
| __u8 dev_class; |
| __u8 reserved; |
| unsigned char dev_type[6]; |
| unsigned char dev_model[3]; |
| unsigned char HDA_manufacturer[3]; |
| unsigned char HDA_location[2]; |
| unsigned char HDA_seqno[12]; |
| __u8 ID; |
| __u8 unit_addr; |
| } __attribute__ ((packed)) ned1; |
| union { |
| struct { |
| struct { |
| unsigned char identifier:2; |
| unsigned char token_id:1; |
| unsigned char sno_valid:1; |
| unsigned char subst_sno:1; |
| unsigned char recNED:1; |
| unsigned char emuNED:1; |
| unsigned char reserved:1; |
| } __attribute__ ((packed)) flags; |
| __u8 descriptor; |
| __u8 reserved[2]; |
| unsigned char dev_type[6]; |
| unsigned char dev_model[3]; |
| unsigned char DASD_manufacturer[3]; |
| unsigned char DASD_location[2]; |
| unsigned char DASD_seqno[12]; |
| __u16 ID; |
| } __attribute__ ((packed)) ned; |
| struct { |
| unsigned char flags; /* byte 0 */ |
| unsigned char res2[7]; /* byte 1- 7 */ |
| unsigned char sua_flags; /* byte 8 */ |
| __u8 base_unit_addr; /* byte 9 */ |
| unsigned char res3[22]; /* byte 10-31 */ |
| } __attribute__ ((packed)) sneq; |
| } __attribute__ ((packed)) ned2; |
| struct { |
| struct { |
| unsigned char identifier:2; |
| unsigned char token_id:1; |
| unsigned char sno_valid:1; |
| unsigned char subst_sno:1; |
| unsigned char recNED:1; |
| unsigned char emuNED:1; |
| unsigned char reserved:1; |
| } __attribute__ ((packed)) flags; |
| __u8 descriptor; |
| __u8 reserved[2]; |
| unsigned char cont_type[6]; |
| unsigned char cont_model[3]; |
| unsigned char cont_manufacturer[3]; |
| unsigned char cont_location[2]; |
| unsigned char cont_seqno[12]; |
| __u16 ID; |
| } __attribute__ ((packed)) ned3; |
| struct { |
| struct { |
| unsigned char identifier:2; |
| unsigned char token_id:1; |
| unsigned char sno_valid:1; |
| unsigned char subst_sno:1; |
| unsigned char recNED:1; |
| unsigned char emuNED:1; |
| unsigned char reserved:1; |
| } __attribute__ ((packed)) flags; |
| __u8 descriptor; |
| __u8 reserved[2]; |
| unsigned char cont_type[6]; |
| unsigned char empty[3]; |
| unsigned char cont_manufacturer[3]; |
| unsigned char cont_location[2]; |
| unsigned char cont_seqno[12]; |
| __u16 ID; |
| } __attribute__ ((packed)) ned4; |
| unsigned char ned5[32]; |
| unsigned char ned6[32]; |
| unsigned char ned7[32]; |
| struct { |
| struct { |
| unsigned char identifier:2; |
| unsigned char reserved:6; |
| } __attribute__ ((packed)) flags; |
| __u8 selector; |
| __u16 interfaceID; |
| __u32 reserved; |
| __u16 subsystemID; |
| struct { |
| unsigned char sp0:1; |
| unsigned char sp1:1; |
| unsigned char reserved:5; |
| unsigned char scluster:1; |
| } __attribute__ ((packed)) spathID; |
| __u8 unit_address; |
| __u8 dev_ID; |
| __u8 dev_address; |
| __u8 adapterID; |
| __u16 link_address; |
| struct { |
| unsigned char parallel:1; |
| unsigned char escon:1; |
| unsigned char reserved:1; |
| unsigned char ficon:1; |
| unsigned char reserved2:4; |
| } __attribute__ ((packed)) protocol_type; |
| struct { |
| unsigned char PID_in_236:1; |
| unsigned char reserved:7; |
| } __attribute__ ((packed)) format_flags; |
| __u8 log_dev_address; |
| unsigned char reserved2[12]; |
| } __attribute__ ((packed)) neq; |
| } __attribute__ ((packed)); |
| |
| struct dasd_eckd_path { |
| __u8 opm; |
| __u8 ppm; |
| __u8 npm; |
| }; |
| |
| /* |
| * Perform Subsystem Function - Prepare for Read Subsystem Data |
| */ |
| struct dasd_psf_prssd_data { |
| unsigned char order; |
| unsigned char flags; |
| unsigned char reserved[4]; |
| unsigned char suborder; |
| unsigned char varies[9]; |
| } __attribute__ ((packed)); |
| |
| /* |
| * Perform Subsystem Function - Set Subsystem Characteristics |
| */ |
| struct dasd_psf_ssc_data { |
| unsigned char order; |
| unsigned char flags; |
| unsigned char cu_type[4]; |
| unsigned char suborder; |
| unsigned char reserved[59]; |
| } __attribute__((packed)); |
| |
| #endif /* DASD_ECKD_H */ |