forked from Minki/linux
350 lines
6.8 KiB
C
350 lines
6.8 KiB
C
|
/*
|
||
|
* 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 */
|