cciss.c revision da0021841c3ea6a82588efae3260015847ea5d33
1/*
2 *    Disk Array driver for HP Smart Array controllers.
3 *    (C) Copyright 2000, 2007 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; version 2 of the License.
8 *
9 *    This program is distributed in the hope that it will be useful,
10 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
11 *    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 *    General Public License for more details.
13 *
14 *    You should have received a copy of the GNU General Public License
15 *    along with this program; if not, write to the Free Software
16 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17 *    02111-1307, USA.
18 *
19 *    Questions/Comments/Bugfixes to iss_storagedev@hp.com
20 *
21 */
22
23#include <linux/module.h>
24#include <linux/interrupt.h>
25#include <linux/types.h>
26#include <linux/pci.h>
27#include <linux/kernel.h>
28#include <linux/slab.h>
29#include <linux/smp_lock.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/seq_file.h>
38#include <linux/init.h>
39#include <linux/jiffies.h>
40#include <linux/hdreg.h>
41#include <linux/spinlock.h>
42#include <linux/compat.h>
43#include <linux/mutex.h>
44#include <asm/uaccess.h>
45#include <asm/io.h>
46
47#include <linux/dma-mapping.h>
48#include <linux/blkdev.h>
49#include <linux/genhd.h>
50#include <linux/completion.h>
51#include <scsi/scsi.h>
52#include <scsi/sg.h>
53#include <scsi/scsi_ioctl.h>
54#include <linux/cdrom.h>
55#include <linux/scatterlist.h>
56#include <linux/kthread.h>
57
58#define CCISS_DRIVER_VERSION(maj,min,submin) ((maj<<16)|(min<<8)|(submin))
59#define DRIVER_NAME "HP CISS Driver (v 3.6.20)"
60#define DRIVER_VERSION CCISS_DRIVER_VERSION(3, 6, 20)
61
62/* Embedded module documentation macros - see modules.h */
63MODULE_AUTHOR("Hewlett-Packard Company");
64MODULE_DESCRIPTION("Driver for HP Smart Array Controllers");
65MODULE_SUPPORTED_DEVICE("HP SA5i SA5i+ SA532 SA5300 SA5312 SA641 SA642 SA6400"
66			" SA6i P600 P800 P400 P400i E200 E200i E500 P700m"
67			" Smart Array G2 Series SAS/SATA Controllers");
68MODULE_VERSION("3.6.20");
69MODULE_LICENSE("GPL");
70
71static int cciss_allow_hpsa;
72module_param(cciss_allow_hpsa, int, S_IRUGO|S_IWUSR);
73MODULE_PARM_DESC(cciss_allow_hpsa,
74	"Prevent cciss driver from accessing hardware known to be "
75	" supported by the hpsa driver");
76
77#include "cciss_cmd.h"
78#include "cciss.h"
79#include <linux/cciss_ioctl.h>
80
81/* define the PCI info for the cards we can control */
82static const struct pci_device_id cciss_pci_device_id[] = {
83	{PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISS,  0x0E11, 0x4070},
84	{PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSB, 0x0E11, 0x4080},
85	{PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSB, 0x0E11, 0x4082},
86	{PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSB, 0x0E11, 0x4083},
87	{PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC, 0x0E11, 0x4091},
88	{PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC, 0x0E11, 0x409A},
89	{PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC, 0x0E11, 0x409B},
90	{PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC, 0x0E11, 0x409C},
91	{PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC, 0x0E11, 0x409D},
92	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSA,     0x103C, 0x3225},
93	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSC,     0x103C, 0x3223},
94	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSC,     0x103C, 0x3234},
95	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSC,     0x103C, 0x3235},
96	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSD,     0x103C, 0x3211},
97	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSD,     0x103C, 0x3212},
98	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSD,     0x103C, 0x3213},
99	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSD,     0x103C, 0x3214},
100	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSD,     0x103C, 0x3215},
101	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSC,     0x103C, 0x3237},
102	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSC,     0x103C, 0x323D},
103	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3241},
104	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3243},
105	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3245},
106	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3247},
107	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3249},
108	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x324A},
109	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x324B},
110	{0,}
111};
112
113MODULE_DEVICE_TABLE(pci, cciss_pci_device_id);
114
115/*  board_id = Subsystem Device ID & Vendor ID
116 *  product = Marketing Name for the board
117 *  access = Address of the struct of function pointers
118 */
119static struct board_type products[] = {
120	{0x40700E11, "Smart Array 5300", &SA5_access},
121	{0x40800E11, "Smart Array 5i", &SA5B_access},
122	{0x40820E11, "Smart Array 532", &SA5B_access},
123	{0x40830E11, "Smart Array 5312", &SA5B_access},
124	{0x409A0E11, "Smart Array 641", &SA5_access},
125	{0x409B0E11, "Smart Array 642", &SA5_access},
126	{0x409C0E11, "Smart Array 6400", &SA5_access},
127	{0x409D0E11, "Smart Array 6400 EM", &SA5_access},
128	{0x40910E11, "Smart Array 6i", &SA5_access},
129	{0x3225103C, "Smart Array P600", &SA5_access},
130	{0x3235103C, "Smart Array P400i", &SA5_access},
131	{0x3211103C, "Smart Array E200i", &SA5_access},
132	{0x3212103C, "Smart Array E200", &SA5_access},
133	{0x3213103C, "Smart Array E200i", &SA5_access},
134	{0x3214103C, "Smart Array E200i", &SA5_access},
135	{0x3215103C, "Smart Array E200i", &SA5_access},
136	{0x3237103C, "Smart Array E500", &SA5_access},
137/* controllers below this line are also supported by the hpsa driver. */
138#define HPSA_BOUNDARY 0x3223103C
139	{0x3223103C, "Smart Array P800", &SA5_access},
140	{0x3234103C, "Smart Array P400", &SA5_access},
141	{0x323D103C, "Smart Array P700m", &SA5_access},
142	{0x3241103C, "Smart Array P212", &SA5_access},
143	{0x3243103C, "Smart Array P410", &SA5_access},
144	{0x3245103C, "Smart Array P410i", &SA5_access},
145	{0x3247103C, "Smart Array P411", &SA5_access},
146	{0x3249103C, "Smart Array P812", &SA5_access},
147	{0x324A103C, "Smart Array P712m", &SA5_access},
148	{0x324B103C, "Smart Array P711m", &SA5_access},
149};
150
151/* How long to wait (in milliseconds) for board to go into simple mode */
152#define MAX_CONFIG_WAIT 30000
153#define MAX_IOCTL_CONFIG_WAIT 1000
154
155/*define how many times we will try a command because of bus resets */
156#define MAX_CMD_RETRIES 3
157
158#define MAX_CTLR	32
159
160/* Originally cciss driver only supports 8 major numbers */
161#define MAX_CTLR_ORIG 	8
162
163static ctlr_info_t *hba[MAX_CTLR];
164
165static struct task_struct *cciss_scan_thread;
166static DEFINE_MUTEX(scan_mutex);
167static LIST_HEAD(scan_q);
168
169static void do_cciss_request(struct request_queue *q);
170static irqreturn_t do_cciss_intr(int irq, void *dev_id);
171static int cciss_open(struct block_device *bdev, fmode_t mode);
172static int cciss_release(struct gendisk *disk, fmode_t mode);
173static int cciss_ioctl(struct block_device *bdev, fmode_t mode,
174		       unsigned int cmd, unsigned long arg);
175static int cciss_getgeo(struct block_device *bdev, struct hd_geometry *geo);
176
177static int cciss_revalidate(struct gendisk *disk);
178static int rebuild_lun_table(ctlr_info_t *h, int first_time, int via_ioctl);
179static int deregister_disk(ctlr_info_t *h, int drv_index,
180			   int clear_all, int via_ioctl);
181
182static void cciss_read_capacity(int ctlr, int logvol,
183			sector_t *total_size, unsigned int *block_size);
184static void cciss_read_capacity_16(int ctlr, int logvol,
185			sector_t *total_size, unsigned int *block_size);
186static void cciss_geometry_inquiry(int ctlr, int logvol,
187			sector_t total_size,
188			unsigned int block_size, InquiryData_struct *inq_buff,
189				   drive_info_struct *drv);
190static void __devinit cciss_interrupt_mode(ctlr_info_t *, struct pci_dev *,
191					   __u32);
192static void start_io(ctlr_info_t *h);
193static int sendcmd_withirq(__u8 cmd, int ctlr, void *buff, size_t size,
194			__u8 page_code, unsigned char scsi3addr[],
195			int cmd_type);
196static int sendcmd_withirq_core(ctlr_info_t *h, CommandList_struct *c,
197	int attempt_retry);
198static int process_sendcmd_error(ctlr_info_t *h, CommandList_struct *c);
199
200static void fail_all_cmds(unsigned long ctlr);
201static int add_to_scan_list(struct ctlr_info *h);
202static int scan_thread(void *data);
203static int check_for_unit_attention(ctlr_info_t *h, CommandList_struct *c);
204static void cciss_hba_release(struct device *dev);
205static void cciss_device_release(struct device *dev);
206static void cciss_free_gendisk(ctlr_info_t *h, int drv_index);
207static void cciss_free_drive_info(ctlr_info_t *h, int drv_index);
208
209#ifdef CONFIG_PROC_FS
210static void cciss_procinit(int i);
211#else
212static void cciss_procinit(int i)
213{
214}
215#endif				/* CONFIG_PROC_FS */
216
217#ifdef CONFIG_COMPAT
218static int cciss_compat_ioctl(struct block_device *, fmode_t,
219			      unsigned, unsigned long);
220#endif
221
222static const struct block_device_operations cciss_fops = {
223	.owner = THIS_MODULE,
224	.open = cciss_open,
225	.release = cciss_release,
226	.locked_ioctl = cciss_ioctl,
227	.getgeo = cciss_getgeo,
228#ifdef CONFIG_COMPAT
229	.compat_ioctl = cciss_compat_ioctl,
230#endif
231	.revalidate_disk = cciss_revalidate,
232};
233
234/*
235 * Enqueuing and dequeuing functions for cmdlists.
236 */
237static inline void addQ(struct hlist_head *list, CommandList_struct *c)
238{
239	hlist_add_head(&c->list, list);
240}
241
242static inline void removeQ(CommandList_struct *c)
243{
244	/*
245	 * After kexec/dump some commands might still
246	 * be in flight, which the firmware will try
247	 * to complete. Resetting the firmware doesn't work
248	 * with old fw revisions, so we have to mark
249	 * them off as 'stale' to prevent the driver from
250	 * falling over.
251	 */
252	if (WARN_ON(hlist_unhashed(&c->list))) {
253		c->cmd_type = CMD_MSG_STALE;
254		return;
255	}
256
257	hlist_del_init(&c->list);
258}
259
260#include "cciss_scsi.c"		/* For SCSI tape support */
261
262static const char *raid_label[] = { "0", "4", "1(1+0)", "5", "5+1", "ADG",
263	"UNKNOWN"
264};
265#define RAID_UNKNOWN (sizeof(raid_label) / sizeof(raid_label[0])-1)
266
267#ifdef CONFIG_PROC_FS
268
269/*
270 * Report information about this controller.
271 */
272#define ENG_GIG 1000000000
273#define ENG_GIG_FACTOR (ENG_GIG/512)
274#define ENGAGE_SCSI	"engage scsi"
275
276static struct proc_dir_entry *proc_cciss;
277
278static void cciss_seq_show_header(struct seq_file *seq)
279{
280	ctlr_info_t *h = seq->private;
281
282	seq_printf(seq, "%s: HP %s Controller\n"
283		"Board ID: 0x%08lx\n"
284		"Firmware Version: %c%c%c%c\n"
285		"IRQ: %d\n"
286		"Logical drives: %d\n"
287		"Current Q depth: %d\n"
288		"Current # commands on controller: %d\n"
289		"Max Q depth since init: %d\n"
290		"Max # commands on controller since init: %d\n"
291		"Max SG entries since init: %d\n",
292		h->devname,
293		h->product_name,
294		(unsigned long)h->board_id,
295		h->firm_ver[0], h->firm_ver[1], h->firm_ver[2],
296		h->firm_ver[3], (unsigned int)h->intr[SIMPLE_MODE_INT],
297		h->num_luns,
298		h->Qdepth, h->commands_outstanding,
299		h->maxQsinceinit, h->max_outstanding, h->maxSG);
300
301#ifdef CONFIG_CISS_SCSI_TAPE
302	cciss_seq_tape_report(seq, h->ctlr);
303#endif /* CONFIG_CISS_SCSI_TAPE */
304}
305
306static void *cciss_seq_start(struct seq_file *seq, loff_t *pos)
307{
308	ctlr_info_t *h = seq->private;
309	unsigned ctlr = h->ctlr;
310	unsigned long flags;
311
312	/* prevent displaying bogus info during configuration
313	 * or deconfiguration of a logical volume
314	 */
315	spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
316	if (h->busy_configuring) {
317		spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
318		return ERR_PTR(-EBUSY);
319	}
320	h->busy_configuring = 1;
321	spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
322
323	if (*pos == 0)
324		cciss_seq_show_header(seq);
325
326	return pos;
327}
328
329static int cciss_seq_show(struct seq_file *seq, void *v)
330{
331	sector_t vol_sz, vol_sz_frac;
332	ctlr_info_t *h = seq->private;
333	unsigned ctlr = h->ctlr;
334	loff_t *pos = v;
335	drive_info_struct *drv = h->drv[*pos];
336
337	if (*pos > h->highest_lun)
338		return 0;
339
340	if (drv->heads == 0)
341		return 0;
342
343	vol_sz = drv->nr_blocks;
344	vol_sz_frac = sector_div(vol_sz, ENG_GIG_FACTOR);
345	vol_sz_frac *= 100;
346	sector_div(vol_sz_frac, ENG_GIG_FACTOR);
347
348	if (drv->raid_level < 0 || drv->raid_level > RAID_UNKNOWN)
349		drv->raid_level = RAID_UNKNOWN;
350	seq_printf(seq, "cciss/c%dd%d:"
351			"\t%4u.%02uGB\tRAID %s\n",
352			ctlr, (int) *pos, (int)vol_sz, (int)vol_sz_frac,
353			raid_label[drv->raid_level]);
354	return 0;
355}
356
357static void *cciss_seq_next(struct seq_file *seq, void *v, loff_t *pos)
358{
359	ctlr_info_t *h = seq->private;
360
361	if (*pos > h->highest_lun)
362		return NULL;
363	*pos += 1;
364
365	return pos;
366}
367
368static void cciss_seq_stop(struct seq_file *seq, void *v)
369{
370	ctlr_info_t *h = seq->private;
371
372	/* Only reset h->busy_configuring if we succeeded in setting
373	 * it during cciss_seq_start. */
374	if (v == ERR_PTR(-EBUSY))
375		return;
376
377	h->busy_configuring = 0;
378}
379
380static const struct seq_operations cciss_seq_ops = {
381	.start = cciss_seq_start,
382	.show  = cciss_seq_show,
383	.next  = cciss_seq_next,
384	.stop  = cciss_seq_stop,
385};
386
387static int cciss_seq_open(struct inode *inode, struct file *file)
388{
389	int ret = seq_open(file, &cciss_seq_ops);
390	struct seq_file *seq = file->private_data;
391
392	if (!ret)
393		seq->private = PDE(inode)->data;
394
395	return ret;
396}
397
398static ssize_t
399cciss_proc_write(struct file *file, const char __user *buf,
400		 size_t length, loff_t *ppos)
401{
402	int err;
403	char *buffer;
404
405#ifndef CONFIG_CISS_SCSI_TAPE
406	return -EINVAL;
407#endif
408
409	if (!buf || length > PAGE_SIZE - 1)
410		return -EINVAL;
411
412	buffer = (char *)__get_free_page(GFP_KERNEL);
413	if (!buffer)
414		return -ENOMEM;
415
416	err = -EFAULT;
417	if (copy_from_user(buffer, buf, length))
418		goto out;
419	buffer[length] = '\0';
420
421#ifdef CONFIG_CISS_SCSI_TAPE
422	if (strncmp(ENGAGE_SCSI, buffer, sizeof ENGAGE_SCSI - 1) == 0) {
423		struct seq_file *seq = file->private_data;
424		ctlr_info_t *h = seq->private;
425		int rc;
426
427		rc = cciss_engage_scsi(h->ctlr);
428		if (rc != 0)
429			err = -rc;
430		else
431			err = length;
432	} else
433#endif /* CONFIG_CISS_SCSI_TAPE */
434		err = -EINVAL;
435	/* might be nice to have "disengage" too, but it's not
436	   safely possible. (only 1 module use count, lock issues.) */
437
438out:
439	free_page((unsigned long)buffer);
440	return err;
441}
442
443static const struct file_operations cciss_proc_fops = {
444	.owner	 = THIS_MODULE,
445	.open    = cciss_seq_open,
446	.read    = seq_read,
447	.llseek  = seq_lseek,
448	.release = seq_release,
449	.write	 = cciss_proc_write,
450};
451
452static void __devinit cciss_procinit(int i)
453{
454	struct proc_dir_entry *pde;
455
456	if (proc_cciss == NULL)
457		proc_cciss = proc_mkdir("driver/cciss", NULL);
458	if (!proc_cciss)
459		return;
460	pde = proc_create_data(hba[i]->devname, S_IWUSR | S_IRUSR | S_IRGRP |
461					S_IROTH, proc_cciss,
462					&cciss_proc_fops, hba[i]);
463}
464#endif				/* CONFIG_PROC_FS */
465
466#define MAX_PRODUCT_NAME_LEN 19
467
468#define to_hba(n) container_of(n, struct ctlr_info, dev)
469#define to_drv(n) container_of(n, drive_info_struct, dev)
470
471static ssize_t host_store_rescan(struct device *dev,
472				 struct device_attribute *attr,
473				 const char *buf, size_t count)
474{
475	struct ctlr_info *h = to_hba(dev);
476
477	add_to_scan_list(h);
478	wake_up_process(cciss_scan_thread);
479	wait_for_completion_interruptible(&h->scan_wait);
480
481	return count;
482}
483static DEVICE_ATTR(rescan, S_IWUSR, NULL, host_store_rescan);
484
485static ssize_t dev_show_unique_id(struct device *dev,
486				 struct device_attribute *attr,
487				 char *buf)
488{
489	drive_info_struct *drv = to_drv(dev);
490	struct ctlr_info *h = to_hba(drv->dev.parent);
491	__u8 sn[16];
492	unsigned long flags;
493	int ret = 0;
494
495	spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
496	if (h->busy_configuring)
497		ret = -EBUSY;
498	else
499		memcpy(sn, drv->serial_no, sizeof(sn));
500	spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
501
502	if (ret)
503		return ret;
504	else
505		return snprintf(buf, 16 * 2 + 2,
506				"%02X%02X%02X%02X%02X%02X%02X%02X"
507				"%02X%02X%02X%02X%02X%02X%02X%02X\n",
508				sn[0], sn[1], sn[2], sn[3],
509				sn[4], sn[5], sn[6], sn[7],
510				sn[8], sn[9], sn[10], sn[11],
511				sn[12], sn[13], sn[14], sn[15]);
512}
513static DEVICE_ATTR(unique_id, S_IRUGO, dev_show_unique_id, NULL);
514
515static ssize_t dev_show_vendor(struct device *dev,
516			       struct device_attribute *attr,
517			       char *buf)
518{
519	drive_info_struct *drv = to_drv(dev);
520	struct ctlr_info *h = to_hba(drv->dev.parent);
521	char vendor[VENDOR_LEN + 1];
522	unsigned long flags;
523	int ret = 0;
524
525	spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
526	if (h->busy_configuring)
527		ret = -EBUSY;
528	else
529		memcpy(vendor, drv->vendor, VENDOR_LEN + 1);
530	spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
531
532	if (ret)
533		return ret;
534	else
535		return snprintf(buf, sizeof(vendor) + 1, "%s\n", drv->vendor);
536}
537static DEVICE_ATTR(vendor, S_IRUGO, dev_show_vendor, NULL);
538
539static ssize_t dev_show_model(struct device *dev,
540			      struct device_attribute *attr,
541			      char *buf)
542{
543	drive_info_struct *drv = to_drv(dev);
544	struct ctlr_info *h = to_hba(drv->dev.parent);
545	char model[MODEL_LEN + 1];
546	unsigned long flags;
547	int ret = 0;
548
549	spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
550	if (h->busy_configuring)
551		ret = -EBUSY;
552	else
553		memcpy(model, drv->model, MODEL_LEN + 1);
554	spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
555
556	if (ret)
557		return ret;
558	else
559		return snprintf(buf, sizeof(model) + 1, "%s\n", drv->model);
560}
561static DEVICE_ATTR(model, S_IRUGO, dev_show_model, NULL);
562
563static ssize_t dev_show_rev(struct device *dev,
564			    struct device_attribute *attr,
565			    char *buf)
566{
567	drive_info_struct *drv = to_drv(dev);
568	struct ctlr_info *h = to_hba(drv->dev.parent);
569	char rev[REV_LEN + 1];
570	unsigned long flags;
571	int ret = 0;
572
573	spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
574	if (h->busy_configuring)
575		ret = -EBUSY;
576	else
577		memcpy(rev, drv->rev, REV_LEN + 1);
578	spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
579
580	if (ret)
581		return ret;
582	else
583		return snprintf(buf, sizeof(rev) + 1, "%s\n", drv->rev);
584}
585static DEVICE_ATTR(rev, S_IRUGO, dev_show_rev, NULL);
586
587static ssize_t cciss_show_lunid(struct device *dev,
588				struct device_attribute *attr, char *buf)
589{
590	drive_info_struct *drv = to_drv(dev);
591	struct ctlr_info *h = to_hba(drv->dev.parent);
592	unsigned long flags;
593	unsigned char lunid[8];
594
595	spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
596	if (h->busy_configuring) {
597		spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
598		return -EBUSY;
599	}
600	if (!drv->heads) {
601		spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
602		return -ENOTTY;
603	}
604	memcpy(lunid, drv->LunID, sizeof(lunid));
605	spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
606	return snprintf(buf, 20, "0x%02x%02x%02x%02x%02x%02x%02x%02x\n",
607		lunid[0], lunid[1], lunid[2], lunid[3],
608		lunid[4], lunid[5], lunid[6], lunid[7]);
609}
610static DEVICE_ATTR(lunid, S_IRUGO, cciss_show_lunid, NULL);
611
612static ssize_t cciss_show_raid_level(struct device *dev,
613				     struct device_attribute *attr, char *buf)
614{
615	drive_info_struct *drv = to_drv(dev);
616	struct ctlr_info *h = to_hba(drv->dev.parent);
617	int raid;
618	unsigned long flags;
619
620	spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
621	if (h->busy_configuring) {
622		spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
623		return -EBUSY;
624	}
625	raid = drv->raid_level;
626	spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
627	if (raid < 0 || raid > RAID_UNKNOWN)
628		raid = RAID_UNKNOWN;
629
630	return snprintf(buf, strlen(raid_label[raid]) + 7, "RAID %s\n",
631			raid_label[raid]);
632}
633static DEVICE_ATTR(raid_level, S_IRUGO, cciss_show_raid_level, NULL);
634
635static ssize_t cciss_show_usage_count(struct device *dev,
636				      struct device_attribute *attr, char *buf)
637{
638	drive_info_struct *drv = to_drv(dev);
639	struct ctlr_info *h = to_hba(drv->dev.parent);
640	unsigned long flags;
641	int count;
642
643	spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
644	if (h->busy_configuring) {
645		spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
646		return -EBUSY;
647	}
648	count = drv->usage_count;
649	spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
650	return snprintf(buf, 20, "%d\n", count);
651}
652static DEVICE_ATTR(usage_count, S_IRUGO, cciss_show_usage_count, NULL);
653
654static struct attribute *cciss_host_attrs[] = {
655	&dev_attr_rescan.attr,
656	NULL
657};
658
659static struct attribute_group cciss_host_attr_group = {
660	.attrs = cciss_host_attrs,
661};
662
663static const struct attribute_group *cciss_host_attr_groups[] = {
664	&cciss_host_attr_group,
665	NULL
666};
667
668static struct device_type cciss_host_type = {
669	.name		= "cciss_host",
670	.groups		= cciss_host_attr_groups,
671	.release	= cciss_hba_release,
672};
673
674static struct attribute *cciss_dev_attrs[] = {
675	&dev_attr_unique_id.attr,
676	&dev_attr_model.attr,
677	&dev_attr_vendor.attr,
678	&dev_attr_rev.attr,
679	&dev_attr_lunid.attr,
680	&dev_attr_raid_level.attr,
681	&dev_attr_usage_count.attr,
682	NULL
683};
684
685static struct attribute_group cciss_dev_attr_group = {
686	.attrs = cciss_dev_attrs,
687};
688
689static const struct attribute_group *cciss_dev_attr_groups[] = {
690	&cciss_dev_attr_group,
691	NULL
692};
693
694static struct device_type cciss_dev_type = {
695	.name		= "cciss_device",
696	.groups		= cciss_dev_attr_groups,
697	.release	= cciss_device_release,
698};
699
700static struct bus_type cciss_bus_type = {
701	.name		= "cciss",
702};
703
704/*
705 * cciss_hba_release is called when the reference count
706 * of h->dev goes to zero.
707 */
708static void cciss_hba_release(struct device *dev)
709{
710	/*
711	 * nothing to do, but need this to avoid a warning
712	 * about not having a release handler from lib/kref.c.
713	 */
714}
715
716/*
717 * Initialize sysfs entry for each controller.  This sets up and registers
718 * the 'cciss#' directory for each individual controller under
719 * /sys/bus/pci/devices/<dev>/.
720 */
721static int cciss_create_hba_sysfs_entry(struct ctlr_info *h)
722{
723	device_initialize(&h->dev);
724	h->dev.type = &cciss_host_type;
725	h->dev.bus = &cciss_bus_type;
726	dev_set_name(&h->dev, "%s", h->devname);
727	h->dev.parent = &h->pdev->dev;
728
729	return device_add(&h->dev);
730}
731
732/*
733 * Remove sysfs entries for an hba.
734 */
735static void cciss_destroy_hba_sysfs_entry(struct ctlr_info *h)
736{
737	device_del(&h->dev);
738	put_device(&h->dev); /* final put. */
739}
740
741/* cciss_device_release is called when the reference count
742 * of h->drv[x]dev goes to zero.
743 */
744static void cciss_device_release(struct device *dev)
745{
746	drive_info_struct *drv = to_drv(dev);
747	kfree(drv);
748}
749
750/*
751 * Initialize sysfs for each logical drive.  This sets up and registers
752 * the 'c#d#' directory for each individual logical drive under
753 * /sys/bus/pci/devices/<dev/ccis#/. We also create a link from
754 * /sys/block/cciss!c#d# to this entry.
755 */
756static long cciss_create_ld_sysfs_entry(struct ctlr_info *h,
757				       int drv_index)
758{
759	struct device *dev;
760
761	if (h->drv[drv_index]->device_initialized)
762		return 0;
763
764	dev = &h->drv[drv_index]->dev;
765	device_initialize(dev);
766	dev->type = &cciss_dev_type;
767	dev->bus = &cciss_bus_type;
768	dev_set_name(dev, "c%dd%d", h->ctlr, drv_index);
769	dev->parent = &h->dev;
770	h->drv[drv_index]->device_initialized = 1;
771	return device_add(dev);
772}
773
774/*
775 * Remove sysfs entries for a logical drive.
776 */
777static void cciss_destroy_ld_sysfs_entry(struct ctlr_info *h, int drv_index,
778	int ctlr_exiting)
779{
780	struct device *dev = &h->drv[drv_index]->dev;
781
782	/* special case for c*d0, we only destroy it on controller exit */
783	if (drv_index == 0 && !ctlr_exiting)
784		return;
785
786	device_del(dev);
787	put_device(dev); /* the "final" put. */
788	h->drv[drv_index] = NULL;
789}
790
791/*
792 * For operations that cannot sleep, a command block is allocated at init,
793 * and managed by cmd_alloc() and cmd_free() using a simple bitmap to track
794 * which ones are free or in use.  For operations that can wait for kmalloc
795 * to possible sleep, this routine can be called with get_from_pool set to 0.
796 * cmd_free() MUST be called with a got_from_pool set to 0 if cmd_alloc was.
797 */
798static CommandList_struct *cmd_alloc(ctlr_info_t *h, int get_from_pool)
799{
800	CommandList_struct *c;
801	int i;
802	u64bit temp64;
803	dma_addr_t cmd_dma_handle, err_dma_handle;
804
805	if (!get_from_pool) {
806		c = (CommandList_struct *) pci_alloc_consistent(h->pdev,
807			sizeof(CommandList_struct), &cmd_dma_handle);
808		if (c == NULL)
809			return NULL;
810		memset(c, 0, sizeof(CommandList_struct));
811
812		c->cmdindex = -1;
813
814		c->err_info = (ErrorInfo_struct *)
815		    pci_alloc_consistent(h->pdev, sizeof(ErrorInfo_struct),
816			    &err_dma_handle);
817
818		if (c->err_info == NULL) {
819			pci_free_consistent(h->pdev,
820				sizeof(CommandList_struct), c, cmd_dma_handle);
821			return NULL;
822		}
823		memset(c->err_info, 0, sizeof(ErrorInfo_struct));
824	} else {		/* get it out of the controllers pool */
825
826		do {
827			i = find_first_zero_bit(h->cmd_pool_bits, h->nr_cmds);
828			if (i == h->nr_cmds)
829				return NULL;
830		} while (test_and_set_bit
831			 (i & (BITS_PER_LONG - 1),
832			  h->cmd_pool_bits + (i / BITS_PER_LONG)) != 0);
833#ifdef CCISS_DEBUG
834		printk(KERN_DEBUG "cciss: using command buffer %d\n", i);
835#endif
836		c = h->cmd_pool + i;
837		memset(c, 0, sizeof(CommandList_struct));
838		cmd_dma_handle = h->cmd_pool_dhandle
839		    + i * sizeof(CommandList_struct);
840		c->err_info = h->errinfo_pool + i;
841		memset(c->err_info, 0, sizeof(ErrorInfo_struct));
842		err_dma_handle = h->errinfo_pool_dhandle
843		    + i * sizeof(ErrorInfo_struct);
844		h->nr_allocs++;
845
846		c->cmdindex = i;
847	}
848
849	INIT_HLIST_NODE(&c->list);
850	c->busaddr = (__u32) cmd_dma_handle;
851	temp64.val = (__u64) err_dma_handle;
852	c->ErrDesc.Addr.lower = temp64.val32.lower;
853	c->ErrDesc.Addr.upper = temp64.val32.upper;
854	c->ErrDesc.Len = sizeof(ErrorInfo_struct);
855
856	c->ctlr = h->ctlr;
857	return c;
858}
859
860/*
861 * Frees a command block that was previously allocated with cmd_alloc().
862 */
863static void cmd_free(ctlr_info_t *h, CommandList_struct *c, int got_from_pool)
864{
865	int i;
866	u64bit temp64;
867
868	if (!got_from_pool) {
869		temp64.val32.lower = c->ErrDesc.Addr.lower;
870		temp64.val32.upper = c->ErrDesc.Addr.upper;
871		pci_free_consistent(h->pdev, sizeof(ErrorInfo_struct),
872				    c->err_info, (dma_addr_t) temp64.val);
873		pci_free_consistent(h->pdev, sizeof(CommandList_struct),
874				    c, (dma_addr_t) c->busaddr);
875	} else {
876		i = c - h->cmd_pool;
877		clear_bit(i & (BITS_PER_LONG - 1),
878			  h->cmd_pool_bits + (i / BITS_PER_LONG));
879		h->nr_frees++;
880	}
881}
882
883static inline ctlr_info_t *get_host(struct gendisk *disk)
884{
885	return disk->queue->queuedata;
886}
887
888static inline drive_info_struct *get_drv(struct gendisk *disk)
889{
890	return disk->private_data;
891}
892
893/*
894 * Open.  Make sure the device is really there.
895 */
896static int cciss_open(struct block_device *bdev, fmode_t mode)
897{
898	ctlr_info_t *host = get_host(bdev->bd_disk);
899	drive_info_struct *drv = get_drv(bdev->bd_disk);
900
901#ifdef CCISS_DEBUG
902	printk(KERN_DEBUG "cciss_open %s\n", bdev->bd_disk->disk_name);
903#endif				/* CCISS_DEBUG */
904
905	if (drv->busy_configuring)
906		return -EBUSY;
907	/*
908	 * Root is allowed to open raw volume zero even if it's not configured
909	 * so array config can still work. Root is also allowed to open any
910	 * volume that has a LUN ID, so it can issue IOCTL to reread the
911	 * disk information.  I don't think I really like this
912	 * but I'm already using way to many device nodes to claim another one
913	 * for "raw controller".
914	 */
915	if (drv->heads == 0) {
916		if (MINOR(bdev->bd_dev) != 0) {	/* not node 0? */
917			/* if not node 0 make sure it is a partition = 0 */
918			if (MINOR(bdev->bd_dev) & 0x0f) {
919				return -ENXIO;
920				/* if it is, make sure we have a LUN ID */
921			} else if (memcmp(drv->LunID, CTLR_LUNID,
922				sizeof(drv->LunID))) {
923				return -ENXIO;
924			}
925		}
926		if (!capable(CAP_SYS_ADMIN))
927			return -EPERM;
928	}
929	drv->usage_count++;
930	host->usage_count++;
931	return 0;
932}
933
934/*
935 * Close.  Sync first.
936 */
937static int cciss_release(struct gendisk *disk, fmode_t mode)
938{
939	ctlr_info_t *host = get_host(disk);
940	drive_info_struct *drv = get_drv(disk);
941
942#ifdef CCISS_DEBUG
943	printk(KERN_DEBUG "cciss_release %s\n", disk->disk_name);
944#endif				/* CCISS_DEBUG */
945
946	drv->usage_count--;
947	host->usage_count--;
948	return 0;
949}
950
951#ifdef CONFIG_COMPAT
952
953static int do_ioctl(struct block_device *bdev, fmode_t mode,
954		    unsigned cmd, unsigned long arg)
955{
956	int ret;
957	lock_kernel();
958	ret = cciss_ioctl(bdev, mode, cmd, arg);
959	unlock_kernel();
960	return ret;
961}
962
963static int cciss_ioctl32_passthru(struct block_device *bdev, fmode_t mode,
964				  unsigned cmd, unsigned long arg);
965static int cciss_ioctl32_big_passthru(struct block_device *bdev, fmode_t mode,
966				      unsigned cmd, unsigned long arg);
967
968static int cciss_compat_ioctl(struct block_device *bdev, fmode_t mode,
969			      unsigned cmd, unsigned long arg)
970{
971	switch (cmd) {
972	case CCISS_GETPCIINFO:
973	case CCISS_GETINTINFO:
974	case CCISS_SETINTINFO:
975	case CCISS_GETNODENAME:
976	case CCISS_SETNODENAME:
977	case CCISS_GETHEARTBEAT:
978	case CCISS_GETBUSTYPES:
979	case CCISS_GETFIRMVER:
980	case CCISS_GETDRIVVER:
981	case CCISS_REVALIDVOLS:
982	case CCISS_DEREGDISK:
983	case CCISS_REGNEWDISK:
984	case CCISS_REGNEWD:
985	case CCISS_RESCANDISK:
986	case CCISS_GETLUNINFO:
987		return do_ioctl(bdev, mode, cmd, arg);
988
989	case CCISS_PASSTHRU32:
990		return cciss_ioctl32_passthru(bdev, mode, cmd, arg);
991	case CCISS_BIG_PASSTHRU32:
992		return cciss_ioctl32_big_passthru(bdev, mode, cmd, arg);
993
994	default:
995		return -ENOIOCTLCMD;
996	}
997}
998
999static int cciss_ioctl32_passthru(struct block_device *bdev, fmode_t mode,
1000				  unsigned cmd, unsigned long arg)
1001{
1002	IOCTL32_Command_struct __user *arg32 =
1003	    (IOCTL32_Command_struct __user *) arg;
1004	IOCTL_Command_struct arg64;
1005	IOCTL_Command_struct __user *p = compat_alloc_user_space(sizeof(arg64));
1006	int err;
1007	u32 cp;
1008
1009	err = 0;
1010	err |=
1011	    copy_from_user(&arg64.LUN_info, &arg32->LUN_info,
1012			   sizeof(arg64.LUN_info));
1013	err |=
1014	    copy_from_user(&arg64.Request, &arg32->Request,
1015			   sizeof(arg64.Request));
1016	err |=
1017	    copy_from_user(&arg64.error_info, &arg32->error_info,
1018			   sizeof(arg64.error_info));
1019	err |= get_user(arg64.buf_size, &arg32->buf_size);
1020	err |= get_user(cp, &arg32->buf);
1021	arg64.buf = compat_ptr(cp);
1022	err |= copy_to_user(p, &arg64, sizeof(arg64));
1023
1024	if (err)
1025		return -EFAULT;
1026
1027	err = do_ioctl(bdev, mode, CCISS_PASSTHRU, (unsigned long)p);
1028	if (err)
1029		return err;
1030	err |=
1031	    copy_in_user(&arg32->error_info, &p->error_info,
1032			 sizeof(arg32->error_info));
1033	if (err)
1034		return -EFAULT;
1035	return err;
1036}
1037
1038static int cciss_ioctl32_big_passthru(struct block_device *bdev, fmode_t mode,
1039				      unsigned cmd, unsigned long arg)
1040{
1041	BIG_IOCTL32_Command_struct __user *arg32 =
1042	    (BIG_IOCTL32_Command_struct __user *) arg;
1043	BIG_IOCTL_Command_struct arg64;
1044	BIG_IOCTL_Command_struct __user *p =
1045	    compat_alloc_user_space(sizeof(arg64));
1046	int err;
1047	u32 cp;
1048
1049	err = 0;
1050	err |=
1051	    copy_from_user(&arg64.LUN_info, &arg32->LUN_info,
1052			   sizeof(arg64.LUN_info));
1053	err |=
1054	    copy_from_user(&arg64.Request, &arg32->Request,
1055			   sizeof(arg64.Request));
1056	err |=
1057	    copy_from_user(&arg64.error_info, &arg32->error_info,
1058			   sizeof(arg64.error_info));
1059	err |= get_user(arg64.buf_size, &arg32->buf_size);
1060	err |= get_user(arg64.malloc_size, &arg32->malloc_size);
1061	err |= get_user(cp, &arg32->buf);
1062	arg64.buf = compat_ptr(cp);
1063	err |= copy_to_user(p, &arg64, sizeof(arg64));
1064
1065	if (err)
1066		return -EFAULT;
1067
1068	err = do_ioctl(bdev, mode, CCISS_BIG_PASSTHRU, (unsigned long)p);
1069	if (err)
1070		return err;
1071	err |=
1072	    copy_in_user(&arg32->error_info, &p->error_info,
1073			 sizeof(arg32->error_info));
1074	if (err)
1075		return -EFAULT;
1076	return err;
1077}
1078#endif
1079
1080static int cciss_getgeo(struct block_device *bdev, struct hd_geometry *geo)
1081{
1082	drive_info_struct *drv = get_drv(bdev->bd_disk);
1083
1084	if (!drv->cylinders)
1085		return -ENXIO;
1086
1087	geo->heads = drv->heads;
1088	geo->sectors = drv->sectors;
1089	geo->cylinders = drv->cylinders;
1090	return 0;
1091}
1092
1093static void check_ioctl_unit_attention(ctlr_info_t *host, CommandList_struct *c)
1094{
1095	if (c->err_info->CommandStatus == CMD_TARGET_STATUS &&
1096			c->err_info->ScsiStatus != SAM_STAT_CHECK_CONDITION)
1097		(void)check_for_unit_attention(host, c);
1098}
1099/*
1100 * ioctl
1101 */
1102static int cciss_ioctl(struct block_device *bdev, fmode_t mode,
1103		       unsigned int cmd, unsigned long arg)
1104{
1105	struct gendisk *disk = bdev->bd_disk;
1106	ctlr_info_t *host = get_host(disk);
1107	drive_info_struct *drv = get_drv(disk);
1108	int ctlr = host->ctlr;
1109	void __user *argp = (void __user *)arg;
1110
1111#ifdef CCISS_DEBUG
1112	printk(KERN_DEBUG "cciss_ioctl: Called with cmd=%x %lx\n", cmd, arg);
1113#endif				/* CCISS_DEBUG */
1114
1115	switch (cmd) {
1116	case CCISS_GETPCIINFO:
1117		{
1118			cciss_pci_info_struct pciinfo;
1119
1120			if (!arg)
1121				return -EINVAL;
1122			pciinfo.domain = pci_domain_nr(host->pdev->bus);
1123			pciinfo.bus = host->pdev->bus->number;
1124			pciinfo.dev_fn = host->pdev->devfn;
1125			pciinfo.board_id = host->board_id;
1126			if (copy_to_user
1127			    (argp, &pciinfo, sizeof(cciss_pci_info_struct)))
1128				return -EFAULT;
1129			return 0;
1130		}
1131	case CCISS_GETINTINFO:
1132		{
1133			cciss_coalint_struct intinfo;
1134			if (!arg)
1135				return -EINVAL;
1136			intinfo.delay =
1137			    readl(&host->cfgtable->HostWrite.CoalIntDelay);
1138			intinfo.count =
1139			    readl(&host->cfgtable->HostWrite.CoalIntCount);
1140			if (copy_to_user
1141			    (argp, &intinfo, sizeof(cciss_coalint_struct)))
1142				return -EFAULT;
1143			return 0;
1144		}
1145	case CCISS_SETINTINFO:
1146		{
1147			cciss_coalint_struct intinfo;
1148			unsigned long flags;
1149			int i;
1150
1151			if (!arg)
1152				return -EINVAL;
1153			if (!capable(CAP_SYS_ADMIN))
1154				return -EPERM;
1155			if (copy_from_user
1156			    (&intinfo, argp, sizeof(cciss_coalint_struct)))
1157				return -EFAULT;
1158			if ((intinfo.delay == 0) && (intinfo.count == 0))
1159			{
1160//                      printk("cciss_ioctl: delay and count cannot be 0\n");
1161				return -EINVAL;
1162			}
1163			spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
1164			/* Update the field, and then ring the doorbell */
1165			writel(intinfo.delay,
1166			       &(host->cfgtable->HostWrite.CoalIntDelay));
1167			writel(intinfo.count,
1168			       &(host->cfgtable->HostWrite.CoalIntCount));
1169			writel(CFGTBL_ChangeReq, host->vaddr + SA5_DOORBELL);
1170
1171			for (i = 0; i < MAX_IOCTL_CONFIG_WAIT; i++) {
1172				if (!(readl(host->vaddr + SA5_DOORBELL)
1173				      & CFGTBL_ChangeReq))
1174					break;
1175				/* delay and try again */
1176				udelay(1000);
1177			}
1178			spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
1179			if (i >= MAX_IOCTL_CONFIG_WAIT)
1180				return -EAGAIN;
1181			return 0;
1182		}
1183	case CCISS_GETNODENAME:
1184		{
1185			NodeName_type NodeName;
1186			int i;
1187
1188			if (!arg)
1189				return -EINVAL;
1190			for (i = 0; i < 16; i++)
1191				NodeName[i] =
1192				    readb(&host->cfgtable->ServerName[i]);
1193			if (copy_to_user(argp, NodeName, sizeof(NodeName_type)))
1194				return -EFAULT;
1195			return 0;
1196		}
1197	case CCISS_SETNODENAME:
1198		{
1199			NodeName_type NodeName;
1200			unsigned long flags;
1201			int i;
1202
1203			if (!arg)
1204				return -EINVAL;
1205			if (!capable(CAP_SYS_ADMIN))
1206				return -EPERM;
1207
1208			if (copy_from_user
1209			    (NodeName, argp, sizeof(NodeName_type)))
1210				return -EFAULT;
1211
1212			spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
1213
1214			/* Update the field, and then ring the doorbell */
1215			for (i = 0; i < 16; i++)
1216				writeb(NodeName[i],
1217				       &host->cfgtable->ServerName[i]);
1218
1219			writel(CFGTBL_ChangeReq, host->vaddr + SA5_DOORBELL);
1220
1221			for (i = 0; i < MAX_IOCTL_CONFIG_WAIT; i++) {
1222				if (!(readl(host->vaddr + SA5_DOORBELL)
1223				      & CFGTBL_ChangeReq))
1224					break;
1225				/* delay and try again */
1226				udelay(1000);
1227			}
1228			spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
1229			if (i >= MAX_IOCTL_CONFIG_WAIT)
1230				return -EAGAIN;
1231			return 0;
1232		}
1233
1234	case CCISS_GETHEARTBEAT:
1235		{
1236			Heartbeat_type heartbeat;
1237
1238			if (!arg)
1239				return -EINVAL;
1240			heartbeat = readl(&host->cfgtable->HeartBeat);
1241			if (copy_to_user
1242			    (argp, &heartbeat, sizeof(Heartbeat_type)))
1243				return -EFAULT;
1244			return 0;
1245		}
1246	case CCISS_GETBUSTYPES:
1247		{
1248			BusTypes_type BusTypes;
1249
1250			if (!arg)
1251				return -EINVAL;
1252			BusTypes = readl(&host->cfgtable->BusTypes);
1253			if (copy_to_user
1254			    (argp, &BusTypes, sizeof(BusTypes_type)))
1255				return -EFAULT;
1256			return 0;
1257		}
1258	case CCISS_GETFIRMVER:
1259		{
1260			FirmwareVer_type firmware;
1261
1262			if (!arg)
1263				return -EINVAL;
1264			memcpy(firmware, host->firm_ver, 4);
1265
1266			if (copy_to_user
1267			    (argp, firmware, sizeof(FirmwareVer_type)))
1268				return -EFAULT;
1269			return 0;
1270		}
1271	case CCISS_GETDRIVVER:
1272		{
1273			DriverVer_type DriverVer = DRIVER_VERSION;
1274
1275			if (!arg)
1276				return -EINVAL;
1277
1278			if (copy_to_user
1279			    (argp, &DriverVer, sizeof(DriverVer_type)))
1280				return -EFAULT;
1281			return 0;
1282		}
1283
1284	case CCISS_DEREGDISK:
1285	case CCISS_REGNEWD:
1286	case CCISS_REVALIDVOLS:
1287		return rebuild_lun_table(host, 0, 1);
1288
1289	case CCISS_GETLUNINFO:{
1290			LogvolInfo_struct luninfo;
1291
1292			memcpy(&luninfo.LunID, drv->LunID,
1293				sizeof(luninfo.LunID));
1294			luninfo.num_opens = drv->usage_count;
1295			luninfo.num_parts = 0;
1296			if (copy_to_user(argp, &luninfo,
1297					 sizeof(LogvolInfo_struct)))
1298				return -EFAULT;
1299			return 0;
1300		}
1301	case CCISS_PASSTHRU:
1302		{
1303			IOCTL_Command_struct iocommand;
1304			CommandList_struct *c;
1305			char *buff = NULL;
1306			u64bit temp64;
1307			unsigned long flags;
1308			DECLARE_COMPLETION_ONSTACK(wait);
1309
1310			if (!arg)
1311				return -EINVAL;
1312
1313			if (!capable(CAP_SYS_RAWIO))
1314				return -EPERM;
1315
1316			if (copy_from_user
1317			    (&iocommand, argp, sizeof(IOCTL_Command_struct)))
1318				return -EFAULT;
1319			if ((iocommand.buf_size < 1) &&
1320			    (iocommand.Request.Type.Direction != XFER_NONE)) {
1321				return -EINVAL;
1322			}
1323#if 0				/* 'buf_size' member is 16-bits, and always smaller than kmalloc limit */
1324			/* Check kmalloc limits */
1325			if (iocommand.buf_size > 128000)
1326				return -EINVAL;
1327#endif
1328			if (iocommand.buf_size > 0) {
1329				buff = kmalloc(iocommand.buf_size, GFP_KERNEL);
1330				if (buff == NULL)
1331					return -EFAULT;
1332			}
1333			if (iocommand.Request.Type.Direction == XFER_WRITE) {
1334				/* Copy the data into the buffer we created */
1335				if (copy_from_user
1336				    (buff, iocommand.buf, iocommand.buf_size)) {
1337					kfree(buff);
1338					return -EFAULT;
1339				}
1340			} else {
1341				memset(buff, 0, iocommand.buf_size);
1342			}
1343			if ((c = cmd_alloc(host, 0)) == NULL) {
1344				kfree(buff);
1345				return -ENOMEM;
1346			}
1347			// Fill in the command type
1348			c->cmd_type = CMD_IOCTL_PEND;
1349			// Fill in Command Header
1350			c->Header.ReplyQueue = 0;	// unused in simple mode
1351			if (iocommand.buf_size > 0)	// buffer to fill
1352			{
1353				c->Header.SGList = 1;
1354				c->Header.SGTotal = 1;
1355			} else	// no buffers to fill
1356			{
1357				c->Header.SGList = 0;
1358				c->Header.SGTotal = 0;
1359			}
1360			c->Header.LUN = iocommand.LUN_info;
1361			c->Header.Tag.lower = c->busaddr;	// use the kernel address the cmd block for tag
1362
1363			// Fill in Request block
1364			c->Request = iocommand.Request;
1365
1366			// Fill in the scatter gather information
1367			if (iocommand.buf_size > 0) {
1368				temp64.val = pci_map_single(host->pdev, buff,
1369					iocommand.buf_size,
1370					PCI_DMA_BIDIRECTIONAL);
1371				c->SG[0].Addr.lower = temp64.val32.lower;
1372				c->SG[0].Addr.upper = temp64.val32.upper;
1373				c->SG[0].Len = iocommand.buf_size;
1374				c->SG[0].Ext = 0;	// we are not chaining
1375			}
1376			c->waiting = &wait;
1377
1378			/* Put the request on the tail of the request queue */
1379			spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
1380			addQ(&host->reqQ, c);
1381			host->Qdepth++;
1382			start_io(host);
1383			spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
1384
1385			wait_for_completion(&wait);
1386
1387			/* unlock the buffers from DMA */
1388			temp64.val32.lower = c->SG[0].Addr.lower;
1389			temp64.val32.upper = c->SG[0].Addr.upper;
1390			pci_unmap_single(host->pdev, (dma_addr_t) temp64.val,
1391					 iocommand.buf_size,
1392					 PCI_DMA_BIDIRECTIONAL);
1393
1394			check_ioctl_unit_attention(host, c);
1395
1396			/* Copy the error information out */
1397			iocommand.error_info = *(c->err_info);
1398			if (copy_to_user
1399			    (argp, &iocommand, sizeof(IOCTL_Command_struct))) {
1400				kfree(buff);
1401				cmd_free(host, c, 0);
1402				return -EFAULT;
1403			}
1404
1405			if (iocommand.Request.Type.Direction == XFER_READ) {
1406				/* Copy the data out of the buffer we created */
1407				if (copy_to_user
1408				    (iocommand.buf, buff, iocommand.buf_size)) {
1409					kfree(buff);
1410					cmd_free(host, c, 0);
1411					return -EFAULT;
1412				}
1413			}
1414			kfree(buff);
1415			cmd_free(host, c, 0);
1416			return 0;
1417		}
1418	case CCISS_BIG_PASSTHRU:{
1419			BIG_IOCTL_Command_struct *ioc;
1420			CommandList_struct *c;
1421			unsigned char **buff = NULL;
1422			int *buff_size = NULL;
1423			u64bit temp64;
1424			unsigned long flags;
1425			BYTE sg_used = 0;
1426			int status = 0;
1427			int i;
1428			DECLARE_COMPLETION_ONSTACK(wait);
1429			__u32 left;
1430			__u32 sz;
1431			BYTE __user *data_ptr;
1432
1433			if (!arg)
1434				return -EINVAL;
1435			if (!capable(CAP_SYS_RAWIO))
1436				return -EPERM;
1437			ioc = (BIG_IOCTL_Command_struct *)
1438			    kmalloc(sizeof(*ioc), GFP_KERNEL);
1439			if (!ioc) {
1440				status = -ENOMEM;
1441				goto cleanup1;
1442			}
1443			if (copy_from_user(ioc, argp, sizeof(*ioc))) {
1444				status = -EFAULT;
1445				goto cleanup1;
1446			}
1447			if ((ioc->buf_size < 1) &&
1448			    (ioc->Request.Type.Direction != XFER_NONE)) {
1449				status = -EINVAL;
1450				goto cleanup1;
1451			}
1452			/* Check kmalloc limits  using all SGs */
1453			if (ioc->malloc_size > MAX_KMALLOC_SIZE) {
1454				status = -EINVAL;
1455				goto cleanup1;
1456			}
1457			if (ioc->buf_size > ioc->malloc_size * MAXSGENTRIES) {
1458				status = -EINVAL;
1459				goto cleanup1;
1460			}
1461			buff =
1462			    kzalloc(MAXSGENTRIES * sizeof(char *), GFP_KERNEL);
1463			if (!buff) {
1464				status = -ENOMEM;
1465				goto cleanup1;
1466			}
1467			buff_size = kmalloc(MAXSGENTRIES * sizeof(int),
1468						   GFP_KERNEL);
1469			if (!buff_size) {
1470				status = -ENOMEM;
1471				goto cleanup1;
1472			}
1473			left = ioc->buf_size;
1474			data_ptr = ioc->buf;
1475			while (left) {
1476				sz = (left >
1477				      ioc->malloc_size) ? ioc->
1478				    malloc_size : left;
1479				buff_size[sg_used] = sz;
1480				buff[sg_used] = kmalloc(sz, GFP_KERNEL);
1481				if (buff[sg_used] == NULL) {
1482					status = -ENOMEM;
1483					goto cleanup1;
1484				}
1485				if (ioc->Request.Type.Direction == XFER_WRITE) {
1486					if (copy_from_user
1487					    (buff[sg_used], data_ptr, sz)) {
1488						status = -EFAULT;
1489						goto cleanup1;
1490					}
1491				} else {
1492					memset(buff[sg_used], 0, sz);
1493				}
1494				left -= sz;
1495				data_ptr += sz;
1496				sg_used++;
1497			}
1498			if ((c = cmd_alloc(host, 0)) == NULL) {
1499				status = -ENOMEM;
1500				goto cleanup1;
1501			}
1502			c->cmd_type = CMD_IOCTL_PEND;
1503			c->Header.ReplyQueue = 0;
1504
1505			if (ioc->buf_size > 0) {
1506				c->Header.SGList = sg_used;
1507				c->Header.SGTotal = sg_used;
1508			} else {
1509				c->Header.SGList = 0;
1510				c->Header.SGTotal = 0;
1511			}
1512			c->Header.LUN = ioc->LUN_info;
1513			c->Header.Tag.lower = c->busaddr;
1514
1515			c->Request = ioc->Request;
1516			if (ioc->buf_size > 0) {
1517				int i;
1518				for (i = 0; i < sg_used; i++) {
1519					temp64.val =
1520					    pci_map_single(host->pdev, buff[i],
1521						    buff_size[i],
1522						    PCI_DMA_BIDIRECTIONAL);
1523					c->SG[i].Addr.lower =
1524					    temp64.val32.lower;
1525					c->SG[i].Addr.upper =
1526					    temp64.val32.upper;
1527					c->SG[i].Len = buff_size[i];
1528					c->SG[i].Ext = 0;	/* we are not chaining */
1529				}
1530			}
1531			c->waiting = &wait;
1532			/* Put the request on the tail of the request queue */
1533			spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
1534			addQ(&host->reqQ, c);
1535			host->Qdepth++;
1536			start_io(host);
1537			spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
1538			wait_for_completion(&wait);
1539			/* unlock the buffers from DMA */
1540			for (i = 0; i < sg_used; i++) {
1541				temp64.val32.lower = c->SG[i].Addr.lower;
1542				temp64.val32.upper = c->SG[i].Addr.upper;
1543				pci_unmap_single(host->pdev,
1544					(dma_addr_t) temp64.val, buff_size[i],
1545					PCI_DMA_BIDIRECTIONAL);
1546			}
1547			check_ioctl_unit_attention(host, c);
1548			/* Copy the error information out */
1549			ioc->error_info = *(c->err_info);
1550			if (copy_to_user(argp, ioc, sizeof(*ioc))) {
1551				cmd_free(host, c, 0);
1552				status = -EFAULT;
1553				goto cleanup1;
1554			}
1555			if (ioc->Request.Type.Direction == XFER_READ) {
1556				/* Copy the data out of the buffer we created */
1557				BYTE __user *ptr = ioc->buf;
1558				for (i = 0; i < sg_used; i++) {
1559					if (copy_to_user
1560					    (ptr, buff[i], buff_size[i])) {
1561						cmd_free(host, c, 0);
1562						status = -EFAULT;
1563						goto cleanup1;
1564					}
1565					ptr += buff_size[i];
1566				}
1567			}
1568			cmd_free(host, c, 0);
1569			status = 0;
1570		      cleanup1:
1571			if (buff) {
1572				for (i = 0; i < sg_used; i++)
1573					kfree(buff[i]);
1574				kfree(buff);
1575			}
1576			kfree(buff_size);
1577			kfree(ioc);
1578			return status;
1579		}
1580
1581	/* scsi_cmd_ioctl handles these, below, though some are not */
1582	/* very meaningful for cciss.  SG_IO is the main one people want. */
1583
1584	case SG_GET_VERSION_NUM:
1585	case SG_SET_TIMEOUT:
1586	case SG_GET_TIMEOUT:
1587	case SG_GET_RESERVED_SIZE:
1588	case SG_SET_RESERVED_SIZE:
1589	case SG_EMULATED_HOST:
1590	case SG_IO:
1591	case SCSI_IOCTL_SEND_COMMAND:
1592		return scsi_cmd_ioctl(disk->queue, disk, mode, cmd, argp);
1593
1594	/* scsi_cmd_ioctl would normally handle these, below, but */
1595	/* they aren't a good fit for cciss, as CD-ROMs are */
1596	/* not supported, and we don't have any bus/target/lun */
1597	/* which we present to the kernel. */
1598
1599	case CDROM_SEND_PACKET:
1600	case CDROMCLOSETRAY:
1601	case CDROMEJECT:
1602	case SCSI_IOCTL_GET_IDLUN:
1603	case SCSI_IOCTL_GET_BUS_NUMBER:
1604	default:
1605		return -ENOTTY;
1606	}
1607}
1608
1609static void cciss_check_queues(ctlr_info_t *h)
1610{
1611	int start_queue = h->next_to_run;
1612	int i;
1613
1614	/* check to see if we have maxed out the number of commands that can
1615	 * be placed on the queue.  If so then exit.  We do this check here
1616	 * in case the interrupt we serviced was from an ioctl and did not
1617	 * free any new commands.
1618	 */
1619	if ((find_first_zero_bit(h->cmd_pool_bits, h->nr_cmds)) == h->nr_cmds)
1620		return;
1621
1622	/* We have room on the queue for more commands.  Now we need to queue
1623	 * them up.  We will also keep track of the next queue to run so
1624	 * that every queue gets a chance to be started first.
1625	 */
1626	for (i = 0; i < h->highest_lun + 1; i++) {
1627		int curr_queue = (start_queue + i) % (h->highest_lun + 1);
1628		/* make sure the disk has been added and the drive is real
1629		 * because this can be called from the middle of init_one.
1630		 */
1631		if (!h->drv[curr_queue])
1632			continue;
1633		if (!(h->drv[curr_queue]->queue) ||
1634			!(h->drv[curr_queue]->heads))
1635			continue;
1636		blk_start_queue(h->gendisk[curr_queue]->queue);
1637
1638		/* check to see if we have maxed out the number of commands
1639		 * that can be placed on the queue.
1640		 */
1641		if ((find_first_zero_bit(h->cmd_pool_bits, h->nr_cmds)) == h->nr_cmds) {
1642			if (curr_queue == start_queue) {
1643				h->next_to_run =
1644				    (start_queue + 1) % (h->highest_lun + 1);
1645				break;
1646			} else {
1647				h->next_to_run = curr_queue;
1648				break;
1649			}
1650		}
1651	}
1652}
1653
1654static void cciss_softirq_done(struct request *rq)
1655{
1656	CommandList_struct *cmd = rq->completion_data;
1657	ctlr_info_t *h = hba[cmd->ctlr];
1658	unsigned long flags;
1659	u64bit temp64;
1660	int i, ddir;
1661
1662	if (cmd->Request.Type.Direction == XFER_READ)
1663		ddir = PCI_DMA_FROMDEVICE;
1664	else
1665		ddir = PCI_DMA_TODEVICE;
1666
1667	/* command did not need to be retried */
1668	/* unmap the DMA mapping for all the scatter gather elements */
1669	for (i = 0; i < cmd->Header.SGList; i++) {
1670		temp64.val32.lower = cmd->SG[i].Addr.lower;
1671		temp64.val32.upper = cmd->SG[i].Addr.upper;
1672		pci_unmap_page(h->pdev, temp64.val, cmd->SG[i].Len, ddir);
1673	}
1674
1675#ifdef CCISS_DEBUG
1676	printk("Done with %p\n", rq);
1677#endif				/* CCISS_DEBUG */
1678
1679	/* set the residual count for pc requests */
1680	if (blk_pc_request(rq))
1681		rq->resid_len = cmd->err_info->ResidualCnt;
1682
1683	blk_end_request_all(rq, (rq->errors == 0) ? 0 : -EIO);
1684
1685	spin_lock_irqsave(&h->lock, flags);
1686	cmd_free(h, cmd, 1);
1687	cciss_check_queues(h);
1688	spin_unlock_irqrestore(&h->lock, flags);
1689}
1690
1691static inline void log_unit_to_scsi3addr(ctlr_info_t *h,
1692	unsigned char scsi3addr[], uint32_t log_unit)
1693{
1694	memcpy(scsi3addr, h->drv[log_unit]->LunID,
1695		sizeof(h->drv[log_unit]->LunID));
1696}
1697
1698/* This function gets the SCSI vendor, model, and revision of a logical drive
1699 * via the inquiry page 0.  Model, vendor, and rev are set to empty strings if
1700 * they cannot be read.
1701 */
1702static void cciss_get_device_descr(int ctlr, int logvol,
1703				   char *vendor, char *model, char *rev)
1704{
1705	int rc;
1706	InquiryData_struct *inq_buf;
1707	unsigned char scsi3addr[8];
1708
1709	*vendor = '\0';
1710	*model = '\0';
1711	*rev = '\0';
1712
1713	inq_buf = kzalloc(sizeof(InquiryData_struct), GFP_KERNEL);
1714	if (!inq_buf)
1715		return;
1716
1717	log_unit_to_scsi3addr(hba[ctlr], scsi3addr, logvol);
1718	rc = sendcmd_withirq(CISS_INQUIRY, ctlr, inq_buf, sizeof(*inq_buf), 0,
1719			scsi3addr, TYPE_CMD);
1720	if (rc == IO_OK) {
1721		memcpy(vendor, &inq_buf->data_byte[8], VENDOR_LEN);
1722		vendor[VENDOR_LEN] = '\0';
1723		memcpy(model, &inq_buf->data_byte[16], MODEL_LEN);
1724		model[MODEL_LEN] = '\0';
1725		memcpy(rev, &inq_buf->data_byte[32], REV_LEN);
1726		rev[REV_LEN] = '\0';
1727	}
1728
1729	kfree(inq_buf);
1730	return;
1731}
1732
1733/* This function gets the serial number of a logical drive via
1734 * inquiry page 0x83.  Serial no. is 16 bytes.  If the serial
1735 * number cannot be had, for whatever reason, 16 bytes of 0xff
1736 * are returned instead.
1737 */
1738static void cciss_get_serial_no(int ctlr, int logvol,
1739				unsigned char *serial_no, int buflen)
1740{
1741#define PAGE_83_INQ_BYTES 64
1742	int rc;
1743	unsigned char *buf;
1744	unsigned char scsi3addr[8];
1745
1746	if (buflen > 16)
1747		buflen = 16;
1748	memset(serial_no, 0xff, buflen);
1749	buf = kzalloc(PAGE_83_INQ_BYTES, GFP_KERNEL);
1750	if (!buf)
1751		return;
1752	memset(serial_no, 0, buflen);
1753	log_unit_to_scsi3addr(hba[ctlr], scsi3addr, logvol);
1754	rc = sendcmd_withirq(CISS_INQUIRY, ctlr, buf,
1755		PAGE_83_INQ_BYTES, 0x83, scsi3addr, TYPE_CMD);
1756	if (rc == IO_OK)
1757		memcpy(serial_no, &buf[8], buflen);
1758	kfree(buf);
1759	return;
1760}
1761
1762/*
1763 * cciss_add_disk sets up the block device queue for a logical drive
1764 */
1765static int cciss_add_disk(ctlr_info_t *h, struct gendisk *disk,
1766				int drv_index)
1767{
1768	disk->queue = blk_init_queue(do_cciss_request, &h->lock);
1769	if (!disk->queue)
1770		goto init_queue_failure;
1771	sprintf(disk->disk_name, "cciss/c%dd%d", h->ctlr, drv_index);
1772	disk->major = h->major;
1773	disk->first_minor = drv_index << NWD_SHIFT;
1774	disk->fops = &cciss_fops;
1775	if (cciss_create_ld_sysfs_entry(h, drv_index))
1776		goto cleanup_queue;
1777	disk->private_data = h->drv[drv_index];
1778	disk->driverfs_dev = &h->drv[drv_index]->dev;
1779
1780	/* Set up queue information */
1781	blk_queue_bounce_limit(disk->queue, h->pdev->dma_mask);
1782
1783	/* This is a hardware imposed limit. */
1784	blk_queue_max_hw_segments(disk->queue, MAXSGENTRIES);
1785
1786	/* This is a limit in the driver and could be eliminated. */
1787	blk_queue_max_phys_segments(disk->queue, MAXSGENTRIES);
1788
1789	blk_queue_max_sectors(disk->queue, h->cciss_max_sectors);
1790
1791	blk_queue_softirq_done(disk->queue, cciss_softirq_done);
1792
1793	disk->queue->queuedata = h;
1794
1795	blk_queue_logical_block_size(disk->queue,
1796				     h->drv[drv_index]->block_size);
1797
1798	/* Make sure all queue data is written out before */
1799	/* setting h->drv[drv_index]->queue, as setting this */
1800	/* allows the interrupt handler to start the queue */
1801	wmb();
1802	h->drv[drv_index]->queue = disk->queue;
1803	add_disk(disk);
1804	return 0;
1805
1806cleanup_queue:
1807	blk_cleanup_queue(disk->queue);
1808	disk->queue = NULL;
1809init_queue_failure:
1810	return -1;
1811}
1812
1813/* This function will check the usage_count of the drive to be updated/added.
1814 * If the usage_count is zero and it is a heretofore unknown drive, or,
1815 * the drive's capacity, geometry, or serial number has changed,
1816 * then the drive information will be updated and the disk will be
1817 * re-registered with the kernel.  If these conditions don't hold,
1818 * then it will be left alone for the next reboot.  The exception to this
1819 * is disk 0 which will always be left registered with the kernel since it
1820 * is also the controller node.  Any changes to disk 0 will show up on
1821 * the next reboot.
1822 */
1823static void cciss_update_drive_info(int ctlr, int drv_index, int first_time,
1824	int via_ioctl)
1825{
1826	ctlr_info_t *h = hba[ctlr];
1827	struct gendisk *disk;
1828	InquiryData_struct *inq_buff = NULL;
1829	unsigned int block_size;
1830	sector_t total_size;
1831	unsigned long flags = 0;
1832	int ret = 0;
1833	drive_info_struct *drvinfo;
1834
1835	/* Get information about the disk and modify the driver structure */
1836	inq_buff = kmalloc(sizeof(InquiryData_struct), GFP_KERNEL);
1837	drvinfo = kzalloc(sizeof(*drvinfo), GFP_KERNEL);
1838	if (inq_buff == NULL || drvinfo == NULL)
1839		goto mem_msg;
1840
1841	/* testing to see if 16-byte CDBs are already being used */
1842	if (h->cciss_read == CCISS_READ_16) {
1843		cciss_read_capacity_16(h->ctlr, drv_index,
1844			&total_size, &block_size);
1845
1846	} else {
1847		cciss_read_capacity(ctlr, drv_index, &total_size, &block_size);
1848		/* if read_capacity returns all F's this volume is >2TB */
1849		/* in size so we switch to 16-byte CDB's for all */
1850		/* read/write ops */
1851		if (total_size == 0xFFFFFFFFULL) {
1852			cciss_read_capacity_16(ctlr, drv_index,
1853			&total_size, &block_size);
1854			h->cciss_read = CCISS_READ_16;
1855			h->cciss_write = CCISS_WRITE_16;
1856		} else {
1857			h->cciss_read = CCISS_READ_10;
1858			h->cciss_write = CCISS_WRITE_10;
1859		}
1860	}
1861
1862	cciss_geometry_inquiry(ctlr, drv_index, total_size, block_size,
1863			       inq_buff, drvinfo);
1864	drvinfo->block_size = block_size;
1865	drvinfo->nr_blocks = total_size + 1;
1866
1867	cciss_get_device_descr(ctlr, drv_index, drvinfo->vendor,
1868				drvinfo->model, drvinfo->rev);
1869	cciss_get_serial_no(ctlr, drv_index, drvinfo->serial_no,
1870			sizeof(drvinfo->serial_no));
1871	/* Save the lunid in case we deregister the disk, below. */
1872	memcpy(drvinfo->LunID, h->drv[drv_index]->LunID,
1873		sizeof(drvinfo->LunID));
1874
1875	/* Is it the same disk we already know, and nothing's changed? */
1876	if (h->drv[drv_index]->raid_level != -1 &&
1877		((memcmp(drvinfo->serial_no,
1878				h->drv[drv_index]->serial_no, 16) == 0) &&
1879		drvinfo->block_size == h->drv[drv_index]->block_size &&
1880		drvinfo->nr_blocks == h->drv[drv_index]->nr_blocks &&
1881		drvinfo->heads == h->drv[drv_index]->heads &&
1882		drvinfo->sectors == h->drv[drv_index]->sectors &&
1883		drvinfo->cylinders == h->drv[drv_index]->cylinders))
1884			/* The disk is unchanged, nothing to update */
1885			goto freeret;
1886
1887	/* If we get here it's not the same disk, or something's changed,
1888	 * so we need to * deregister it, and re-register it, if it's not
1889	 * in use.
1890	 * If the disk already exists then deregister it before proceeding
1891	 * (unless it's the first disk (for the controller node).
1892	 */
1893	if (h->drv[drv_index]->raid_level != -1 && drv_index != 0) {
1894		printk(KERN_WARNING "disk %d has changed.\n", drv_index);
1895		spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
1896		h->drv[drv_index]->busy_configuring = 1;
1897		spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
1898
1899		/* deregister_disk sets h->drv[drv_index]->queue = NULL
1900		 * which keeps the interrupt handler from starting
1901		 * the queue.
1902		 */
1903		ret = deregister_disk(h, drv_index, 0, via_ioctl);
1904	}
1905
1906	/* If the disk is in use return */
1907	if (ret)
1908		goto freeret;
1909
1910	/* Save the new information from cciss_geometry_inquiry
1911	 * and serial number inquiry.  If the disk was deregistered
1912	 * above, then h->drv[drv_index] will be NULL.
1913	 */
1914	if (h->drv[drv_index] == NULL) {
1915		drvinfo->device_initialized = 0;
1916		h->drv[drv_index] = drvinfo;
1917		drvinfo = NULL; /* so it won't be freed below. */
1918	} else {
1919		/* special case for cxd0 */
1920		h->drv[drv_index]->block_size = drvinfo->block_size;
1921		h->drv[drv_index]->nr_blocks = drvinfo->nr_blocks;
1922		h->drv[drv_index]->heads = drvinfo->heads;
1923		h->drv[drv_index]->sectors = drvinfo->sectors;
1924		h->drv[drv_index]->cylinders = drvinfo->cylinders;
1925		h->drv[drv_index]->raid_level = drvinfo->raid_level;
1926		memcpy(h->drv[drv_index]->serial_no, drvinfo->serial_no, 16);
1927		memcpy(h->drv[drv_index]->vendor, drvinfo->vendor,
1928			VENDOR_LEN + 1);
1929		memcpy(h->drv[drv_index]->model, drvinfo->model, MODEL_LEN + 1);
1930		memcpy(h->drv[drv_index]->rev, drvinfo->rev, REV_LEN + 1);
1931	}
1932
1933	++h->num_luns;
1934	disk = h->gendisk[drv_index];
1935	set_capacity(disk, h->drv[drv_index]->nr_blocks);
1936
1937	/* If it's not disk 0 (drv_index != 0)
1938	 * or if it was disk 0, but there was previously
1939	 * no actual corresponding configured logical drive
1940	 * (raid_leve == -1) then we want to update the
1941	 * logical drive's information.
1942	 */
1943	if (drv_index || first_time) {
1944		if (cciss_add_disk(h, disk, drv_index) != 0) {
1945			cciss_free_gendisk(h, drv_index);
1946			cciss_free_drive_info(h, drv_index);
1947			printk(KERN_WARNING "cciss:%d could not update "
1948				"disk %d\n", h->ctlr, drv_index);
1949			--h->num_luns;
1950		}
1951	}
1952
1953freeret:
1954	kfree(inq_buff);
1955	kfree(drvinfo);
1956	return;
1957mem_msg:
1958	printk(KERN_ERR "cciss: out of memory\n");
1959	goto freeret;
1960}
1961
1962/* This function will find the first index of the controllers drive array
1963 * that has a null drv pointer and allocate the drive info struct and
1964 * will return that index   This is where new drives will be added.
1965 * If the index to be returned is greater than the highest_lun index for
1966 * the controller then highest_lun is set * to this new index.
1967 * If there are no available indexes or if tha allocation fails, then -1
1968 * is returned.  * "controller_node" is used to know if this is a real
1969 * logical drive, or just the controller node, which determines if this
1970 * counts towards highest_lun.
1971 */
1972static int cciss_alloc_drive_info(ctlr_info_t *h, int controller_node)
1973{
1974	int i;
1975	drive_info_struct *drv;
1976
1977	/* Search for an empty slot for our drive info */
1978	for (i = 0; i < CISS_MAX_LUN; i++) {
1979
1980		/* if not cxd0 case, and it's occupied, skip it. */
1981		if (h->drv[i] && i != 0)
1982			continue;
1983		/*
1984		 * If it's cxd0 case, and drv is alloc'ed already, and a
1985		 * disk is configured there, skip it.
1986		 */
1987		if (i == 0 && h->drv[i] && h->drv[i]->raid_level != -1)
1988			continue;
1989
1990		/*
1991		 * We've found an empty slot.  Update highest_lun
1992		 * provided this isn't just the fake cxd0 controller node.
1993		 */
1994		if (i > h->highest_lun && !controller_node)
1995			h->highest_lun = i;
1996
1997		/* If adding a real disk at cxd0, and it's already alloc'ed */
1998		if (i == 0 && h->drv[i] != NULL)
1999			return i;
2000
2001		/*
2002		 * Found an empty slot, not already alloc'ed.  Allocate it.
2003		 * Mark it with raid_level == -1, so we know it's new later on.
2004		 */
2005		drv = kzalloc(sizeof(*drv), GFP_KERNEL);
2006		if (!drv)
2007			return -1;
2008		drv->raid_level = -1; /* so we know it's new */
2009		h->drv[i] = drv;
2010		return i;
2011	}
2012	return -1;
2013}
2014
2015static void cciss_free_drive_info(ctlr_info_t *h, int drv_index)
2016{
2017	kfree(h->drv[drv_index]);
2018	h->drv[drv_index] = NULL;
2019}
2020
2021static void cciss_free_gendisk(ctlr_info_t *h, int drv_index)
2022{
2023	put_disk(h->gendisk[drv_index]);
2024	h->gendisk[drv_index] = NULL;
2025}
2026
2027/* cciss_add_gendisk finds a free hba[]->drv structure
2028 * and allocates a gendisk if needed, and sets the lunid
2029 * in the drvinfo structure.   It returns the index into
2030 * the ->drv[] array, or -1 if none are free.
2031 * is_controller_node indicates whether highest_lun should
2032 * count this disk, or if it's only being added to provide
2033 * a means to talk to the controller in case no logical
2034 * drives have yet been configured.
2035 */
2036static int cciss_add_gendisk(ctlr_info_t *h, unsigned char lunid[],
2037	int controller_node)
2038{
2039	int drv_index;
2040
2041	drv_index = cciss_alloc_drive_info(h, controller_node);
2042	if (drv_index == -1)
2043		return -1;
2044
2045	/*Check if the gendisk needs to be allocated */
2046	if (!h->gendisk[drv_index]) {
2047		h->gendisk[drv_index] =
2048			alloc_disk(1 << NWD_SHIFT);
2049		if (!h->gendisk[drv_index]) {
2050			printk(KERN_ERR "cciss%d: could not "
2051				"allocate a new disk %d\n",
2052				h->ctlr, drv_index);
2053			goto err_free_drive_info;
2054		}
2055	}
2056	memcpy(h->drv[drv_index]->LunID, lunid,
2057		sizeof(h->drv[drv_index]->LunID));
2058	if (cciss_create_ld_sysfs_entry(h, drv_index))
2059		goto err_free_disk;
2060	/* Don't need to mark this busy because nobody */
2061	/* else knows about this disk yet to contend */
2062	/* for access to it. */
2063	h->drv[drv_index]->busy_configuring = 0;
2064	wmb();
2065	return drv_index;
2066
2067err_free_disk:
2068	cciss_free_gendisk(h, drv_index);
2069err_free_drive_info:
2070	cciss_free_drive_info(h, drv_index);
2071	return -1;
2072}
2073
2074/* This is for the special case of a controller which
2075 * has no logical drives.  In this case, we still need
2076 * to register a disk so the controller can be accessed
2077 * by the Array Config Utility.
2078 */
2079static void cciss_add_controller_node(ctlr_info_t *h)
2080{
2081	struct gendisk *disk;
2082	int drv_index;
2083
2084	if (h->gendisk[0] != NULL) /* already did this? Then bail. */
2085		return;
2086
2087	drv_index = cciss_add_gendisk(h, CTLR_LUNID, 1);
2088	if (drv_index == -1)
2089		goto error;
2090	h->drv[drv_index]->block_size = 512;
2091	h->drv[drv_index]->nr_blocks = 0;
2092	h->drv[drv_index]->heads = 0;
2093	h->drv[drv_index]->sectors = 0;
2094	h->drv[drv_index]->cylinders = 0;
2095	h->drv[drv_index]->raid_level = -1;
2096	memset(h->drv[drv_index]->serial_no, 0, 16);
2097	disk = h->gendisk[drv_index];
2098	if (cciss_add_disk(h, disk, drv_index) == 0)
2099		return;
2100	cciss_free_gendisk(h, drv_index);
2101	cciss_free_drive_info(h, drv_index);
2102error:
2103	printk(KERN_WARNING "cciss%d: could not "
2104		"add disk 0.\n", h->ctlr);
2105	return;
2106}
2107
2108/* This function will add and remove logical drives from the Logical
2109 * drive array of the controller and maintain persistency of ordering
2110 * so that mount points are preserved until the next reboot.  This allows
2111 * for the removal of logical drives in the middle of the drive array
2112 * without a re-ordering of those drives.
2113 * INPUT
2114 * h		= The controller to perform the operations on
2115 */
2116static int rebuild_lun_table(ctlr_info_t *h, int first_time,
2117	int via_ioctl)
2118{
2119	int ctlr = h->ctlr;
2120	int num_luns;
2121	ReportLunData_struct *ld_buff = NULL;
2122	int return_code;
2123	int listlength = 0;
2124	int i;
2125	int drv_found;
2126	int drv_index = 0;
2127	unsigned char lunid[8] = CTLR_LUNID;
2128	unsigned long flags;
2129
2130	if (!capable(CAP_SYS_RAWIO))
2131		return -EPERM;
2132
2133	/* Set busy_configuring flag for this operation */
2134	spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
2135	if (h->busy_configuring) {
2136		spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
2137		return -EBUSY;
2138	}
2139	h->busy_configuring = 1;
2140	spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
2141
2142	ld_buff = kzalloc(sizeof(ReportLunData_struct), GFP_KERNEL);
2143	if (ld_buff == NULL)
2144		goto mem_msg;
2145
2146	return_code = sendcmd_withirq(CISS_REPORT_LOG, ctlr, ld_buff,
2147				      sizeof(ReportLunData_struct),
2148				      0, CTLR_LUNID, TYPE_CMD);
2149
2150	if (return_code == IO_OK)
2151		listlength = be32_to_cpu(*(__be32 *) ld_buff->LUNListLength);
2152	else {	/* reading number of logical volumes failed */
2153		printk(KERN_WARNING "cciss: report logical volume"
2154		       " command failed\n");
2155		listlength = 0;
2156		goto freeret;
2157	}
2158
2159	num_luns = listlength / 8;	/* 8 bytes per entry */
2160	if (num_luns > CISS_MAX_LUN) {
2161		num_luns = CISS_MAX_LUN;
2162		printk(KERN_WARNING "cciss: more luns configured"
2163		       " on controller than can be handled by"
2164		       " this driver.\n");
2165	}
2166
2167	if (num_luns == 0)
2168		cciss_add_controller_node(h);
2169
2170	/* Compare controller drive array to driver's drive array
2171	 * to see if any drives are missing on the controller due
2172	 * to action of Array Config Utility (user deletes drive)
2173	 * and deregister logical drives which have disappeared.
2174	 */
2175	for (i = 0; i <= h->highest_lun; i++) {
2176		int j;
2177		drv_found = 0;
2178
2179		/* skip holes in the array from already deleted drives */
2180		if (h->drv[i] == NULL)
2181			continue;
2182
2183		for (j = 0; j < num_luns; j++) {
2184			memcpy(lunid, &ld_buff->LUN[j][0], sizeof(lunid));
2185			if (memcmp(h->drv[i]->LunID, lunid,
2186				sizeof(lunid)) == 0) {
2187				drv_found = 1;
2188				break;
2189			}
2190		}
2191		if (!drv_found) {
2192			/* Deregister it from the OS, it's gone. */
2193			spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
2194			h->drv[i]->busy_configuring = 1;
2195			spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
2196			return_code = deregister_disk(h, i, 1, via_ioctl);
2197			if (h->drv[i] != NULL)
2198				h->drv[i]->busy_configuring = 0;
2199		}
2200	}
2201
2202	/* Compare controller drive array to driver's drive array.
2203	 * Check for updates in the drive information and any new drives
2204	 * on the controller due to ACU adding logical drives, or changing
2205	 * a logical drive's size, etc.  Reregister any new/changed drives
2206	 */
2207	for (i = 0; i < num_luns; i++) {
2208		int j;
2209
2210		drv_found = 0;
2211
2212		memcpy(lunid, &ld_buff->LUN[i][0], sizeof(lunid));
2213		/* Find if the LUN is already in the drive array
2214		 * of the driver.  If so then update its info
2215		 * if not in use.  If it does not exist then find
2216		 * the first free index and add it.
2217		 */
2218		for (j = 0; j <= h->highest_lun; j++) {
2219			if (h->drv[j] != NULL &&
2220				memcmp(h->drv[j]->LunID, lunid,
2221					sizeof(h->drv[j]->LunID)) == 0) {
2222				drv_index = j;
2223				drv_found = 1;
2224				break;
2225			}
2226		}
2227
2228		/* check if the drive was found already in the array */
2229		if (!drv_found) {
2230			drv_index = cciss_add_gendisk(h, lunid, 0);
2231			if (drv_index == -1)
2232				goto freeret;
2233		}
2234		cciss_update_drive_info(ctlr, drv_index, first_time,
2235			via_ioctl);
2236	}		/* end for */
2237
2238freeret:
2239	kfree(ld_buff);
2240	h->busy_configuring = 0;
2241	/* We return -1 here to tell the ACU that we have registered/updated
2242	 * all of the drives that we can and to keep it from calling us
2243	 * additional times.
2244	 */
2245	return -1;
2246mem_msg:
2247	printk(KERN_ERR "cciss: out of memory\n");
2248	h->busy_configuring = 0;
2249	goto freeret;
2250}
2251
2252static void cciss_clear_drive_info(drive_info_struct *drive_info)
2253{
2254	/* zero out the disk size info */
2255	drive_info->nr_blocks = 0;
2256	drive_info->block_size = 0;
2257	drive_info->heads = 0;
2258	drive_info->sectors = 0;
2259	drive_info->cylinders = 0;
2260	drive_info->raid_level = -1;
2261	memset(drive_info->serial_no, 0, sizeof(drive_info->serial_no));
2262	memset(drive_info->model, 0, sizeof(drive_info->model));
2263	memset(drive_info->rev, 0, sizeof(drive_info->rev));
2264	memset(drive_info->vendor, 0, sizeof(drive_info->vendor));
2265	/*
2266	 * don't clear the LUNID though, we need to remember which
2267	 * one this one is.
2268	 */
2269}
2270
2271/* This function will deregister the disk and it's queue from the
2272 * kernel.  It must be called with the controller lock held and the
2273 * drv structures busy_configuring flag set.  It's parameters are:
2274 *
2275 * disk = This is the disk to be deregistered
2276 * drv  = This is the drive_info_struct associated with the disk to be
2277 *        deregistered.  It contains information about the disk used
2278 *        by the driver.
2279 * clear_all = This flag determines whether or not the disk information
2280 *             is going to be completely cleared out and the highest_lun
2281 *             reset.  Sometimes we want to clear out information about
2282 *             the disk in preparation for re-adding it.  In this case
2283 *             the highest_lun should be left unchanged and the LunID
2284 *             should not be cleared.
2285 * via_ioctl
2286 *    This indicates whether we've reached this path via ioctl.
2287 *    This affects the maximum usage count allowed for c0d0 to be messed with.
2288 *    If this path is reached via ioctl(), then the max_usage_count will
2289 *    be 1, as the process calling ioctl() has got to have the device open.
2290 *    If we get here via sysfs, then the max usage count will be zero.
2291*/
2292static int deregister_disk(ctlr_info_t *h, int drv_index,
2293			   int clear_all, int via_ioctl)
2294{
2295	int i;
2296	struct gendisk *disk;
2297	drive_info_struct *drv;
2298	int recalculate_highest_lun;
2299
2300	if (!capable(CAP_SYS_RAWIO))
2301		return -EPERM;
2302
2303	drv = h->drv[drv_index];
2304	disk = h->gendisk[drv_index];
2305
2306	/* make sure logical volume is NOT is use */
2307	if (clear_all || (h->gendisk[0] == disk)) {
2308		if (drv->usage_count > via_ioctl)
2309			return -EBUSY;
2310	} else if (drv->usage_count > 0)
2311		return -EBUSY;
2312
2313	recalculate_highest_lun = (drv == h->drv[h->highest_lun]);
2314
2315	/* invalidate the devices and deregister the disk.  If it is disk
2316	 * zero do not deregister it but just zero out it's values.  This
2317	 * allows us to delete disk zero but keep the controller registered.
2318	 */
2319	if (h->gendisk[0] != disk) {
2320		struct request_queue *q = disk->queue;
2321		if (disk->flags & GENHD_FL_UP) {
2322			cciss_destroy_ld_sysfs_entry(h, drv_index, 0);
2323			del_gendisk(disk);
2324		}
2325		if (q)
2326			blk_cleanup_queue(q);
2327		/* If clear_all is set then we are deleting the logical
2328		 * drive, not just refreshing its info.  For drives
2329		 * other than disk 0 we will call put_disk.  We do not
2330		 * do this for disk 0 as we need it to be able to
2331		 * configure the controller.
2332		 */
2333		if (clear_all){
2334			/* This isn't pretty, but we need to find the
2335			 * disk in our array and NULL our the pointer.
2336			 * This is so that we will call alloc_disk if
2337			 * this index is used again later.
2338			 */
2339			for (i=0; i < CISS_MAX_LUN; i++){
2340				if (h->gendisk[i] == disk) {
2341					h->gendisk[i] = NULL;
2342					break;
2343				}
2344			}
2345			put_disk(disk);
2346		}
2347	} else {
2348		set_capacity(disk, 0);
2349		cciss_clear_drive_info(drv);
2350	}
2351
2352	--h->num_luns;
2353
2354	/* if it was the last disk, find the new hightest lun */
2355	if (clear_all && recalculate_highest_lun) {
2356		int i, newhighest = -1;
2357		for (i = 0; i <= h->highest_lun; i++) {
2358			/* if the disk has size > 0, it is available */
2359			if (h->drv[i] && h->drv[i]->heads)
2360				newhighest = i;
2361		}
2362		h->highest_lun = newhighest;
2363	}
2364	return 0;
2365}
2366
2367static int fill_cmd(CommandList_struct *c, __u8 cmd, int ctlr, void *buff,
2368		size_t size, __u8 page_code, unsigned char *scsi3addr,
2369		int cmd_type)
2370{
2371	ctlr_info_t *h = hba[ctlr];
2372	u64bit buff_dma_handle;
2373	int status = IO_OK;
2374
2375	c->cmd_type = CMD_IOCTL_PEND;
2376	c->Header.ReplyQueue = 0;
2377	if (buff != NULL) {
2378		c->Header.SGList = 1;
2379		c->Header.SGTotal = 1;
2380	} else {
2381		c->Header.SGList = 0;
2382		c->Header.SGTotal = 0;
2383	}
2384	c->Header.Tag.lower = c->busaddr;
2385	memcpy(c->Header.LUN.LunAddrBytes, scsi3addr, 8);
2386
2387	c->Request.Type.Type = cmd_type;
2388	if (cmd_type == TYPE_CMD) {
2389		switch (cmd) {
2390		case CISS_INQUIRY:
2391			/* are we trying to read a vital product page */
2392			if (page_code != 0) {
2393				c->Request.CDB[1] = 0x01;
2394				c->Request.CDB[2] = page_code;
2395			}
2396			c->Request.CDBLen = 6;
2397			c->Request.Type.Attribute = ATTR_SIMPLE;
2398			c->Request.Type.Direction = XFER_READ;
2399			c->Request.Timeout = 0;
2400			c->Request.CDB[0] = CISS_INQUIRY;
2401			c->Request.CDB[4] = size & 0xFF;
2402			break;
2403		case CISS_REPORT_LOG:
2404		case CISS_REPORT_PHYS:
2405			/* Talking to controller so It's a physical command
2406			   mode = 00 target = 0.  Nothing to write.
2407			 */
2408			c->Request.CDBLen = 12;
2409			c->Request.Type.Attribute = ATTR_SIMPLE;
2410			c->Request.Type.Direction = XFER_READ;
2411			c->Request.Timeout = 0;
2412			c->Request.CDB[0] = cmd;
2413			c->Request.CDB[6] = (size >> 24) & 0xFF;	//MSB
2414			c->Request.CDB[7] = (size >> 16) & 0xFF;
2415			c->Request.CDB[8] = (size >> 8) & 0xFF;
2416			c->Request.CDB[9] = size & 0xFF;
2417			break;
2418
2419		case CCISS_READ_CAPACITY:
2420			c->Request.CDBLen = 10;
2421			c->Request.Type.Attribute = ATTR_SIMPLE;
2422			c->Request.Type.Direction = XFER_READ;
2423			c->Request.Timeout = 0;
2424			c->Request.CDB[0] = cmd;
2425			break;
2426		case CCISS_READ_CAPACITY_16:
2427			c->Request.CDBLen = 16;
2428			c->Request.Type.Attribute = ATTR_SIMPLE;
2429			c->Request.Type.Direction = XFER_READ;
2430			c->Request.Timeout = 0;
2431			c->Request.CDB[0] = cmd;
2432			c->Request.CDB[1] = 0x10;
2433			c->Request.CDB[10] = (size >> 24) & 0xFF;
2434			c->Request.CDB[11] = (size >> 16) & 0xFF;
2435			c->Request.CDB[12] = (size >> 8) & 0xFF;
2436			c->Request.CDB[13] = size & 0xFF;
2437			c->Request.Timeout = 0;
2438			c->Request.CDB[0] = cmd;
2439			break;
2440		case CCISS_CACHE_FLUSH:
2441			c->Request.CDBLen = 12;
2442			c->Request.Type.Attribute = ATTR_SIMPLE;
2443			c->Request.Type.Direction = XFER_WRITE;
2444			c->Request.Timeout = 0;
2445			c->Request.CDB[0] = BMIC_WRITE;
2446			c->Request.CDB[6] = BMIC_CACHE_FLUSH;
2447			break;
2448		case TEST_UNIT_READY:
2449			c->Request.CDBLen = 6;
2450			c->Request.Type.Attribute = ATTR_SIMPLE;
2451			c->Request.Type.Direction = XFER_NONE;
2452			c->Request.Timeout = 0;
2453			break;
2454		default:
2455			printk(KERN_WARNING
2456			       "cciss%d:  Unknown Command 0x%c\n", ctlr, cmd);
2457			return IO_ERROR;
2458		}
2459	} else if (cmd_type == TYPE_MSG) {
2460		switch (cmd) {
2461		case 0:	/* ABORT message */
2462			c->Request.CDBLen = 12;
2463			c->Request.Type.Attribute = ATTR_SIMPLE;
2464			c->Request.Type.Direction = XFER_WRITE;
2465			c->Request.Timeout = 0;
2466			c->Request.CDB[0] = cmd;	/* abort */
2467			c->Request.CDB[1] = 0;	/* abort a command */
2468			/* buff contains the tag of the command to abort */
2469			memcpy(&c->Request.CDB[4], buff, 8);
2470			break;
2471		case 1:	/* RESET message */
2472			c->Request.CDBLen = 16;
2473			c->Request.Type.Attribute = ATTR_SIMPLE;
2474			c->Request.Type.Direction = XFER_NONE;
2475			c->Request.Timeout = 0;
2476			memset(&c->Request.CDB[0], 0, sizeof(c->Request.CDB));
2477			c->Request.CDB[0] = cmd;	/* reset */
2478			c->Request.CDB[1] = 0x03;	/* reset a target */
2479			break;
2480		case 3:	/* No-Op message */
2481			c->Request.CDBLen = 1;
2482			c->Request.Type.Attribute = ATTR_SIMPLE;
2483			c->Request.Type.Direction = XFER_WRITE;
2484			c->Request.Timeout = 0;
2485			c->Request.CDB[0] = cmd;
2486			break;
2487		default:
2488			printk(KERN_WARNING
2489			       "cciss%d: unknown message type %d\n", ctlr, cmd);
2490			return IO_ERROR;
2491		}
2492	} else {
2493		printk(KERN_WARNING
2494		       "cciss%d: unknown command type %d\n", ctlr, cmd_type);
2495		return IO_ERROR;
2496	}
2497	/* Fill in the scatter gather information */
2498	if (size > 0) {
2499		buff_dma_handle.val = (__u64) pci_map_single(h->pdev,
2500							     buff, size,
2501							     PCI_DMA_BIDIRECTIONAL);
2502		c->SG[0].Addr.lower = buff_dma_handle.val32.lower;
2503		c->SG[0].Addr.upper = buff_dma_handle.val32.upper;
2504		c->SG[0].Len = size;
2505		c->SG[0].Ext = 0;	/* we are not chaining */
2506	}
2507	return status;
2508}
2509
2510static int check_target_status(ctlr_info_t *h, CommandList_struct *c)
2511{
2512	switch (c->err_info->ScsiStatus) {
2513	case SAM_STAT_GOOD:
2514		return IO_OK;
2515	case SAM_STAT_CHECK_CONDITION:
2516		switch (0xf & c->err_info->SenseInfo[2]) {
2517		case 0: return IO_OK; /* no sense */
2518		case 1: return IO_OK; /* recovered error */
2519		default:
2520			if (check_for_unit_attention(h, c))
2521				return IO_NEEDS_RETRY;
2522			printk(KERN_WARNING "cciss%d: cmd 0x%02x "
2523				"check condition, sense key = 0x%02x\n",
2524				h->ctlr, c->Request.CDB[0],
2525				c->err_info->SenseInfo[2]);
2526		}
2527		break;
2528	default:
2529		printk(KERN_WARNING "cciss%d: cmd 0x%02x"
2530			"scsi status = 0x%02x\n", h->ctlr,
2531			c->Request.CDB[0], c->err_info->ScsiStatus);
2532		break;
2533	}
2534	return IO_ERROR;
2535}
2536
2537static int process_sendcmd_error(ctlr_info_t *h, CommandList_struct *c)
2538{
2539	int return_status = IO_OK;
2540
2541	if (c->err_info->CommandStatus == CMD_SUCCESS)
2542		return IO_OK;
2543
2544	switch (c->err_info->CommandStatus) {
2545	case CMD_TARGET_STATUS:
2546		return_status = check_target_status(h, c);
2547		break;
2548	case CMD_DATA_UNDERRUN:
2549	case CMD_DATA_OVERRUN:
2550		/* expected for inquiry and report lun commands */
2551		break;
2552	case CMD_INVALID:
2553		printk(KERN_WARNING "cciss: cmd 0x%02x is "
2554		       "reported invalid\n", c->Request.CDB[0]);
2555		return_status = IO_ERROR;
2556		break;
2557	case CMD_PROTOCOL_ERR:
2558		printk(KERN_WARNING "cciss: cmd 0x%02x has "
2559		       "protocol error \n", c->Request.CDB[0]);
2560		return_status = IO_ERROR;
2561		break;
2562	case CMD_HARDWARE_ERR:
2563		printk(KERN_WARNING "cciss: cmd 0x%02x had "
2564		       " hardware error\n", c->Request.CDB[0]);
2565		return_status = IO_ERROR;
2566		break;
2567	case CMD_CONNECTION_LOST:
2568		printk(KERN_WARNING "cciss: cmd 0x%02x had "
2569		       "connection lost\n", c->Request.CDB[0]);
2570		return_status = IO_ERROR;
2571		break;
2572	case CMD_ABORTED:
2573		printk(KERN_WARNING "cciss: cmd 0x%02x was "
2574		       "aborted\n", c->Request.CDB[0]);
2575		return_status = IO_ERROR;
2576		break;
2577	case CMD_ABORT_FAILED:
2578		printk(KERN_WARNING "cciss: cmd 0x%02x reports "
2579		       "abort failed\n", c->Request.CDB[0]);
2580		return_status = IO_ERROR;
2581		break;
2582	case CMD_UNSOLICITED_ABORT:
2583		printk(KERN_WARNING
2584		       "cciss%d: unsolicited abort 0x%02x\n", h->ctlr,
2585			c->Request.CDB[0]);
2586		return_status = IO_NEEDS_RETRY;
2587		break;
2588	default:
2589		printk(KERN_WARNING "cciss: cmd 0x%02x returned "
2590		       "unknown status %x\n", c->Request.CDB[0],
2591		       c->err_info->CommandStatus);
2592		return_status = IO_ERROR;
2593	}
2594	return return_status;
2595}
2596
2597static int sendcmd_withirq_core(ctlr_info_t *h, CommandList_struct *c,
2598	int attempt_retry)
2599{
2600	DECLARE_COMPLETION_ONSTACK(wait);
2601	u64bit buff_dma_handle;
2602	unsigned long flags;
2603	int return_status = IO_OK;
2604
2605resend_cmd2:
2606	c->waiting = &wait;
2607	/* Put the request on the tail of the queue and send it */
2608	spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
2609	addQ(&h->reqQ, c);
2610	h->Qdepth++;
2611	start_io(h);
2612	spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
2613
2614	wait_for_completion(&wait);
2615
2616	if (c->err_info->CommandStatus == 0 || !attempt_retry)
2617		goto command_done;
2618
2619	return_status = process_sendcmd_error(h, c);
2620
2621	if (return_status == IO_NEEDS_RETRY &&
2622		c->retry_count < MAX_CMD_RETRIES) {
2623		printk(KERN_WARNING "cciss%d: retrying 0x%02x\n", h->ctlr,
2624			c->Request.CDB[0]);
2625		c->retry_count++;
2626		/* erase the old error information */
2627		memset(c->err_info, 0, sizeof(ErrorInfo_struct));
2628		return_status = IO_OK;
2629		INIT_COMPLETION(wait);
2630		goto resend_cmd2;
2631	}
2632
2633command_done:
2634	/* unlock the buffers from DMA */
2635	buff_dma_handle.val32.lower = c->SG[0].Addr.lower;
2636	buff_dma_handle.val32.upper = c->SG[0].Addr.upper;
2637	pci_unmap_single(h->pdev, (dma_addr_t) buff_dma_handle.val,
2638			 c->SG[0].Len, PCI_DMA_BIDIRECTIONAL);
2639	return return_status;
2640}
2641
2642static int sendcmd_withirq(__u8 cmd, int ctlr, void *buff, size_t size,
2643			   __u8 page_code, unsigned char scsi3addr[],
2644			int cmd_type)
2645{
2646	ctlr_info_t *h = hba[ctlr];
2647	CommandList_struct *c;
2648	int return_status;
2649
2650	c = cmd_alloc(h, 0);
2651	if (!c)
2652		return -ENOMEM;
2653	return_status = fill_cmd(c, cmd, ctlr, buff, size, page_code,
2654		scsi3addr, cmd_type);
2655	if (return_status == IO_OK)
2656		return_status = sendcmd_withirq_core(h, c, 1);
2657
2658	cmd_free(h, c, 0);
2659	return return_status;
2660}
2661
2662static void cciss_geometry_inquiry(int ctlr, int logvol,
2663				   sector_t total_size,
2664				   unsigned int block_size,
2665				   InquiryData_struct *inq_buff,
2666				   drive_info_struct *drv)
2667{
2668	int return_code;
2669	unsigned long t;
2670	unsigned char scsi3addr[8];
2671
2672	memset(inq_buff, 0, sizeof(InquiryData_struct));
2673	log_unit_to_scsi3addr(hba[ctlr], scsi3addr, logvol);
2674	return_code = sendcmd_withirq(CISS_INQUIRY, ctlr, inq_buff,
2675			sizeof(*inq_buff), 0xC1, scsi3addr, TYPE_CMD);
2676	if (return_code == IO_OK) {
2677		if (inq_buff->data_byte[8] == 0xFF) {
2678			printk(KERN_WARNING
2679			       "cciss: reading geometry failed, volume "
2680			       "does not support reading geometry\n");
2681			drv->heads = 255;
2682			drv->sectors = 32;	// Sectors per track
2683			drv->cylinders = total_size + 1;
2684			drv->raid_level = RAID_UNKNOWN;
2685		} else {
2686			drv->heads = inq_buff->data_byte[6];
2687			drv->sectors = inq_buff->data_byte[7];
2688			drv->cylinders = (inq_buff->data_byte[4] & 0xff) << 8;
2689			drv->cylinders += inq_buff->data_byte[5];
2690			drv->raid_level = inq_buff->data_byte[8];
2691		}
2692		drv->block_size = block_size;
2693		drv->nr_blocks = total_size + 1;
2694		t = drv->heads * drv->sectors;
2695		if (t > 1) {
2696			sector_t real_size = total_size + 1;
2697			unsigned long rem = sector_div(real_size, t);
2698			if (rem)
2699				real_size++;
2700			drv->cylinders = real_size;
2701		}
2702	} else {		/* Get geometry failed */
2703		printk(KERN_WARNING "cciss: reading geometry failed\n");
2704	}
2705}
2706
2707static void
2708cciss_read_capacity(int ctlr, int logvol, sector_t *total_size,
2709		    unsigned int *block_size)
2710{
2711	ReadCapdata_struct *buf;
2712	int return_code;
2713	unsigned char scsi3addr[8];
2714
2715	buf = kzalloc(sizeof(ReadCapdata_struct), GFP_KERNEL);
2716	if (!buf) {
2717		printk(KERN_WARNING "cciss: out of memory\n");
2718		return;
2719	}
2720
2721	log_unit_to_scsi3addr(hba[ctlr], scsi3addr, logvol);
2722	return_code = sendcmd_withirq(CCISS_READ_CAPACITY, ctlr, buf,
2723		sizeof(ReadCapdata_struct), 0, scsi3addr, TYPE_CMD);
2724	if (return_code == IO_OK) {
2725		*total_size = be32_to_cpu(*(__be32 *) buf->total_size);
2726		*block_size = be32_to_cpu(*(__be32 *) buf->block_size);
2727	} else {		/* read capacity command failed */
2728		printk(KERN_WARNING "cciss: read capacity failed\n");
2729		*total_size = 0;
2730		*block_size = BLOCK_SIZE;
2731	}
2732	kfree(buf);
2733}
2734
2735static void cciss_read_capacity_16(int ctlr, int logvol,
2736	sector_t *total_size, unsigned int *block_size)
2737{
2738	ReadCapdata_struct_16 *buf;
2739	int return_code;
2740	unsigned char scsi3addr[8];
2741
2742	buf = kzalloc(sizeof(ReadCapdata_struct_16), GFP_KERNEL);
2743	if (!buf) {
2744		printk(KERN_WARNING "cciss: out of memory\n");
2745		return;
2746	}
2747
2748	log_unit_to_scsi3addr(hba[ctlr], scsi3addr, logvol);
2749	return_code = sendcmd_withirq(CCISS_READ_CAPACITY_16,
2750		ctlr, buf, sizeof(ReadCapdata_struct_16),
2751			0, scsi3addr, TYPE_CMD);
2752	if (return_code == IO_OK) {
2753		*total_size = be64_to_cpu(*(__be64 *) buf->total_size);
2754		*block_size = be32_to_cpu(*(__be32 *) buf->block_size);
2755	} else {		/* read capacity command failed */
2756		printk(KERN_WARNING "cciss: read capacity failed\n");
2757		*total_size = 0;
2758		*block_size = BLOCK_SIZE;
2759	}
2760	printk(KERN_INFO "      blocks= %llu block_size= %d\n",
2761	       (unsigned long long)*total_size+1, *block_size);
2762	kfree(buf);
2763}
2764
2765static int cciss_revalidate(struct gendisk *disk)
2766{
2767	ctlr_info_t *h = get_host(disk);
2768	drive_info_struct *drv = get_drv(disk);
2769	int logvol;
2770	int FOUND = 0;
2771	unsigned int block_size;
2772	sector_t total_size;
2773	InquiryData_struct *inq_buff = NULL;
2774
2775	for (logvol = 0; logvol < CISS_MAX_LUN; logvol++) {
2776		if (memcmp(h->drv[logvol]->LunID, drv->LunID,
2777			sizeof(drv->LunID)) == 0) {
2778			FOUND = 1;
2779			break;
2780		}
2781	}
2782
2783	if (!FOUND)
2784		return 1;
2785
2786	inq_buff = kmalloc(sizeof(InquiryData_struct), GFP_KERNEL);
2787	if (inq_buff == NULL) {
2788		printk(KERN_WARNING "cciss: out of memory\n");
2789		return 1;
2790	}
2791	if (h->cciss_read == CCISS_READ_10) {
2792		cciss_read_capacity(h->ctlr, logvol,
2793					&total_size, &block_size);
2794	} else {
2795		cciss_read_capacity_16(h->ctlr, logvol,
2796					&total_size, &block_size);
2797	}
2798	cciss_geometry_inquiry(h->ctlr, logvol, total_size, block_size,
2799			       inq_buff, drv);
2800
2801	blk_queue_logical_block_size(drv->queue, drv->block_size);
2802	set_capacity(disk, drv->nr_blocks);
2803
2804	kfree(inq_buff);
2805	return 0;
2806}
2807
2808/*
2809 * Map (physical) PCI mem into (virtual) kernel space
2810 */
2811static void __iomem *remap_pci_mem(ulong base, ulong size)
2812{
2813	ulong page_base = ((ulong) base) & PAGE_MASK;
2814	ulong page_offs = ((ulong) base) - page_base;
2815	void __iomem *page_remapped = ioremap(page_base, page_offs + size);
2816
2817	return page_remapped ? (page_remapped + page_offs) : NULL;
2818}
2819
2820/*
2821 * Takes jobs of the Q and sends them to the hardware, then puts it on
2822 * the Q to wait for completion.
2823 */
2824static void start_io(ctlr_info_t *h)
2825{
2826	CommandList_struct *c;
2827
2828	while (!hlist_empty(&h->reqQ)) {
2829		c = hlist_entry(h->reqQ.first, CommandList_struct, list);
2830		/* can't do anything if fifo is full */
2831		if ((h->access.fifo_full(h))) {
2832			printk(KERN_WARNING "cciss: fifo full\n");
2833			break;
2834		}
2835
2836		/* Get the first entry from the Request Q */
2837		removeQ(c);
2838		h->Qdepth--;
2839
2840		/* Tell the controller execute command */
2841		h->access.submit_command(h, c);
2842
2843		/* Put job onto the completed Q */
2844		addQ(&h->cmpQ, c);
2845	}
2846}
2847
2848/* Assumes that CCISS_LOCK(h->ctlr) is held. */
2849/* Zeros out the error record and then resends the command back */
2850/* to the controller */
2851static inline void resend_cciss_cmd(ctlr_info_t *h, CommandList_struct *c)
2852{
2853	/* erase the old error information */
2854	memset(c->err_info, 0, sizeof(ErrorInfo_struct));
2855
2856	/* add it to software queue and then send it to the controller */
2857	addQ(&h->reqQ, c);
2858	h->Qdepth++;
2859	if (h->Qdepth > h->maxQsinceinit)
2860		h->maxQsinceinit = h->Qdepth;
2861
2862	start_io(h);
2863}
2864
2865static inline unsigned int make_status_bytes(unsigned int scsi_status_byte,
2866	unsigned int msg_byte, unsigned int host_byte,
2867	unsigned int driver_byte)
2868{
2869	/* inverse of macros in scsi.h */
2870	return (scsi_status_byte & 0xff) |
2871		((msg_byte & 0xff) << 8) |
2872		((host_byte & 0xff) << 16) |
2873		((driver_byte & 0xff) << 24);
2874}
2875
2876static inline int evaluate_target_status(ctlr_info_t *h,
2877			CommandList_struct *cmd, int *retry_cmd)
2878{
2879	unsigned char sense_key;
2880	unsigned char status_byte, msg_byte, host_byte, driver_byte;
2881	int error_value;
2882
2883	*retry_cmd = 0;
2884	/* If we get in here, it means we got "target status", that is, scsi status */
2885	status_byte = cmd->err_info->ScsiStatus;
2886	driver_byte = DRIVER_OK;
2887	msg_byte = cmd->err_info->CommandStatus; /* correct?  seems too device specific */
2888
2889	if (blk_pc_request(cmd->rq))
2890		host_byte = DID_PASSTHROUGH;
2891	else
2892		host_byte = DID_OK;
2893
2894	error_value = make_status_bytes(status_byte, msg_byte,
2895		host_byte, driver_byte);
2896
2897	if (cmd->err_info->ScsiStatus != SAM_STAT_CHECK_CONDITION) {
2898		if (!blk_pc_request(cmd->rq))
2899			printk(KERN_WARNING "cciss: cmd %p "
2900			       "has SCSI Status 0x%x\n",
2901			       cmd, cmd->err_info->ScsiStatus);
2902		return error_value;
2903	}
2904
2905	/* check the sense key */
2906	sense_key = 0xf & cmd->err_info->SenseInfo[2];
2907	/* no status or recovered error */
2908	if (((sense_key == 0x0) || (sense_key == 0x1)) && !blk_pc_request(cmd->rq))
2909		error_value = 0;
2910
2911	if (check_for_unit_attention(h, cmd)) {
2912		*retry_cmd = !blk_pc_request(cmd->rq);
2913		return 0;
2914	}
2915
2916	if (!blk_pc_request(cmd->rq)) { /* Not SG_IO or similar? */
2917		if (error_value != 0)
2918			printk(KERN_WARNING "cciss: cmd %p has CHECK CONDITION"
2919			       " sense key = 0x%x\n", cmd, sense_key);
2920		return error_value;
2921	}
2922
2923	/* SG_IO or similar, copy sense data back */
2924	if (cmd->rq->sense) {
2925		if (cmd->rq->sense_len > cmd->err_info->SenseLen)
2926			cmd->rq->sense_len = cmd->err_info->SenseLen;
2927		memcpy(cmd->rq->sense, cmd->err_info->SenseInfo,
2928			cmd->rq->sense_len);
2929	} else
2930		cmd->rq->sense_len = 0;
2931
2932	return error_value;
2933}
2934
2935/* checks the status of the job and calls complete buffers to mark all
2936 * buffers for the completed job. Note that this function does not need
2937 * to hold the hba/queue lock.
2938 */
2939static inline void complete_command(ctlr_info_t *h, CommandList_struct *cmd,
2940				    int timeout)
2941{
2942	int retry_cmd = 0;
2943	struct request *rq = cmd->rq;
2944
2945	rq->errors = 0;
2946
2947	if (timeout)
2948		rq->errors = make_status_bytes(0, 0, 0, DRIVER_TIMEOUT);
2949
2950	if (cmd->err_info->CommandStatus == 0)	/* no error has occurred */
2951		goto after_error_processing;
2952
2953	switch (cmd->err_info->CommandStatus) {
2954	case CMD_TARGET_STATUS:
2955		rq->errors = evaluate_target_status(h, cmd, &retry_cmd);
2956		break;
2957	case CMD_DATA_UNDERRUN:
2958		if (blk_fs_request(cmd->rq)) {
2959			printk(KERN_WARNING "cciss: cmd %p has"
2960			       " completed with data underrun "
2961			       "reported\n", cmd);
2962			cmd->rq->resid_len = cmd->err_info->ResidualCnt;
2963		}
2964		break;
2965	case CMD_DATA_OVERRUN:
2966		if (blk_fs_request(cmd->rq))
2967			printk(KERN_WARNING "cciss: cmd %p has"
2968			       " completed with data overrun "
2969			       "reported\n", cmd);
2970		break;
2971	case CMD_INVALID:
2972		printk(KERN_WARNING "cciss: cmd %p is "
2973		       "reported invalid\n", cmd);
2974		rq->errors = make_status_bytes(SAM_STAT_GOOD,
2975			cmd->err_info->CommandStatus, DRIVER_OK,
2976			blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ERROR);
2977		break;
2978	case CMD_PROTOCOL_ERR:
2979		printk(KERN_WARNING "cciss: cmd %p has "
2980		       "protocol error \n", cmd);
2981		rq->errors = make_status_bytes(SAM_STAT_GOOD,
2982			cmd->err_info->CommandStatus, DRIVER_OK,
2983			blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ERROR);
2984		break;
2985	case CMD_HARDWARE_ERR:
2986		printk(KERN_WARNING "cciss: cmd %p had "
2987		       " hardware error\n", cmd);
2988		rq->errors = make_status_bytes(SAM_STAT_GOOD,
2989			cmd->err_info->CommandStatus, DRIVER_OK,
2990			blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ERROR);
2991		break;
2992	case CMD_CONNECTION_LOST:
2993		printk(KERN_WARNING "cciss: cmd %p had "
2994		       "connection lost\n", cmd);
2995		rq->errors = make_status_bytes(SAM_STAT_GOOD,
2996			cmd->err_info->CommandStatus, DRIVER_OK,
2997			blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ERROR);
2998		break;
2999	case CMD_ABORTED:
3000		printk(KERN_WARNING "cciss: cmd %p was "
3001		       "aborted\n", cmd);
3002		rq->errors = make_status_bytes(SAM_STAT_GOOD,
3003			cmd->err_info->CommandStatus, DRIVER_OK,
3004			blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ABORT);
3005		break;
3006	case CMD_ABORT_FAILED:
3007		printk(KERN_WARNING "cciss: cmd %p reports "
3008		       "abort failed\n", cmd);
3009		rq->errors = make_status_bytes(SAM_STAT_GOOD,
3010			cmd->err_info->CommandStatus, DRIVER_OK,
3011			blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ERROR);
3012		break;
3013	case CMD_UNSOLICITED_ABORT:
3014		printk(KERN_WARNING "cciss%d: unsolicited "
3015		       "abort %p\n", h->ctlr, cmd);
3016		if (cmd->retry_count < MAX_CMD_RETRIES) {
3017			retry_cmd = 1;
3018			printk(KERN_WARNING
3019			       "cciss%d: retrying %p\n", h->ctlr, cmd);
3020			cmd->retry_count++;
3021		} else
3022			printk(KERN_WARNING
3023			       "cciss%d: %p retried too "
3024			       "many times\n", h->ctlr, cmd);
3025		rq->errors = make_status_bytes(SAM_STAT_GOOD,
3026			cmd->err_info->CommandStatus, DRIVER_OK,
3027			blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ABORT);
3028		break;
3029	case CMD_TIMEOUT:
3030		printk(KERN_WARNING "cciss: cmd %p timedout\n", cmd);
3031		rq->errors = make_status_bytes(SAM_STAT_GOOD,
3032			cmd->err_info->CommandStatus, DRIVER_OK,
3033			blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ERROR);
3034		break;
3035	default:
3036		printk(KERN_WARNING "cciss: cmd %p returned "
3037		       "unknown status %x\n", cmd,
3038		       cmd->err_info->CommandStatus);
3039		rq->errors = make_status_bytes(SAM_STAT_GOOD,
3040			cmd->err_info->CommandStatus, DRIVER_OK,
3041			blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ERROR);
3042	}
3043
3044after_error_processing:
3045
3046	/* We need to return this command */
3047	if (retry_cmd) {
3048		resend_cciss_cmd(h, cmd);
3049		return;
3050	}
3051	cmd->rq->completion_data = cmd;
3052	blk_complete_request(cmd->rq);
3053}
3054
3055/*
3056 * Get a request and submit it to the controller.
3057 */
3058static void do_cciss_request(struct request_queue *q)
3059{
3060	ctlr_info_t *h = q->queuedata;
3061	CommandList_struct *c;
3062	sector_t start_blk;
3063	int seg;
3064	struct request *creq;
3065	u64bit temp64;
3066	struct scatterlist tmp_sg[MAXSGENTRIES];
3067	drive_info_struct *drv;
3068	int i, dir;
3069
3070	/* We call start_io here in case there is a command waiting on the
3071	 * queue that has not been sent.
3072	 */
3073	if (blk_queue_plugged(q))
3074		goto startio;
3075
3076      queue:
3077	creq = blk_peek_request(q);
3078	if (!creq)
3079		goto startio;
3080
3081	BUG_ON(creq->nr_phys_segments > MAXSGENTRIES);
3082
3083	if ((c = cmd_alloc(h, 1)) == NULL)
3084		goto full;
3085
3086	blk_start_request(creq);
3087
3088	spin_unlock_irq(q->queue_lock);
3089
3090	c->cmd_type = CMD_RWREQ;
3091	c->rq = creq;
3092
3093	/* fill in the request */
3094	drv = creq->rq_disk->private_data;
3095	c->Header.ReplyQueue = 0;	// unused in simple mode
3096	/* got command from pool, so use the command block index instead */
3097	/* for direct lookups. */
3098	/* The first 2 bits are reserved for controller error reporting. */
3099	c->Header.Tag.lower = (c->cmdindex << 3);
3100	c->Header.Tag.lower |= 0x04;	/* flag for direct lookup. */
3101	memcpy(&c->Header.LUN, drv->LunID, sizeof(drv->LunID));
3102	c->Request.CDBLen = 10;	// 12 byte commands not in FW yet;
3103	c->Request.Type.Type = TYPE_CMD;	// It is a command.
3104	c->Request.Type.Attribute = ATTR_SIMPLE;
3105	c->Request.Type.Direction =
3106	    (rq_data_dir(creq) == READ) ? XFER_READ : XFER_WRITE;
3107	c->Request.Timeout = 0;	// Don't time out
3108	c->Request.CDB[0] =
3109	    (rq_data_dir(creq) == READ) ? h->cciss_read : h->cciss_write;
3110	start_blk = blk_rq_pos(creq);
3111#ifdef CCISS_DEBUG
3112	printk(KERN_DEBUG "ciss: sector =%d nr_sectors=%d\n",
3113	       (int)blk_rq_pos(creq), (int)blk_rq_sectors(creq));
3114#endif				/* CCISS_DEBUG */
3115
3116	sg_init_table(tmp_sg, MAXSGENTRIES);
3117	seg = blk_rq_map_sg(q, creq, tmp_sg);
3118
3119	/* get the DMA records for the setup */
3120	if (c->Request.Type.Direction == XFER_READ)
3121		dir = PCI_DMA_FROMDEVICE;
3122	else
3123		dir = PCI_DMA_TODEVICE;
3124
3125	for (i = 0; i < seg; i++) {
3126		c->SG[i].Len = tmp_sg[i].length;
3127		temp64.val = (__u64) pci_map_page(h->pdev, sg_page(&tmp_sg[i]),
3128						  tmp_sg[i].offset,
3129						  tmp_sg[i].length, dir);
3130		c->SG[i].Addr.lower = temp64.val32.lower;
3131		c->SG[i].Addr.upper = temp64.val32.upper;
3132		c->SG[i].Ext = 0;	// we are not chaining
3133	}
3134	/* track how many SG entries we are using */
3135	if (seg > h->maxSG)
3136		h->maxSG = seg;
3137
3138#ifdef CCISS_DEBUG
3139	printk(KERN_DEBUG "cciss: Submitting %u sectors in %d segments\n",
3140	       blk_rq_sectors(creq), seg);
3141#endif				/* CCISS_DEBUG */
3142
3143	c->Header.SGList = c->Header.SGTotal = seg;
3144	if (likely(blk_fs_request(creq))) {
3145		if(h->cciss_read == CCISS_READ_10) {
3146			c->Request.CDB[1] = 0;
3147			c->Request.CDB[2] = (start_blk >> 24) & 0xff;	//MSB
3148			c->Request.CDB[3] = (start_blk >> 16) & 0xff;
3149			c->Request.CDB[4] = (start_blk >> 8) & 0xff;
3150			c->Request.CDB[5] = start_blk & 0xff;
3151			c->Request.CDB[6] = 0;	// (sect >> 24) & 0xff; MSB
3152			c->Request.CDB[7] = (blk_rq_sectors(creq) >> 8) & 0xff;
3153			c->Request.CDB[8] = blk_rq_sectors(creq) & 0xff;
3154			c->Request.CDB[9] = c->Request.CDB[11] = c->Request.CDB[12] = 0;
3155		} else {
3156			u32 upper32 = upper_32_bits(start_blk);
3157
3158			c->Request.CDBLen = 16;
3159			c->Request.CDB[1]= 0;
3160			c->Request.CDB[2]= (upper32 >> 24) & 0xff;	//MSB
3161			c->Request.CDB[3]= (upper32 >> 16) & 0xff;
3162			c->Request.CDB[4]= (upper32 >>  8) & 0xff;
3163			c->Request.CDB[5]= upper32 & 0xff;
3164			c->Request.CDB[6]= (start_blk >> 24) & 0xff;
3165			c->Request.CDB[7]= (start_blk >> 16) & 0xff;
3166			c->Request.CDB[8]= (start_blk >>  8) & 0xff;
3167			c->Request.CDB[9]= start_blk & 0xff;
3168			c->Request.CDB[10]= (blk_rq_sectors(creq) >> 24) & 0xff;
3169			c->Request.CDB[11]= (blk_rq_sectors(creq) >> 16) & 0xff;
3170			c->Request.CDB[12]= (blk_rq_sectors(creq) >>  8) & 0xff;
3171			c->Request.CDB[13]= blk_rq_sectors(creq) & 0xff;
3172			c->Request.CDB[14] = c->Request.CDB[15] = 0;
3173		}
3174	} else if (blk_pc_request(creq)) {
3175		c->Request.CDBLen = creq->cmd_len;
3176		memcpy(c->Request.CDB, creq->cmd, BLK_MAX_CDB);
3177	} else {
3178		printk(KERN_WARNING "cciss%d: bad request type %d\n", h->ctlr, creq->cmd_type);
3179		BUG();
3180	}
3181
3182	spin_lock_irq(q->queue_lock);
3183
3184	addQ(&h->reqQ, c);
3185	h->Qdepth++;
3186	if (h->Qdepth > h->maxQsinceinit)
3187		h->maxQsinceinit = h->Qdepth;
3188
3189	goto queue;
3190full:
3191	blk_stop_queue(q);
3192startio:
3193	/* We will already have the driver lock here so not need
3194	 * to lock it.
3195	 */
3196	start_io(h);
3197}
3198
3199static inline unsigned long get_next_completion(ctlr_info_t *h)
3200{
3201	return h->access.command_completed(h);
3202}
3203
3204static inline int interrupt_pending(ctlr_info_t *h)
3205{
3206	return h->access.intr_pending(h);
3207}
3208
3209static inline long interrupt_not_for_us(ctlr_info_t *h)
3210{
3211	return (((h->access.intr_pending(h) == 0) ||
3212		 (h->interrupts_enabled == 0)));
3213}
3214
3215static irqreturn_t do_cciss_intr(int irq, void *dev_id)
3216{
3217	ctlr_info_t *h = dev_id;
3218	CommandList_struct *c;
3219	unsigned long flags;
3220	__u32 a, a1, a2;
3221
3222	if (interrupt_not_for_us(h))
3223		return IRQ_NONE;
3224	/*
3225	 * If there are completed commands in the completion queue,
3226	 * we had better do something about it.
3227	 */
3228	spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
3229	while (interrupt_pending(h)) {
3230		while ((a = get_next_completion(h)) != FIFO_EMPTY) {
3231			a1 = a;
3232			if ((a & 0x04)) {
3233				a2 = (a >> 3);
3234				if (a2 >= h->nr_cmds) {
3235					printk(KERN_WARNING
3236					       "cciss: controller cciss%d failed, stopping.\n",
3237					       h->ctlr);
3238					fail_all_cmds(h->ctlr);
3239					return IRQ_HANDLED;
3240				}
3241
3242				c = h->cmd_pool + a2;
3243				a = c->busaddr;
3244
3245			} else {
3246				struct hlist_node *tmp;
3247
3248				a &= ~3;
3249				c = NULL;
3250				hlist_for_each_entry(c, tmp, &h->cmpQ, list) {
3251					if (c->busaddr == a)
3252						break;
3253				}
3254			}
3255			/*
3256			 * If we've found the command, take it off the
3257			 * completion Q and free it
3258			 */
3259			if (c && c->busaddr == a) {
3260				removeQ(c);
3261				if (c->cmd_type == CMD_RWREQ) {
3262					complete_command(h, c, 0);
3263				} else if (c->cmd_type == CMD_IOCTL_PEND) {
3264					complete(c->waiting);
3265				}
3266#				ifdef CONFIG_CISS_SCSI_TAPE
3267				else if (c->cmd_type == CMD_SCSI)
3268					complete_scsi_command(c, 0, a1);
3269#				endif
3270				continue;
3271			}
3272		}
3273	}
3274
3275	spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
3276	return IRQ_HANDLED;
3277}
3278
3279/**
3280 * add_to_scan_list() - add controller to rescan queue
3281 * @h:		      Pointer to the controller.
3282 *
3283 * Adds the controller to the rescan queue if not already on the queue.
3284 *
3285 * returns 1 if added to the queue, 0 if skipped (could be on the
3286 * queue already, or the controller could be initializing or shutting
3287 * down).
3288 **/
3289static int add_to_scan_list(struct ctlr_info *h)
3290{
3291	struct ctlr_info *test_h;
3292	int found = 0;
3293	int ret = 0;
3294
3295	if (h->busy_initializing)
3296		return 0;
3297
3298	if (!mutex_trylock(&h->busy_shutting_down))
3299		return 0;
3300
3301	mutex_lock(&scan_mutex);
3302	list_for_each_entry(test_h, &scan_q, scan_list) {
3303		if (test_h == h) {
3304			found = 1;
3305			break;
3306		}
3307	}
3308	if (!found && !h->busy_scanning) {
3309		INIT_COMPLETION(h->scan_wait);
3310		list_add_tail(&h->scan_list, &scan_q);
3311		ret = 1;
3312	}
3313	mutex_unlock(&scan_mutex);
3314	mutex_unlock(&h->busy_shutting_down);
3315
3316	return ret;
3317}
3318
3319/**
3320 * remove_from_scan_list() - remove controller from rescan queue
3321 * @h:			   Pointer to the controller.
3322 *
3323 * Removes the controller from the rescan queue if present. Blocks if
3324 * the controller is currently conducting a rescan.  The controller
3325 * can be in one of three states:
3326 * 1. Doesn't need a scan
3327 * 2. On the scan list, but not scanning yet (we remove it)
3328 * 3. Busy scanning (and not on the list). In this case we want to wait for
3329 *    the scan to complete to make sure the scanning thread for this
3330 *    controller is completely idle.
3331 **/
3332static void remove_from_scan_list(struct ctlr_info *h)
3333{
3334	struct ctlr_info *test_h, *tmp_h;
3335
3336	mutex_lock(&scan_mutex);
3337	list_for_each_entry_safe(test_h, tmp_h, &scan_q, scan_list) {
3338		if (test_h == h) { /* state 2. */
3339			list_del(&h->scan_list);
3340			complete_all(&h->scan_wait);
3341			mutex_unlock(&scan_mutex);
3342			return;
3343		}
3344	}
3345	if (h->busy_scanning) { /* state 3. */
3346		mutex_unlock(&scan_mutex);
3347		wait_for_completion(&h->scan_wait);
3348	} else { /* state 1, nothing to do. */
3349		mutex_unlock(&scan_mutex);
3350	}
3351}
3352
3353/**
3354 * scan_thread() - kernel thread used to rescan controllers
3355 * @data:	 Ignored.
3356 *
3357 * A kernel thread used scan for drive topology changes on
3358 * controllers. The thread processes only one controller at a time
3359 * using a queue.  Controllers are added to the queue using
3360 * add_to_scan_list() and removed from the queue either after done
3361 * processing or using remove_from_scan_list().
3362 *
3363 * returns 0.
3364 **/
3365static int scan_thread(void *data)
3366{
3367	struct ctlr_info *h;
3368
3369	while (1) {
3370		set_current_state(TASK_INTERRUPTIBLE);
3371		schedule();
3372		if (kthread_should_stop())
3373			break;
3374
3375		while (1) {
3376			mutex_lock(&scan_mutex);
3377			if (list_empty(&scan_q)) {
3378				mutex_unlock(&scan_mutex);
3379				break;
3380			}
3381
3382			h = list_entry(scan_q.next,
3383				       struct ctlr_info,
3384				       scan_list);
3385			list_del(&h->scan_list);
3386			h->busy_scanning = 1;
3387			mutex_unlock(&scan_mutex);
3388
3389			rebuild_lun_table(h, 0, 0);
3390			complete_all(&h->scan_wait);
3391			mutex_lock(&scan_mutex);
3392			h->busy_scanning = 0;
3393			mutex_unlock(&scan_mutex);
3394		}
3395	}
3396
3397	return 0;
3398}
3399
3400static int check_for_unit_attention(ctlr_info_t *h, CommandList_struct *c)
3401{
3402	if (c->err_info->SenseInfo[2] != UNIT_ATTENTION)
3403		return 0;
3404
3405	switch (c->err_info->SenseInfo[12]) {
3406	case STATE_CHANGED:
3407		printk(KERN_WARNING "cciss%d: a state change "
3408			"detected, command retried\n", h->ctlr);
3409		return 1;
3410	break;
3411	case LUN_FAILED:
3412		printk(KERN_WARNING "cciss%d: LUN failure "
3413			"detected, action required\n", h->ctlr);
3414		return 1;
3415	break;
3416	case REPORT_LUNS_CHANGED:
3417		printk(KERN_WARNING "cciss%d: report LUN data "
3418			"changed\n", h->ctlr);
3419	/*
3420	 * Here, we could call add_to_scan_list and wake up the scan thread,
3421	 * except that it's quite likely that we will get more than one
3422	 * REPORT_LUNS_CHANGED condition in quick succession, which means
3423	 * that those which occur after the first one will likely happen
3424	 * *during* the scan_thread's rescan.  And the rescan code is not
3425	 * robust enough to restart in the middle, undoing what it has already
3426	 * done, and it's not clear that it's even possible to do this, since
3427	 * part of what it does is notify the block layer, which starts
3428	 * doing it's own i/o to read partition tables and so on, and the
3429	 * driver doesn't have visibility to know what might need undoing.
3430	 * In any event, if possible, it is horribly complicated to get right
3431	 * so we just don't do it for now.
3432	 *
3433	 * Note: this REPORT_LUNS_CHANGED condition only occurs on the MSA2012.
3434	 */
3435		return 1;
3436	break;
3437	case POWER_OR_RESET:
3438		printk(KERN_WARNING "cciss%d: a power on "
3439			"or device reset detected\n", h->ctlr);
3440		return 1;
3441	break;
3442	case UNIT_ATTENTION_CLEARED:
3443		printk(KERN_WARNING "cciss%d: unit attention "
3444		    "cleared by another initiator\n", h->ctlr);
3445		return 1;
3446	break;
3447	default:
3448		printk(KERN_WARNING "cciss%d: unknown "
3449			"unit attention detected\n", h->ctlr);
3450				return 1;
3451	}
3452}
3453
3454/*
3455 *  We cannot read the structure directly, for portability we must use
3456 *   the io functions.
3457 *   This is for debug only.
3458 */
3459#ifdef CCISS_DEBUG
3460static void print_cfg_table(CfgTable_struct *tb)
3461{
3462	int i;
3463	char temp_name[17];
3464
3465	printk("Controller Configuration information\n");
3466	printk("------------------------------------\n");
3467	for (i = 0; i < 4; i++)
3468		temp_name[i] = readb(&(tb->Signature[i]));
3469	temp_name[4] = '\0';
3470	printk("   Signature = %s\n", temp_name);
3471	printk("   Spec Number = %d\n", readl(&(tb->SpecValence)));
3472	printk("   Transport methods supported = 0x%x\n",
3473	       readl(&(tb->TransportSupport)));
3474	printk("   Transport methods active = 0x%x\n",
3475	       readl(&(tb->TransportActive)));
3476	printk("   Requested transport Method = 0x%x\n",
3477	       readl(&(tb->HostWrite.TransportRequest)));
3478	printk("   Coalesce Interrupt Delay = 0x%x\n",
3479	       readl(&(tb->HostWrite.CoalIntDelay)));
3480	printk("   Coalesce Interrupt Count = 0x%x\n",
3481	       readl(&(tb->HostWrite.CoalIntCount)));
3482	printk("   Max outstanding commands = 0x%d\n",
3483	       readl(&(tb->CmdsOutMax)));
3484	printk("   Bus Types = 0x%x\n", readl(&(tb->BusTypes)));
3485	for (i = 0; i < 16; i++)
3486		temp_name[i] = readb(&(tb->ServerName[i]));
3487	temp_name[16] = '\0';
3488	printk("   Server Name = %s\n", temp_name);
3489	printk("   Heartbeat Counter = 0x%x\n\n\n", readl(&(tb->HeartBeat)));
3490}
3491#endif				/* CCISS_DEBUG */
3492
3493static int find_PCI_BAR_index(struct pci_dev *pdev, unsigned long pci_bar_addr)
3494{
3495	int i, offset, mem_type, bar_type;
3496	if (pci_bar_addr == PCI_BASE_ADDRESS_0)	/* looking for BAR zero? */
3497		return 0;
3498	offset = 0;
3499	for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
3500		bar_type = pci_resource_flags(pdev, i) & PCI_BASE_ADDRESS_SPACE;
3501		if (bar_type == PCI_BASE_ADDRESS_SPACE_IO)
3502			offset += 4;
3503		else {
3504			mem_type = pci_resource_flags(pdev, i) &
3505			    PCI_BASE_ADDRESS_MEM_TYPE_MASK;
3506			switch (mem_type) {
3507			case PCI_BASE_ADDRESS_MEM_TYPE_32:
3508			case PCI_BASE_ADDRESS_MEM_TYPE_1M:
3509				offset += 4;	/* 32 bit */
3510				break;
3511			case PCI_BASE_ADDRESS_MEM_TYPE_64:
3512				offset += 8;
3513				break;
3514			default:	/* reserved in PCI 2.2 */
3515				printk(KERN_WARNING
3516				       "Base address is invalid\n");
3517				return -1;
3518				break;
3519			}
3520		}
3521		if (offset == pci_bar_addr - PCI_BASE_ADDRESS_0)
3522			return i + 1;
3523	}
3524	return -1;
3525}
3526
3527/* If MSI/MSI-X is supported by the kernel we will try to enable it on
3528 * controllers that are capable. If not, we use IO-APIC mode.
3529 */
3530
3531static void __devinit cciss_interrupt_mode(ctlr_info_t *c,
3532					   struct pci_dev *pdev, __u32 board_id)
3533{
3534#ifdef CONFIG_PCI_MSI
3535	int err;
3536	struct msix_entry cciss_msix_entries[4] = { {0, 0}, {0, 1},
3537	{0, 2}, {0, 3}
3538	};
3539
3540	/* Some boards advertise MSI but don't really support it */
3541	if ((board_id == 0x40700E11) ||
3542	    (board_id == 0x40800E11) ||
3543	    (board_id == 0x40820E11) || (board_id == 0x40830E11))
3544		goto default_int_mode;
3545
3546	if (pci_find_capability(pdev, PCI_CAP_ID_MSIX)) {
3547		err = pci_enable_msix(pdev, cciss_msix_entries, 4);
3548		if (!err) {
3549			c->intr[0] = cciss_msix_entries[0].vector;
3550			c->intr[1] = cciss_msix_entries[1].vector;
3551			c->intr[2] = cciss_msix_entries[2].vector;
3552			c->intr[3] = cciss_msix_entries[3].vector;
3553			c->msix_vector = 1;
3554			return;
3555		}
3556		if (err > 0) {
3557			printk(KERN_WARNING "cciss: only %d MSI-X vectors "
3558			       "available\n", err);
3559			goto default_int_mode;
3560		} else {
3561			printk(KERN_WARNING "cciss: MSI-X init failed %d\n",
3562			       err);
3563			goto default_int_mode;
3564		}
3565	}
3566	if (pci_find_capability(pdev, PCI_CAP_ID_MSI)) {
3567		if (!pci_enable_msi(pdev)) {
3568			c->msi_vector = 1;
3569		} else {
3570			printk(KERN_WARNING "cciss: MSI init failed\n");
3571		}
3572	}
3573default_int_mode:
3574#endif				/* CONFIG_PCI_MSI */
3575	/* if we get here we're going to use the default interrupt mode */
3576	c->intr[SIMPLE_MODE_INT] = pdev->irq;
3577	return;
3578}
3579
3580static int __devinit cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
3581{
3582	ushort subsystem_vendor_id, subsystem_device_id, command;
3583	__u32 board_id, scratchpad = 0;
3584	__u64 cfg_offset;
3585	__u32 cfg_base_addr;
3586	__u64 cfg_base_addr_index;
3587	int i, prod_index, err;
3588
3589	subsystem_vendor_id = pdev->subsystem_vendor;
3590	subsystem_device_id = pdev->subsystem_device;
3591	board_id = (((__u32) (subsystem_device_id << 16) & 0xffff0000) |
3592		    subsystem_vendor_id);
3593
3594	for (i = 0; i < ARRAY_SIZE(products); i++) {
3595		/* Stand aside for hpsa driver on request */
3596		if (cciss_allow_hpsa && products[i].board_id == HPSA_BOUNDARY)
3597			return -ENODEV;
3598		if (board_id == products[i].board_id)
3599			break;
3600	}
3601	prod_index = i;
3602	if (prod_index == ARRAY_SIZE(products)) {
3603		dev_warn(&pdev->dev,
3604			"unrecognized board ID: 0x%08lx, ignoring.\n",
3605			(unsigned long) board_id);
3606		return -ENODEV;
3607	}
3608
3609	/* check to see if controller has been disabled */
3610	/* BEFORE trying to enable it */
3611	(void)pci_read_config_word(pdev, PCI_COMMAND, &command);
3612	if (!(command & 0x02)) {
3613		printk(KERN_WARNING
3614		       "cciss: controller appears to be disabled\n");
3615		return -ENODEV;
3616	}
3617
3618	err = pci_enable_device(pdev);
3619	if (err) {
3620		printk(KERN_ERR "cciss: Unable to Enable PCI device\n");
3621		return err;
3622	}
3623
3624	err = pci_request_regions(pdev, "cciss");
3625	if (err) {
3626		printk(KERN_ERR "cciss: Cannot obtain PCI resources, "
3627		       "aborting\n");
3628		return err;
3629	}
3630
3631#ifdef CCISS_DEBUG
3632	printk("command = %x\n", command);
3633	printk("irq = %x\n", pdev->irq);
3634	printk("board_id = %x\n", board_id);
3635#endif				/* CCISS_DEBUG */
3636
3637/* If the kernel supports MSI/MSI-X we will try to enable that functionality,
3638 * else we use the IO-APIC interrupt assigned to us by system ROM.
3639 */
3640	cciss_interrupt_mode(c, pdev, board_id);
3641
3642	/* find the memory BAR */
3643	for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
3644		if (pci_resource_flags(pdev, i) & IORESOURCE_MEM)
3645			break;
3646	}
3647	if (i == DEVICE_COUNT_RESOURCE) {
3648		printk(KERN_WARNING "cciss: No memory BAR found\n");
3649		err = -ENODEV;
3650		goto err_out_free_res;
3651	}
3652
3653	c->paddr = pci_resource_start(pdev, i); /* addressing mode bits
3654						 * already removed
3655						 */
3656
3657#ifdef CCISS_DEBUG
3658	printk("address 0 = %lx\n", c->paddr);
3659#endif				/* CCISS_DEBUG */
3660	c->vaddr = remap_pci_mem(c->paddr, 0x250);
3661
3662	/* Wait for the board to become ready.  (PCI hotplug needs this.)
3663	 * We poll for up to 120 secs, once per 100ms. */
3664	for (i = 0; i < 1200; i++) {
3665		scratchpad = readl(c->vaddr + SA5_SCRATCHPAD_OFFSET);
3666		if (scratchpad == CCISS_FIRMWARE_READY)
3667			break;
3668		set_current_state(TASK_INTERRUPTIBLE);
3669		schedule_timeout(msecs_to_jiffies(100));	/* wait 100ms */
3670	}
3671	if (scratchpad != CCISS_FIRMWARE_READY) {
3672		printk(KERN_WARNING "cciss: Board not ready.  Timed out.\n");
3673		err = -ENODEV;
3674		goto err_out_free_res;
3675	}
3676
3677	/* get the address index number */
3678	cfg_base_addr = readl(c->vaddr + SA5_CTCFG_OFFSET);
3679	cfg_base_addr &= (__u32) 0x0000ffff;
3680#ifdef CCISS_DEBUG
3681	printk("cfg base address = %x\n", cfg_base_addr);
3682#endif				/* CCISS_DEBUG */
3683	cfg_base_addr_index = find_PCI_BAR_index(pdev, cfg_base_addr);
3684#ifdef CCISS_DEBUG
3685	printk("cfg base address index = %llx\n",
3686		(unsigned long long)cfg_base_addr_index);
3687#endif				/* CCISS_DEBUG */
3688	if (cfg_base_addr_index == -1) {
3689		printk(KERN_WARNING "cciss: Cannot find cfg_base_addr_index\n");
3690		err = -ENODEV;
3691		goto err_out_free_res;
3692	}
3693
3694	cfg_offset = readl(c->vaddr + SA5_CTMEM_OFFSET);
3695#ifdef CCISS_DEBUG
3696	printk("cfg offset = %llx\n", (unsigned long long)cfg_offset);
3697#endif				/* CCISS_DEBUG */
3698	c->cfgtable = remap_pci_mem(pci_resource_start(pdev,
3699						       cfg_base_addr_index) +
3700				    cfg_offset, sizeof(CfgTable_struct));
3701	c->board_id = board_id;
3702
3703#ifdef CCISS_DEBUG
3704	print_cfg_table(c->cfgtable);
3705#endif				/* CCISS_DEBUG */
3706
3707	/* Some controllers support Zero Memory Raid (ZMR).
3708	 * When configured in ZMR mode the number of supported
3709	 * commands drops to 64. So instead of just setting an
3710	 * arbitrary value we make the driver a little smarter.
3711	 * We read the config table to tell us how many commands
3712	 * are supported on the controller then subtract 4 to
3713	 * leave a little room for ioctl calls.
3714	 */
3715	c->max_commands = readl(&(c->cfgtable->CmdsOutMax));
3716	c->product_name = products[prod_index].product_name;
3717	c->access = *(products[prod_index].access);
3718	c->nr_cmds = c->max_commands - 4;
3719	if ((readb(&c->cfgtable->Signature[0]) != 'C') ||
3720	    (readb(&c->cfgtable->Signature[1]) != 'I') ||
3721	    (readb(&c->cfgtable->Signature[2]) != 'S') ||
3722	    (readb(&c->cfgtable->Signature[3]) != 'S')) {
3723		printk("Does not appear to be a valid CISS config table\n");
3724		err = -ENODEV;
3725		goto err_out_free_res;
3726	}
3727#ifdef CONFIG_X86
3728	{
3729		/* Need to enable prefetch in the SCSI core for 6400 in x86 */
3730		__u32 prefetch;
3731		prefetch = readl(&(c->cfgtable->SCSI_Prefetch));
3732		prefetch |= 0x100;
3733		writel(prefetch, &(c->cfgtable->SCSI_Prefetch));
3734	}
3735#endif
3736
3737	/* Disabling DMA prefetch and refetch for the P600.
3738	 * An ASIC bug may result in accesses to invalid memory addresses.
3739	 * We've disabled prefetch for some time now. Testing with XEN
3740	 * kernels revealed a bug in the refetch if dom0 resides on a P600.
3741	 */
3742	if(board_id == 0x3225103C) {
3743		__u32 dma_prefetch;
3744		__u32 dma_refetch;
3745		dma_prefetch = readl(c->vaddr + I2O_DMA1_CFG);
3746		dma_prefetch |= 0x8000;
3747		writel(dma_prefetch, c->vaddr + I2O_DMA1_CFG);
3748		pci_read_config_dword(pdev, PCI_COMMAND_PARITY, &dma_refetch);
3749		dma_refetch |= 0x1;
3750		pci_write_config_dword(pdev, PCI_COMMAND_PARITY, dma_refetch);
3751	}
3752
3753#ifdef CCISS_DEBUG
3754	printk("Trying to put board into Simple mode\n");
3755#endif				/* CCISS_DEBUG */
3756	c->max_commands = readl(&(c->cfgtable->CmdsOutMax));
3757	/* Update the field, and then ring the doorbell */
3758	writel(CFGTBL_Trans_Simple, &(c->cfgtable->HostWrite.TransportRequest));
3759	writel(CFGTBL_ChangeReq, c->vaddr + SA5_DOORBELL);
3760
3761	/* under certain very rare conditions, this can take awhile.
3762	 * (e.g.: hot replace a failed 144GB drive in a RAID 5 set right
3763	 * as we enter this code.) */
3764	for (i = 0; i < MAX_CONFIG_WAIT; i++) {
3765		if (!(readl(c->vaddr + SA5_DOORBELL) & CFGTBL_ChangeReq))
3766			break;
3767		/* delay and try again */
3768		set_current_state(TASK_INTERRUPTIBLE);
3769		schedule_timeout(msecs_to_jiffies(1));
3770	}
3771
3772#ifdef CCISS_DEBUG
3773	printk(KERN_DEBUG "I counter got to %d %x\n", i,
3774	       readl(c->vaddr + SA5_DOORBELL));
3775#endif				/* CCISS_DEBUG */
3776#ifdef CCISS_DEBUG
3777	print_cfg_table(c->cfgtable);
3778#endif				/* CCISS_DEBUG */
3779
3780	if (!(readl(&(c->cfgtable->TransportActive)) & CFGTBL_Trans_Simple)) {
3781		printk(KERN_WARNING "cciss: unable to get board into"
3782		       " simple mode\n");
3783		err = -ENODEV;
3784		goto err_out_free_res;
3785	}
3786	return 0;
3787
3788err_out_free_res:
3789	/*
3790	 * Deliberately omit pci_disable_device(): it does something nasty to
3791	 * Smart Array controllers that pci_enable_device does not undo
3792	 */
3793	pci_release_regions(pdev);
3794	return err;
3795}
3796
3797/* Function to find the first free pointer into our hba[] array
3798 * Returns -1 if no free entries are left.
3799 */
3800static int alloc_cciss_hba(void)
3801{
3802	int i;
3803
3804	for (i = 0; i < MAX_CTLR; i++) {
3805		if (!hba[i]) {
3806			ctlr_info_t *p;
3807
3808			p = kzalloc(sizeof(ctlr_info_t), GFP_KERNEL);
3809			if (!p)
3810				goto Enomem;
3811			hba[i] = p;
3812			return i;
3813		}
3814	}
3815	printk(KERN_WARNING "cciss: This driver supports a maximum"
3816	       " of %d controllers.\n", MAX_CTLR);
3817	return -1;
3818Enomem:
3819	printk(KERN_ERR "cciss: out of memory.\n");
3820	return -1;
3821}
3822
3823static void free_hba(int n)
3824{
3825	ctlr_info_t *h = hba[n];
3826	int i;
3827
3828	hba[n] = NULL;
3829	for (i = 0; i < h->highest_lun + 1; i++)
3830		if (h->gendisk[i] != NULL)
3831			put_disk(h->gendisk[i]);
3832	kfree(h);
3833}
3834
3835/* Send a message CDB to the firmware. */
3836static __devinit int cciss_message(struct pci_dev *pdev, unsigned char opcode, unsigned char type)
3837{
3838	typedef struct {
3839		CommandListHeader_struct CommandHeader;
3840		RequestBlock_struct Request;
3841		ErrDescriptor_struct ErrorDescriptor;
3842	} Command;
3843	static const size_t cmd_sz = sizeof(Command) + sizeof(ErrorInfo_struct);
3844	Command *cmd;
3845	dma_addr_t paddr64;
3846	uint32_t paddr32, tag;
3847	void __iomem *vaddr;
3848	int i, err;
3849
3850	vaddr = ioremap_nocache(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0));
3851	if (vaddr == NULL)
3852		return -ENOMEM;
3853
3854	/* The Inbound Post Queue only accepts 32-bit physical addresses for the
3855	   CCISS commands, so they must be allocated from the lower 4GiB of
3856	   memory. */
3857	err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
3858	if (err) {
3859		iounmap(vaddr);
3860		return -ENOMEM;
3861	}
3862
3863	cmd = pci_alloc_consistent(pdev, cmd_sz, &paddr64);
3864	if (cmd == NULL) {
3865		iounmap(vaddr);
3866		return -ENOMEM;
3867	}
3868
3869	/* This must fit, because of the 32-bit consistent DMA mask.  Also,
3870	   although there's no guarantee, we assume that the address is at
3871	   least 4-byte aligned (most likely, it's page-aligned). */
3872	paddr32 = paddr64;
3873
3874	cmd->CommandHeader.ReplyQueue = 0;
3875	cmd->CommandHeader.SGList = 0;
3876	cmd->CommandHeader.SGTotal = 0;
3877	cmd->CommandHeader.Tag.lower = paddr32;
3878	cmd->CommandHeader.Tag.upper = 0;
3879	memset(&cmd->CommandHeader.LUN.LunAddrBytes, 0, 8);
3880
3881	cmd->Request.CDBLen = 16;
3882	cmd->Request.Type.Type = TYPE_MSG;
3883	cmd->Request.Type.Attribute = ATTR_HEADOFQUEUE;
3884	cmd->Request.Type.Direction = XFER_NONE;
3885	cmd->Request.Timeout = 0; /* Don't time out */
3886	cmd->Request.CDB[0] = opcode;
3887	cmd->Request.CDB[1] = type;
3888	memset(&cmd->Request.CDB[2], 0, 14); /* the rest of the CDB is reserved */
3889
3890	cmd->ErrorDescriptor.Addr.lower = paddr32 + sizeof(Command);
3891	cmd->ErrorDescriptor.Addr.upper = 0;
3892	cmd->ErrorDescriptor.Len = sizeof(ErrorInfo_struct);
3893
3894	writel(paddr32, vaddr + SA5_REQUEST_PORT_OFFSET);
3895
3896	for (i = 0; i < 10; i++) {
3897		tag = readl(vaddr + SA5_REPLY_PORT_OFFSET);
3898		if ((tag & ~3) == paddr32)
3899			break;
3900		schedule_timeout_uninterruptible(HZ);
3901	}
3902
3903	iounmap(vaddr);
3904
3905	/* we leak the DMA buffer here ... no choice since the controller could
3906	   still complete the command. */
3907	if (i == 10) {
3908		printk(KERN_ERR "cciss: controller message %02x:%02x timed out\n",
3909			opcode, type);
3910		return -ETIMEDOUT;
3911	}
3912
3913	pci_free_consistent(pdev, cmd_sz, cmd, paddr64);
3914
3915	if (tag & 2) {
3916		printk(KERN_ERR "cciss: controller message %02x:%02x failed\n",
3917			opcode, type);
3918		return -EIO;
3919	}
3920
3921	printk(KERN_INFO "cciss: controller message %02x:%02x succeeded\n",
3922		opcode, type);
3923	return 0;
3924}
3925
3926#define cciss_soft_reset_controller(p) cciss_message(p, 1, 0)
3927#define cciss_noop(p) cciss_message(p, 3, 0)
3928
3929static __devinit int cciss_reset_msi(struct pci_dev *pdev)
3930{
3931/* the #defines are stolen from drivers/pci/msi.h. */
3932#define msi_control_reg(base)		(base + PCI_MSI_FLAGS)
3933#define PCI_MSIX_FLAGS_ENABLE		(1 << 15)
3934
3935	int pos;
3936	u16 control = 0;
3937
3938	pos = pci_find_capability(pdev, PCI_CAP_ID_MSI);
3939	if (pos) {
3940		pci_read_config_word(pdev, msi_control_reg(pos), &control);
3941		if (control & PCI_MSI_FLAGS_ENABLE) {
3942			printk(KERN_INFO "cciss: resetting MSI\n");
3943			pci_write_config_word(pdev, msi_control_reg(pos), control & ~PCI_MSI_FLAGS_ENABLE);
3944		}
3945	}
3946
3947	pos = pci_find_capability(pdev, PCI_CAP_ID_MSIX);
3948	if (pos) {
3949		pci_read_config_word(pdev, msi_control_reg(pos), &control);
3950		if (control & PCI_MSIX_FLAGS_ENABLE) {
3951			printk(KERN_INFO "cciss: resetting MSI-X\n");
3952			pci_write_config_word(pdev, msi_control_reg(pos), control & ~PCI_MSIX_FLAGS_ENABLE);
3953		}
3954	}
3955
3956	return 0;
3957}
3958
3959/* This does a hard reset of the controller using PCI power management
3960 * states. */
3961static __devinit int cciss_hard_reset_controller(struct pci_dev *pdev)
3962{
3963	u16 pmcsr, saved_config_space[32];
3964	int i, pos;
3965
3966	printk(KERN_INFO "cciss: using PCI PM to reset controller\n");
3967
3968	/* This is very nearly the same thing as
3969
3970	   pci_save_state(pci_dev);
3971	   pci_set_power_state(pci_dev, PCI_D3hot);
3972	   pci_set_power_state(pci_dev, PCI_D0);
3973	   pci_restore_state(pci_dev);
3974
3975	   but we can't use these nice canned kernel routines on
3976	   kexec, because they also check the MSI/MSI-X state in PCI
3977	   configuration space and do the wrong thing when it is
3978	   set/cleared.  Also, the pci_save/restore_state functions
3979	   violate the ordering requirements for restoring the
3980	   configuration space from the CCISS document (see the
3981	   comment below).  So we roll our own .... */
3982
3983	for (i = 0; i < 32; i++)
3984		pci_read_config_word(pdev, 2*i, &saved_config_space[i]);
3985
3986	pos = pci_find_capability(pdev, PCI_CAP_ID_PM);
3987	if (pos == 0) {
3988		printk(KERN_ERR "cciss_reset_controller: PCI PM not supported\n");
3989		return -ENODEV;
3990	}
3991
3992	/* Quoting from the Open CISS Specification: "The Power
3993	 * Management Control/Status Register (CSR) controls the power
3994	 * state of the device.  The normal operating state is D0,
3995	 * CSR=00h.  The software off state is D3, CSR=03h.  To reset
3996	 * the controller, place the interface device in D3 then to
3997	 * D0, this causes a secondary PCI reset which will reset the
3998	 * controller." */
3999
4000	/* enter the D3hot power management state */
4001	pci_read_config_word(pdev, pos + PCI_PM_CTRL, &pmcsr);
4002	pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
4003	pmcsr |= PCI_D3hot;
4004	pci_write_config_word(pdev, pos + PCI_PM_CTRL, pmcsr);
4005
4006	schedule_timeout_uninterruptible(HZ >> 1);
4007
4008	/* enter the D0 power management state */
4009	pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
4010	pmcsr |= PCI_D0;
4011	pci_write_config_word(pdev, pos + PCI_PM_CTRL, pmcsr);
4012
4013	schedule_timeout_uninterruptible(HZ >> 1);
4014
4015	/* Restore the PCI configuration space.  The Open CISS
4016	 * Specification says, "Restore the PCI Configuration
4017	 * Registers, offsets 00h through 60h. It is important to
4018	 * restore the command register, 16-bits at offset 04h,
4019	 * last. Do not restore the configuration status register,
4020	 * 16-bits at offset 06h."  Note that the offset is 2*i. */
4021	for (i = 0; i < 32; i++) {
4022		if (i == 2 || i == 3)
4023			continue;
4024		pci_write_config_word(pdev, 2*i, saved_config_space[i]);
4025	}
4026	wmb();
4027	pci_write_config_word(pdev, 4, saved_config_space[2]);
4028
4029	return 0;
4030}
4031
4032/*
4033 *  This is it.  Find all the controllers and register them.  I really hate
4034 *  stealing all these major device numbers.
4035 *  returns the number of block devices registered.
4036 */
4037static int __devinit cciss_init_one(struct pci_dev *pdev,
4038				    const struct pci_device_id *ent)
4039{
4040	int i;
4041	int j = 0;
4042	int rc;
4043	int dac, return_code;
4044	InquiryData_struct *inq_buff;
4045
4046	if (reset_devices) {
4047		/* Reset the controller with a PCI power-cycle */
4048		if (cciss_hard_reset_controller(pdev) || cciss_reset_msi(pdev))
4049			return -ENODEV;
4050
4051		/* Now try to get the controller to respond to a no-op. Some
4052		   devices (notably the HP Smart Array 5i Controller) need
4053		   up to 30 seconds to respond. */
4054		for (i=0; i<30; i++) {
4055			if (cciss_noop(pdev) == 0)
4056				break;
4057
4058			schedule_timeout_uninterruptible(HZ);
4059		}
4060		if (i == 30) {
4061			printk(KERN_ERR "cciss: controller seems dead\n");
4062			return -EBUSY;
4063		}
4064	}
4065
4066	i = alloc_cciss_hba();
4067	if (i < 0)
4068		return -1;
4069
4070	hba[i]->busy_initializing = 1;
4071	INIT_HLIST_HEAD(&hba[i]->cmpQ);
4072	INIT_HLIST_HEAD(&hba[i]->reqQ);
4073	mutex_init(&hba[i]->busy_shutting_down);
4074
4075	if (cciss_pci_init(hba[i], pdev) != 0)
4076		goto clean_no_release_regions;
4077
4078	sprintf(hba[i]->devname, "cciss%d", i);
4079	hba[i]->ctlr = i;
4080	hba[i]->pdev = pdev;
4081
4082	init_completion(&hba[i]->scan_wait);
4083
4084	if (cciss_create_hba_sysfs_entry(hba[i]))
4085		goto clean0;
4086
4087	/* configure PCI DMA stuff */
4088	if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64)))
4089		dac = 1;
4090	else if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))
4091		dac = 0;
4092	else {
4093		printk(KERN_ERR "cciss: no suitable DMA available\n");
4094		goto clean1;
4095	}
4096
4097	/*
4098	 * register with the major number, or get a dynamic major number
4099	 * by passing 0 as argument.  This is done for greater than
4100	 * 8 controller support.
4101	 */
4102	if (i < MAX_CTLR_ORIG)
4103		hba[i]->major = COMPAQ_CISS_MAJOR + i;
4104	rc = register_blkdev(hba[i]->major, hba[i]->devname);
4105	if (rc == -EBUSY || rc == -EINVAL) {
4106		printk(KERN_ERR
4107		       "cciss:  Unable to get major number %d for %s "
4108		       "on hba %d\n", hba[i]->major, hba[i]->devname, i);
4109		goto clean1;
4110	} else {
4111		if (i >= MAX_CTLR_ORIG)
4112			hba[i]->major = rc;
4113	}
4114
4115	/* make sure the board interrupts are off */
4116	hba[i]->access.set_intr_mask(hba[i], CCISS_INTR_OFF);
4117	if (request_irq(hba[i]->intr[SIMPLE_MODE_INT], do_cciss_intr,
4118			IRQF_DISABLED | IRQF_SHARED, hba[i]->devname, hba[i])) {
4119		printk(KERN_ERR "cciss: Unable to get irq %d for %s\n",
4120		       hba[i]->intr[SIMPLE_MODE_INT], hba[i]->devname);
4121		goto clean2;
4122	}
4123
4124	printk(KERN_INFO "%s: <0x%x> at PCI %s IRQ %d%s using DAC\n",
4125	       hba[i]->devname, pdev->device, pci_name(pdev),
4126	       hba[i]->intr[SIMPLE_MODE_INT], dac ? "" : " not");
4127
4128	hba[i]->cmd_pool_bits =
4129	    kmalloc(DIV_ROUND_UP(hba[i]->nr_cmds, BITS_PER_LONG)
4130			* sizeof(unsigned long), GFP_KERNEL);
4131	hba[i]->cmd_pool = (CommandList_struct *)
4132	    pci_alloc_consistent(hba[i]->pdev,
4133		    hba[i]->nr_cmds * sizeof(CommandList_struct),
4134		    &(hba[i]->cmd_pool_dhandle));
4135	hba[i]->errinfo_pool = (ErrorInfo_struct *)
4136	    pci_alloc_consistent(hba[i]->pdev,
4137		    hba[i]->nr_cmds * sizeof(ErrorInfo_struct),
4138		    &(hba[i]->errinfo_pool_dhandle));
4139	if ((hba[i]->cmd_pool_bits == NULL)
4140	    || (hba[i]->cmd_pool == NULL)
4141	    || (hba[i]->errinfo_pool == NULL)) {
4142		printk(KERN_ERR "cciss: out of memory");
4143		goto clean4;
4144	}
4145	spin_lock_init(&hba[i]->lock);
4146
4147	/* Initialize the pdev driver private data.
4148	   have it point to hba[i].  */
4149	pci_set_drvdata(pdev, hba[i]);
4150	/* command and error info recs zeroed out before
4151	   they are used */
4152	memset(hba[i]->cmd_pool_bits, 0,
4153	       DIV_ROUND_UP(hba[i]->nr_cmds, BITS_PER_LONG)
4154			* sizeof(unsigned long));
4155
4156	hba[i]->num_luns = 0;
4157	hba[i]->highest_lun = -1;
4158	for (j = 0; j < CISS_MAX_LUN; j++) {
4159		hba[i]->drv[j] = NULL;
4160		hba[i]->gendisk[j] = NULL;
4161	}
4162
4163	cciss_scsi_setup(i);
4164
4165	/* Turn the interrupts on so we can service requests */
4166	hba[i]->access.set_intr_mask(hba[i], CCISS_INTR_ON);
4167
4168	/* Get the firmware version */
4169	inq_buff = kzalloc(sizeof(InquiryData_struct), GFP_KERNEL);
4170	if (inq_buff == NULL) {
4171		printk(KERN_ERR "cciss: out of memory\n");
4172		goto clean4;
4173	}
4174
4175	return_code = sendcmd_withirq(CISS_INQUIRY, i, inq_buff,
4176		sizeof(InquiryData_struct), 0, CTLR_LUNID, TYPE_CMD);
4177	if (return_code == IO_OK) {
4178		hba[i]->firm_ver[0] = inq_buff->data_byte[32];
4179		hba[i]->firm_ver[1] = inq_buff->data_byte[33];
4180		hba[i]->firm_ver[2] = inq_buff->data_byte[34];
4181		hba[i]->firm_ver[3] = inq_buff->data_byte[35];
4182	} else {	 /* send command failed */
4183		printk(KERN_WARNING "cciss: unable to determine firmware"
4184			" version of controller\n");
4185	}
4186	kfree(inq_buff);
4187
4188	cciss_procinit(i);
4189
4190	hba[i]->cciss_max_sectors = 2048;
4191
4192	rebuild_lun_table(hba[i], 1, 0);
4193	hba[i]->busy_initializing = 0;
4194	return 1;
4195
4196clean4:
4197	kfree(hba[i]->cmd_pool_bits);
4198	if (hba[i]->cmd_pool)
4199		pci_free_consistent(hba[i]->pdev,
4200				    hba[i]->nr_cmds * sizeof(CommandList_struct),
4201				    hba[i]->cmd_pool, hba[i]->cmd_pool_dhandle);
4202	if (hba[i]->errinfo_pool)
4203		pci_free_consistent(hba[i]->pdev,
4204				    hba[i]->nr_cmds * sizeof(ErrorInfo_struct),
4205				    hba[i]->errinfo_pool,
4206				    hba[i]->errinfo_pool_dhandle);
4207	free_irq(hba[i]->intr[SIMPLE_MODE_INT], hba[i]);
4208clean2:
4209	unregister_blkdev(hba[i]->major, hba[i]->devname);
4210clean1:
4211	cciss_destroy_hba_sysfs_entry(hba[i]);
4212clean0:
4213	pci_release_regions(pdev);
4214clean_no_release_regions:
4215	hba[i]->busy_initializing = 0;
4216
4217	/*
4218	 * Deliberately omit pci_disable_device(): it does something nasty to
4219	 * Smart Array controllers that pci_enable_device does not undo
4220	 */
4221	pci_set_drvdata(pdev, NULL);
4222	free_hba(i);
4223	return -1;
4224}
4225
4226static void cciss_shutdown(struct pci_dev *pdev)
4227{
4228	ctlr_info_t *h;
4229	char *flush_buf;
4230	int return_code;
4231
4232	h = pci_get_drvdata(pdev);
4233	flush_buf = kzalloc(4, GFP_KERNEL);
4234	if (!flush_buf) {
4235		printk(KERN_WARNING
4236			"cciss:%d cache not flushed, out of memory.\n",
4237			h->ctlr);
4238		return;
4239	}
4240	/* write all data in the battery backed cache to disk */
4241	memset(flush_buf, 0, 4);
4242	return_code = sendcmd_withirq(CCISS_CACHE_FLUSH, h->ctlr, flush_buf,
4243		4, 0, CTLR_LUNID, TYPE_CMD);
4244	kfree(flush_buf);
4245	if (return_code != IO_OK)
4246		printk(KERN_WARNING "cciss%d: Error flushing cache\n",
4247			h->ctlr);
4248	h->access.set_intr_mask(h, CCISS_INTR_OFF);
4249	free_irq(h->intr[2], h);
4250}
4251
4252static void __devexit cciss_remove_one(struct pci_dev *pdev)
4253{
4254	ctlr_info_t *tmp_ptr;
4255	int i, j;
4256
4257	if (pci_get_drvdata(pdev) == NULL) {
4258		printk(KERN_ERR "cciss: Unable to remove device \n");
4259		return;
4260	}
4261
4262	tmp_ptr = pci_get_drvdata(pdev);
4263	i = tmp_ptr->ctlr;
4264	if (hba[i] == NULL) {
4265		printk(KERN_ERR "cciss: device appears to "
4266		       "already be removed \n");
4267		return;
4268	}
4269
4270	mutex_lock(&hba[i]->busy_shutting_down);
4271
4272	remove_from_scan_list(hba[i]);
4273	remove_proc_entry(hba[i]->devname, proc_cciss);
4274	unregister_blkdev(hba[i]->major, hba[i]->devname);
4275
4276	/* remove it from the disk list */
4277	for (j = 0; j < CISS_MAX_LUN; j++) {
4278		struct gendisk *disk = hba[i]->gendisk[j];
4279		if (disk) {
4280			struct request_queue *q = disk->queue;
4281
4282			if (disk->flags & GENHD_FL_UP) {
4283				cciss_destroy_ld_sysfs_entry(hba[i], j, 1);
4284				del_gendisk(disk);
4285			}
4286			if (q)
4287				blk_cleanup_queue(q);
4288		}
4289	}
4290
4291#ifdef CONFIG_CISS_SCSI_TAPE
4292	cciss_unregister_scsi(i);	/* unhook from SCSI subsystem */
4293#endif
4294
4295	cciss_shutdown(pdev);
4296
4297#ifdef CONFIG_PCI_MSI
4298	if (hba[i]->msix_vector)
4299		pci_disable_msix(hba[i]->pdev);
4300	else if (hba[i]->msi_vector)
4301		pci_disable_msi(hba[i]->pdev);
4302#endif				/* CONFIG_PCI_MSI */
4303
4304	iounmap(hba[i]->vaddr);
4305
4306	pci_free_consistent(hba[i]->pdev, hba[i]->nr_cmds * sizeof(CommandList_struct),
4307			    hba[i]->cmd_pool, hba[i]->cmd_pool_dhandle);
4308	pci_free_consistent(hba[i]->pdev, hba[i]->nr_cmds * sizeof(ErrorInfo_struct),
4309			    hba[i]->errinfo_pool, hba[i]->errinfo_pool_dhandle);
4310	kfree(hba[i]->cmd_pool_bits);
4311	/*
4312	 * Deliberately omit pci_disable_device(): it does something nasty to
4313	 * Smart Array controllers that pci_enable_device does not undo
4314	 */
4315	pci_release_regions(pdev);
4316	pci_set_drvdata(pdev, NULL);
4317	cciss_destroy_hba_sysfs_entry(hba[i]);
4318	mutex_unlock(&hba[i]->busy_shutting_down);
4319	free_hba(i);
4320}
4321
4322static struct pci_driver cciss_pci_driver = {
4323	.name = "cciss",
4324	.probe = cciss_init_one,
4325	.remove = __devexit_p(cciss_remove_one),
4326	.id_table = cciss_pci_device_id,	/* id_table */
4327	.shutdown = cciss_shutdown,
4328};
4329
4330/*
4331 *  This is it.  Register the PCI driver information for the cards we control
4332 *  the OS will call our registered routines when it finds one of our cards.
4333 */
4334static int __init cciss_init(void)
4335{
4336	int err;
4337
4338	/*
4339	 * The hardware requires that commands are aligned on a 64-bit
4340	 * boundary. Given that we use pci_alloc_consistent() to allocate an
4341	 * array of them, the size must be a multiple of 8 bytes.
4342	 */
4343	BUILD_BUG_ON(sizeof(CommandList_struct) % 8);
4344
4345	printk(KERN_INFO DRIVER_NAME "\n");
4346
4347	err = bus_register(&cciss_bus_type);
4348	if (err)
4349		return err;
4350
4351	/* Start the scan thread */
4352	cciss_scan_thread = kthread_run(scan_thread, NULL, "cciss_scan");
4353	if (IS_ERR(cciss_scan_thread)) {
4354		err = PTR_ERR(cciss_scan_thread);
4355		goto err_bus_unregister;
4356	}
4357
4358	/* Register for our PCI devices */
4359	err = pci_register_driver(&cciss_pci_driver);
4360	if (err)
4361		goto err_thread_stop;
4362
4363	return err;
4364
4365err_thread_stop:
4366	kthread_stop(cciss_scan_thread);
4367err_bus_unregister:
4368	bus_unregister(&cciss_bus_type);
4369
4370	return err;
4371}
4372
4373static void __exit cciss_cleanup(void)
4374{
4375	int i;
4376
4377	pci_unregister_driver(&cciss_pci_driver);
4378	/* double check that all controller entrys have been removed */
4379	for (i = 0; i < MAX_CTLR; i++) {
4380		if (hba[i] != NULL) {
4381			printk(KERN_WARNING "cciss: had to remove"
4382			       " controller %d\n", i);
4383			cciss_remove_one(hba[i]->pdev);
4384		}
4385	}
4386	kthread_stop(cciss_scan_thread);
4387	remove_proc_entry("driver/cciss", NULL);
4388	bus_unregister(&cciss_bus_type);
4389}
4390
4391static void fail_all_cmds(unsigned long ctlr)
4392{
4393	/* If we get here, the board is apparently dead. */
4394	ctlr_info_t *h = hba[ctlr];
4395	CommandList_struct *c;
4396	unsigned long flags;
4397
4398	printk(KERN_WARNING "cciss%d: controller not responding.\n", h->ctlr);
4399	h->alive = 0;		/* the controller apparently died... */
4400
4401	spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
4402
4403	pci_disable_device(h->pdev);	/* Make sure it is really dead. */
4404
4405	/* move everything off the request queue onto the completed queue */
4406	while (!hlist_empty(&h->reqQ)) {
4407		c = hlist_entry(h->reqQ.first, CommandList_struct, list);
4408		removeQ(c);
4409		h->Qdepth--;
4410		addQ(&h->cmpQ, c);
4411	}
4412
4413	/* Now, fail everything on the completed queue with a HW error */
4414	while (!hlist_empty(&h->cmpQ)) {
4415		c = hlist_entry(h->cmpQ.first, CommandList_struct, list);
4416		removeQ(c);
4417		if (c->cmd_type != CMD_MSG_STALE)
4418			c->err_info->CommandStatus = CMD_HARDWARE_ERR;
4419		if (c->cmd_type == CMD_RWREQ) {
4420			complete_command(h, c, 0);
4421		} else if (c->cmd_type == CMD_IOCTL_PEND)
4422			complete(c->waiting);
4423#ifdef CONFIG_CISS_SCSI_TAPE
4424		else if (c->cmd_type == CMD_SCSI)
4425			complete_scsi_command(c, 0, 0);
4426#endif
4427	}
4428	spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
4429	return;
4430}
4431
4432module_init(cciss_init);
4433module_exit(cciss_cleanup);
4434