162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
462306a36Sopenharmony_ci * Bugreports.to..: <Linux390@de.ibm.com>
562306a36Sopenharmony_ci * Copyright IBM Corp. 1999, 2000
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#ifndef DASD_FBA_H
1062306a36Sopenharmony_ci#define DASD_FBA_H
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci/*
1362306a36Sopenharmony_ci * Maximum number of blocks to be chained
1462306a36Sopenharmony_ci */
1562306a36Sopenharmony_ci#define DASD_FBA_MAX_BLOCKS		96
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cistruct DE_fba_data {
1862306a36Sopenharmony_ci	struct {
1962306a36Sopenharmony_ci		unsigned char perm:2;	/* Permissions on this extent */
2062306a36Sopenharmony_ci		unsigned char zero:2;	/* Must be zero */
2162306a36Sopenharmony_ci		unsigned char da:1;	/* usually zero */
2262306a36Sopenharmony_ci		unsigned char diag:1;	/* allow diagnose */
2362306a36Sopenharmony_ci		unsigned char zero2:2;	/* zero */
2462306a36Sopenharmony_ci	} __attribute__ ((packed)) mask;
2562306a36Sopenharmony_ci	__u8 zero;		/* Must be zero */
2662306a36Sopenharmony_ci	__u16 blk_size;		/* Blocksize */
2762306a36Sopenharmony_ci	__u32 ext_loc;		/* Extent locator */
2862306a36Sopenharmony_ci	__u32 ext_beg;		/* logical number of block 0 in extent */
2962306a36Sopenharmony_ci	__u32 ext_end;		/* logocal number of last block in extent */
3062306a36Sopenharmony_ci} __attribute__ ((packed));
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cistruct LO_fba_data {
3362306a36Sopenharmony_ci	struct {
3462306a36Sopenharmony_ci		unsigned char zero:4;
3562306a36Sopenharmony_ci		unsigned char cmd:4;
3662306a36Sopenharmony_ci	} __attribute__ ((packed)) operation;
3762306a36Sopenharmony_ci	__u8 auxiliary;
3862306a36Sopenharmony_ci	__u16 blk_ct;
3962306a36Sopenharmony_ci	__u32 blk_nr;
4062306a36Sopenharmony_ci} __attribute__ ((packed));
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_cistruct dasd_fba_characteristics {
4362306a36Sopenharmony_ci	union {
4462306a36Sopenharmony_ci		__u8 c;
4562306a36Sopenharmony_ci		struct {
4662306a36Sopenharmony_ci			unsigned char reserved:1;
4762306a36Sopenharmony_ci			unsigned char overrunnable:1;
4862306a36Sopenharmony_ci			unsigned char burst_byte:1;
4962306a36Sopenharmony_ci			unsigned char data_chain:1;
5062306a36Sopenharmony_ci			unsigned char zeros:4;
5162306a36Sopenharmony_ci		} __attribute__ ((packed)) bits;
5262306a36Sopenharmony_ci	} __attribute__ ((packed)) mode;
5362306a36Sopenharmony_ci	union {
5462306a36Sopenharmony_ci		__u8 c;
5562306a36Sopenharmony_ci		struct {
5662306a36Sopenharmony_ci			unsigned char zero0:1;
5762306a36Sopenharmony_ci			unsigned char removable:1;
5862306a36Sopenharmony_ci			unsigned char shared:1;
5962306a36Sopenharmony_ci			unsigned char zero1:1;
6062306a36Sopenharmony_ci			unsigned char mam:1;
6162306a36Sopenharmony_ci			unsigned char zeros:3;
6262306a36Sopenharmony_ci		} __attribute__ ((packed)) bits;
6362306a36Sopenharmony_ci	} __attribute__ ((packed)) features;
6462306a36Sopenharmony_ci	__u8 dev_class;
6562306a36Sopenharmony_ci	__u8 unit_type;
6662306a36Sopenharmony_ci	__u16 blk_size;
6762306a36Sopenharmony_ci	__u32 blk_per_cycl;
6862306a36Sopenharmony_ci	__u32 blk_per_bound;
6962306a36Sopenharmony_ci	__u32 blk_bdsa;
7062306a36Sopenharmony_ci	__u32 reserved0;
7162306a36Sopenharmony_ci	__u16 reserved1;
7262306a36Sopenharmony_ci	__u16 blk_ce;
7362306a36Sopenharmony_ci	__u32 reserved2;
7462306a36Sopenharmony_ci	__u16 reserved3;
7562306a36Sopenharmony_ci} __attribute__ ((packed));
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci#endif				/* DASD_FBA_H */
78