You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
349 lines
6.8 KiB
349 lines
6.8 KiB
/* |
|
* 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 <asm/types.h> |
|
#if 0 |
|
#include <linux/blkdev.h> |
|
#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 */
|
|
|