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