summaryrefslogtreecommitdiffstats
path: root/drivers/s390/block/dasd_diag.h
blob: df31484d73a77a088cb388507db5ad556c457d47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/* 
 * File...........: linux/drivers/s390/block/dasd_diag.h
 * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
 * Based on.......: linux/drivers/s390/block/mdisk.h
 * ...............: by Hartmunt Penner <hpenner@de.ibm.com>
 * Bugreports.to..: <Linux390@de.ibm.com>
 * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
 *
 * $Revision: 1.8 $
 */

#define MDSK_WRITE_REQ 0x01
#define MDSK_READ_REQ  0x02

#define INIT_BIO	0x00
#define RW_BIO		0x01
#define TERM_BIO	0x02

#define DEV_CLASS_FBA	0x01
#define DEV_CLASS_ECKD	0x04

#define DASD_DIAG_LC_INT_CODE		132
#define DASD_DIAG_LC_INT_STATUS		133
#define DASD_DIAG_LC_INT_PARM_31BIT	128
#define DASD_DIAG_LC_INT_PARM_64BIT	4536
#define DASD_DIAG_CODE_31BIT		0x03
#define DASD_DIAG_CODE_64BIT		0x07

#define DASD_DIAG_RWFLAG_ASYNC		0x02
#define DASD_DIAG_RWFLAG_NOCACHE	0x01

#define DASD_DIAG_FLAGA_FORMAT_64BIT	0x80

struct dasd_diag_characteristics {
	u16 dev_nr;
	u16 rdc_len;
	u8 vdev_class;
	u8 vdev_type;
	u8 vdev_status;
	u8 vdev_flags;
	u8 rdev_class;
	u8 rdev_type;
	u8 rdev_model;
	u8 rdev_features;
} __attribute__ ((packed, aligned(4)));

struct dasd_diag_cms_label {
	u8 label_id[4];
	u8 vol_id[6];
	u16 version_id;
	u32 block_size;
	u32 origin_ptr;
	u32 usable_count;
	u32 formatted_count;
	u32 block_count;
	u32 used_count;
	u32 fst_size;
	u32 fst_count;
	u8 format_date[6];
	u8 reserved1[2];
	u32 disk_offset;
	u32 map_block;
	u32 hblk_disp;
	u32 user_disp;
	u8 reserved2[4];
	u8 segment_name[8];
} __attribute__ ((packed));

#ifdef CONFIG_ARCH_S390X
#define DASD_DIAG_FLAGA_DEFAULT		DASD_DIAG_FLAGA_FORMAT_64BIT

typedef u64 blocknum_t;
typedef s64 sblocknum_t;

struct dasd_diag_bio {
	u8 type;
	u8 status;
	u8 spare1[2];
	u32 alet;
	blocknum_t block_number;
	void *buffer;
} __attribute__ ((packed, aligned(8)));

struct dasd_diag_init_io {
	u16 dev_nr;
	u8 flaga;
	u8 spare1[21];
	u32 block_size;
	u8 spare2[4];
	blocknum_t offset;
	sblocknum_t start_block;
	blocknum_t end_block;
	u8  spare3[8];
} __attribute__ ((packed, aligned(8)));

struct dasd_diag_rw_io {
	u16 dev_nr;
	u8  flaga;
	u8  spare1[21];
	u8  key;
	u8  flags;
	u8  spare2[2];
	u32 block_count;
	u32 alet;
	u8  spare3[4];
	u64 interrupt_params;
	struct dasd_diag_bio *bio_list;
	u8  spare4[8];
} __attribute__ ((packed, aligned(8)));
#else /* CONFIG_ARCH_S390X */
#define DASD_DIAG_FLAGA_DEFAULT		0x0

typedef u32 blocknum_t;
typedef s32 sblocknum_t;

struct dasd_diag_bio {
	u8 type;
	u8 status;
	u16 spare1;
	blocknum_t block_number;
	u32 alet;
	void *buffer;
} __attribute__ ((packed, aligned(8)));

struct dasd_diag_init_io {
	u16 dev_nr;
	u8 flaga;
	u8 spare1[21];
	u32 block_size;
	blocknum_t offset;
	sblocknum_t start_block;
	blocknum_t end_block;
	u8 spare2[24];
} __attribute__ ((packed, aligned(8)));

struct dasd_diag_rw_io {
	u16 dev_nr;
	u8 flaga;
	u8 spare1[21];
	u8 key;
	u8 flags;
	u8 spare2[2];
	u32 block_count;
	u32 alet;
	struct dasd_diag_bio *bio_list;
	u32 interrupt_params;
	u8 spare3[20];
} __attribute__ ((packed, aligned(8)));
#endif /* CONFIG_ARCH_S390X */