xref: /openbmc/linux/drivers/s390/block/dasd_diag.h (revision 87c2ce3b)
1 /*
2  * File...........: linux/drivers/s390/block/dasd_diag.h
3  * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
4  * Based on.......: linux/drivers/s390/block/mdisk.h
5  * ...............: by Hartmunt Penner <hpenner@de.ibm.com>
6  * Bugreports.to..: <Linux390@de.ibm.com>
7  * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
8  *
9  * $Revision: 1.9 $
10  */
11 
12 #define MDSK_WRITE_REQ 0x01
13 #define MDSK_READ_REQ  0x02
14 
15 #define INIT_BIO	0x00
16 #define RW_BIO		0x01
17 #define TERM_BIO	0x02
18 
19 #define DEV_CLASS_FBA	0x01
20 #define DEV_CLASS_ECKD	0x04
21 
22 #define DASD_DIAG_LC_INT_CODE		132
23 #define DASD_DIAG_LC_INT_STATUS		133
24 #define DASD_DIAG_LC_INT_PARM_31BIT	128
25 #define DASD_DIAG_LC_INT_PARM_64BIT	4536
26 #define DASD_DIAG_CODE_31BIT		0x03
27 #define DASD_DIAG_CODE_64BIT		0x07
28 
29 #define DASD_DIAG_RWFLAG_ASYNC		0x02
30 #define DASD_DIAG_RWFLAG_NOCACHE	0x01
31 
32 #define DASD_DIAG_FLAGA_FORMAT_64BIT	0x80
33 
34 struct dasd_diag_characteristics {
35 	u16 dev_nr;
36 	u16 rdc_len;
37 	u8 vdev_class;
38 	u8 vdev_type;
39 	u8 vdev_status;
40 	u8 vdev_flags;
41 	u8 rdev_class;
42 	u8 rdev_type;
43 	u8 rdev_model;
44 	u8 rdev_features;
45 } __attribute__ ((packed, aligned(4)));
46 
47 
48 #ifdef CONFIG_64BIT
49 #define DASD_DIAG_FLAGA_DEFAULT		DASD_DIAG_FLAGA_FORMAT_64BIT
50 
51 typedef u64 blocknum_t;
52 typedef s64 sblocknum_t;
53 
54 struct dasd_diag_bio {
55 	u8 type;
56 	u8 status;
57 	u8 spare1[2];
58 	u32 alet;
59 	blocknum_t block_number;
60 	void *buffer;
61 } __attribute__ ((packed, aligned(8)));
62 
63 struct dasd_diag_init_io {
64 	u16 dev_nr;
65 	u8 flaga;
66 	u8 spare1[21];
67 	u32 block_size;
68 	u8 spare2[4];
69 	blocknum_t offset;
70 	sblocknum_t start_block;
71 	blocknum_t end_block;
72 	u8  spare3[8];
73 } __attribute__ ((packed, aligned(8)));
74 
75 struct dasd_diag_rw_io {
76 	u16 dev_nr;
77 	u8  flaga;
78 	u8  spare1[21];
79 	u8  key;
80 	u8  flags;
81 	u8  spare2[2];
82 	u32 block_count;
83 	u32 alet;
84 	u8  spare3[4];
85 	u64 interrupt_params;
86 	struct dasd_diag_bio *bio_list;
87 	u8  spare4[8];
88 } __attribute__ ((packed, aligned(8)));
89 #else /* CONFIG_64BIT */
90 #define DASD_DIAG_FLAGA_DEFAULT		0x0
91 
92 typedef u32 blocknum_t;
93 typedef s32 sblocknum_t;
94 
95 struct dasd_diag_bio {
96 	u8 type;
97 	u8 status;
98 	u16 spare1;
99 	blocknum_t block_number;
100 	u32 alet;
101 	void *buffer;
102 } __attribute__ ((packed, aligned(8)));
103 
104 struct dasd_diag_init_io {
105 	u16 dev_nr;
106 	u8 flaga;
107 	u8 spare1[21];
108 	u32 block_size;
109 	blocknum_t offset;
110 	sblocknum_t start_block;
111 	blocknum_t end_block;
112 	u8 spare2[24];
113 } __attribute__ ((packed, aligned(8)));
114 
115 struct dasd_diag_rw_io {
116 	u16 dev_nr;
117 	u8 flaga;
118 	u8 spare1[21];
119 	u8 key;
120 	u8 flags;
121 	u8 spare2[2];
122 	u32 block_count;
123 	u32 alet;
124 	struct dasd_diag_bio *bio_list;
125 	u32 interrupt_params;
126 	u8 spare3[20];
127 } __attribute__ ((packed, aligned(8)));
128 #endif /* CONFIG_64BIT */
129