1 /*        $NetBSD: mlxreg.h,v 1.8 2008/09/08 23:36:54 gmcgarry Exp $  */
2 
3 /*-
4  * Copyright (c) 2001 The NetBSD Foundation, Inc.
5  * All rights reserved.
6  *
7  * This code is derived from software contributed to The NetBSD Foundation
8  * by Andrew Doran.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 /*-
33  * Copyright (c) 1999 Michael Smith
34  * All rights reserved.
35  *
36  * Redistribution and use in source and binary forms, with or without
37  * modification, are permitted provided that the following conditions
38  * are met:
39  * 1. Redistributions of source code must retain the above copyright
40  *    notice, this list of conditions and the following disclaimer.
41  * 2. Redistributions in binary form must reproduce the above copyright
42  *    notice, this list of conditions and the following disclaimer in the
43  *    documentation and/or other materials provided with the distribution.
44  *
45  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
46  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
47  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
48  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
49  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
51  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
52  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
53  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
54  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
55  * SUCH DAMAGE.
56  *
57  * from FreeBSD: mlxreg.h,v 1.5.2.2 2000/04/24 19:40:50 msmith Exp
58  */
59 
60 #ifndef _IC_MLXREG_H_
61 #define   _IC_MLXREG_H_
62 
63 #define   MLX_SECTOR_SIZE               512
64 
65 /*
66  * Selected command codes.
67  */
68 #define   MLX_CMD_ENQUIRY_OLD 0x05
69 #define   MLX_CMD_ENQUIRY               0x53
70 #define   MLX_CMD_ENQUIRY2    0x1c
71 #define   MLX_CMD_ENQSYSDRIVE 0x19
72 #define   MLX_CMD_READSG                0xb6
73 #define   MLX_CMD_WRITESG               0xb7
74 #define   MLX_CMD_READSG_OLD  0x82
75 #define   MLX_CMD_WRITESG_OLD 0x83
76 #define   MLX_CMD_FLUSH                 0x0a
77 #define   MLX_CMD_LOGOP                 0x72
78 #define   MLX_CMD_REBUILDASYNC          0x16
79 #define   MLX_CMD_CHECKASYNC  0x1e
80 #define   MLX_CMD_REBUILDSTAT 0x0c
81 #define   MLX_CMD_STOPCHANNEL 0x13
82 #define   MLX_CMD_STARTCHANNEL          0x12
83 #define   MLX_CMD_READ_CONFIG 0x4e
84 #define   MLX_CMD_WRITE_CONFIG          0x4f
85 #define   MLX_CMD_READ_DK_CONFIG        0x4a
86 #define   MLX_CMD_WRITE_DK_CONFIG       0x4b
87 #define   MLX_CMD_DIRECT_CDB  0x04
88 #define   MLX_CMD_DEVICE_STATE          0x50
89 #define   MLX_CMD_READ_CONFIG2          0x3d
90 #define   MLX_CMD_WRITE_CONFIG2         0x3c
91 
92 #ifdef _KERNEL
93 
94 /*
95  * Status values.
96  */
97 #define   MLX_STATUS_OK                 0x0000
98 #define   MLX_STATUS_RDWROFFLINE        0x0002    /* read/write claims drive is offline */
99 #define   MLX_STATUS_WEDGED   0xdeaf    /* controller not listening */
100 #define   MLX_STATUS_LOST               0xdead    /* never came back */
101 #define   MLX_STATUS_BUSY               0xbabe    /* command is in controller */
102 
103 /*
104  * V1 (EISA) interface.
105  */
106 #define   MLX_V1REG_IE                            0x09
107 #define   MLX_V1REG_IDB                           0x0d
108 #define   MLX_V1REG_ODB_EN              0x0e
109 #define   MLX_V1REG_ODB                           0x0f
110 #define   MLX_V1REG_MAILBOX             0x10
111 
112 #define   MLX_V1_IDB_FULL               0x01      /* mailbox is full */
113 #define   MLX_V1_IDB_INIT_BUSY          0x02      /* init in progress */
114 
115 #define   MLX_V1_IDB_SACK               0x02      /* acknowledge status read */
116 #define   MLX_V1_IDB_RESET    0x10      /* reset controller */
117 
118 #define   MLX_V1_ODB_SAVAIL   0x01      /* status is available */
119 #define   MLX_V1_ODB_RESET    0x02      /* reset controller */
120 
121 #define   MLX_V1_FWERROR_PEND 0x04      /* firmware error pending */
122 
123 /*
124  * V2/V3 interface.
125  */
126 #define   MLX_V3REG_MAILBOX             0x00
127 #define   MLX_V3REG_STATUS_IDENT                  0x0d
128 #define   MLX_V3REG_STATUS              0x0e
129 #define   MLX_V3REG_IDB                           0x40
130 #define   MLX_V3REG_ODB                           0x41
131 #define   MLX_V3REG_IE                            0x43
132 #define   MLX_V3REG_FWERROR             0x3f
133 #define   MLX_V3REG_FWERROR_PARAM1      0x00
134 #define   MLX_V3REG_FWERROR_PARAM2      0x01
135 
136 #define   MLX_V3_IDB_FULL               0x01      /* mailbox is full */
137 #define   MLX_V3_IDB_INIT_BUSY          0x02      /* init in progress */
138 
139 #define   MLX_V3_IDB_SACK               0x02      /* acknowledge status read */
140 #define   MLX_V3_IDB_RESET    0x08      /* reset controller */
141 
142 #define   MLX_V3_ODB_SAVAIL   0x01      /* status is available */
143 
144 #define   MLX_V3_FWERROR_PEND 0x04      /* firmware error pending */
145 
146 /*
147  * V4 interface.
148  */
149 #define   MLX_V4REG_MAILBOX             0x1000
150 #define   MLX_V4REG_STATUS_IDENT                  0x1018
151 #define   MLX_V4REG_STATUS              0x101a
152 #define   MLX_V4REG_IDB                           0x0020
153 #define   MLX_V4REG_ODB                           0x002c
154 #define   MLX_V4REG_IE                            0x0034
155 #define   MLX_V4REG_FWERROR             0x103f
156 #define   MLX_V4REG_FWERROR_PARAM1      0x1000
157 #define   MLX_V4REG_FWERROR_PARAM2      0x1001
158 
159 #define   MLX_V4_IDB_FULL               0x01      /* mailbox is full */
160 #define   MLX_V4_IDB_INIT_BUSY          0x02      /* initialisation in progress */
161 
162 #define   MLX_V4_IDB_HWMBOX_CMD         0x01      /* posted hardware mailbox command */
163 #define   MLX_V4_IDB_SACK               0x02      /* acknowledge status read */
164 #define   MLX_V4_IDB_MEMMBOX_CMD        0x10      /* posted memory mailbox command */
165 
166 #define   MLX_V4_ODB_HWSAVAIL 0x01      /* status available for hardware m/b */
167 #define   MLX_V4_ODB_MEMSAVAIL          0x02      /* status available for memory m/b */
168 
169 #define   MLX_V4_ODB_HWMBOX_ACK         0x01      /* ack status read from hardware m/b */
170 #define   MLX_V4_ODB_MEMMBOX_ACK        0x02      /* ack status read from memory m/b */
171 
172 #define   MLX_V4_IE_MASK                0xfb      /* message unit interrupt mask */
173 #define   MLX_V4_IE_DISINT    0x04      /* interrupt disable bit */
174 
175 #define   MLX_V4_FWERROR_PEND 0x04      /* firmware error pending */
176 
177 /*
178  * V5 interface.
179  */
180 #define   MLX_V5REG_MAILBOX             0x50
181 #define   MLX_V5REG_STATUS_IDENT                  0x5d
182 #define   MLX_V5REG_STATUS              0x5e
183 #define   MLX_V5REG_IDB                           0x60
184 #define   MLX_V5REG_ODB                           0x61
185 #define   MLX_V5REG_IE                            0x34
186 #define   MLX_V5REG_FWERROR             0x63
187 #define   MLX_V5REG_FWERROR_PARAM1      0x50
188 #define   MLX_V5REG_FWERROR_PARAM2      0x51
189 
190 #define   MLX_V5_IDB_EMPTY    0x01      /* mailbox is empty */
191 #define   MLX_V5_IDB_INIT_DONE          0x02      /* initialisation has completed */
192 
193 #define   MLX_V5_IDB_HWMBOX_CMD         0x01      /* posted hardware mailbox command */
194 #define   MLX_V5_IDB_SACK               0x02      /* acknowledge status read */
195 #define   MLX_V5_IDB_RESET    0x08      /* reset request */
196 #define   MLX_V5_IDB_MEMMBOX_CMD        0x10      /* posted memory mailbox command */
197 
198 #define   MLX_V5_ODB_HWSAVAIL 0x01      /* status available for hardware m/b */
199 #define   MLX_V5_ODB_MEMSAVAIL          0x02      /* status available for memory m/b */
200 
201 #define   MLX_V5_ODB_HWMBOX_ACK         0x01      /* ack status read from hardware m/b */
202 #define   MLX_V5_ODB_MEMMBOX_ACK        0x02      /* ack status read from memory m/b */
203 
204 #define   MLX_V5_IE_DISINT    0x04      /* interrupt disable bit */
205 
206 #define   MLX_V5_FWERROR_PEND 0x04      /* firmware error pending */
207 
208 #endif /* _KERNEL */
209 
210 /*
211  * Scatter-gather list format, type 1, kind 00.
212  */
213 struct mlx_sgentry {
214           u_int32_t sge_addr;
215           u_int32_t sge_count;
216 } __packed;
217 
218 /*
219  * Command result buffers, as placed in system memory by the controller.
220  */
221 struct mlx_enquiry_old {
222           u_int8_t  me_num_sys_drvs;
223           u_int8_t  me_res1[3];
224           u_int32_t me_drvsize[8];
225           u_int16_t me_flash_age;
226           u_int8_t  me_status_flags;
227           u_int8_t  me_free_state_change_count;
228           u_int8_t  me_fwminor;
229           u_int8_t  me_fwmajor;
230           u_int8_t  me_rebuild_flag;
231           u_int8_t  me_max_commands;
232           u_int8_t  me_offline_sd_count;
233           u_int8_t  me_res3;
234           u_int8_t  me_critical_sd_count;
235           u_int8_t  me_res4[3];
236           u_int8_t  me_dead_count;
237           u_int8_t  me_res5;
238           u_int8_t  me_rebuild_count;
239           u_int8_t  me_misc_flags;
240           struct  {
241                     u_int8_t  dd_targ;
242                     u_int8_t  dd_chan;
243           } __packed me_dead[20];
244 } __packed;
245 
246 struct mlx_enquiry {
247           u_int8_t  me_num_sys_drvs;
248           u_int8_t  me_res1[3];
249           u_int32_t me_drvsize[32];
250           u_int16_t me_flash_age;
251           u_int8_t  me_status_flags;
252 #define   MLX_ENQ_SFLAG_DEFWRERR        0x01      /* deferred write error indicator */
253 #define   MLX_ENQ_SFLAG_BATTLOW         0x02      /* battery low */
254           u_int8_t  me_res2;
255           u_int8_t  me_fwminor;
256           u_int8_t  me_fwmajor;
257           u_int8_t  me_rebuild_flag;
258           u_int8_t  me_max_commands;
259           u_int8_t  me_offline_sd_count;
260           u_int8_t  me_res3;
261           u_int16_t me_event_log_seq_num;
262           u_int8_t  me_critical_sd_count;
263           u_int8_t  me_res4[3];
264           u_int8_t  me_dead_count;
265           u_int8_t  me_res5;
266           u_int8_t  me_rebuild_count;
267           u_int8_t  me_misc_flags;
268 #define   MLX_ENQ_MISC_BBU    0x08      /* battery backup present */
269           struct {
270                     u_int8_t  dd_targ;
271                     u_int8_t  dd_chan;
272           } __packed me_dead[20];
273 } __packed;
274 
275 struct mlx_enquiry2 {
276           u_int8_t  me_hardware_id[4];
277           u_int8_t  me_firmware_id[4];
278           u_int32_t me_res1;
279           u_int8_t  me_configured_channels;
280           u_int8_t  me_actual_channels;
281           u_int8_t  me_max_targets;
282           u_int8_t  me_max_tags;
283           u_int8_t  me_max_sys_drives;
284           u_int8_t  me_max_arms;
285           u_int8_t  me_max_spans;
286           u_int8_t  me_res2;
287           u_int32_t me_res3;
288           u_int32_t me_mem_size;
289           u_int32_t me_cache_size;
290           u_int32_t me_flash_size;
291           u_int32_t me_nvram_size;
292           u_int16_t me_mem_type;
293           u_int16_t me_clock_speed;
294           u_int16_t me_mem_speed;
295           u_int16_t me_hardware_speed;
296           u_int8_t  me_res4[12];
297           u_int16_t me_max_commands;
298           u_int16_t me_max_sg;
299           u_int16_t me_max_dp;
300           u_int16_t me_max_iod;
301           u_int16_t me_max_comb;
302           u_int8_t  me_latency;
303           u_int8_t  me_res5;
304           u_int8_t  me_scsi_timeout;
305           u_int8_t  me_res6;
306           u_int16_t me_min_freelines;
307           u_int8_t  me_res7[8];
308           u_int8_t  me_rate_const;
309           u_int8_t  me_res8[11];
310           u_int16_t me_physblk;
311           u_int16_t me_logblk;
312           u_int16_t me_maxblk;
313           u_int16_t me_blocking_factor;
314           u_int16_t me_cacheline;
315           u_int8_t  me_scsi_cap;
316           u_int8_t  me_res9[5];
317           u_int16_t me_firmware_build;
318           u_int8_t  me_fault_mgmt_type;
319           u_int8_t  me_res10;
320           u_int32_t me_firmware_features;
321           u_int8_t  me_res11[8];
322 } __packed;
323 
324 /* MLX_CMD_ENQSYSDRIVE returns an array of 32 of these. */
325 struct mlx_enq_sys_drive {
326           u_int32_t sd_size;
327           u_int8_t  sd_state;
328           u_int8_t  sd_raidlevel;
329           u_int16_t sd_res1;
330 } __packed;
331 
332 /*
333  * MLX_CMD_LOGOP/MLX_LOGOP_GET
334  *
335  * Bitfields:
336  *
337  * 0-4    el_target SCSI target
338  * 5-7  el_target   SCSI channel
339  * 0-6    el_errorcode        error code
340  * 7-7    el_errorcode        validity (?)
341  * 0-3    el_sense  sense key
342  * 4-4    el_sense  reserved
343  * 5-5    el_sense  ILI
344  * 6-6    el_sense  EOM
345  * 7-7    el_sense  filemark
346  */
347 struct mlx_eventlog_entry {
348           u_int8_t  el_type;
349           u_int8_t  el_length;
350           u_int8_t  el_target;
351           u_int8_t  el_lun;
352           u_int16_t el_seqno;
353           u_int8_t  el_errorcode;
354           u_int8_t  el_segment;
355           u_int8_t  el_sense;
356           u_int8_t  el_information[4];
357           u_int8_t  el_addsense;
358           u_int8_t  el_csi[4];
359           u_int8_t  el_asc;
360           u_int8_t  el_asq;
361           u_int8_t  el_res3[12];
362 } __packed;
363 
364 #define   MLX_LOGOP_GET                 0x00      /* operation codes for MLX_CMD_LOGOP */
365 #define   MLX_LOGMSG_SENSE    0x00      /* log message contents codes */
366 
367 struct mlx_rebuild_stat {
368           u_int32_t rb_drive;
369           u_int32_t rb_size;
370           u_int32_t rb_remaining;
371 } __packed;
372 
373 struct mlx_config {
374           u_int16_t cf_flags1;
375 #define   MLX_CF2_ACTV_NEG    0x0002
376 #define   MLX_CF2_NORSTRTRY   0x0080
377 #define   MLX_CF2_STRGWRK               0x0100
378 #define   MLX_CF2_HPSUPP                0x0200
379 #define   MLX_CF2_NODISCN               0x0400
380 #define   MLX_CF2_ARM                   0x2000
381 #define   MLX_CF2_OFM                   0x8000
382 #define   MLX_CF2_AEMI                  (MLX_CF2_ARM | MLX_CF2_OFM)
383           u_int8_t  cf_oemid;
384           u_int8_t  cf_oem_model;
385           u_int8_t  cf_physical_sector;
386           u_int8_t  cf_logical_sector;
387           u_int8_t  cf_blockfactor;
388           u_int8_t  cf_flags2;
389 #define   MLX_CF2_READAH                0x01
390 #define   MLX_CF2_BIOSDLY               0x02
391 #define   MLX_CF2_REASS1S               0x10
392 #define   MLX_CF2_FUAENABL    0x40
393 #define   MLX_CF2_R5ALLS                0x80
394           u_int8_t  cf_rcrate;
395           u_int8_t  cf_res1;
396           u_int8_t  cf_blocks_per_cache_line;
397           u_int8_t  cf_blocks_per_stripe;
398           u_int8_t  cf_scsi_param_0;
399           u_int8_t  cf_scsi_param_1;
400           u_int8_t  cf_scsi_param_2;
401           u_int8_t  cf_scsi_param_3;
402           u_int8_t  cf_scsi_param_4;
403           u_int8_t  cf_scsi_param_5;
404           u_int8_t  cf_scsi_initiator_id;
405           u_int8_t  cf_res2;
406           u_int8_t  cf_startup_mode;
407           u_int8_t  cf_simultaneous_spinup_devices;
408           u_int8_t  cf_delay_between_spinups;
409           u_int8_t  cf_res3;
410           u_int16_t cf_checksum;
411 } __packed;
412 
413 struct mlx_config2 {
414           struct mlx_config cf2_cf;
415           u_int8_t  cf2_reserved0[26];
416           u_int8_t  cf2_flags;
417 #define   MLX_CF2_BIOS_DIS    0x01
418 #define   MLX_CF2_CDROM_DIS   0x02
419 #define   MLX_CF2_GEOM_255    0x20
420           u_int8_t  cf2_reserved1[9];
421           u_int16_t cf2_checksum;
422 } __packed;
423 
424 struct mlx_sys_drv_span {
425           u_int32_t sp_start_lba;
426           u_int32_t sp_nblks;
427           u_int8_t  sp_arm[8];
428 } __packed;
429 
430 struct mlx_sys_drv {
431           u_int8_t  sd_status;
432           u_int8_t  sd_ext_status;
433           u_int8_t  sd_mod1;
434           u_int8_t  sd_mod2;
435           u_int8_t  sd_raidlevel;
436 #define   MLX_SYS_DRV_WRITEBACK         (1<<7)
437 #define   MLX_SYS_DRV_RAID0   0
438 #define   MLX_SYS_DRV_RAID1   1
439 #define   MLX_SYS_DRV_RAID3   3
440 #define   MLX_SYS_DRV_RAID5   5
441 #define   MLX_SYS_DRV_RAID6   6
442 #define   MLX_SYS_DRV_JBOD    7
443           u_int8_t  sd_valid_arms;
444           u_int8_t  sd_valid_spans;
445           u_int8_t  sd_init_state;
446 #define   MLX_SYS_DRV_INITTED 0x81;
447           struct    mlx_sys_drv_span sd_span[4];
448 } __packed;
449 
450 struct mlx_phys_drv {
451           u_int8_t  pd_flags1;
452 #define   MLX_PHYS_DRV_PRESENT          0x01
453           u_int8_t  pd_flags2;
454 #define   MLX_PHYS_DRV_OTHER  0x00
455 #define   MLX_PHYS_DRV_DISK   0x01
456 #define   MLX_PHYS_DRV_SEQUENTIAL       0x02
457 #define   MLX_PHYS_DRV_CDROM  0x03
458 #define   MLX_PHYS_DRV_FAST20 0x08
459 #define   MLX_PHYS_DRV_SYNC   0x10
460 #define   MLX_PHYS_DRV_FAST   0x20
461 #define   MLX_PHYS_DRV_WIDE   0x40
462 #define   MLX_PHYS_DRV_TAG    0x80
463           u_int8_t  pd_status;
464 #define   MLX_PHYS_DRV_DEAD   0x00
465 #define   MLX_PHYS_DRV_WRONLY 0x02
466 #define   MLX_PHYS_DRV_ONLINE 0x03
467 #define   MLX_PHYS_DRV_STANDBY          0x10
468           u_int8_t  pd_res1;
469           u_int8_t  pd_period;
470           u_int8_t  pd_offset;
471           u_int32_t pd_config_size;
472 } __packed;
473 
474 struct mlx_core_cfg {
475           u_int8_t  cc_num_sys_drives;
476           u_int8_t  cc_res1[3];
477           struct    mlx_sys_drv cc_sys_drives[32];
478           struct    mlx_phys_drv cc_phys_drives[5 * 16];
479 } __packed;
480 
481 /*
482  * Bitfields:
483  *
484  * 0-3    dcdb_target         SCSI target
485  * 4-7    dcdb_target         SCSI channel
486  * 0-3    dcdb_length         CDB length
487  * 4-7    dcdb_length         high 4 bits of `datasize'
488  */
489 struct mlx_dcdb {
490           u_int8_t  dcdb_target;
491           u_int8_t  dcdb_flags;
492 #define   MLX_DCDB_NO_DATA    0x00
493 #define   MLX_DCDB_DATA_IN    0x01
494 #define   MLX_DCDB_DATA_OUT   0x02
495 #define   MLX_DCDB_EARLY_STATUS         0x04
496 #define   MLX_DCDB_TIMEOUT_10S          0x10      /* This lot is wrong? [ad] */
497 #define   MLX_DCDB_TIMEOUT_60S          0x20
498 #define   MLX_DCDB_TIMEOUT_20M          0x30
499 #define   MLX_DCDB_TIMEOUT_24H          0x40
500 #define   MLX_DCDB_NO_AUTO_SENSE        0x40      /* XXX ?? */
501 #define   MLX_DCDB_DISCONNECT 0x80
502           u_int16_t dcdb_datasize;
503           u_int32_t dcdb_physaddr;
504           u_int8_t  dcdb_length;
505           u_int8_t  dcdb_sense_length;
506           u_int8_t  dcdb_cdb[12];
507           u_int8_t  dcdb_sense[64];
508           u_int8_t  dcdb_status;
509           u_int8_t  res1;
510 } __packed;
511 
512 struct mlx_bbtable_entry {
513           u_int32_t bbt_block_number;
514           u_int8_t  bbt_extent;
515           u_int8_t  bbt_res1;
516           u_int8_t  bbt_entry_type;
517           u_int8_t  bbt_system_drive;   /* high 3 bits reserved */
518 } __packed;
519 
520 #endif    /* !_IC_MLXREG_H_ */
521