Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/block/ida_cmd.h
15109 views
1
/*
2
* Disk Array driver for Compaq SMART2 Controllers
3
* Copyright 1998 Compaq Computer Corporation
4
*
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation; either version 2 of the License, or
8
* (at your option) any later version.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
13
* NON INFRINGEMENT. See the GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18
*
19
* Questions/Comments/Bugfixes to [email protected]
20
*
21
*/
22
#ifndef ARRAYCMD_H
23
#define ARRAYCMD_H
24
25
#include <asm/types.h>
26
#if 0
27
#include <linux/blkdev.h>
28
#endif
29
30
/* for the Smart Array 42XX cards */
31
#define S42XX_REQUEST_PORT_OFFSET 0x40
32
#define S42XX_REPLY_INTR_MASK_OFFSET 0x34
33
#define S42XX_REPLY_PORT_OFFSET 0x44
34
#define S42XX_INTR_STATUS 0x30
35
36
#define S42XX_INTR_OFF 0x08
37
#define S42XX_INTR_PENDING 0x08
38
39
#define COMMAND_FIFO 0x04
40
#define COMMAND_COMPLETE_FIFO 0x08
41
#define INTR_MASK 0x0C
42
#define INTR_STATUS 0x10
43
#define INTR_PENDING 0x14
44
45
#define FIFO_NOT_EMPTY 0x01
46
#define FIFO_NOT_FULL 0x02
47
48
#define BIG_PROBLEM 0x40
49
#define LOG_NOT_CONF 2
50
51
#pragma pack(1)
52
typedef struct {
53
__u32 size;
54
__u32 addr;
55
} sg_t;
56
57
#define RCODE_NONFATAL 0x02
58
#define RCODE_FATAL 0x04
59
#define RCODE_INVREQ 0x10
60
typedef struct {
61
__u16 next;
62
__u8 cmd;
63
__u8 rcode;
64
__u32 blk;
65
__u16 blk_cnt;
66
__u8 sg_cnt;
67
__u8 reserved;
68
} rhdr_t;
69
70
#define SG_MAX 32
71
typedef struct {
72
rhdr_t hdr;
73
sg_t sg[SG_MAX];
74
__u32 bp;
75
} rblk_t;
76
77
typedef struct {
78
__u8 unit;
79
__u8 prio;
80
__u16 size;
81
} chdr_t;
82
83
#define CMD_RWREQ 0x00
84
#define CMD_IOCTL_PEND 0x01
85
#define CMD_IOCTL_DONE 0x02
86
87
typedef struct cmdlist {
88
chdr_t hdr;
89
rblk_t req;
90
__u32 size;
91
int retry_cnt;
92
__u32 busaddr;
93
int ctlr;
94
struct cmdlist *prev;
95
struct cmdlist *next;
96
struct request *rq;
97
int type;
98
} cmdlist_t;
99
100
#define ID_CTLR 0x11
101
typedef struct {
102
__u8 nr_drvs;
103
__u32 cfg_sig;
104
__u8 firm_rev[4];
105
__u8 rom_rev[4];
106
__u8 hw_rev;
107
__u32 bb_rev;
108
__u32 drv_present_map;
109
__u32 ext_drv_map;
110
__u32 board_id;
111
__u8 cfg_error;
112
__u32 non_disk_bits;
113
__u8 bad_ram_addr;
114
__u8 cpu_rev;
115
__u8 pdpi_rev;
116
__u8 epic_rev;
117
__u8 wcxc_rev;
118
__u8 marketing_rev;
119
__u8 ctlr_flags;
120
__u8 host_flags;
121
__u8 expand_dis;
122
__u8 scsi_chips;
123
__u32 max_req_blocks;
124
__u32 ctlr_clock;
125
__u8 drvs_per_bus;
126
__u16 big_drv_present_map[8];
127
__u16 big_ext_drv_map[8];
128
__u16 big_non_disk_map[8];
129
__u16 task_flags;
130
__u8 icl_bus;
131
__u8 red_modes;
132
__u8 cur_red_mode;
133
__u8 red_ctlr_stat;
134
__u8 red_fail_reason;
135
__u8 reserved[403];
136
} id_ctlr_t;
137
138
typedef struct {
139
__u16 cyl;
140
__u8 heads;
141
__u8 xsig;
142
__u8 psectors;
143
__u16 wpre;
144
__u8 maxecc;
145
__u8 drv_ctrl;
146
__u16 pcyls;
147
__u8 pheads;
148
__u16 landz;
149
__u8 sect_per_track;
150
__u8 cksum;
151
} drv_param_t;
152
153
#define ID_LOG_DRV 0x10
154
typedef struct {
155
__u16 blk_size;
156
__u32 nr_blks;
157
drv_param_t drv;
158
__u8 fault_tol;
159
__u8 reserved;
160
__u8 bios_disable;
161
} id_log_drv_t;
162
163
#define ID_LOG_DRV_EXT 0x18
164
typedef struct {
165
__u32 log_drv_id;
166
__u8 log_drv_label[64];
167
__u8 reserved[418];
168
} id_log_drv_ext_t;
169
170
#define SENSE_LOG_DRV_STAT 0x12
171
typedef struct {
172
__u8 status;
173
__u32 fail_map;
174
__u16 read_err[32];
175
__u16 write_err[32];
176
__u8 drv_err_data[256];
177
__u8 drq_timeout[32];
178
__u32 blks_to_recover;
179
__u8 drv_recovering;
180
__u16 remap_cnt[32];
181
__u32 replace_drv_map;
182
__u32 act_spare_map;
183
__u8 spare_stat;
184
__u8 spare_repl_map[32];
185
__u32 repl_ok_map;
186
__u8 media_exch;
187
__u8 cache_fail;
188
__u8 expn_fail;
189
__u8 unit_flags;
190
__u16 big_fail_map[8];
191
__u16 big_remap_map[128];
192
__u16 big_repl_map[8];
193
__u16 big_act_spare_map[8];
194
__u8 big_spar_repl_map[128];
195
__u16 big_repl_ok_map[8];
196
__u8 big_drv_rebuild;
197
__u8 reserved[36];
198
} sense_log_drv_stat_t;
199
200
#define START_RECOVER 0x13
201
202
#define ID_PHYS_DRV 0x15
203
typedef struct {
204
__u8 scsi_bus;
205
__u8 scsi_id;
206
__u16 blk_size;
207
__u32 nr_blks;
208
__u32 rsvd_blks;
209
__u8 drv_model[40];
210
__u8 drv_sn[40];
211
__u8 drv_fw[8];
212
__u8 scsi_iq_bits;
213
__u8 compaq_drv_stmp;
214
__u8 last_fail;
215
__u8 phys_drv_flags;
216
__u8 phys_drv_flags1;
217
__u8 scsi_lun;
218
__u8 phys_drv_flags2;
219
__u8 reserved;
220
__u32 spi_speed_rules;
221
__u8 phys_connector[2];
222
__u8 phys_box_on_bus;
223
__u8 phys_bay_in_box;
224
} id_phys_drv_t;
225
226
#define BLINK_DRV_LEDS 0x16
227
typedef struct {
228
__u32 blink_duration;
229
__u32 reserved;
230
__u8 blink[256];
231
__u8 reserved1[248];
232
} blink_drv_leds_t;
233
234
#define SENSE_BLINK_LEDS 0x17
235
typedef struct {
236
__u32 blink_duration;
237
__u32 btime_elap;
238
__u8 blink[256];
239
__u8 reserved1[248];
240
} sense_blink_leds_t;
241
242
#define IDA_READ 0x20
243
#define IDA_WRITE 0x30
244
#define IDA_WRITE_MEDIA 0x31
245
#define RESET_TO_DIAG 0x40
246
#define DIAG_PASS_THRU 0x41
247
248
#define SENSE_CONFIG 0x50
249
#define SET_CONFIG 0x51
250
typedef struct {
251
__u32 cfg_sig;
252
__u16 compat_port;
253
__u8 data_dist_mode;
254
__u8 surf_an_ctrl;
255
__u16 ctlr_phys_drv;
256
__u16 log_unit_phys_drv;
257
__u16 fault_tol_mode;
258
__u8 phys_drv_param[16];
259
drv_param_t drv;
260
__u32 drv_asgn_map;
261
__u16 dist_factor;
262
__u32 spare_asgn_map;
263
__u8 reserved[6];
264
__u16 os;
265
__u8 ctlr_order;
266
__u8 extra_info;
267
__u32 data_offs;
268
__u8 parity_backedout_write_drvs;
269
__u8 parity_dist_mode;
270
__u8 parity_shift_fact;
271
__u8 bios_disable_flag;
272
__u32 blks_on_vol;
273
__u32 blks_per_drv;
274
__u8 scratch[16];
275
__u16 big_drv_map[8];
276
__u16 big_spare_map[8];
277
__u8 ss_source_vol;
278
__u8 mix_drv_cap_range;
279
struct {
280
__u16 big_drv_map[8];
281
__u32 blks_per_drv;
282
__u16 fault_tol_mode;
283
__u16 dist_factor;
284
} MDC_range[4];
285
__u8 reserved1[248];
286
} config_t;
287
288
#define BYPASS_VOL_STATE 0x52
289
#define SS_CREATE_VOL 0x53
290
#define CHANGE_CONFIG 0x54
291
#define SENSE_ORIG_CONF 0x55
292
#define REORDER_LOG_DRV 0x56
293
typedef struct {
294
__u8 old_units[32];
295
} reorder_log_drv_t;
296
297
#define LABEL_LOG_DRV 0x57
298
typedef struct {
299
__u8 log_drv_label[64];
300
} label_log_drv_t;
301
302
#define SS_TO_VOL 0x58
303
304
#define SET_SURF_DELAY 0x60
305
typedef struct {
306
__u16 delay;
307
__u8 reserved[510];
308
} surf_delay_t;
309
310
#define SET_OVERHEAT_DELAY 0x61
311
typedef struct {
312
__u16 delay;
313
} overhead_delay_t;
314
315
#define SET_MP_DELAY
316
typedef struct {
317
__u16 delay;
318
__u8 reserved[510];
319
} mp_delay_t;
320
321
#define PASSTHRU_A 0x91
322
typedef struct {
323
__u8 target;
324
__u8 bus;
325
__u8 lun;
326
__u32 timeout;
327
__u32 flags;
328
__u8 status;
329
__u8 error;
330
__u8 cdb_len;
331
__u8 sense_error;
332
__u8 sense_key;
333
__u32 sense_info;
334
__u8 sense_code;
335
__u8 sense_qual;
336
__u32 residual;
337
__u8 reserved[4];
338
__u8 cdb[12];
339
} scsi_param_t;
340
341
#define RESUME_BACKGROUND_ACTIVITY 0x99
342
#define SENSE_CONTROLLER_PERFORMANCE 0xa8
343
#define FLUSH_CACHE 0xc2
344
#define COLLECT_BUFFER 0xd2
345
#define READ_FLASH_ROM 0xf6
346
#define WRITE_FLASH_ROM 0xf7
347
#pragma pack()
348
349
#endif /* ARRAYCMD_H */
350
351