]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/ida/idareg.h
Update our copy of DTS from the ones from Linux 4.14
[FreeBSD/FreeBSD.git] / sys / dev / ida / idareg.h
1 /*-
2  * Copyright (c) 1999,2000 Jonathan Lemon
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  *
26  * $FreeBSD$
27  */
28
29 /*
30  * #defines and software structures for the Compaq RAID card
31  */
32
33 /*
34  * board register offsets for SMART-2 controllers
35  */
36 #define R_CMD_FIFO      0x04
37 #define R_DONE_FIFO     0x08
38 #define R_INT_MASK      0x0C
39 #define R_STATUS        0x10
40 #define R_INT_PENDING   0x14
41
42 /*
43  * interrupt mask values for SMART series
44  */
45 #define INT_DISABLE     0x00
46 #define INT_ENABLE      0x01
47
48 /*
49  * board offsets for the 42xx series
50  */
51 #define R_42XX_STATUS   0x30
52 #define R_42XX_INT_MASK 0x34
53 #define R_42XX_REQUEST  0x40
54 #define R_42XX_REPLY    0x44
55
56 /*
57  * interrupt values for 42xx series
58  */
59 #define INT_ENABLE_42XX                 0x00
60 #define INT_DISABLE_42XX                0x08
61 #define STATUS_42XX_INT_PENDING         0x08
62
63 /*
64  * return status codes
65  */
66 #define SOFT_ERROR      0x02    /* Non-fatal error. */
67 #define HARD_ERROR      0x04    /* Fatal error. */
68 #define INVALID_ERROR   0x10    /* Invalid Request Block. */
69 #define CMD_REJECTED    0x14
70
71 /*
72  * command types
73  */
74 #define CMD_GET_LOG_DRV_INFO    0x10    /* Identify controller */
75 #define CMD_GET_CTRL_INFO       0x11    /* Identify logical driver */
76 #define CMD_SENSE_DRV_STATUS    0x12    /* Sense logical drive status */
77 #define CMD_START_RECOVERY      0x13    /* Start recover */
78 #define CMD_GET_PHYS_DRV_INFO   0x15    /* Identify physical drive */
79 #define CMD_BLINK_DRV_LEDS      0x16    /* Blink drive tray LEDs */
80 #define CMD_SENSE_DRV_LEDS      0x17    /* Sense Blinking drive tray LEDs */
81 #define CMD_GET_LOG_DRV_EXT     0x18    /* Identify logical drive, Extended */
82 #define CMD_READ                0x20    /* Read */
83 #define CMD_WRITE               0x30    /* Write */
84 #define CMD_WRITE_MEDIA         0x31    /* Write media */
85 #define CMD_RESET_CTRL          0x40    /* Reset controller */
86 #define CMD_DIAG_PASS_THRU      0x41    /* ??? */
87 #define CMD_GET_CONFIG          0x50    /* Sense configuration */
88 #define CMD_SET_CONFIG          0x51    /* Set configuration */
89
90 #define CMD_BYPASS_VOL_STATE    0x52    /* ??? */
91 #define CMD_SS_CREATE_VOL       0x53    /* ??? */
92 #define CMD_CHANGE_CONFIG       0x54    /* ??? */
93 #define CMD_SENSE_ORIG_CONF     0x55    /* ??? */
94 #define CMD_REORDER_LOG_DRV     0x56    /* ??? */
95
96 #define CMD_LABEL_LOG_DRV       0x57    /* Label logical drive */
97 #define CMD_SS_TO_VOL           0x58    /* ??? */
98 #define CMD_SET_SURFACE_DELAY   0x60    /* Set surface delay */
99 #define CMD_SET_OVERHEAT_DELAY  0x61    /* ??? */
100 #define CMD_SENSE_BUS_PARAMS    0x65    /* Sense bus parameters */
101 #define CMD_SENSE_SUBSYS_INFO   0x66    /* Sense Subsystem Information */
102 #define CMD_SENSE_SURFACE_ATS   0x70    /* Sense surface analysis task status */
103 #define CMD_PASSTHROUGH         0x90    /* Pass-through operation */
104 #define CMD_PASSTHROUGH_A       0x91    /* ??? */
105 #define CMD_RESET_SCSI_DEV      0x94    /* Reset SCSI device */
106 #define CMD_PAUSE_BG_ACT        0x98    /* Pause Background Activity */
107 #define CMD_RESUME_BG_ACT       0x99    /* Resume Background Activity */
108 #define CMD_START_FIRMWARE      0x99    /* for integrated RAID */
109 #define CMD_SENSE_DRV_ERR_LOG   0xa6    /* Sense drive error log */
110 #define CMD_START_CPM           0xa7    /* Start controller performance monitoring */
111 #define CMD_SENSE_CP            0xa8    /* Sense controller performance */
112 #define CMD_STOP_CPM            0xa9    /* Stop controller performance monitoring */
113 #define CMD_FLUSH_CACHE         0xc2    /* Flush/disable write cache */
114 #define CMD_COLLECT_BUFFER      0xd2    /* ??? */
115 #define CMD_ACCEPT_MEDIA_EXCH   0xe0    /* Accept Media Exchange */     
116
117 #define CMD_FLASH_READ          0xf6    /* Read FLASH */
118 #define CMD_FLASH_WRITE         0xf7    /* Write FLASH */
119
120 /* logical drive parameter table */
121 struct ida_drive_param {
122         u_int16_t       ncylinders;
123         u_int8_t        nheads;
124         u_int8_t        signature;
125         u_int8_t        psectors;
126         u_int16_t       wprecomp;
127         u_int8_t        max_acc;
128         u_int8_t        control;
129         u_int16_t       pcylinders;
130         u_int8_t        ptracks;
131         u_int16_t       landing_zone;
132         u_int8_t        nsectors;
133         u_int8_t        checksum;
134 } __packed;
135
136 #define IDA_RAID0       0       /* No fault tolerance. */
137 #define IDA_RAID4       1       /* Data Guard */
138 #define IDA_RAID1       2       /* Mirroring */
139 #define IDA_RAID5       3       /* Distributed Data Guard */
140
141 /*
142  * CMD_GET_LOG_DRV_INFO (0x10)
143  * Identify Logical Drive
144  */
145 struct ida_drive_info {
146         u_int16_t       secsize;        /* block size in bytes */
147         u_int32_t       secperunit;     /* blocks available */
148         struct ida_drive_param  dp;     /* logical drive parameter table */
149         u_int8_t        mirror;         /* fault tolerance */
150         u_int8_t        reserved;
151         u_int8_t        bios_disable;
152 } __packed;
153
154 /*
155  * CMD_GET_LOG_DRV_EXT (0x18)
156  * Identify Logical Drive, Extended
157  */
158 struct ida_drive_info_ext {
159         u_int16_t       secsize;        /* block size in bytes */
160         u_int32_t       secperunit;     /* blocks available */
161         struct ida_drive_param  dp;     /* logical drive parameter table */
162         u_int8_t        mirror;         /* fault tolerance */
163         u_int8_t        reserved;
164         u_int8_t        bios_disable;
165         u_int32_t       ld_id;          /* Logical drive identifier */
166         u_int8_t        ld_label[64];   /* Logical drive label */
167 } __packed;
168
169 /*
170  * CMD_GET_CTRL_INFO (0x11)
171  * Identify Controller
172  */
173 struct ida_controller_info {
174         u_int8_t        num_drvs;       /* Number of configured logical drives */
175         u_int32_t       signature;      /* Configuration signature */
176         u_int8_t        firm_rev[4];    /* ASCII firmware revision */
177         u_int8_t        rom_rev[4];     /* ROM firmware revision */
178         u_int8_t        hw_rev;         /* Revision level of the hardware */
179         u_int32_t       bb_rev;
180         u_int32_t       dp_map;         /* Drive present bit map */
181         u_int32_t       ed_map;         /* External drive bit map */
182         u_int32_t       board_id;
183         u_int8_t        cfg_error;
184         u_int32_t       nd_map;         /* Non-disk map */
185         u_int8_t        bad_ram_addr;
186         u_int8_t        cpu_rev;
187         u_int8_t        pdpi_rev;
188         u_int8_t        epic_rev;
189         u_int8_t        wcxc_rev;
190         u_int8_t        mkt_rev;        /* Marketing revision */
191         u_int8_t        cflag;          /* Controller flags */
192 #define IDA_CI_CFLAG_7DPB       (1<<3)
193 #define IDA_CI_CFLAG_BIGMAP     (1<<7)
194         u_int8_t        hflag;
195         u_int8_t        expand_dis;
196         u_int8_t        scsi_cc;        /* SCSI chip count */
197         u_int32_t       max_req_blocks;
198         u_int32_t       cclock;         /* Controller Clock */
199         u_int8_t        dp_scsi;        /* Drives per SCSI bus */
200         u_int16_t       big_dp_map[8];  /* Big drive present bit map */
201         u_int16_t       big_ed_map[8];  /* Big external drive bit map */
202         u_int16_t       big_nd_map[8];  /* Big non-disk map */
203         u_int16_t       task_flags;
204         u_int8_t        icl_bus;
205         u_int8_t        red_modes;
206         u_int8_t        cur_red_mode;
207         u_int8_t        red_ctlr_stat;
208         u_int8_t        red_fail_reason;
209         u_int8_t        reserved[403];
210 } __packed;
211
212 /*
213  * CMD_SENSE_DRV_STATUS (0x12)
214  * Sense logical drive status
215  */
216 struct ida_drive_status {
217         u_int8_t        status;
218         u_int32_t       failure_map;
219         u_int16_t       read_err[32];
220         u_int16_t       write_error[32];
221         u_int8_t        reserved0[288];
222         u_int32_t       secrecover;
223         u_int8_t        rebuilding;
224         u_int16_t       remap_cnt[32];
225         u_int32_t       repl_map;
226         u_int32_t       spare_map;
227         u_int8_t        spare_status;
228         u_int8_t        spare_repl_map[32];
229         u_int32_t       repl_ok_map;
230         u_int8_t        media_exchange;
231         u_int8_t        cache_failure;
232         u_int8_t        expand_failure;
233         u_int8_t        unit_flags;
234         u_int16_t       big_failure_map[8];
235         u_int16_t       big_remap_cnt[128];
236         u_int16_t       big_repl_map[8];
237         u_int16_t       big_act_spare_map[8];
238         u_int8_t        big_spare_repl_map[128];
239         u_int16_t       big_repl_ok_map[8];
240         u_int8_t        big_rebuilding;
241         u_int8_t        reserved1[36];
242 } __packed;
243
244 /*
245  * CMD_GET_PHYS_DRV_INFO (0x15)
246  * Identify Physical Drive
247  */
248 struct ida_phys_drv_info {
249         u_int8_t        scsi_bus;       /* SCSI Bus */
250         u_int8_t        scsi_id;        /* SCSI ID */
251         u_int16_t       blksize;        /* block size in bytes */
252         u_int32_t       blkcount;       /* total blocks */
253         u_int32_t       blkreserved;    /* reserved blocks */
254         u_int8_t        drv_model[40];  /* drive model */
255         u_int8_t        drv_serial[40]; /* drive serial number */
256         u_int8_t        drv_fwrev[8];   /* drive firmware revision */
257         u_int8_t        scsi_inq;       /* SCSI inquiry bits */
258         u_int8_t        cpq_drv_stmp;
259         u_int8_t        last_fail;
260         u_int8_t        pd_flags;       /* physical drive flags */
261 #define PDF_DISK_PRESENT        0x01
262 #define PDF_NONDISK_PRESENT     0x02
263 #define PDF_WIDE_ENABLED        0x04
264 #define PDF_SYNC                0x08
265 #define PDF_NARROW_TRAY         0x10
266 #define PDF_WIDEFAIL            0x20
267 #define PDF_ULTRA               0x40
268 #define PDF_ULTRA2              0x80
269         u_int8_t        mpd_flags;      /* more physical drive flags */
270 #define MPDF_SMART_SUPPORT      0x01    /* S.M.A.R.T supported */
271 #define MPDF_SMART_ERRORS       0x02    /* S.M.A.R.T errors recorded */
272 #define MPDF_SMART_ENABLED      0x04    /* S.M.A.R.T predictive failure is enabled */
273 #define MPDF_SMART_ERR_RESET    0x08    /* S.M.A.R.T errors recorded since last reset */
274 #define MPDF_DRIVE_EXTERNAL     0x10    /* Connected to external connector. */
275 #define MPDF_DRIVE_CONF_LVOL    0x20    /* Configured as part of a logical volume */
276 #define MPDF_DRIVE_CONF_SPARE   0x40    /* Configured as a spare */
277 #define MPDF_DRIVE_WCE          0x80    /* Drive WCE set on spinup */
278         u_int8_t        scsi_lun;
279         u_int8_t        ympd_flags;     /* yet more physical drive flags */
280 #define YMPDF_DRIVE_WCE_SET     0x40    /* WCE currently set */
281 #define YMPDF_DRIVE_WCE_CHNG    0x80    /* WCE changeable */
282         u_int8_t        reserved;
283         u_int32_t       spi_speed_rules;
284         u_int8_t        phys_con[2];    /* Physical Connector */
285         u_int8_t        phys_box;       /* Physical Box on Bus */
286         u_int8_t        phys_bay;       /* Physical Bay in Box */
287 } __packed;
288
289 /*
290  * CMD_BLINK_DRV_LEDS (0x16)
291  * Blink Drive Tray LEDs
292  *
293  * CMD_SENSE_DRV_LEDS (0x17)
294  * Sense Blinking Drive Tray LEDs
295  */
296 struct ida_blink_drv_leds {
297         u_int32_t       bd;             /* Blink duration (in 10ths sec) */
298         u_int32_t       bte;            /* Blink time elapsed (sense only) */
299         u_int8_t        bse[256];       /* Blink/seek enable */
300         u_int8_t        reserved1[248];
301 } __packed;
302
303 /*
304  * CMD_LABEL_LOG_DRV (0x57)
305  * Label Logical Drive
306  */
307 struct ida_label_logical {
308         u_int32_t       ld_id;          /* Logical drive identifier */
309         u_int8_t        ld_label[64];   /* Logical drive label */
310 } __packed;