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