xref: /openbmc/linux/drivers/scsi/megaraid.h (revision 87c2ce3b)
1 #ifndef __MEGARAID_H__
2 #define __MEGARAID_H__
3 
4 #include <linux/spinlock.h>
5 
6 
7 #define MEGARAID_VERSION	\
8 	"v2.00.3 (Release Date: Wed Feb 19 08:51:30 EST 2003)\n"
9 
10 /*
11  * Driver features - change the values to enable or disable features in the
12  * driver.
13  */
14 
15 /*
16  * Comand coalescing - This feature allows the driver to be able to combine
17  * two or more commands and issue as one command in order to boost I/O
18  * performance. Useful if the nature of the I/O is sequential. It is not very
19  * useful for random natured I/Os.
20  */
21 #define MEGA_HAVE_COALESCING	0
22 
23 /*
24  * Clustering support - Set this flag if you are planning to use the
25  * clustering services provided by the megaraid controllers and planning to
26  * setup a cluster
27  */
28 #define MEGA_HAVE_CLUSTERING	1
29 
30 /*
31  * Driver statistics - Set this flag if you are interested in statics about
32  * number of I/O completed on each logical drive and how many interrupts
33  * generated. If enabled, this information is available through /proc
34  * interface and through the private ioctl. Setting this flag has a
35  * performance penalty.
36  */
37 #define MEGA_HAVE_STATS		0
38 
39 /*
40  * Enhanced /proc interface - This feature will allow you to have a more
41  * detailed /proc interface for megaraid driver. E.g., a real time update of
42  * the status of the logical drives, battery status, physical drives etc.
43  */
44 #define MEGA_HAVE_ENH_PROC	1
45 
46 #define MAX_DEV_TYPE	32
47 
48 #ifndef PCI_VENDOR_ID_LSI_LOGIC
49 #define PCI_VENDOR_ID_LSI_LOGIC		0x1000
50 #endif
51 
52 #ifndef PCI_VENDOR_ID_AMI
53 #define PCI_VENDOR_ID_AMI		0x101E
54 #endif
55 
56 #ifndef PCI_VENDOR_ID_DELL
57 #define PCI_VENDOR_ID_DELL		0x1028
58 #endif
59 
60 #ifndef PCI_VENDOR_ID_INTEL
61 #define PCI_VENDOR_ID_INTEL		0x8086
62 #endif
63 
64 #ifndef PCI_DEVICE_ID_AMI_MEGARAID
65 #define PCI_DEVICE_ID_AMI_MEGARAID	0x9010
66 #endif
67 
68 #ifndef PCI_DEVICE_ID_AMI_MEGARAID2
69 #define PCI_DEVICE_ID_AMI_MEGARAID2	0x9060
70 #endif
71 
72 #ifndef PCI_DEVICE_ID_AMI_MEGARAID3
73 #define PCI_DEVICE_ID_AMI_MEGARAID3	0x1960
74 #endif
75 
76 #define PCI_DEVICE_ID_DISCOVERY		0x000E
77 #define PCI_DEVICE_ID_PERC4_DI		0x000F
78 #define PCI_DEVICE_ID_PERC4_QC_VERDE	0x0407
79 
80 /* Sub-System Vendor IDs */
81 #define	AMI_SUBSYS_VID			0x101E
82 #define DELL_SUBSYS_VID			0x1028
83 #define	HP_SUBSYS_VID			0x103C
84 #define LSI_SUBSYS_VID			0x1000
85 #define INTEL_SUBSYS_VID		0x8086
86 
87 #define HBA_SIGNATURE	      		0x3344
88 #define HBA_SIGNATURE_471	  	0xCCCC
89 #define HBA_SIGNATURE_64BIT		0x0299
90 
91 #define MBOX_BUSY_WAIT			10	/* wait for up to 10 usec for
92 						   mailbox to be free */
93 #define DEFAULT_INITIATOR_ID	7
94 
95 #define MAX_SGLIST		64	/* max supported in f/w */
96 #define MIN_SGLIST		26	/* guaranteed to support these many */
97 #define MAX_COMMANDS		126
98 #define CMDID_INT_CMDS		MAX_COMMANDS+1	/* make sure CMDID_INT_CMDS
99 					 	is less than max commands
100 						supported by any f/w */
101 
102 #define MAX_CDB_LEN	     	10
103 #define MAX_EXT_CDB_LEN		16	/* we support cdb length up to 16 */
104 
105 #define DEF_CMD_PER_LUN		63
106 #define MAX_CMD_PER_LUN		MAX_COMMANDS
107 #define MAX_FIRMWARE_STATUS	46
108 #define MAX_XFER_PER_CMD	(64*1024)
109 #define MAX_SECTORS_PER_IO	128
110 
111 #define MAX_LOGICAL_DRIVES_40LD		40
112 #define FC_MAX_PHYSICAL_DEVICES		256
113 #define MAX_LOGICAL_DRIVES_8LD		8
114 #define MAX_CHANNELS			5
115 #define MAX_TARGET			15
116 #define MAX_PHYSICAL_DRIVES		MAX_CHANNELS*MAX_TARGET
117 #define MAX_ROW_SIZE_40LD		32
118 #define MAX_ROW_SIZE_8LD		8
119 #define MAX_SPAN_DEPTH			8
120 
121 #define NVIRT_CHAN		4	/* # of virtual channels to represent
122 					   up to 60 logical drives */
123 struct mbox_out {
124 	/* 0x0 */ u8 cmd;
125 	/* 0x1 */ u8 cmdid;
126 	/* 0x2 */ u16 numsectors;
127 	/* 0x4 */ u32 lba;
128 	/* 0x8 */ u32 xferaddr;
129 	/* 0xC */ u8 logdrv;
130 	/* 0xD */ u8 numsgelements;
131 	/* 0xE */ u8 resvd;
132 } __attribute__ ((packed));
133 
134 struct mbox_in {
135 	/* 0xF */ volatile u8 busy;
136 	/* 0x10 */ volatile u8 numstatus;
137 	/* 0x11 */ volatile u8 status;
138 	/* 0x12 */ volatile u8 completed[MAX_FIRMWARE_STATUS];
139 	volatile u8 poll;
140 	volatile u8 ack;
141 } __attribute__ ((packed));
142 
143 typedef struct {
144 	struct mbox_out	m_out;
145 	struct mbox_in	m_in;
146 } __attribute__ ((packed)) mbox_t;
147 
148 typedef struct {
149 	u32 xfer_segment_lo;
150 	u32 xfer_segment_hi;
151 	mbox_t mbox;
152 } __attribute__ ((packed)) mbox64_t;
153 
154 
155 /*
156  * Passthru definitions
157  */
158 #define MAX_REQ_SENSE_LEN       0x20
159 
160 typedef struct {
161 	u8 timeout:3;		/* 0=6sec/1=60sec/2=10min/3=3hrs */
162 	u8 ars:1;
163 	u8 reserved:3;
164 	u8 islogical:1;
165 	u8 logdrv;		/* if islogical == 1 */
166 	u8 channel;		/* if islogical == 0 */
167 	u8 target;		/* if islogical == 0 */
168 	u8 queuetag;		/* unused */
169 	u8 queueaction;		/* unused */
170 	u8 cdb[MAX_CDB_LEN];
171 	u8 cdblen;
172 	u8 reqsenselen;
173 	u8 reqsensearea[MAX_REQ_SENSE_LEN];
174 	u8 numsgelements;
175 	u8 scsistatus;
176 	u32 dataxferaddr;
177 	u32 dataxferlen;
178 } __attribute__ ((packed)) mega_passthru;
179 
180 
181 /*
182  * Extended passthru: support CDB > 10 bytes
183  */
184 typedef struct {
185 	u8 timeout:3;		/* 0=6sec/1=60sec/2=10min/3=3hrs */
186 	u8 ars:1;
187 	u8 rsvd1:1;
188 	u8 cd_rom:1;
189 	u8 rsvd2:1;
190 	u8 islogical:1;
191 	u8 logdrv;		/* if islogical == 1 */
192 	u8 channel;		/* if islogical == 0 */
193 	u8 target;		/* if islogical == 0 */
194 	u8 queuetag;		/* unused */
195 	u8 queueaction;		/* unused */
196 	u8 cdblen;
197 	u8 rsvd3;
198 	u8 cdb[MAX_EXT_CDB_LEN];
199 	u8 numsgelements;
200 	u8 status;
201 	u8 reqsenselen;
202 	u8 reqsensearea[MAX_REQ_SENSE_LEN];
203 	u8 rsvd4;
204 	u32 dataxferaddr;
205 	u32 dataxferlen;
206 } __attribute__ ((packed)) mega_ext_passthru;
207 
208 typedef struct {
209 	u64 address;
210 	u32 length;
211 } __attribute__ ((packed)) mega_sgl64;
212 
213 typedef struct {
214 	u32 address;
215 	u32 length;
216 } __attribute__ ((packed)) mega_sglist;
217 
218 
219 /* Queued command data */
220 typedef struct {
221 	int	idx;
222 	u32	state;
223 	struct list_head	list;
224 	u8	raw_mbox[66];
225 	u32	dma_type;
226 	u32	dma_direction;
227 
228 	Scsi_Cmnd	*cmd;
229 	dma_addr_t	dma_h_bulkdata;
230 	dma_addr_t	dma_h_sgdata;
231 
232 	mega_sglist	*sgl;
233 	mega_sgl64	*sgl64;
234 	dma_addr_t	sgl_dma_addr;
235 
236 	mega_passthru		*pthru;
237 	dma_addr_t		pthru_dma_addr;
238 	mega_ext_passthru	*epthru;
239 	dma_addr_t		epthru_dma_addr;
240 } scb_t;
241 
242 /*
243  * Flags to follow the scb as it transitions between various stages
244  */
245 #define SCB_FREE	0x0000	/* on the free list */
246 #define SCB_ACTIVE	0x0001	/* off the free list */
247 #define SCB_PENDQ	0x0002	/* on the pending queue */
248 #define SCB_ISSUED	0x0004	/* issued - owner f/w */
249 #define SCB_ABORT	0x0008	/* Got an abort for this one */
250 #define SCB_RESET	0x0010	/* Got a reset for this one */
251 
252 /*
253  * Utilities declare this strcture size as 1024 bytes. So more fields can
254  * be added in future.
255  */
256 typedef struct {
257 	u32	data_size; /* current size in bytes (not including resvd) */
258 
259 	u32	config_signature;
260 		/* Current value is 0x00282008
261 		 * 0x28=MAX_LOGICAL_DRIVES,
262 		 * 0x20=Number of stripes and
263 		 * 0x08=Number of spans */
264 
265 	u8	fw_version[16];		/* printable ASCI string */
266 	u8	bios_version[16];	/* printable ASCI string */
267 	u8	product_name[80];	/* printable ASCI string */
268 
269 	u8	max_commands;		/* Max. concurrent commands supported */
270 	u8	nchannels;		/* Number of SCSI Channels detected */
271 	u8	fc_loop_present;	/* Number of Fibre Loops detected */
272 	u8	mem_type;		/* EDO, FPM, SDRAM etc */
273 
274 	u32	signature;
275 	u16	dram_size;		/* In terms of MB */
276 	u16	subsysid;
277 
278 	u16	subsysvid;
279 	u8	notify_counters;
280 	u8	pad1k[889];		/* 135 + 889 resvd = 1024 total size */
281 } __attribute__ ((packed)) mega_product_info;
282 
283 struct notify {
284 	u32 global_counter;	/* Any change increments this counter */
285 
286 	u8 param_counter;	/* Indicates any params changed  */
287 	u8 param_id;		/* Param modified - defined below */
288 	u16 param_val;		/* New val of last param modified */
289 
290 	u8 write_config_counter;	/* write config occurred */
291 	u8 write_config_rsvd[3];
292 
293 	u8 ldrv_op_counter;	/* Indicates ldrv op started/completed */
294 	u8 ldrv_opid;		/* ldrv num */
295 	u8 ldrv_opcmd;		/* ldrv operation - defined below */
296 	u8 ldrv_opstatus;	/* status of the operation */
297 
298 	u8 ldrv_state_counter;	/* Indicates change of ldrv state */
299 	u8 ldrv_state_id;		/* ldrv num */
300 	u8 ldrv_state_new;	/* New state */
301 	u8 ldrv_state_old;	/* old state */
302 
303 	u8 pdrv_state_counter;	/* Indicates change of ldrv state */
304 	u8 pdrv_state_id;		/* pdrv id */
305 	u8 pdrv_state_new;	/* New state */
306 	u8 pdrv_state_old;	/* old state */
307 
308 	u8 pdrv_fmt_counter;	/* Indicates pdrv format started/over */
309 	u8 pdrv_fmt_id;		/* pdrv id */
310 	u8 pdrv_fmt_val;		/* format started/over */
311 	u8 pdrv_fmt_rsvd;
312 
313 	u8 targ_xfer_counter;	/* Indicates SCSI-2 Xfer rate change */
314 	u8 targ_xfer_id;	/* pdrv Id  */
315 	u8 targ_xfer_val;		/* new Xfer params of last pdrv */
316 	u8 targ_xfer_rsvd;
317 
318 	u8 fcloop_id_chg_counter;	/* Indicates loopid changed */
319 	u8 fcloopid_pdrvid;		/* pdrv id */
320 	u8 fcloop_id0;			/* loopid on fc loop 0 */
321 	u8 fcloop_id1;			/* loopid on fc loop 1 */
322 
323 	u8 fcloop_state_counter;	/* Indicates loop state changed */
324 	u8 fcloop_state0;		/* state of fc loop 0 */
325 	u8 fcloop_state1;		/* state of fc loop 1 */
326 	u8 fcloop_state_rsvd;
327 } __attribute__ ((packed));
328 
329 #define MAX_NOTIFY_SIZE     0x80
330 #define CUR_NOTIFY_SIZE     sizeof(struct notify)
331 
332 typedef struct {
333 	u32	data_size; /* current size in bytes (not including resvd) */
334 
335 	struct notify notify;
336 
337 	u8	notify_rsvd[MAX_NOTIFY_SIZE - CUR_NOTIFY_SIZE];
338 
339 	u8	rebuild_rate;		/* Rebuild rate (0% - 100%) */
340 	u8	cache_flush_interval;	/* In terms of Seconds */
341 	u8	sense_alert;
342 	u8	drive_insert_count;	/* drive insertion count */
343 
344 	u8	battery_status;
345 	u8	num_ldrv;		/* No. of Log Drives configured */
346 	u8	recon_state[MAX_LOGICAL_DRIVES_40LD / 8];	/* State of
347 							   reconstruct */
348 	u16	ldrv_op_status[MAX_LOGICAL_DRIVES_40LD / 8]; /* logdrv
349 								 Status */
350 
351 	u32	ldrv_size[MAX_LOGICAL_DRIVES_40LD];/* Size of each log drv */
352 	u8	ldrv_prop[MAX_LOGICAL_DRIVES_40LD];
353 	u8	ldrv_state[MAX_LOGICAL_DRIVES_40LD];/* State of log drives */
354 	u8	pdrv_state[FC_MAX_PHYSICAL_DEVICES];/* State of phys drvs. */
355 	u16	pdrv_format[FC_MAX_PHYSICAL_DEVICES / 16];
356 
357 	u8	targ_xfer[80];	/* phys device transfer rate */
358 	u8	pad1k[263];	/* 761 + 263reserved = 1024 bytes total size */
359 } __attribute__ ((packed)) mega_inquiry3;
360 
361 
362 /* Structures */
363 typedef struct {
364 	u8	max_commands;	/* Max concurrent commands supported */
365 	u8	rebuild_rate;	/* Rebuild rate - 0% thru 100% */
366 	u8	max_targ_per_chan;	/* Max targ per channel */
367 	u8	nchannels;	/* Number of channels on HBA */
368 	u8	fw_version[4];	/* Firmware version */
369 	u16	age_of_flash;	/* Number of times FW has been flashed */
370 	u8	chip_set_value;	/* Contents of 0xC0000832 */
371 	u8	dram_size;	/* In MB */
372 	u8	cache_flush_interval;	/* in seconds */
373 	u8	bios_version[4];
374 	u8	board_type;
375 	u8	sense_alert;
376 	u8	write_config_count;	/* Increase with every configuration
377 					   change */
378 	u8	drive_inserted_count;	/* Increase with every drive inserted
379 					 */
380 	u8	inserted_drive;	/* Channel:Id of inserted drive */
381 	u8	battery_status;	/*
382 				 * BIT 0: battery module missing
383 				 * BIT 1: VBAD
384 				 * BIT 2: temprature high
385 				 * BIT 3: battery pack missing
386 				 * BIT 4,5:
387 				 *   00 - charge complete
388 				 *   01 - fast charge in progress
389 				 *   10 - fast charge fail
390 				 *   11 - undefined
391 				 * Bit 6: counter > 1000
392 				 * Bit 7: Undefined
393 				 */
394 	u8	dec_fault_bus_info;
395 } __attribute__ ((packed)) mega_adp_info;
396 
397 
398 typedef struct {
399 	u8	num_ldrv;	/* Number of logical drives configured */
400 	u8	rsvd[3];
401 	u32	ldrv_size[MAX_LOGICAL_DRIVES_8LD];
402 	u8	ldrv_prop[MAX_LOGICAL_DRIVES_8LD];
403 	u8	ldrv_state[MAX_LOGICAL_DRIVES_8LD];
404 } __attribute__ ((packed)) mega_ldrv_info;
405 
406 typedef struct {
407 	u8	pdrv_state[MAX_PHYSICAL_DRIVES];
408 	u8	rsvd;
409 } __attribute__ ((packed)) mega_pdrv_info;
410 
411 /* RAID inquiry: Mailbox command 0x05*/
412 typedef struct {
413 	mega_adp_info	adapter_info;
414 	mega_ldrv_info	logdrv_info;
415 	mega_pdrv_info	pdrv_info;
416 } __attribute__ ((packed)) mraid_inquiry;
417 
418 
419 /* RAID extended inquiry: Mailbox command 0x04*/
420 typedef struct {
421 	mraid_inquiry	raid_inq;
422 	u16	phys_drv_format[MAX_CHANNELS];
423 	u8	stack_attn;
424 	u8	modem_status;
425 	u8	rsvd[2];
426 } __attribute__ ((packed)) mraid_ext_inquiry;
427 
428 
429 typedef struct {
430 	u8	channel;
431 	u8	target;
432 }__attribute__ ((packed)) adp_device;
433 
434 typedef struct {
435 	u32		start_blk;	/* starting block */
436 	u32		num_blks;	/* # of blocks */
437 	adp_device	device[MAX_ROW_SIZE_40LD];
438 }__attribute__ ((packed)) adp_span_40ld;
439 
440 typedef struct {
441 	u32		start_blk;	/* starting block */
442 	u32		num_blks;	/* # of blocks */
443 	adp_device	device[MAX_ROW_SIZE_8LD];
444 }__attribute__ ((packed)) adp_span_8ld;
445 
446 typedef struct {
447 	u8	span_depth;	/* Total # of spans */
448 	u8	level;		/* RAID level */
449 	u8	read_ahead;	/* read ahead, no read ahead, adaptive read
450 				   ahead */
451 	u8	stripe_sz;	/* Encoded stripe size */
452 	u8	status;		/* Status of the logical drive */
453 	u8	write_mode;	/* write mode, write_through/write_back */
454 	u8	direct_io;	/* direct io or through cache */
455 	u8	row_size;	/* Number of stripes in a row */
456 } __attribute__ ((packed)) logdrv_param;
457 
458 typedef struct {
459 	logdrv_param	lparam;
460 	adp_span_40ld	span[MAX_SPAN_DEPTH];
461 }__attribute__ ((packed)) logdrv_40ld;
462 
463 typedef struct {
464 	logdrv_param	lparam;
465 	adp_span_8ld	span[MAX_SPAN_DEPTH];
466 }__attribute__ ((packed)) logdrv_8ld;
467 
468 typedef struct {
469 	u8	type;		/* Type of the device */
470 	u8	cur_status;	/* current status of the device */
471 	u8	tag_depth;	/* Level of tagging */
472 	u8	sync_neg;	/* sync negotiation - ENABLE or DISBALE */
473 	u32	size;		/* configurable size in terms of 512 byte
474 				   blocks */
475 }__attribute__ ((packed)) phys_drv;
476 
477 typedef struct {
478 	u8		nlog_drives;		/* number of logical drives */
479 	u8		resvd[3];
480 	logdrv_40ld	ldrv[MAX_LOGICAL_DRIVES_40LD];
481 	phys_drv	pdrv[MAX_PHYSICAL_DRIVES];
482 }__attribute__ ((packed)) disk_array_40ld;
483 
484 typedef struct {
485 	u8		nlog_drives;	/* number of logical drives */
486 	u8		resvd[3];
487 	logdrv_8ld	ldrv[MAX_LOGICAL_DRIVES_8LD];
488 	phys_drv	pdrv[MAX_PHYSICAL_DRIVES];
489 }__attribute__ ((packed)) disk_array_8ld;
490 
491 
492 /*
493  * User ioctl structure.
494  * This structure will be used for Traditional Method ioctl interface
495  * commands (0x80),Alternate Buffer Method (0x81) ioctl commands and the
496  * Driver ioctls.
497  * The Driver ioctl interface handles the commands at the driver level,
498  * without being sent to the card.
499  */
500 /* system call imposed limit. Change accordingly */
501 #define IOCTL_MAX_DATALEN       4096
502 
503 struct uioctl_t {
504 	u32 inlen;
505 	u32 outlen;
506 	union {
507 		u8 fca[16];
508 		struct {
509 			u8 opcode;
510 			u8 subopcode;
511 			u16 adapno;
512 #if BITS_PER_LONG == 32
513 			u8 *buffer;
514 			u8 pad[4];
515 #endif
516 #if BITS_PER_LONG == 64
517 			u8 *buffer;
518 #endif
519 			u32 length;
520 		} __attribute__ ((packed)) fcs;
521 	} __attribute__ ((packed)) ui;
522 	u8 mbox[18];		/* 16 bytes + 2 status bytes */
523 	mega_passthru pthru;
524 #if BITS_PER_LONG == 32
525 	char __user *data;		/* buffer <= 4096 for 0x80 commands */
526 	char pad[4];
527 #endif
528 #if BITS_PER_LONG == 64
529 	char __user *data;
530 #endif
531 } __attribute__ ((packed));
532 
533 /*
534  * struct mcontroller is used to pass information about the controllers in the
535  * system. Its upto the application how to use the information. We are passing
536  * as much info about the cards as possible and useful. Before issuing the
537  * call to find information about the cards, the applicaiton needs to issue a
538  * ioctl first to find out the number of controllers in the system.
539  */
540 #define MAX_CONTROLLERS 32
541 
542 struct mcontroller {
543 	u64 base;
544 	u8 irq;
545 	u8 numldrv;
546 	u8 pcibus;
547 	u16 pcidev;
548 	u8 pcifun;
549 	u16 pciid;
550 	u16 pcivendor;
551 	u8 pcislot;
552 	u32 uid;
553 };
554 
555 /*
556  * mailbox structure used for internal commands
557  */
558 typedef struct {
559 	u8	cmd;
560 	u8	cmdid;
561 	u8	opcode;
562 	u8	subopcode;
563 	u32	lba;
564 	u32	xferaddr;
565 	u8	logdrv;
566 	u8	rsvd[3];
567 	u8	numstatus;
568 	u8	status;
569 } __attribute__ ((packed)) megacmd_t;
570 
571 /*
572  * Defines for Driver IOCTL interface
573  */
574 #define MEGAIOC_MAGIC  	'm'
575 
576 #define MEGAIOC_QNADAP		'm'	/* Query # of adapters */
577 #define MEGAIOC_QDRVRVER	'e'	/* Query driver version */
578 #define MEGAIOC_QADAPINFO   	'g'	/* Query adapter information */
579 #define MKADAP(adapno)	  	(MEGAIOC_MAGIC << 8 | (adapno) )
580 #define GETADAP(mkadap)	 	( (mkadap) ^ MEGAIOC_MAGIC << 8 )
581 
582 /*
583  * Definition for the new ioctl interface (NIT)
584  */
585 
586 /*
587  * Vendor specific Group-7 commands
588  */
589 #define VENDOR_SPECIFIC_COMMANDS	0xE0
590 #define MEGA_INTERNAL_CMD		VENDOR_SPECIFIC_COMMANDS + 0x01
591 
592 /*
593  * The ioctl command. No other command shall be used for this interface
594  */
595 #define USCSICMD	VENDOR_SPECIFIC_COMMANDS
596 
597 /*
598  * Data direction flags
599  */
600 #define UIOC_RD		0x00001
601 #define UIOC_WR		0x00002
602 
603 /*
604  * ioctl opcodes
605  */
606 #define MBOX_CMD	0x00000	/* DCMD or passthru command */
607 #define GET_DRIVER_VER	0x10000	/* Get driver version */
608 #define GET_N_ADAP	0x20000	/* Get number of adapters */
609 #define GET_ADAP_INFO	0x30000	/* Get information about a adapter */
610 #define GET_CAP		0x40000	/* Get ioctl capabilities */
611 #define GET_STATS	0x50000	/* Get statistics, including error info */
612 
613 
614 /*
615  * The ioctl structure.
616  * MBOX macro converts a nitioctl_t structure to megacmd_t pointer and
617  * MBOX_P macro converts a nitioctl_t pointer to megacmd_t pointer.
618  */
619 typedef struct {
620 	char		signature[8];	/* Must contain "MEGANIT" */
621 	u32		opcode;		/* opcode for the command */
622 	u32		adapno;		/* adapter number */
623 	union {
624 		u8	__raw_mbox[18];
625 		void __user *__uaddr; /* xferaddr for non-mbox cmds */
626 	}__ua;
627 
628 #define uioc_rmbox	__ua.__raw_mbox
629 #define MBOX(uioc)	((megacmd_t *)&((uioc).__ua.__raw_mbox[0]))
630 #define MBOX_P(uioc)	((megacmd_t __user *)&((uioc)->__ua.__raw_mbox[0]))
631 #define uioc_uaddr	__ua.__uaddr
632 
633 	u32		xferlen;	/* xferlen for DCMD and non-mbox
634 					   commands */
635 	u32		flags;		/* data direction flags */
636 }nitioctl_t;
637 
638 
639 /*
640  * I/O statistics for some applications like SNMP agent. The caller must
641  * provide the number of logical drives for which status should be reported.
642  */
643 typedef struct {
644 	int	num_ldrv;	/* Number for logical drives for which the
645 				   status should be reported. */
646 	u32	nreads[MAX_LOGICAL_DRIVES_40LD];	/* number of reads for
647 							each logical drive */
648 	u32	nreadblocks[MAX_LOGICAL_DRIVES_40LD];	/* number of blocks
649 							read for each logical
650 							drive */
651 	u32	nwrites[MAX_LOGICAL_DRIVES_40LD];	/* number of writes
652 							for each logical
653 							drive */
654 	u32	nwriteblocks[MAX_LOGICAL_DRIVES_40LD];	/* number of blocks
655 							writes for each
656 							logical drive */
657 	u32	rd_errors[MAX_LOGICAL_DRIVES_40LD];	/* number of read
658 							   errors for each
659 							   logical drive */
660 	u32	wr_errors[MAX_LOGICAL_DRIVES_40LD];	/* number of write
661 							   errors for each
662 							   logical drive */
663 }megastat_t;
664 
665 
666 struct private_bios_data {
667 	u8	geometry:4;	/*
668 				 * bits 0-3 - BIOS geometry
669 				 * 0x0001 - 1GB
670 				 * 0x0010 - 2GB
671 				 * 0x1000 - 8GB
672 				 * Others values are invalid
673 							 */
674 	u8	unused:4;	/* bits 4-7 are unused */
675 	u8	boot_drv;	/*
676 				 * logical drive set as boot drive
677 				 * 0..7 - for 8LD cards
678 				 * 0..39 - for 40LD cards
679 				 */
680 	u8	rsvd[12];
681 	u16	cksum;	/* 0-(sum of first 13 bytes of this structure) */
682 } __attribute__ ((packed));
683 
684 
685 
686 
687 /*
688  * Mailbox and firmware commands and subopcodes used in this driver.
689  */
690 
691 #define MEGA_MBOXCMD_LREAD	0x01
692 #define MEGA_MBOXCMD_LWRITE	0x02
693 #define MEGA_MBOXCMD_PASSTHRU	0x03
694 #define MEGA_MBOXCMD_ADPEXTINQ	0x04
695 #define MEGA_MBOXCMD_ADAPTERINQ	0x05
696 #define MEGA_MBOXCMD_LREAD64	0xA7
697 #define MEGA_MBOXCMD_LWRITE64	0xA8
698 #define MEGA_MBOXCMD_PASSTHRU64	0xC3
699 #define MEGA_MBOXCMD_EXTPTHRU	0xE3
700 
701 #define MAIN_MISC_OPCODE	0xA4	/* f/w misc opcode */
702 #define GET_MAX_SG_SUPPORT	0x01	/* get max sg len supported by f/w */
703 
704 #define FC_NEW_CONFIG		0xA1
705 #define NC_SUBOP_PRODUCT_INFO	0x0E
706 #define NC_SUBOP_ENQUIRY3	0x0F
707 #define ENQ3_GET_SOLICITED_FULL	0x02
708 #define OP_DCMD_READ_CONFIG	0x04
709 #define NEW_READ_CONFIG_8LD	0x67
710 #define READ_CONFIG_8LD		0x07
711 #define FLUSH_ADAPTER		0x0A
712 #define FLUSH_SYSTEM		0xFE
713 
714 /*
715  * Command for random deletion of logical drives
716  */
717 #define	FC_DEL_LOGDRV		0xA4	/* f/w command */
718 #define	OP_SUP_DEL_LOGDRV	0x2A	/* is feature supported */
719 #define OP_GET_LDID_MAP		0x18	/* get ldid and logdrv number map */
720 #define OP_DEL_LOGDRV		0x1C	/* delete logical drive */
721 
722 /*
723  * BIOS commands
724  */
725 #define IS_BIOS_ENABLED		0x62
726 #define GET_BIOS		0x01
727 #define CHNL_CLASS		0xA9
728 #define GET_CHNL_CLASS		0x00
729 #define SET_CHNL_CLASS		0x01
730 #define CH_RAID			0x01
731 #define CH_SCSI			0x00
732 #define BIOS_PVT_DATA		0x40
733 #define GET_BIOS_PVT_DATA	0x00
734 
735 
736 /*
737  * Commands to support clustering
738  */
739 #define MEGA_GET_TARGET_ID	0x7D
740 #define MEGA_CLUSTER_OP		0x70
741 #define MEGA_GET_CLUSTER_MODE	0x02
742 #define MEGA_CLUSTER_CMD	0x6E
743 #define MEGA_RESERVE_LD		0x01
744 #define MEGA_RELEASE_LD		0x02
745 #define MEGA_RESET_RESERVATIONS	0x03
746 #define MEGA_RESERVATION_STATUS	0x04
747 #define MEGA_RESERVE_PD		0x05
748 #define MEGA_RELEASE_PD		0x06
749 
750 
751 /*
752  * Module battery status
753  */
754 #define MEGA_BATT_MODULE_MISSING	0x01
755 #define MEGA_BATT_LOW_VOLTAGE		0x02
756 #define MEGA_BATT_TEMP_HIGH		0x04
757 #define MEGA_BATT_PACK_MISSING		0x08
758 #define MEGA_BATT_CHARGE_MASK		0x30
759 #define MEGA_BATT_CHARGE_DONE		0x00
760 #define MEGA_BATT_CHARGE_INPROG		0x10
761 #define MEGA_BATT_CHARGE_FAIL		0x20
762 #define MEGA_BATT_CYCLES_EXCEEDED	0x40
763 
764 /*
765  * Physical drive states.
766  */
767 #define PDRV_UNCNF	0
768 #define PDRV_ONLINE	3
769 #define PDRV_FAILED	4
770 #define PDRV_RBLD	5
771 #define PDRV_HOTSPARE	6
772 
773 
774 /*
775  * Raid logical drive states.
776  */
777 #define RDRV_OFFLINE	0
778 #define RDRV_DEGRADED	1
779 #define RDRV_OPTIMAL	2
780 #define RDRV_DELETED	3
781 
782 /*
783  * Read, write and cache policies
784  */
785 #define NO_READ_AHEAD		0
786 #define READ_AHEAD		1
787 #define ADAP_READ_AHEAD		2
788 #define WRMODE_WRITE_THRU	0
789 #define WRMODE_WRITE_BACK	1
790 #define CACHED_IO		0
791 #define DIRECT_IO		1
792 
793 
794 #define SCSI_LIST(scp) ((struct list_head *)(&(scp)->SCp))
795 
796 /*
797  * Each controller's soft state
798  */
799 typedef struct {
800 	int	this_id;	/* our id, may set to different than 7 if
801 				   clustering is available */
802 	u32	flag;
803 
804 	unsigned long	base;
805 
806 	/* mbox64 with mbox not aligned on 16-byte boundry */
807 	mbox64_t	*una_mbox64;
808 	dma_addr_t	una_mbox64_dma;
809 
810 	volatile mbox64_t	*mbox64;/* ptr to 64-bit mailbox */
811 	volatile mbox_t		*mbox;	/* ptr to standard mailbox */
812 	dma_addr_t		mbox_dma;
813 
814 	struct pci_dev	*dev;
815 
816 	struct list_head	free_list;
817 	struct list_head	pending_list;
818 	struct list_head	completed_list;
819 
820 	struct Scsi_Host	*host;
821 
822 #define MEGA_BUFFER_SIZE (2*1024)
823 	u8		*mega_buffer;
824 	dma_addr_t	buf_dma_handle;
825 
826 	mega_product_info	product_info;
827 
828 	u8		max_cmds;
829 	scb_t		*scb_list;
830 
831 	atomic_t	pend_cmds;	/* maintain a counter for pending
832 					   commands in firmware */
833 
834 #if MEGA_HAVE_STATS
835 	u32	nreads[MAX_LOGICAL_DRIVES_40LD];
836 	u32	nreadblocks[MAX_LOGICAL_DRIVES_40LD];
837 	u32	nwrites[MAX_LOGICAL_DRIVES_40LD];
838 	u32	nwriteblocks[MAX_LOGICAL_DRIVES_40LD];
839 	u32	rd_errors[MAX_LOGICAL_DRIVES_40LD];
840 	u32	wr_errors[MAX_LOGICAL_DRIVES_40LD];
841 #endif
842 
843 	/* Host adapter parameters */
844 	u8	numldrv;
845 	u8	fw_version[7];
846 	u8	bios_version[7];
847 
848 #ifdef CONFIG_PROC_FS
849 	struct proc_dir_entry	*controller_proc_dir_entry;
850 	struct proc_dir_entry	*proc_read;
851 	struct proc_dir_entry	*proc_stat;
852 	struct proc_dir_entry	*proc_mbox;
853 
854 #if MEGA_HAVE_ENH_PROC
855 	struct proc_dir_entry	*proc_rr;
856 	struct proc_dir_entry	*proc_battery;
857 #define MAX_PROC_CHANNELS	4
858 	struct proc_dir_entry	*proc_pdrvstat[MAX_PROC_CHANNELS];
859 	struct proc_dir_entry	*proc_rdrvstat[MAX_PROC_CHANNELS];
860 #endif
861 
862 #endif
863 
864 	int	has_64bit_addr;		/* are we using 64-bit addressing */
865 	int	support_ext_cdb;
866 	int	boot_ldrv_enabled;
867 	int	boot_ldrv;
868 	int	boot_pdrv_enabled;	/* boot from physical drive */
869 	int	boot_pdrv_ch;		/* boot physical drive channel */
870 	int	boot_pdrv_tgt;		/* boot physical drive target */
871 
872 
873 	int	support_random_del;	/* Do we support random deletion of
874 					   logdrvs */
875 	int	read_ldidmap;	/* set after logical drive deltion. The
876 				   logical drive number must be read from the
877 				   map */
878 	atomic_t	quiescent;	/* a stage reached when delete logical
879 					   drive needs to be done. Stop
880 					   sending requests to the hba till
881 					   delete operation is completed */
882 	spinlock_t	lock;
883 
884 	u8	logdrv_chan[MAX_CHANNELS+NVIRT_CHAN]; /* logical drive are on
885 							what channels. */
886 	int	mega_ch_class;
887 
888 	u8	sglen;	/* f/w supported scatter-gather list length */
889 
890 	scb_t			int_scb;
891 	Scsi_Cmnd		int_scmd;
892 	struct semaphore	int_mtx;	/* To synchronize the internal
893 						commands */
894 	struct completion	int_waitq;	/* wait queue for internal
895 						 cmds */
896 
897 	int	has_cluster;	/* cluster support on this HBA */
898 }adapter_t;
899 
900 
901 struct mega_hbas {
902 	int is_bios_enabled;
903 	adapter_t *hostdata_addr;
904 };
905 
906 
907 /*
908  * For state flag. Do not use LSB(8 bits) which are
909  * reserved for storing info about channels.
910  */
911 #define IN_ABORT	0x80000000L
912 #define IN_RESET	0x40000000L
913 #define BOARD_MEMMAP	0x20000000L
914 #define BOARD_IOMAP	0x10000000L
915 #define BOARD_40LD   	0x08000000L
916 #define BOARD_64BIT	0x04000000L
917 
918 #define INTR_VALID			0x40
919 
920 #define PCI_CONF_AMISIG			0xa0
921 #define PCI_CONF_AMISIG64		0xa4
922 
923 
924 #define MEGA_DMA_TYPE_NONE		0xFFFF
925 #define MEGA_BULK_DATA			0x0001
926 #define MEGA_SGLIST			0x0002
927 
928 /*
929  * Parameters for the io-mapped controllers
930  */
931 
932 /* I/O Port offsets */
933 #define CMD_PORT	 	0x00
934 #define ACK_PORT	 	0x00
935 #define TOGGLE_PORT		0x01
936 #define INTR_PORT	  	0x0a
937 
938 #define MBOX_BUSY_PORT     	0x00
939 #define MBOX_PORT0	 	0x04
940 #define MBOX_PORT1	 	0x05
941 #define MBOX_PORT2	 	0x06
942 #define MBOX_PORT3	 	0x07
943 #define ENABLE_MBOX_REGION 	0x0B
944 
945 /* I/O Port Values */
946 #define ISSUE_BYTE	 	0x10
947 #define ACK_BYTE	   	0x08
948 #define ENABLE_INTR_BYTE   	0xc0
949 #define DISABLE_INTR_BYTE  	0x00
950 #define VALID_INTR_BYTE    	0x40
951 #define MBOX_BUSY_BYTE     	0x10
952 #define ENABLE_MBOX_BYTE   	0x00
953 
954 
955 /* Setup some port macros here */
956 #define issue_command(adapter)	\
957 		outb_p(ISSUE_BYTE, (adapter)->base + CMD_PORT)
958 
959 #define irq_state(adapter)	inb_p((adapter)->base + INTR_PORT)
960 
961 #define set_irq_state(adapter, value)	\
962 		outb_p((value), (adapter)->base + INTR_PORT)
963 
964 #define irq_ack(adapter)	\
965 		outb_p(ACK_BYTE, (adapter)->base + ACK_PORT)
966 
967 #define irq_enable(adapter)	\
968 	outb_p(ENABLE_INTR_BYTE, (adapter)->base + TOGGLE_PORT)
969 
970 #define irq_disable(adapter)	\
971 	outb_p(DISABLE_INTR_BYTE, (adapter)->base + TOGGLE_PORT)
972 
973 
974 /*
975  * This is our SYSDEP area. All kernel specific detail should be placed here -
976  * as much as possible
977  */
978 
979 /*
980  * End of SYSDEP area
981  */
982 
983 const char *megaraid_info (struct Scsi_Host *);
984 
985 static int mega_query_adapter(adapter_t *);
986 static int issue_scb(adapter_t *, scb_t *);
987 static int mega_setup_mailbox(adapter_t *);
988 
989 static int megaraid_queue (Scsi_Cmnd *, void (*)(Scsi_Cmnd *));
990 static scb_t * mega_build_cmd(adapter_t *, Scsi_Cmnd *, int *);
991 static void __mega_runpendq(adapter_t *);
992 static int issue_scb_block(adapter_t *, u_char *);
993 
994 static irqreturn_t megaraid_isr_memmapped(int, void *, struct pt_regs *);
995 static irqreturn_t megaraid_isr_iomapped(int, void *, struct pt_regs *);
996 
997 static void mega_free_scb(adapter_t *, scb_t *);
998 
999 static int megaraid_abort(Scsi_Cmnd *);
1000 static int megaraid_reset(Scsi_Cmnd *);
1001 static int megaraid_abort_and_reset(adapter_t *, Scsi_Cmnd *, int);
1002 static int megaraid_biosparam(struct scsi_device *, struct block_device *,
1003 		sector_t, int []);
1004 static int mega_print_inquiry(char *, char *);
1005 
1006 static int mega_build_sglist (adapter_t *adapter, scb_t *scb,
1007 			      u32 *buffer, u32 *length);
1008 static int __mega_busywait_mbox (adapter_t *);
1009 static void mega_rundoneq (adapter_t *);
1010 static void mega_cmd_done(adapter_t *, u8 [], int, int);
1011 static inline void mega_free_sgl (adapter_t *adapter);
1012 static void mega_8_to_40ld (mraid_inquiry *inquiry,
1013 		mega_inquiry3 *enquiry3, mega_product_info *);
1014 
1015 static int megadev_open (struct inode *, struct file *);
1016 static int megadev_ioctl (struct inode *, struct file *, unsigned int,
1017 		unsigned long);
1018 static int mega_m_to_n(void __user *, nitioctl_t *);
1019 static int mega_n_to_m(void __user *, megacmd_t *);
1020 
1021 static int mega_init_scb (adapter_t *);
1022 
1023 static int mega_is_bios_enabled (adapter_t *);
1024 
1025 #ifdef CONFIG_PROC_FS
1026 static void mega_create_proc_entry(int, struct proc_dir_entry *);
1027 static int proc_read_config(char *, char **, off_t, int, int *, void *);
1028 static int proc_read_stat(char *, char **, off_t, int, int *, void *);
1029 static int proc_read_mbox(char *, char **, off_t, int, int *, void *);
1030 static int proc_rebuild_rate(char *, char **, off_t, int, int *, void *);
1031 static int proc_battery(char *, char **, off_t, int, int *, void *);
1032 static int proc_pdrv_ch0(char *, char **, off_t, int, int *, void *);
1033 static int proc_pdrv_ch1(char *, char **, off_t, int, int *, void *);
1034 static int proc_pdrv_ch2(char *, char **, off_t, int, int *, void *);
1035 static int proc_pdrv_ch3(char *, char **, off_t, int, int *, void *);
1036 static int proc_pdrv(adapter_t *, char *, int);
1037 static int proc_rdrv_10(char *, char **, off_t, int, int *, void *);
1038 static int proc_rdrv_20(char *, char **, off_t, int, int *, void *);
1039 static int proc_rdrv_30(char *, char **, off_t, int, int *, void *);
1040 static int proc_rdrv_40(char *, char **, off_t, int, int *, void *);
1041 static int proc_rdrv(adapter_t *, char *, int, int);
1042 #endif
1043 
1044 static int mega_adapinq(adapter_t *, dma_addr_t);
1045 static int mega_internal_dev_inquiry(adapter_t *, u8, u8, dma_addr_t);
1046 
1047 static int mega_support_ext_cdb(adapter_t *);
1048 static mega_passthru* mega_prepare_passthru(adapter_t *, scb_t *,
1049 		Scsi_Cmnd *, int, int);
1050 static mega_ext_passthru* mega_prepare_extpassthru(adapter_t *,
1051 		scb_t *, Scsi_Cmnd *, int, int);
1052 static void mega_enum_raid_scsi(adapter_t *);
1053 static void mega_get_boot_drv(adapter_t *);
1054 static int mega_support_random_del(adapter_t *);
1055 static int mega_del_logdrv(adapter_t *, int);
1056 static int mega_do_del_logdrv(adapter_t *, int);
1057 static void mega_get_max_sgl(adapter_t *);
1058 static int mega_internal_command(adapter_t *, megacmd_t *, mega_passthru *);
1059 static void mega_internal_done(Scsi_Cmnd *);
1060 static int mega_support_cluster(adapter_t *);
1061 #endif
1062 
1063 /* vi: set ts=8 sw=8 tw=78: */
1064