Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/s390/include/asm/dasd.h
10819 views
1
/*
2
* File...........: linux/drivers/s390/block/dasd.c
3
* Author(s)......: Holger Smolinski <[email protected]>
4
* Bugreports.to..: <[email protected]>
5
* (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
6
* EMC Symmetrix ioctl Copyright EMC Corporation, 2008
7
* Author.........: Nigel Hislop <[email protected]>
8
*
9
* This file is the interface of the DASD device driver, which is exported to user space
10
* any future changes wrt the API will result in a change of the APIVERSION reported
11
* to userspace by the DASDAPIVER-ioctl
12
*
13
*/
14
15
#ifndef DASD_H
16
#define DASD_H
17
#include <linux/types.h>
18
#include <linux/ioctl.h>
19
20
#define DASD_IOCTL_LETTER 'D'
21
22
#define DASD_API_VERSION 6
23
24
/*
25
* struct dasd_information2_t
26
* represents any data about the device, which is visible to userspace.
27
* including foramt and featueres.
28
*/
29
typedef struct dasd_information2_t {
30
unsigned int devno; /* S/390 devno */
31
unsigned int real_devno; /* for aliases */
32
unsigned int schid; /* S/390 subchannel identifier */
33
unsigned int cu_type : 16; /* from SenseID */
34
unsigned int cu_model : 8; /* from SenseID */
35
unsigned int dev_type : 16; /* from SenseID */
36
unsigned int dev_model : 8; /* from SenseID */
37
unsigned int open_count;
38
unsigned int req_queue_len;
39
unsigned int chanq_len; /* length of chanq */
40
char type[4]; /* from discipline.name, 'none' for unknown */
41
unsigned int status; /* current device level */
42
unsigned int label_block; /* where to find the VOLSER */
43
unsigned int FBA_layout; /* fixed block size (like AIXVOL) */
44
unsigned int characteristics_size;
45
unsigned int confdata_size;
46
char characteristics[64]; /* from read_device_characteristics */
47
char configuration_data[256]; /* from read_configuration_data */
48
unsigned int format; /* format info like formatted/cdl/ldl/... */
49
unsigned int features; /* dasd features like 'ro',... */
50
unsigned int reserved0; /* reserved for further use ,... */
51
unsigned int reserved1; /* reserved for further use ,... */
52
unsigned int reserved2; /* reserved for further use ,... */
53
unsigned int reserved3; /* reserved for further use ,... */
54
unsigned int reserved4; /* reserved for further use ,... */
55
unsigned int reserved5; /* reserved for further use ,... */
56
unsigned int reserved6; /* reserved for further use ,... */
57
unsigned int reserved7; /* reserved for further use ,... */
58
} dasd_information2_t;
59
60
/*
61
* values to be used for dasd_information_t.format
62
* 0x00: NOT formatted
63
* 0x01: Linux disc layout
64
* 0x02: Common disc layout
65
*/
66
#define DASD_FORMAT_NONE 0
67
#define DASD_FORMAT_LDL 1
68
#define DASD_FORMAT_CDL 2
69
/*
70
* values to be used for dasd_information_t.features
71
* 0x00: default features
72
* 0x01: readonly (ro)
73
* 0x02: use diag discipline (diag)
74
* 0x04: set the device initially online (internal use only)
75
* 0x08: enable ERP related logging
76
* 0x20: give access to raw eckd data
77
*/
78
#define DASD_FEATURE_DEFAULT 0x00
79
#define DASD_FEATURE_READONLY 0x01
80
#define DASD_FEATURE_USEDIAG 0x02
81
#define DASD_FEATURE_INITIAL_ONLINE 0x04
82
#define DASD_FEATURE_ERPLOG 0x08
83
#define DASD_FEATURE_FAILFAST 0x10
84
#define DASD_FEATURE_FAILONSLCK 0x20
85
#define DASD_FEATURE_USERAW 0x40
86
87
#define DASD_PARTN_BITS 2
88
89
/*
90
* struct dasd_information_t
91
* represents any data about the data, which is visible to userspace
92
*/
93
typedef struct dasd_information_t {
94
unsigned int devno; /* S/390 devno */
95
unsigned int real_devno; /* for aliases */
96
unsigned int schid; /* S/390 subchannel identifier */
97
unsigned int cu_type : 16; /* from SenseID */
98
unsigned int cu_model : 8; /* from SenseID */
99
unsigned int dev_type : 16; /* from SenseID */
100
unsigned int dev_model : 8; /* from SenseID */
101
unsigned int open_count;
102
unsigned int req_queue_len;
103
unsigned int chanq_len; /* length of chanq */
104
char type[4]; /* from discipline.name, 'none' for unknown */
105
unsigned int status; /* current device level */
106
unsigned int label_block; /* where to find the VOLSER */
107
unsigned int FBA_layout; /* fixed block size (like AIXVOL) */
108
unsigned int characteristics_size;
109
unsigned int confdata_size;
110
char characteristics[64]; /* from read_device_characteristics */
111
char configuration_data[256]; /* from read_configuration_data */
112
} dasd_information_t;
113
114
/*
115
* Read Subsystem Data - Performance Statistics
116
*/
117
typedef struct dasd_rssd_perf_stats_t {
118
unsigned char invalid:1;
119
unsigned char format:3;
120
unsigned char data_format:4;
121
unsigned char unit_address;
122
unsigned short device_status;
123
unsigned int nr_read_normal;
124
unsigned int nr_read_normal_hits;
125
unsigned int nr_write_normal;
126
unsigned int nr_write_fast_normal_hits;
127
unsigned int nr_read_seq;
128
unsigned int nr_read_seq_hits;
129
unsigned int nr_write_seq;
130
unsigned int nr_write_fast_seq_hits;
131
unsigned int nr_read_cache;
132
unsigned int nr_read_cache_hits;
133
unsigned int nr_write_cache;
134
unsigned int nr_write_fast_cache_hits;
135
unsigned int nr_inhibit_cache;
136
unsigned int nr_bybass_cache;
137
unsigned int nr_seq_dasd_to_cache;
138
unsigned int nr_dasd_to_cache;
139
unsigned int nr_cache_to_dasd;
140
unsigned int nr_delayed_fast_write;
141
unsigned int nr_normal_fast_write;
142
unsigned int nr_seq_fast_write;
143
unsigned int nr_cache_miss;
144
unsigned char status2;
145
unsigned int nr_quick_write_promotes;
146
unsigned char reserved;
147
unsigned short ssid;
148
unsigned char reseved2[96];
149
} __attribute__((packed)) dasd_rssd_perf_stats_t;
150
151
/*
152
* struct profile_info_t
153
* holds the profinling information
154
*/
155
typedef struct dasd_profile_info_t {
156
unsigned int dasd_io_reqs; /* number of requests processed at all */
157
unsigned int dasd_io_sects; /* number of sectors processed at all */
158
unsigned int dasd_io_secs[32]; /* histogram of request's sizes */
159
unsigned int dasd_io_times[32]; /* histogram of requests's times */
160
unsigned int dasd_io_timps[32]; /* histogram of requests's times per sector */
161
unsigned int dasd_io_time1[32]; /* histogram of time from build to start */
162
unsigned int dasd_io_time2[32]; /* histogram of time from start to irq */
163
unsigned int dasd_io_time2ps[32]; /* histogram of time from start to irq */
164
unsigned int dasd_io_time3[32]; /* histogram of time from irq to end */
165
unsigned int dasd_io_nr_req[32]; /* histogram of # of requests in chanq */
166
} dasd_profile_info_t;
167
168
/*
169
* struct format_data_t
170
* represents all data necessary to format a dasd
171
*/
172
typedef struct format_data_t {
173
unsigned int start_unit; /* from track */
174
unsigned int stop_unit; /* to track */
175
unsigned int blksize; /* sectorsize */
176
unsigned int intensity;
177
} format_data_t;
178
179
/*
180
* values to be used for format_data_t.intensity
181
* 0/8: normal format
182
* 1/9: also write record zero
183
* 3/11: also write home address
184
* 4/12: invalidate track
185
*/
186
#define DASD_FMT_INT_FMT_R0 1 /* write record zero */
187
#define DASD_FMT_INT_FMT_HA 2 /* write home address, also set FMT_R0 ! */
188
#define DASD_FMT_INT_INVAL 4 /* invalidate tracks */
189
#define DASD_FMT_INT_COMPAT 8 /* use OS/390 compatible disk layout */
190
191
192
/*
193
* struct attrib_data_t
194
* represents the operation (cache) bits for the device.
195
* Used in DE to influence caching of the DASD.
196
*/
197
typedef struct attrib_data_t {
198
unsigned char operation:3; /* cache operation mode */
199
unsigned char reserved:5; /* cache operation mode */
200
__u16 nr_cyl; /* no of cyliners for read ahaed */
201
__u8 reserved2[29]; /* for future use */
202
} __attribute__ ((packed)) attrib_data_t;
203
204
/* definition of operation (cache) bits within attributes of DE */
205
#define DASD_NORMAL_CACHE 0x0
206
#define DASD_BYPASS_CACHE 0x1
207
#define DASD_INHIBIT_LOAD 0x2
208
#define DASD_SEQ_ACCESS 0x3
209
#define DASD_SEQ_PRESTAGE 0x4
210
#define DASD_REC_ACCESS 0x5
211
212
/*
213
* Perform EMC Symmetrix I/O
214
*/
215
typedef struct dasd_symmio_parms {
216
unsigned char reserved[8]; /* compat with older releases */
217
unsigned long long psf_data; /* char * cast to u64 */
218
unsigned long long rssd_result; /* char * cast to u64 */
219
int psf_data_len;
220
int rssd_result_len;
221
} __attribute__ ((packed)) dasd_symmio_parms_t;
222
223
/*
224
* Data returned by Sense Path Group ID (SNID)
225
*/
226
struct dasd_snid_data {
227
struct {
228
__u8 group:2;
229
__u8 reserve:2;
230
__u8 mode:1;
231
__u8 res:3;
232
} __attribute__ ((packed)) path_state;
233
__u8 pgid[11];
234
} __attribute__ ((packed));
235
236
struct dasd_snid_ioctl_data {
237
struct dasd_snid_data data;
238
__u8 path_mask;
239
} __attribute__ ((packed));
240
241
242
/********************************************************************************
243
* SECTION: Definition of IOCTLs
244
*
245
* Here ist how the ioctl-nr should be used:
246
* 0 - 31 DASD driver itself
247
* 32 - 239 still open
248
* 240 - 255 reserved for EMC
249
*******************************************************************************/
250
251
/* Disable the volume (for Linux) */
252
#define BIODASDDISABLE _IO(DASD_IOCTL_LETTER,0)
253
/* Enable the volume (for Linux) */
254
#define BIODASDENABLE _IO(DASD_IOCTL_LETTER,1)
255
/* Issue a reserve/release command, rsp. */
256
#define BIODASDRSRV _IO(DASD_IOCTL_LETTER,2) /* reserve */
257
#define BIODASDRLSE _IO(DASD_IOCTL_LETTER,3) /* release */
258
#define BIODASDSLCK _IO(DASD_IOCTL_LETTER,4) /* steal lock */
259
/* reset profiling information of a device */
260
#define BIODASDPRRST _IO(DASD_IOCTL_LETTER,5)
261
/* Quiesce IO on device */
262
#define BIODASDQUIESCE _IO(DASD_IOCTL_LETTER,6)
263
/* Resume IO on device */
264
#define BIODASDRESUME _IO(DASD_IOCTL_LETTER,7)
265
266
267
/* retrieve API version number */
268
#define DASDAPIVER _IOR(DASD_IOCTL_LETTER,0,int)
269
/* Get information on a dasd device */
270
#define BIODASDINFO _IOR(DASD_IOCTL_LETTER,1,dasd_information_t)
271
/* retrieve profiling information of a device */
272
#define BIODASDPRRD _IOR(DASD_IOCTL_LETTER,2,dasd_profile_info_t)
273
/* Get information on a dasd device (enhanced) */
274
#define BIODASDINFO2 _IOR(DASD_IOCTL_LETTER,3,dasd_information2_t)
275
/* Performance Statistics Read */
276
#define BIODASDPSRD _IOR(DASD_IOCTL_LETTER,4,dasd_rssd_perf_stats_t)
277
/* Get Attributes (cache operations) */
278
#define BIODASDGATTR _IOR(DASD_IOCTL_LETTER,5,attrib_data_t)
279
280
281
/* #define BIODASDFORMAT _IOW(IOCTL_LETTER,0,format_data_t) , deprecated */
282
#define BIODASDFMT _IOW(DASD_IOCTL_LETTER,1,format_data_t)
283
/* Set Attributes (cache operations) */
284
#define BIODASDSATTR _IOW(DASD_IOCTL_LETTER,2,attrib_data_t)
285
286
/* Get Sense Path Group ID (SNID) data */
287
#define BIODASDSNID _IOWR(DASD_IOCTL_LETTER, 1, struct dasd_snid_ioctl_data)
288
289
#define BIODASDSYMMIO _IOWR(DASD_IOCTL_LETTER, 240, dasd_symmio_parms_t)
290
291
#endif /* DASD_H */
292
293
294