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 arrays@compaq.com 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 86 typedef struct cmdlist { 87 chdr_t hdr; 88 rblk_t req; 89 __u32 size; 90 int retry_cnt; 91 __u32 busaddr; 92 int ctlr; 93 struct cmdlist *prev; 94 struct cmdlist *next; 95 struct request *rq; 96 struct completion *waiting; 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 SENSE_SURF_STATUS 0x70 322 323 #define PASSTHRU_A 0x91 324 typedef struct { 325 __u8 target; 326 __u8 bus; 327 __u8 lun; 328 __u32 timeout; 329 __u32 flags; 330 __u8 status; 331 __u8 error; 332 __u8 cdb_len; 333 __u8 sense_error; 334 __u8 sense_key; 335 __u32 sense_info; 336 __u8 sense_code; 337 __u8 sense_qual; 338 __u32 residual; 339 __u8 reserved[4]; 340 __u8 cdb[12]; 341 } scsi_param_t; 342 343 #define RESUME_BACKGROUND_ACTIVITY 0x99 344 #define SENSE_CONTROLLER_PERFORMANCE 0xa8 345 #define FLUSH_CACHE 0xc2 346 #define COLLECT_BUFFER 0xd2 347 #define READ_FLASH_ROM 0xf6 348 #define WRITE_FLASH_ROM 0xf7 349 #pragma pack() 350 351 #endif /* ARRAYCMD_H */ 352