1#ifndef __MEGARAID_H__
2#define __MEGARAID_H__
3
4#include <linux/spinlock.h>
5#include <linux/mutex.h>
6
7#define MEGARAID_VERSION	\
8	"v2.00.4 (Release Date: Thu Feb 9 08:51:30 EST 2006)\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 */
123struct 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
134struct 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
143typedef struct {
144	struct mbox_out	m_out;
145	struct mbox_in	m_in;
146} __attribute__ ((packed)) mbox_t;
147
148typedef 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
160typedef 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 */
184typedef 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
208typedef struct {
209	u64 address;
210	u32 length;
211} __attribute__ ((packed)) mega_sgl64;
212
213typedef struct {
214	u32 address;
215	u32 length;
216} __attribute__ ((packed)) mega_sglist;
217
218
219/* Queued command data */
220typedef 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 */
256typedef 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
283struct 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
332typedef 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 */
363typedef 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
398typedef 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
406typedef struct {
407	u8	pdrv_state[MAX_PHYSICAL_DRIVES];
408	u8	rsvd;
409} __attribute__ ((packed)) mega_pdrv_info;
410
411/* RAID inquiry: Mailbox command 0x05*/
412typedef 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*/
420typedef 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
429typedef struct {
430	u8	channel;
431	u8	target;
432}__attribute__ ((packed)) adp_device;
433
434typedef 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
440typedef 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
446typedef 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
458typedef struct {
459	logdrv_param	lparam;
460	adp_span_40ld	span[MAX_SPAN_DEPTH];
461}__attribute__ ((packed)) logdrv_40ld;
462
463typedef struct {
464	logdrv_param	lparam;
465	adp_span_8ld	span[MAX_SPAN_DEPTH];
466}__attribute__ ((packed)) logdrv_8ld;
467
468typedef 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
477typedef 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
484typedef 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
503struct 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
542struct 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 */
558typedef 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 */
619typedef 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 */
643typedef 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
666struct 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 */
799typedef 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	void __iomem		*mmio_base;
806
807	/* mbox64 with mbox not aligned on 16-byte boundry */
808	mbox64_t	*una_mbox64;
809	dma_addr_t	una_mbox64_dma;
810
811	volatile mbox64_t	*mbox64;/* ptr to 64-bit mailbox */
812	volatile mbox_t		*mbox;	/* ptr to standard mailbox */
813	dma_addr_t		mbox_dma;
814
815	struct pci_dev	*dev;
816
817	struct list_head	free_list;
818	struct list_head	pending_list;
819	struct list_head	completed_list;
820
821	struct Scsi_Host	*host;
822
823#define MEGA_BUFFER_SIZE (2*1024)
824	u8		*mega_buffer;
825	dma_addr_t	buf_dma_handle;
826
827	mega_product_info	product_info;
828
829	u8		max_cmds;
830	scb_t		*scb_list;
831
832	atomic_t	pend_cmds;	/* maintain a counter for pending
833					   commands in firmware */
834
835#if MEGA_HAVE_STATS
836	u32	nreads[MAX_LOGICAL_DRIVES_40LD];
837	u32	nreadblocks[MAX_LOGICAL_DRIVES_40LD];
838	u32	nwrites[MAX_LOGICAL_DRIVES_40LD];
839	u32	nwriteblocks[MAX_LOGICAL_DRIVES_40LD];
840	u32	rd_errors[MAX_LOGICAL_DRIVES_40LD];
841	u32	wr_errors[MAX_LOGICAL_DRIVES_40LD];
842#endif
843
844	/* Host adapter parameters */
845	u8	numldrv;
846	u8	fw_version[7];
847	u8	bios_version[7];
848
849#ifdef CONFIG_PROC_FS
850	struct proc_dir_entry	*controller_proc_dir_entry;
851	struct proc_dir_entry	*proc_read;
852	struct proc_dir_entry	*proc_stat;
853	struct proc_dir_entry	*proc_mbox;
854
855#if MEGA_HAVE_ENH_PROC
856	struct proc_dir_entry	*proc_rr;
857	struct proc_dir_entry	*proc_battery;
858#define MAX_PROC_CHANNELS	4
859	struct proc_dir_entry	*proc_pdrvstat[MAX_PROC_CHANNELS];
860	struct proc_dir_entry	*proc_rdrvstat[MAX_PROC_CHANNELS];
861#endif
862
863#endif
864
865	int	has_64bit_addr;		/* are we using 64-bit addressing */
866	int	support_ext_cdb;
867	int	boot_ldrv_enabled;
868	int	boot_ldrv;
869	int	boot_pdrv_enabled;	/* boot from physical drive */
870	int	boot_pdrv_ch;		/* boot physical drive channel */
871	int	boot_pdrv_tgt;		/* boot physical drive target */
872
873
874	int	support_random_del;	/* Do we support random deletion of
875					   logdrvs */
876	int	read_ldidmap;	/* set after logical drive deltion. The
877				   logical drive number must be read from the
878				   map */
879	atomic_t	quiescent;	/* a stage reached when delete logical
880					   drive needs to be done. Stop
881					   sending requests to the hba till
882					   delete operation is completed */
883	spinlock_t	lock;
884
885	u8	logdrv_chan[MAX_CHANNELS+NVIRT_CHAN]; /* logical drive are on
886							what channels. */
887	int	mega_ch_class;
888
889	u8	sglen;	/* f/w supported scatter-gather list length */
890
891	scb_t			int_scb;
892	Scsi_Cmnd		int_scmd;
893	struct mutex		int_mtx;	/* To synchronize the internal
894						commands */
895	struct completion	int_waitq;	/* wait queue for internal
896						 cmds */
897
898	int	has_cluster;	/* cluster support on this HBA */
899}adapter_t;
900
901
902struct mega_hbas {
903	int is_bios_enabled;
904	adapter_t *hostdata_addr;
905};
906
907
908/*
909 * For state flag. Do not use LSB(8 bits) which are
910 * reserved for storing info about channels.
911 */
912#define IN_ABORT	0x80000000L
913#define IN_RESET	0x40000000L
914#define BOARD_MEMMAP	0x20000000L
915#define BOARD_IOMAP	0x10000000L
916#define BOARD_40LD   	0x08000000L
917#define BOARD_64BIT	0x04000000L
918
919#define INTR_VALID			0x40
920
921#define PCI_CONF_AMISIG			0xa0
922#define PCI_CONF_AMISIG64		0xa4
923
924
925#define MEGA_DMA_TYPE_NONE		0xFFFF
926#define MEGA_BULK_DATA			0x0001
927#define MEGA_SGLIST			0x0002
928
929/*
930 * Parameters for the io-mapped controllers
931 */
932
933/* I/O Port offsets */
934#define CMD_PORT	 	0x00
935#define ACK_PORT	 	0x00
936#define TOGGLE_PORT		0x01
937#define INTR_PORT	  	0x0a
938
939#define MBOX_BUSY_PORT     	0x00
940#define MBOX_PORT0	 	0x04
941#define MBOX_PORT1	 	0x05
942#define MBOX_PORT2	 	0x06
943#define MBOX_PORT3	 	0x07
944#define ENABLE_MBOX_REGION 	0x0B
945
946/* I/O Port Values */
947#define ISSUE_BYTE	 	0x10
948#define ACK_BYTE	   	0x08
949#define ENABLE_INTR_BYTE   	0xc0
950#define DISABLE_INTR_BYTE  	0x00
951#define VALID_INTR_BYTE    	0x40
952#define MBOX_BUSY_BYTE     	0x10
953#define ENABLE_MBOX_BYTE   	0x00
954
955
956/* Setup some port macros here */
957#define issue_command(adapter)	\
958		outb_p(ISSUE_BYTE, (adapter)->base + CMD_PORT)
959
960#define irq_state(adapter)	inb_p((adapter)->base + INTR_PORT)
961
962#define set_irq_state(adapter, value)	\
963		outb_p((value), (adapter)->base + INTR_PORT)
964
965#define irq_ack(adapter)	\
966		outb_p(ACK_BYTE, (adapter)->base + ACK_PORT)
967
968#define irq_enable(adapter)	\
969	outb_p(ENABLE_INTR_BYTE, (adapter)->base + TOGGLE_PORT)
970
971#define irq_disable(adapter)	\
972	outb_p(DISABLE_INTR_BYTE, (adapter)->base + TOGGLE_PORT)
973
974
975/*
976 * This is our SYSDEP area. All kernel specific detail should be placed here -
977 * as much as possible
978 */
979
980/*
981 * End of SYSDEP area
982 */
983
984const char *megaraid_info (struct Scsi_Host *);
985
986static int mega_query_adapter(adapter_t *);
987static int issue_scb(adapter_t *, scb_t *);
988static int mega_setup_mailbox(adapter_t *);
989
990static int megaraid_queue (Scsi_Cmnd *, void (*)(Scsi_Cmnd *));
991static scb_t * mega_build_cmd(adapter_t *, Scsi_Cmnd *, int *);
992static void __mega_runpendq(adapter_t *);
993static int issue_scb_block(adapter_t *, u_char *);
994
995static irqreturn_t megaraid_isr_memmapped(int, void *);
996static irqreturn_t megaraid_isr_iomapped(int, void *);
997
998static void mega_free_scb(adapter_t *, scb_t *);
999
1000static int megaraid_abort(Scsi_Cmnd *);
1001static int megaraid_reset(Scsi_Cmnd *);
1002static int megaraid_abort_and_reset(adapter_t *, Scsi_Cmnd *, int);
1003static int megaraid_biosparam(struct scsi_device *, struct block_device *,
1004		sector_t, int []);
1005
1006static int mega_build_sglist (adapter_t *adapter, scb_t *scb,
1007			      u32 *buffer, u32 *length);
1008static int __mega_busywait_mbox (adapter_t *);
1009static void mega_rundoneq (adapter_t *);
1010static void mega_cmd_done(adapter_t *, u8 [], int, int);
1011static inline void mega_free_sgl (adapter_t *adapter);
1012static void mega_8_to_40ld (mraid_inquiry *inquiry,
1013		mega_inquiry3 *enquiry3, mega_product_info *);
1014
1015static int megadev_open (struct inode *, struct file *);
1016static int megadev_ioctl (struct inode *, struct file *, unsigned int,
1017		unsigned long);
1018static int mega_m_to_n(void __user *, nitioctl_t *);
1019static int mega_n_to_m(void __user *, megacmd_t *);
1020
1021static int mega_init_scb (adapter_t *);
1022
1023static int mega_is_bios_enabled (adapter_t *);
1024
1025#ifdef CONFIG_PROC_FS
1026static int mega_print_inquiry(char *, char *);
1027static void mega_create_proc_entry(int, struct proc_dir_entry *);
1028static int proc_read_config(char *, char **, off_t, int, int *, void *);
1029static int proc_read_stat(char *, char **, off_t, int, int *, void *);
1030static int proc_read_mbox(char *, char **, off_t, int, int *, void *);
1031static int proc_rebuild_rate(char *, char **, off_t, int, int *, void *);
1032static int proc_battery(char *, char **, off_t, int, int *, void *);
1033static int proc_pdrv_ch0(char *, char **, off_t, int, int *, void *);
1034static int proc_pdrv_ch1(char *, char **, off_t, int, int *, void *);
1035static int proc_pdrv_ch2(char *, char **, off_t, int, int *, void *);
1036static int proc_pdrv_ch3(char *, char **, off_t, int, int *, void *);
1037static int proc_pdrv(adapter_t *, char *, int);
1038static int proc_rdrv_10(char *, char **, off_t, int, int *, void *);
1039static int proc_rdrv_20(char *, char **, off_t, int, int *, void *);
1040static int proc_rdrv_30(char *, char **, off_t, int, int *, void *);
1041static int proc_rdrv_40(char *, char **, off_t, int, int *, void *);
1042static int proc_rdrv(adapter_t *, char *, int, int);
1043
1044static int mega_adapinq(adapter_t *, dma_addr_t);
1045static int mega_internal_dev_inquiry(adapter_t *, u8, u8, dma_addr_t);
1046#endif
1047
1048static int mega_support_ext_cdb(adapter_t *);
1049static mega_passthru* mega_prepare_passthru(adapter_t *, scb_t *,
1050		Scsi_Cmnd *, int, int);
1051static mega_ext_passthru* mega_prepare_extpassthru(adapter_t *,
1052		scb_t *, Scsi_Cmnd *, int, int);
1053static void mega_enum_raid_scsi(adapter_t *);
1054static void mega_get_boot_drv(adapter_t *);
1055static int mega_support_random_del(adapter_t *);
1056static int mega_del_logdrv(adapter_t *, int);
1057static int mega_do_del_logdrv(adapter_t *, int);
1058static void mega_get_max_sgl(adapter_t *);
1059static int mega_internal_command(adapter_t *, megacmd_t *, mega_passthru *);
1060static void mega_internal_done(Scsi_Cmnd *);
1061static int mega_support_cluster(adapter_t *);
1062#endif
1063
1064/* vi: set ts=8 sw=8 tw=78: */
1065