ida_cmd.h 6.8 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349
/*
 *    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 */