/* * Disk Array driver for Compaq SMART2 Controllers * Copyright 1998 Compaq Computer Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or * NON INFRINGEMENT. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Questions/Comments/Bugfixes to iss_storagedev@hp.com * */ #ifndef ARRAYCMD_H #define ARRAYCMD_H #include #if 0 #include #endif /* for the Smart Array 42XX cards */ #define S42XX_REQUEST_PORT_OFFSET 0x40 #define S42XX_REPLY_INTR_MASK_OFFSET 0x34 #define S42XX_REPLY_PORT_OFFSET 0x44 #define S42XX_INTR_STATUS 0x30 #define S42XX_INTR_OFF 0x08 #define S42XX_INTR_PENDING 0x08 #define COMMAND_FIFO 0x04 #define COMMAND_COMPLETE_FIFO 0x08 #define INTR_MASK 0x0C #define INTR_STATUS 0x10 #define INTR_PENDING 0x14 #define FIFO_NOT_EMPTY 0x01 #define FIFO_NOT_FULL 0x02 #define BIG_PROBLEM 0x40 #define LOG_NOT_CONF 2 #pragma pack(1) typedef struct { __u32 size; __u32 addr; } sg_t; #define RCODE_NONFATAL 0x02 #define RCODE_FATAL 0x04 #define RCODE_INVREQ 0x10 typedef struct { __u16 next; __u8 cmd; __u8 rcode; __u32 blk; __u16 blk_cnt; __u8 sg_cnt; __u8 reserved; } rhdr_t; #define SG_MAX 32 typedef struct { rhdr_t hdr; sg_t sg[SG_MAX]; __u32 bp; } rblk_t; typedef struct { __u8 unit; __u8 prio; __u16 size; } chdr_t; #define CMD_RWREQ 0x00 #define CMD_IOCTL_PEND 0x01 #define CMD_IOCTL_DONE 0x02 typedef struct cmdlist { chdr_t hdr; rblk_t req; __u32 size; int retry_cnt; __u32 busaddr; int ctlr; struct cmdlist *prev; struct cmdlist *next; struct request *rq; int type; } cmdlist_t; #define ID_CTLR 0x11 typedef struct { __u8 nr_drvs; __u32 cfg_sig; __u8 firm_rev[4]; __u8 rom_rev[4]; __u8 hw_rev; __u32 bb_rev; __u32 drv_present_map; __u32 ext_drv_map; __u32 board_id; __u8 cfg_error; __u32 non_disk_bits; __u8 bad_ram_addr; __u8 cpu_rev; __u8 pdpi_rev; __u8 epic_rev; __u8 wcxc_rev; __u8 marketing_rev; __u8 ctlr_flags; __u8 host_flags; __u8 expand_dis; __u8 scsi_chips; __u32 max_req_blocks; __u32 ctlr_clock; __u8 drvs_per_bus; __u16 big_drv_present_map[8]; __u16 big_ext_drv_map[8]; __u16 big_non_disk_map[8]; __u16 task_flags; __u8 icl_bus; __u8 red_modes; __u8 cur_red_mode; __u8 red_ctlr_stat; __u8 red_fail_reason; __u8 reserved[403]; } id_ctlr_t; typedef struct { __u16 cyl; __u8 heads; __u8 xsig; __u8 psectors; __u16 wpre; __u8 maxecc; __u8 drv_ctrl; __u16 pcyls; __u8 pheads; __u16 landz; __u8 sect_per_track; __u8 cksum; } drv_param_t; #define ID_LOG_DRV 0x10 typedef struct { __u16 blk_size; __u32 nr_blks; drv_param_t drv; __u8 fault_tol; __u8 reserved; __u8 bios_disable; } id_log_drv_t; #define ID_LOG_DRV_EXT 0x18 typedef struct { __u32 log_drv_id; __u8 log_drv_label[64]; __u8 reserved[418]; } id_log_drv_ext_t; #define SENSE_LOG_DRV_STAT 0x12 typedef struct { __u8 status; __u32 fail_map; __u16 read_err[32]; __u16 write_err[32]; __u8 drv_err_data[256]; __u8 drq_timeout[32]; __u32 blks_to_recover; __u8 drv_recovering; __u16 remap_cnt[32]; __u32 replace_drv_map; __u32 act_spare_map; __u8 spare_stat; __u8 spare_repl_map[32]; __u32 repl_ok_map; __u8 media_exch; __u8 cache_fail; __u8 expn_fail; __u8 unit_flags; __u16 big_fail_map[8]; __u16 big_remap_map[128]; __u16 big_repl_map[8]; __u16 big_act_spare_map[8]; __u8 big_spar_repl_map[128]; __u16 big_repl_ok_map[8]; __u8 big_drv_rebuild; __u8 reserved[36]; } sense_log_drv_stat_t; #define START_RECOVER 0x13 #define ID_PHYS_DRV 0x15 typedef struct { __u8 scsi_bus; __u8 scsi_id; __u16 blk_size; __u32 nr_blks; __u32 rsvd_blks; __u8 drv_model[40]; __u8 drv_sn[40]; __u8 drv_fw[8]; __u8 scsi_iq_bits; __u8 compaq_drv_stmp; __u8 last_fail; __u8 phys_drv_flags; __u8 phys_drv_flags1; __u8 scsi_lun; __u8 phys_drv_flags2; __u8 reserved; __u32 spi_speed_rules; __u8 phys_connector[2]; __u8 phys_box_on_bus; __u8 phys_bay_in_box; } id_phys_drv_t; #define BLINK_DRV_LEDS 0x16 typedef struct { __u32 blink_duration; __u32 reserved; __u8 blink[256]; __u8 reserved1[248]; } blink_drv_leds_t; #define SENSE_BLINK_LEDS 0x17 typedef struct { __u32 blink_duration; __u32 btime_elap; __u8 blink[256]; __u8 reserved1[248]; } sense_blink_leds_t; #define IDA_READ 0x20 #define IDA_WRITE 0x30 #define IDA_WRITE_MEDIA 0x31 #define RESET_TO_DIAG 0x40 #define DIAG_PASS_THRU 0x41 #define SENSE_CONFIG 0x50 #define SET_CONFIG 0x51 typedef struct { __u32 cfg_sig; __u16 compat_port; __u8 data_dist_mode; __u8 surf_an_ctrl; __u16 ctlr_phys_drv; __u16 log_unit_phys_drv; __u16 fault_tol_mode; __u8 phys_drv_param[16]; drv_param_t drv; __u32 drv_asgn_map; __u16 dist_factor; __u32 spare_asgn_map; __u8 reserved[6]; __u16 os; __u8 ctlr_order; __u8 extra_info; __u32 data_offs; __u8 parity_backedout_write_drvs; __u8 parity_dist_mode; __u8 parity_shift_fact; __u8 bios_disable_flag; __u32 blks_on_vol; __u32 blks_per_drv; __u8 scratch[16]; __u16 big_drv_map[8]; __u16 big_spare_map[8]; __u8 ss_source_vol; __u8 mix_drv_cap_range; struct { __u16 big_drv_map[8]; __u32 blks_per_drv; __u16 fault_tol_mode; __u16 dist_factor; } MDC_range[4]; __u8 reserved1[248]; } config_t; #define BYPASS_VOL_STATE 0x52 #define SS_CREATE_VOL 0x53 #define CHANGE_CONFIG 0x54 #define SENSE_ORIG_CONF 0x55 #define REORDER_LOG_DRV 0x56 typedef struct { __u8 old_units[32]; } reorder_log_drv_t; #define LABEL_LOG_DRV 0x57 typedef struct { __u8 log_drv_label[64]; } label_log_drv_t; #define SS_TO_VOL 0x58 #define SET_SURF_DELAY 0x60 typedef struct { __u16 delay; __u8 reserved[510]; } surf_delay_t; #define SET_OVERHEAT_DELAY 0x61 typedef struct { __u16 delay; } overhead_delay_t; #define SET_MP_DELAY typedef struct { __u16 delay; __u8 reserved[510]; } mp_delay_t; #define PASSTHRU_A 0x91 typedef struct { __u8 target; __u8 bus; __u8 lun; __u32 timeout; __u32 flags; __u8 status; __u8 error; __u8 cdb_len; __u8 sense_error; __u8 sense_key; __u32 sense_info; __u8 sense_code; __u8 sense_qual; __u32 residual; __u8 reserved[4]; __u8 cdb[12]; } scsi_param_t; #define RESUME_BACKGROUND_ACTIVITY 0x99 #define SENSE_CONTROLLER_PERFORMANCE 0xa8 #define FLUSH_CACHE 0xc2 #define COLLECT_BUFFER 0xd2 #define READ_FLASH_ROM 0xf6 #define WRITE_FLASH_ROM 0xf7 #pragma pack() #endif /* ARRAYCMD_H */