cciss.c revision a9925a06ea52a44b4bf4a941342e8240eaf22417
1/*
2 *    Disk Array driver for HP SA 5xxx and 6xxx Controllers
3 *    Copyright 2000, 2006 Hewlett-Packard Development Company, L.P.
4 *
5 *    This program is free software; you can redistribute it and/or modify
6 *    it under the terms of the GNU General Public License as published by
7 *    the Free Software Foundation; either version 2 of the License, or
8 *    (at your option) any later version.
9 *
10 *    This program is distributed in the hope that it will be useful,
11 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
12 *    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
13 *    NON INFRINGEMENT.  See the GNU General Public License for more details.
14 *
15 *    You should have received a copy of the GNU General Public License
16 *    along with this program; if not, write to the Free Software
17 *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 *
19 *    Questions/Comments/Bugfixes to iss_storagedev@hp.com
20 *
21 */
22
23#include <linux/config.h>	/* CONFIG_PROC_FS */
24#include <linux/module.h>
25#include <linux/interrupt.h>
26#include <linux/types.h>
27#include <linux/pci.h>
28#include <linux/kernel.h>
29#include <linux/slab.h>
30#include <linux/delay.h>
31#include <linux/major.h>
32#include <linux/fs.h>
33#include <linux/bio.h>
34#include <linux/blkpg.h>
35#include <linux/timer.h>
36#include <linux/proc_fs.h>
37#include <linux/init.h>
38#include <linux/hdreg.h>
39#include <linux/spinlock.h>
40#include <linux/compat.h>
41#include <asm/uaccess.h>
42#include <asm/io.h>
43
44#include <linux/dma-mapping.h>
45#include <linux/blkdev.h>
46#include <linux/genhd.h>
47#include <linux/completion.h>
48
49#define CCISS_DRIVER_VERSION(maj,min,submin) ((maj<<16)|(min<<8)|(submin))
50#define DRIVER_NAME "HP CISS Driver (v 2.6.10)"
51#define DRIVER_VERSION CCISS_DRIVER_VERSION(2,6,10)
52
53/* Embedded module documentation macros - see modules.h */
54MODULE_AUTHOR("Hewlett-Packard Company");
55MODULE_DESCRIPTION("Driver for HP Controller SA5xxx SA6xxx version 2.6.10");
56MODULE_SUPPORTED_DEVICE("HP SA5i SA5i+ SA532 SA5300 SA5312 SA641 SA642 SA6400"
57			" SA6i P600 P800 P400 P400i E200 E200i");
58MODULE_LICENSE("GPL");
59
60#include "cciss_cmd.h"
61#include "cciss.h"
62#include <linux/cciss_ioctl.h>
63
64/* define the PCI info for the cards we can control */
65static const struct pci_device_id cciss_pci_device_id[] = {
66	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISS,
67			0x0E11, 0x4070, 0, 0, 0},
68	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSB,
69                        0x0E11, 0x4080, 0, 0, 0},
70	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSB,
71                        0x0E11, 0x4082, 0, 0, 0},
72	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSB,
73                        0x0E11, 0x4083, 0, 0, 0},
74	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC,
75		0x0E11, 0x409A, 0, 0, 0},
76	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC,
77		0x0E11, 0x409B, 0, 0, 0},
78	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC,
79		0x0E11, 0x409C, 0, 0, 0},
80	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC,
81		0x0E11, 0x409D, 0, 0, 0},
82	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC,
83		0x0E11, 0x4091, 0, 0, 0},
84	{ PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSA,
85		0x103C, 0x3225, 0, 0, 0},
86	{ PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSC,
87		0x103c, 0x3223, 0, 0, 0},
88	{ PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSC,
89		0x103c, 0x3234, 0, 0, 0},
90	{ PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSC,
91		0x103c, 0x3235, 0, 0, 0},
92	{ PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD,
93		0x103c, 0x3211, 0, 0, 0},
94	{ PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD,
95		0x103c, 0x3212, 0, 0, 0},
96	{ PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD,
97		0x103c, 0x3213, 0, 0, 0},
98	{ PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD,
99		0x103c, 0x3214, 0, 0, 0},
100	{ PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD,
101		0x103c, 0x3215, 0, 0, 0},
102	{0,}
103};
104MODULE_DEVICE_TABLE(pci, cciss_pci_device_id);
105
106#define NR_PRODUCTS ARRAY_SIZE(products)
107
108/*  board_id = Subsystem Device ID & Vendor ID
109 *  product = Marketing Name for the board
110 *  access = Address of the struct of function pointers
111 */
112static struct board_type products[] = {
113	{ 0x40700E11, "Smart Array 5300", &SA5_access },
114	{ 0x40800E11, "Smart Array 5i", &SA5B_access},
115	{ 0x40820E11, "Smart Array 532", &SA5B_access},
116	{ 0x40830E11, "Smart Array 5312", &SA5B_access},
117	{ 0x409A0E11, "Smart Array 641", &SA5_access},
118	{ 0x409B0E11, "Smart Array 642", &SA5_access},
119	{ 0x409C0E11, "Smart Array 6400", &SA5_access},
120	{ 0x409D0E11, "Smart Array 6400 EM", &SA5_access},
121	{ 0x40910E11, "Smart Array 6i", &SA5_access},
122	{ 0x3225103C, "Smart Array P600", &SA5_access},
123	{ 0x3223103C, "Smart Array P800", &SA5_access},
124	{ 0x3234103C, "Smart Array P400", &SA5_access},
125	{ 0x3235103C, "Smart Array P400i", &SA5_access},
126	{ 0x3211103C, "Smart Array E200i", &SA5_access},
127	{ 0x3212103C, "Smart Array E200", &SA5_access},
128	{ 0x3213103C, "Smart Array E200i", &SA5_access},
129	{ 0x3214103C, "Smart Array E200i", &SA5_access},
130	{ 0x3215103C, "Smart Array E200i", &SA5_access},
131};
132
133/* How long to wait (in millesconds) for board to go into simple mode */
134#define MAX_CONFIG_WAIT 30000
135#define MAX_IOCTL_CONFIG_WAIT 1000
136
137/*define how many times we will try a command because of bus resets */
138#define MAX_CMD_RETRIES 3
139
140#define READ_AHEAD 	 1024
141#define NR_CMDS		 384 /* #commands that can be outstanding */
142#define MAX_CTLR	32
143
144/* Originally cciss driver only supports 8 major numbers */
145#define MAX_CTLR_ORIG 	8
146
147
148static ctlr_info_t *hba[MAX_CTLR];
149
150static void do_cciss_request(request_queue_t *q);
151static irqreturn_t do_cciss_intr(int irq, void *dev_id, struct pt_regs *regs);
152static int cciss_open(struct inode *inode, struct file *filep);
153static int cciss_release(struct inode *inode, struct file *filep);
154static int cciss_ioctl(struct inode *inode, struct file *filep,
155		unsigned int cmd, unsigned long arg);
156static int cciss_getgeo(struct block_device *bdev, struct hd_geometry *geo);
157
158static int revalidate_allvol(ctlr_info_t *host);
159static int cciss_revalidate(struct gendisk *disk);
160static int rebuild_lun_table(ctlr_info_t *h, struct gendisk *del_disk);
161static int deregister_disk(struct gendisk *disk, drive_info_struct *drv, int clear_all);
162
163static void cciss_read_capacity(int ctlr, int logvol, ReadCapdata_struct *buf,
164	int withirq, unsigned int *total_size, unsigned int *block_size);
165static void cciss_geometry_inquiry(int ctlr, int logvol,
166			int withirq, unsigned int total_size,
167			unsigned int block_size, InquiryData_struct *inq_buff,
168			drive_info_struct *drv);
169static void cciss_getgeometry(int cntl_num);
170static void __devinit cciss_interrupt_mode(ctlr_info_t *, struct pci_dev *, __u32);
171static void start_io( ctlr_info_t *h);
172static int sendcmd( __u8 cmd, int ctlr, void *buff, size_t size,
173	unsigned int use_unit_num, unsigned int log_unit, __u8 page_code,
174	unsigned char *scsi3addr, int cmd_type);
175static int sendcmd_withirq(__u8	cmd, int ctlr, void *buff, size_t size,
176	unsigned int use_unit_num, unsigned int log_unit, __u8	page_code,
177	int cmd_type);
178
179static void fail_all_cmds(unsigned long ctlr);
180
181#ifdef CONFIG_PROC_FS
182static int cciss_proc_get_info(char *buffer, char **start, off_t offset,
183		int length, int *eof, void *data);
184static void cciss_procinit(int i);
185#else
186static void cciss_procinit(int i) {}
187#endif /* CONFIG_PROC_FS */
188
189#ifdef CONFIG_COMPAT
190static long cciss_compat_ioctl(struct file *f, unsigned cmd, unsigned long arg);
191#endif
192
193static struct block_device_operations cciss_fops  = {
194	.owner		= THIS_MODULE,
195	.open		= cciss_open,
196	.release       	= cciss_release,
197        .ioctl		= cciss_ioctl,
198        .getgeo		= cciss_getgeo,
199#ifdef CONFIG_COMPAT
200	.compat_ioctl   = cciss_compat_ioctl,
201#endif
202	.revalidate_disk= cciss_revalidate,
203};
204
205/*
206 * Enqueuing and dequeuing functions for cmdlists.
207 */
208static inline void addQ(CommandList_struct **Qptr, CommandList_struct *c)
209{
210        if (*Qptr == NULL) {
211                *Qptr = c;
212                c->next = c->prev = c;
213        } else {
214                c->prev = (*Qptr)->prev;
215                c->next = (*Qptr);
216                (*Qptr)->prev->next = c;
217                (*Qptr)->prev = c;
218        }
219}
220
221static inline CommandList_struct *removeQ(CommandList_struct **Qptr,
222						CommandList_struct *c)
223{
224        if (c && c->next != c) {
225                if (*Qptr == c) *Qptr = c->next;
226                c->prev->next = c->next;
227                c->next->prev = c->prev;
228        } else {
229                *Qptr = NULL;
230        }
231        return c;
232}
233
234#include "cciss_scsi.c"		/* For SCSI tape support */
235
236#ifdef CONFIG_PROC_FS
237
238/*
239 * Report information about this controller.
240 */
241#define ENG_GIG 1000000000
242#define ENG_GIG_FACTOR (ENG_GIG/512)
243#define RAID_UNKNOWN 6
244static const char *raid_label[] = {"0","4","1(1+0)","5","5+1","ADG",
245	                                   "UNKNOWN"};
246
247static struct proc_dir_entry *proc_cciss;
248
249static int cciss_proc_get_info(char *buffer, char **start, off_t offset,
250		int length, int *eof, void *data)
251{
252        off_t pos = 0;
253        off_t len = 0;
254        int size, i, ctlr;
255        ctlr_info_t *h = (ctlr_info_t*)data;
256        drive_info_struct *drv;
257	unsigned long flags;
258        sector_t vol_sz, vol_sz_frac;
259
260        ctlr = h->ctlr;
261
262	/* prevent displaying bogus info during configuration
263	 * or deconfiguration of a logical volume
264	 */
265	spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
266	if (h->busy_configuring) {
267		spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
268	return -EBUSY;
269	}
270	h->busy_configuring = 1;
271	spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
272
273        size = sprintf(buffer, "%s: HP %s Controller\n"
274		"Board ID: 0x%08lx\n"
275		"Firmware Version: %c%c%c%c\n"
276		"IRQ: %d\n"
277		"Logical drives: %d\n"
278		"Current Q depth: %d\n"
279		"Current # commands on controller: %d\n"
280		"Max Q depth since init: %d\n"
281		"Max # commands on controller since init: %d\n"
282		"Max SG entries since init: %d\n\n",
283                h->devname,
284                h->product_name,
285                (unsigned long)h->board_id,
286		h->firm_ver[0], h->firm_ver[1], h->firm_ver[2], h->firm_ver[3],
287                (unsigned int)h->intr[SIMPLE_MODE_INT],
288                h->num_luns,
289		h->Qdepth, h->commands_outstanding,
290		h->maxQsinceinit, h->max_outstanding, h->maxSG);
291
292        pos += size; len += size;
293	cciss_proc_tape_report(ctlr, buffer, &pos, &len);
294	for(i=0; i<=h->highest_lun; i++) {
295
296                drv = &h->drv[i];
297		if (drv->heads == 0)
298			continue;
299
300		vol_sz = drv->nr_blocks;
301		vol_sz_frac = sector_div(vol_sz, ENG_GIG_FACTOR);
302		vol_sz_frac *= 100;
303		sector_div(vol_sz_frac, ENG_GIG_FACTOR);
304
305		if (drv->raid_level > 5)
306			drv->raid_level = RAID_UNKNOWN;
307		size = sprintf(buffer+len, "cciss/c%dd%d:"
308				"\t%4u.%02uGB\tRAID %s\n",
309				ctlr, i, (int)vol_sz, (int)vol_sz_frac,
310				raid_label[drv->raid_level]);
311                pos += size; len += size;
312        }
313
314        *eof = 1;
315        *start = buffer+offset;
316        len -= offset;
317        if (len>length)
318                len = length;
319	h->busy_configuring = 0;
320        return len;
321}
322
323static int
324cciss_proc_write(struct file *file, const char __user *buffer,
325			unsigned long count, void *data)
326{
327	unsigned char cmd[80];
328	int len;
329#ifdef CONFIG_CISS_SCSI_TAPE
330	ctlr_info_t *h = (ctlr_info_t *) data;
331	int rc;
332#endif
333
334	if (count > sizeof(cmd)-1) return -EINVAL;
335	if (copy_from_user(cmd, buffer, count)) return -EFAULT;
336	cmd[count] = '\0';
337	len = strlen(cmd);	// above 3 lines ensure safety
338	if (len && cmd[len-1] == '\n')
339		cmd[--len] = '\0';
340#	ifdef CONFIG_CISS_SCSI_TAPE
341		if (strcmp("engage scsi", cmd)==0) {
342			rc = cciss_engage_scsi(h->ctlr);
343			if (rc != 0) return -rc;
344			return count;
345		}
346		/* might be nice to have "disengage" too, but it's not
347		   safely possible. (only 1 module use count, lock issues.) */
348#	endif
349	return -EINVAL;
350}
351
352/*
353 * Get us a file in /proc/cciss that says something about each controller.
354 * Create /proc/cciss if it doesn't exist yet.
355 */
356static void __devinit cciss_procinit(int i)
357{
358	struct proc_dir_entry *pde;
359
360        if (proc_cciss == NULL) {
361                proc_cciss = proc_mkdir("cciss", proc_root_driver);
362                if (!proc_cciss)
363			return;
364        }
365
366	pde = create_proc_read_entry(hba[i]->devname,
367		S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH,
368		proc_cciss, cciss_proc_get_info, hba[i]);
369	pde->write_proc = cciss_proc_write;
370}
371#endif /* CONFIG_PROC_FS */
372
373/*
374 * For operations that cannot sleep, a command block is allocated at init,
375 * and managed by cmd_alloc() and cmd_free() using a simple bitmap to track
376 * which ones are free or in use.  For operations that can wait for kmalloc
377 * to possible sleep, this routine can be called with get_from_pool set to 0.
378 * cmd_free() MUST be called with a got_from_pool set to 0 if cmd_alloc was.
379 */
380static CommandList_struct * cmd_alloc(ctlr_info_t *h, int get_from_pool)
381{
382	CommandList_struct *c;
383	int i;
384	u64bit temp64;
385	dma_addr_t cmd_dma_handle, err_dma_handle;
386
387	if (!get_from_pool)
388	{
389		c = (CommandList_struct *) pci_alloc_consistent(
390			h->pdev, sizeof(CommandList_struct), &cmd_dma_handle);
391        	if(c==NULL)
392                 	return NULL;
393		memset(c, 0, sizeof(CommandList_struct));
394
395		c->cmdindex = -1;
396
397		c->err_info = (ErrorInfo_struct *)pci_alloc_consistent(
398					h->pdev, sizeof(ErrorInfo_struct),
399					&err_dma_handle);
400
401		if (c->err_info == NULL)
402		{
403			pci_free_consistent(h->pdev,
404				sizeof(CommandList_struct), c, cmd_dma_handle);
405			return NULL;
406		}
407		memset(c->err_info, 0, sizeof(ErrorInfo_struct));
408	} else /* get it out of the controllers pool */
409	{
410	     	do {
411                	i = find_first_zero_bit(h->cmd_pool_bits, NR_CMDS);
412                        if (i == NR_CMDS)
413                                return NULL;
414                } while(test_and_set_bit(i & (BITS_PER_LONG - 1), h->cmd_pool_bits+(i/BITS_PER_LONG)) != 0);
415#ifdef CCISS_DEBUG
416		printk(KERN_DEBUG "cciss: using command buffer %d\n", i);
417#endif
418                c = h->cmd_pool + i;
419		memset(c, 0, sizeof(CommandList_struct));
420		cmd_dma_handle = h->cmd_pool_dhandle
421					+ i*sizeof(CommandList_struct);
422		c->err_info = h->errinfo_pool + i;
423		memset(c->err_info, 0, sizeof(ErrorInfo_struct));
424		err_dma_handle = h->errinfo_pool_dhandle
425					+ i*sizeof(ErrorInfo_struct);
426                h->nr_allocs++;
427
428		c->cmdindex = i;
429        }
430
431	c->busaddr = (__u32) cmd_dma_handle;
432	temp64.val = (__u64) err_dma_handle;
433	c->ErrDesc.Addr.lower = temp64.val32.lower;
434	c->ErrDesc.Addr.upper = temp64.val32.upper;
435	c->ErrDesc.Len = sizeof(ErrorInfo_struct);
436
437	c->ctlr = h->ctlr;
438        return c;
439
440
441}
442
443/*
444 * Frees a command block that was previously allocated with cmd_alloc().
445 */
446static void cmd_free(ctlr_info_t *h, CommandList_struct *c, int got_from_pool)
447{
448	int i;
449	u64bit temp64;
450
451	if( !got_from_pool)
452	{
453		temp64.val32.lower = c->ErrDesc.Addr.lower;
454		temp64.val32.upper = c->ErrDesc.Addr.upper;
455		pci_free_consistent(h->pdev, sizeof(ErrorInfo_struct),
456			c->err_info, (dma_addr_t) temp64.val);
457		pci_free_consistent(h->pdev, sizeof(CommandList_struct),
458			c, (dma_addr_t) c->busaddr);
459	} else
460	{
461		i = c - h->cmd_pool;
462		clear_bit(i&(BITS_PER_LONG-1), h->cmd_pool_bits+(i/BITS_PER_LONG));
463                h->nr_frees++;
464        }
465}
466
467static inline ctlr_info_t *get_host(struct gendisk *disk)
468{
469	return disk->queue->queuedata;
470}
471
472static inline drive_info_struct *get_drv(struct gendisk *disk)
473{
474	return disk->private_data;
475}
476
477/*
478 * Open.  Make sure the device is really there.
479 */
480static int cciss_open(struct inode *inode, struct file *filep)
481{
482	ctlr_info_t *host = get_host(inode->i_bdev->bd_disk);
483	drive_info_struct *drv = get_drv(inode->i_bdev->bd_disk);
484
485#ifdef CCISS_DEBUG
486	printk(KERN_DEBUG "cciss_open %s\n", inode->i_bdev->bd_disk->disk_name);
487#endif /* CCISS_DEBUG */
488
489	if (host->busy_initializing || drv->busy_configuring)
490		return -EBUSY;
491	/*
492	 * Root is allowed to open raw volume zero even if it's not configured
493	 * so array config can still work. Root is also allowed to open any
494	 * volume that has a LUN ID, so it can issue IOCTL to reread the
495	 * disk information.  I don't think I really like this
496	 * but I'm already using way to many device nodes to claim another one
497	 * for "raw controller".
498	 */
499	if (drv->nr_blocks == 0) {
500		if (iminor(inode) != 0)	{ 	/* not node 0? */
501			/* if not node 0 make sure it is a partition = 0 */
502			if (iminor(inode) & 0x0f) {
503			return -ENXIO;
504				/* if it is, make sure we have a LUN ID */
505			} else if (drv->LunID == 0) {
506				return -ENXIO;
507			}
508		}
509		if (!capable(CAP_SYS_ADMIN))
510			return -EPERM;
511	}
512	drv->usage_count++;
513	host->usage_count++;
514	return 0;
515}
516/*
517 * Close.  Sync first.
518 */
519static int cciss_release(struct inode *inode, struct file *filep)
520{
521	ctlr_info_t *host = get_host(inode->i_bdev->bd_disk);
522	drive_info_struct *drv = get_drv(inode->i_bdev->bd_disk);
523
524#ifdef CCISS_DEBUG
525	printk(KERN_DEBUG "cciss_release %s\n", inode->i_bdev->bd_disk->disk_name);
526#endif /* CCISS_DEBUG */
527
528	drv->usage_count--;
529	host->usage_count--;
530	return 0;
531}
532
533#ifdef CONFIG_COMPAT
534
535static int do_ioctl(struct file *f, unsigned cmd, unsigned long arg)
536{
537	int ret;
538	lock_kernel();
539	ret = cciss_ioctl(f->f_dentry->d_inode, f, cmd, arg);
540	unlock_kernel();
541	return ret;
542}
543
544static int cciss_ioctl32_passthru(struct file *f, unsigned cmd, unsigned long arg);
545static int cciss_ioctl32_big_passthru(struct file *f, unsigned cmd, unsigned long arg);
546
547static long cciss_compat_ioctl(struct file *f, unsigned cmd, unsigned long arg)
548{
549	switch (cmd) {
550	case CCISS_GETPCIINFO:
551	case CCISS_GETINTINFO:
552	case CCISS_SETINTINFO:
553	case CCISS_GETNODENAME:
554	case CCISS_SETNODENAME:
555	case CCISS_GETHEARTBEAT:
556	case CCISS_GETBUSTYPES:
557	case CCISS_GETFIRMVER:
558	case CCISS_GETDRIVVER:
559	case CCISS_REVALIDVOLS:
560	case CCISS_DEREGDISK:
561	case CCISS_REGNEWDISK:
562	case CCISS_REGNEWD:
563	case CCISS_RESCANDISK:
564	case CCISS_GETLUNINFO:
565		return do_ioctl(f, cmd, arg);
566
567	case CCISS_PASSTHRU32:
568		return cciss_ioctl32_passthru(f, cmd, arg);
569	case CCISS_BIG_PASSTHRU32:
570		return cciss_ioctl32_big_passthru(f, cmd, arg);
571
572	default:
573		return -ENOIOCTLCMD;
574	}
575}
576
577static int cciss_ioctl32_passthru(struct file *f, unsigned cmd, unsigned long arg)
578{
579	IOCTL32_Command_struct __user *arg32 =
580		(IOCTL32_Command_struct __user *) arg;
581	IOCTL_Command_struct arg64;
582	IOCTL_Command_struct __user *p = compat_alloc_user_space(sizeof(arg64));
583	int err;
584	u32 cp;
585
586	err = 0;
587	err |= copy_from_user(&arg64.LUN_info, &arg32->LUN_info, sizeof(arg64.LUN_info));
588	err |= copy_from_user(&arg64.Request, &arg32->Request, sizeof(arg64.Request));
589	err |= copy_from_user(&arg64.error_info, &arg32->error_info, sizeof(arg64.error_info));
590	err |= get_user(arg64.buf_size, &arg32->buf_size);
591	err |= get_user(cp, &arg32->buf);
592	arg64.buf = compat_ptr(cp);
593	err |= copy_to_user(p, &arg64, sizeof(arg64));
594
595	if (err)
596		return -EFAULT;
597
598	err = do_ioctl(f, CCISS_PASSTHRU, (unsigned long) p);
599	if (err)
600		return err;
601	err |= copy_in_user(&arg32->error_info, &p->error_info, sizeof(arg32->error_info));
602	if (err)
603		return -EFAULT;
604	return err;
605}
606
607static int cciss_ioctl32_big_passthru(struct file *file, unsigned cmd, unsigned long arg)
608{
609	BIG_IOCTL32_Command_struct __user *arg32 =
610		(BIG_IOCTL32_Command_struct __user *) arg;
611	BIG_IOCTL_Command_struct arg64;
612	BIG_IOCTL_Command_struct __user *p = compat_alloc_user_space(sizeof(arg64));
613	int err;
614	u32 cp;
615
616	err = 0;
617	err |= copy_from_user(&arg64.LUN_info, &arg32->LUN_info, sizeof(arg64.LUN_info));
618	err |= copy_from_user(&arg64.Request, &arg32->Request, sizeof(arg64.Request));
619	err |= copy_from_user(&arg64.error_info, &arg32->error_info, sizeof(arg64.error_info));
620	err |= get_user(arg64.buf_size, &arg32->buf_size);
621	err |= get_user(arg64.malloc_size, &arg32->malloc_size);
622	err |= get_user(cp, &arg32->buf);
623	arg64.buf = compat_ptr(cp);
624	err |= copy_to_user(p, &arg64, sizeof(arg64));
625
626	if (err)
627		 return -EFAULT;
628
629	err = do_ioctl(file, CCISS_BIG_PASSTHRU, (unsigned long) p);
630	if (err)
631		return err;
632	err |= copy_in_user(&arg32->error_info, &p->error_info, sizeof(arg32->error_info));
633	if (err)
634		return -EFAULT;
635	return err;
636}
637#endif
638
639static int cciss_getgeo(struct block_device *bdev, struct hd_geometry *geo)
640{
641	drive_info_struct *drv = get_drv(bdev->bd_disk);
642
643	if (!drv->cylinders)
644		return -ENXIO;
645
646	geo->heads = drv->heads;
647	geo->sectors = drv->sectors;
648	geo->cylinders = drv->cylinders;
649	return 0;
650}
651
652/*
653 * ioctl
654 */
655static int cciss_ioctl(struct inode *inode, struct file *filep,
656		unsigned int cmd, unsigned long arg)
657{
658	struct block_device *bdev = inode->i_bdev;
659	struct gendisk *disk = bdev->bd_disk;
660	ctlr_info_t *host = get_host(disk);
661	drive_info_struct *drv = get_drv(disk);
662	int ctlr = host->ctlr;
663	void __user *argp = (void __user *)arg;
664
665#ifdef CCISS_DEBUG
666	printk(KERN_DEBUG "cciss_ioctl: Called with cmd=%x %lx\n", cmd, arg);
667#endif /* CCISS_DEBUG */
668
669	switch(cmd) {
670	case CCISS_GETPCIINFO:
671	{
672		cciss_pci_info_struct pciinfo;
673
674		if (!arg) return -EINVAL;
675		pciinfo.domain = pci_domain_nr(host->pdev->bus);
676		pciinfo.bus = host->pdev->bus->number;
677		pciinfo.dev_fn = host->pdev->devfn;
678		pciinfo.board_id = host->board_id;
679		if (copy_to_user(argp, &pciinfo,  sizeof( cciss_pci_info_struct )))
680			return  -EFAULT;
681		return(0);
682	}
683	case CCISS_GETINTINFO:
684	{
685		cciss_coalint_struct intinfo;
686		if (!arg) return -EINVAL;
687		intinfo.delay = readl(&host->cfgtable->HostWrite.CoalIntDelay);
688		intinfo.count = readl(&host->cfgtable->HostWrite.CoalIntCount);
689		if (copy_to_user(argp, &intinfo, sizeof( cciss_coalint_struct )))
690			return -EFAULT;
691                return(0);
692        }
693	case CCISS_SETINTINFO:
694        {
695                cciss_coalint_struct intinfo;
696		unsigned long flags;
697		int i;
698
699		if (!arg) return -EINVAL;
700		if (!capable(CAP_SYS_ADMIN)) return -EPERM;
701		if (copy_from_user(&intinfo, argp, sizeof( cciss_coalint_struct)))
702			return -EFAULT;
703		if ( (intinfo.delay == 0 ) && (intinfo.count == 0))
704
705		{
706//			printk("cciss_ioctl: delay and count cannot be 0\n");
707			return( -EINVAL);
708		}
709		spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
710		/* Update the field, and then ring the doorbell */
711		writel( intinfo.delay,
712			&(host->cfgtable->HostWrite.CoalIntDelay));
713		writel( intinfo.count,
714                        &(host->cfgtable->HostWrite.CoalIntCount));
715		writel( CFGTBL_ChangeReq, host->vaddr + SA5_DOORBELL);
716
717		for(i=0;i<MAX_IOCTL_CONFIG_WAIT;i++) {
718			if (!(readl(host->vaddr + SA5_DOORBELL)
719					& CFGTBL_ChangeReq))
720				break;
721			/* delay and try again */
722			udelay(1000);
723		}
724		spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
725		if (i >= MAX_IOCTL_CONFIG_WAIT)
726			return -EAGAIN;
727                return(0);
728        }
729	case CCISS_GETNODENAME:
730        {
731                NodeName_type NodeName;
732		int i;
733
734		if (!arg) return -EINVAL;
735		for(i=0;i<16;i++)
736			NodeName[i] = readb(&host->cfgtable->ServerName[i]);
737                if (copy_to_user(argp, NodeName, sizeof( NodeName_type)))
738                	return  -EFAULT;
739                return(0);
740        }
741	case CCISS_SETNODENAME:
742	{
743		NodeName_type NodeName;
744		unsigned long flags;
745		int i;
746
747		if (!arg) return -EINVAL;
748		if (!capable(CAP_SYS_ADMIN)) return -EPERM;
749
750		if (copy_from_user(NodeName, argp, sizeof( NodeName_type)))
751			return -EFAULT;
752
753		spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
754
755			/* Update the field, and then ring the doorbell */
756		for(i=0;i<16;i++)
757			writeb( NodeName[i], &host->cfgtable->ServerName[i]);
758
759		writel( CFGTBL_ChangeReq, host->vaddr + SA5_DOORBELL);
760
761		for(i=0;i<MAX_IOCTL_CONFIG_WAIT;i++) {
762			if (!(readl(host->vaddr + SA5_DOORBELL)
763					& CFGTBL_ChangeReq))
764				break;
765			/* delay and try again */
766			udelay(1000);
767		}
768		spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
769		if (i >= MAX_IOCTL_CONFIG_WAIT)
770			return -EAGAIN;
771                return(0);
772        }
773
774	case CCISS_GETHEARTBEAT:
775        {
776                Heartbeat_type heartbeat;
777
778		if (!arg) return -EINVAL;
779                heartbeat = readl(&host->cfgtable->HeartBeat);
780                if (copy_to_user(argp, &heartbeat, sizeof( Heartbeat_type)))
781                	return -EFAULT;
782                return(0);
783        }
784	case CCISS_GETBUSTYPES:
785        {
786                BusTypes_type BusTypes;
787
788		if (!arg) return -EINVAL;
789                BusTypes = readl(&host->cfgtable->BusTypes);
790                if (copy_to_user(argp, &BusTypes, sizeof( BusTypes_type) ))
791                	return  -EFAULT;
792                return(0);
793        }
794	case CCISS_GETFIRMVER:
795        {
796		FirmwareVer_type firmware;
797
798		if (!arg) return -EINVAL;
799		memcpy(firmware, host->firm_ver, 4);
800
801                if (copy_to_user(argp, firmware, sizeof( FirmwareVer_type)))
802                	return -EFAULT;
803                return(0);
804        }
805        case CCISS_GETDRIVVER:
806        {
807		DriverVer_type DriverVer = DRIVER_VERSION;
808
809                if (!arg) return -EINVAL;
810
811                if (copy_to_user(argp, &DriverVer, sizeof( DriverVer_type) ))
812                	return -EFAULT;
813                return(0);
814        }
815
816	case CCISS_REVALIDVOLS:
817		if (bdev != bdev->bd_contains || drv != host->drv)
818			return -ENXIO;
819                return revalidate_allvol(host);
820
821 	case CCISS_GETLUNINFO: {
822 		LogvolInfo_struct luninfo;
823
824 		luninfo.LunID = drv->LunID;
825 		luninfo.num_opens = drv->usage_count;
826 		luninfo.num_parts = 0;
827 		if (copy_to_user(argp, &luninfo,
828 				sizeof(LogvolInfo_struct)))
829 			return -EFAULT;
830 		return(0);
831 	}
832	case CCISS_DEREGDISK:
833		return rebuild_lun_table(host, disk);
834
835	case CCISS_REGNEWD:
836		return rebuild_lun_table(host, NULL);
837
838	case CCISS_PASSTHRU:
839	{
840		IOCTL_Command_struct iocommand;
841		CommandList_struct *c;
842		char 	*buff = NULL;
843		u64bit	temp64;
844		unsigned long flags;
845		DECLARE_COMPLETION(wait);
846
847		if (!arg) return -EINVAL;
848
849		if (!capable(CAP_SYS_RAWIO)) return -EPERM;
850
851		if (copy_from_user(&iocommand, argp, sizeof( IOCTL_Command_struct) ))
852			return -EFAULT;
853		if((iocommand.buf_size < 1) &&
854				(iocommand.Request.Type.Direction != XFER_NONE))
855		{
856			return -EINVAL;
857		}
858#if 0 /* 'buf_size' member is 16-bits, and always smaller than kmalloc limit */
859		/* Check kmalloc limits */
860		if(iocommand.buf_size > 128000)
861			return -EINVAL;
862#endif
863		if(iocommand.buf_size > 0)
864		{
865			buff =  kmalloc(iocommand.buf_size, GFP_KERNEL);
866			if( buff == NULL)
867				return -EFAULT;
868		}
869		if (iocommand.Request.Type.Direction == XFER_WRITE)
870		{
871			/* Copy the data into the buffer we created */
872			if (copy_from_user(buff, iocommand.buf, iocommand.buf_size))
873			{
874				kfree(buff);
875				return -EFAULT;
876			}
877		} else {
878			memset(buff, 0, iocommand.buf_size);
879		}
880		if ((c = cmd_alloc(host , 0)) == NULL)
881		{
882			kfree(buff);
883			return -ENOMEM;
884		}
885			// Fill in the command type
886		c->cmd_type = CMD_IOCTL_PEND;
887			// Fill in Command Header
888		c->Header.ReplyQueue = 0;  // unused in simple mode
889		if( iocommand.buf_size > 0) 	// buffer to fill
890		{
891			c->Header.SGList = 1;
892			c->Header.SGTotal= 1;
893		} else	// no buffers to fill
894		{
895			c->Header.SGList = 0;
896                	c->Header.SGTotal= 0;
897		}
898		c->Header.LUN = iocommand.LUN_info;
899		c->Header.Tag.lower = c->busaddr;  // use the kernel address the cmd block for tag
900
901		// Fill in Request block
902		c->Request = iocommand.Request;
903
904		// Fill in the scatter gather information
905		if (iocommand.buf_size > 0 )
906		{
907			temp64.val = pci_map_single( host->pdev, buff,
908                                        iocommand.buf_size,
909                                PCI_DMA_BIDIRECTIONAL);
910			c->SG[0].Addr.lower = temp64.val32.lower;
911			c->SG[0].Addr.upper = temp64.val32.upper;
912			c->SG[0].Len = iocommand.buf_size;
913			c->SG[0].Ext = 0;  // we are not chaining
914		}
915		c->waiting = &wait;
916
917		/* Put the request on the tail of the request queue */
918		spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
919		addQ(&host->reqQ, c);
920		host->Qdepth++;
921		start_io(host);
922		spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
923
924		wait_for_completion(&wait);
925
926		/* unlock the buffers from DMA */
927		temp64.val32.lower = c->SG[0].Addr.lower;
928                temp64.val32.upper = c->SG[0].Addr.upper;
929                pci_unmap_single( host->pdev, (dma_addr_t) temp64.val,
930                	iocommand.buf_size, PCI_DMA_BIDIRECTIONAL);
931
932		/* Copy the error information out */
933		iocommand.error_info = *(c->err_info);
934		if ( copy_to_user(argp, &iocommand, sizeof( IOCTL_Command_struct) ) )
935		{
936			kfree(buff);
937			cmd_free(host, c, 0);
938			return( -EFAULT);
939		}
940
941		if (iocommand.Request.Type.Direction == XFER_READ)
942                {
943                        /* Copy the data out of the buffer we created */
944                        if (copy_to_user(iocommand.buf, buff, iocommand.buf_size))
945			{
946                        	kfree(buff);
947				cmd_free(host, c, 0);
948				return -EFAULT;
949			}
950                }
951                kfree(buff);
952		cmd_free(host, c, 0);
953                return(0);
954	}
955	case CCISS_BIG_PASSTHRU: {
956		BIG_IOCTL_Command_struct *ioc;
957		CommandList_struct *c;
958		unsigned char **buff = NULL;
959		int	*buff_size = NULL;
960		u64bit	temp64;
961		unsigned long flags;
962		BYTE sg_used = 0;
963		int status = 0;
964		int i;
965		DECLARE_COMPLETION(wait);
966		__u32   left;
967		__u32	sz;
968		BYTE    __user *data_ptr;
969
970		if (!arg)
971			return -EINVAL;
972		if (!capable(CAP_SYS_RAWIO))
973			return -EPERM;
974		ioc = (BIG_IOCTL_Command_struct *)
975			kmalloc(sizeof(*ioc), GFP_KERNEL);
976		if (!ioc) {
977			status = -ENOMEM;
978			goto cleanup1;
979		}
980		if (copy_from_user(ioc, argp, sizeof(*ioc))) {
981			status = -EFAULT;
982			goto cleanup1;
983		}
984		if ((ioc->buf_size < 1) &&
985			(ioc->Request.Type.Direction != XFER_NONE)) {
986				status = -EINVAL;
987				goto cleanup1;
988		}
989		/* Check kmalloc limits  using all SGs */
990		if (ioc->malloc_size > MAX_KMALLOC_SIZE) {
991			status = -EINVAL;
992			goto cleanup1;
993		}
994		if (ioc->buf_size > ioc->malloc_size * MAXSGENTRIES) {
995			status = -EINVAL;
996			goto cleanup1;
997		}
998		buff = (unsigned char **) kmalloc(MAXSGENTRIES *
999				sizeof(char *), GFP_KERNEL);
1000		if (!buff) {
1001			status = -ENOMEM;
1002			goto cleanup1;
1003		}
1004		memset(buff, 0, MAXSGENTRIES);
1005		buff_size = (int *) kmalloc(MAXSGENTRIES * sizeof(int),
1006					GFP_KERNEL);
1007		if (!buff_size) {
1008			status = -ENOMEM;
1009			goto cleanup1;
1010		}
1011		left = ioc->buf_size;
1012		data_ptr = ioc->buf;
1013		while (left) {
1014			sz = (left > ioc->malloc_size) ? ioc->malloc_size : left;
1015			buff_size[sg_used] = sz;
1016			buff[sg_used] = kmalloc(sz, GFP_KERNEL);
1017			if (buff[sg_used] == NULL) {
1018				status = -ENOMEM;
1019				goto cleanup1;
1020			}
1021			if (ioc->Request.Type.Direction == XFER_WRITE) {
1022				if (copy_from_user(buff[sg_used], data_ptr, sz)) {
1023					status = -ENOMEM;
1024					goto cleanup1;
1025				}
1026			} else {
1027				memset(buff[sg_used], 0, sz);
1028			}
1029			left -= sz;
1030			data_ptr += sz;
1031			sg_used++;
1032		}
1033		if ((c = cmd_alloc(host , 0)) == NULL) {
1034			status = -ENOMEM;
1035			goto cleanup1;
1036		}
1037		c->cmd_type = CMD_IOCTL_PEND;
1038		c->Header.ReplyQueue = 0;
1039
1040		if( ioc->buf_size > 0) {
1041			c->Header.SGList = sg_used;
1042			c->Header.SGTotal= sg_used;
1043		} else {
1044			c->Header.SGList = 0;
1045			c->Header.SGTotal= 0;
1046		}
1047		c->Header.LUN = ioc->LUN_info;
1048		c->Header.Tag.lower = c->busaddr;
1049
1050		c->Request = ioc->Request;
1051		if (ioc->buf_size > 0 ) {
1052			int i;
1053			for(i=0; i<sg_used; i++) {
1054				temp64.val = pci_map_single( host->pdev, buff[i],
1055					buff_size[i],
1056					PCI_DMA_BIDIRECTIONAL);
1057				c->SG[i].Addr.lower = temp64.val32.lower;
1058				c->SG[i].Addr.upper = temp64.val32.upper;
1059				c->SG[i].Len = buff_size[i];
1060				c->SG[i].Ext = 0;  /* we are not chaining */
1061			}
1062		}
1063		c->waiting = &wait;
1064		/* Put the request on the tail of the request queue */
1065		spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
1066		addQ(&host->reqQ, c);
1067		host->Qdepth++;
1068		start_io(host);
1069		spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
1070		wait_for_completion(&wait);
1071		/* unlock the buffers from DMA */
1072		for(i=0; i<sg_used; i++) {
1073			temp64.val32.lower = c->SG[i].Addr.lower;
1074			temp64.val32.upper = c->SG[i].Addr.upper;
1075			pci_unmap_single( host->pdev, (dma_addr_t) temp64.val,
1076				buff_size[i], PCI_DMA_BIDIRECTIONAL);
1077		}
1078		/* Copy the error information out */
1079		ioc->error_info = *(c->err_info);
1080		if (copy_to_user(argp, ioc, sizeof(*ioc))) {
1081			cmd_free(host, c, 0);
1082			status = -EFAULT;
1083			goto cleanup1;
1084		}
1085		if (ioc->Request.Type.Direction == XFER_READ) {
1086			/* Copy the data out of the buffer we created */
1087			BYTE __user *ptr = ioc->buf;
1088	        	for(i=0; i< sg_used; i++) {
1089				if (copy_to_user(ptr, buff[i], buff_size[i])) {
1090					cmd_free(host, c, 0);
1091					status = -EFAULT;
1092					goto cleanup1;
1093				}
1094				ptr += buff_size[i];
1095			}
1096		}
1097		cmd_free(host, c, 0);
1098		status = 0;
1099cleanup1:
1100		if (buff) {
1101			for(i=0; i<sg_used; i++)
1102				kfree(buff[i]);
1103			kfree(buff);
1104		}
1105		kfree(buff_size);
1106		kfree(ioc);
1107		return(status);
1108	}
1109	default:
1110		return -ENOTTY;
1111	}
1112
1113}
1114
1115/*
1116 * revalidate_allvol is for online array config utilities.  After a
1117 * utility reconfigures the drives in the array, it can use this function
1118 * (through an ioctl) to make the driver zap any previous disk structs for
1119 * that controller and get new ones.
1120 *
1121 * Right now I'm using the getgeometry() function to do this, but this
1122 * function should probably be finer grained and allow you to revalidate one
1123 * particualar logical volume (instead of all of them on a particular
1124 * controller).
1125 */
1126static int revalidate_allvol(ctlr_info_t *host)
1127{
1128	int ctlr = host->ctlr, i;
1129	unsigned long flags;
1130
1131        spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
1132        if (host->usage_count > 1) {
1133                spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
1134                printk(KERN_WARNING "cciss: Device busy for volume"
1135                        " revalidation (usage=%d)\n", host->usage_count);
1136                return -EBUSY;
1137        }
1138        host->usage_count++;
1139	spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
1140
1141	for(i=0; i< NWD; i++) {
1142		struct gendisk *disk = host->gendisk[i];
1143		if (disk) {
1144			request_queue_t *q = disk->queue;
1145
1146			if (disk->flags & GENHD_FL_UP)
1147				del_gendisk(disk);
1148			if (q)
1149				blk_cleanup_queue(q);
1150		}
1151	}
1152
1153        /*
1154         * Set the partition and block size structures for all volumes
1155         * on this controller to zero.  We will reread all of this data
1156         */
1157        memset(host->drv,        0, sizeof(drive_info_struct)
1158						* CISS_MAX_LUN);
1159        /*
1160         * Tell the array controller not to give us any interrupts while
1161         * we check the new geometry.  Then turn interrupts back on when
1162         * we're done.
1163         */
1164        host->access.set_intr_mask(host, CCISS_INTR_OFF);
1165        cciss_getgeometry(ctlr);
1166        host->access.set_intr_mask(host, CCISS_INTR_ON);
1167
1168	/* Loop through each real device */
1169	for (i = 0; i < NWD; i++) {
1170		struct gendisk *disk = host->gendisk[i];
1171		drive_info_struct *drv = &(host->drv[i]);
1172		/* we must register the controller even if no disks exist */
1173		/* this is for the online array utilities */
1174		if (!drv->heads && i)
1175			continue;
1176		blk_queue_hardsect_size(drv->queue, drv->block_size);
1177		set_capacity(disk, drv->nr_blocks);
1178		add_disk(disk);
1179	}
1180        host->usage_count--;
1181        return 0;
1182}
1183
1184/* This function will check the usage_count of the drive to be updated/added.
1185 * If the usage_count is zero then the drive information will be updated and
1186 * the disk will be re-registered with the kernel.  If not then it will be
1187 * left alone for the next reboot.  The exception to this is disk 0 which
1188 * will always be left registered with the kernel since it is also the
1189 * controller node.  Any changes to disk 0 will show up on the next
1190 * reboot.
1191*/
1192static void cciss_update_drive_info(int ctlr, int drv_index)
1193  {
1194	ctlr_info_t *h = hba[ctlr];
1195	struct gendisk *disk;
1196	ReadCapdata_struct *size_buff = NULL;
1197	InquiryData_struct *inq_buff = NULL;
1198	unsigned int block_size;
1199	unsigned int total_size;
1200	unsigned long flags = 0;
1201	int ret = 0;
1202
1203	/* if the disk already exists then deregister it before proceeding*/
1204	if (h->drv[drv_index].raid_level != -1){
1205		spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
1206		h->drv[drv_index].busy_configuring = 1;
1207		spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
1208		ret = deregister_disk(h->gendisk[drv_index],
1209			&h->drv[drv_index], 0);
1210		h->drv[drv_index].busy_configuring = 0;
1211	}
1212
1213	/* If the disk is in use return */
1214	if (ret)
1215		return;
1216
1217
1218	/* Get information about the disk and modify the driver sturcture */
1219	size_buff = kmalloc(sizeof( ReadCapdata_struct), GFP_KERNEL);
1220        if (size_buff == NULL)
1221		goto mem_msg;
1222	inq_buff = kmalloc(sizeof( InquiryData_struct), GFP_KERNEL);
1223	if (inq_buff == NULL)
1224		goto mem_msg;
1225
1226	cciss_read_capacity(ctlr, drv_index, size_buff, 1,
1227		&total_size, &block_size);
1228	cciss_geometry_inquiry(ctlr, drv_index, 1, total_size, block_size,
1229		inq_buff, &h->drv[drv_index]);
1230
1231	++h->num_luns;
1232	disk = h->gendisk[drv_index];
1233	set_capacity(disk, h->drv[drv_index].nr_blocks);
1234
1235
1236	/* if it's the controller it's already added */
1237	if (drv_index){
1238		disk->queue = blk_init_queue(do_cciss_request, &h->lock);
1239
1240		/* Set up queue information */
1241		disk->queue->backing_dev_info.ra_pages = READ_AHEAD;
1242		blk_queue_bounce_limit(disk->queue, hba[ctlr]->pdev->dma_mask);
1243
1244		/* This is a hardware imposed limit. */
1245		blk_queue_max_hw_segments(disk->queue, MAXSGENTRIES);
1246
1247		/* This is a limit in the driver and could be eliminated. */
1248		blk_queue_max_phys_segments(disk->queue, MAXSGENTRIES);
1249
1250		blk_queue_max_sectors(disk->queue, 512);
1251
1252		disk->queue->queuedata = hba[ctlr];
1253
1254		blk_queue_hardsect_size(disk->queue,
1255			hba[ctlr]->drv[drv_index].block_size);
1256
1257		h->drv[drv_index].queue = disk->queue;
1258		add_disk(disk);
1259	}
1260
1261freeret:
1262	kfree(size_buff);
1263	kfree(inq_buff);
1264	return;
1265mem_msg:
1266	printk(KERN_ERR "cciss: out of memory\n");
1267	goto freeret;
1268}
1269
1270/* This function will find the first index of the controllers drive array
1271 * that has a -1 for the raid_level and will return that index.  This is
1272 * where new drives will be added.  If the index to be returned is greater
1273 * than the highest_lun index for the controller then highest_lun is set
1274 * to this new index.  If there are no available indexes then -1 is returned.
1275*/
1276static int cciss_find_free_drive_index(int ctlr)
1277{
1278	int i;
1279
1280	for (i=0; i < CISS_MAX_LUN; i++){
1281		if (hba[ctlr]->drv[i].raid_level == -1){
1282			if (i > hba[ctlr]->highest_lun)
1283				hba[ctlr]->highest_lun = i;
1284			return i;
1285		}
1286	}
1287	return -1;
1288}
1289
1290/* This function will add and remove logical drives from the Logical
1291 * drive array of the controller and maintain persistancy of ordering
1292 * so that mount points are preserved until the next reboot.  This allows
1293 * for the removal of logical drives in the middle of the drive array
1294 * without a re-ordering of those drives.
1295 * INPUT
1296 * h		= The controller to perform the operations on
1297 * del_disk	= The disk to remove if specified.  If the value given
1298 *		  is NULL then no disk is removed.
1299*/
1300static int rebuild_lun_table(ctlr_info_t *h, struct gendisk *del_disk)
1301{
1302	int ctlr = h->ctlr;
1303	int num_luns;
1304	ReportLunData_struct *ld_buff = NULL;
1305	drive_info_struct *drv = NULL;
1306	int return_code;
1307	int listlength = 0;
1308	int i;
1309	int drv_found;
1310	int drv_index = 0;
1311	__u32 lunid = 0;
1312	unsigned long flags;
1313
1314	/* Set busy_configuring flag for this operation */
1315	spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
1316	if (h->num_luns >= CISS_MAX_LUN){
1317		spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
1318		return -EINVAL;
1319	}
1320
1321	if (h->busy_configuring){
1322		spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
1323		return -EBUSY;
1324	}
1325	h->busy_configuring = 1;
1326
1327	/* if del_disk is NULL then we are being called to add a new disk
1328	 * and update the logical drive table.  If it is not NULL then
1329	 * we will check if the disk is in use or not.
1330	 */
1331	if (del_disk != NULL){
1332		drv = get_drv(del_disk);
1333		drv->busy_configuring = 1;
1334		spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
1335		return_code = deregister_disk(del_disk, drv, 1);
1336		drv->busy_configuring = 0;
1337		h->busy_configuring = 0;
1338		return return_code;
1339	} else {
1340		spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
1341		if (!capable(CAP_SYS_RAWIO))
1342			return -EPERM;
1343
1344		ld_buff = kzalloc(sizeof(ReportLunData_struct), GFP_KERNEL);
1345		if (ld_buff == NULL)
1346			goto mem_msg;
1347
1348		return_code = sendcmd_withirq(CISS_REPORT_LOG, ctlr, ld_buff,
1349				sizeof(ReportLunData_struct), 0, 0, 0,
1350				TYPE_CMD);
1351
1352		if (return_code == IO_OK){
1353			listlength |= (0xff & (unsigned int)(ld_buff->LUNListLength[0])) << 24;
1354			listlength |= (0xff & (unsigned int)(ld_buff->LUNListLength[1])) << 16;
1355			listlength |= (0xff & (unsigned int)(ld_buff->LUNListLength[2])) << 8;
1356			listlength |= 0xff & (unsigned int)(ld_buff->LUNListLength[3]);
1357		} else{ /* reading number of logical volumes failed */
1358			printk(KERN_WARNING "cciss: report logical volume"
1359				" command failed\n");
1360			listlength = 0;
1361			goto freeret;
1362		}
1363
1364		num_luns = listlength / 8;	/* 8 bytes per entry */
1365		if (num_luns > CISS_MAX_LUN){
1366			num_luns = CISS_MAX_LUN;
1367			printk(KERN_WARNING "cciss: more luns configured"
1368				" on controller than can be handled by"
1369				" this driver.\n");
1370		}
1371
1372		/* Compare controller drive array to drivers drive array.
1373	 	* Check for updates in the drive information and any new drives
1374	 	* on the controller.
1375	 	*/
1376		for (i=0; i < num_luns; i++){
1377			int j;
1378
1379			drv_found = 0;
1380
1381	  		lunid = (0xff &
1382				(unsigned int)(ld_buff->LUN[i][3])) << 24;
1383        		lunid |= (0xff &
1384				(unsigned int)(ld_buff->LUN[i][2])) << 16;
1385        		lunid |= (0xff &
1386				(unsigned int)(ld_buff->LUN[i][1])) << 8;
1387        		lunid |= 0xff &
1388				(unsigned int)(ld_buff->LUN[i][0]);
1389
1390			/* Find if the LUN is already in the drive array
1391			 * of the controller.  If so then update its info
1392			 * if not is use.  If it does not exist then find
1393			 * the first free index and add it.
1394			*/
1395			for (j=0; j <= h->highest_lun; j++){
1396				if (h->drv[j].LunID == lunid){
1397					drv_index = j;
1398					drv_found = 1;
1399				}
1400			}
1401
1402			/* check if the drive was found already in the array */
1403			if (!drv_found){
1404				drv_index = cciss_find_free_drive_index(ctlr);
1405				if (drv_index == -1)
1406					goto freeret;
1407
1408			}
1409			h->drv[drv_index].LunID = lunid;
1410			cciss_update_drive_info(ctlr, drv_index);
1411		} /* end for */
1412	} /* end else */
1413
1414freeret:
1415	kfree(ld_buff);
1416	h->busy_configuring = 0;
1417	/* We return -1 here to tell the ACU that we have registered/updated
1418	 * all of the drives that we can and to keep it from calling us
1419	 * additional times.
1420	*/
1421	return -1;
1422mem_msg:
1423	printk(KERN_ERR "cciss: out of memory\n");
1424	goto freeret;
1425}
1426
1427/* This function will deregister the disk and it's queue from the
1428 * kernel.  It must be called with the controller lock held and the
1429 * drv structures busy_configuring flag set.  It's parameters are:
1430 *
1431 * disk = This is the disk to be deregistered
1432 * drv  = This is the drive_info_struct associated with the disk to be
1433 *        deregistered.  It contains information about the disk used
1434 *        by the driver.
1435 * clear_all = This flag determines whether or not the disk information
1436 *             is going to be completely cleared out and the highest_lun
1437 *             reset.  Sometimes we want to clear out information about
1438 *             the disk in preperation for re-adding it.  In this case
1439 *             the highest_lun should be left unchanged and the LunID
1440 *             should not be cleared.
1441*/
1442static int deregister_disk(struct gendisk *disk, drive_info_struct *drv,
1443			   int clear_all)
1444{
1445	ctlr_info_t *h = get_host(disk);
1446
1447	if (!capable(CAP_SYS_RAWIO))
1448		return -EPERM;
1449
1450	/* make sure logical volume is NOT is use */
1451	if(clear_all || (h->gendisk[0] == disk)) {
1452	if (drv->usage_count > 1)
1453                return -EBUSY;
1454	}
1455        else
1456        	if( drv->usage_count > 0 )
1457                	return -EBUSY;
1458
1459	/* invalidate the devices and deregister the disk.  If it is disk
1460	 * zero do not deregister it but just zero out it's values.  This
1461	 * allows us to delete disk zero but keep the controller registered.
1462	*/
1463	if (h->gendisk[0] != disk){
1464		if (disk) {
1465			request_queue_t *q = disk->queue;
1466			if (disk->flags & GENHD_FL_UP)
1467				del_gendisk(disk);
1468			if (q) {
1469				blk_cleanup_queue(q);
1470				drv->queue = NULL;
1471			}
1472		}
1473	}
1474
1475	--h->num_luns;
1476	/* zero out the disk size info */
1477	drv->nr_blocks = 0;
1478	drv->block_size = 0;
1479	drv->heads = 0;
1480	drv->sectors = 0;
1481	drv->cylinders = 0;
1482	drv->raid_level = -1;	/* This can be used as a flag variable to
1483				 * indicate that this element of the drive
1484				 * array is free.
1485				*/
1486
1487	if (clear_all){
1488	/* check to see if it was the last disk */
1489	if (drv == h->drv + h->highest_lun) {
1490		/* if so, find the new hightest lun */
1491		int i, newhighest =-1;
1492		for(i=0; i<h->highest_lun; i++) {
1493			/* if the disk has size > 0, it is available */
1494				if (h->drv[i].heads)
1495				newhighest = i;
1496		}
1497		h->highest_lun = newhighest;
1498	}
1499
1500	drv->LunID = 0;
1501	}
1502	return(0);
1503}
1504
1505static int fill_cmd(CommandList_struct *c, __u8 cmd, int ctlr, void *buff,
1506	size_t size,
1507	unsigned int use_unit_num, /* 0: address the controller,
1508				      1: address logical volume log_unit,
1509				      2: periph device address is scsi3addr */
1510	unsigned int log_unit, __u8 page_code, unsigned char *scsi3addr,
1511	int cmd_type)
1512{
1513	ctlr_info_t *h= hba[ctlr];
1514	u64bit buff_dma_handle;
1515	int status = IO_OK;
1516
1517	c->cmd_type = CMD_IOCTL_PEND;
1518	c->Header.ReplyQueue = 0;
1519	if( buff != NULL) {
1520		c->Header.SGList = 1;
1521		c->Header.SGTotal= 1;
1522	} else {
1523		c->Header.SGList = 0;
1524                c->Header.SGTotal= 0;
1525	}
1526	c->Header.Tag.lower = c->busaddr;
1527
1528	c->Request.Type.Type = cmd_type;
1529	if (cmd_type == TYPE_CMD) {
1530		switch(cmd) {
1531		case  CISS_INQUIRY:
1532			/* If the logical unit number is 0 then, this is going
1533			to controller so It's a physical command
1534			mode = 0 target = 0.  So we have nothing to write.
1535			otherwise, if use_unit_num == 1,
1536			mode = 1(volume set addressing) target = LUNID
1537			otherwise, if use_unit_num == 2,
1538			mode = 0(periph dev addr) target = scsi3addr */
1539			if (use_unit_num == 1) {
1540				c->Header.LUN.LogDev.VolId=
1541					h->drv[log_unit].LunID;
1542                        	c->Header.LUN.LogDev.Mode = 1;
1543			} else if (use_unit_num == 2) {
1544				memcpy(c->Header.LUN.LunAddrBytes,scsi3addr,8);
1545				c->Header.LUN.LogDev.Mode = 0;
1546			}
1547			/* are we trying to read a vital product page */
1548			if(page_code != 0) {
1549				c->Request.CDB[1] = 0x01;
1550				c->Request.CDB[2] = page_code;
1551			}
1552			c->Request.CDBLen = 6;
1553			c->Request.Type.Attribute = ATTR_SIMPLE;
1554			c->Request.Type.Direction = XFER_READ;
1555			c->Request.Timeout = 0;
1556			c->Request.CDB[0] =  CISS_INQUIRY;
1557			c->Request.CDB[4] = size  & 0xFF;
1558		break;
1559		case CISS_REPORT_LOG:
1560		case CISS_REPORT_PHYS:
1561                        /* Talking to controller so It's a physical command
1562			   mode = 00 target = 0.  Nothing to write.
1563                        */
1564			c->Request.CDBLen = 12;
1565			c->Request.Type.Attribute = ATTR_SIMPLE;
1566			c->Request.Type.Direction = XFER_READ;
1567			c->Request.Timeout = 0;
1568			c->Request.CDB[0] = cmd;
1569			c->Request.CDB[6] = (size >> 24) & 0xFF;  //MSB
1570			c->Request.CDB[7] = (size >> 16) & 0xFF;
1571			c->Request.CDB[8] = (size >> 8) & 0xFF;
1572			c->Request.CDB[9] = size & 0xFF;
1573			break;
1574
1575		case CCISS_READ_CAPACITY:
1576			c->Header.LUN.LogDev.VolId = h->drv[log_unit].LunID;
1577			c->Header.LUN.LogDev.Mode = 1;
1578			c->Request.CDBLen = 10;
1579			c->Request.Type.Attribute = ATTR_SIMPLE;
1580			c->Request.Type.Direction = XFER_READ;
1581			c->Request.Timeout = 0;
1582			c->Request.CDB[0] = cmd;
1583		break;
1584		case CCISS_CACHE_FLUSH:
1585			c->Request.CDBLen = 12;
1586			c->Request.Type.Attribute = ATTR_SIMPLE;
1587			c->Request.Type.Direction = XFER_WRITE;
1588			c->Request.Timeout = 0;
1589			c->Request.CDB[0] = BMIC_WRITE;
1590			c->Request.CDB[6] = BMIC_CACHE_FLUSH;
1591		break;
1592		default:
1593			printk(KERN_WARNING
1594				"cciss%d:  Unknown Command 0x%c\n", ctlr, cmd);
1595			return(IO_ERROR);
1596		}
1597	} else if (cmd_type == TYPE_MSG) {
1598		switch (cmd) {
1599		case 0: /* ABORT message */
1600			c->Request.CDBLen = 12;
1601			c->Request.Type.Attribute = ATTR_SIMPLE;
1602			c->Request.Type.Direction = XFER_WRITE;
1603			c->Request.Timeout = 0;
1604			c->Request.CDB[0] = cmd; /* abort */
1605			c->Request.CDB[1] = 0;   /* abort a command */
1606			/* buff contains the tag of the command to abort */
1607			memcpy(&c->Request.CDB[4], buff, 8);
1608			break;
1609		case 1: /* RESET message */
1610			c->Request.CDBLen = 12;
1611			c->Request.Type.Attribute = ATTR_SIMPLE;
1612			c->Request.Type.Direction = XFER_WRITE;
1613			c->Request.Timeout = 0;
1614			memset(&c->Request.CDB[0], 0, sizeof(c->Request.CDB));
1615			c->Request.CDB[0] = cmd;  /* reset */
1616			c->Request.CDB[1] = 0x04; /* reset a LUN */
1617		case 3:	/* No-Op message */
1618			c->Request.CDBLen = 1;
1619			c->Request.Type.Attribute = ATTR_SIMPLE;
1620			c->Request.Type.Direction = XFER_WRITE;
1621			c->Request.Timeout = 0;
1622			c->Request.CDB[0] = cmd;
1623			break;
1624		default:
1625			printk(KERN_WARNING
1626				"cciss%d: unknown message type %d\n",
1627				ctlr, cmd);
1628			return IO_ERROR;
1629		}
1630	} else {
1631		printk(KERN_WARNING
1632			"cciss%d: unknown command type %d\n", ctlr, cmd_type);
1633		return IO_ERROR;
1634	}
1635	/* Fill in the scatter gather information */
1636	if (size > 0) {
1637		buff_dma_handle.val = (__u64) pci_map_single(h->pdev,
1638			buff, size, PCI_DMA_BIDIRECTIONAL);
1639		c->SG[0].Addr.lower = buff_dma_handle.val32.lower;
1640		c->SG[0].Addr.upper = buff_dma_handle.val32.upper;
1641		c->SG[0].Len = size;
1642		c->SG[0].Ext = 0;  /* we are not chaining */
1643	}
1644	return status;
1645}
1646static int sendcmd_withirq(__u8	cmd,
1647	int	ctlr,
1648	void	*buff,
1649	size_t	size,
1650	unsigned int use_unit_num,
1651	unsigned int log_unit,
1652	__u8	page_code,
1653	int cmd_type)
1654{
1655	ctlr_info_t *h = hba[ctlr];
1656	CommandList_struct *c;
1657	u64bit	buff_dma_handle;
1658	unsigned long flags;
1659	int return_status;
1660	DECLARE_COMPLETION(wait);
1661
1662	if ((c = cmd_alloc(h , 0)) == NULL)
1663		return -ENOMEM;
1664	return_status = fill_cmd(c, cmd, ctlr, buff, size, use_unit_num,
1665		log_unit, page_code, NULL, cmd_type);
1666	if (return_status != IO_OK) {
1667		cmd_free(h, c, 0);
1668		return return_status;
1669	}
1670resend_cmd2:
1671	c->waiting = &wait;
1672
1673	/* Put the request on the tail of the queue and send it */
1674	spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
1675	addQ(&h->reqQ, c);
1676	h->Qdepth++;
1677	start_io(h);
1678	spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
1679
1680	wait_for_completion(&wait);
1681
1682	if(c->err_info->CommandStatus != 0)
1683	{ /* an error has occurred */
1684		switch(c->err_info->CommandStatus)
1685		{
1686			case CMD_TARGET_STATUS:
1687				printk(KERN_WARNING "cciss: cmd %p has "
1688					" completed with errors\n", c);
1689				if( c->err_info->ScsiStatus)
1690                		{
1691                    			printk(KERN_WARNING "cciss: cmd %p "
1692					"has SCSI Status = %x\n",
1693                        			c,
1694						c->err_info->ScsiStatus);
1695                		}
1696
1697			break;
1698			case CMD_DATA_UNDERRUN:
1699			case CMD_DATA_OVERRUN:
1700			/* expected for inquire and report lun commands */
1701			break;
1702			case CMD_INVALID:
1703				printk(KERN_WARNING "cciss: Cmd %p is "
1704					"reported invalid\n", c);
1705				return_status = IO_ERROR;
1706			break;
1707			case CMD_PROTOCOL_ERR:
1708                                printk(KERN_WARNING "cciss: cmd %p has "
1709					"protocol error \n", c);
1710                                return_status = IO_ERROR;
1711                        break;
1712case CMD_HARDWARE_ERR:
1713                                printk(KERN_WARNING "cciss: cmd %p had "
1714                                        " hardware error\n", c);
1715                                return_status = IO_ERROR;
1716                        break;
1717			case CMD_CONNECTION_LOST:
1718				printk(KERN_WARNING "cciss: cmd %p had "
1719					"connection lost\n", c);
1720				return_status = IO_ERROR;
1721			break;
1722			case CMD_ABORTED:
1723				printk(KERN_WARNING "cciss: cmd %p was "
1724					"aborted\n", c);
1725				return_status = IO_ERROR;
1726			break;
1727			case CMD_ABORT_FAILED:
1728				printk(KERN_WARNING "cciss: cmd %p reports "
1729					"abort failed\n", c);
1730				return_status = IO_ERROR;
1731			break;
1732			case CMD_UNSOLICITED_ABORT:
1733				printk(KERN_WARNING
1734					"cciss%d: unsolicited abort %p\n",
1735					ctlr, c);
1736				if (c->retry_count < MAX_CMD_RETRIES) {
1737					printk(KERN_WARNING
1738						"cciss%d: retrying %p\n",
1739						ctlr, c);
1740					c->retry_count++;
1741					/* erase the old error information */
1742					memset(c->err_info, 0,
1743						sizeof(ErrorInfo_struct));
1744					return_status = IO_OK;
1745					INIT_COMPLETION(wait);
1746					goto resend_cmd2;
1747				}
1748				return_status = IO_ERROR;
1749			break;
1750			default:
1751				printk(KERN_WARNING "cciss: cmd %p returned "
1752					"unknown status %x\n", c,
1753						c->err_info->CommandStatus);
1754				return_status = IO_ERROR;
1755		}
1756	}
1757	/* unlock the buffers from DMA */
1758	buff_dma_handle.val32.lower = c->SG[0].Addr.lower;
1759	buff_dma_handle.val32.upper = c->SG[0].Addr.upper;
1760	pci_unmap_single( h->pdev, (dma_addr_t) buff_dma_handle.val,
1761			c->SG[0].Len, PCI_DMA_BIDIRECTIONAL);
1762	cmd_free(h, c, 0);
1763        return(return_status);
1764
1765}
1766static void cciss_geometry_inquiry(int ctlr, int logvol,
1767			int withirq, unsigned int total_size,
1768			unsigned int block_size, InquiryData_struct *inq_buff,
1769			drive_info_struct *drv)
1770{
1771	int return_code;
1772	memset(inq_buff, 0, sizeof(InquiryData_struct));
1773	if (withirq)
1774		return_code = sendcmd_withirq(CISS_INQUIRY, ctlr,
1775			inq_buff, sizeof(*inq_buff), 1, logvol ,0xC1, TYPE_CMD);
1776	else
1777		return_code = sendcmd(CISS_INQUIRY, ctlr, inq_buff,
1778			sizeof(*inq_buff), 1, logvol ,0xC1, NULL, TYPE_CMD);
1779	if (return_code == IO_OK) {
1780		if(inq_buff->data_byte[8] == 0xFF) {
1781			printk(KERN_WARNING
1782				"cciss: reading geometry failed, volume "
1783				"does not support reading geometry\n");
1784			drv->block_size = block_size;
1785			drv->nr_blocks = total_size;
1786			drv->heads = 255;
1787			drv->sectors = 32; // Sectors per track
1788			drv->cylinders = total_size / 255 / 32;
1789		} else {
1790			unsigned int t;
1791
1792			drv->block_size = block_size;
1793			drv->nr_blocks = total_size;
1794			drv->heads = inq_buff->data_byte[6];
1795			drv->sectors = inq_buff->data_byte[7];
1796			drv->cylinders = (inq_buff->data_byte[4] & 0xff) << 8;
1797			drv->cylinders += inq_buff->data_byte[5];
1798			drv->raid_level = inq_buff->data_byte[8];
1799			t = drv->heads * drv->sectors;
1800			if (t > 1) {
1801				drv->cylinders = total_size/t;
1802			}
1803		}
1804	} else { /* Get geometry failed */
1805		printk(KERN_WARNING "cciss: reading geometry failed\n");
1806	}
1807	printk(KERN_INFO "      heads= %d, sectors= %d, cylinders= %d\n\n",
1808		drv->heads, drv->sectors, drv->cylinders);
1809}
1810static void
1811cciss_read_capacity(int ctlr, int logvol, ReadCapdata_struct *buf,
1812		int withirq, unsigned int *total_size, unsigned int *block_size)
1813{
1814	int return_code;
1815	memset(buf, 0, sizeof(*buf));
1816	if (withirq)
1817		return_code = sendcmd_withirq(CCISS_READ_CAPACITY,
1818			ctlr, buf, sizeof(*buf), 1, logvol, 0, TYPE_CMD);
1819	else
1820		return_code = sendcmd(CCISS_READ_CAPACITY,
1821			ctlr, buf, sizeof(*buf), 1, logvol, 0, NULL, TYPE_CMD);
1822	if (return_code == IO_OK) {
1823		*total_size = be32_to_cpu(*((__be32 *) &buf->total_size[0]))+1;
1824		*block_size = be32_to_cpu(*((__be32 *) &buf->block_size[0]));
1825	} else { /* read capacity command failed */
1826		printk(KERN_WARNING "cciss: read capacity failed\n");
1827		*total_size = 0;
1828		*block_size = BLOCK_SIZE;
1829	}
1830	printk(KERN_INFO "      blocks= %u block_size= %d\n",
1831		*total_size, *block_size);
1832	return;
1833}
1834
1835static int cciss_revalidate(struct gendisk *disk)
1836{
1837	ctlr_info_t *h = get_host(disk);
1838	drive_info_struct *drv = get_drv(disk);
1839	int logvol;
1840	int FOUND=0;
1841	unsigned int block_size;
1842	unsigned int total_size;
1843	ReadCapdata_struct *size_buff = NULL;
1844	InquiryData_struct *inq_buff = NULL;
1845
1846	for(logvol=0; logvol < CISS_MAX_LUN; logvol++)
1847	{
1848		if(h->drv[logvol].LunID == drv->LunID) {
1849			FOUND=1;
1850			break;
1851		}
1852	}
1853
1854	if (!FOUND) return 1;
1855
1856	size_buff = kmalloc(sizeof( ReadCapdata_struct), GFP_KERNEL);
1857        if (size_buff == NULL)
1858        {
1859                printk(KERN_WARNING "cciss: out of memory\n");
1860                return 1;
1861        }
1862	inq_buff = kmalloc(sizeof( InquiryData_struct), GFP_KERNEL);
1863        if (inq_buff == NULL)
1864        {
1865                printk(KERN_WARNING "cciss: out of memory\n");
1866		kfree(size_buff);
1867                return 1;
1868        }
1869
1870	cciss_read_capacity(h->ctlr, logvol, size_buff, 1, &total_size, &block_size);
1871	cciss_geometry_inquiry(h->ctlr, logvol, 1, total_size, block_size, inq_buff, drv);
1872
1873	blk_queue_hardsect_size(drv->queue, drv->block_size);
1874	set_capacity(disk, drv->nr_blocks);
1875
1876	kfree(size_buff);
1877	kfree(inq_buff);
1878	return 0;
1879}
1880
1881/*
1882 *   Wait polling for a command to complete.
1883 *   The memory mapped FIFO is polled for the completion.
1884 *   Used only at init time, interrupts from the HBA are disabled.
1885 */
1886static unsigned long pollcomplete(int ctlr)
1887{
1888	unsigned long done;
1889	int i;
1890
1891	/* Wait (up to 20 seconds) for a command to complete */
1892
1893	for (i = 20 * HZ; i > 0; i--) {
1894		done = hba[ctlr]->access.command_completed(hba[ctlr]);
1895		if (done == FIFO_EMPTY)
1896			schedule_timeout_uninterruptible(1);
1897		else
1898			return (done);
1899	}
1900	/* Invalid address to tell caller we ran out of time */
1901	return 1;
1902}
1903
1904static int add_sendcmd_reject(__u8 cmd, int ctlr, unsigned long complete)
1905{
1906	/* We get in here if sendcmd() is polling for completions
1907	   and gets some command back that it wasn't expecting --
1908	   something other than that which it just sent down.
1909	   Ordinarily, that shouldn't happen, but it can happen when
1910	   the scsi tape stuff gets into error handling mode, and
1911	   starts using sendcmd() to try to abort commands and
1912	   reset tape drives.  In that case, sendcmd may pick up
1913	   completions of commands that were sent to logical drives
1914	   through the block i/o system, or cciss ioctls completing, etc.
1915	   In that case, we need to save those completions for later
1916	   processing by the interrupt handler.
1917	*/
1918
1919#ifdef CONFIG_CISS_SCSI_TAPE
1920	struct sendcmd_reject_list *srl = &hba[ctlr]->scsi_rejects;
1921
1922	/* If it's not the scsi tape stuff doing error handling, (abort */
1923	/* or reset) then we don't expect anything weird. */
1924	if (cmd != CCISS_RESET_MSG && cmd != CCISS_ABORT_MSG) {
1925#endif
1926		printk( KERN_WARNING "cciss cciss%d: SendCmd "
1927		      "Invalid command list address returned! (%lx)\n",
1928			ctlr, complete);
1929		/* not much we can do. */
1930#ifdef CONFIG_CISS_SCSI_TAPE
1931		return 1;
1932	}
1933
1934	/* We've sent down an abort or reset, but something else
1935	   has completed */
1936	if (srl->ncompletions >= (NR_CMDS + 2)) {
1937		/* Uh oh.  No room to save it for later... */
1938		printk(KERN_WARNING "cciss%d: Sendcmd: Invalid command addr, "
1939			"reject list overflow, command lost!\n", ctlr);
1940		return 1;
1941	}
1942	/* Save it for later */
1943	srl->complete[srl->ncompletions] = complete;
1944	srl->ncompletions++;
1945#endif
1946	return 0;
1947}
1948
1949/*
1950 * Send a command to the controller, and wait for it to complete.
1951 * Only used at init time.
1952 */
1953static int sendcmd(
1954	__u8	cmd,
1955	int	ctlr,
1956	void	*buff,
1957	size_t	size,
1958	unsigned int use_unit_num, /* 0: address the controller,
1959				      1: address logical volume log_unit,
1960				      2: periph device address is scsi3addr */
1961	unsigned int log_unit,
1962	__u8	page_code,
1963	unsigned char *scsi3addr,
1964	int cmd_type)
1965{
1966	CommandList_struct *c;
1967	int i;
1968	unsigned long complete;
1969	ctlr_info_t *info_p= hba[ctlr];
1970	u64bit buff_dma_handle;
1971	int status, done = 0;
1972
1973	if ((c = cmd_alloc(info_p, 1)) == NULL) {
1974		printk(KERN_WARNING "cciss: unable to get memory");
1975		return(IO_ERROR);
1976	}
1977	status = fill_cmd(c, cmd, ctlr, buff, size, use_unit_num,
1978		log_unit, page_code, scsi3addr, cmd_type);
1979	if (status != IO_OK) {
1980		cmd_free(info_p, c, 1);
1981		return status;
1982	}
1983resend_cmd1:
1984	/*
1985         * Disable interrupt
1986         */
1987#ifdef CCISS_DEBUG
1988	printk(KERN_DEBUG "cciss: turning intr off\n");
1989#endif /* CCISS_DEBUG */
1990        info_p->access.set_intr_mask(info_p, CCISS_INTR_OFF);
1991
1992	/* Make sure there is room in the command FIFO */
1993        /* Actually it should be completely empty at this time */
1994	/* unless we are in here doing error handling for the scsi */
1995	/* tape side of the driver. */
1996        for (i = 200000; i > 0; i--)
1997	{
1998		/* if fifo isn't full go */
1999                if (!(info_p->access.fifo_full(info_p)))
2000		{
2001
2002                        break;
2003                }
2004                udelay(10);
2005                printk(KERN_WARNING "cciss cciss%d: SendCmd FIFO full,"
2006                        " waiting!\n", ctlr);
2007        }
2008        /*
2009         * Send the cmd
2010         */
2011        info_p->access.submit_command(info_p, c);
2012	done = 0;
2013	do {
2014		complete = pollcomplete(ctlr);
2015
2016#ifdef CCISS_DEBUG
2017		printk(KERN_DEBUG "cciss: command completed\n");
2018#endif /* CCISS_DEBUG */
2019
2020		if (complete == 1) {
2021			printk( KERN_WARNING
2022				"cciss cciss%d: SendCmd Timeout out, "
2023				"No command list address returned!\n",
2024				ctlr);
2025			status = IO_ERROR;
2026			done = 1;
2027			break;
2028		}
2029
2030		/* This will need to change for direct lookup completions */
2031		if ( (complete & CISS_ERROR_BIT)
2032		     && (complete & ~CISS_ERROR_BIT) == c->busaddr)
2033		     {
2034			/* if data overrun or underun on Report command
2035				ignore it
2036			*/
2037			if (((c->Request.CDB[0] == CISS_REPORT_LOG) ||
2038			     (c->Request.CDB[0] == CISS_REPORT_PHYS) ||
2039			     (c->Request.CDB[0] == CISS_INQUIRY)) &&
2040				((c->err_info->CommandStatus ==
2041					CMD_DATA_OVERRUN) ||
2042				 (c->err_info->CommandStatus ==
2043					CMD_DATA_UNDERRUN)
2044			 	))
2045			{
2046				complete = c->busaddr;
2047			} else {
2048				if (c->err_info->CommandStatus ==
2049						CMD_UNSOLICITED_ABORT) {
2050					printk(KERN_WARNING "cciss%d: "
2051						"unsolicited abort %p\n",
2052						ctlr, c);
2053					if (c->retry_count < MAX_CMD_RETRIES) {
2054						printk(KERN_WARNING
2055						   "cciss%d: retrying %p\n",
2056						   ctlr, c);
2057						c->retry_count++;
2058						/* erase the old error */
2059						/* information */
2060						memset(c->err_info, 0,
2061						   sizeof(ErrorInfo_struct));
2062						goto resend_cmd1;
2063					} else {
2064						printk(KERN_WARNING
2065						   "cciss%d: retried %p too "
2066						   "many times\n", ctlr, c);
2067						status = IO_ERROR;
2068						goto cleanup1;
2069					}
2070				} else if (c->err_info->CommandStatus == CMD_UNABORTABLE) {
2071					printk(KERN_WARNING "cciss%d: command could not be aborted.\n", ctlr);
2072					status = IO_ERROR;
2073					goto cleanup1;
2074				}
2075				printk(KERN_WARNING "ciss ciss%d: sendcmd"
2076				" Error %x \n", ctlr,
2077					c->err_info->CommandStatus);
2078				printk(KERN_WARNING "ciss ciss%d: sendcmd"
2079				" offensive info\n"
2080				"  size %x\n   num %x   value %x\n", ctlr,
2081				  c->err_info->MoreErrInfo.Invalid_Cmd.offense_size,
2082				  c->err_info->MoreErrInfo.Invalid_Cmd.offense_num,
2083				  c->err_info->MoreErrInfo.Invalid_Cmd.offense_value);
2084				status = IO_ERROR;
2085				goto cleanup1;
2086			}
2087		}
2088		/* This will need changing for direct lookup completions */
2089                if (complete != c->busaddr) {
2090			if (add_sendcmd_reject(cmd, ctlr, complete) != 0) {
2091				BUG(); /* we are pretty much hosed if we get here. */
2092			}
2093			continue;
2094                } else
2095			done = 1;
2096        } while (!done);
2097
2098cleanup1:
2099	/* unlock the data buffer from DMA */
2100	buff_dma_handle.val32.lower = c->SG[0].Addr.lower;
2101	buff_dma_handle.val32.upper = c->SG[0].Addr.upper;
2102	pci_unmap_single(info_p->pdev, (dma_addr_t) buff_dma_handle.val,
2103				c->SG[0].Len, PCI_DMA_BIDIRECTIONAL);
2104#ifdef CONFIG_CISS_SCSI_TAPE
2105	/* if we saved some commands for later, process them now. */
2106	if (info_p->scsi_rejects.ncompletions > 0)
2107		do_cciss_intr(0, info_p, NULL);
2108#endif
2109	cmd_free(info_p, c, 1);
2110	return (status);
2111}
2112/*
2113 * Map (physical) PCI mem into (virtual) kernel space
2114 */
2115static void __iomem *remap_pci_mem(ulong base, ulong size)
2116{
2117        ulong page_base        = ((ulong) base) & PAGE_MASK;
2118        ulong page_offs        = ((ulong) base) - page_base;
2119        void __iomem *page_remapped = ioremap(page_base, page_offs+size);
2120
2121        return page_remapped ? (page_remapped + page_offs) : NULL;
2122}
2123
2124/*
2125 * Takes jobs of the Q and sends them to the hardware, then puts it on
2126 * the Q to wait for completion.
2127 */
2128static void start_io( ctlr_info_t *h)
2129{
2130	CommandList_struct *c;
2131
2132	while(( c = h->reqQ) != NULL )
2133	{
2134		/* can't do anything if fifo is full */
2135		if ((h->access.fifo_full(h))) {
2136			printk(KERN_WARNING "cciss: fifo full\n");
2137			break;
2138		}
2139
2140		/* Get the frist entry from the Request Q */
2141		removeQ(&(h->reqQ), c);
2142		h->Qdepth--;
2143
2144		/* Tell the controller execute command */
2145		h->access.submit_command(h, c);
2146
2147		/* Put job onto the completed Q */
2148		addQ (&(h->cmpQ), c);
2149	}
2150}
2151
2152static inline void complete_buffers(struct bio *bio, int status)
2153{
2154	while (bio) {
2155		struct bio *xbh = bio->bi_next;
2156		int nr_sectors = bio_sectors(bio);
2157
2158		bio->bi_next = NULL;
2159		blk_finished_io(len);
2160		bio_endio(bio, nr_sectors << 9, status ? 0 : -EIO);
2161		bio = xbh;
2162	}
2163
2164}
2165/* Assumes that CCISS_LOCK(h->ctlr) is held. */
2166/* Zeros out the error record and then resends the command back */
2167/* to the controller */
2168static inline void resend_cciss_cmd( ctlr_info_t *h, CommandList_struct *c)
2169{
2170	/* erase the old error information */
2171	memset(c->err_info, 0, sizeof(ErrorInfo_struct));
2172
2173	/* add it to software queue and then send it to the controller */
2174	addQ(&(h->reqQ),c);
2175	h->Qdepth++;
2176	if(h->Qdepth > h->maxQsinceinit)
2177		h->maxQsinceinit = h->Qdepth;
2178
2179	start_io(h);
2180}
2181
2182static void cciss_softirq_done(struct request *rq)
2183{
2184	CommandList_struct *cmd = rq->completion_data;
2185	ctlr_info_t *h = hba[cmd->ctlr];
2186	u64bit temp64;
2187	int i, ddir;
2188
2189	if (cmd->Request.Type.Direction == XFER_READ)
2190		ddir = PCI_DMA_FROMDEVICE;
2191	else
2192		ddir = PCI_DMA_TODEVICE;
2193
2194	/* command did not need to be retried */
2195	/* unmap the DMA mapping for all the scatter gather elements */
2196	for(i=0; i<cmd->Header.SGList; i++) {
2197		temp64.val32.lower = cmd->SG[i].Addr.lower;
2198		temp64.val32.upper = cmd->SG[i].Addr.upper;
2199		pci_unmap_page(h->pdev, temp64.val, cmd->SG[i].Len, ddir);
2200	}
2201
2202	complete_buffers(rq->bio, rq->errors);
2203
2204#ifdef CCISS_DEBUG
2205	printk("Done with %p\n", rq);
2206#endif /* CCISS_DEBUG */
2207
2208	spin_lock_irq(&h->lock);
2209	end_that_request_last(rq, rq->errors);
2210	cmd_free(h, cmd,1);
2211	spin_unlock_irq(&h->lock);
2212}
2213
2214/* checks the status of the job and calls complete buffers to mark all
2215 * buffers for the completed job. Note that this function does not need
2216 * to hold the hba/queue lock.
2217 */
2218static inline void complete_command( ctlr_info_t *h, CommandList_struct *cmd,
2219		int timeout)
2220{
2221	int status = 1;
2222	int retry_cmd = 0;
2223
2224	if (timeout)
2225		status = 0;
2226
2227	if(cmd->err_info->CommandStatus != 0)
2228	{ /* an error has occurred */
2229		switch(cmd->err_info->CommandStatus)
2230		{
2231			unsigned char sense_key;
2232			case CMD_TARGET_STATUS:
2233				status = 0;
2234
2235				if( cmd->err_info->ScsiStatus == 0x02)
2236				{
2237					printk(KERN_WARNING "cciss: cmd %p "
2238                                        	"has CHECK CONDITION "
2239						" byte 2 = 0x%x\n", cmd,
2240						cmd->err_info->SenseInfo[2]
2241					);
2242					/* check the sense key */
2243					sense_key = 0xf &
2244						cmd->err_info->SenseInfo[2];
2245					/* no status or recovered error */
2246					if((sense_key == 0x0) ||
2247					    (sense_key == 0x1))
2248					{
2249							status = 1;
2250					}
2251				} else
2252				{
2253					printk(KERN_WARNING "cciss: cmd %p "
2254                                                "has SCSI Status 0x%x\n",
2255						cmd, cmd->err_info->ScsiStatus);
2256				}
2257			break;
2258			case CMD_DATA_UNDERRUN:
2259				printk(KERN_WARNING "cciss: cmd %p has"
2260					" completed with data underrun "
2261					"reported\n", cmd);
2262			break;
2263			case CMD_DATA_OVERRUN:
2264				printk(KERN_WARNING "cciss: cmd %p has"
2265					" completed with data overrun "
2266					"reported\n", cmd);
2267			break;
2268			case CMD_INVALID:
2269				printk(KERN_WARNING "cciss: cmd %p is "
2270					"reported invalid\n", cmd);
2271				status = 0;
2272			break;
2273			case CMD_PROTOCOL_ERR:
2274                                printk(KERN_WARNING "cciss: cmd %p has "
2275					"protocol error \n", cmd);
2276                                status = 0;
2277                        break;
2278			case CMD_HARDWARE_ERR:
2279                                printk(KERN_WARNING "cciss: cmd %p had "
2280                                        " hardware error\n", cmd);
2281                                status = 0;
2282                        break;
2283			case CMD_CONNECTION_LOST:
2284				printk(KERN_WARNING "cciss: cmd %p had "
2285					"connection lost\n", cmd);
2286				status=0;
2287			break;
2288			case CMD_ABORTED:
2289				printk(KERN_WARNING "cciss: cmd %p was "
2290					"aborted\n", cmd);
2291				status=0;
2292			break;
2293			case CMD_ABORT_FAILED:
2294				printk(KERN_WARNING "cciss: cmd %p reports "
2295					"abort failed\n", cmd);
2296				status=0;
2297			break;
2298			case CMD_UNSOLICITED_ABORT:
2299				printk(KERN_WARNING "cciss%d: unsolicited "
2300					"abort %p\n", h->ctlr, cmd);
2301				if (cmd->retry_count < MAX_CMD_RETRIES) {
2302					retry_cmd=1;
2303					printk(KERN_WARNING
2304						"cciss%d: retrying %p\n",
2305						h->ctlr, cmd);
2306					cmd->retry_count++;
2307				} else
2308					printk(KERN_WARNING
2309						"cciss%d: %p retried too "
2310						"many times\n", h->ctlr, cmd);
2311				status=0;
2312			break;
2313			case CMD_TIMEOUT:
2314				printk(KERN_WARNING "cciss: cmd %p timedout\n",
2315					cmd);
2316				status=0;
2317			break;
2318			default:
2319				printk(KERN_WARNING "cciss: cmd %p returned "
2320					"unknown status %x\n", cmd,
2321						cmd->err_info->CommandStatus);
2322				status=0;
2323		}
2324	}
2325	/* We need to return this command */
2326	if(retry_cmd) {
2327		resend_cciss_cmd(h,cmd);
2328		return;
2329	}
2330
2331	cmd->rq->completion_data = cmd;
2332	cmd->rq->errors = status;
2333	blk_complete_request(cmd->rq);
2334}
2335
2336/*
2337 * Get a request and submit it to the controller.
2338 */
2339static void do_cciss_request(request_queue_t *q)
2340{
2341	ctlr_info_t *h= q->queuedata;
2342	CommandList_struct *c;
2343	int start_blk, seg;
2344	struct request *creq;
2345	u64bit temp64;
2346	struct scatterlist tmp_sg[MAXSGENTRIES];
2347	drive_info_struct *drv;
2348	int i, dir;
2349
2350	/* We call start_io here in case there is a command waiting on the
2351	 * queue that has not been sent.
2352	*/
2353	if (blk_queue_plugged(q))
2354		goto startio;
2355
2356queue:
2357	creq = elv_next_request(q);
2358	if (!creq)
2359		goto startio;
2360
2361	if (creq->nr_phys_segments > MAXSGENTRIES)
2362                BUG();
2363
2364	if (( c = cmd_alloc(h, 1)) == NULL)
2365		goto full;
2366
2367	blkdev_dequeue_request(creq);
2368
2369	spin_unlock_irq(q->queue_lock);
2370
2371	c->cmd_type = CMD_RWREQ;
2372	c->rq = creq;
2373
2374	/* fill in the request */
2375	drv = creq->rq_disk->private_data;
2376	c->Header.ReplyQueue = 0;  // unused in simple mode
2377	/* got command from pool, so use the command block index instead */
2378	/* for direct lookups. */
2379	/* The first 2 bits are reserved for controller error reporting. */
2380	c->Header.Tag.lower = (c->cmdindex << 3);
2381	c->Header.Tag.lower |= 0x04; /* flag for direct lookup. */
2382	c->Header.LUN.LogDev.VolId= drv->LunID;
2383	c->Header.LUN.LogDev.Mode = 1;
2384	c->Request.CDBLen = 10; // 12 byte commands not in FW yet;
2385	c->Request.Type.Type =  TYPE_CMD; // It is a command.
2386	c->Request.Type.Attribute = ATTR_SIMPLE;
2387	c->Request.Type.Direction =
2388		(rq_data_dir(creq) == READ) ? XFER_READ: XFER_WRITE;
2389	c->Request.Timeout = 0; // Don't time out
2390	c->Request.CDB[0] = (rq_data_dir(creq) == READ) ? CCISS_READ : CCISS_WRITE;
2391	start_blk = creq->sector;
2392#ifdef CCISS_DEBUG
2393	printk(KERN_DEBUG "ciss: sector =%d nr_sectors=%d\n",(int) creq->sector,
2394		(int) creq->nr_sectors);
2395#endif /* CCISS_DEBUG */
2396
2397	seg = blk_rq_map_sg(q, creq, tmp_sg);
2398
2399	/* get the DMA records for the setup */
2400	if (c->Request.Type.Direction == XFER_READ)
2401		dir = PCI_DMA_FROMDEVICE;
2402	else
2403		dir = PCI_DMA_TODEVICE;
2404
2405	for (i=0; i<seg; i++)
2406	{
2407		c->SG[i].Len = tmp_sg[i].length;
2408		temp64.val = (__u64) pci_map_page(h->pdev, tmp_sg[i].page,
2409			 		  tmp_sg[i].offset, tmp_sg[i].length,
2410					  dir);
2411		c->SG[i].Addr.lower = temp64.val32.lower;
2412                c->SG[i].Addr.upper = temp64.val32.upper;
2413                c->SG[i].Ext = 0;  // we are not chaining
2414	}
2415	/* track how many SG entries we are using */
2416	if( seg > h->maxSG)
2417		h->maxSG = seg;
2418
2419#ifdef CCISS_DEBUG
2420	printk(KERN_DEBUG "cciss: Submitting %d sectors in %d segments\n", creq->nr_sectors, seg);
2421#endif /* CCISS_DEBUG */
2422
2423	c->Header.SGList = c->Header.SGTotal = seg;
2424	c->Request.CDB[1]= 0;
2425	c->Request.CDB[2]= (start_blk >> 24) & 0xff;	//MSB
2426	c->Request.CDB[3]= (start_blk >> 16) & 0xff;
2427	c->Request.CDB[4]= (start_blk >>  8) & 0xff;
2428	c->Request.CDB[5]= start_blk & 0xff;
2429	c->Request.CDB[6]= 0; // (sect >> 24) & 0xff; MSB
2430	c->Request.CDB[7]= (creq->nr_sectors >>  8) & 0xff;
2431	c->Request.CDB[8]= creq->nr_sectors & 0xff;
2432	c->Request.CDB[9] = c->Request.CDB[11] = c->Request.CDB[12] = 0;
2433
2434	spin_lock_irq(q->queue_lock);
2435
2436	addQ(&(h->reqQ),c);
2437	h->Qdepth++;
2438	if(h->Qdepth > h->maxQsinceinit)
2439		h->maxQsinceinit = h->Qdepth;
2440
2441	goto queue;
2442full:
2443	blk_stop_queue(q);
2444startio:
2445	/* We will already have the driver lock here so not need
2446	 * to lock it.
2447	*/
2448	start_io(h);
2449}
2450
2451static inline unsigned long get_next_completion(ctlr_info_t *h)
2452{
2453#ifdef CONFIG_CISS_SCSI_TAPE
2454	/* Any rejects from sendcmd() lying around? Process them first */
2455	if (h->scsi_rejects.ncompletions == 0)
2456		return h->access.command_completed(h);
2457	else {
2458		struct sendcmd_reject_list *srl;
2459		int n;
2460		srl = &h->scsi_rejects;
2461		n = --srl->ncompletions;
2462		/* printk("cciss%d: processing saved reject\n", h->ctlr); */
2463		printk("p");
2464		return srl->complete[n];
2465	}
2466#else
2467	return h->access.command_completed(h);
2468#endif
2469}
2470
2471static inline int interrupt_pending(ctlr_info_t *h)
2472{
2473#ifdef CONFIG_CISS_SCSI_TAPE
2474	return ( h->access.intr_pending(h)
2475		|| (h->scsi_rejects.ncompletions > 0));
2476#else
2477	return h->access.intr_pending(h);
2478#endif
2479}
2480
2481static inline long interrupt_not_for_us(ctlr_info_t *h)
2482{
2483#ifdef CONFIG_CISS_SCSI_TAPE
2484	return (((h->access.intr_pending(h) == 0) ||
2485		 (h->interrupts_enabled == 0))
2486	      && (h->scsi_rejects.ncompletions == 0));
2487#else
2488	return (((h->access.intr_pending(h) == 0) ||
2489		 (h->interrupts_enabled == 0)));
2490#endif
2491}
2492
2493static irqreturn_t do_cciss_intr(int irq, void *dev_id, struct pt_regs *regs)
2494{
2495	ctlr_info_t *h = dev_id;
2496	CommandList_struct *c;
2497	unsigned long flags;
2498	__u32 a, a1, a2;
2499	int j;
2500	int start_queue = h->next_to_run;
2501
2502	if (interrupt_not_for_us(h))
2503		return IRQ_NONE;
2504	/*
2505	 * If there are completed commands in the completion queue,
2506	 * we had better do something about it.
2507	 */
2508	spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
2509	while (interrupt_pending(h)) {
2510		while((a = get_next_completion(h)) != FIFO_EMPTY) {
2511			a1 = a;
2512			if ((a & 0x04)) {
2513				a2 = (a >> 3);
2514				if (a2 >= NR_CMDS) {
2515					printk(KERN_WARNING "cciss: controller cciss%d failed, stopping.\n", h->ctlr);
2516					fail_all_cmds(h->ctlr);
2517					return IRQ_HANDLED;
2518				}
2519
2520				c = h->cmd_pool + a2;
2521				a = c->busaddr;
2522
2523			} else {
2524			a &= ~3;
2525				if ((c = h->cmpQ) == NULL) {
2526					printk(KERN_WARNING "cciss: Completion of %08x ignored\n", a1);
2527				continue;
2528			}
2529			while(c->busaddr != a) {
2530				c = c->next;
2531				if (c == h->cmpQ)
2532					break;
2533			}
2534			}
2535			/*
2536			 * If we've found the command, take it off the
2537			 * completion Q and free it
2538			 */
2539			 if (c->busaddr == a) {
2540				removeQ(&h->cmpQ, c);
2541				if (c->cmd_type == CMD_RWREQ) {
2542					complete_command(h, c, 0);
2543				} else if (c->cmd_type == CMD_IOCTL_PEND) {
2544					complete(c->waiting);
2545				}
2546#				ifdef CONFIG_CISS_SCSI_TAPE
2547				else if (c->cmd_type == CMD_SCSI)
2548					complete_scsi_command(c, 0, a1);
2549#				endif
2550				continue;
2551			}
2552		}
2553	}
2554
2555 	/* check to see if we have maxed out the number of commands that can
2556 	 * be placed on the queue.  If so then exit.  We do this check here
2557 	 * in case the interrupt we serviced was from an ioctl and did not
2558 	 * free any new commands.
2559	 */
2560 	if ((find_first_zero_bit(h->cmd_pool_bits, NR_CMDS)) == NR_CMDS)
2561 		goto cleanup;
2562
2563 	/* We have room on the queue for more commands.  Now we need to queue
2564 	 * them up.  We will also keep track of the next queue to run so
2565 	 * that every queue gets a chance to be started first.
2566 	*/
2567	for (j=0; j < h->highest_lun + 1; j++){
2568		int curr_queue = (start_queue + j) % (h->highest_lun + 1);
2569 		/* make sure the disk has been added and the drive is real
2570 		 * because this can be called from the middle of init_one.
2571 		*/
2572		if(!(h->drv[curr_queue].queue) ||
2573		 		   !(h->drv[curr_queue].heads))
2574 			continue;
2575 		blk_start_queue(h->gendisk[curr_queue]->queue);
2576
2577 		/* check to see if we have maxed out the number of commands
2578 		 * that can be placed on the queue.
2579 		*/
2580 		if ((find_first_zero_bit(h->cmd_pool_bits, NR_CMDS)) == NR_CMDS)
2581 		{
2582 			if (curr_queue == start_queue){
2583				h->next_to_run = (start_queue + 1) % (h->highest_lun + 1);
2584 				goto cleanup;
2585 			} else {
2586 				h->next_to_run = curr_queue;
2587 				goto cleanup;
2588 	}
2589 		} else {
2590			curr_queue = (curr_queue + 1) % (h->highest_lun + 1);
2591 		}
2592 	}
2593
2594cleanup:
2595	spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
2596	return IRQ_HANDLED;
2597}
2598/*
2599 *  We cannot read the structure directly, for portablity we must use
2600 *   the io functions.
2601 *   This is for debug only.
2602 */
2603#ifdef CCISS_DEBUG
2604static void print_cfg_table( CfgTable_struct *tb)
2605{
2606	int i;
2607	char temp_name[17];
2608
2609	printk("Controller Configuration information\n");
2610	printk("------------------------------------\n");
2611	for(i=0;i<4;i++)
2612		temp_name[i] = readb(&(tb->Signature[i]));
2613	temp_name[4]='\0';
2614	printk("   Signature = %s\n", temp_name);
2615	printk("   Spec Number = %d\n", readl(&(tb->SpecValence)));
2616	printk("   Transport methods supported = 0x%x\n",
2617				readl(&(tb-> TransportSupport)));
2618	printk("   Transport methods active = 0x%x\n",
2619				readl(&(tb->TransportActive)));
2620	printk("   Requested transport Method = 0x%x\n",
2621			readl(&(tb->HostWrite.TransportRequest)));
2622	printk("   Coalese Interrupt Delay = 0x%x\n",
2623			readl(&(tb->HostWrite.CoalIntDelay)));
2624	printk("   Coalese Interrupt Count = 0x%x\n",
2625			readl(&(tb->HostWrite.CoalIntCount)));
2626	printk("   Max outstanding commands = 0x%d\n",
2627			readl(&(tb->CmdsOutMax)));
2628	printk("   Bus Types = 0x%x\n", readl(&(tb-> BusTypes)));
2629	for(i=0;i<16;i++)
2630		temp_name[i] = readb(&(tb->ServerName[i]));
2631	temp_name[16] = '\0';
2632	printk("   Server Name = %s\n", temp_name);
2633	printk("   Heartbeat Counter = 0x%x\n\n\n",
2634			readl(&(tb->HeartBeat)));
2635}
2636#endif /* CCISS_DEBUG */
2637
2638static void release_io_mem(ctlr_info_t *c)
2639{
2640	/* if IO mem was not protected do nothing */
2641	if( c->io_mem_addr == 0)
2642		return;
2643	release_region(c->io_mem_addr, c->io_mem_length);
2644	c->io_mem_addr = 0;
2645	c->io_mem_length = 0;
2646}
2647
2648static int find_PCI_BAR_index(struct pci_dev *pdev,
2649				unsigned long pci_bar_addr)
2650{
2651	int i, offset, mem_type, bar_type;
2652	if (pci_bar_addr == PCI_BASE_ADDRESS_0) /* looking for BAR zero? */
2653		return 0;
2654	offset = 0;
2655	for (i=0; i<DEVICE_COUNT_RESOURCE; i++) {
2656		bar_type = pci_resource_flags(pdev, i) &
2657			PCI_BASE_ADDRESS_SPACE;
2658		if (bar_type == PCI_BASE_ADDRESS_SPACE_IO)
2659			offset += 4;
2660		else {
2661			mem_type = pci_resource_flags(pdev, i) &
2662				PCI_BASE_ADDRESS_MEM_TYPE_MASK;
2663			switch (mem_type) {
2664				case PCI_BASE_ADDRESS_MEM_TYPE_32:
2665				case PCI_BASE_ADDRESS_MEM_TYPE_1M:
2666					offset += 4; /* 32 bit */
2667					break;
2668				case PCI_BASE_ADDRESS_MEM_TYPE_64:
2669					offset += 8;
2670					break;
2671				default: /* reserved in PCI 2.2 */
2672					printk(KERN_WARNING "Base address is invalid\n");
2673			       		return -1;
2674				break;
2675			}
2676		}
2677 		if (offset == pci_bar_addr - PCI_BASE_ADDRESS_0)
2678			return i+1;
2679	}
2680	return -1;
2681}
2682
2683/* If MSI/MSI-X is supported by the kernel we will try to enable it on
2684 * controllers that are capable. If not, we use IO-APIC mode.
2685 */
2686
2687static void __devinit cciss_interrupt_mode(ctlr_info_t *c, struct pci_dev *pdev, __u32 board_id)
2688{
2689#ifdef CONFIG_PCI_MSI
2690        int err;
2691        struct msix_entry cciss_msix_entries[4] = {{0,0}, {0,1},
2692						   {0,2}, {0,3}};
2693
2694	/* Some boards advertise MSI but don't really support it */
2695	if ((board_id == 0x40700E11) ||
2696		(board_id == 0x40800E11) ||
2697		(board_id == 0x40820E11) ||
2698		(board_id == 0x40830E11))
2699		goto default_int_mode;
2700
2701        if (pci_find_capability(pdev, PCI_CAP_ID_MSIX)) {
2702                err = pci_enable_msix(pdev, cciss_msix_entries, 4);
2703                if (!err) {
2704                        c->intr[0] = cciss_msix_entries[0].vector;
2705                        c->intr[1] = cciss_msix_entries[1].vector;
2706                        c->intr[2] = cciss_msix_entries[2].vector;
2707                        c->intr[3] = cciss_msix_entries[3].vector;
2708                        c->msix_vector = 1;
2709                        return;
2710                }
2711                if (err > 0) {
2712                        printk(KERN_WARNING "cciss: only %d MSI-X vectors "
2713                                        "available\n", err);
2714                } else {
2715                        printk(KERN_WARNING "cciss: MSI-X init failed %d\n",
2716						err);
2717                }
2718        }
2719        if (pci_find_capability(pdev, PCI_CAP_ID_MSI)) {
2720                if (!pci_enable_msi(pdev)) {
2721                        c->intr[SIMPLE_MODE_INT] = pdev->irq;
2722                        c->msi_vector = 1;
2723                        return;
2724                } else {
2725                        printk(KERN_WARNING "cciss: MSI init failed\n");
2726        		c->intr[SIMPLE_MODE_INT] = pdev->irq;
2727                        return;
2728                }
2729        }
2730#endif /* CONFIG_PCI_MSI */
2731	/* if we get here we're going to use the default interrupt mode */
2732default_int_mode:
2733        c->intr[SIMPLE_MODE_INT] = pdev->irq;
2734	return;
2735}
2736
2737static int cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
2738{
2739	ushort subsystem_vendor_id, subsystem_device_id, command;
2740	__u32 board_id, scratchpad = 0;
2741	__u64 cfg_offset;
2742	__u32 cfg_base_addr;
2743	__u64 cfg_base_addr_index;
2744	int i;
2745
2746	/* check to see if controller has been disabled */
2747	/* BEFORE trying to enable it */
2748	(void) pci_read_config_word(pdev, PCI_COMMAND,&command);
2749	if(!(command & 0x02))
2750	{
2751		printk(KERN_WARNING "cciss: controller appears to be disabled\n");
2752		return(-1);
2753	}
2754
2755	if (pci_enable_device(pdev))
2756	{
2757		printk(KERN_ERR "cciss: Unable to Enable PCI device\n");
2758		return( -1);
2759	}
2760
2761	subsystem_vendor_id = pdev->subsystem_vendor;
2762	subsystem_device_id = pdev->subsystem_device;
2763	board_id = (((__u32) (subsystem_device_id << 16) & 0xffff0000) |
2764					subsystem_vendor_id);
2765
2766	/* search for our IO range so we can protect it */
2767	for(i=0; i<DEVICE_COUNT_RESOURCE; i++)
2768	{
2769		/* is this an IO range */
2770		if( pci_resource_flags(pdev, i) & 0x01 ) {
2771			c->io_mem_addr = pci_resource_start(pdev, i);
2772			c->io_mem_length = pci_resource_end(pdev, i) -
2773				pci_resource_start(pdev, i) +1;
2774#ifdef CCISS_DEBUG
2775			printk("IO value found base_addr[%d] %lx %lx\n", i,
2776				c->io_mem_addr, c->io_mem_length);
2777#endif /* CCISS_DEBUG */
2778			/* register the IO range */
2779			if(!request_region( c->io_mem_addr,
2780                                        c->io_mem_length, "cciss"))
2781			{
2782				printk(KERN_WARNING "cciss I/O memory range already in use addr=%lx length=%ld\n",
2783				c->io_mem_addr, c->io_mem_length);
2784				c->io_mem_addr= 0;
2785				c->io_mem_length = 0;
2786			}
2787			break;
2788		}
2789	}
2790
2791#ifdef CCISS_DEBUG
2792	printk("command = %x\n", command);
2793	printk("irq = %x\n", pdev->irq);
2794	printk("board_id = %x\n", board_id);
2795#endif /* CCISS_DEBUG */
2796
2797/* If the kernel supports MSI/MSI-X we will try to enable that functionality,
2798 * else we use the IO-APIC interrupt assigned to us by system ROM.
2799 */
2800	cciss_interrupt_mode(c, pdev, board_id);
2801
2802	/*
2803	 * Memory base addr is first addr , the second points to the config
2804         *   table
2805	 */
2806
2807	c->paddr = pci_resource_start(pdev, 0); /* addressing mode bits already removed */
2808#ifdef CCISS_DEBUG
2809	printk("address 0 = %x\n", c->paddr);
2810#endif /* CCISS_DEBUG */
2811	c->vaddr = remap_pci_mem(c->paddr, 200);
2812
2813	/* Wait for the board to become ready.  (PCI hotplug needs this.)
2814	 * We poll for up to 120 secs, once per 100ms. */
2815	for (i=0; i < 1200; i++) {
2816		scratchpad = readl(c->vaddr + SA5_SCRATCHPAD_OFFSET);
2817		if (scratchpad == CCISS_FIRMWARE_READY)
2818			break;
2819		set_current_state(TASK_INTERRUPTIBLE);
2820		schedule_timeout(HZ / 10); /* wait 100ms */
2821	}
2822	if (scratchpad != CCISS_FIRMWARE_READY) {
2823		printk(KERN_WARNING "cciss: Board not ready.  Timed out.\n");
2824		return -1;
2825	}
2826
2827	/* get the address index number */
2828	cfg_base_addr = readl(c->vaddr + SA5_CTCFG_OFFSET);
2829	cfg_base_addr &= (__u32) 0x0000ffff;
2830#ifdef CCISS_DEBUG
2831	printk("cfg base address = %x\n", cfg_base_addr);
2832#endif /* CCISS_DEBUG */
2833	cfg_base_addr_index =
2834		find_PCI_BAR_index(pdev, cfg_base_addr);
2835#ifdef CCISS_DEBUG
2836	printk("cfg base address index = %x\n", cfg_base_addr_index);
2837#endif /* CCISS_DEBUG */
2838	if (cfg_base_addr_index == -1) {
2839		printk(KERN_WARNING "cciss: Cannot find cfg_base_addr_index\n");
2840		release_io_mem(c);
2841		return -1;
2842	}
2843
2844	cfg_offset = readl(c->vaddr + SA5_CTMEM_OFFSET);
2845#ifdef CCISS_DEBUG
2846	printk("cfg offset = %x\n", cfg_offset);
2847#endif /* CCISS_DEBUG */
2848	c->cfgtable =  remap_pci_mem(pci_resource_start(pdev,
2849				cfg_base_addr_index) + cfg_offset,
2850				sizeof(CfgTable_struct));
2851	c->board_id = board_id;
2852
2853#ifdef CCISS_DEBUG
2854	print_cfg_table(c->cfgtable);
2855#endif /* CCISS_DEBUG */
2856
2857	for(i=0; i<NR_PRODUCTS; i++) {
2858		if (board_id == products[i].board_id) {
2859			c->product_name = products[i].product_name;
2860			c->access = *(products[i].access);
2861			break;
2862		}
2863	}
2864	if (i == NR_PRODUCTS) {
2865		printk(KERN_WARNING "cciss: Sorry, I don't know how"
2866			" to access the Smart Array controller %08lx\n",
2867				(unsigned long)board_id);
2868		return -1;
2869	}
2870	if (  (readb(&c->cfgtable->Signature[0]) != 'C') ||
2871	      (readb(&c->cfgtable->Signature[1]) != 'I') ||
2872	      (readb(&c->cfgtable->Signature[2]) != 'S') ||
2873	      (readb(&c->cfgtable->Signature[3]) != 'S') )
2874	{
2875		printk("Does not appear to be a valid CISS config table\n");
2876		return -1;
2877	}
2878
2879#ifdef CONFIG_X86
2880{
2881	/* Need to enable prefetch in the SCSI core for 6400 in x86 */
2882	__u32 prefetch;
2883	prefetch = readl(&(c->cfgtable->SCSI_Prefetch));
2884	prefetch |= 0x100;
2885	writel(prefetch, &(c->cfgtable->SCSI_Prefetch));
2886}
2887#endif
2888
2889#ifdef CCISS_DEBUG
2890	printk("Trying to put board into Simple mode\n");
2891#endif /* CCISS_DEBUG */
2892	c->max_commands = readl(&(c->cfgtable->CmdsOutMax));
2893	/* Update the field, and then ring the doorbell */
2894	writel( CFGTBL_Trans_Simple,
2895		&(c->cfgtable->HostWrite.TransportRequest));
2896	writel( CFGTBL_ChangeReq, c->vaddr + SA5_DOORBELL);
2897
2898	/* under certain very rare conditions, this can take awhile.
2899	 * (e.g.: hot replace a failed 144GB drive in a RAID 5 set right
2900	 * as we enter this code.) */
2901	for(i=0;i<MAX_CONFIG_WAIT;i++) {
2902		if (!(readl(c->vaddr + SA5_DOORBELL) & CFGTBL_ChangeReq))
2903			break;
2904		/* delay and try again */
2905		set_current_state(TASK_INTERRUPTIBLE);
2906		schedule_timeout(10);
2907	}
2908
2909#ifdef CCISS_DEBUG
2910	printk(KERN_DEBUG "I counter got to %d %x\n", i, readl(c->vaddr + SA5_DOORBELL));
2911#endif /* CCISS_DEBUG */
2912#ifdef CCISS_DEBUG
2913	print_cfg_table(c->cfgtable);
2914#endif /* CCISS_DEBUG */
2915
2916	if (!(readl(&(c->cfgtable->TransportActive)) & CFGTBL_Trans_Simple))
2917	{
2918		printk(KERN_WARNING "cciss: unable to get board into"
2919					" simple mode\n");
2920		return -1;
2921	}
2922	return 0;
2923
2924}
2925
2926/*
2927 * Gets information about the local volumes attached to the controller.
2928 */
2929static void cciss_getgeometry(int cntl_num)
2930{
2931	ReportLunData_struct *ld_buff;
2932	ReadCapdata_struct *size_buff;
2933	InquiryData_struct *inq_buff;
2934	int return_code;
2935	int i;
2936	int listlength = 0;
2937	__u32 lunid = 0;
2938	int block_size;
2939	int total_size;
2940
2941	ld_buff = kmalloc(sizeof(ReportLunData_struct), GFP_KERNEL);
2942	if (ld_buff == NULL)
2943	{
2944		printk(KERN_ERR "cciss: out of memory\n");
2945		return;
2946	}
2947	memset(ld_buff, 0, sizeof(ReportLunData_struct));
2948	size_buff = kmalloc(sizeof( ReadCapdata_struct), GFP_KERNEL);
2949        if (size_buff == NULL)
2950        {
2951                printk(KERN_ERR "cciss: out of memory\n");
2952		kfree(ld_buff);
2953                return;
2954        }
2955	inq_buff = kmalloc(sizeof( InquiryData_struct), GFP_KERNEL);
2956        if (inq_buff == NULL)
2957        {
2958                printk(KERN_ERR "cciss: out of memory\n");
2959                kfree(ld_buff);
2960		kfree(size_buff);
2961                return;
2962        }
2963	/* Get the firmware version */
2964	return_code = sendcmd(CISS_INQUIRY, cntl_num, inq_buff,
2965		sizeof(InquiryData_struct), 0, 0 ,0, NULL, TYPE_CMD);
2966	if (return_code == IO_OK)
2967	{
2968		hba[cntl_num]->firm_ver[0] = inq_buff->data_byte[32];
2969		hba[cntl_num]->firm_ver[1] = inq_buff->data_byte[33];
2970		hba[cntl_num]->firm_ver[2] = inq_buff->data_byte[34];
2971		hba[cntl_num]->firm_ver[3] = inq_buff->data_byte[35];
2972	} else /* send command failed */
2973	{
2974		printk(KERN_WARNING "cciss: unable to determine firmware"
2975			" version of controller\n");
2976	}
2977	/* Get the number of logical volumes */
2978	return_code = sendcmd(CISS_REPORT_LOG, cntl_num, ld_buff,
2979			sizeof(ReportLunData_struct), 0, 0, 0, NULL, TYPE_CMD);
2980
2981	if( return_code == IO_OK)
2982	{
2983#ifdef CCISS_DEBUG
2984		printk("LUN Data\n--------------------------\n");
2985#endif /* CCISS_DEBUG */
2986
2987		listlength |= (0xff & (unsigned int)(ld_buff->LUNListLength[0])) << 24;
2988		listlength |= (0xff & (unsigned int)(ld_buff->LUNListLength[1])) << 16;
2989		listlength |= (0xff & (unsigned int)(ld_buff->LUNListLength[2])) << 8;
2990		listlength |= 0xff & (unsigned int)(ld_buff->LUNListLength[3]);
2991	} else /* reading number of logical volumes failed */
2992	{
2993		printk(KERN_WARNING "cciss: report logical volume"
2994			" command failed\n");
2995		listlength = 0;
2996	}
2997	hba[cntl_num]->num_luns = listlength / 8; // 8 bytes pre entry
2998	if (hba[cntl_num]->num_luns > CISS_MAX_LUN)
2999	{
3000		printk(KERN_ERR "ciss:  only %d number of logical volumes supported\n",
3001			CISS_MAX_LUN);
3002		hba[cntl_num]->num_luns = CISS_MAX_LUN;
3003	}
3004#ifdef CCISS_DEBUG
3005	printk(KERN_DEBUG "Length = %x %x %x %x = %d\n", ld_buff->LUNListLength[0],
3006		ld_buff->LUNListLength[1], ld_buff->LUNListLength[2],
3007		ld_buff->LUNListLength[3],  hba[cntl_num]->num_luns);
3008#endif /* CCISS_DEBUG */
3009
3010	hba[cntl_num]->highest_lun = hba[cntl_num]->num_luns-1;
3011//	for(i=0; i<  hba[cntl_num]->num_luns; i++)
3012	for(i=0; i < CISS_MAX_LUN; i++)
3013	{
3014		if (i < hba[cntl_num]->num_luns){
3015		  	lunid = (0xff & (unsigned int)(ld_buff->LUN[i][3]))
3016				 << 24;
3017        		lunid |= (0xff & (unsigned int)(ld_buff->LUN[i][2]))
3018				 << 16;
3019        		lunid |= (0xff & (unsigned int)(ld_buff->LUN[i][1]))
3020				 << 8;
3021        	lunid |= 0xff & (unsigned int)(ld_buff->LUN[i][0]);
3022
3023		hba[cntl_num]->drv[i].LunID = lunid;
3024
3025
3026#ifdef CCISS_DEBUG
3027	  	printk(KERN_DEBUG "LUN[%d]:  %x %x %x %x = %x\n", i,
3028			ld_buff->LUN[i][0], ld_buff->LUN[i][1],
3029			ld_buff->LUN[i][2], ld_buff->LUN[i][3],
3030			hba[cntl_num]->drv[i].LunID);
3031#endif /* CCISS_DEBUG */
3032		cciss_read_capacity(cntl_num, i, size_buff, 0,
3033			&total_size, &block_size);
3034			cciss_geometry_inquiry(cntl_num, i, 0, total_size,
3035				block_size, inq_buff, &hba[cntl_num]->drv[i]);
3036		} else {
3037			/* initialize raid_level to indicate a free space */
3038			hba[cntl_num]->drv[i].raid_level = -1;
3039		}
3040	}
3041	kfree(ld_buff);
3042	kfree(size_buff);
3043	kfree(inq_buff);
3044}
3045
3046/* Function to find the first free pointer into our hba[] array */
3047/* Returns -1 if no free entries are left.  */
3048static int alloc_cciss_hba(void)
3049{
3050	struct gendisk *disk[NWD];
3051	int i, n;
3052	for (n = 0; n < NWD; n++) {
3053		disk[n] = alloc_disk(1 << NWD_SHIFT);
3054		if (!disk[n])
3055			goto out;
3056	}
3057
3058	for(i=0; i< MAX_CTLR; i++) {
3059		if (!hba[i]) {
3060			ctlr_info_t *p;
3061			p = kmalloc(sizeof(ctlr_info_t), GFP_KERNEL);
3062			if (!p)
3063				goto Enomem;
3064			memset(p, 0, sizeof(ctlr_info_t));
3065			for (n = 0; n < NWD; n++)
3066				p->gendisk[n] = disk[n];
3067			hba[i] = p;
3068			return i;
3069		}
3070	}
3071	printk(KERN_WARNING "cciss: This driver supports a maximum"
3072		" of %d controllers.\n", MAX_CTLR);
3073	goto out;
3074Enomem:
3075	printk(KERN_ERR "cciss: out of memory.\n");
3076out:
3077	while (n--)
3078		put_disk(disk[n]);
3079	return -1;
3080}
3081
3082static void free_hba(int i)
3083{
3084	ctlr_info_t *p = hba[i];
3085	int n;
3086
3087	hba[i] = NULL;
3088	for (n = 0; n < NWD; n++)
3089		put_disk(p->gendisk[n]);
3090	kfree(p);
3091}
3092
3093/*
3094 *  This is it.  Find all the controllers and register them.  I really hate
3095 *  stealing all these major device numbers.
3096 *  returns the number of block devices registered.
3097 */
3098static int __devinit cciss_init_one(struct pci_dev *pdev,
3099	const struct pci_device_id *ent)
3100{
3101	request_queue_t *q;
3102	int i;
3103	int j;
3104	int rc;
3105
3106	printk(KERN_DEBUG "cciss: Device 0x%x has been found at"
3107			" bus %d dev %d func %d\n",
3108		pdev->device, pdev->bus->number, PCI_SLOT(pdev->devfn),
3109			PCI_FUNC(pdev->devfn));
3110	i = alloc_cciss_hba();
3111	if(i < 0)
3112		return (-1);
3113
3114	hba[i]->busy_initializing = 1;
3115
3116	if (cciss_pci_init(hba[i], pdev) != 0)
3117		goto clean1;
3118
3119	sprintf(hba[i]->devname, "cciss%d", i);
3120	hba[i]->ctlr = i;
3121	hba[i]->pdev = pdev;
3122
3123	/* configure PCI DMA stuff */
3124	if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK))
3125		printk("cciss: using DAC cycles\n");
3126	else if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK))
3127		printk("cciss: not using DAC cycles\n");
3128	else {
3129		printk("cciss: no suitable DMA available\n");
3130		goto clean1;
3131	}
3132
3133	/*
3134	 * register with the major number, or get a dynamic major number
3135	 * by passing 0 as argument.  This is done for greater than
3136	 * 8 controller support.
3137	 */
3138	if (i < MAX_CTLR_ORIG)
3139		hba[i]->major = COMPAQ_CISS_MAJOR + i;
3140	rc = register_blkdev(hba[i]->major, hba[i]->devname);
3141	if(rc == -EBUSY || rc == -EINVAL) {
3142		printk(KERN_ERR
3143			"cciss:  Unable to get major number %d for %s "
3144			"on hba %d\n", hba[i]->major, hba[i]->devname, i);
3145		goto clean1;
3146	}
3147	else {
3148		if (i >= MAX_CTLR_ORIG)
3149			hba[i]->major = rc;
3150	}
3151
3152	/* make sure the board interrupts are off */
3153	hba[i]->access.set_intr_mask(hba[i], CCISS_INTR_OFF);
3154	if( request_irq(hba[i]->intr[SIMPLE_MODE_INT], do_cciss_intr,
3155		SA_INTERRUPT | SA_SHIRQ | SA_SAMPLE_RANDOM,
3156			hba[i]->devname, hba[i])) {
3157		printk(KERN_ERR "cciss: Unable to get irq %d for %s\n",
3158			hba[i]->intr[SIMPLE_MODE_INT], hba[i]->devname);
3159		goto clean2;
3160	}
3161	hba[i]->cmd_pool_bits = kmalloc(((NR_CMDS+BITS_PER_LONG-1)/BITS_PER_LONG)*sizeof(unsigned long), GFP_KERNEL);
3162	hba[i]->cmd_pool = (CommandList_struct *)pci_alloc_consistent(
3163		hba[i]->pdev, NR_CMDS * sizeof(CommandList_struct),
3164		&(hba[i]->cmd_pool_dhandle));
3165	hba[i]->errinfo_pool = (ErrorInfo_struct *)pci_alloc_consistent(
3166		hba[i]->pdev, NR_CMDS * sizeof( ErrorInfo_struct),
3167		&(hba[i]->errinfo_pool_dhandle));
3168	if((hba[i]->cmd_pool_bits == NULL)
3169		|| (hba[i]->cmd_pool == NULL)
3170		|| (hba[i]->errinfo_pool == NULL)) {
3171                printk( KERN_ERR "cciss: out of memory");
3172		goto clean4;
3173	}
3174#ifdef CONFIG_CISS_SCSI_TAPE
3175	hba[i]->scsi_rejects.complete =
3176		kmalloc(sizeof(hba[i]->scsi_rejects.complete[0]) *
3177			(NR_CMDS + 5), GFP_KERNEL);
3178	if (hba[i]->scsi_rejects.complete == NULL) {
3179                printk( KERN_ERR "cciss: out of memory");
3180		goto clean4;
3181	}
3182#endif
3183	spin_lock_init(&hba[i]->lock);
3184
3185	/* Initialize the pdev driver private data.
3186		have it point to hba[i].  */
3187	pci_set_drvdata(pdev, hba[i]);
3188	/* command and error info recs zeroed out before
3189			they are used */
3190        memset(hba[i]->cmd_pool_bits, 0, ((NR_CMDS+BITS_PER_LONG-1)/BITS_PER_LONG)*sizeof(unsigned long));
3191
3192#ifdef CCISS_DEBUG
3193	printk(KERN_DEBUG "Scanning for drives on controller cciss%d\n",i);
3194#endif /* CCISS_DEBUG */
3195
3196	cciss_getgeometry(i);
3197
3198	cciss_scsi_setup(i);
3199
3200	/* Turn the interrupts on so we can service requests */
3201	hba[i]->access.set_intr_mask(hba[i], CCISS_INTR_ON);
3202
3203	cciss_procinit(i);
3204	hba[i]->busy_initializing = 0;
3205
3206	for(j=0; j < NWD; j++) { /* mfm */
3207		drive_info_struct *drv = &(hba[i]->drv[j]);
3208		struct gendisk *disk = hba[i]->gendisk[j];
3209
3210		q = blk_init_queue(do_cciss_request, &hba[i]->lock);
3211		if (!q) {
3212			printk(KERN_ERR
3213			   "cciss:  unable to allocate queue for disk %d\n",
3214			   j);
3215			break;
3216		}
3217		drv->queue = q;
3218
3219		q->backing_dev_info.ra_pages = READ_AHEAD;
3220		blk_queue_bounce_limit(q, hba[i]->pdev->dma_mask);
3221
3222		/* This is a hardware imposed limit. */
3223		blk_queue_max_hw_segments(q, MAXSGENTRIES);
3224
3225		/* This is a limit in the driver and could be eliminated. */
3226		blk_queue_max_phys_segments(q, MAXSGENTRIES);
3227
3228		blk_queue_max_sectors(q, 512);
3229
3230		blk_queue_softirq_done(q, cciss_softirq_done);
3231
3232		q->queuedata = hba[i];
3233		sprintf(disk->disk_name, "cciss/c%dd%d", i, j);
3234		sprintf(disk->devfs_name, "cciss/host%d/target%d", i, j);
3235		disk->major = hba[i]->major;
3236		disk->first_minor = j << NWD_SHIFT;
3237		disk->fops = &cciss_fops;
3238		disk->queue = q;
3239		disk->private_data = drv;
3240		/* we must register the controller even if no disks exist */
3241		/* this is for the online array utilities */
3242		if(!drv->heads && j)
3243			continue;
3244		blk_queue_hardsect_size(q, drv->block_size);
3245		set_capacity(disk, drv->nr_blocks);
3246		add_disk(disk);
3247	}
3248
3249	return(1);
3250
3251clean4:
3252#ifdef CONFIG_CISS_SCSI_TAPE
3253	if(hba[i]->scsi_rejects.complete)
3254		kfree(hba[i]->scsi_rejects.complete);
3255#endif
3256	kfree(hba[i]->cmd_pool_bits);
3257	if(hba[i]->cmd_pool)
3258		pci_free_consistent(hba[i]->pdev,
3259			NR_CMDS * sizeof(CommandList_struct),
3260			hba[i]->cmd_pool, hba[i]->cmd_pool_dhandle);
3261	if(hba[i]->errinfo_pool)
3262		pci_free_consistent(hba[i]->pdev,
3263			NR_CMDS * sizeof( ErrorInfo_struct),
3264			hba[i]->errinfo_pool,
3265			hba[i]->errinfo_pool_dhandle);
3266	free_irq(hba[i]->intr[SIMPLE_MODE_INT], hba[i]);
3267clean2:
3268	unregister_blkdev(hba[i]->major, hba[i]->devname);
3269clean1:
3270	release_io_mem(hba[i]);
3271	free_hba(i);
3272	hba[i]->busy_initializing = 0;
3273	return(-1);
3274}
3275
3276static void __devexit cciss_remove_one (struct pci_dev *pdev)
3277{
3278	ctlr_info_t *tmp_ptr;
3279	int i, j;
3280	char flush_buf[4];
3281	int return_code;
3282
3283	if (pci_get_drvdata(pdev) == NULL)
3284	{
3285		printk( KERN_ERR "cciss: Unable to remove device \n");
3286		return;
3287	}
3288	tmp_ptr = pci_get_drvdata(pdev);
3289	i = tmp_ptr->ctlr;
3290	if (hba[i] == NULL)
3291	{
3292		printk(KERN_ERR "cciss: device appears to "
3293			"already be removed \n");
3294		return;
3295	}
3296	/* Turn board interrupts off  and send the flush cache command */
3297	/* sendcmd will turn off interrupt, and send the flush...
3298	* To write all data in the battery backed cache to disks */
3299	memset(flush_buf, 0, 4);
3300	return_code = sendcmd(CCISS_CACHE_FLUSH, i, flush_buf, 4, 0, 0, 0, NULL,
3301				TYPE_CMD);
3302	if(return_code != IO_OK)
3303	{
3304		printk(KERN_WARNING "Error Flushing cache on controller %d\n",
3305			i);
3306	}
3307	free_irq(hba[i]->intr[2], hba[i]);
3308
3309#ifdef CONFIG_PCI_MSI
3310        if (hba[i]->msix_vector)
3311                pci_disable_msix(hba[i]->pdev);
3312        else if (hba[i]->msi_vector)
3313                pci_disable_msi(hba[i]->pdev);
3314#endif /* CONFIG_PCI_MSI */
3315
3316	pci_set_drvdata(pdev, NULL);
3317	iounmap(hba[i]->vaddr);
3318	cciss_unregister_scsi(i);  /* unhook from SCSI subsystem */
3319	unregister_blkdev(hba[i]->major, hba[i]->devname);
3320	remove_proc_entry(hba[i]->devname, proc_cciss);
3321
3322	/* remove it from the disk list */
3323	for (j = 0; j < NWD; j++) {
3324		struct gendisk *disk = hba[i]->gendisk[j];
3325		if (disk) {
3326			request_queue_t *q = disk->queue;
3327
3328			if (disk->flags & GENHD_FL_UP)
3329				del_gendisk(disk);
3330			if (q)
3331				blk_cleanup_queue(q);
3332		}
3333	}
3334
3335	pci_free_consistent(hba[i]->pdev, NR_CMDS * sizeof(CommandList_struct),
3336			    hba[i]->cmd_pool, hba[i]->cmd_pool_dhandle);
3337	pci_free_consistent(hba[i]->pdev, NR_CMDS * sizeof( ErrorInfo_struct),
3338		hba[i]->errinfo_pool, hba[i]->errinfo_pool_dhandle);
3339	kfree(hba[i]->cmd_pool_bits);
3340#ifdef CONFIG_CISS_SCSI_TAPE
3341	kfree(hba[i]->scsi_rejects.complete);
3342#endif
3343 	release_io_mem(hba[i]);
3344	free_hba(i);
3345}
3346
3347static struct pci_driver cciss_pci_driver = {
3348	.name =		"cciss",
3349	.probe =	cciss_init_one,
3350	.remove =	__devexit_p(cciss_remove_one),
3351	.id_table =	cciss_pci_device_id, /* id_table */
3352};
3353
3354/*
3355 *  This is it.  Register the PCI driver information for the cards we control
3356 *  the OS will call our registered routines when it finds one of our cards.
3357 */
3358static int __init cciss_init(void)
3359{
3360	printk(KERN_INFO DRIVER_NAME "\n");
3361
3362	/* Register for our PCI devices */
3363	return pci_module_init(&cciss_pci_driver);
3364}
3365
3366static void __exit cciss_cleanup(void)
3367{
3368	int i;
3369
3370	pci_unregister_driver(&cciss_pci_driver);
3371	/* double check that all controller entrys have been removed */
3372	for (i=0; i< MAX_CTLR; i++)
3373	{
3374		if (hba[i] != NULL)
3375		{
3376			printk(KERN_WARNING "cciss: had to remove"
3377					" controller %d\n", i);
3378			cciss_remove_one(hba[i]->pdev);
3379		}
3380	}
3381	remove_proc_entry("cciss", proc_root_driver);
3382}
3383
3384static void fail_all_cmds(unsigned long ctlr)
3385{
3386	/* If we get here, the board is apparently dead. */
3387	ctlr_info_t *h = hba[ctlr];
3388	CommandList_struct *c;
3389	unsigned long flags;
3390
3391	printk(KERN_WARNING "cciss%d: controller not responding.\n", h->ctlr);
3392	h->alive = 0;	/* the controller apparently died... */
3393
3394	spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
3395
3396	pci_disable_device(h->pdev); /* Make sure it is really dead. */
3397
3398	/* move everything off the request queue onto the completed queue */
3399	while( (c = h->reqQ) != NULL ) {
3400		removeQ(&(h->reqQ), c);
3401		h->Qdepth--;
3402		addQ (&(h->cmpQ), c);
3403	}
3404
3405	/* Now, fail everything on the completed queue with a HW error */
3406	while( (c = h->cmpQ) != NULL ) {
3407		removeQ(&h->cmpQ, c);
3408		c->err_info->CommandStatus = CMD_HARDWARE_ERR;
3409		if (c->cmd_type == CMD_RWREQ) {
3410			complete_command(h, c, 0);
3411		} else if (c->cmd_type == CMD_IOCTL_PEND)
3412			complete(c->waiting);
3413#ifdef CONFIG_CISS_SCSI_TAPE
3414			else if (c->cmd_type == CMD_SCSI)
3415				complete_scsi_command(c, 0, 0);
3416#endif
3417	}
3418	spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
3419	return;
3420}
3421
3422module_init(cciss_init);
3423module_exit(cciss_cleanup);
3424