2 * Disk Array driver for HP Smart Array controllers.
3 * (C) Copyright 2000, 2007 Hewlett-Packard Development Company, L.P.
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.
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.
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
19 * Questions/Comments/Bugfixes to iss_storagedev@hp.com
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/delay.h>
30 #include <linux/major.h>
32 #include <linux/bio.h>
33 #include <linux/blkpg.h>
34 #include <linux/timer.h>
35 #include <linux/proc_fs.h>
36 #include <linux/seq_file.h>
37 #include <linux/init.h>
38 #include <linux/hdreg.h>
39 #include <linux/spinlock.h>
40 #include <linux/compat.h>
41 #include <linux/blktrace_api.h>
42 #include <asm/uaccess.h>
45 #include <linux/dma-mapping.h>
46 #include <linux/blkdev.h>
47 #include <linux/genhd.h>
48 #include <linux/completion.h>
49 #include <scsi/scsi.h>
51 #include <scsi/scsi_ioctl.h>
52 #include <linux/cdrom.h>
53 #include <linux/scatterlist.h>
55 #define CCISS_DRIVER_VERSION(maj,min,submin) ((maj<<16)|(min<<8)|(submin))
56 #define DRIVER_NAME "HP CISS Driver (v 3.6.20)"
57 #define DRIVER_VERSION CCISS_DRIVER_VERSION(3, 6, 20)
59 /* Embedded module documentation macros - see modules.h */
60 MODULE_AUTHOR("Hewlett-Packard Company");
61 MODULE_DESCRIPTION("Driver for HP Smart Array Controllers");
62 MODULE_SUPPORTED_DEVICE("HP SA5i SA5i+ SA532 SA5300 SA5312 SA641 SA642 SA6400"
63 " SA6i P600 P800 P400 P400i E200 E200i E500 P700m"
64 " Smart Array G2 Series SAS/SATA Controllers");
65 MODULE_VERSION("3.6.20");
66 MODULE_LICENSE("GPL");
68 #include "cciss_cmd.h"
70 #include <linux/cciss_ioctl.h>
72 /* define the PCI info for the cards we can control */
73 static const struct pci_device_id cciss_pci_device_id
[] = {
74 {PCI_VENDOR_ID_COMPAQ
, PCI_DEVICE_ID_COMPAQ_CISS
, 0x0E11, 0x4070},
75 {PCI_VENDOR_ID_COMPAQ
, PCI_DEVICE_ID_COMPAQ_CISSB
, 0x0E11, 0x4080},
76 {PCI_VENDOR_ID_COMPAQ
, PCI_DEVICE_ID_COMPAQ_CISSB
, 0x0E11, 0x4082},
77 {PCI_VENDOR_ID_COMPAQ
, PCI_DEVICE_ID_COMPAQ_CISSB
, 0x0E11, 0x4083},
78 {PCI_VENDOR_ID_COMPAQ
, PCI_DEVICE_ID_COMPAQ_CISSC
, 0x0E11, 0x4091},
79 {PCI_VENDOR_ID_COMPAQ
, PCI_DEVICE_ID_COMPAQ_CISSC
, 0x0E11, 0x409A},
80 {PCI_VENDOR_ID_COMPAQ
, PCI_DEVICE_ID_COMPAQ_CISSC
, 0x0E11, 0x409B},
81 {PCI_VENDOR_ID_COMPAQ
, PCI_DEVICE_ID_COMPAQ_CISSC
, 0x0E11, 0x409C},
82 {PCI_VENDOR_ID_COMPAQ
, PCI_DEVICE_ID_COMPAQ_CISSC
, 0x0E11, 0x409D},
83 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSA
, 0x103C, 0x3225},
84 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSC
, 0x103C, 0x3223},
85 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSC
, 0x103C, 0x3234},
86 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSC
, 0x103C, 0x3235},
87 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSD
, 0x103C, 0x3211},
88 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSD
, 0x103C, 0x3212},
89 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSD
, 0x103C, 0x3213},
90 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSD
, 0x103C, 0x3214},
91 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSD
, 0x103C, 0x3215},
92 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSC
, 0x103C, 0x3237},
93 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSC
, 0x103C, 0x323D},
94 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSE
, 0x103C, 0x3241},
95 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSE
, 0x103C, 0x3243},
96 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSE
, 0x103C, 0x3245},
97 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSE
, 0x103C, 0x3247},
98 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSE
, 0x103C, 0x3249},
99 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSE
, 0x103C, 0x324A},
100 {PCI_VENDOR_ID_HP
, PCI_DEVICE_ID_HP_CISSE
, 0x103C, 0x324B},
101 {PCI_VENDOR_ID_HP
, PCI_ANY_ID
, PCI_ANY_ID
, PCI_ANY_ID
,
102 PCI_CLASS_STORAGE_RAID
<< 8, 0xffff << 8, 0},
106 MODULE_DEVICE_TABLE(pci
, cciss_pci_device_id
);
108 /* board_id = Subsystem Device ID & Vendor ID
109 * product = Marketing Name for the board
110 * access = Address of the struct of function pointers
112 static struct board_type products
[] = {
113 {0x40700E11, "Smart Array 5300", &SA5_access
},
114 {0x40800E11, "Smart Array 5i", &SA5B_access
},
115 {0x40820E11, "Smart Array 532", &SA5B_access
},
116 {0x40830E11, "Smart Array 5312", &SA5B_access
},
117 {0x409A0E11, "Smart Array 641", &SA5_access
},
118 {0x409B0E11, "Smart Array 642", &SA5_access
},
119 {0x409C0E11, "Smart Array 6400", &SA5_access
},
120 {0x409D0E11, "Smart Array 6400 EM", &SA5_access
},
121 {0x40910E11, "Smart Array 6i", &SA5_access
},
122 {0x3225103C, "Smart Array P600", &SA5_access
},
123 {0x3223103C, "Smart Array P800", &SA5_access
},
124 {0x3234103C, "Smart Array P400", &SA5_access
},
125 {0x3235103C, "Smart Array P400i", &SA5_access
},
126 {0x3211103C, "Smart Array E200i", &SA5_access
},
127 {0x3212103C, "Smart Array E200", &SA5_access
},
128 {0x3213103C, "Smart Array E200i", &SA5_access
},
129 {0x3214103C, "Smart Array E200i", &SA5_access
},
130 {0x3215103C, "Smart Array E200i", &SA5_access
},
131 {0x3237103C, "Smart Array E500", &SA5_access
},
132 {0x323D103C, "Smart Array P700m", &SA5_access
},
133 {0x3241103C, "Smart Array P212", &SA5_access
},
134 {0x3243103C, "Smart Array P410", &SA5_access
},
135 {0x3245103C, "Smart Array P410i", &SA5_access
},
136 {0x3247103C, "Smart Array P411", &SA5_access
},
137 {0x3249103C, "Smart Array P812", &SA5_access
},
138 {0x324A103C, "Smart Array P712m", &SA5_access
},
139 {0x324B103C, "Smart Array P711m", &SA5_access
},
140 {0xFFFF103C, "Unknown Smart Array", &SA5_access
},
143 /* How long to wait (in milliseconds) for board to go into simple mode */
144 #define MAX_CONFIG_WAIT 30000
145 #define MAX_IOCTL_CONFIG_WAIT 1000
147 /*define how many times we will try a command because of bus resets */
148 #define MAX_CMD_RETRIES 3
152 /* Originally cciss driver only supports 8 major numbers */
153 #define MAX_CTLR_ORIG 8
155 static ctlr_info_t
*hba
[MAX_CTLR
];
157 static void do_cciss_request(struct request_queue
*q
);
158 static irqreturn_t
do_cciss_intr(int irq
, void *dev_id
);
159 static int cciss_open(struct block_device
*bdev
, fmode_t mode
);
160 static int cciss_release(struct gendisk
*disk
, fmode_t mode
);
161 static int cciss_ioctl(struct block_device
*bdev
, fmode_t mode
,
162 unsigned int cmd
, unsigned long arg
);
163 static int cciss_getgeo(struct block_device
*bdev
, struct hd_geometry
*geo
);
165 static int cciss_revalidate(struct gendisk
*disk
);
166 static int rebuild_lun_table(ctlr_info_t
*h
, int first_time
);
167 static int deregister_disk(ctlr_info_t
*h
, int drv_index
,
170 static void cciss_read_capacity(int ctlr
, int logvol
, int withirq
,
171 sector_t
*total_size
, unsigned int *block_size
);
172 static void cciss_read_capacity_16(int ctlr
, int logvol
, int withirq
,
173 sector_t
*total_size
, unsigned int *block_size
);
174 static void cciss_geometry_inquiry(int ctlr
, int logvol
,
175 int withirq
, sector_t total_size
,
176 unsigned int block_size
, InquiryData_struct
*inq_buff
,
177 drive_info_struct
*drv
);
178 static void __devinit
cciss_interrupt_mode(ctlr_info_t
*, struct pci_dev
*,
180 static void start_io(ctlr_info_t
*h
);
181 static int sendcmd(__u8 cmd
, int ctlr
, void *buff
, size_t size
,
182 unsigned int use_unit_num
, unsigned int log_unit
,
183 __u8 page_code
, unsigned char *scsi3addr
, int cmd_type
);
184 static int sendcmd_withirq(__u8 cmd
, int ctlr
, void *buff
, size_t size
,
185 unsigned int use_unit_num
, unsigned int log_unit
,
186 __u8 page_code
, int cmd_type
);
188 static void fail_all_cmds(unsigned long ctlr
);
190 #ifdef CONFIG_PROC_FS
191 static void cciss_procinit(int i
);
193 static void cciss_procinit(int i
)
196 #endif /* CONFIG_PROC_FS */
199 static int cciss_compat_ioctl(struct block_device
*, fmode_t
,
200 unsigned, unsigned long);
203 static struct block_device_operations cciss_fops
= {
204 .owner
= THIS_MODULE
,
206 .release
= cciss_release
,
207 .locked_ioctl
= cciss_ioctl
,
208 .getgeo
= cciss_getgeo
,
210 .compat_ioctl
= cciss_compat_ioctl
,
212 .revalidate_disk
= cciss_revalidate
,
216 * Enqueuing and dequeuing functions for cmdlists.
218 static inline void addQ(struct hlist_head
*list
, CommandList_struct
*c
)
220 hlist_add_head(&c
->list
, list
);
223 static inline void removeQ(CommandList_struct
*c
)
225 if (WARN_ON(hlist_unhashed(&c
->list
)))
228 hlist_del_init(&c
->list
);
231 #include "cciss_scsi.c" /* For SCSI tape support */
233 #define RAID_UNKNOWN 6
235 #ifdef CONFIG_PROC_FS
238 * Report information about this controller.
240 #define ENG_GIG 1000000000
241 #define ENG_GIG_FACTOR (ENG_GIG/512)
242 #define ENGAGE_SCSI "engage scsi"
243 static const char *raid_label
[] = { "0", "4", "1(1+0)", "5", "5+1", "ADG",
247 static struct proc_dir_entry
*proc_cciss
;
249 static void cciss_seq_show_header(struct seq_file
*seq
)
251 ctlr_info_t
*h
= seq
->private;
253 seq_printf(seq
, "%s: HP %s Controller\n"
254 "Board ID: 0x%08lx\n"
255 "Firmware Version: %c%c%c%c\n"
257 "Logical drives: %d\n"
258 "Current Q depth: %d\n"
259 "Current # commands on controller: %d\n"
260 "Max Q depth since init: %d\n"
261 "Max # commands on controller since init: %d\n"
262 "Max SG entries since init: %d\n",
265 (unsigned long)h
->board_id
,
266 h
->firm_ver
[0], h
->firm_ver
[1], h
->firm_ver
[2],
267 h
->firm_ver
[3], (unsigned int)h
->intr
[SIMPLE_MODE_INT
],
269 h
->Qdepth
, h
->commands_outstanding
,
270 h
->maxQsinceinit
, h
->max_outstanding
, h
->maxSG
);
272 #ifdef CONFIG_CISS_SCSI_TAPE
273 cciss_seq_tape_report(seq
, h
->ctlr
);
274 #endif /* CONFIG_CISS_SCSI_TAPE */
277 static void *cciss_seq_start(struct seq_file
*seq
, loff_t
*pos
)
279 ctlr_info_t
*h
= seq
->private;
280 unsigned ctlr
= h
->ctlr
;
283 /* prevent displaying bogus info during configuration
284 * or deconfiguration of a logical volume
286 spin_lock_irqsave(CCISS_LOCK(ctlr
), flags
);
287 if (h
->busy_configuring
) {
288 spin_unlock_irqrestore(CCISS_LOCK(ctlr
), flags
);
289 return ERR_PTR(-EBUSY
);
291 h
->busy_configuring
= 1;
292 spin_unlock_irqrestore(CCISS_LOCK(ctlr
), flags
);
295 cciss_seq_show_header(seq
);
300 static int cciss_seq_show(struct seq_file
*seq
, void *v
)
302 sector_t vol_sz
, vol_sz_frac
;
303 ctlr_info_t
*h
= seq
->private;
304 unsigned ctlr
= h
->ctlr
;
306 drive_info_struct
*drv
= &h
->drv
[*pos
];
308 if (*pos
> h
->highest_lun
)
314 vol_sz
= drv
->nr_blocks
;
315 vol_sz_frac
= sector_div(vol_sz
, ENG_GIG_FACTOR
);
317 sector_div(vol_sz_frac
, ENG_GIG_FACTOR
);
319 if (drv
->raid_level
> 5)
320 drv
->raid_level
= RAID_UNKNOWN
;
321 seq_printf(seq
, "cciss/c%dd%d:"
322 "\t%4u.%02uGB\tRAID %s\n",
323 ctlr
, (int) *pos
, (int)vol_sz
, (int)vol_sz_frac
,
324 raid_label
[drv
->raid_level
]);
328 static void *cciss_seq_next(struct seq_file
*seq
, void *v
, loff_t
*pos
)
330 ctlr_info_t
*h
= seq
->private;
332 if (*pos
> h
->highest_lun
)
339 static void cciss_seq_stop(struct seq_file
*seq
, void *v
)
341 ctlr_info_t
*h
= seq
->private;
343 /* Only reset h->busy_configuring if we succeeded in setting
344 * it during cciss_seq_start. */
345 if (v
== ERR_PTR(-EBUSY
))
348 h
->busy_configuring
= 0;
351 static struct seq_operations cciss_seq_ops
= {
352 .start
= cciss_seq_start
,
353 .show
= cciss_seq_show
,
354 .next
= cciss_seq_next
,
355 .stop
= cciss_seq_stop
,
358 static int cciss_seq_open(struct inode
*inode
, struct file
*file
)
360 int ret
= seq_open(file
, &cciss_seq_ops
);
361 struct seq_file
*seq
= file
->private_data
;
364 seq
->private = PDE(inode
)->data
;
370 cciss_proc_write(struct file
*file
, const char __user
*buf
,
371 size_t length
, loff_t
*ppos
)
376 #ifndef CONFIG_CISS_SCSI_TAPE
380 if (!buf
|| length
> PAGE_SIZE
- 1)
383 buffer
= (char *)__get_free_page(GFP_KERNEL
);
388 if (copy_from_user(buffer
, buf
, length
))
390 buffer
[length
] = '\0';
392 #ifdef CONFIG_CISS_SCSI_TAPE
393 if (strncmp(ENGAGE_SCSI
, buffer
, sizeof ENGAGE_SCSI
- 1) == 0) {
394 struct seq_file
*seq
= file
->private_data
;
395 ctlr_info_t
*h
= seq
->private;
398 rc
= cciss_engage_scsi(h
->ctlr
);
404 #endif /* CONFIG_CISS_SCSI_TAPE */
406 /* might be nice to have "disengage" too, but it's not
407 safely possible. (only 1 module use count, lock issues.) */
410 free_page((unsigned long)buffer
);
414 static struct file_operations cciss_proc_fops
= {
415 .owner
= THIS_MODULE
,
416 .open
= cciss_seq_open
,
419 .release
= seq_release
,
420 .write
= cciss_proc_write
,
423 static void __devinit
cciss_procinit(int i
)
425 struct proc_dir_entry
*pde
;
427 if (proc_cciss
== NULL
)
428 proc_cciss
= proc_mkdir("driver/cciss", NULL
);
431 pde
= proc_create_data(hba
[i
]->devname
, S_IWUSR
| S_IRUSR
| S_IRGRP
|
433 &cciss_proc_fops
, hba
[i
]);
435 #endif /* CONFIG_PROC_FS */
438 * For operations that cannot sleep, a command block is allocated at init,
439 * and managed by cmd_alloc() and cmd_free() using a simple bitmap to track
440 * which ones are free or in use. For operations that can wait for kmalloc
441 * to possible sleep, this routine can be called with get_from_pool set to 0.
442 * cmd_free() MUST be called with a got_from_pool set to 0 if cmd_alloc was.
444 static CommandList_struct
*cmd_alloc(ctlr_info_t
*h
, int get_from_pool
)
446 CommandList_struct
*c
;
449 dma_addr_t cmd_dma_handle
, err_dma_handle
;
451 if (!get_from_pool
) {
452 c
= (CommandList_struct
*) pci_alloc_consistent(h
->pdev
,
453 sizeof(CommandList_struct
), &cmd_dma_handle
);
456 memset(c
, 0, sizeof(CommandList_struct
));
460 c
->err_info
= (ErrorInfo_struct
*)
461 pci_alloc_consistent(h
->pdev
, sizeof(ErrorInfo_struct
),
464 if (c
->err_info
== NULL
) {
465 pci_free_consistent(h
->pdev
,
466 sizeof(CommandList_struct
), c
, cmd_dma_handle
);
469 memset(c
->err_info
, 0, sizeof(ErrorInfo_struct
));
470 } else { /* get it out of the controllers pool */
473 i
= find_first_zero_bit(h
->cmd_pool_bits
, h
->nr_cmds
);
476 } while (test_and_set_bit
477 (i
& (BITS_PER_LONG
- 1),
478 h
->cmd_pool_bits
+ (i
/ BITS_PER_LONG
)) != 0);
480 printk(KERN_DEBUG
"cciss: using command buffer %d\n", i
);
483 memset(c
, 0, sizeof(CommandList_struct
));
484 cmd_dma_handle
= h
->cmd_pool_dhandle
485 + i
* sizeof(CommandList_struct
);
486 c
->err_info
= h
->errinfo_pool
+ i
;
487 memset(c
->err_info
, 0, sizeof(ErrorInfo_struct
));
488 err_dma_handle
= h
->errinfo_pool_dhandle
489 + i
* sizeof(ErrorInfo_struct
);
495 INIT_HLIST_NODE(&c
->list
);
496 c
->busaddr
= (__u32
) cmd_dma_handle
;
497 temp64
.val
= (__u64
) err_dma_handle
;
498 c
->ErrDesc
.Addr
.lower
= temp64
.val32
.lower
;
499 c
->ErrDesc
.Addr
.upper
= temp64
.val32
.upper
;
500 c
->ErrDesc
.Len
= sizeof(ErrorInfo_struct
);
507 * Frees a command block that was previously allocated with cmd_alloc().
509 static void cmd_free(ctlr_info_t
*h
, CommandList_struct
*c
, int got_from_pool
)
514 if (!got_from_pool
) {
515 temp64
.val32
.lower
= c
->ErrDesc
.Addr
.lower
;
516 temp64
.val32
.upper
= c
->ErrDesc
.Addr
.upper
;
517 pci_free_consistent(h
->pdev
, sizeof(ErrorInfo_struct
),
518 c
->err_info
, (dma_addr_t
) temp64
.val
);
519 pci_free_consistent(h
->pdev
, sizeof(CommandList_struct
),
520 c
, (dma_addr_t
) c
->busaddr
);
523 clear_bit(i
& (BITS_PER_LONG
- 1),
524 h
->cmd_pool_bits
+ (i
/ BITS_PER_LONG
));
529 static inline ctlr_info_t
*get_host(struct gendisk
*disk
)
531 return disk
->queue
->queuedata
;
534 static inline drive_info_struct
*get_drv(struct gendisk
*disk
)
536 return disk
->private_data
;
540 * Open. Make sure the device is really there.
542 static int cciss_open(struct block_device
*bdev
, fmode_t mode
)
544 ctlr_info_t
*host
= get_host(bdev
->bd_disk
);
545 drive_info_struct
*drv
= get_drv(bdev
->bd_disk
);
548 printk(KERN_DEBUG
"cciss_open %s\n", bdev
->bd_disk
->disk_name
);
549 #endif /* CCISS_DEBUG */
551 if (host
->busy_initializing
|| drv
->busy_configuring
)
554 * Root is allowed to open raw volume zero even if it's not configured
555 * so array config can still work. Root is also allowed to open any
556 * volume that has a LUN ID, so it can issue IOCTL to reread the
557 * disk information. I don't think I really like this
558 * but I'm already using way to many device nodes to claim another one
559 * for "raw controller".
561 if (drv
->heads
== 0) {
562 if (MINOR(bdev
->bd_dev
) != 0) { /* not node 0? */
563 /* if not node 0 make sure it is a partition = 0 */
564 if (MINOR(bdev
->bd_dev
) & 0x0f) {
566 /* if it is, make sure we have a LUN ID */
567 } else if (drv
->LunID
== 0) {
571 if (!capable(CAP_SYS_ADMIN
))
582 static int cciss_release(struct gendisk
*disk
, fmode_t mode
)
584 ctlr_info_t
*host
= get_host(disk
);
585 drive_info_struct
*drv
= get_drv(disk
);
588 printk(KERN_DEBUG
"cciss_release %s\n", disk
->disk_name
);
589 #endif /* CCISS_DEBUG */
598 static int do_ioctl(struct block_device
*bdev
, fmode_t mode
,
599 unsigned cmd
, unsigned long arg
)
603 ret
= cciss_ioctl(bdev
, mode
, cmd
, arg
);
608 static int cciss_ioctl32_passthru(struct block_device
*bdev
, fmode_t mode
,
609 unsigned cmd
, unsigned long arg
);
610 static int cciss_ioctl32_big_passthru(struct block_device
*bdev
, fmode_t mode
,
611 unsigned cmd
, unsigned long arg
);
613 static int cciss_compat_ioctl(struct block_device
*bdev
, fmode_t mode
,
614 unsigned cmd
, unsigned long arg
)
617 case CCISS_GETPCIINFO
:
618 case CCISS_GETINTINFO
:
619 case CCISS_SETINTINFO
:
620 case CCISS_GETNODENAME
:
621 case CCISS_SETNODENAME
:
622 case CCISS_GETHEARTBEAT
:
623 case CCISS_GETBUSTYPES
:
624 case CCISS_GETFIRMVER
:
625 case CCISS_GETDRIVVER
:
626 case CCISS_REVALIDVOLS
:
627 case CCISS_DEREGDISK
:
628 case CCISS_REGNEWDISK
:
630 case CCISS_RESCANDISK
:
631 case CCISS_GETLUNINFO
:
632 return do_ioctl(bdev
, mode
, cmd
, arg
);
634 case CCISS_PASSTHRU32
:
635 return cciss_ioctl32_passthru(bdev
, mode
, cmd
, arg
);
636 case CCISS_BIG_PASSTHRU32
:
637 return cciss_ioctl32_big_passthru(bdev
, mode
, cmd
, arg
);
644 static int cciss_ioctl32_passthru(struct block_device
*bdev
, fmode_t mode
,
645 unsigned cmd
, unsigned long arg
)
647 IOCTL32_Command_struct __user
*arg32
=
648 (IOCTL32_Command_struct __user
*) arg
;
649 IOCTL_Command_struct arg64
;
650 IOCTL_Command_struct __user
*p
= compat_alloc_user_space(sizeof(arg64
));
656 copy_from_user(&arg64
.LUN_info
, &arg32
->LUN_info
,
657 sizeof(arg64
.LUN_info
));
659 copy_from_user(&arg64
.Request
, &arg32
->Request
,
660 sizeof(arg64
.Request
));
662 copy_from_user(&arg64
.error_info
, &arg32
->error_info
,
663 sizeof(arg64
.error_info
));
664 err
|= get_user(arg64
.buf_size
, &arg32
->buf_size
);
665 err
|= get_user(cp
, &arg32
->buf
);
666 arg64
.buf
= compat_ptr(cp
);
667 err
|= copy_to_user(p
, &arg64
, sizeof(arg64
));
672 err
= do_ioctl(bdev
, mode
, CCISS_PASSTHRU
, (unsigned long)p
);
676 copy_in_user(&arg32
->error_info
, &p
->error_info
,
677 sizeof(arg32
->error_info
));
683 static int cciss_ioctl32_big_passthru(struct block_device
*bdev
, fmode_t mode
,
684 unsigned cmd
, unsigned long arg
)
686 BIG_IOCTL32_Command_struct __user
*arg32
=
687 (BIG_IOCTL32_Command_struct __user
*) arg
;
688 BIG_IOCTL_Command_struct arg64
;
689 BIG_IOCTL_Command_struct __user
*p
=
690 compat_alloc_user_space(sizeof(arg64
));
696 copy_from_user(&arg64
.LUN_info
, &arg32
->LUN_info
,
697 sizeof(arg64
.LUN_info
));
699 copy_from_user(&arg64
.Request
, &arg32
->Request
,
700 sizeof(arg64
.Request
));
702 copy_from_user(&arg64
.error_info
, &arg32
->error_info
,
703 sizeof(arg64
.error_info
));
704 err
|= get_user(arg64
.buf_size
, &arg32
->buf_size
);
705 err
|= get_user(arg64
.malloc_size
, &arg32
->malloc_size
);
706 err
|= get_user(cp
, &arg32
->buf
);
707 arg64
.buf
= compat_ptr(cp
);
708 err
|= copy_to_user(p
, &arg64
, sizeof(arg64
));
713 err
= do_ioctl(bdev
, mode
, CCISS_BIG_PASSTHRU
, (unsigned long)p
);
717 copy_in_user(&arg32
->error_info
, &p
->error_info
,
718 sizeof(arg32
->error_info
));
725 static int cciss_getgeo(struct block_device
*bdev
, struct hd_geometry
*geo
)
727 drive_info_struct
*drv
= get_drv(bdev
->bd_disk
);
732 geo
->heads
= drv
->heads
;
733 geo
->sectors
= drv
->sectors
;
734 geo
->cylinders
= drv
->cylinders
;
741 static int cciss_ioctl(struct block_device
*bdev
, fmode_t mode
,
742 unsigned int cmd
, unsigned long arg
)
744 struct gendisk
*disk
= bdev
->bd_disk
;
745 ctlr_info_t
*host
= get_host(disk
);
746 drive_info_struct
*drv
= get_drv(disk
);
747 int ctlr
= host
->ctlr
;
748 void __user
*argp
= (void __user
*)arg
;
751 printk(KERN_DEBUG
"cciss_ioctl: Called with cmd=%x %lx\n", cmd
, arg
);
752 #endif /* CCISS_DEBUG */
755 case CCISS_GETPCIINFO
:
757 cciss_pci_info_struct pciinfo
;
761 pciinfo
.domain
= pci_domain_nr(host
->pdev
->bus
);
762 pciinfo
.bus
= host
->pdev
->bus
->number
;
763 pciinfo
.dev_fn
= host
->pdev
->devfn
;
764 pciinfo
.board_id
= host
->board_id
;
766 (argp
, &pciinfo
, sizeof(cciss_pci_info_struct
)))
770 case CCISS_GETINTINFO
:
772 cciss_coalint_struct intinfo
;
776 readl(&host
->cfgtable
->HostWrite
.CoalIntDelay
);
778 readl(&host
->cfgtable
->HostWrite
.CoalIntCount
);
780 (argp
, &intinfo
, sizeof(cciss_coalint_struct
)))
784 case CCISS_SETINTINFO
:
786 cciss_coalint_struct intinfo
;
792 if (!capable(CAP_SYS_ADMIN
))
795 (&intinfo
, argp
, sizeof(cciss_coalint_struct
)))
797 if ((intinfo
.delay
== 0) && (intinfo
.count
== 0))
799 // printk("cciss_ioctl: delay and count cannot be 0\n");
802 spin_lock_irqsave(CCISS_LOCK(ctlr
), flags
);
803 /* Update the field, and then ring the doorbell */
804 writel(intinfo
.delay
,
805 &(host
->cfgtable
->HostWrite
.CoalIntDelay
));
806 writel(intinfo
.count
,
807 &(host
->cfgtable
->HostWrite
.CoalIntCount
));
808 writel(CFGTBL_ChangeReq
, host
->vaddr
+ SA5_DOORBELL
);
810 for (i
= 0; i
< MAX_IOCTL_CONFIG_WAIT
; i
++) {
811 if (!(readl(host
->vaddr
+ SA5_DOORBELL
)
814 /* delay and try again */
817 spin_unlock_irqrestore(CCISS_LOCK(ctlr
), flags
);
818 if (i
>= MAX_IOCTL_CONFIG_WAIT
)
822 case CCISS_GETNODENAME
:
824 NodeName_type NodeName
;
829 for (i
= 0; i
< 16; i
++)
831 readb(&host
->cfgtable
->ServerName
[i
]);
832 if (copy_to_user(argp
, NodeName
, sizeof(NodeName_type
)))
836 case CCISS_SETNODENAME
:
838 NodeName_type NodeName
;
844 if (!capable(CAP_SYS_ADMIN
))
848 (NodeName
, argp
, sizeof(NodeName_type
)))
851 spin_lock_irqsave(CCISS_LOCK(ctlr
), flags
);
853 /* Update the field, and then ring the doorbell */
854 for (i
= 0; i
< 16; i
++)
856 &host
->cfgtable
->ServerName
[i
]);
858 writel(CFGTBL_ChangeReq
, host
->vaddr
+ SA5_DOORBELL
);
860 for (i
= 0; i
< MAX_IOCTL_CONFIG_WAIT
; i
++) {
861 if (!(readl(host
->vaddr
+ SA5_DOORBELL
)
864 /* delay and try again */
867 spin_unlock_irqrestore(CCISS_LOCK(ctlr
), flags
);
868 if (i
>= MAX_IOCTL_CONFIG_WAIT
)
873 case CCISS_GETHEARTBEAT
:
875 Heartbeat_type heartbeat
;
879 heartbeat
= readl(&host
->cfgtable
->HeartBeat
);
881 (argp
, &heartbeat
, sizeof(Heartbeat_type
)))
885 case CCISS_GETBUSTYPES
:
887 BusTypes_type BusTypes
;
891 BusTypes
= readl(&host
->cfgtable
->BusTypes
);
893 (argp
, &BusTypes
, sizeof(BusTypes_type
)))
897 case CCISS_GETFIRMVER
:
899 FirmwareVer_type firmware
;
903 memcpy(firmware
, host
->firm_ver
, 4);
906 (argp
, firmware
, sizeof(FirmwareVer_type
)))
910 case CCISS_GETDRIVVER
:
912 DriverVer_type DriverVer
= DRIVER_VERSION
;
918 (argp
, &DriverVer
, sizeof(DriverVer_type
)))
923 case CCISS_DEREGDISK
:
925 case CCISS_REVALIDVOLS
:
926 return rebuild_lun_table(host
, 0);
928 case CCISS_GETLUNINFO
:{
929 LogvolInfo_struct luninfo
;
931 luninfo
.LunID
= drv
->LunID
;
932 luninfo
.num_opens
= drv
->usage_count
;
933 luninfo
.num_parts
= 0;
934 if (copy_to_user(argp
, &luninfo
,
935 sizeof(LogvolInfo_struct
)))
941 IOCTL_Command_struct iocommand
;
942 CommandList_struct
*c
;
946 DECLARE_COMPLETION_ONSTACK(wait
);
951 if (!capable(CAP_SYS_RAWIO
))
955 (&iocommand
, argp
, sizeof(IOCTL_Command_struct
)))
957 if ((iocommand
.buf_size
< 1) &&
958 (iocommand
.Request
.Type
.Direction
!= XFER_NONE
)) {
961 #if 0 /* 'buf_size' member is 16-bits, and always smaller than kmalloc limit */
962 /* Check kmalloc limits */
963 if (iocommand
.buf_size
> 128000)
966 if (iocommand
.buf_size
> 0) {
967 buff
= kmalloc(iocommand
.buf_size
, GFP_KERNEL
);
971 if (iocommand
.Request
.Type
.Direction
== XFER_WRITE
) {
972 /* Copy the data into the buffer we created */
974 (buff
, iocommand
.buf
, iocommand
.buf_size
)) {
979 memset(buff
, 0, iocommand
.buf_size
);
981 if ((c
= cmd_alloc(host
, 0)) == NULL
) {
985 // Fill in the command type
986 c
->cmd_type
= CMD_IOCTL_PEND
;
987 // Fill in Command Header
988 c
->Header
.ReplyQueue
= 0; // unused in simple mode
989 if (iocommand
.buf_size
> 0) // buffer to fill
991 c
->Header
.SGList
= 1;
992 c
->Header
.SGTotal
= 1;
993 } else // no buffers to fill
995 c
->Header
.SGList
= 0;
996 c
->Header
.SGTotal
= 0;
998 c
->Header
.LUN
= iocommand
.LUN_info
;
999 c
->Header
.Tag
.lower
= c
->busaddr
; // use the kernel address the cmd block for tag
1001 // Fill in Request block
1002 c
->Request
= iocommand
.Request
;
1004 // Fill in the scatter gather information
1005 if (iocommand
.buf_size
> 0) {
1006 temp64
.val
= pci_map_single(host
->pdev
, buff
,
1008 PCI_DMA_BIDIRECTIONAL
);
1009 c
->SG
[0].Addr
.lower
= temp64
.val32
.lower
;
1010 c
->SG
[0].Addr
.upper
= temp64
.val32
.upper
;
1011 c
->SG
[0].Len
= iocommand
.buf_size
;
1012 c
->SG
[0].Ext
= 0; // we are not chaining
1016 /* Put the request on the tail of the request queue */
1017 spin_lock_irqsave(CCISS_LOCK(ctlr
), flags
);
1018 addQ(&host
->reqQ
, c
);
1021 spin_unlock_irqrestore(CCISS_LOCK(ctlr
), flags
);
1023 wait_for_completion(&wait
);
1025 /* unlock the buffers from DMA */
1026 temp64
.val32
.lower
= c
->SG
[0].Addr
.lower
;
1027 temp64
.val32
.upper
= c
->SG
[0].Addr
.upper
;
1028 pci_unmap_single(host
->pdev
, (dma_addr_t
) temp64
.val
,
1030 PCI_DMA_BIDIRECTIONAL
);
1032 /* Copy the error information out */
1033 iocommand
.error_info
= *(c
->err_info
);
1035 (argp
, &iocommand
, sizeof(IOCTL_Command_struct
))) {
1037 cmd_free(host
, c
, 0);
1041 if (iocommand
.Request
.Type
.Direction
== XFER_READ
) {
1042 /* Copy the data out of the buffer we created */
1044 (iocommand
.buf
, buff
, iocommand
.buf_size
)) {
1046 cmd_free(host
, c
, 0);
1051 cmd_free(host
, c
, 0);
1054 case CCISS_BIG_PASSTHRU
:{
1055 BIG_IOCTL_Command_struct
*ioc
;
1056 CommandList_struct
*c
;
1057 unsigned char **buff
= NULL
;
1058 int *buff_size
= NULL
;
1060 unsigned long flags
;
1064 DECLARE_COMPLETION_ONSTACK(wait
);
1067 BYTE __user
*data_ptr
;
1071 if (!capable(CAP_SYS_RAWIO
))
1073 ioc
= (BIG_IOCTL_Command_struct
*)
1074 kmalloc(sizeof(*ioc
), GFP_KERNEL
);
1079 if (copy_from_user(ioc
, argp
, sizeof(*ioc
))) {
1083 if ((ioc
->buf_size
< 1) &&
1084 (ioc
->Request
.Type
.Direction
!= XFER_NONE
)) {
1088 /* Check kmalloc limits using all SGs */
1089 if (ioc
->malloc_size
> MAX_KMALLOC_SIZE
) {
1093 if (ioc
->buf_size
> ioc
->malloc_size
* MAXSGENTRIES
) {
1098 kzalloc(MAXSGENTRIES
* sizeof(char *), GFP_KERNEL
);
1103 buff_size
= kmalloc(MAXSGENTRIES
* sizeof(int),
1109 left
= ioc
->buf_size
;
1110 data_ptr
= ioc
->buf
;
1113 ioc
->malloc_size
) ? ioc
->
1115 buff_size
[sg_used
] = sz
;
1116 buff
[sg_used
] = kmalloc(sz
, GFP_KERNEL
);
1117 if (buff
[sg_used
] == NULL
) {
1121 if (ioc
->Request
.Type
.Direction
== XFER_WRITE
) {
1123 (buff
[sg_used
], data_ptr
, sz
)) {
1128 memset(buff
[sg_used
], 0, sz
);
1134 if ((c
= cmd_alloc(host
, 0)) == NULL
) {
1138 c
->cmd_type
= CMD_IOCTL_PEND
;
1139 c
->Header
.ReplyQueue
= 0;
1141 if (ioc
->buf_size
> 0) {
1142 c
->Header
.SGList
= sg_used
;
1143 c
->Header
.SGTotal
= sg_used
;
1145 c
->Header
.SGList
= 0;
1146 c
->Header
.SGTotal
= 0;
1148 c
->Header
.LUN
= ioc
->LUN_info
;
1149 c
->Header
.Tag
.lower
= c
->busaddr
;
1151 c
->Request
= ioc
->Request
;
1152 if (ioc
->buf_size
> 0) {
1154 for (i
= 0; i
< sg_used
; i
++) {
1156 pci_map_single(host
->pdev
, buff
[i
],
1158 PCI_DMA_BIDIRECTIONAL
);
1159 c
->SG
[i
].Addr
.lower
=
1161 c
->SG
[i
].Addr
.upper
=
1163 c
->SG
[i
].Len
= buff_size
[i
];
1164 c
->SG
[i
].Ext
= 0; /* we are not chaining */
1168 /* Put the request on the tail of the request queue */
1169 spin_lock_irqsave(CCISS_LOCK(ctlr
), flags
);
1170 addQ(&host
->reqQ
, c
);
1173 spin_unlock_irqrestore(CCISS_LOCK(ctlr
), flags
);
1174 wait_for_completion(&wait
);
1175 /* unlock the buffers from DMA */
1176 for (i
= 0; i
< sg_used
; i
++) {
1177 temp64
.val32
.lower
= c
->SG
[i
].Addr
.lower
;
1178 temp64
.val32
.upper
= c
->SG
[i
].Addr
.upper
;
1179 pci_unmap_single(host
->pdev
,
1180 (dma_addr_t
) temp64
.val
, buff_size
[i
],
1181 PCI_DMA_BIDIRECTIONAL
);
1183 /* Copy the error information out */
1184 ioc
->error_info
= *(c
->err_info
);
1185 if (copy_to_user(argp
, ioc
, sizeof(*ioc
))) {
1186 cmd_free(host
, c
, 0);
1190 if (ioc
->Request
.Type
.Direction
== XFER_READ
) {
1191 /* Copy the data out of the buffer we created */
1192 BYTE __user
*ptr
= ioc
->buf
;
1193 for (i
= 0; i
< sg_used
; i
++) {
1195 (ptr
, buff
[i
], buff_size
[i
])) {
1196 cmd_free(host
, c
, 0);
1200 ptr
+= buff_size
[i
];
1203 cmd_free(host
, c
, 0);
1207 for (i
= 0; i
< sg_used
; i
++)
1216 /* scsi_cmd_ioctl handles these, below, though some are not */
1217 /* very meaningful for cciss. SG_IO is the main one people want. */
1219 case SG_GET_VERSION_NUM
:
1220 case SG_SET_TIMEOUT
:
1221 case SG_GET_TIMEOUT
:
1222 case SG_GET_RESERVED_SIZE
:
1223 case SG_SET_RESERVED_SIZE
:
1224 case SG_EMULATED_HOST
:
1226 case SCSI_IOCTL_SEND_COMMAND
:
1227 return scsi_cmd_ioctl(disk
->queue
, disk
, mode
, cmd
, argp
);
1229 /* scsi_cmd_ioctl would normally handle these, below, but */
1230 /* they aren't a good fit for cciss, as CD-ROMs are */
1231 /* not supported, and we don't have any bus/target/lun */
1232 /* which we present to the kernel. */
1234 case CDROM_SEND_PACKET
:
1235 case CDROMCLOSETRAY
:
1237 case SCSI_IOCTL_GET_IDLUN
:
1238 case SCSI_IOCTL_GET_BUS_NUMBER
:
1244 static void cciss_check_queues(ctlr_info_t
*h
)
1246 int start_queue
= h
->next_to_run
;
1249 /* check to see if we have maxed out the number of commands that can
1250 * be placed on the queue. If so then exit. We do this check here
1251 * in case the interrupt we serviced was from an ioctl and did not
1252 * free any new commands.
1254 if ((find_first_zero_bit(h
->cmd_pool_bits
, h
->nr_cmds
)) == h
->nr_cmds
)
1257 /* We have room on the queue for more commands. Now we need to queue
1258 * them up. We will also keep track of the next queue to run so
1259 * that every queue gets a chance to be started first.
1261 for (i
= 0; i
< h
->highest_lun
+ 1; i
++) {
1262 int curr_queue
= (start_queue
+ i
) % (h
->highest_lun
+ 1);
1263 /* make sure the disk has been added and the drive is real
1264 * because this can be called from the middle of init_one.
1266 if (!(h
->drv
[curr_queue
].queue
) || !(h
->drv
[curr_queue
].heads
))
1268 blk_start_queue(h
->gendisk
[curr_queue
]->queue
);
1270 /* check to see if we have maxed out the number of commands
1271 * that can be placed on the queue.
1273 if ((find_first_zero_bit(h
->cmd_pool_bits
, h
->nr_cmds
)) == h
->nr_cmds
) {
1274 if (curr_queue
== start_queue
) {
1276 (start_queue
+ 1) % (h
->highest_lun
+ 1);
1279 h
->next_to_run
= curr_queue
;
1286 static void cciss_softirq_done(struct request
*rq
)
1288 CommandList_struct
*cmd
= rq
->completion_data
;
1289 ctlr_info_t
*h
= hba
[cmd
->ctlr
];
1290 unsigned long flags
;
1294 if (cmd
->Request
.Type
.Direction
== XFER_READ
)
1295 ddir
= PCI_DMA_FROMDEVICE
;
1297 ddir
= PCI_DMA_TODEVICE
;
1299 /* command did not need to be retried */
1300 /* unmap the DMA mapping for all the scatter gather elements */
1301 for (i
= 0; i
< cmd
->Header
.SGList
; i
++) {
1302 temp64
.val32
.lower
= cmd
->SG
[i
].Addr
.lower
;
1303 temp64
.val32
.upper
= cmd
->SG
[i
].Addr
.upper
;
1304 pci_unmap_page(h
->pdev
, temp64
.val
, cmd
->SG
[i
].Len
, ddir
);
1308 printk("Done with %p\n", rq
);
1309 #endif /* CCISS_DEBUG */
1311 if (blk_end_request(rq
, (rq
->errors
== 0) ? 0 : -EIO
, blk_rq_bytes(rq
)))
1314 spin_lock_irqsave(&h
->lock
, flags
);
1315 cmd_free(h
, cmd
, 1);
1316 cciss_check_queues(h
);
1317 spin_unlock_irqrestore(&h
->lock
, flags
);
1320 /* This function gets the serial number of a logical drive via
1321 * inquiry page 0x83. Serial no. is 16 bytes. If the serial
1322 * number cannot be had, for whatever reason, 16 bytes of 0xff
1323 * are returned instead.
1325 static void cciss_get_serial_no(int ctlr
, int logvol
, int withirq
,
1326 unsigned char *serial_no
, int buflen
)
1328 #define PAGE_83_INQ_BYTES 64
1334 memset(serial_no
, 0xff, buflen
);
1335 buf
= kzalloc(PAGE_83_INQ_BYTES
, GFP_KERNEL
);
1338 memset(serial_no
, 0, buflen
);
1340 rc
= sendcmd_withirq(CISS_INQUIRY
, ctlr
, buf
,
1341 PAGE_83_INQ_BYTES
, 1, logvol
, 0x83, TYPE_CMD
);
1343 rc
= sendcmd(CISS_INQUIRY
, ctlr
, buf
,
1344 PAGE_83_INQ_BYTES
, 1, logvol
, 0x83, NULL
, TYPE_CMD
);
1346 memcpy(serial_no
, &buf
[8], buflen
);
1351 static void cciss_add_disk(ctlr_info_t
*h
, struct gendisk
*disk
,
1354 disk
->queue
= blk_init_queue(do_cciss_request
, &h
->lock
);
1355 sprintf(disk
->disk_name
, "cciss/c%dd%d", h
->ctlr
, drv_index
);
1356 disk
->major
= h
->major
;
1357 disk
->first_minor
= drv_index
<< NWD_SHIFT
;
1358 disk
->fops
= &cciss_fops
;
1359 disk
->private_data
= &h
->drv
[drv_index
];
1360 disk
->driverfs_dev
= &h
->pdev
->dev
;
1362 /* Set up queue information */
1363 blk_queue_bounce_limit(disk
->queue
, h
->pdev
->dma_mask
);
1365 /* This is a hardware imposed limit. */
1366 blk_queue_max_hw_segments(disk
->queue
, MAXSGENTRIES
);
1368 /* This is a limit in the driver and could be eliminated. */
1369 blk_queue_max_phys_segments(disk
->queue
, MAXSGENTRIES
);
1371 blk_queue_max_sectors(disk
->queue
, h
->cciss_max_sectors
);
1373 blk_queue_softirq_done(disk
->queue
, cciss_softirq_done
);
1375 disk
->queue
->queuedata
= h
;
1377 blk_queue_hardsect_size(disk
->queue
,
1378 h
->drv
[drv_index
].block_size
);
1380 /* Make sure all queue data is written out before */
1381 /* setting h->drv[drv_index].queue, as setting this */
1382 /* allows the interrupt handler to start the queue */
1384 h
->drv
[drv_index
].queue
= disk
->queue
;
1388 /* This function will check the usage_count of the drive to be updated/added.
1389 * If the usage_count is zero and it is a heretofore unknown drive, or,
1390 * the drive's capacity, geometry, or serial number has changed,
1391 * then the drive information will be updated and the disk will be
1392 * re-registered with the kernel. If these conditions don't hold,
1393 * then it will be left alone for the next reboot. The exception to this
1394 * is disk 0 which will always be left registered with the kernel since it
1395 * is also the controller node. Any changes to disk 0 will show up on
1398 static void cciss_update_drive_info(int ctlr
, int drv_index
, int first_time
)
1400 ctlr_info_t
*h
= hba
[ctlr
];
1401 struct gendisk
*disk
;
1402 InquiryData_struct
*inq_buff
= NULL
;
1403 unsigned int block_size
;
1404 sector_t total_size
;
1405 unsigned long flags
= 0;
1407 drive_info_struct
*drvinfo
;
1408 int was_only_controller_node
;
1410 /* Get information about the disk and modify the driver structure */
1411 inq_buff
= kmalloc(sizeof(InquiryData_struct
), GFP_KERNEL
);
1412 drvinfo
= kmalloc(sizeof(*drvinfo
), GFP_KERNEL
);
1413 if (inq_buff
== NULL
|| drvinfo
== NULL
)
1416 /* See if we're trying to update the "controller node"
1417 * this will happen the when the first logical drive gets
1420 was_only_controller_node
= (drv_index
== 0 &&
1421 h
->drv
[0].raid_level
== -1);
1423 /* testing to see if 16-byte CDBs are already being used */
1424 if (h
->cciss_read
== CCISS_READ_16
) {
1425 cciss_read_capacity_16(h
->ctlr
, drv_index
, 1,
1426 &total_size
, &block_size
);
1429 cciss_read_capacity(ctlr
, drv_index
, 1,
1430 &total_size
, &block_size
);
1432 /* if read_capacity returns all F's this volume is >2TB */
1433 /* in size so we switch to 16-byte CDB's for all */
1434 /* read/write ops */
1435 if (total_size
== 0xFFFFFFFFULL
) {
1436 cciss_read_capacity_16(ctlr
, drv_index
, 1,
1437 &total_size
, &block_size
);
1438 h
->cciss_read
= CCISS_READ_16
;
1439 h
->cciss_write
= CCISS_WRITE_16
;
1441 h
->cciss_read
= CCISS_READ_10
;
1442 h
->cciss_write
= CCISS_WRITE_10
;
1446 cciss_geometry_inquiry(ctlr
, drv_index
, 1, total_size
, block_size
,
1448 drvinfo
->block_size
= block_size
;
1449 drvinfo
->nr_blocks
= total_size
+ 1;
1451 cciss_get_serial_no(ctlr
, drv_index
, 1, drvinfo
->serial_no
,
1452 sizeof(drvinfo
->serial_no
));
1454 /* Is it the same disk we already know, and nothing's changed? */
1455 if (h
->drv
[drv_index
].raid_level
!= -1 &&
1456 ((memcmp(drvinfo
->serial_no
,
1457 h
->drv
[drv_index
].serial_no
, 16) == 0) &&
1458 drvinfo
->block_size
== h
->drv
[drv_index
].block_size
&&
1459 drvinfo
->nr_blocks
== h
->drv
[drv_index
].nr_blocks
&&
1460 drvinfo
->heads
== h
->drv
[drv_index
].heads
&&
1461 drvinfo
->sectors
== h
->drv
[drv_index
].sectors
&&
1462 drvinfo
->cylinders
== h
->drv
[drv_index
].cylinders
))
1463 /* The disk is unchanged, nothing to update */
1466 /* If we get here it's not the same disk, or something's changed,
1467 * so we need to * deregister it, and re-register it, if it's not
1469 * If the disk already exists then deregister it before proceeding
1470 * (unless it's the first disk (for the controller node).
1472 if (h
->drv
[drv_index
].raid_level
!= -1 && drv_index
!= 0) {
1473 printk(KERN_WARNING
"disk %d has changed.\n", drv_index
);
1474 spin_lock_irqsave(CCISS_LOCK(h
->ctlr
), flags
);
1475 h
->drv
[drv_index
].busy_configuring
= 1;
1476 spin_unlock_irqrestore(CCISS_LOCK(h
->ctlr
), flags
);
1478 /* deregister_disk sets h->drv[drv_index].queue = NULL
1479 * which keeps the interrupt handler from starting
1482 ret
= deregister_disk(h
, drv_index
, 0);
1483 h
->drv
[drv_index
].busy_configuring
= 0;
1486 /* If the disk is in use return */
1490 /* Save the new information from cciss_geometry_inquiry
1491 * and serial number inquiry.
1493 h
->drv
[drv_index
].block_size
= drvinfo
->block_size
;
1494 h
->drv
[drv_index
].nr_blocks
= drvinfo
->nr_blocks
;
1495 h
->drv
[drv_index
].heads
= drvinfo
->heads
;
1496 h
->drv
[drv_index
].sectors
= drvinfo
->sectors
;
1497 h
->drv
[drv_index
].cylinders
= drvinfo
->cylinders
;
1498 h
->drv
[drv_index
].raid_level
= drvinfo
->raid_level
;
1499 memcpy(h
->drv
[drv_index
].serial_no
, drvinfo
->serial_no
, 16);
1502 disk
= h
->gendisk
[drv_index
];
1503 set_capacity(disk
, h
->drv
[drv_index
].nr_blocks
);
1505 /* If it's not disk 0 (drv_index != 0)
1506 * or if it was disk 0, but there was previously
1507 * no actual corresponding configured logical drive
1508 * (raid_leve == -1) then we want to update the
1509 * logical drive's information.
1511 if (drv_index
|| first_time
)
1512 cciss_add_disk(h
, disk
, drv_index
);
1519 printk(KERN_ERR
"cciss: out of memory\n");
1523 /* This function will find the first index of the controllers drive array
1524 * that has a -1 for the raid_level and will return that index. This is
1525 * where new drives will be added. If the index to be returned is greater
1526 * than the highest_lun index for the controller then highest_lun is set
1527 * to this new index. If there are no available indexes then -1 is returned.
1528 * "controller_node" is used to know if this is a real logical drive, or just
1529 * the controller node, which determines if this counts towards highest_lun.
1531 static int cciss_find_free_drive_index(int ctlr
, int controller_node
)
1535 for (i
= 0; i
< CISS_MAX_LUN
; i
++) {
1536 if (hba
[ctlr
]->drv
[i
].raid_level
== -1) {
1537 if (i
> hba
[ctlr
]->highest_lun
)
1538 if (!controller_node
)
1539 hba
[ctlr
]->highest_lun
= i
;
1546 /* cciss_add_gendisk finds a free hba[]->drv structure
1547 * and allocates a gendisk if needed, and sets the lunid
1548 * in the drvinfo structure. It returns the index into
1549 * the ->drv[] array, or -1 if none are free.
1550 * is_controller_node indicates whether highest_lun should
1551 * count this disk, or if it's only being added to provide
1552 * a means to talk to the controller in case no logical
1553 * drives have yet been configured.
1555 static int cciss_add_gendisk(ctlr_info_t
*h
, __u32 lunid
, int controller_node
)
1559 drv_index
= cciss_find_free_drive_index(h
->ctlr
, controller_node
);
1560 if (drv_index
== -1)
1562 /*Check if the gendisk needs to be allocated */
1563 if (!h
->gendisk
[drv_index
]) {
1564 h
->gendisk
[drv_index
] =
1565 alloc_disk(1 << NWD_SHIFT
);
1566 if (!h
->gendisk
[drv_index
]) {
1567 printk(KERN_ERR
"cciss%d: could not "
1568 "allocate a new disk %d\n",
1569 h
->ctlr
, drv_index
);
1573 h
->drv
[drv_index
].LunID
= lunid
;
1575 /* Don't need to mark this busy because nobody */
1576 /* else knows about this disk yet to contend */
1577 /* for access to it. */
1578 h
->drv
[drv_index
].busy_configuring
= 0;
1583 /* This is for the special case of a controller which
1584 * has no logical drives. In this case, we still need
1585 * to register a disk so the controller can be accessed
1586 * by the Array Config Utility.
1588 static void cciss_add_controller_node(ctlr_info_t
*h
)
1590 struct gendisk
*disk
;
1593 if (h
->gendisk
[0] != NULL
) /* already did this? Then bail. */
1596 drv_index
= cciss_add_gendisk(h
, 0, 1);
1597 if (drv_index
== -1) {
1598 printk(KERN_WARNING
"cciss%d: could not "
1599 "add disk 0.\n", h
->ctlr
);
1602 h
->drv
[drv_index
].block_size
= 512;
1603 h
->drv
[drv_index
].nr_blocks
= 0;
1604 h
->drv
[drv_index
].heads
= 0;
1605 h
->drv
[drv_index
].sectors
= 0;
1606 h
->drv
[drv_index
].cylinders
= 0;
1607 h
->drv
[drv_index
].raid_level
= -1;
1608 memset(h
->drv
[drv_index
].serial_no
, 0, 16);
1609 disk
= h
->gendisk
[drv_index
];
1610 cciss_add_disk(h
, disk
, drv_index
);
1613 /* This function will add and remove logical drives from the Logical
1614 * drive array of the controller and maintain persistency of ordering
1615 * so that mount points are preserved until the next reboot. This allows
1616 * for the removal of logical drives in the middle of the drive array
1617 * without a re-ordering of those drives.
1619 * h = The controller to perform the operations on
1621 static int rebuild_lun_table(ctlr_info_t
*h
, int first_time
)
1625 ReportLunData_struct
*ld_buff
= NULL
;
1632 unsigned long flags
;
1634 if (!capable(CAP_SYS_RAWIO
))
1637 /* Set busy_configuring flag for this operation */
1638 spin_lock_irqsave(CCISS_LOCK(h
->ctlr
), flags
);
1639 if (h
->busy_configuring
) {
1640 spin_unlock_irqrestore(CCISS_LOCK(h
->ctlr
), flags
);
1643 h
->busy_configuring
= 1;
1644 spin_unlock_irqrestore(CCISS_LOCK(h
->ctlr
), flags
);
1646 ld_buff
= kzalloc(sizeof(ReportLunData_struct
), GFP_KERNEL
);
1647 if (ld_buff
== NULL
)
1650 return_code
= sendcmd_withirq(CISS_REPORT_LOG
, ctlr
, ld_buff
,
1651 sizeof(ReportLunData_struct
), 0,
1654 if (return_code
== IO_OK
)
1655 listlength
= be32_to_cpu(*(__be32
*) ld_buff
->LUNListLength
);
1656 else { /* reading number of logical volumes failed */
1657 printk(KERN_WARNING
"cciss: report logical volume"
1658 " command failed\n");
1663 num_luns
= listlength
/ 8; /* 8 bytes per entry */
1664 if (num_luns
> CISS_MAX_LUN
) {
1665 num_luns
= CISS_MAX_LUN
;
1666 printk(KERN_WARNING
"cciss: more luns configured"
1667 " on controller than can be handled by"
1672 cciss_add_controller_node(h
);
1674 /* Compare controller drive array to driver's drive array
1675 * to see if any drives are missing on the controller due
1676 * to action of Array Config Utility (user deletes drive)
1677 * and deregister logical drives which have disappeared.
1679 for (i
= 0; i
<= h
->highest_lun
; i
++) {
1683 /* skip holes in the array from already deleted drives */
1684 if (h
->drv
[i
].raid_level
== -1)
1687 for (j
= 0; j
< num_luns
; j
++) {
1688 memcpy(&lunid
, &ld_buff
->LUN
[j
][0], 4);
1689 lunid
= le32_to_cpu(lunid
);
1690 if (h
->drv
[i
].LunID
== lunid
) {
1696 /* Deregister it from the OS, it's gone. */
1697 spin_lock_irqsave(CCISS_LOCK(h
->ctlr
), flags
);
1698 h
->drv
[i
].busy_configuring
= 1;
1699 spin_unlock_irqrestore(CCISS_LOCK(h
->ctlr
), flags
);
1700 return_code
= deregister_disk(h
, i
, 1);
1701 h
->drv
[i
].busy_configuring
= 0;
1705 /* Compare controller drive array to driver's drive array.
1706 * Check for updates in the drive information and any new drives
1707 * on the controller due to ACU adding logical drives, or changing
1708 * a logical drive's size, etc. Reregister any new/changed drives
1710 for (i
= 0; i
< num_luns
; i
++) {
1715 memcpy(&lunid
, &ld_buff
->LUN
[i
][0], 4);
1716 lunid
= le32_to_cpu(lunid
);
1718 /* Find if the LUN is already in the drive array
1719 * of the driver. If so then update its info
1720 * if not in use. If it does not exist then find
1721 * the first free index and add it.
1723 for (j
= 0; j
<= h
->highest_lun
; j
++) {
1724 if (h
->drv
[j
].raid_level
!= -1 &&
1725 h
->drv
[j
].LunID
== lunid
) {
1732 /* check if the drive was found already in the array */
1734 drv_index
= cciss_add_gendisk(h
, lunid
, 0);
1735 if (drv_index
== -1)
1738 cciss_update_drive_info(ctlr
, drv_index
, first_time
);
1743 h
->busy_configuring
= 0;
1744 /* We return -1 here to tell the ACU that we have registered/updated
1745 * all of the drives that we can and to keep it from calling us
1750 printk(KERN_ERR
"cciss: out of memory\n");
1751 h
->busy_configuring
= 0;
1755 /* This function will deregister the disk and it's queue from the
1756 * kernel. It must be called with the controller lock held and the
1757 * drv structures busy_configuring flag set. It's parameters are:
1759 * disk = This is the disk to be deregistered
1760 * drv = This is the drive_info_struct associated with the disk to be
1761 * deregistered. It contains information about the disk used
1763 * clear_all = This flag determines whether or not the disk information
1764 * is going to be completely cleared out and the highest_lun
1765 * reset. Sometimes we want to clear out information about
1766 * the disk in preparation for re-adding it. In this case
1767 * the highest_lun should be left unchanged and the LunID
1768 * should not be cleared.
1770 static int deregister_disk(ctlr_info_t
*h
, int drv_index
,
1774 struct gendisk
*disk
;
1775 drive_info_struct
*drv
;
1777 if (!capable(CAP_SYS_RAWIO
))
1780 drv
= &h
->drv
[drv_index
];
1781 disk
= h
->gendisk
[drv_index
];
1783 /* make sure logical volume is NOT is use */
1784 if (clear_all
|| (h
->gendisk
[0] == disk
)) {
1785 if (drv
->usage_count
> 1)
1787 } else if (drv
->usage_count
> 0)
1790 /* invalidate the devices and deregister the disk. If it is disk
1791 * zero do not deregister it but just zero out it's values. This
1792 * allows us to delete disk zero but keep the controller registered.
1794 if (h
->gendisk
[0] != disk
) {
1795 struct request_queue
*q
= disk
->queue
;
1796 if (disk
->flags
& GENHD_FL_UP
)
1799 blk_cleanup_queue(q
);
1800 /* Set drv->queue to NULL so that we do not try
1801 * to call blk_start_queue on this queue in the
1806 /* If clear_all is set then we are deleting the logical
1807 * drive, not just refreshing its info. For drives
1808 * other than disk 0 we will call put_disk. We do not
1809 * do this for disk 0 as we need it to be able to
1810 * configure the controller.
1813 /* This isn't pretty, but we need to find the
1814 * disk in our array and NULL our the pointer.
1815 * This is so that we will call alloc_disk if
1816 * this index is used again later.
1818 for (i
=0; i
< CISS_MAX_LUN
; i
++){
1819 if (h
->gendisk
[i
] == disk
) {
1820 h
->gendisk
[i
] = NULL
;
1827 set_capacity(disk
, 0);
1831 /* zero out the disk size info */
1833 drv
->block_size
= 0;
1837 drv
->raid_level
= -1; /* This can be used as a flag variable to
1838 * indicate that this element of the drive
1843 /* check to see if it was the last disk */
1844 if (drv
== h
->drv
+ h
->highest_lun
) {
1845 /* if so, find the new hightest lun */
1846 int i
, newhighest
= -1;
1847 for (i
= 0; i
<= h
->highest_lun
; i
++) {
1848 /* if the disk has size > 0, it is available */
1849 if (h
->drv
[i
].heads
)
1852 h
->highest_lun
= newhighest
;
1860 static int fill_cmd(CommandList_struct
*c
, __u8 cmd
, int ctlr
, void *buff
, size_t size
, unsigned int use_unit_num
, /* 0: address the controller,
1861 1: address logical volume log_unit,
1862 2: periph device address is scsi3addr */
1863 unsigned int log_unit
, __u8 page_code
,
1864 unsigned char *scsi3addr
, int cmd_type
)
1866 ctlr_info_t
*h
= hba
[ctlr
];
1867 u64bit buff_dma_handle
;
1870 c
->cmd_type
= CMD_IOCTL_PEND
;
1871 c
->Header
.ReplyQueue
= 0;
1873 c
->Header
.SGList
= 1;
1874 c
->Header
.SGTotal
= 1;
1876 c
->Header
.SGList
= 0;
1877 c
->Header
.SGTotal
= 0;
1879 c
->Header
.Tag
.lower
= c
->busaddr
;
1881 c
->Request
.Type
.Type
= cmd_type
;
1882 if (cmd_type
== TYPE_CMD
) {
1885 /* If the logical unit number is 0 then, this is going
1886 to controller so It's a physical command
1887 mode = 0 target = 0. So we have nothing to write.
1888 otherwise, if use_unit_num == 1,
1889 mode = 1(volume set addressing) target = LUNID
1890 otherwise, if use_unit_num == 2,
1891 mode = 0(periph dev addr) target = scsi3addr */
1892 if (use_unit_num
== 1) {
1893 c
->Header
.LUN
.LogDev
.VolId
=
1894 h
->drv
[log_unit
].LunID
;
1895 c
->Header
.LUN
.LogDev
.Mode
= 1;
1896 } else if (use_unit_num
== 2) {
1897 memcpy(c
->Header
.LUN
.LunAddrBytes
, scsi3addr
,
1899 c
->Header
.LUN
.LogDev
.Mode
= 0;
1901 /* are we trying to read a vital product page */
1902 if (page_code
!= 0) {
1903 c
->Request
.CDB
[1] = 0x01;
1904 c
->Request
.CDB
[2] = page_code
;
1906 c
->Request
.CDBLen
= 6;
1907 c
->Request
.Type
.Attribute
= ATTR_SIMPLE
;
1908 c
->Request
.Type
.Direction
= XFER_READ
;
1909 c
->Request
.Timeout
= 0;
1910 c
->Request
.CDB
[0] = CISS_INQUIRY
;
1911 c
->Request
.CDB
[4] = size
& 0xFF;
1913 case CISS_REPORT_LOG
:
1914 case CISS_REPORT_PHYS
:
1915 /* Talking to controller so It's a physical command
1916 mode = 00 target = 0. Nothing to write.
1918 c
->Request
.CDBLen
= 12;
1919 c
->Request
.Type
.Attribute
= ATTR_SIMPLE
;
1920 c
->Request
.Type
.Direction
= XFER_READ
;
1921 c
->Request
.Timeout
= 0;
1922 c
->Request
.CDB
[0] = cmd
;
1923 c
->Request
.CDB
[6] = (size
>> 24) & 0xFF; //MSB
1924 c
->Request
.CDB
[7] = (size
>> 16) & 0xFF;
1925 c
->Request
.CDB
[8] = (size
>> 8) & 0xFF;
1926 c
->Request
.CDB
[9] = size
& 0xFF;
1929 case CCISS_READ_CAPACITY
:
1930 c
->Header
.LUN
.LogDev
.VolId
= h
->drv
[log_unit
].LunID
;
1931 c
->Header
.LUN
.LogDev
.Mode
= 1;
1932 c
->Request
.CDBLen
= 10;
1933 c
->Request
.Type
.Attribute
= ATTR_SIMPLE
;
1934 c
->Request
.Type
.Direction
= XFER_READ
;
1935 c
->Request
.Timeout
= 0;
1936 c
->Request
.CDB
[0] = cmd
;
1938 case CCISS_READ_CAPACITY_16
:
1939 c
->Header
.LUN
.LogDev
.VolId
= h
->drv
[log_unit
].LunID
;
1940 c
->Header
.LUN
.LogDev
.Mode
= 1;
1941 c
->Request
.CDBLen
= 16;
1942 c
->Request
.Type
.Attribute
= ATTR_SIMPLE
;
1943 c
->Request
.Type
.Direction
= XFER_READ
;
1944 c
->Request
.Timeout
= 0;
1945 c
->Request
.CDB
[0] = cmd
;
1946 c
->Request
.CDB
[1] = 0x10;
1947 c
->Request
.CDB
[10] = (size
>> 24) & 0xFF;
1948 c
->Request
.CDB
[11] = (size
>> 16) & 0xFF;
1949 c
->Request
.CDB
[12] = (size
>> 8) & 0xFF;
1950 c
->Request
.CDB
[13] = size
& 0xFF;
1951 c
->Request
.Timeout
= 0;
1952 c
->Request
.CDB
[0] = cmd
;
1954 case CCISS_CACHE_FLUSH
:
1955 c
->Request
.CDBLen
= 12;
1956 c
->Request
.Type
.Attribute
= ATTR_SIMPLE
;
1957 c
->Request
.Type
.Direction
= XFER_WRITE
;
1958 c
->Request
.Timeout
= 0;
1959 c
->Request
.CDB
[0] = BMIC_WRITE
;
1960 c
->Request
.CDB
[6] = BMIC_CACHE_FLUSH
;
1964 "cciss%d: Unknown Command 0x%c\n", ctlr
, cmd
);
1967 } else if (cmd_type
== TYPE_MSG
) {
1969 case 0: /* ABORT message */
1970 c
->Request
.CDBLen
= 12;
1971 c
->Request
.Type
.Attribute
= ATTR_SIMPLE
;
1972 c
->Request
.Type
.Direction
= XFER_WRITE
;
1973 c
->Request
.Timeout
= 0;
1974 c
->Request
.CDB
[0] = cmd
; /* abort */
1975 c
->Request
.CDB
[1] = 0; /* abort a command */
1976 /* buff contains the tag of the command to abort */
1977 memcpy(&c
->Request
.CDB
[4], buff
, 8);
1979 case 1: /* RESET message */
1980 c
->Request
.CDBLen
= 12;
1981 c
->Request
.Type
.Attribute
= ATTR_SIMPLE
;
1982 c
->Request
.Type
.Direction
= XFER_WRITE
;
1983 c
->Request
.Timeout
= 0;
1984 memset(&c
->Request
.CDB
[0], 0, sizeof(c
->Request
.CDB
));
1985 c
->Request
.CDB
[0] = cmd
; /* reset */
1986 c
->Request
.CDB
[1] = 0x04; /* reset a LUN */
1988 case 3: /* No-Op message */
1989 c
->Request
.CDBLen
= 1;
1990 c
->Request
.Type
.Attribute
= ATTR_SIMPLE
;
1991 c
->Request
.Type
.Direction
= XFER_WRITE
;
1992 c
->Request
.Timeout
= 0;
1993 c
->Request
.CDB
[0] = cmd
;
1997 "cciss%d: unknown message type %d\n", ctlr
, cmd
);
2002 "cciss%d: unknown command type %d\n", ctlr
, cmd_type
);
2005 /* Fill in the scatter gather information */
2007 buff_dma_handle
.val
= (__u64
) pci_map_single(h
->pdev
,
2009 PCI_DMA_BIDIRECTIONAL
);
2010 c
->SG
[0].Addr
.lower
= buff_dma_handle
.val32
.lower
;
2011 c
->SG
[0].Addr
.upper
= buff_dma_handle
.val32
.upper
;
2012 c
->SG
[0].Len
= size
;
2013 c
->SG
[0].Ext
= 0; /* we are not chaining */
2018 static int sendcmd_withirq(__u8 cmd
,
2022 unsigned int use_unit_num
,
2023 unsigned int log_unit
, __u8 page_code
, int cmd_type
)
2025 ctlr_info_t
*h
= hba
[ctlr
];
2026 CommandList_struct
*c
;
2027 u64bit buff_dma_handle
;
2028 unsigned long flags
;
2030 DECLARE_COMPLETION_ONSTACK(wait
);
2032 if ((c
= cmd_alloc(h
, 0)) == NULL
)
2034 return_status
= fill_cmd(c
, cmd
, ctlr
, buff
, size
, use_unit_num
,
2035 log_unit
, page_code
, NULL
, cmd_type
);
2036 if (return_status
!= IO_OK
) {
2038 return return_status
;
2043 /* Put the request on the tail of the queue and send it */
2044 spin_lock_irqsave(CCISS_LOCK(ctlr
), flags
);
2048 spin_unlock_irqrestore(CCISS_LOCK(ctlr
), flags
);
2050 wait_for_completion(&wait
);
2052 if (c
->err_info
->CommandStatus
!= 0) { /* an error has occurred */
2053 switch (c
->err_info
->CommandStatus
) {
2054 case CMD_TARGET_STATUS
:
2055 printk(KERN_WARNING
"cciss: cmd %p has "
2056 " completed with errors\n", c
);
2057 if (c
->err_info
->ScsiStatus
) {
2058 printk(KERN_WARNING
"cciss: cmd %p "
2059 "has SCSI Status = %x\n",
2060 c
, c
->err_info
->ScsiStatus
);
2064 case CMD_DATA_UNDERRUN
:
2065 case CMD_DATA_OVERRUN
:
2066 /* expected for inquire and report lun commands */
2069 printk(KERN_WARNING
"cciss: Cmd %p is "
2070 "reported invalid\n", c
);
2071 return_status
= IO_ERROR
;
2073 case CMD_PROTOCOL_ERR
:
2074 printk(KERN_WARNING
"cciss: cmd %p has "
2075 "protocol error \n", c
);
2076 return_status
= IO_ERROR
;
2078 case CMD_HARDWARE_ERR
:
2079 printk(KERN_WARNING
"cciss: cmd %p had "
2080 " hardware error\n", c
);
2081 return_status
= IO_ERROR
;
2083 case CMD_CONNECTION_LOST
:
2084 printk(KERN_WARNING
"cciss: cmd %p had "
2085 "connection lost\n", c
);
2086 return_status
= IO_ERROR
;
2089 printk(KERN_WARNING
"cciss: cmd %p was "
2091 return_status
= IO_ERROR
;
2093 case CMD_ABORT_FAILED
:
2094 printk(KERN_WARNING
"cciss: cmd %p reports "
2095 "abort failed\n", c
);
2096 return_status
= IO_ERROR
;
2098 case CMD_UNSOLICITED_ABORT
:
2100 "cciss%d: unsolicited abort %p\n", ctlr
, c
);
2101 if (c
->retry_count
< MAX_CMD_RETRIES
) {
2103 "cciss%d: retrying %p\n", ctlr
, c
);
2105 /* erase the old error information */
2106 memset(c
->err_info
, 0,
2107 sizeof(ErrorInfo_struct
));
2108 return_status
= IO_OK
;
2109 INIT_COMPLETION(wait
);
2112 return_status
= IO_ERROR
;
2115 printk(KERN_WARNING
"cciss: cmd %p returned "
2116 "unknown status %x\n", c
,
2117 c
->err_info
->CommandStatus
);
2118 return_status
= IO_ERROR
;
2121 /* unlock the buffers from DMA */
2122 buff_dma_handle
.val32
.lower
= c
->SG
[0].Addr
.lower
;
2123 buff_dma_handle
.val32
.upper
= c
->SG
[0].Addr
.upper
;
2124 pci_unmap_single(h
->pdev
, (dma_addr_t
) buff_dma_handle
.val
,
2125 c
->SG
[0].Len
, PCI_DMA_BIDIRECTIONAL
);
2127 return return_status
;
2130 static void cciss_geometry_inquiry(int ctlr
, int logvol
,
2131 int withirq
, sector_t total_size
,
2132 unsigned int block_size
,
2133 InquiryData_struct
*inq_buff
,
2134 drive_info_struct
*drv
)
2139 memset(inq_buff
, 0, sizeof(InquiryData_struct
));
2141 return_code
= sendcmd_withirq(CISS_INQUIRY
, ctlr
,
2142 inq_buff
, sizeof(*inq_buff
), 1,
2143 logvol
, 0xC1, TYPE_CMD
);
2145 return_code
= sendcmd(CISS_INQUIRY
, ctlr
, inq_buff
,
2146 sizeof(*inq_buff
), 1, logvol
, 0xC1, NULL
,
2148 if (return_code
== IO_OK
) {
2149 if (inq_buff
->data_byte
[8] == 0xFF) {
2151 "cciss: reading geometry failed, volume "
2152 "does not support reading geometry\n");
2154 drv
->sectors
= 32; // Sectors per track
2155 drv
->cylinders
= total_size
+ 1;
2156 drv
->raid_level
= RAID_UNKNOWN
;
2158 drv
->heads
= inq_buff
->data_byte
[6];
2159 drv
->sectors
= inq_buff
->data_byte
[7];
2160 drv
->cylinders
= (inq_buff
->data_byte
[4] & 0xff) << 8;
2161 drv
->cylinders
+= inq_buff
->data_byte
[5];
2162 drv
->raid_level
= inq_buff
->data_byte
[8];
2164 drv
->block_size
= block_size
;
2165 drv
->nr_blocks
= total_size
+ 1;
2166 t
= drv
->heads
* drv
->sectors
;
2168 sector_t real_size
= total_size
+ 1;
2169 unsigned long rem
= sector_div(real_size
, t
);
2172 drv
->cylinders
= real_size
;
2174 } else { /* Get geometry failed */
2175 printk(KERN_WARNING
"cciss: reading geometry failed\n");
2177 printk(KERN_INFO
" heads=%d, sectors=%d, cylinders=%d\n\n",
2178 drv
->heads
, drv
->sectors
, drv
->cylinders
);
2182 cciss_read_capacity(int ctlr
, int logvol
, int withirq
, sector_t
*total_size
,
2183 unsigned int *block_size
)
2185 ReadCapdata_struct
*buf
;
2188 buf
= kzalloc(sizeof(ReadCapdata_struct
), GFP_KERNEL
);
2190 printk(KERN_WARNING
"cciss: out of memory\n");
2195 return_code
= sendcmd_withirq(CCISS_READ_CAPACITY
,
2196 ctlr
, buf
, sizeof(ReadCapdata_struct
),
2197 1, logvol
, 0, TYPE_CMD
);
2199 return_code
= sendcmd(CCISS_READ_CAPACITY
,
2200 ctlr
, buf
, sizeof(ReadCapdata_struct
),
2201 1, logvol
, 0, NULL
, TYPE_CMD
);
2202 if (return_code
== IO_OK
) {
2203 *total_size
= be32_to_cpu(*(__be32
*) buf
->total_size
);
2204 *block_size
= be32_to_cpu(*(__be32
*) buf
->block_size
);
2205 } else { /* read capacity command failed */
2206 printk(KERN_WARNING
"cciss: read capacity failed\n");
2208 *block_size
= BLOCK_SIZE
;
2210 if (*total_size
!= 0)
2211 printk(KERN_INFO
" blocks= %llu block_size= %d\n",
2212 (unsigned long long)*total_size
+1, *block_size
);
2217 cciss_read_capacity_16(int ctlr
, int logvol
, int withirq
, sector_t
*total_size
, unsigned int *block_size
)
2219 ReadCapdata_struct_16
*buf
;
2222 buf
= kzalloc(sizeof(ReadCapdata_struct_16
), GFP_KERNEL
);
2224 printk(KERN_WARNING
"cciss: out of memory\n");
2229 return_code
= sendcmd_withirq(CCISS_READ_CAPACITY_16
,
2230 ctlr
, buf
, sizeof(ReadCapdata_struct_16
),
2231 1, logvol
, 0, TYPE_CMD
);
2234 return_code
= sendcmd(CCISS_READ_CAPACITY_16
,
2235 ctlr
, buf
, sizeof(ReadCapdata_struct_16
),
2236 1, logvol
, 0, NULL
, TYPE_CMD
);
2238 if (return_code
== IO_OK
) {
2239 *total_size
= be64_to_cpu(*(__be64
*) buf
->total_size
);
2240 *block_size
= be32_to_cpu(*(__be32
*) buf
->block_size
);
2241 } else { /* read capacity command failed */
2242 printk(KERN_WARNING
"cciss: read capacity failed\n");
2244 *block_size
= BLOCK_SIZE
;
2246 printk(KERN_INFO
" blocks= %llu block_size= %d\n",
2247 (unsigned long long)*total_size
+1, *block_size
);
2251 static int cciss_revalidate(struct gendisk
*disk
)
2253 ctlr_info_t
*h
= get_host(disk
);
2254 drive_info_struct
*drv
= get_drv(disk
);
2257 unsigned int block_size
;
2258 sector_t total_size
;
2259 InquiryData_struct
*inq_buff
= NULL
;
2261 for (logvol
= 0; logvol
< CISS_MAX_LUN
; logvol
++) {
2262 if (h
->drv
[logvol
].LunID
== drv
->LunID
) {
2271 inq_buff
= kmalloc(sizeof(InquiryData_struct
), GFP_KERNEL
);
2272 if (inq_buff
== NULL
) {
2273 printk(KERN_WARNING
"cciss: out of memory\n");
2276 if (h
->cciss_read
== CCISS_READ_10
) {
2277 cciss_read_capacity(h
->ctlr
, logvol
, 1,
2278 &total_size
, &block_size
);
2280 cciss_read_capacity_16(h
->ctlr
, logvol
, 1,
2281 &total_size
, &block_size
);
2283 cciss_geometry_inquiry(h
->ctlr
, logvol
, 1, total_size
, block_size
,
2286 blk_queue_hardsect_size(drv
->queue
, drv
->block_size
);
2287 set_capacity(disk
, drv
->nr_blocks
);
2294 * Wait polling for a command to complete.
2295 * The memory mapped FIFO is polled for the completion.
2296 * Used only at init time, interrupts from the HBA are disabled.
2298 static unsigned long pollcomplete(int ctlr
)
2303 /* Wait (up to 20 seconds) for a command to complete */
2305 for (i
= 20 * HZ
; i
> 0; i
--) {
2306 done
= hba
[ctlr
]->access
.command_completed(hba
[ctlr
]);
2307 if (done
== FIFO_EMPTY
)
2308 schedule_timeout_uninterruptible(1);
2312 /* Invalid address to tell caller we ran out of time */
2316 static int add_sendcmd_reject(__u8 cmd
, int ctlr
, unsigned long complete
)
2318 /* We get in here if sendcmd() is polling for completions
2319 and gets some command back that it wasn't expecting --
2320 something other than that which it just sent down.
2321 Ordinarily, that shouldn't happen, but it can happen when
2322 the scsi tape stuff gets into error handling mode, and
2323 starts using sendcmd() to try to abort commands and
2324 reset tape drives. In that case, sendcmd may pick up
2325 completions of commands that were sent to logical drives
2326 through the block i/o system, or cciss ioctls completing, etc.
2327 In that case, we need to save those completions for later
2328 processing by the interrupt handler.
2331 #ifdef CONFIG_CISS_SCSI_TAPE
2332 struct sendcmd_reject_list
*srl
= &hba
[ctlr
]->scsi_rejects
;
2334 /* If it's not the scsi tape stuff doing error handling, (abort */
2335 /* or reset) then we don't expect anything weird. */
2336 if (cmd
!= CCISS_RESET_MSG
&& cmd
!= CCISS_ABORT_MSG
) {
2338 printk(KERN_WARNING
"cciss cciss%d: SendCmd "
2339 "Invalid command list address returned! (%lx)\n",
2341 /* not much we can do. */
2342 #ifdef CONFIG_CISS_SCSI_TAPE
2346 /* We've sent down an abort or reset, but something else
2348 if (srl
->ncompletions
>= (hba
[ctlr
]->nr_cmds
+ 2)) {
2349 /* Uh oh. No room to save it for later... */
2350 printk(KERN_WARNING
"cciss%d: Sendcmd: Invalid command addr, "
2351 "reject list overflow, command lost!\n", ctlr
);
2354 /* Save it for later */
2355 srl
->complete
[srl
->ncompletions
] = complete
;
2356 srl
->ncompletions
++;
2362 * Send a command to the controller, and wait for it to complete.
2363 * Only used at init time.
2365 static int sendcmd(__u8 cmd
, int ctlr
, void *buff
, size_t size
, unsigned int use_unit_num
, /* 0: address the controller,
2366 1: address logical volume log_unit,
2367 2: periph device address is scsi3addr */
2368 unsigned int log_unit
,
2369 __u8 page_code
, unsigned char *scsi3addr
, int cmd_type
)
2371 CommandList_struct
*c
;
2373 unsigned long complete
;
2374 ctlr_info_t
*info_p
= hba
[ctlr
];
2375 u64bit buff_dma_handle
;
2376 int status
, done
= 0;
2378 if ((c
= cmd_alloc(info_p
, 1)) == NULL
) {
2379 printk(KERN_WARNING
"cciss: unable to get memory");
2382 status
= fill_cmd(c
, cmd
, ctlr
, buff
, size
, use_unit_num
,
2383 log_unit
, page_code
, scsi3addr
, cmd_type
);
2384 if (status
!= IO_OK
) {
2385 cmd_free(info_p
, c
, 1);
2393 printk(KERN_DEBUG
"cciss: turning intr off\n");
2394 #endif /* CCISS_DEBUG */
2395 info_p
->access
.set_intr_mask(info_p
, CCISS_INTR_OFF
);
2397 /* Make sure there is room in the command FIFO */
2398 /* Actually it should be completely empty at this time */
2399 /* unless we are in here doing error handling for the scsi */
2400 /* tape side of the driver. */
2401 for (i
= 200000; i
> 0; i
--) {
2402 /* if fifo isn't full go */
2403 if (!(info_p
->access
.fifo_full(info_p
))) {
2408 printk(KERN_WARNING
"cciss cciss%d: SendCmd FIFO full,"
2409 " waiting!\n", ctlr
);
2414 info_p
->access
.submit_command(info_p
, c
);
2417 complete
= pollcomplete(ctlr
);
2420 printk(KERN_DEBUG
"cciss: command completed\n");
2421 #endif /* CCISS_DEBUG */
2423 if (complete
== 1) {
2425 "cciss cciss%d: SendCmd Timeout out, "
2426 "No command list address returned!\n", ctlr
);
2432 /* This will need to change for direct lookup completions */
2433 if ((complete
& CISS_ERROR_BIT
)
2434 && (complete
& ~CISS_ERROR_BIT
) == c
->busaddr
) {
2435 /* if data overrun or underun on Report command
2438 if (((c
->Request
.CDB
[0] == CISS_REPORT_LOG
) ||
2439 (c
->Request
.CDB
[0] == CISS_REPORT_PHYS
) ||
2440 (c
->Request
.CDB
[0] == CISS_INQUIRY
)) &&
2441 ((c
->err_info
->CommandStatus
==
2442 CMD_DATA_OVERRUN
) ||
2443 (c
->err_info
->CommandStatus
== CMD_DATA_UNDERRUN
)
2445 complete
= c
->busaddr
;
2447 if (c
->err_info
->CommandStatus
==
2448 CMD_UNSOLICITED_ABORT
) {
2449 printk(KERN_WARNING
"cciss%d: "
2450 "unsolicited abort %p\n",
2452 if (c
->retry_count
< MAX_CMD_RETRIES
) {
2454 "cciss%d: retrying %p\n",
2457 /* erase the old error */
2459 memset(c
->err_info
, 0,
2461 (ErrorInfo_struct
));
2465 "cciss%d: retried %p too "
2466 "many times\n", ctlr
, c
);
2470 } else if (c
->err_info
->CommandStatus
==
2473 "cciss%d: command could not be aborted.\n",
2478 printk(KERN_WARNING
"ciss ciss%d: sendcmd"
2479 " Error %x \n", ctlr
,
2480 c
->err_info
->CommandStatus
);
2481 printk(KERN_WARNING
"ciss ciss%d: sendcmd"
2483 " size %x\n num %x value %x\n",
2485 c
->err_info
->MoreErrInfo
.Invalid_Cmd
.
2487 c
->err_info
->MoreErrInfo
.Invalid_Cmd
.
2489 c
->err_info
->MoreErrInfo
.Invalid_Cmd
.
2495 /* This will need changing for direct lookup completions */
2496 if (complete
!= c
->busaddr
) {
2497 if (add_sendcmd_reject(cmd
, ctlr
, complete
) != 0) {
2498 BUG(); /* we are pretty much hosed if we get here. */
2506 /* unlock the data buffer from DMA */
2507 buff_dma_handle
.val32
.lower
= c
->SG
[0].Addr
.lower
;
2508 buff_dma_handle
.val32
.upper
= c
->SG
[0].Addr
.upper
;
2509 pci_unmap_single(info_p
->pdev
, (dma_addr_t
) buff_dma_handle
.val
,
2510 c
->SG
[0].Len
, PCI_DMA_BIDIRECTIONAL
);
2511 #ifdef CONFIG_CISS_SCSI_TAPE
2512 /* if we saved some commands for later, process them now. */
2513 if (info_p
->scsi_rejects
.ncompletions
> 0)
2514 do_cciss_intr(0, info_p
);
2516 cmd_free(info_p
, c
, 1);
2521 * Map (physical) PCI mem into (virtual) kernel space
2523 static void __iomem
*remap_pci_mem(ulong base
, ulong size
)
2525 ulong page_base
= ((ulong
) base
) & PAGE_MASK
;
2526 ulong page_offs
= ((ulong
) base
) - page_base
;
2527 void __iomem
*page_remapped
= ioremap(page_base
, page_offs
+ size
);
2529 return page_remapped
? (page_remapped
+ page_offs
) : NULL
;
2533 * Takes jobs of the Q and sends them to the hardware, then puts it on
2534 * the Q to wait for completion.
2536 static void start_io(ctlr_info_t
*h
)
2538 CommandList_struct
*c
;
2540 while (!hlist_empty(&h
->reqQ
)) {
2541 c
= hlist_entry(h
->reqQ
.first
, CommandList_struct
, list
);
2542 /* can't do anything if fifo is full */
2543 if ((h
->access
.fifo_full(h
))) {
2544 printk(KERN_WARNING
"cciss: fifo full\n");
2548 /* Get the first entry from the Request Q */
2552 /* Tell the controller execute command */
2553 h
->access
.submit_command(h
, c
);
2555 /* Put job onto the completed Q */
2560 /* Assumes that CCISS_LOCK(h->ctlr) is held. */
2561 /* Zeros out the error record and then resends the command back */
2562 /* to the controller */
2563 static inline void resend_cciss_cmd(ctlr_info_t
*h
, CommandList_struct
*c
)
2565 /* erase the old error information */
2566 memset(c
->err_info
, 0, sizeof(ErrorInfo_struct
));
2568 /* add it to software queue and then send it to the controller */
2571 if (h
->Qdepth
> h
->maxQsinceinit
)
2572 h
->maxQsinceinit
= h
->Qdepth
;
2577 static inline unsigned int make_status_bytes(unsigned int scsi_status_byte
,
2578 unsigned int msg_byte
, unsigned int host_byte
,
2579 unsigned int driver_byte
)
2581 /* inverse of macros in scsi.h */
2582 return (scsi_status_byte
& 0xff) |
2583 ((msg_byte
& 0xff) << 8) |
2584 ((host_byte
& 0xff) << 16) |
2585 ((driver_byte
& 0xff) << 24);
2588 static inline int evaluate_target_status(CommandList_struct
*cmd
)
2590 unsigned char sense_key
;
2591 unsigned char status_byte
, msg_byte
, host_byte
, driver_byte
;
2594 /* If we get in here, it means we got "target status", that is, scsi status */
2595 status_byte
= cmd
->err_info
->ScsiStatus
;
2596 driver_byte
= DRIVER_OK
;
2597 msg_byte
= cmd
->err_info
->CommandStatus
; /* correct? seems too device specific */
2599 if (blk_pc_request(cmd
->rq
))
2600 host_byte
= DID_PASSTHROUGH
;
2604 error_value
= make_status_bytes(status_byte
, msg_byte
,
2605 host_byte
, driver_byte
);
2607 if (cmd
->err_info
->ScsiStatus
!= SAM_STAT_CHECK_CONDITION
) {
2608 if (!blk_pc_request(cmd
->rq
))
2609 printk(KERN_WARNING
"cciss: cmd %p "
2610 "has SCSI Status 0x%x\n",
2611 cmd
, cmd
->err_info
->ScsiStatus
);
2615 /* check the sense key */
2616 sense_key
= 0xf & cmd
->err_info
->SenseInfo
[2];
2617 /* no status or recovered error */
2618 if (((sense_key
== 0x0) || (sense_key
== 0x1)) && !blk_pc_request(cmd
->rq
))
2621 if (!blk_pc_request(cmd
->rq
)) { /* Not SG_IO or similar? */
2622 if (error_value
!= 0)
2623 printk(KERN_WARNING
"cciss: cmd %p has CHECK CONDITION"
2624 " sense key = 0x%x\n", cmd
, sense_key
);
2628 /* SG_IO or similar, copy sense data back */
2629 if (cmd
->rq
->sense
) {
2630 if (cmd
->rq
->sense_len
> cmd
->err_info
->SenseLen
)
2631 cmd
->rq
->sense_len
= cmd
->err_info
->SenseLen
;
2632 memcpy(cmd
->rq
->sense
, cmd
->err_info
->SenseInfo
,
2633 cmd
->rq
->sense_len
);
2635 cmd
->rq
->sense_len
= 0;
2640 /* checks the status of the job and calls complete buffers to mark all
2641 * buffers for the completed job. Note that this function does not need
2642 * to hold the hba/queue lock.
2644 static inline void complete_command(ctlr_info_t
*h
, CommandList_struct
*cmd
,
2648 struct request
*rq
= cmd
->rq
;
2653 rq
->errors
= make_status_bytes(0, 0, 0, DRIVER_TIMEOUT
);
2655 if (cmd
->err_info
->CommandStatus
== 0) /* no error has occurred */
2656 goto after_error_processing
;
2658 switch (cmd
->err_info
->CommandStatus
) {
2659 case CMD_TARGET_STATUS
:
2660 rq
->errors
= evaluate_target_status(cmd
);
2662 case CMD_DATA_UNDERRUN
:
2663 if (blk_fs_request(cmd
->rq
)) {
2664 printk(KERN_WARNING
"cciss: cmd %p has"
2665 " completed with data underrun "
2667 cmd
->rq
->data_len
= cmd
->err_info
->ResidualCnt
;
2670 case CMD_DATA_OVERRUN
:
2671 if (blk_fs_request(cmd
->rq
))
2672 printk(KERN_WARNING
"cciss: cmd %p has"
2673 " completed with data overrun "
2677 printk(KERN_WARNING
"cciss: cmd %p is "
2678 "reported invalid\n", cmd
);
2679 rq
->errors
= make_status_bytes(SAM_STAT_GOOD
,
2680 cmd
->err_info
->CommandStatus
, DRIVER_OK
,
2681 blk_pc_request(cmd
->rq
) ? DID_PASSTHROUGH
: DID_ERROR
);
2683 case CMD_PROTOCOL_ERR
:
2684 printk(KERN_WARNING
"cciss: cmd %p has "
2685 "protocol error \n", cmd
);
2686 rq
->errors
= make_status_bytes(SAM_STAT_GOOD
,
2687 cmd
->err_info
->CommandStatus
, DRIVER_OK
,
2688 blk_pc_request(cmd
->rq
) ? DID_PASSTHROUGH
: DID_ERROR
);
2690 case CMD_HARDWARE_ERR
:
2691 printk(KERN_WARNING
"cciss: cmd %p had "
2692 " hardware error\n", cmd
);
2693 rq
->errors
= make_status_bytes(SAM_STAT_GOOD
,
2694 cmd
->err_info
->CommandStatus
, DRIVER_OK
,
2695 blk_pc_request(cmd
->rq
) ? DID_PASSTHROUGH
: DID_ERROR
);
2697 case CMD_CONNECTION_LOST
:
2698 printk(KERN_WARNING
"cciss: cmd %p had "
2699 "connection lost\n", cmd
);
2700 rq
->errors
= make_status_bytes(SAM_STAT_GOOD
,
2701 cmd
->err_info
->CommandStatus
, DRIVER_OK
,
2702 blk_pc_request(cmd
->rq
) ? DID_PASSTHROUGH
: DID_ERROR
);
2705 printk(KERN_WARNING
"cciss: cmd %p was "
2707 rq
->errors
= make_status_bytes(SAM_STAT_GOOD
,
2708 cmd
->err_info
->CommandStatus
, DRIVER_OK
,
2709 blk_pc_request(cmd
->rq
) ? DID_PASSTHROUGH
: DID_ABORT
);
2711 case CMD_ABORT_FAILED
:
2712 printk(KERN_WARNING
"cciss: cmd %p reports "
2713 "abort failed\n", cmd
);
2714 rq
->errors
= make_status_bytes(SAM_STAT_GOOD
,
2715 cmd
->err_info
->CommandStatus
, DRIVER_OK
,
2716 blk_pc_request(cmd
->rq
) ? DID_PASSTHROUGH
: DID_ERROR
);
2718 case CMD_UNSOLICITED_ABORT
:
2719 printk(KERN_WARNING
"cciss%d: unsolicited "
2720 "abort %p\n", h
->ctlr
, cmd
);
2721 if (cmd
->retry_count
< MAX_CMD_RETRIES
) {
2724 "cciss%d: retrying %p\n", h
->ctlr
, cmd
);
2728 "cciss%d: %p retried too "
2729 "many times\n", h
->ctlr
, cmd
);
2730 rq
->errors
= make_status_bytes(SAM_STAT_GOOD
,
2731 cmd
->err_info
->CommandStatus
, DRIVER_OK
,
2732 blk_pc_request(cmd
->rq
) ? DID_PASSTHROUGH
: DID_ABORT
);
2735 printk(KERN_WARNING
"cciss: cmd %p timedout\n", cmd
);
2736 rq
->errors
= make_status_bytes(SAM_STAT_GOOD
,
2737 cmd
->err_info
->CommandStatus
, DRIVER_OK
,
2738 blk_pc_request(cmd
->rq
) ? DID_PASSTHROUGH
: DID_ERROR
);
2741 printk(KERN_WARNING
"cciss: cmd %p returned "
2742 "unknown status %x\n", cmd
,
2743 cmd
->err_info
->CommandStatus
);
2744 rq
->errors
= make_status_bytes(SAM_STAT_GOOD
,
2745 cmd
->err_info
->CommandStatus
, DRIVER_OK
,
2746 blk_pc_request(cmd
->rq
) ? DID_PASSTHROUGH
: DID_ERROR
);
2749 after_error_processing
:
2751 /* We need to return this command */
2753 resend_cciss_cmd(h
, cmd
);
2756 cmd
->rq
->completion_data
= cmd
;
2757 blk_complete_request(cmd
->rq
);
2761 * Get a request and submit it to the controller.
2763 static void do_cciss_request(struct request_queue
*q
)
2765 ctlr_info_t
*h
= q
->queuedata
;
2766 CommandList_struct
*c
;
2769 struct request
*creq
;
2771 struct scatterlist tmp_sg
[MAXSGENTRIES
];
2772 drive_info_struct
*drv
;
2775 /* We call start_io here in case there is a command waiting on the
2776 * queue that has not been sent.
2778 if (blk_queue_plugged(q
))
2782 creq
= elv_next_request(q
);
2786 BUG_ON(creq
->nr_phys_segments
> MAXSGENTRIES
);
2788 if ((c
= cmd_alloc(h
, 1)) == NULL
)
2791 blkdev_dequeue_request(creq
);
2793 spin_unlock_irq(q
->queue_lock
);
2795 c
->cmd_type
= CMD_RWREQ
;
2798 /* fill in the request */
2799 drv
= creq
->rq_disk
->private_data
;
2800 c
->Header
.ReplyQueue
= 0; // unused in simple mode
2801 /* got command from pool, so use the command block index instead */
2802 /* for direct lookups. */
2803 /* The first 2 bits are reserved for controller error reporting. */
2804 c
->Header
.Tag
.lower
= (c
->cmdindex
<< 3);
2805 c
->Header
.Tag
.lower
|= 0x04; /* flag for direct lookup. */
2806 c
->Header
.LUN
.LogDev
.VolId
= drv
->LunID
;
2807 c
->Header
.LUN
.LogDev
.Mode
= 1;
2808 c
->Request
.CDBLen
= 10; // 12 byte commands not in FW yet;
2809 c
->Request
.Type
.Type
= TYPE_CMD
; // It is a command.
2810 c
->Request
.Type
.Attribute
= ATTR_SIMPLE
;
2811 c
->Request
.Type
.Direction
=
2812 (rq_data_dir(creq
) == READ
) ? XFER_READ
: XFER_WRITE
;
2813 c
->Request
.Timeout
= 0; // Don't time out
2815 (rq_data_dir(creq
) == READ
) ? h
->cciss_read
: h
->cciss_write
;
2816 start_blk
= creq
->sector
;
2818 printk(KERN_DEBUG
"ciss: sector =%d nr_sectors=%d\n", (int)creq
->sector
,
2819 (int)creq
->nr_sectors
);
2820 #endif /* CCISS_DEBUG */
2822 sg_init_table(tmp_sg
, MAXSGENTRIES
);
2823 seg
= blk_rq_map_sg(q
, creq
, tmp_sg
);
2825 /* get the DMA records for the setup */
2826 if (c
->Request
.Type
.Direction
== XFER_READ
)
2827 dir
= PCI_DMA_FROMDEVICE
;
2829 dir
= PCI_DMA_TODEVICE
;
2831 for (i
= 0; i
< seg
; i
++) {
2832 c
->SG
[i
].Len
= tmp_sg
[i
].length
;
2833 temp64
.val
= (__u64
) pci_map_page(h
->pdev
, sg_page(&tmp_sg
[i
]),
2835 tmp_sg
[i
].length
, dir
);
2836 c
->SG
[i
].Addr
.lower
= temp64
.val32
.lower
;
2837 c
->SG
[i
].Addr
.upper
= temp64
.val32
.upper
;
2838 c
->SG
[i
].Ext
= 0; // we are not chaining
2840 /* track how many SG entries we are using */
2845 printk(KERN_DEBUG
"cciss: Submitting %lu sectors in %d segments\n",
2846 creq
->nr_sectors
, seg
);
2847 #endif /* CCISS_DEBUG */
2849 c
->Header
.SGList
= c
->Header
.SGTotal
= seg
;
2850 if (likely(blk_fs_request(creq
))) {
2851 if(h
->cciss_read
== CCISS_READ_10
) {
2852 c
->Request
.CDB
[1] = 0;
2853 c
->Request
.CDB
[2] = (start_blk
>> 24) & 0xff; //MSB
2854 c
->Request
.CDB
[3] = (start_blk
>> 16) & 0xff;
2855 c
->Request
.CDB
[4] = (start_blk
>> 8) & 0xff;
2856 c
->Request
.CDB
[5] = start_blk
& 0xff;
2857 c
->Request
.CDB
[6] = 0; // (sect >> 24) & 0xff; MSB
2858 c
->Request
.CDB
[7] = (creq
->nr_sectors
>> 8) & 0xff;
2859 c
->Request
.CDB
[8] = creq
->nr_sectors
& 0xff;
2860 c
->Request
.CDB
[9] = c
->Request
.CDB
[11] = c
->Request
.CDB
[12] = 0;
2862 u32 upper32
= upper_32_bits(start_blk
);
2864 c
->Request
.CDBLen
= 16;
2865 c
->Request
.CDB
[1]= 0;
2866 c
->Request
.CDB
[2]= (upper32
>> 24) & 0xff; //MSB
2867 c
->Request
.CDB
[3]= (upper32
>> 16) & 0xff;
2868 c
->Request
.CDB
[4]= (upper32
>> 8) & 0xff;
2869 c
->Request
.CDB
[5]= upper32
& 0xff;
2870 c
->Request
.CDB
[6]= (start_blk
>> 24) & 0xff;
2871 c
->Request
.CDB
[7]= (start_blk
>> 16) & 0xff;
2872 c
->Request
.CDB
[8]= (start_blk
>> 8) & 0xff;
2873 c
->Request
.CDB
[9]= start_blk
& 0xff;
2874 c
->Request
.CDB
[10]= (creq
->nr_sectors
>> 24) & 0xff;
2875 c
->Request
.CDB
[11]= (creq
->nr_sectors
>> 16) & 0xff;
2876 c
->Request
.CDB
[12]= (creq
->nr_sectors
>> 8) & 0xff;
2877 c
->Request
.CDB
[13]= creq
->nr_sectors
& 0xff;
2878 c
->Request
.CDB
[14] = c
->Request
.CDB
[15] = 0;
2880 } else if (blk_pc_request(creq
)) {
2881 c
->Request
.CDBLen
= creq
->cmd_len
;
2882 memcpy(c
->Request
.CDB
, creq
->cmd
, BLK_MAX_CDB
);
2884 printk(KERN_WARNING
"cciss%d: bad request type %d\n", h
->ctlr
, creq
->cmd_type
);
2888 spin_lock_irq(q
->queue_lock
);
2892 if (h
->Qdepth
> h
->maxQsinceinit
)
2893 h
->maxQsinceinit
= h
->Qdepth
;
2899 /* We will already have the driver lock here so not need
2905 static inline unsigned long get_next_completion(ctlr_info_t
*h
)
2907 #ifdef CONFIG_CISS_SCSI_TAPE
2908 /* Any rejects from sendcmd() lying around? Process them first */
2909 if (h
->scsi_rejects
.ncompletions
== 0)
2910 return h
->access
.command_completed(h
);
2912 struct sendcmd_reject_list
*srl
;
2914 srl
= &h
->scsi_rejects
;
2915 n
= --srl
->ncompletions
;
2916 /* printk("cciss%d: processing saved reject\n", h->ctlr); */
2918 return srl
->complete
[n
];
2921 return h
->access
.command_completed(h
);
2925 static inline int interrupt_pending(ctlr_info_t
*h
)
2927 #ifdef CONFIG_CISS_SCSI_TAPE
2928 return (h
->access
.intr_pending(h
)
2929 || (h
->scsi_rejects
.ncompletions
> 0));
2931 return h
->access
.intr_pending(h
);
2935 static inline long interrupt_not_for_us(ctlr_info_t
*h
)
2937 #ifdef CONFIG_CISS_SCSI_TAPE
2938 return (((h
->access
.intr_pending(h
) == 0) ||
2939 (h
->interrupts_enabled
== 0))
2940 && (h
->scsi_rejects
.ncompletions
== 0));
2942 return (((h
->access
.intr_pending(h
) == 0) ||
2943 (h
->interrupts_enabled
== 0)));
2947 static irqreturn_t
do_cciss_intr(int irq
, void *dev_id
)
2949 ctlr_info_t
*h
= dev_id
;
2950 CommandList_struct
*c
;
2951 unsigned long flags
;
2954 if (interrupt_not_for_us(h
))
2957 * If there are completed commands in the completion queue,
2958 * we had better do something about it.
2960 spin_lock_irqsave(CCISS_LOCK(h
->ctlr
), flags
);
2961 while (interrupt_pending(h
)) {
2962 while ((a
= get_next_completion(h
)) != FIFO_EMPTY
) {
2966 if (a2
>= h
->nr_cmds
) {
2968 "cciss: controller cciss%d failed, stopping.\n",
2970 fail_all_cmds(h
->ctlr
);
2974 c
= h
->cmd_pool
+ a2
;
2978 struct hlist_node
*tmp
;
2982 hlist_for_each_entry(c
, tmp
, &h
->cmpQ
, list
) {
2983 if (c
->busaddr
== a
)
2988 * If we've found the command, take it off the
2989 * completion Q and free it
2991 if (c
&& c
->busaddr
== a
) {
2993 if (c
->cmd_type
== CMD_RWREQ
) {
2994 complete_command(h
, c
, 0);
2995 } else if (c
->cmd_type
== CMD_IOCTL_PEND
) {
2996 complete(c
->waiting
);
2998 # ifdef CONFIG_CISS_SCSI_TAPE
2999 else if (c
->cmd_type
== CMD_SCSI
)
3000 complete_scsi_command(c
, 0, a1
);
3007 spin_unlock_irqrestore(CCISS_LOCK(h
->ctlr
), flags
);
3012 * We cannot read the structure directly, for portability we must use
3014 * This is for debug only.
3017 static void print_cfg_table(CfgTable_struct
*tb
)
3022 printk("Controller Configuration information\n");
3023 printk("------------------------------------\n");
3024 for (i
= 0; i
< 4; i
++)
3025 temp_name
[i
] = readb(&(tb
->Signature
[i
]));
3026 temp_name
[4] = '\0';
3027 printk(" Signature = %s\n", temp_name
);
3028 printk(" Spec Number = %d\n", readl(&(tb
->SpecValence
)));
3029 printk(" Transport methods supported = 0x%x\n",
3030 readl(&(tb
->TransportSupport
)));
3031 printk(" Transport methods active = 0x%x\n",
3032 readl(&(tb
->TransportActive
)));
3033 printk(" Requested transport Method = 0x%x\n",
3034 readl(&(tb
->HostWrite
.TransportRequest
)));
3035 printk(" Coalesce Interrupt Delay = 0x%x\n",
3036 readl(&(tb
->HostWrite
.CoalIntDelay
)));
3037 printk(" Coalesce Interrupt Count = 0x%x\n",
3038 readl(&(tb
->HostWrite
.CoalIntCount
)));
3039 printk(" Max outstanding commands = 0x%d\n",
3040 readl(&(tb
->CmdsOutMax
)));
3041 printk(" Bus Types = 0x%x\n", readl(&(tb
->BusTypes
)));
3042 for (i
= 0; i
< 16; i
++)
3043 temp_name
[i
] = readb(&(tb
->ServerName
[i
]));
3044 temp_name
[16] = '\0';
3045 printk(" Server Name = %s\n", temp_name
);
3046 printk(" Heartbeat Counter = 0x%x\n\n\n", readl(&(tb
->HeartBeat
)));
3048 #endif /* CCISS_DEBUG */
3050 static int find_PCI_BAR_index(struct pci_dev
*pdev
, unsigned long pci_bar_addr
)
3052 int i
, offset
, mem_type
, bar_type
;
3053 if (pci_bar_addr
== PCI_BASE_ADDRESS_0
) /* looking for BAR zero? */
3056 for (i
= 0; i
< DEVICE_COUNT_RESOURCE
; i
++) {
3057 bar_type
= pci_resource_flags(pdev
, i
) & PCI_BASE_ADDRESS_SPACE
;
3058 if (bar_type
== PCI_BASE_ADDRESS_SPACE_IO
)
3061 mem_type
= pci_resource_flags(pdev
, i
) &
3062 PCI_BASE_ADDRESS_MEM_TYPE_MASK
;
3064 case PCI_BASE_ADDRESS_MEM_TYPE_32
:
3065 case PCI_BASE_ADDRESS_MEM_TYPE_1M
:
3066 offset
+= 4; /* 32 bit */
3068 case PCI_BASE_ADDRESS_MEM_TYPE_64
:
3071 default: /* reserved in PCI 2.2 */
3073 "Base address is invalid\n");
3078 if (offset
== pci_bar_addr
- PCI_BASE_ADDRESS_0
)
3084 /* If MSI/MSI-X is supported by the kernel we will try to enable it on
3085 * controllers that are capable. If not, we use IO-APIC mode.
3088 static void __devinit
cciss_interrupt_mode(ctlr_info_t
*c
,
3089 struct pci_dev
*pdev
, __u32 board_id
)
3091 #ifdef CONFIG_PCI_MSI
3093 struct msix_entry cciss_msix_entries
[4] = { {0, 0}, {0, 1},
3097 /* Some boards advertise MSI but don't really support it */
3098 if ((board_id
== 0x40700E11) ||
3099 (board_id
== 0x40800E11) ||
3100 (board_id
== 0x40820E11) || (board_id
== 0x40830E11))
3101 goto default_int_mode
;
3103 if (pci_find_capability(pdev
, PCI_CAP_ID_MSIX
)) {
3104 err
= pci_enable_msix(pdev
, cciss_msix_entries
, 4);
3106 c
->intr
[0] = cciss_msix_entries
[0].vector
;
3107 c
->intr
[1] = cciss_msix_entries
[1].vector
;
3108 c
->intr
[2] = cciss_msix_entries
[2].vector
;
3109 c
->intr
[3] = cciss_msix_entries
[3].vector
;
3114 printk(KERN_WARNING
"cciss: only %d MSI-X vectors "
3115 "available\n", err
);
3116 goto default_int_mode
;
3118 printk(KERN_WARNING
"cciss: MSI-X init failed %d\n",
3120 goto default_int_mode
;
3123 if (pci_find_capability(pdev
, PCI_CAP_ID_MSI
)) {
3124 if (!pci_enable_msi(pdev
)) {
3127 printk(KERN_WARNING
"cciss: MSI init failed\n");
3131 #endif /* CONFIG_PCI_MSI */
3132 /* if we get here we're going to use the default interrupt mode */
3133 c
->intr
[SIMPLE_MODE_INT
] = pdev
->irq
;
3137 static int __devinit
cciss_pci_init(ctlr_info_t
*c
, struct pci_dev
*pdev
)
3139 ushort subsystem_vendor_id
, subsystem_device_id
, command
;
3140 __u32 board_id
, scratchpad
= 0;
3142 __u32 cfg_base_addr
;
3143 __u64 cfg_base_addr_index
;
3146 /* check to see if controller has been disabled */
3147 /* BEFORE trying to enable it */
3148 (void)pci_read_config_word(pdev
, PCI_COMMAND
, &command
);
3149 if (!(command
& 0x02)) {
3151 "cciss: controller appears to be disabled\n");
3155 err
= pci_enable_device(pdev
);
3157 printk(KERN_ERR
"cciss: Unable to Enable PCI device\n");
3161 err
= pci_request_regions(pdev
, "cciss");
3163 printk(KERN_ERR
"cciss: Cannot obtain PCI resources, "
3168 subsystem_vendor_id
= pdev
->subsystem_vendor
;
3169 subsystem_device_id
= pdev
->subsystem_device
;
3170 board_id
= (((__u32
) (subsystem_device_id
<< 16) & 0xffff0000) |
3171 subsystem_vendor_id
);
3174 printk("command = %x\n", command
);
3175 printk("irq = %x\n", pdev
->irq
);
3176 printk("board_id = %x\n", board_id
);
3177 #endif /* CCISS_DEBUG */
3179 /* If the kernel supports MSI/MSI-X we will try to enable that functionality,
3180 * else we use the IO-APIC interrupt assigned to us by system ROM.
3182 cciss_interrupt_mode(c
, pdev
, board_id
);
3185 * Memory base addr is first addr , the second points to the config
3189 c
->paddr
= pci_resource_start(pdev
, 0); /* addressing mode bits already removed */
3191 printk("address 0 = %lx\n", c
->paddr
);
3192 #endif /* CCISS_DEBUG */
3193 c
->vaddr
= remap_pci_mem(c
->paddr
, 0x250);
3195 /* Wait for the board to become ready. (PCI hotplug needs this.)
3196 * We poll for up to 120 secs, once per 100ms. */
3197 for (i
= 0; i
< 1200; i
++) {
3198 scratchpad
= readl(c
->vaddr
+ SA5_SCRATCHPAD_OFFSET
);
3199 if (scratchpad
== CCISS_FIRMWARE_READY
)
3201 set_current_state(TASK_INTERRUPTIBLE
);
3202 schedule_timeout(HZ
/ 10); /* wait 100ms */
3204 if (scratchpad
!= CCISS_FIRMWARE_READY
) {
3205 printk(KERN_WARNING
"cciss: Board not ready. Timed out.\n");
3207 goto err_out_free_res
;
3210 /* get the address index number */
3211 cfg_base_addr
= readl(c
->vaddr
+ SA5_CTCFG_OFFSET
);
3212 cfg_base_addr
&= (__u32
) 0x0000ffff;
3214 printk("cfg base address = %x\n", cfg_base_addr
);
3215 #endif /* CCISS_DEBUG */
3216 cfg_base_addr_index
= find_PCI_BAR_index(pdev
, cfg_base_addr
);
3218 printk("cfg base address index = %llx\n",
3219 (unsigned long long)cfg_base_addr_index
);
3220 #endif /* CCISS_DEBUG */
3221 if (cfg_base_addr_index
== -1) {
3222 printk(KERN_WARNING
"cciss: Cannot find cfg_base_addr_index\n");
3224 goto err_out_free_res
;
3227 cfg_offset
= readl(c
->vaddr
+ SA5_CTMEM_OFFSET
);
3229 printk("cfg offset = %llx\n", (unsigned long long)cfg_offset
);
3230 #endif /* CCISS_DEBUG */
3231 c
->cfgtable
= remap_pci_mem(pci_resource_start(pdev
,
3232 cfg_base_addr_index
) +
3233 cfg_offset
, sizeof(CfgTable_struct
));
3234 c
->board_id
= board_id
;
3237 print_cfg_table(c
->cfgtable
);
3238 #endif /* CCISS_DEBUG */
3240 /* Some controllers support Zero Memory Raid (ZMR).
3241 * When configured in ZMR mode the number of supported
3242 * commands drops to 64. So instead of just setting an
3243 * arbitrary value we make the driver a little smarter.
3244 * We read the config table to tell us how many commands
3245 * are supported on the controller then subtract 4 to
3246 * leave a little room for ioctl calls.
3248 c
->max_commands
= readl(&(c
->cfgtable
->CmdsOutMax
));
3249 for (i
= 0; i
< ARRAY_SIZE(products
); i
++) {
3250 if (board_id
== products
[i
].board_id
) {
3251 c
->product_name
= products
[i
].product_name
;
3252 c
->access
= *(products
[i
].access
);
3253 c
->nr_cmds
= c
->max_commands
- 4;
3257 if ((readb(&c
->cfgtable
->Signature
[0]) != 'C') ||
3258 (readb(&c
->cfgtable
->Signature
[1]) != 'I') ||
3259 (readb(&c
->cfgtable
->Signature
[2]) != 'S') ||
3260 (readb(&c
->cfgtable
->Signature
[3]) != 'S')) {
3261 printk("Does not appear to be a valid CISS config table\n");
3263 goto err_out_free_res
;
3265 /* We didn't find the controller in our list. We know the
3266 * signature is valid. If it's an HP device let's try to
3267 * bind to the device and fire it up. Otherwise we bail.
3269 if (i
== ARRAY_SIZE(products
)) {
3270 if (subsystem_vendor_id
== PCI_VENDOR_ID_HP
) {
3271 c
->product_name
= products
[i
-1].product_name
;
3272 c
->access
= *(products
[i
-1].access
);
3273 c
->nr_cmds
= c
->max_commands
- 4;
3274 printk(KERN_WARNING
"cciss: This is an unknown "
3275 "Smart Array controller.\n"
3276 "cciss: Please update to the latest driver "
3277 "available from www.hp.com.\n");
3279 printk(KERN_WARNING
"cciss: Sorry, I don't know how"
3280 " to access the Smart Array controller %08lx\n"
3281 , (unsigned long)board_id
);
3283 goto err_out_free_res
;
3288 /* Need to enable prefetch in the SCSI core for 6400 in x86 */
3290 prefetch
= readl(&(c
->cfgtable
->SCSI_Prefetch
));
3292 writel(prefetch
, &(c
->cfgtable
->SCSI_Prefetch
));
3296 /* Disabling DMA prefetch and refetch for the P600.
3297 * An ASIC bug may result in accesses to invalid memory addresses.
3298 * We've disabled prefetch for some time now. Testing with XEN
3299 * kernels revealed a bug in the refetch if dom0 resides on a P600.
3301 if(board_id
== 0x3225103C) {
3304 dma_prefetch
= readl(c
->vaddr
+ I2O_DMA1_CFG
);
3305 dma_prefetch
|= 0x8000;
3306 writel(dma_prefetch
, c
->vaddr
+ I2O_DMA1_CFG
);
3307 pci_read_config_dword(pdev
, PCI_COMMAND_PARITY
, &dma_refetch
);
3309 pci_write_config_dword(pdev
, PCI_COMMAND_PARITY
, dma_refetch
);
3313 printk("Trying to put board into Simple mode\n");
3314 #endif /* CCISS_DEBUG */
3315 c
->max_commands
= readl(&(c
->cfgtable
->CmdsOutMax
));
3316 /* Update the field, and then ring the doorbell */
3317 writel(CFGTBL_Trans_Simple
, &(c
->cfgtable
->HostWrite
.TransportRequest
));
3318 writel(CFGTBL_ChangeReq
, c
->vaddr
+ SA5_DOORBELL
);
3320 /* under certain very rare conditions, this can take awhile.
3321 * (e.g.: hot replace a failed 144GB drive in a RAID 5 set right
3322 * as we enter this code.) */
3323 for (i
= 0; i
< MAX_CONFIG_WAIT
; i
++) {
3324 if (!(readl(c
->vaddr
+ SA5_DOORBELL
) & CFGTBL_ChangeReq
))
3326 /* delay and try again */
3327 set_current_state(TASK_INTERRUPTIBLE
);
3328 schedule_timeout(10);
3332 printk(KERN_DEBUG
"I counter got to %d %x\n", i
,
3333 readl(c
->vaddr
+ SA5_DOORBELL
));
3334 #endif /* CCISS_DEBUG */
3336 print_cfg_table(c
->cfgtable
);
3337 #endif /* CCISS_DEBUG */
3339 if (!(readl(&(c
->cfgtable
->TransportActive
)) & CFGTBL_Trans_Simple
)) {
3340 printk(KERN_WARNING
"cciss: unable to get board into"
3343 goto err_out_free_res
;
3349 * Deliberately omit pci_disable_device(): it does something nasty to
3350 * Smart Array controllers that pci_enable_device does not undo
3352 pci_release_regions(pdev
);
3356 /* Function to find the first free pointer into our hba[] array
3357 * Returns -1 if no free entries are left.
3359 static int alloc_cciss_hba(void)
3363 for (i
= 0; i
< MAX_CTLR
; i
++) {
3367 p
= kzalloc(sizeof(ctlr_info_t
), GFP_KERNEL
);
3374 printk(KERN_WARNING
"cciss: This driver supports a maximum"
3375 " of %d controllers.\n", MAX_CTLR
);
3378 printk(KERN_ERR
"cciss: out of memory.\n");
3382 static void free_hba(int i
)
3384 ctlr_info_t
*p
= hba
[i
];
3388 for (n
= 0; n
< CISS_MAX_LUN
; n
++)
3389 put_disk(p
->gendisk
[n
]);
3394 * This is it. Find all the controllers and register them. I really hate
3395 * stealing all these major device numbers.
3396 * returns the number of block devices registered.
3398 static int __devinit
cciss_init_one(struct pci_dev
*pdev
,
3399 const struct pci_device_id
*ent
)
3404 int dac
, return_code
;
3405 InquiryData_struct
*inq_buff
= NULL
;
3407 i
= alloc_cciss_hba();
3411 hba
[i
]->busy_initializing
= 1;
3412 INIT_HLIST_HEAD(&hba
[i
]->cmpQ
);
3413 INIT_HLIST_HEAD(&hba
[i
]->reqQ
);
3415 if (cciss_pci_init(hba
[i
], pdev
) != 0)
3418 sprintf(hba
[i
]->devname
, "cciss%d", i
);
3420 hba
[i
]->pdev
= pdev
;
3422 /* configure PCI DMA stuff */
3423 if (!pci_set_dma_mask(pdev
, DMA_64BIT_MASK
))
3425 else if (!pci_set_dma_mask(pdev
, DMA_32BIT_MASK
))
3428 printk(KERN_ERR
"cciss: no suitable DMA available\n");
3433 * register with the major number, or get a dynamic major number
3434 * by passing 0 as argument. This is done for greater than
3435 * 8 controller support.
3437 if (i
< MAX_CTLR_ORIG
)
3438 hba
[i
]->major
= COMPAQ_CISS_MAJOR
+ i
;
3439 rc
= register_blkdev(hba
[i
]->major
, hba
[i
]->devname
);
3440 if (rc
== -EBUSY
|| rc
== -EINVAL
) {
3442 "cciss: Unable to get major number %d for %s "
3443 "on hba %d\n", hba
[i
]->major
, hba
[i
]->devname
, i
);
3446 if (i
>= MAX_CTLR_ORIG
)
3450 /* make sure the board interrupts are off */
3451 hba
[i
]->access
.set_intr_mask(hba
[i
], CCISS_INTR_OFF
);
3452 if (request_irq(hba
[i
]->intr
[SIMPLE_MODE_INT
], do_cciss_intr
,
3453 IRQF_DISABLED
| IRQF_SHARED
, hba
[i
]->devname
, hba
[i
])) {
3454 printk(KERN_ERR
"cciss: Unable to get irq %d for %s\n",
3455 hba
[i
]->intr
[SIMPLE_MODE_INT
], hba
[i
]->devname
);
3459 printk(KERN_INFO
"%s: <0x%x> at PCI %s IRQ %d%s using DAC\n",
3460 hba
[i
]->devname
, pdev
->device
, pci_name(pdev
),
3461 hba
[i
]->intr
[SIMPLE_MODE_INT
], dac
? "" : " not");
3463 hba
[i
]->cmd_pool_bits
=
3464 kmalloc(DIV_ROUND_UP(hba
[i
]->nr_cmds
, BITS_PER_LONG
)
3465 * sizeof(unsigned long), GFP_KERNEL
);
3466 hba
[i
]->cmd_pool
= (CommandList_struct
*)
3467 pci_alloc_consistent(hba
[i
]->pdev
,
3468 hba
[i
]->nr_cmds
* sizeof(CommandList_struct
),
3469 &(hba
[i
]->cmd_pool_dhandle
));
3470 hba
[i
]->errinfo_pool
= (ErrorInfo_struct
*)
3471 pci_alloc_consistent(hba
[i
]->pdev
,
3472 hba
[i
]->nr_cmds
* sizeof(ErrorInfo_struct
),
3473 &(hba
[i
]->errinfo_pool_dhandle
));
3474 if ((hba
[i
]->cmd_pool_bits
== NULL
)
3475 || (hba
[i
]->cmd_pool
== NULL
)
3476 || (hba
[i
]->errinfo_pool
== NULL
)) {
3477 printk(KERN_ERR
"cciss: out of memory");
3480 #ifdef CONFIG_CISS_SCSI_TAPE
3481 hba
[i
]->scsi_rejects
.complete
=
3482 kmalloc(sizeof(hba
[i
]->scsi_rejects
.complete
[0]) *
3483 (hba
[i
]->nr_cmds
+ 5), GFP_KERNEL
);
3484 if (hba
[i
]->scsi_rejects
.complete
== NULL
) {
3485 printk(KERN_ERR
"cciss: out of memory");
3489 spin_lock_init(&hba
[i
]->lock
);
3491 /* Initialize the pdev driver private data.
3492 have it point to hba[i]. */
3493 pci_set_drvdata(pdev
, hba
[i
]);
3494 /* command and error info recs zeroed out before
3496 memset(hba
[i
]->cmd_pool_bits
, 0,
3497 DIV_ROUND_UP(hba
[i
]->nr_cmds
, BITS_PER_LONG
)
3498 * sizeof(unsigned long));
3500 hba
[i
]->num_luns
= 0;
3501 hba
[i
]->highest_lun
= -1;
3502 for (j
= 0; j
< CISS_MAX_LUN
; j
++) {
3503 hba
[i
]->drv
[j
].raid_level
= -1;
3504 hba
[i
]->drv
[j
].queue
= NULL
;
3505 hba
[i
]->gendisk
[j
] = NULL
;
3508 cciss_scsi_setup(i
);
3510 /* Turn the interrupts on so we can service requests */
3511 hba
[i
]->access
.set_intr_mask(hba
[i
], CCISS_INTR_ON
);
3513 /* Get the firmware version */
3514 inq_buff
= kzalloc(sizeof(InquiryData_struct
), GFP_KERNEL
);
3515 if (inq_buff
== NULL
) {
3516 printk(KERN_ERR
"cciss: out of memory\n");
3520 return_code
= sendcmd_withirq(CISS_INQUIRY
, i
, inq_buff
,
3521 sizeof(InquiryData_struct
), 0, 0 , 0, TYPE_CMD
);
3522 if (return_code
== IO_OK
) {
3523 hba
[i
]->firm_ver
[0] = inq_buff
->data_byte
[32];
3524 hba
[i
]->firm_ver
[1] = inq_buff
->data_byte
[33];
3525 hba
[i
]->firm_ver
[2] = inq_buff
->data_byte
[34];
3526 hba
[i
]->firm_ver
[3] = inq_buff
->data_byte
[35];
3527 } else { /* send command failed */
3528 printk(KERN_WARNING
"cciss: unable to determine firmware"
3529 " version of controller\n");
3534 hba
[i
]->cciss_max_sectors
= 2048;
3536 hba
[i
]->busy_initializing
= 0;
3538 rebuild_lun_table(hba
[i
], 1);
3543 #ifdef CONFIG_CISS_SCSI_TAPE
3544 kfree(hba
[i
]->scsi_rejects
.complete
);
3546 kfree(hba
[i
]->cmd_pool_bits
);
3547 if (hba
[i
]->cmd_pool
)
3548 pci_free_consistent(hba
[i
]->pdev
,
3549 hba
[i
]->nr_cmds
* sizeof(CommandList_struct
),
3550 hba
[i
]->cmd_pool
, hba
[i
]->cmd_pool_dhandle
);
3551 if (hba
[i
]->errinfo_pool
)
3552 pci_free_consistent(hba
[i
]->pdev
,
3553 hba
[i
]->nr_cmds
* sizeof(ErrorInfo_struct
),
3554 hba
[i
]->errinfo_pool
,
3555 hba
[i
]->errinfo_pool_dhandle
);
3556 free_irq(hba
[i
]->intr
[SIMPLE_MODE_INT
], hba
[i
]);
3558 unregister_blkdev(hba
[i
]->major
, hba
[i
]->devname
);
3560 hba
[i
]->busy_initializing
= 0;
3561 /* cleanup any queues that may have been initialized */
3562 for (j
=0; j
<= hba
[i
]->highest_lun
; j
++){
3563 drive_info_struct
*drv
= &(hba
[i
]->drv
[j
]);
3565 blk_cleanup_queue(drv
->queue
);
3568 * Deliberately omit pci_disable_device(): it does something nasty to
3569 * Smart Array controllers that pci_enable_device does not undo
3571 pci_release_regions(pdev
);
3572 pci_set_drvdata(pdev
, NULL
);
3577 static void cciss_shutdown(struct pci_dev
*pdev
)
3579 ctlr_info_t
*tmp_ptr
;
3584 tmp_ptr
= pci_get_drvdata(pdev
);
3585 if (tmp_ptr
== NULL
)
3591 /* Turn board interrupts off and send the flush cache command */
3592 /* sendcmd will turn off interrupt, and send the flush...
3593 * To write all data in the battery backed cache to disks */
3594 memset(flush_buf
, 0, 4);
3595 return_code
= sendcmd(CCISS_CACHE_FLUSH
, i
, flush_buf
, 4, 0, 0, 0, NULL
,
3597 if (return_code
== IO_OK
) {
3598 printk(KERN_INFO
"Completed flushing cache on controller %d\n", i
);
3600 printk(KERN_WARNING
"Error flushing cache on controller %d\n", i
);
3602 free_irq(hba
[i
]->intr
[2], hba
[i
]);
3605 static void __devexit
cciss_remove_one(struct pci_dev
*pdev
)
3607 ctlr_info_t
*tmp_ptr
;
3610 if (pci_get_drvdata(pdev
) == NULL
) {
3611 printk(KERN_ERR
"cciss: Unable to remove device \n");
3614 tmp_ptr
= pci_get_drvdata(pdev
);
3616 if (hba
[i
] == NULL
) {
3617 printk(KERN_ERR
"cciss: device appears to "
3618 "already be removed \n");
3622 remove_proc_entry(hba
[i
]->devname
, proc_cciss
);
3623 unregister_blkdev(hba
[i
]->major
, hba
[i
]->devname
);
3625 /* remove it from the disk list */
3626 for (j
= 0; j
< CISS_MAX_LUN
; j
++) {
3627 struct gendisk
*disk
= hba
[i
]->gendisk
[j
];
3629 struct request_queue
*q
= disk
->queue
;
3631 if (disk
->flags
& GENHD_FL_UP
)
3634 blk_cleanup_queue(q
);
3638 #ifdef CONFIG_CISS_SCSI_TAPE
3639 cciss_unregister_scsi(i
); /* unhook from SCSI subsystem */
3642 cciss_shutdown(pdev
);
3644 #ifdef CONFIG_PCI_MSI
3645 if (hba
[i
]->msix_vector
)
3646 pci_disable_msix(hba
[i
]->pdev
);
3647 else if (hba
[i
]->msi_vector
)
3648 pci_disable_msi(hba
[i
]->pdev
);
3649 #endif /* CONFIG_PCI_MSI */
3651 iounmap(hba
[i
]->vaddr
);
3653 pci_free_consistent(hba
[i
]->pdev
, hba
[i
]->nr_cmds
* sizeof(CommandList_struct
),
3654 hba
[i
]->cmd_pool
, hba
[i
]->cmd_pool_dhandle
);
3655 pci_free_consistent(hba
[i
]->pdev
, hba
[i
]->nr_cmds
* sizeof(ErrorInfo_struct
),
3656 hba
[i
]->errinfo_pool
, hba
[i
]->errinfo_pool_dhandle
);
3657 kfree(hba
[i
]->cmd_pool_bits
);
3658 #ifdef CONFIG_CISS_SCSI_TAPE
3659 kfree(hba
[i
]->scsi_rejects
.complete
);
3662 * Deliberately omit pci_disable_device(): it does something nasty to
3663 * Smart Array controllers that pci_enable_device does not undo
3665 pci_release_regions(pdev
);
3666 pci_set_drvdata(pdev
, NULL
);
3670 static struct pci_driver cciss_pci_driver
= {
3672 .probe
= cciss_init_one
,
3673 .remove
= __devexit_p(cciss_remove_one
),
3674 .id_table
= cciss_pci_device_id
, /* id_table */
3675 .shutdown
= cciss_shutdown
,
3679 * This is it. Register the PCI driver information for the cards we control
3680 * the OS will call our registered routines when it finds one of our cards.
3682 static int __init
cciss_init(void)
3684 printk(KERN_INFO DRIVER_NAME
"\n");
3686 /* Register for our PCI devices */
3687 return pci_register_driver(&cciss_pci_driver
);
3690 static void __exit
cciss_cleanup(void)
3694 pci_unregister_driver(&cciss_pci_driver
);
3695 /* double check that all controller entrys have been removed */
3696 for (i
= 0; i
< MAX_CTLR
; i
++) {
3697 if (hba
[i
] != NULL
) {
3698 printk(KERN_WARNING
"cciss: had to remove"
3699 " controller %d\n", i
);
3700 cciss_remove_one(hba
[i
]->pdev
);
3703 remove_proc_entry("driver/cciss", NULL
);
3706 static void fail_all_cmds(unsigned long ctlr
)
3708 /* If we get here, the board is apparently dead. */
3709 ctlr_info_t
*h
= hba
[ctlr
];
3710 CommandList_struct
*c
;
3711 unsigned long flags
;
3713 printk(KERN_WARNING
"cciss%d: controller not responding.\n", h
->ctlr
);
3714 h
->alive
= 0; /* the controller apparently died... */
3716 spin_lock_irqsave(CCISS_LOCK(ctlr
), flags
);
3718 pci_disable_device(h
->pdev
); /* Make sure it is really dead. */
3720 /* move everything off the request queue onto the completed queue */
3721 while (!hlist_empty(&h
->reqQ
)) {
3722 c
= hlist_entry(h
->reqQ
.first
, CommandList_struct
, list
);
3728 /* Now, fail everything on the completed queue with a HW error */
3729 while (!hlist_empty(&h
->cmpQ
)) {
3730 c
= hlist_entry(h
->cmpQ
.first
, CommandList_struct
, list
);
3732 c
->err_info
->CommandStatus
= CMD_HARDWARE_ERR
;
3733 if (c
->cmd_type
== CMD_RWREQ
) {
3734 complete_command(h
, c
, 0);
3735 } else if (c
->cmd_type
== CMD_IOCTL_PEND
)
3736 complete(c
->waiting
);
3737 #ifdef CONFIG_CISS_SCSI_TAPE
3738 else if (c
->cmd_type
== CMD_SCSI
)
3739 complete_scsi_command(c
, 0, 0);
3742 spin_unlock_irqrestore(CCISS_LOCK(ctlr
), flags
);
3746 module_init(cciss_init
);
3747 module_exit(cciss_cleanup
);