1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 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 * 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #ifndef DASD_FBA_H 10*4882a593Smuzhiyun #define DASD_FBA_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun /* 13*4882a593Smuzhiyun * Maximum number of blocks to be chained 14*4882a593Smuzhiyun */ 15*4882a593Smuzhiyun #define DASD_FBA_MAX_BLOCKS 96 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun struct DE_fba_data { 18*4882a593Smuzhiyun struct { 19*4882a593Smuzhiyun unsigned char perm:2; /* Permissions on this extent */ 20*4882a593Smuzhiyun unsigned char zero:2; /* Must be zero */ 21*4882a593Smuzhiyun unsigned char da:1; /* usually zero */ 22*4882a593Smuzhiyun unsigned char diag:1; /* allow diagnose */ 23*4882a593Smuzhiyun unsigned char zero2:2; /* zero */ 24*4882a593Smuzhiyun } __attribute__ ((packed)) mask; 25*4882a593Smuzhiyun __u8 zero; /* Must be zero */ 26*4882a593Smuzhiyun __u16 blk_size; /* Blocksize */ 27*4882a593Smuzhiyun __u32 ext_loc; /* Extent locator */ 28*4882a593Smuzhiyun __u32 ext_beg; /* logical number of block 0 in extent */ 29*4882a593Smuzhiyun __u32 ext_end; /* logocal number of last block in extent */ 30*4882a593Smuzhiyun } __attribute__ ((packed)); 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun struct LO_fba_data { 33*4882a593Smuzhiyun struct { 34*4882a593Smuzhiyun unsigned char zero:4; 35*4882a593Smuzhiyun unsigned char cmd:4; 36*4882a593Smuzhiyun } __attribute__ ((packed)) operation; 37*4882a593Smuzhiyun __u8 auxiliary; 38*4882a593Smuzhiyun __u16 blk_ct; 39*4882a593Smuzhiyun __u32 blk_nr; 40*4882a593Smuzhiyun } __attribute__ ((packed)); 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun struct dasd_fba_characteristics { 43*4882a593Smuzhiyun union { 44*4882a593Smuzhiyun __u8 c; 45*4882a593Smuzhiyun struct { 46*4882a593Smuzhiyun unsigned char reserved:1; 47*4882a593Smuzhiyun unsigned char overrunnable:1; 48*4882a593Smuzhiyun unsigned char burst_byte:1; 49*4882a593Smuzhiyun unsigned char data_chain:1; 50*4882a593Smuzhiyun unsigned char zeros:4; 51*4882a593Smuzhiyun } __attribute__ ((packed)) bits; 52*4882a593Smuzhiyun } __attribute__ ((packed)) mode; 53*4882a593Smuzhiyun union { 54*4882a593Smuzhiyun __u8 c; 55*4882a593Smuzhiyun struct { 56*4882a593Smuzhiyun unsigned char zero0:1; 57*4882a593Smuzhiyun unsigned char removable:1; 58*4882a593Smuzhiyun unsigned char shared:1; 59*4882a593Smuzhiyun unsigned char zero1:1; 60*4882a593Smuzhiyun unsigned char mam:1; 61*4882a593Smuzhiyun unsigned char zeros:3; 62*4882a593Smuzhiyun } __attribute__ ((packed)) bits; 63*4882a593Smuzhiyun } __attribute__ ((packed)) features; 64*4882a593Smuzhiyun __u8 dev_class; 65*4882a593Smuzhiyun __u8 unit_type; 66*4882a593Smuzhiyun __u16 blk_size; 67*4882a593Smuzhiyun __u32 blk_per_cycl; 68*4882a593Smuzhiyun __u32 blk_per_bound; 69*4882a593Smuzhiyun __u32 blk_bdsa; 70*4882a593Smuzhiyun __u32 reserved0; 71*4882a593Smuzhiyun __u16 reserved1; 72*4882a593Smuzhiyun __u16 blk_ce; 73*4882a593Smuzhiyun __u32 reserved2; 74*4882a593Smuzhiyun __u16 reserved3; 75*4882a593Smuzhiyun } __attribute__ ((packed)); 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun #endif /* DASD_FBA_H */ 78