Merge tag 'irq-core-2022-10-12' of git://git.kernel.org/pub/scm/linux/kernel/git...
[platform/kernel/linux-starfive.git] / drivers / scsi / megaraid.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *
4  *                      Linux MegaRAID device driver
5  *
6  * Copyright (c) 2002  LSI Logic Corporation.
7  *
8  * Copyright (c) 2002  Red Hat, Inc. All rights reserved.
9  *        - fixes
10  *        - speed-ups (list handling fixes, issued_list, optimizations.)
11  *        - lots of cleanups.
12  *
13  * Copyright (c) 2003  Christoph Hellwig  <hch@lst.de>
14  *        - new-style, hotplug-aware pci probing and scsi registration
15  *
16  * Version : v2.00.4 Mon Nov 14 14:02:43 EST 2005 - Seokmann Ju
17  *                                              <Seokmann.Ju@lsil.com>
18  *
19  * Description: Linux device driver for LSI Logic MegaRAID controller
20  *
21  * Supported controllers: MegaRAID 418, 428, 438, 466, 762, 467, 471, 490, 493
22  *                                      518, 520, 531, 532
23  *
24  * This driver is supported by LSI Logic, with assistance from Red Hat, Dell,
25  * and others. Please send updates to the mailing list
26  * linux-scsi@vger.kernel.org .
27  */
28
29 #include <linux/mm.h>
30 #include <linux/fs.h>
31 #include <linux/blkdev.h>
32 #include <linux/uaccess.h>
33 #include <asm/io.h>
34 #include <linux/completion.h>
35 #include <linux/delay.h>
36 #include <linux/proc_fs.h>
37 #include <linux/seq_file.h>
38 #include <linux/reboot.h>
39 #include <linux/module.h>
40 #include <linux/list.h>
41 #include <linux/interrupt.h>
42 #include <linux/pci.h>
43 #include <linux/init.h>
44 #include <linux/dma-mapping.h>
45 #include <linux/mutex.h>
46 #include <linux/slab.h>
47
48 #include <scsi/scsi.h>
49 #include <scsi/scsi_cmnd.h>
50 #include <scsi/scsi_device.h>
51 #include <scsi/scsi_eh.h>
52 #include <scsi/scsi_host.h>
53 #include <scsi/scsi_tcq.h>
54 #include <scsi/scsicam.h>
55
56 #include "megaraid.h"
57
58 #define MEGARAID_MODULE_VERSION "2.00.4"
59
60 MODULE_AUTHOR ("sju@lsil.com");
61 MODULE_DESCRIPTION ("LSI Logic MegaRAID legacy driver");
62 MODULE_LICENSE ("GPL");
63 MODULE_VERSION(MEGARAID_MODULE_VERSION);
64
65 static DEFINE_MUTEX(megadev_mutex);
66 static unsigned int max_cmd_per_lun = DEF_CMD_PER_LUN;
67 module_param(max_cmd_per_lun, uint, 0);
68 MODULE_PARM_DESC(max_cmd_per_lun, "Maximum number of commands which can be issued to a single LUN (default=DEF_CMD_PER_LUN=63)");
69
70 static unsigned short int max_sectors_per_io = MAX_SECTORS_PER_IO;
71 module_param(max_sectors_per_io, ushort, 0);
72 MODULE_PARM_DESC(max_sectors_per_io, "Maximum number of sectors per I/O request (default=MAX_SECTORS_PER_IO=128)");
73
74
75 static unsigned short int max_mbox_busy_wait = MBOX_BUSY_WAIT;
76 module_param(max_mbox_busy_wait, ushort, 0);
77 MODULE_PARM_DESC(max_mbox_busy_wait, "Maximum wait for mailbox in microseconds if busy (default=MBOX_BUSY_WAIT=10)");
78
79 #define RDINDOOR(adapter)       readl((adapter)->mmio_base + 0x20)
80 #define RDOUTDOOR(adapter)      readl((adapter)->mmio_base + 0x2C)
81 #define WRINDOOR(adapter,value)  writel(value, (adapter)->mmio_base + 0x20)
82 #define WROUTDOOR(adapter,value) writel(value, (adapter)->mmio_base + 0x2C)
83
84 /*
85  * Global variables
86  */
87
88 static int hba_count;
89 static adapter_t *hba_soft_state[MAX_CONTROLLERS];
90 static struct proc_dir_entry *mega_proc_dir_entry;
91
92 /* For controller re-ordering */
93 static struct mega_hbas mega_hbas[MAX_CONTROLLERS];
94
95 static long
96 megadev_unlocked_ioctl(struct file *filep, unsigned int cmd, unsigned long arg);
97
98 /*
99  * The File Operations structure for the serial/ioctl interface of the driver
100  */
101 static const struct file_operations megadev_fops = {
102         .owner          = THIS_MODULE,
103         .unlocked_ioctl = megadev_unlocked_ioctl,
104         .open           = megadev_open,
105         .llseek         = noop_llseek,
106 };
107
108 /*
109  * Array to structures for storing the information about the controllers. This
110  * information is sent to the user level applications, when they do an ioctl
111  * for this information.
112  */
113 static struct mcontroller mcontroller[MAX_CONTROLLERS];
114
115 /* The current driver version */
116 static u32 driver_ver = 0x02000000;
117
118 /* major number used by the device for character interface */
119 static int major;
120
121 #define IS_RAID_CH(hba, ch)     (((hba)->mega_ch_class >> (ch)) & 0x01)
122
123
124 /*
125  * Debug variable to print some diagnostic messages
126  */
127 static int trace_level;
128
129 /**
130  * mega_setup_mailbox()
131  * @adapter: pointer to our soft state
132  *
133  * Allocates a 8 byte aligned memory for the handshake mailbox.
134  */
135 static int
136 mega_setup_mailbox(adapter_t *adapter)
137 {
138         unsigned long   align;
139
140         adapter->una_mbox64 = dma_alloc_coherent(&adapter->dev->dev,
141                                                  sizeof(mbox64_t),
142                                                  &adapter->una_mbox64_dma,
143                                                  GFP_KERNEL);
144
145         if( !adapter->una_mbox64 ) return -1;
146                 
147         adapter->mbox = &adapter->una_mbox64->mbox;
148
149         adapter->mbox = (mbox_t *)((((unsigned long) adapter->mbox) + 15) &
150                         (~0UL ^ 0xFUL));
151
152         adapter->mbox64 = (mbox64_t *)(((unsigned long)adapter->mbox) - 8);
153
154         align = ((void *)adapter->mbox) - ((void *)&adapter->una_mbox64->mbox);
155
156         adapter->mbox_dma = adapter->una_mbox64_dma + 8 + align;
157
158         /*
159          * Register the mailbox if the controller is an io-mapped controller
160          */
161         if( adapter->flag & BOARD_IOMAP ) {
162
163                 outb(adapter->mbox_dma & 0xFF,
164                                 adapter->host->io_port + MBOX_PORT0);
165
166                 outb((adapter->mbox_dma >> 8) & 0xFF,
167                                 adapter->host->io_port + MBOX_PORT1);
168
169                 outb((adapter->mbox_dma >> 16) & 0xFF,
170                                 adapter->host->io_port + MBOX_PORT2);
171
172                 outb((adapter->mbox_dma >> 24) & 0xFF,
173                                 adapter->host->io_port + MBOX_PORT3);
174
175                 outb(ENABLE_MBOX_BYTE,
176                                 adapter->host->io_port + ENABLE_MBOX_REGION);
177
178                 irq_ack(adapter);
179
180                 irq_enable(adapter);
181         }
182
183         return 0;
184 }
185
186
187 /*
188  * mega_query_adapter()
189  * @adapter - pointer to our soft state
190  *
191  * Issue the adapter inquiry commands to the controller and find out
192  * information and parameter about the devices attached
193  */
194 static int
195 mega_query_adapter(adapter_t *adapter)
196 {
197         dma_addr_t      prod_info_dma_handle;
198         mega_inquiry3   *inquiry3;
199         struct mbox_out mbox;
200         u8      *raw_mbox = (u8 *)&mbox;
201         int     retval;
202
203         /* Initialize adapter inquiry mailbox */
204
205         memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
206         memset(&mbox, 0, sizeof(mbox));
207
208         /*
209          * Try to issue Inquiry3 command
210          * if not succeeded, then issue MEGA_MBOXCMD_ADAPTERINQ command and
211          * update enquiry3 structure
212          */
213         mbox.xferaddr = (u32)adapter->buf_dma_handle;
214
215         inquiry3 = (mega_inquiry3 *)adapter->mega_buffer;
216
217         raw_mbox[0] = FC_NEW_CONFIG;            /* i.e. mbox->cmd=0xA1 */
218         raw_mbox[2] = NC_SUBOP_ENQUIRY3;        /* i.e. 0x0F */
219         raw_mbox[3] = ENQ3_GET_SOLICITED_FULL;  /* i.e. 0x02 */
220
221         /* Issue a blocking command to the card */
222         if ((retval = issue_scb_block(adapter, raw_mbox))) {
223                 /* the adapter does not support 40ld */
224
225                 mraid_ext_inquiry       *ext_inq;
226                 mraid_inquiry           *inq;
227                 dma_addr_t              dma_handle;
228
229                 ext_inq = dma_alloc_coherent(&adapter->dev->dev,
230                                              sizeof(mraid_ext_inquiry),
231                                              &dma_handle, GFP_KERNEL);
232
233                 if( ext_inq == NULL ) return -1;
234
235                 inq = &ext_inq->raid_inq;
236
237                 mbox.xferaddr = (u32)dma_handle;
238
239                 /*issue old 0x04 command to adapter */
240                 mbox.cmd = MEGA_MBOXCMD_ADPEXTINQ;
241
242                 issue_scb_block(adapter, raw_mbox);
243
244                 /*
245                  * update Enquiry3 and ProductInfo structures with
246                  * mraid_inquiry structure
247                  */
248                 mega_8_to_40ld(inq, inquiry3,
249                                 (mega_product_info *)&adapter->product_info);
250
251                 dma_free_coherent(&adapter->dev->dev,
252                                   sizeof(mraid_ext_inquiry), ext_inq,
253                                   dma_handle);
254
255         } else {                /*adapter supports 40ld */
256                 adapter->flag |= BOARD_40LD;
257
258                 /*
259                  * get product_info, which is static information and will be
260                  * unchanged
261                  */
262                 prod_info_dma_handle = dma_map_single(&adapter->dev->dev,
263                                                       (void *)&adapter->product_info,
264                                                       sizeof(mega_product_info),
265                                                       DMA_FROM_DEVICE);
266
267                 mbox.xferaddr = prod_info_dma_handle;
268
269                 raw_mbox[0] = FC_NEW_CONFIG;    /* i.e. mbox->cmd=0xA1 */
270                 raw_mbox[2] = NC_SUBOP_PRODUCT_INFO;    /* i.e. 0x0E */
271
272                 if ((retval = issue_scb_block(adapter, raw_mbox)))
273                         dev_warn(&adapter->dev->dev,
274                                 "Product_info cmd failed with error: %d\n",
275                                 retval);
276
277                 dma_unmap_single(&adapter->dev->dev, prod_info_dma_handle,
278                                  sizeof(mega_product_info), DMA_FROM_DEVICE);
279         }
280
281
282         /*
283          * kernel scans the channels from 0 to <= max_channel
284          */
285         adapter->host->max_channel =
286                 adapter->product_info.nchannels + NVIRT_CHAN -1;
287
288         adapter->host->max_id = 16;     /* max targets per channel */
289
290         adapter->host->max_lun = 7;     /* Up to 7 luns for non disk devices */
291
292         adapter->host->cmd_per_lun = max_cmd_per_lun;
293
294         adapter->numldrv = inquiry3->num_ldrv;
295
296         adapter->max_cmds = adapter->product_info.max_commands;
297
298         if(adapter->max_cmds > MAX_COMMANDS)
299                 adapter->max_cmds = MAX_COMMANDS;
300
301         adapter->host->can_queue = adapter->max_cmds - 1;
302
303         /*
304          * Get the maximum number of scatter-gather elements supported by this
305          * firmware
306          */
307         mega_get_max_sgl(adapter);
308
309         adapter->host->sg_tablesize = adapter->sglen;
310
311         /* use HP firmware and bios version encoding
312            Note: fw_version[0|1] and bios_version[0|1] were originally shifted
313            right 8 bits making them zero. This 0 value was hardcoded to fix
314            sparse warnings. */
315         if (adapter->product_info.subsysvid == PCI_VENDOR_ID_HP) {
316                 snprintf(adapter->fw_version, sizeof(adapter->fw_version),
317                          "%c%d%d.%d%d",
318                          adapter->product_info.fw_version[2],
319                          0,
320                          adapter->product_info.fw_version[1] & 0x0f,
321                          0,
322                          adapter->product_info.fw_version[0] & 0x0f);
323                 snprintf(adapter->bios_version, sizeof(adapter->fw_version),
324                          "%c%d%d.%d%d",
325                          adapter->product_info.bios_version[2],
326                          0,
327                          adapter->product_info.bios_version[1] & 0x0f,
328                          0,
329                          adapter->product_info.bios_version[0] & 0x0f);
330         } else {
331                 memcpy(adapter->fw_version,
332                                 (char *)adapter->product_info.fw_version, 4);
333                 adapter->fw_version[4] = 0;
334
335                 memcpy(adapter->bios_version,
336                                 (char *)adapter->product_info.bios_version, 4);
337
338                 adapter->bios_version[4] = 0;
339         }
340
341         dev_notice(&adapter->dev->dev, "[%s:%s] detected %d logical drives\n",
342                 adapter->fw_version, adapter->bios_version, adapter->numldrv);
343
344         /*
345          * Do we support extended (>10 bytes) cdbs
346          */
347         adapter->support_ext_cdb = mega_support_ext_cdb(adapter);
348         if (adapter->support_ext_cdb)
349                 dev_notice(&adapter->dev->dev, "supports extended CDBs\n");
350
351
352         return 0;
353 }
354
355 /**
356  * mega_runpendq()
357  * @adapter: pointer to our soft state
358  *
359  * Runs through the list of pending requests.
360  */
361 static inline void
362 mega_runpendq(adapter_t *adapter)
363 {
364         if(!list_empty(&adapter->pending_list))
365                 __mega_runpendq(adapter);
366 }
367
368 /*
369  * megaraid_queue()
370  * @scmd - Issue this scsi command
371  * @done - the callback hook into the scsi mid-layer
372  *
373  * The command queuing entry point for the mid-layer.
374  */
375 static int megaraid_queue_lck(struct scsi_cmnd *scmd)
376 {
377         adapter_t       *adapter;
378         scb_t   *scb;
379         int     busy=0;
380         unsigned long flags;
381
382         adapter = (adapter_t *)scmd->device->host->hostdata;
383
384         /*
385          * Allocate and build a SCB request
386          * busy flag will be set if mega_build_cmd() command could not
387          * allocate scb. We will return non-zero status in that case.
388          * NOTE: scb can be null even though certain commands completed
389          * successfully, e.g., MODE_SENSE and TEST_UNIT_READY, we would
390          * return 0 in that case.
391          */
392
393         spin_lock_irqsave(&adapter->lock, flags);
394         scb = mega_build_cmd(adapter, scmd, &busy);
395         if (!scb)
396                 goto out;
397
398         scb->state |= SCB_PENDQ;
399         list_add_tail(&scb->list, &adapter->pending_list);
400
401         /*
402          * Check if the HBA is in quiescent state, e.g., during a
403          * delete logical drive opertion. If it is, don't run
404          * the pending_list.
405          */
406         if (atomic_read(&adapter->quiescent) == 0)
407                 mega_runpendq(adapter);
408
409         busy = 0;
410  out:
411         spin_unlock_irqrestore(&adapter->lock, flags);
412         return busy;
413 }
414
415 static DEF_SCSI_QCMD(megaraid_queue)
416
417 /**
418  * mega_allocate_scb()
419  * @adapter: pointer to our soft state
420  * @cmd: scsi command from the mid-layer
421  *
422  * Allocate a SCB structure. This is the central structure for controller
423  * commands.
424  */
425 static inline scb_t *
426 mega_allocate_scb(adapter_t *adapter, struct scsi_cmnd *cmd)
427 {
428         struct list_head *head = &adapter->free_list;
429         scb_t   *scb;
430
431         /* Unlink command from Free List */
432         if( !list_empty(head) ) {
433
434                 scb = list_entry(head->next, scb_t, list);
435
436                 list_del_init(head->next);
437
438                 scb->state = SCB_ACTIVE;
439                 scb->cmd = cmd;
440                 scb->dma_type = MEGA_DMA_TYPE_NONE;
441
442                 return scb;
443         }
444
445         return NULL;
446 }
447
448 /**
449  * mega_get_ldrv_num()
450  * @adapter: pointer to our soft state
451  * @cmd: scsi mid layer command
452  * @channel: channel on the controller
453  *
454  * Calculate the logical drive number based on the information in scsi command
455  * and the channel number.
456  */
457 static inline int
458 mega_get_ldrv_num(adapter_t *adapter, struct scsi_cmnd *cmd, int channel)
459 {
460         int             tgt;
461         int             ldrv_num;
462
463         tgt = cmd->device->id;
464         
465         if ( tgt > adapter->this_id )
466                 tgt--;  /* we do not get inquires for initiator id */
467
468         ldrv_num = (channel * 15) + tgt;
469
470
471         /*
472          * If we have a logical drive with boot enabled, project it first
473          */
474         if( adapter->boot_ldrv_enabled ) {
475                 if( ldrv_num == 0 ) {
476                         ldrv_num = adapter->boot_ldrv;
477                 }
478                 else {
479                         if( ldrv_num <= adapter->boot_ldrv ) {
480                                 ldrv_num--;
481                         }
482                 }
483         }
484
485         /*
486          * If "delete logical drive" feature is enabled on this controller.
487          * Do only if at least one delete logical drive operation was done.
488          *
489          * Also, after logical drive deletion, instead of logical drive number,
490          * the value returned should be 0x80+logical drive id.
491          *
492          * These is valid only for IO commands.
493          */
494
495         if (adapter->support_random_del && adapter->read_ldidmap )
496                 switch (cmd->cmnd[0]) {
497                 case READ_6:
498                 case WRITE_6:
499                 case READ_10:
500                 case WRITE_10:
501                         ldrv_num += 0x80;
502                 }
503
504         return ldrv_num;
505 }
506
507 /**
508  * mega_build_cmd()
509  * @adapter: pointer to our soft state
510  * @cmd: Prepare using this scsi command
511  * @busy: busy flag if no resources
512  *
513  * Prepares a command and scatter gather list for the controller. This routine
514  * also finds out if the commands is intended for a logical drive or a
515  * physical device and prepares the controller command accordingly.
516  *
517  * We also re-order the logical drives and physical devices based on their
518  * boot settings.
519  */
520 static scb_t *
521 mega_build_cmd(adapter_t *adapter, struct scsi_cmnd *cmd, int *busy)
522 {
523         mega_passthru   *pthru;
524         scb_t   *scb;
525         mbox_t  *mbox;
526         u32     seg;
527         char    islogical;
528         int     max_ldrv_num;
529         int     channel = 0;
530         int     target = 0;
531         int     ldrv_num = 0;   /* logical drive number */
532
533         /*
534          * We know what channels our logical drives are on - mega_find_card()
535          */
536         islogical = adapter->logdrv_chan[cmd->device->channel];
537
538         /*
539          * The theory: If physical drive is chosen for boot, all the physical
540          * devices are exported before the logical drives, otherwise physical
541          * devices are pushed after logical drives, in which case - Kernel sees
542          * the physical devices on virtual channel which is obviously converted
543          * to actual channel on the HBA.
544          */
545         if( adapter->boot_pdrv_enabled ) {
546                 if( islogical ) {
547                         /* logical channel */
548                         channel = cmd->device->channel -
549                                 adapter->product_info.nchannels;
550                 }
551                 else {
552                         /* this is physical channel */
553                         channel = cmd->device->channel; 
554                         target = cmd->device->id;
555
556                         /*
557                          * boot from a physical disk, that disk needs to be
558                          * exposed first IF both the channels are SCSI, then
559                          * booting from the second channel is not allowed.
560                          */
561                         if( target == 0 ) {
562                                 target = adapter->boot_pdrv_tgt;
563                         }
564                         else if( target == adapter->boot_pdrv_tgt ) {
565                                 target = 0;
566                         }
567                 }
568         }
569         else {
570                 if( islogical ) {
571                         /* this is the logical channel */
572                         channel = cmd->device->channel; 
573                 }
574                 else {
575                         /* physical channel */
576                         channel = cmd->device->channel - NVIRT_CHAN;    
577                         target = cmd->device->id;
578                 }
579         }
580
581
582         if(islogical) {
583
584                 /* have just LUN 0 for each target on virtual channels */
585                 if (cmd->device->lun) {
586                         cmd->result = (DID_BAD_TARGET << 16);
587                         scsi_done(cmd);
588                         return NULL;
589                 }
590
591                 ldrv_num = mega_get_ldrv_num(adapter, cmd, channel);
592
593
594                 max_ldrv_num = (adapter->flag & BOARD_40LD) ?
595                         MAX_LOGICAL_DRIVES_40LD : MAX_LOGICAL_DRIVES_8LD;
596
597                 /*
598                  * max_ldrv_num increases by 0x80 if some logical drive was
599                  * deleted.
600                  */
601                 if(adapter->read_ldidmap)
602                         max_ldrv_num += 0x80;
603
604                 if(ldrv_num > max_ldrv_num ) {
605                         cmd->result = (DID_BAD_TARGET << 16);
606                         scsi_done(cmd);
607                         return NULL;
608                 }
609
610         }
611         else {
612                 if( cmd->device->lun > 7) {
613                         /*
614                          * Do not support lun >7 for physically accessed
615                          * devices
616                          */
617                         cmd->result = (DID_BAD_TARGET << 16);
618                         scsi_done(cmd);
619                         return NULL;
620                 }
621         }
622
623         /*
624          *
625          * Logical drive commands
626          *
627          */
628         if(islogical) {
629                 switch (cmd->cmnd[0]) {
630                 case TEST_UNIT_READY:
631 #if MEGA_HAVE_CLUSTERING
632                         /*
633                          * Do we support clustering and is the support enabled
634                          * If no, return success always
635                          */
636                         if( !adapter->has_cluster ) {
637                                 cmd->result = (DID_OK << 16);
638                                 scsi_done(cmd);
639                                 return NULL;
640                         }
641
642                         if(!(scb = mega_allocate_scb(adapter, cmd))) {
643                                 *busy = 1;
644                                 return NULL;
645                         }
646
647                         scb->raw_mbox[0] = MEGA_CLUSTER_CMD;
648                         scb->raw_mbox[2] = MEGA_RESERVATION_STATUS;
649                         scb->raw_mbox[3] = ldrv_num;
650
651                         scb->dma_direction = DMA_NONE;
652
653                         return scb;
654 #else
655                         cmd->result = (DID_OK << 16);
656                         scsi_done(cmd);
657                         return NULL;
658 #endif
659
660                 case MODE_SENSE: {
661                         char *buf;
662                         struct scatterlist *sg;
663
664                         sg = scsi_sglist(cmd);
665                         buf = kmap_atomic(sg_page(sg)) + sg->offset;
666
667                         memset(buf, 0, cmd->cmnd[4]);
668                         kunmap_atomic(buf - sg->offset);
669
670                         cmd->result = (DID_OK << 16);
671                         scsi_done(cmd);
672                         return NULL;
673                 }
674
675                 case READ_CAPACITY:
676                 case INQUIRY:
677
678                         if(!(adapter->flag & (1L << cmd->device->channel))) {
679
680                                 dev_notice(&adapter->dev->dev,
681                                         "scsi%d: scanning scsi channel %d "
682                                         "for logical drives\n",
683                                                 adapter->host->host_no,
684                                                 cmd->device->channel);
685
686                                 adapter->flag |= (1L << cmd->device->channel);
687                         }
688
689                         /* Allocate a SCB and initialize passthru */
690                         if(!(scb = mega_allocate_scb(adapter, cmd))) {
691                                 *busy = 1;
692                                 return NULL;
693                         }
694                         pthru = scb->pthru;
695
696                         mbox = (mbox_t *)scb->raw_mbox;
697                         memset(mbox, 0, sizeof(scb->raw_mbox));
698                         memset(pthru, 0, sizeof(mega_passthru));
699
700                         pthru->timeout = 0;
701                         pthru->ars = 1;
702                         pthru->reqsenselen = 14;
703                         pthru->islogical = 1;
704                         pthru->logdrv = ldrv_num;
705                         pthru->cdblen = cmd->cmd_len;
706                         memcpy(pthru->cdb, cmd->cmnd, cmd->cmd_len);
707
708                         if( adapter->has_64bit_addr ) {
709                                 mbox->m_out.cmd = MEGA_MBOXCMD_PASSTHRU64;
710                         }
711                         else {
712                                 mbox->m_out.cmd = MEGA_MBOXCMD_PASSTHRU;
713                         }
714
715                         scb->dma_direction = DMA_FROM_DEVICE;
716
717                         pthru->numsgelements = mega_build_sglist(adapter, scb,
718                                 &pthru->dataxferaddr, &pthru->dataxferlen);
719
720                         mbox->m_out.xferaddr = scb->pthru_dma_addr;
721
722                         return scb;
723
724                 case READ_6:
725                 case WRITE_6:
726                 case READ_10:
727                 case WRITE_10:
728                 case READ_12:
729                 case WRITE_12:
730
731                         /* Allocate a SCB and initialize mailbox */
732                         if(!(scb = mega_allocate_scb(adapter, cmd))) {
733                                 *busy = 1;
734                                 return NULL;
735                         }
736                         mbox = (mbox_t *)scb->raw_mbox;
737
738                         memset(mbox, 0, sizeof(scb->raw_mbox));
739                         mbox->m_out.logdrv = ldrv_num;
740
741                         /*
742                          * A little hack: 2nd bit is zero for all scsi read
743                          * commands and is set for all scsi write commands
744                          */
745                         if( adapter->has_64bit_addr ) {
746                                 mbox->m_out.cmd = (*cmd->cmnd & 0x02) ?
747                                         MEGA_MBOXCMD_LWRITE64:
748                                         MEGA_MBOXCMD_LREAD64 ;
749                         }
750                         else {
751                                 mbox->m_out.cmd = (*cmd->cmnd & 0x02) ?
752                                         MEGA_MBOXCMD_LWRITE:
753                                         MEGA_MBOXCMD_LREAD ;
754                         }
755
756                         /*
757                          * 6-byte READ(0x08) or WRITE(0x0A) cdb
758                          */
759                         if( cmd->cmd_len == 6 ) {
760                                 mbox->m_out.numsectors = (u32) cmd->cmnd[4];
761                                 mbox->m_out.lba =
762                                         ((u32)cmd->cmnd[1] << 16) |
763                                         ((u32)cmd->cmnd[2] << 8) |
764                                         (u32)cmd->cmnd[3];
765
766                                 mbox->m_out.lba &= 0x1FFFFF;
767
768 #if MEGA_HAVE_STATS
769                                 /*
770                                  * Take modulo 0x80, since the logical drive
771                                  * number increases by 0x80 when a logical
772                                  * drive was deleted
773                                  */
774                                 if (*cmd->cmnd == READ_6) {
775                                         adapter->nreads[ldrv_num%0x80]++;
776                                         adapter->nreadblocks[ldrv_num%0x80] +=
777                                                 mbox->m_out.numsectors;
778                                 } else {
779                                         adapter->nwrites[ldrv_num%0x80]++;
780                                         adapter->nwriteblocks[ldrv_num%0x80] +=
781                                                 mbox->m_out.numsectors;
782                                 }
783 #endif
784                         }
785
786                         /*
787                          * 10-byte READ(0x28) or WRITE(0x2A) cdb
788                          */
789                         if( cmd->cmd_len == 10 ) {
790                                 mbox->m_out.numsectors =
791                                         (u32)cmd->cmnd[8] |
792                                         ((u32)cmd->cmnd[7] << 8);
793                                 mbox->m_out.lba =
794                                         ((u32)cmd->cmnd[2] << 24) |
795                                         ((u32)cmd->cmnd[3] << 16) |
796                                         ((u32)cmd->cmnd[4] << 8) |
797                                         (u32)cmd->cmnd[5];
798
799 #if MEGA_HAVE_STATS
800                                 if (*cmd->cmnd == READ_10) {
801                                         adapter->nreads[ldrv_num%0x80]++;
802                                         adapter->nreadblocks[ldrv_num%0x80] +=
803                                                 mbox->m_out.numsectors;
804                                 } else {
805                                         adapter->nwrites[ldrv_num%0x80]++;
806                                         adapter->nwriteblocks[ldrv_num%0x80] +=
807                                                 mbox->m_out.numsectors;
808                                 }
809 #endif
810                         }
811
812                         /*
813                          * 12-byte READ(0xA8) or WRITE(0xAA) cdb
814                          */
815                         if( cmd->cmd_len == 12 ) {
816                                 mbox->m_out.lba =
817                                         ((u32)cmd->cmnd[2] << 24) |
818                                         ((u32)cmd->cmnd[3] << 16) |
819                                         ((u32)cmd->cmnd[4] << 8) |
820                                         (u32)cmd->cmnd[5];
821
822                                 mbox->m_out.numsectors =
823                                         ((u32)cmd->cmnd[6] << 24) |
824                                         ((u32)cmd->cmnd[7] << 16) |
825                                         ((u32)cmd->cmnd[8] << 8) |
826                                         (u32)cmd->cmnd[9];
827
828 #if MEGA_HAVE_STATS
829                                 if (*cmd->cmnd == READ_12) {
830                                         adapter->nreads[ldrv_num%0x80]++;
831                                         adapter->nreadblocks[ldrv_num%0x80] +=
832                                                 mbox->m_out.numsectors;
833                                 } else {
834                                         adapter->nwrites[ldrv_num%0x80]++;
835                                         adapter->nwriteblocks[ldrv_num%0x80] +=
836                                                 mbox->m_out.numsectors;
837                                 }
838 #endif
839                         }
840
841                         /*
842                          * If it is a read command
843                          */
844                         if( (*cmd->cmnd & 0x0F) == 0x08 ) {
845                                 scb->dma_direction = DMA_FROM_DEVICE;
846                         }
847                         else {
848                                 scb->dma_direction = DMA_TO_DEVICE;
849                         }
850
851                         /* Calculate Scatter-Gather info */
852                         mbox->m_out.numsgelements = mega_build_sglist(adapter, scb,
853                                         (u32 *)&mbox->m_out.xferaddr, &seg);
854
855                         return scb;
856
857 #if MEGA_HAVE_CLUSTERING
858                 case RESERVE:
859                 case RELEASE:
860
861                         /*
862                          * Do we support clustering and is the support enabled
863                          */
864                         if( ! adapter->has_cluster ) {
865
866                                 cmd->result = (DID_BAD_TARGET << 16);
867                                 scsi_done(cmd);
868                                 return NULL;
869                         }
870
871                         /* Allocate a SCB and initialize mailbox */
872                         if(!(scb = mega_allocate_scb(adapter, cmd))) {
873                                 *busy = 1;
874                                 return NULL;
875                         }
876
877                         scb->raw_mbox[0] = MEGA_CLUSTER_CMD;
878                         scb->raw_mbox[2] = ( *cmd->cmnd == RESERVE ) ?
879                                 MEGA_RESERVE_LD : MEGA_RELEASE_LD;
880
881                         scb->raw_mbox[3] = ldrv_num;
882
883                         scb->dma_direction = DMA_NONE;
884
885                         return scb;
886 #endif
887
888                 default:
889                         cmd->result = (DID_BAD_TARGET << 16);
890                         scsi_done(cmd);
891                         return NULL;
892                 }
893         }
894
895         /*
896          * Passthru drive commands
897          */
898         else {
899                 /* Allocate a SCB and initialize passthru */
900                 if(!(scb = mega_allocate_scb(adapter, cmd))) {
901                         *busy = 1;
902                         return NULL;
903                 }
904
905                 mbox = (mbox_t *)scb->raw_mbox;
906                 memset(mbox, 0, sizeof(scb->raw_mbox));
907
908                 if( adapter->support_ext_cdb ) {
909
910                         mega_prepare_extpassthru(adapter, scb, cmd,
911                                         channel, target);
912
913                         mbox->m_out.cmd = MEGA_MBOXCMD_EXTPTHRU;
914
915                         mbox->m_out.xferaddr = scb->epthru_dma_addr;
916
917                 }
918                 else {
919
920                         pthru = mega_prepare_passthru(adapter, scb, cmd,
921                                         channel, target);
922
923                         /* Initialize mailbox */
924                         if( adapter->has_64bit_addr ) {
925                                 mbox->m_out.cmd = MEGA_MBOXCMD_PASSTHRU64;
926                         }
927                         else {
928                                 mbox->m_out.cmd = MEGA_MBOXCMD_PASSTHRU;
929                         }
930
931                         mbox->m_out.xferaddr = scb->pthru_dma_addr;
932
933                 }
934                 return scb;
935         }
936         return NULL;
937 }
938
939
940 /**
941  * mega_prepare_passthru()
942  * @adapter: pointer to our soft state
943  * @scb: our scsi control block
944  * @cmd: scsi command from the mid-layer
945  * @channel: actual channel on the controller
946  * @target: actual id on the controller.
947  *
948  * prepare a command for the scsi physical devices.
949  */
950 static mega_passthru *
951 mega_prepare_passthru(adapter_t *adapter, scb_t *scb, struct scsi_cmnd *cmd,
952                       int channel, int target)
953 {
954         mega_passthru *pthru;
955
956         pthru = scb->pthru;
957         memset(pthru, 0, sizeof (mega_passthru));
958
959         /* 0=6sec/1=60sec/2=10min/3=3hrs */
960         pthru->timeout = 2;
961
962         pthru->ars = 1;
963         pthru->reqsenselen = 14;
964         pthru->islogical = 0;
965
966         pthru->channel = (adapter->flag & BOARD_40LD) ? 0 : channel;
967
968         pthru->target = (adapter->flag & BOARD_40LD) ?
969                 (channel << 4) | target : target;
970
971         pthru->cdblen = cmd->cmd_len;
972         pthru->logdrv = cmd->device->lun;
973
974         memcpy(pthru->cdb, cmd->cmnd, cmd->cmd_len);
975
976         /* Not sure about the direction */
977         scb->dma_direction = DMA_BIDIRECTIONAL;
978
979         /* Special Code for Handling READ_CAPA/ INQ using bounce buffers */
980         switch (cmd->cmnd[0]) {
981         case INQUIRY:
982         case READ_CAPACITY:
983                 if(!(adapter->flag & (1L << cmd->device->channel))) {
984
985                         dev_notice(&adapter->dev->dev,
986                                 "scsi%d: scanning scsi channel %d [P%d] "
987                                 "for physical devices\n",
988                                         adapter->host->host_no,
989                                         cmd->device->channel, channel);
990
991                         adapter->flag |= (1L << cmd->device->channel);
992                 }
993                 fallthrough;
994         default:
995                 pthru->numsgelements = mega_build_sglist(adapter, scb,
996                                 &pthru->dataxferaddr, &pthru->dataxferlen);
997                 break;
998         }
999         return pthru;
1000 }
1001
1002
1003 /**
1004  * mega_prepare_extpassthru()
1005  * @adapter: pointer to our soft state
1006  * @scb: our scsi control block
1007  * @cmd: scsi command from the mid-layer
1008  * @channel: actual channel on the controller
1009  * @target: actual id on the controller.
1010  *
1011  * prepare a command for the scsi physical devices. This rountine prepares
1012  * commands for devices which can take extended CDBs (>10 bytes)
1013  */
1014 static mega_ext_passthru *
1015 mega_prepare_extpassthru(adapter_t *adapter, scb_t *scb,
1016                          struct scsi_cmnd *cmd,
1017                          int channel, int target)
1018 {
1019         mega_ext_passthru       *epthru;
1020
1021         epthru = scb->epthru;
1022         memset(epthru, 0, sizeof(mega_ext_passthru));
1023
1024         /* 0=6sec/1=60sec/2=10min/3=3hrs */
1025         epthru->timeout = 2;
1026
1027         epthru->ars = 1;
1028         epthru->reqsenselen = 14;
1029         epthru->islogical = 0;
1030
1031         epthru->channel = (adapter->flag & BOARD_40LD) ? 0 : channel;
1032         epthru->target = (adapter->flag & BOARD_40LD) ?
1033                 (channel << 4) | target : target;
1034
1035         epthru->cdblen = cmd->cmd_len;
1036         epthru->logdrv = cmd->device->lun;
1037
1038         memcpy(epthru->cdb, cmd->cmnd, cmd->cmd_len);
1039
1040         /* Not sure about the direction */
1041         scb->dma_direction = DMA_BIDIRECTIONAL;
1042
1043         switch(cmd->cmnd[0]) {
1044         case INQUIRY:
1045         case READ_CAPACITY:
1046                 if(!(adapter->flag & (1L << cmd->device->channel))) {
1047
1048                         dev_notice(&adapter->dev->dev,
1049                                 "scsi%d: scanning scsi channel %d [P%d] "
1050                                 "for physical devices\n",
1051                                         adapter->host->host_no,
1052                                         cmd->device->channel, channel);
1053
1054                         adapter->flag |= (1L << cmd->device->channel);
1055                 }
1056                 fallthrough;
1057         default:
1058                 epthru->numsgelements = mega_build_sglist(adapter, scb,
1059                                 &epthru->dataxferaddr, &epthru->dataxferlen);
1060                 break;
1061         }
1062
1063         return epthru;
1064 }
1065
1066 static void
1067 __mega_runpendq(adapter_t *adapter)
1068 {
1069         scb_t *scb;
1070         struct list_head *pos, *next;
1071
1072         /* Issue any pending commands to the card */
1073         list_for_each_safe(pos, next, &adapter->pending_list) {
1074
1075                 scb = list_entry(pos, scb_t, list);
1076
1077                 if( !(scb->state & SCB_ISSUED) ) {
1078
1079                         if( issue_scb(adapter, scb) != 0 )
1080                                 return;
1081                 }
1082         }
1083
1084         return;
1085 }
1086
1087
1088 /**
1089  * issue_scb()
1090  * @adapter: pointer to our soft state
1091  * @scb: scsi control block
1092  *
1093  * Post a command to the card if the mailbox is available, otherwise return
1094  * busy. We also take the scb from the pending list if the mailbox is
1095  * available.
1096  */
1097 static int
1098 issue_scb(adapter_t *adapter, scb_t *scb)
1099 {
1100         volatile mbox64_t       *mbox64 = adapter->mbox64;
1101         volatile mbox_t         *mbox = adapter->mbox;
1102         unsigned int    i = 0;
1103
1104         if(unlikely(mbox->m_in.busy)) {
1105                 do {
1106                         udelay(1);
1107                         i++;
1108                 } while( mbox->m_in.busy && (i < max_mbox_busy_wait) );
1109
1110                 if(mbox->m_in.busy) return -1;
1111         }
1112
1113         /* Copy mailbox data into host structure */
1114         memcpy((char *)&mbox->m_out, (char *)scb->raw_mbox, 
1115                         sizeof(struct mbox_out));
1116
1117         mbox->m_out.cmdid = scb->idx;   /* Set cmdid */
1118         mbox->m_in.busy = 1;            /* Set busy */
1119
1120
1121         /*
1122          * Increment the pending queue counter
1123          */
1124         atomic_inc(&adapter->pend_cmds);
1125
1126         switch (mbox->m_out.cmd) {
1127         case MEGA_MBOXCMD_LREAD64:
1128         case MEGA_MBOXCMD_LWRITE64:
1129         case MEGA_MBOXCMD_PASSTHRU64:
1130         case MEGA_MBOXCMD_EXTPTHRU:
1131                 mbox64->xfer_segment_lo = mbox->m_out.xferaddr;
1132                 mbox64->xfer_segment_hi = 0;
1133                 mbox->m_out.xferaddr = 0xFFFFFFFF;
1134                 break;
1135         default:
1136                 mbox64->xfer_segment_lo = 0;
1137                 mbox64->xfer_segment_hi = 0;
1138         }
1139
1140         /*
1141          * post the command
1142          */
1143         scb->state |= SCB_ISSUED;
1144
1145         if( likely(adapter->flag & BOARD_MEMMAP) ) {
1146                 mbox->m_in.poll = 0;
1147                 mbox->m_in.ack = 0;
1148                 WRINDOOR(adapter, adapter->mbox_dma | 0x1);
1149         }
1150         else {
1151                 irq_enable(adapter);
1152                 issue_command(adapter);
1153         }
1154
1155         return 0;
1156 }
1157
1158 /*
1159  * Wait until the controller's mailbox is available
1160  */
1161 static inline int
1162 mega_busywait_mbox (adapter_t *adapter)
1163 {
1164         if (adapter->mbox->m_in.busy)
1165                 return __mega_busywait_mbox(adapter);
1166         return 0;
1167 }
1168
1169 /**
1170  * issue_scb_block()
1171  * @adapter: pointer to our soft state
1172  * @raw_mbox: the mailbox
1173  *
1174  * Issue a scb in synchronous and non-interrupt mode
1175  */
1176 static int
1177 issue_scb_block(adapter_t *adapter, u_char *raw_mbox)
1178 {
1179         volatile mbox64_t *mbox64 = adapter->mbox64;
1180         volatile mbox_t *mbox = adapter->mbox;
1181         u8      byte;
1182
1183         /* Wait until mailbox is free */
1184         if(mega_busywait_mbox (adapter))
1185                 goto bug_blocked_mailbox;
1186
1187         /* Copy mailbox data into host structure */
1188         memcpy((char *) mbox, raw_mbox, sizeof(struct mbox_out));
1189         mbox->m_out.cmdid = 0xFE;
1190         mbox->m_in.busy = 1;
1191
1192         switch (raw_mbox[0]) {
1193         case MEGA_MBOXCMD_LREAD64:
1194         case MEGA_MBOXCMD_LWRITE64:
1195         case MEGA_MBOXCMD_PASSTHRU64:
1196         case MEGA_MBOXCMD_EXTPTHRU:
1197                 mbox64->xfer_segment_lo = mbox->m_out.xferaddr;
1198                 mbox64->xfer_segment_hi = 0;
1199                 mbox->m_out.xferaddr = 0xFFFFFFFF;
1200                 break;
1201         default:
1202                 mbox64->xfer_segment_lo = 0;
1203                 mbox64->xfer_segment_hi = 0;
1204         }
1205
1206         if( likely(adapter->flag & BOARD_MEMMAP) ) {
1207                 mbox->m_in.poll = 0;
1208                 mbox->m_in.ack = 0;
1209                 mbox->m_in.numstatus = 0xFF;
1210                 mbox->m_in.status = 0xFF;
1211                 WRINDOOR(adapter, adapter->mbox_dma | 0x1);
1212
1213                 while((volatile u8)mbox->m_in.numstatus == 0xFF)
1214                         cpu_relax();
1215
1216                 mbox->m_in.numstatus = 0xFF;
1217
1218                 while( (volatile u8)mbox->m_in.poll != 0x77 )
1219                         cpu_relax();
1220
1221                 mbox->m_in.poll = 0;
1222                 mbox->m_in.ack = 0x77;
1223
1224                 WRINDOOR(adapter, adapter->mbox_dma | 0x2);
1225
1226                 while(RDINDOOR(adapter) & 0x2)
1227                         cpu_relax();
1228         }
1229         else {
1230                 irq_disable(adapter);
1231                 issue_command(adapter);
1232
1233                 while (!((byte = irq_state(adapter)) & INTR_VALID))
1234                         cpu_relax();
1235
1236                 set_irq_state(adapter, byte);
1237                 irq_enable(adapter);
1238                 irq_ack(adapter);
1239         }
1240
1241         return mbox->m_in.status;
1242
1243 bug_blocked_mailbox:
1244         dev_warn(&adapter->dev->dev, "Blocked mailbox......!!\n");
1245         udelay (1000);
1246         return -1;
1247 }
1248
1249
1250 /**
1251  * megaraid_isr_iomapped()
1252  * @irq: irq
1253  * @devp: pointer to our soft state
1254  *
1255  * Interrupt service routine for io-mapped controllers.
1256  * Find out if our device is interrupting. If yes, acknowledge the interrupt
1257  * and service the completed commands.
1258  */
1259 static irqreturn_t
1260 megaraid_isr_iomapped(int irq, void *devp)
1261 {
1262         adapter_t       *adapter = devp;
1263         unsigned long   flags;
1264         u8      status;
1265         u8      nstatus;
1266         u8      completed[MAX_FIRMWARE_STATUS];
1267         u8      byte;
1268         int     handled = 0;
1269
1270
1271         /*
1272          * loop till F/W has more commands for us to complete.
1273          */
1274         spin_lock_irqsave(&adapter->lock, flags);
1275
1276         do {
1277                 /* Check if a valid interrupt is pending */
1278                 byte = irq_state(adapter);
1279                 if( (byte & VALID_INTR_BYTE) == 0 ) {
1280                         /*
1281                          * No more pending commands
1282                          */
1283                         goto out_unlock;
1284                 }
1285                 set_irq_state(adapter, byte);
1286
1287                 while((nstatus = (volatile u8)adapter->mbox->m_in.numstatus)
1288                                 == 0xFF)
1289                         cpu_relax();
1290                 adapter->mbox->m_in.numstatus = 0xFF;
1291
1292                 status = adapter->mbox->m_in.status;
1293
1294                 /*
1295                  * decrement the pending queue counter
1296                  */
1297                 atomic_sub(nstatus, &adapter->pend_cmds);
1298
1299                 memcpy(completed, (void *)adapter->mbox->m_in.completed, 
1300                                 nstatus);
1301
1302                 /* Acknowledge interrupt */
1303                 irq_ack(adapter);
1304
1305                 mega_cmd_done(adapter, completed, nstatus, status);
1306
1307                 mega_rundoneq(adapter);
1308
1309                 handled = 1;
1310
1311                 /* Loop through any pending requests */
1312                 if(atomic_read(&adapter->quiescent) == 0) {
1313                         mega_runpendq(adapter);
1314                 }
1315
1316         } while(1);
1317
1318  out_unlock:
1319
1320         spin_unlock_irqrestore(&adapter->lock, flags);
1321
1322         return IRQ_RETVAL(handled);
1323 }
1324
1325
1326 /**
1327  * megaraid_isr_memmapped()
1328  * @irq: irq
1329  * @devp: pointer to our soft state
1330  *
1331  * Interrupt service routine for memory-mapped controllers.
1332  * Find out if our device is interrupting. If yes, acknowledge the interrupt
1333  * and service the completed commands.
1334  */
1335 static irqreturn_t
1336 megaraid_isr_memmapped(int irq, void *devp)
1337 {
1338         adapter_t       *adapter = devp;
1339         unsigned long   flags;
1340         u8      status;
1341         u32     dword = 0;
1342         u8      nstatus;
1343         u8      completed[MAX_FIRMWARE_STATUS];
1344         int     handled = 0;
1345
1346
1347         /*
1348          * loop till F/W has more commands for us to complete.
1349          */
1350         spin_lock_irqsave(&adapter->lock, flags);
1351
1352         do {
1353                 /* Check if a valid interrupt is pending */
1354                 dword = RDOUTDOOR(adapter);
1355                 if(dword != 0x10001234) {
1356                         /*
1357                          * No more pending commands
1358                          */
1359                         goto out_unlock;
1360                 }
1361                 WROUTDOOR(adapter, 0x10001234);
1362
1363                 while((nstatus = (volatile u8)adapter->mbox->m_in.numstatus)
1364                                 == 0xFF) {
1365                         cpu_relax();
1366                 }
1367                 adapter->mbox->m_in.numstatus = 0xFF;
1368
1369                 status = adapter->mbox->m_in.status;
1370
1371                 /*
1372                  * decrement the pending queue counter
1373                  */
1374                 atomic_sub(nstatus, &adapter->pend_cmds);
1375
1376                 memcpy(completed, (void *)adapter->mbox->m_in.completed, 
1377                                 nstatus);
1378
1379                 /* Acknowledge interrupt */
1380                 WRINDOOR(adapter, 0x2);
1381
1382                 handled = 1;
1383
1384                 while( RDINDOOR(adapter) & 0x02 )
1385                         cpu_relax();
1386
1387                 mega_cmd_done(adapter, completed, nstatus, status);
1388
1389                 mega_rundoneq(adapter);
1390
1391                 /* Loop through any pending requests */
1392                 if(atomic_read(&adapter->quiescent) == 0) {
1393                         mega_runpendq(adapter);
1394                 }
1395
1396         } while(1);
1397
1398  out_unlock:
1399
1400         spin_unlock_irqrestore(&adapter->lock, flags);
1401
1402         return IRQ_RETVAL(handled);
1403 }
1404 /**
1405  * mega_cmd_done()
1406  * @adapter: pointer to our soft state
1407  * @completed: array of ids of completed commands
1408  * @nstatus: number of completed commands
1409  * @status: status of the last command completed
1410  *
1411  * Complete the commands and call the scsi mid-layer callback hooks.
1412  */
1413 static void
1414 mega_cmd_done(adapter_t *adapter, u8 completed[], int nstatus, int status)
1415 {
1416         mega_ext_passthru       *epthru = NULL;
1417         struct scatterlist      *sgl;
1418         struct scsi_cmnd        *cmd = NULL;
1419         mega_passthru   *pthru = NULL;
1420         mbox_t  *mbox = NULL;
1421         u8      c;
1422         scb_t   *scb;
1423         int     islogical;
1424         int     cmdid;
1425         int     i;
1426
1427         /*
1428          * for all the commands completed, call the mid-layer callback routine
1429          * and free the scb.
1430          */
1431         for( i = 0; i < nstatus; i++ ) {
1432
1433                 cmdid = completed[i];
1434
1435                 /*
1436                  * Only free SCBs for the commands coming down from the
1437                  * mid-layer, not for which were issued internally
1438                  *
1439                  * For internal command, restore the status returned by the
1440                  * firmware so that user can interpret it.
1441                  */
1442                 if (cmdid == CMDID_INT_CMDS) {
1443                         scb = &adapter->int_scb;
1444
1445                         list_del_init(&scb->list);
1446                         scb->state = SCB_FREE;
1447
1448                         adapter->int_status = status;
1449                         complete(&adapter->int_waitq);
1450                 } else {
1451                         scb = &adapter->scb_list[cmdid];
1452
1453                         /*
1454                          * Make sure f/w has completed a valid command
1455                          */
1456                         if( !(scb->state & SCB_ISSUED) || scb->cmd == NULL ) {
1457                                 dev_crit(&adapter->dev->dev, "invalid command "
1458                                         "Id %d, scb->state:%x, scsi cmd:%p\n",
1459                                         cmdid, scb->state, scb->cmd);
1460
1461                                 continue;
1462                         }
1463
1464                         /*
1465                          * Was a abort issued for this command
1466                          */
1467                         if( scb->state & SCB_ABORT ) {
1468
1469                                 dev_warn(&adapter->dev->dev,
1470                                         "aborted cmd [%x] complete\n",
1471                                         scb->idx);
1472
1473                                 scb->cmd->result = (DID_ABORT << 16);
1474
1475                                 list_add_tail(SCSI_LIST(scb->cmd),
1476                                                 &adapter->completed_list);
1477
1478                                 mega_free_scb(adapter, scb);
1479
1480                                 continue;
1481                         }
1482
1483                         /*
1484                          * Was a reset issued for this command
1485                          */
1486                         if( scb->state & SCB_RESET ) {
1487
1488                                 dev_warn(&adapter->dev->dev,
1489                                         "reset cmd [%x] complete\n",
1490                                         scb->idx);
1491
1492                                 scb->cmd->result = (DID_RESET << 16);
1493
1494                                 list_add_tail(SCSI_LIST(scb->cmd),
1495                                                 &adapter->completed_list);
1496
1497                                 mega_free_scb (adapter, scb);
1498
1499                                 continue;
1500                         }
1501
1502                         cmd = scb->cmd;
1503                         pthru = scb->pthru;
1504                         epthru = scb->epthru;
1505                         mbox = (mbox_t *)scb->raw_mbox;
1506
1507 #if MEGA_HAVE_STATS
1508                         {
1509
1510                         int     logdrv = mbox->m_out.logdrv;
1511
1512                         islogical = adapter->logdrv_chan[cmd->channel];
1513                         /*
1514                          * Maintain an error counter for the logical drive.
1515                          * Some application like SNMP agent need such
1516                          * statistics
1517                          */
1518                         if( status && islogical && (cmd->cmnd[0] == READ_6 ||
1519                                                 cmd->cmnd[0] == READ_10 ||
1520                                                 cmd->cmnd[0] == READ_12)) {
1521                                 /*
1522                                  * Logical drive number increases by 0x80 when
1523                                  * a logical drive is deleted
1524                                  */
1525                                 adapter->rd_errors[logdrv%0x80]++;
1526                         }
1527
1528                         if( status && islogical && (cmd->cmnd[0] == WRITE_6 ||
1529                                                 cmd->cmnd[0] == WRITE_10 ||
1530                                                 cmd->cmnd[0] == WRITE_12)) {
1531                                 /*
1532                                  * Logical drive number increases by 0x80 when
1533                                  * a logical drive is deleted
1534                                  */
1535                                 adapter->wr_errors[logdrv%0x80]++;
1536                         }
1537
1538                         }
1539 #endif
1540                 }
1541
1542                 /*
1543                  * Do not return the presence of hard disk on the channel so,
1544                  * inquiry sent, and returned data==hard disk or removable
1545                  * hard disk and not logical, request should return failure! -
1546                  * PJ
1547                  */
1548                 islogical = adapter->logdrv_chan[cmd->device->channel];
1549                 if( cmd->cmnd[0] == INQUIRY && !islogical ) {
1550
1551                         sgl = scsi_sglist(cmd);
1552                         if( sg_page(sgl) ) {
1553                                 c = *(unsigned char *) sg_virt(&sgl[0]);
1554                         } else {
1555                                 dev_warn(&adapter->dev->dev, "invalid sg\n");
1556                                 c = 0;
1557                         }
1558
1559                         if(IS_RAID_CH(adapter, cmd->device->channel) &&
1560                                         ((c & 0x1F ) == TYPE_DISK)) {
1561                                 status = 0xF0;
1562                         }
1563                 }
1564
1565                 /* clear result; otherwise, success returns corrupt value */
1566                 cmd->result = 0;
1567
1568                 /* Convert MegaRAID status to Linux error code */
1569                 switch (status) {
1570                 case 0x00:      /* SUCCESS , i.e. SCSI_STATUS_GOOD */
1571                         cmd->result |= (DID_OK << 16);
1572                         break;
1573
1574                 case 0x02:      /* ERROR_ABORTED, i.e.
1575                                    SCSI_STATUS_CHECK_CONDITION */
1576
1577                         /* set sense_buffer and result fields */
1578                         if( mbox->m_out.cmd == MEGA_MBOXCMD_PASSTHRU ||
1579                                 mbox->m_out.cmd == MEGA_MBOXCMD_PASSTHRU64 ) {
1580
1581                                 memcpy(cmd->sense_buffer, pthru->reqsensearea,
1582                                                 14);
1583
1584                                 cmd->result = SAM_STAT_CHECK_CONDITION;
1585                         }
1586                         else {
1587                                 if (mbox->m_out.cmd == MEGA_MBOXCMD_EXTPTHRU) {
1588
1589                                         memcpy(cmd->sense_buffer,
1590                                                 epthru->reqsensearea, 14);
1591
1592                                         cmd->result = SAM_STAT_CHECK_CONDITION;
1593                                 } else
1594                                         scsi_build_sense(cmd, 0,
1595                                                          ABORTED_COMMAND, 0, 0);
1596                         }
1597                         break;
1598
1599                 case 0x08:      /* ERR_DEST_DRIVE_FAILED, i.e.
1600                                    SCSI_STATUS_BUSY */
1601                         cmd->result |= (DID_BUS_BUSY << 16) | status;
1602                         break;
1603
1604                 default:
1605 #if MEGA_HAVE_CLUSTERING
1606                         /*
1607                          * If TEST_UNIT_READY fails, we know
1608                          * MEGA_RESERVATION_STATUS failed
1609                          */
1610                         if( cmd->cmnd[0] == TEST_UNIT_READY ) {
1611                                 cmd->result |= (DID_ERROR << 16) |
1612                                         SAM_STAT_RESERVATION_CONFLICT;
1613                         }
1614                         else
1615                         /*
1616                          * Error code returned is 1 if Reserve or Release
1617                          * failed or the input parameter is invalid
1618                          */
1619                         if( status == 1 &&
1620                                 (cmd->cmnd[0] == RESERVE ||
1621                                          cmd->cmnd[0] == RELEASE) ) {
1622
1623                                 cmd->result |= (DID_ERROR << 16) |
1624                                         SAM_STAT_RESERVATION_CONFLICT;
1625                         }
1626                         else
1627 #endif
1628                                 cmd->result |= (DID_BAD_TARGET << 16)|status;
1629                 }
1630
1631                 mega_free_scb(adapter, scb);
1632
1633                 /* Add Scsi_Command to end of completed queue */
1634                 list_add_tail(SCSI_LIST(cmd), &adapter->completed_list);
1635         }
1636 }
1637
1638
1639 /*
1640  * mega_runpendq()
1641  *
1642  * Run through the list of completed requests and finish it
1643  */
1644 static void
1645 mega_rundoneq (adapter_t *adapter)
1646 {
1647         struct megaraid_cmd_priv *cmd_priv;
1648
1649         list_for_each_entry(cmd_priv, &adapter->completed_list, entry)
1650                 scsi_done(megaraid_to_scsi_cmd(cmd_priv));
1651
1652         INIT_LIST_HEAD(&adapter->completed_list);
1653 }
1654
1655
1656 /*
1657  * Free a SCB structure
1658  * Note: We assume the scsi commands associated with this scb is not free yet.
1659  */
1660 static void
1661 mega_free_scb(adapter_t *adapter, scb_t *scb)
1662 {
1663         switch( scb->dma_type ) {
1664
1665         case MEGA_DMA_TYPE_NONE:
1666                 break;
1667
1668         case MEGA_SGLIST:
1669                 scsi_dma_unmap(scb->cmd);
1670                 break;
1671         default:
1672                 break;
1673         }
1674
1675         /*
1676          * Remove from the pending list
1677          */
1678         list_del_init(&scb->list);
1679
1680         /* Link the scb back into free list */
1681         scb->state = SCB_FREE;
1682         scb->cmd = NULL;
1683
1684         list_add(&scb->list, &adapter->free_list);
1685 }
1686
1687
1688 static int
1689 __mega_busywait_mbox (adapter_t *adapter)
1690 {
1691         volatile mbox_t *mbox = adapter->mbox;
1692         long counter;
1693
1694         for (counter = 0; counter < 10000; counter++) {
1695                 if (!mbox->m_in.busy)
1696                         return 0;
1697                 udelay(100);
1698                 cond_resched();
1699         }
1700         return -1;              /* give up after 1 second */
1701 }
1702
1703 /*
1704  * Copies data to SGLIST
1705  * Note: For 64 bit cards, we need a minimum of one SG element for read/write
1706  */
1707 static int
1708 mega_build_sglist(adapter_t *adapter, scb_t *scb, u32 *buf, u32 *len)
1709 {
1710         struct scatterlist *sg;
1711         struct scsi_cmnd        *cmd;
1712         int     sgcnt;
1713         int     idx;
1714
1715         cmd = scb->cmd;
1716
1717         /*
1718          * Copy Scatter-Gather list info into controller structure.
1719          *
1720          * The number of sg elements returned must not exceed our limit
1721          */
1722         sgcnt = scsi_dma_map(cmd);
1723
1724         scb->dma_type = MEGA_SGLIST;
1725
1726         BUG_ON(sgcnt > adapter->sglen || sgcnt < 0);
1727
1728         *len = 0;
1729
1730         if (scsi_sg_count(cmd) == 1 && !adapter->has_64bit_addr) {
1731                 sg = scsi_sglist(cmd);
1732                 scb->dma_h_bulkdata = sg_dma_address(sg);
1733                 *buf = (u32)scb->dma_h_bulkdata;
1734                 *len = sg_dma_len(sg);
1735                 return 0;
1736         }
1737
1738         scsi_for_each_sg(cmd, sg, sgcnt, idx) {
1739                 if (adapter->has_64bit_addr) {
1740                         scb->sgl64[idx].address = sg_dma_address(sg);
1741                         *len += scb->sgl64[idx].length = sg_dma_len(sg);
1742                 } else {
1743                         scb->sgl[idx].address = sg_dma_address(sg);
1744                         *len += scb->sgl[idx].length = sg_dma_len(sg);
1745                 }
1746         }
1747
1748         /* Reset pointer and length fields */
1749         *buf = scb->sgl_dma_addr;
1750
1751         /* Return count of SG requests */
1752         return sgcnt;
1753 }
1754
1755
1756 /*
1757  * mega_8_to_40ld()
1758  *
1759  * takes all info in AdapterInquiry structure and puts it into ProductInfo and
1760  * Enquiry3 structures for later use
1761  */
1762 static void
1763 mega_8_to_40ld(mraid_inquiry *inquiry, mega_inquiry3 *enquiry3,
1764                 mega_product_info *product_info)
1765 {
1766         int i;
1767
1768         product_info->max_commands = inquiry->adapter_info.max_commands;
1769         enquiry3->rebuild_rate = inquiry->adapter_info.rebuild_rate;
1770         product_info->nchannels = inquiry->adapter_info.nchannels;
1771
1772         for (i = 0; i < 4; i++) {
1773                 product_info->fw_version[i] =
1774                         inquiry->adapter_info.fw_version[i];
1775
1776                 product_info->bios_version[i] =
1777                         inquiry->adapter_info.bios_version[i];
1778         }
1779         enquiry3->cache_flush_interval =
1780                 inquiry->adapter_info.cache_flush_interval;
1781
1782         product_info->dram_size = inquiry->adapter_info.dram_size;
1783
1784         enquiry3->num_ldrv = inquiry->logdrv_info.num_ldrv;
1785
1786         for (i = 0; i < MAX_LOGICAL_DRIVES_8LD; i++) {
1787                 enquiry3->ldrv_size[i] = inquiry->logdrv_info.ldrv_size[i];
1788                 enquiry3->ldrv_prop[i] = inquiry->logdrv_info.ldrv_prop[i];
1789                 enquiry3->ldrv_state[i] = inquiry->logdrv_info.ldrv_state[i];
1790         }
1791
1792         for (i = 0; i < (MAX_PHYSICAL_DRIVES); i++)
1793                 enquiry3->pdrv_state[i] = inquiry->pdrv_info.pdrv_state[i];
1794 }
1795
1796 static inline void
1797 mega_free_sgl(adapter_t *adapter)
1798 {
1799         scb_t   *scb;
1800         int     i;
1801
1802         for(i = 0; i < adapter->max_cmds; i++) {
1803
1804                 scb = &adapter->scb_list[i];
1805
1806                 if( scb->sgl64 ) {
1807                         dma_free_coherent(&adapter->dev->dev,
1808                                           sizeof(mega_sgl64) * adapter->sglen,
1809                                           scb->sgl64, scb->sgl_dma_addr);
1810
1811                         scb->sgl64 = NULL;
1812                 }
1813
1814                 if( scb->pthru ) {
1815                         dma_free_coherent(&adapter->dev->dev,
1816                                           sizeof(mega_passthru), scb->pthru,
1817                                           scb->pthru_dma_addr);
1818
1819                         scb->pthru = NULL;
1820                 }
1821
1822                 if( scb->epthru ) {
1823                         dma_free_coherent(&adapter->dev->dev,
1824                                           sizeof(mega_ext_passthru),
1825                                           scb->epthru, scb->epthru_dma_addr);
1826
1827                         scb->epthru = NULL;
1828                 }
1829
1830         }
1831 }
1832
1833
1834 /*
1835  * Get information about the card/driver
1836  */
1837 const char *
1838 megaraid_info(struct Scsi_Host *host)
1839 {
1840         static char buffer[512];
1841         adapter_t *adapter;
1842
1843         adapter = (adapter_t *)host->hostdata;
1844
1845         sprintf (buffer,
1846                  "LSI Logic MegaRAID %s %d commands %d targs %d chans %d luns",
1847                  adapter->fw_version, adapter->product_info.max_commands,
1848                  adapter->host->max_id, adapter->host->max_channel,
1849                  (u32)adapter->host->max_lun);
1850         return buffer;
1851 }
1852
1853 /*
1854  * Abort a previous SCSI request. Only commands on the pending list can be
1855  * aborted. All the commands issued to the F/W must complete.
1856  */
1857 static int
1858 megaraid_abort(struct scsi_cmnd *cmd)
1859 {
1860         adapter_t       *adapter;
1861         int             rval;
1862
1863         adapter = (adapter_t *)cmd->device->host->hostdata;
1864
1865         rval =  megaraid_abort_and_reset(adapter, cmd, SCB_ABORT);
1866
1867         /*
1868          * This is required here to complete any completed requests
1869          * to be communicated over to the mid layer.
1870          */
1871         mega_rundoneq(adapter);
1872
1873         return rval;
1874 }
1875
1876
1877 static int
1878 megaraid_reset(struct scsi_cmnd *cmd)
1879 {
1880         adapter_t       *adapter;
1881         megacmd_t       mc;
1882         int             rval;
1883
1884         adapter = (adapter_t *)cmd->device->host->hostdata;
1885
1886 #if MEGA_HAVE_CLUSTERING
1887         mc.cmd = MEGA_CLUSTER_CMD;
1888         mc.opcode = MEGA_RESET_RESERVATIONS;
1889
1890         if( mega_internal_command(adapter, &mc, NULL) != 0 ) {
1891                 dev_warn(&adapter->dev->dev, "reservation reset failed\n");
1892         }
1893         else {
1894                 dev_info(&adapter->dev->dev, "reservation reset\n");
1895         }
1896 #endif
1897
1898         spin_lock_irq(&adapter->lock);
1899
1900         rval =  megaraid_abort_and_reset(adapter, cmd, SCB_RESET);
1901
1902         /*
1903          * This is required here to complete any completed requests
1904          * to be communicated over to the mid layer.
1905          */
1906         mega_rundoneq(adapter);
1907         spin_unlock_irq(&adapter->lock);
1908
1909         return rval;
1910 }
1911
1912 /**
1913  * megaraid_abort_and_reset()
1914  * @adapter: megaraid soft state
1915  * @cmd: scsi command to be aborted or reset
1916  * @aor: abort or reset flag
1917  *
1918  * Try to locate the scsi command in the pending queue. If found and is not
1919  * issued to the controller, abort/reset it. Otherwise return failure
1920  */
1921 static int
1922 megaraid_abort_and_reset(adapter_t *adapter, struct scsi_cmnd *cmd, int aor)
1923 {
1924         struct list_head        *pos, *next;
1925         scb_t                   *scb;
1926
1927         dev_warn(&adapter->dev->dev, "%s cmd=%x <c=%d t=%d l=%d>\n",
1928              (aor == SCB_ABORT)? "ABORTING":"RESET",
1929              cmd->cmnd[0], cmd->device->channel,
1930              cmd->device->id, (u32)cmd->device->lun);
1931
1932         if(list_empty(&adapter->pending_list))
1933                 return FAILED;
1934
1935         list_for_each_safe(pos, next, &adapter->pending_list) {
1936
1937                 scb = list_entry(pos, scb_t, list);
1938
1939                 if (scb->cmd == cmd) { /* Found command */
1940
1941                         scb->state |= aor;
1942
1943                         /*
1944                          * Check if this command has firmware ownership. If
1945                          * yes, we cannot reset this command. Whenever f/w
1946                          * completes this command, we will return appropriate
1947                          * status from ISR.
1948                          */
1949                         if( scb->state & SCB_ISSUED ) {
1950
1951                                 dev_warn(&adapter->dev->dev,
1952                                         "%s[%x], fw owner\n",
1953                                         (aor==SCB_ABORT) ? "ABORTING":"RESET",
1954                                         scb->idx);
1955
1956                                 return FAILED;
1957                         }
1958                         else {
1959
1960                                 /*
1961                                  * Not yet issued! Remove from the pending
1962                                  * list
1963                                  */
1964                                 dev_warn(&adapter->dev->dev,
1965                                         "%s-[%x], driver owner\n",
1966                                         (aor==SCB_ABORT) ? "ABORTING":"RESET",
1967                                         scb->idx);
1968
1969                                 mega_free_scb(adapter, scb);
1970
1971                                 if( aor == SCB_ABORT ) {
1972                                         cmd->result = (DID_ABORT << 16);
1973                                 }
1974                                 else {
1975                                         cmd->result = (DID_RESET << 16);
1976                                 }
1977
1978                                 list_add_tail(SCSI_LIST(cmd),
1979                                                 &adapter->completed_list);
1980
1981                                 return SUCCESS;
1982                         }
1983                 }
1984         }
1985
1986         return FAILED;
1987 }
1988
1989 static inline int
1990 make_local_pdev(adapter_t *adapter, struct pci_dev **pdev)
1991 {
1992         *pdev = pci_alloc_dev(NULL);
1993
1994         if( *pdev == NULL ) return -1;
1995
1996         memcpy(*pdev, adapter->dev, sizeof(struct pci_dev));
1997
1998         if (dma_set_mask(&(*pdev)->dev, DMA_BIT_MASK(32)) != 0) {
1999                 kfree(*pdev);
2000                 return -1;
2001         }
2002
2003         return 0;
2004 }
2005
2006 static inline void
2007 free_local_pdev(struct pci_dev *pdev)
2008 {
2009         kfree(pdev);
2010 }
2011
2012 /**
2013  * mega_allocate_inquiry()
2014  * @dma_handle: handle returned for dma address
2015  * @pdev: handle to pci device
2016  *
2017  * allocates memory for inquiry structure
2018  */
2019 static inline void *
2020 mega_allocate_inquiry(dma_addr_t *dma_handle, struct pci_dev *pdev)
2021 {
2022         return dma_alloc_coherent(&pdev->dev, sizeof(mega_inquiry3),
2023                                   dma_handle, GFP_KERNEL);
2024 }
2025
2026
2027 static inline void
2028 mega_free_inquiry(void *inquiry, dma_addr_t dma_handle, struct pci_dev *pdev)
2029 {
2030         dma_free_coherent(&pdev->dev, sizeof(mega_inquiry3), inquiry,
2031                           dma_handle);
2032 }
2033
2034
2035 #ifdef CONFIG_PROC_FS
2036 /* Following code handles /proc fs  */
2037
2038 /**
2039  * proc_show_config()
2040  * @m: Synthetic file construction data
2041  * @v: File iterator
2042  *
2043  * Display configuration information about the controller.
2044  */
2045 static int
2046 proc_show_config(struct seq_file *m, void *v)
2047 {
2048
2049         adapter_t *adapter = m->private;
2050
2051         seq_puts(m, MEGARAID_VERSION);
2052         if(adapter->product_info.product_name[0])
2053                 seq_printf(m, "%s\n", adapter->product_info.product_name);
2054
2055         seq_puts(m, "Controller Type: ");
2056
2057         if( adapter->flag & BOARD_MEMMAP )
2058                 seq_puts(m, "438/466/467/471/493/518/520/531/532\n");
2059         else
2060                 seq_puts(m, "418/428/434\n");
2061
2062         if(adapter->flag & BOARD_40LD)
2063                 seq_puts(m, "Controller Supports 40 Logical Drives\n");
2064
2065         if(adapter->flag & BOARD_64BIT)
2066                 seq_puts(m, "Controller capable of 64-bit memory addressing\n");
2067         if( adapter->has_64bit_addr )
2068                 seq_puts(m, "Controller using 64-bit memory addressing\n");
2069         else
2070                 seq_puts(m, "Controller is not using 64-bit memory addressing\n");
2071
2072         seq_printf(m, "Base = %08lx, Irq = %d, ",
2073                    adapter->base, adapter->host->irq);
2074
2075         seq_printf(m, "Logical Drives = %d, Channels = %d\n",
2076                    adapter->numldrv, adapter->product_info.nchannels);
2077
2078         seq_printf(m, "Version =%s:%s, DRAM = %dMb\n",
2079                    adapter->fw_version, adapter->bios_version,
2080                    adapter->product_info.dram_size);
2081
2082         seq_printf(m, "Controller Queue Depth = %d, Driver Queue Depth = %d\n",
2083                    adapter->product_info.max_commands, adapter->max_cmds);
2084
2085         seq_printf(m, "support_ext_cdb    = %d\n", adapter->support_ext_cdb);
2086         seq_printf(m, "support_random_del = %d\n", adapter->support_random_del);
2087         seq_printf(m, "boot_ldrv_enabled  = %d\n", adapter->boot_ldrv_enabled);
2088         seq_printf(m, "boot_ldrv          = %d\n", adapter->boot_ldrv);
2089         seq_printf(m, "boot_pdrv_enabled  = %d\n", adapter->boot_pdrv_enabled);
2090         seq_printf(m, "boot_pdrv_ch       = %d\n", adapter->boot_pdrv_ch);
2091         seq_printf(m, "boot_pdrv_tgt      = %d\n", adapter->boot_pdrv_tgt);
2092         seq_printf(m, "quiescent          = %d\n",
2093                    atomic_read(&adapter->quiescent));
2094         seq_printf(m, "has_cluster        = %d\n", adapter->has_cluster);
2095
2096         seq_puts(m, "\nModule Parameters:\n");
2097         seq_printf(m, "max_cmd_per_lun    = %d\n", max_cmd_per_lun);
2098         seq_printf(m, "max_sectors_per_io = %d\n", max_sectors_per_io);
2099         return 0;
2100 }
2101
2102 /**
2103  * proc_show_stat()
2104  * @m: Synthetic file construction data
2105  * @v: File iterator
2106  *
2107  * Display statistical information about the I/O activity.
2108  */
2109 static int
2110 proc_show_stat(struct seq_file *m, void *v)
2111 {
2112         adapter_t *adapter = m->private;
2113 #if MEGA_HAVE_STATS
2114         int     i;
2115 #endif
2116
2117         seq_puts(m, "Statistical Information for this controller\n");
2118         seq_printf(m, "pend_cmds = %d\n", atomic_read(&adapter->pend_cmds));
2119 #if MEGA_HAVE_STATS
2120         for(i = 0; i < adapter->numldrv; i++) {
2121                 seq_printf(m, "Logical Drive %d:\n", i);
2122                 seq_printf(m, "\tReads Issued = %lu, Writes Issued = %lu\n",
2123                            adapter->nreads[i], adapter->nwrites[i]);
2124                 seq_printf(m, "\tSectors Read = %lu, Sectors Written = %lu\n",
2125                            adapter->nreadblocks[i], adapter->nwriteblocks[i]);
2126                 seq_printf(m, "\tRead errors = %lu, Write errors = %lu\n\n",
2127                            adapter->rd_errors[i], adapter->wr_errors[i]);
2128         }
2129 #else
2130         seq_puts(m, "IO and error counters not compiled in driver.\n");
2131 #endif
2132         return 0;
2133 }
2134
2135
2136 /**
2137  * proc_show_mbox()
2138  * @m: Synthetic file construction data
2139  * @v: File iterator
2140  *
2141  * Display mailbox information for the last command issued. This information
2142  * is good for debugging.
2143  */
2144 static int
2145 proc_show_mbox(struct seq_file *m, void *v)
2146 {
2147         adapter_t       *adapter = m->private;
2148         volatile mbox_t *mbox = adapter->mbox;
2149
2150         seq_puts(m, "Contents of Mail Box Structure\n");
2151         seq_printf(m, "  Fw Command   = 0x%02x\n", mbox->m_out.cmd);
2152         seq_printf(m, "  Cmd Sequence = 0x%02x\n", mbox->m_out.cmdid);
2153         seq_printf(m, "  No of Sectors= %04d\n", mbox->m_out.numsectors);
2154         seq_printf(m, "  LBA          = 0x%02x\n", mbox->m_out.lba);
2155         seq_printf(m, "  DTA          = 0x%08x\n", mbox->m_out.xferaddr);
2156         seq_printf(m, "  Logical Drive= 0x%02x\n", mbox->m_out.logdrv);
2157         seq_printf(m, "  No of SG Elmt= 0x%02x\n", mbox->m_out.numsgelements);
2158         seq_printf(m, "  Busy         = %01x\n", mbox->m_in.busy);
2159         seq_printf(m, "  Status       = 0x%02x\n", mbox->m_in.status);
2160         return 0;
2161 }
2162
2163
2164 /**
2165  * proc_show_rebuild_rate()
2166  * @m: Synthetic file construction data
2167  * @v: File iterator
2168  *
2169  * Display current rebuild rate
2170  */
2171 static int
2172 proc_show_rebuild_rate(struct seq_file *m, void *v)
2173 {
2174         adapter_t       *adapter = m->private;
2175         dma_addr_t      dma_handle;
2176         caddr_t         inquiry;
2177         struct pci_dev  *pdev;
2178
2179         if( make_local_pdev(adapter, &pdev) != 0 )
2180                 return 0;
2181
2182         if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL )
2183                 goto free_pdev;
2184
2185         if( mega_adapinq(adapter, dma_handle) != 0 ) {
2186                 seq_puts(m, "Adapter inquiry failed.\n");
2187                 dev_warn(&adapter->dev->dev, "inquiry failed\n");
2188                 goto free_inquiry;
2189         }
2190
2191         if( adapter->flag & BOARD_40LD )
2192                 seq_printf(m, "Rebuild Rate: [%d%%]\n",
2193                            ((mega_inquiry3 *)inquiry)->rebuild_rate);
2194         else
2195                 seq_printf(m, "Rebuild Rate: [%d%%]\n",
2196                         ((mraid_ext_inquiry *)
2197                          inquiry)->raid_inq.adapter_info.rebuild_rate);
2198
2199 free_inquiry:
2200         mega_free_inquiry(inquiry, dma_handle, pdev);
2201 free_pdev:
2202         free_local_pdev(pdev);
2203         return 0;
2204 }
2205
2206
2207 /**
2208  * proc_show_battery()
2209  * @m: Synthetic file construction data
2210  * @v: File iterator
2211  *
2212  * Display information about the battery module on the controller.
2213  */
2214 static int
2215 proc_show_battery(struct seq_file *m, void *v)
2216 {
2217         adapter_t       *adapter = m->private;
2218         dma_addr_t      dma_handle;
2219         caddr_t         inquiry;
2220         struct pci_dev  *pdev;
2221         u8      battery_status;
2222
2223         if( make_local_pdev(adapter, &pdev) != 0 )
2224                 return 0;
2225
2226         if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL )
2227                 goto free_pdev;
2228
2229         if( mega_adapinq(adapter, dma_handle) != 0 ) {
2230                 seq_puts(m, "Adapter inquiry failed.\n");
2231                 dev_warn(&adapter->dev->dev, "inquiry failed\n");
2232                 goto free_inquiry;
2233         }
2234
2235         if( adapter->flag & BOARD_40LD ) {
2236                 battery_status = ((mega_inquiry3 *)inquiry)->battery_status;
2237         }
2238         else {
2239                 battery_status = ((mraid_ext_inquiry *)inquiry)->
2240                         raid_inq.adapter_info.battery_status;
2241         }
2242
2243         /*
2244          * Decode the battery status
2245          */
2246         seq_printf(m, "Battery Status:[%d]", battery_status);
2247
2248         if(battery_status == MEGA_BATT_CHARGE_DONE)
2249                 seq_puts(m, " Charge Done");
2250
2251         if(battery_status & MEGA_BATT_MODULE_MISSING)
2252                 seq_puts(m, " Module Missing");
2253         
2254         if(battery_status & MEGA_BATT_LOW_VOLTAGE)
2255                 seq_puts(m, " Low Voltage");
2256         
2257         if(battery_status & MEGA_BATT_TEMP_HIGH)
2258                 seq_puts(m, " Temperature High");
2259         
2260         if(battery_status & MEGA_BATT_PACK_MISSING)
2261                 seq_puts(m, " Pack Missing");
2262         
2263         if(battery_status & MEGA_BATT_CHARGE_INPROG)
2264                 seq_puts(m, " Charge In-progress");
2265         
2266         if(battery_status & MEGA_BATT_CHARGE_FAIL)
2267                 seq_puts(m, " Charge Fail");
2268         
2269         if(battery_status & MEGA_BATT_CYCLES_EXCEEDED)
2270                 seq_puts(m, " Cycles Exceeded");
2271
2272         seq_putc(m, '\n');
2273
2274 free_inquiry:
2275         mega_free_inquiry(inquiry, dma_handle, pdev);
2276 free_pdev:
2277         free_local_pdev(pdev);
2278         return 0;
2279 }
2280
2281
2282 /*
2283  * Display scsi inquiry
2284  */
2285 static void
2286 mega_print_inquiry(struct seq_file *m, char *scsi_inq)
2287 {
2288         int     i;
2289
2290         seq_puts(m, "  Vendor: ");
2291         seq_write(m, scsi_inq + 8, 8);
2292         seq_puts(m, "  Model: ");
2293         seq_write(m, scsi_inq + 16, 16);
2294         seq_puts(m, "  Rev: ");
2295         seq_write(m, scsi_inq + 32, 4);
2296         seq_putc(m, '\n');
2297
2298         i = scsi_inq[0] & 0x1f;
2299         seq_printf(m, "  Type:   %s ", scsi_device_type(i));
2300
2301         seq_printf(m, "                 ANSI SCSI revision: %02x",
2302                    scsi_inq[2] & 0x07);
2303
2304         if( (scsi_inq[2] & 0x07) == 1 && (scsi_inq[3] & 0x0f) == 1 )
2305                 seq_puts(m, " CCS\n");
2306         else
2307                 seq_putc(m, '\n');
2308 }
2309
2310 /**
2311  * proc_show_pdrv()
2312  * @m: Synthetic file construction data
2313  * @adapter: pointer to our soft state
2314  * @channel: channel
2315  *
2316  * Display information about the physical drives.
2317  */
2318 static int
2319 proc_show_pdrv(struct seq_file *m, adapter_t *adapter, int channel)
2320 {
2321         dma_addr_t      dma_handle;
2322         char            *scsi_inq;
2323         dma_addr_t      scsi_inq_dma_handle;
2324         caddr_t         inquiry;
2325         struct pci_dev  *pdev;
2326         u8      *pdrv_state;
2327         u8      state;
2328         int     tgt;
2329         int     max_channels;
2330         int     i;
2331
2332         if( make_local_pdev(adapter, &pdev) != 0 )
2333                 return 0;
2334
2335         if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL )
2336                 goto free_pdev;
2337
2338         if( mega_adapinq(adapter, dma_handle) != 0 ) {
2339                 seq_puts(m, "Adapter inquiry failed.\n");
2340                 dev_warn(&adapter->dev->dev, "inquiry failed\n");
2341                 goto free_inquiry;
2342         }
2343
2344
2345         scsi_inq = dma_alloc_coherent(&pdev->dev, 256, &scsi_inq_dma_handle,
2346                                       GFP_KERNEL);
2347         if( scsi_inq == NULL ) {
2348                 seq_puts(m, "memory not available for scsi inq.\n");
2349                 goto free_inquiry;
2350         }
2351
2352         if( adapter->flag & BOARD_40LD ) {
2353                 pdrv_state = ((mega_inquiry3 *)inquiry)->pdrv_state;
2354         }
2355         else {
2356                 pdrv_state = ((mraid_ext_inquiry *)inquiry)->
2357                         raid_inq.pdrv_info.pdrv_state;
2358         }
2359
2360         max_channels = adapter->product_info.nchannels;
2361
2362         if( channel >= max_channels ) {
2363                 goto free_pci;
2364         }
2365
2366         for( tgt = 0; tgt <= MAX_TARGET; tgt++ ) {
2367
2368                 i = channel*16 + tgt;
2369
2370                 state = *(pdrv_state + i);
2371                 switch( state & 0x0F ) {
2372                 case PDRV_ONLINE:
2373                         seq_printf(m, "Channel:%2d Id:%2d State: Online",
2374                                    channel, tgt);
2375                         break;
2376
2377                 case PDRV_FAILED:
2378                         seq_printf(m, "Channel:%2d Id:%2d State: Failed",
2379                                    channel, tgt);
2380                         break;
2381
2382                 case PDRV_RBLD:
2383                         seq_printf(m, "Channel:%2d Id:%2d State: Rebuild",
2384                                    channel, tgt);
2385                         break;
2386
2387                 case PDRV_HOTSPARE:
2388                         seq_printf(m, "Channel:%2d Id:%2d State: Hot spare",
2389                                    channel, tgt);
2390                         break;
2391
2392                 default:
2393                         seq_printf(m, "Channel:%2d Id:%2d State: Un-configured",
2394                                    channel, tgt);
2395                         break;
2396                 }
2397
2398                 /*
2399                  * This interface displays inquiries for disk drives
2400                  * only. Inquries for logical drives and non-disk
2401                  * devices are available through /proc/scsi/scsi
2402                  */
2403                 memset(scsi_inq, 0, 256);
2404                 if( mega_internal_dev_inquiry(adapter, channel, tgt,
2405                                 scsi_inq_dma_handle) ||
2406                                 (scsi_inq[0] & 0x1F) != TYPE_DISK ) {
2407                         continue;
2408                 }
2409
2410                 /*
2411                  * Check for overflow. We print less than 240
2412                  * characters for inquiry
2413                  */
2414                 seq_puts(m, ".\n");
2415                 mega_print_inquiry(m, scsi_inq);
2416         }
2417
2418 free_pci:
2419         dma_free_coherent(&pdev->dev, 256, scsi_inq, scsi_inq_dma_handle);
2420 free_inquiry:
2421         mega_free_inquiry(inquiry, dma_handle, pdev);
2422 free_pdev:
2423         free_local_pdev(pdev);
2424         return 0;
2425 }
2426
2427 /**
2428  * proc_show_pdrv_ch0()
2429  * @m: Synthetic file construction data
2430  * @v: File iterator
2431  *
2432  * Display information about the physical drives on physical channel 0.
2433  */
2434 static int
2435 proc_show_pdrv_ch0(struct seq_file *m, void *v)
2436 {
2437         return proc_show_pdrv(m, m->private, 0);
2438 }
2439
2440
2441 /**
2442  * proc_show_pdrv_ch1()
2443  * @m: Synthetic file construction data
2444  * @v: File iterator
2445  *
2446  * Display information about the physical drives on physical channel 1.
2447  */
2448 static int
2449 proc_show_pdrv_ch1(struct seq_file *m, void *v)
2450 {
2451         return proc_show_pdrv(m, m->private, 1);
2452 }
2453
2454
2455 /**
2456  * proc_show_pdrv_ch2()
2457  * @m: Synthetic file construction data
2458  * @v: File iterator
2459  *
2460  * Display information about the physical drives on physical channel 2.
2461  */
2462 static int
2463 proc_show_pdrv_ch2(struct seq_file *m, void *v)
2464 {
2465         return proc_show_pdrv(m, m->private, 2);
2466 }
2467
2468
2469 /**
2470  * proc_show_pdrv_ch3()
2471  * @m: Synthetic file construction data
2472  * @v: File iterator
2473  *
2474  * Display information about the physical drives on physical channel 3.
2475  */
2476 static int
2477 proc_show_pdrv_ch3(struct seq_file *m, void *v)
2478 {
2479         return proc_show_pdrv(m, m->private, 3);
2480 }
2481
2482
2483 /**
2484  * proc_show_rdrv()
2485  * @m: Synthetic file construction data
2486  * @adapter: pointer to our soft state
2487  * @start: starting logical drive to display
2488  * @end: ending logical drive to display
2489  *
2490  * We do not print the inquiry information since its already available through
2491  * /proc/scsi/scsi interface
2492  */
2493 static int
2494 proc_show_rdrv(struct seq_file *m, adapter_t *adapter, int start, int end )
2495 {
2496         dma_addr_t      dma_handle;
2497         logdrv_param    *lparam;
2498         megacmd_t       mc;
2499         char            *disk_array;
2500         dma_addr_t      disk_array_dma_handle;
2501         caddr_t         inquiry;
2502         struct pci_dev  *pdev;
2503         u8      *rdrv_state;
2504         int     num_ldrv;
2505         u32     array_sz;
2506         int     i;
2507
2508         if( make_local_pdev(adapter, &pdev) != 0 )
2509                 return 0;
2510
2511         if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL )
2512                 goto free_pdev;
2513
2514         if( mega_adapinq(adapter, dma_handle) != 0 ) {
2515                 seq_puts(m, "Adapter inquiry failed.\n");
2516                 dev_warn(&adapter->dev->dev, "inquiry failed\n");
2517                 goto free_inquiry;
2518         }
2519
2520         memset(&mc, 0, sizeof(megacmd_t));
2521
2522         if( adapter->flag & BOARD_40LD ) {
2523                 array_sz = sizeof(disk_array_40ld);
2524
2525                 rdrv_state = ((mega_inquiry3 *)inquiry)->ldrv_state;
2526
2527                 num_ldrv = ((mega_inquiry3 *)inquiry)->num_ldrv;
2528         }
2529         else {
2530                 array_sz = sizeof(disk_array_8ld);
2531
2532                 rdrv_state = ((mraid_ext_inquiry *)inquiry)->
2533                         raid_inq.logdrv_info.ldrv_state;
2534
2535                 num_ldrv = ((mraid_ext_inquiry *)inquiry)->
2536                         raid_inq.logdrv_info.num_ldrv;
2537         }
2538
2539         disk_array = dma_alloc_coherent(&pdev->dev, array_sz,
2540                                         &disk_array_dma_handle, GFP_KERNEL);
2541
2542         if( disk_array == NULL ) {
2543                 seq_puts(m, "memory not available.\n");
2544                 goto free_inquiry;
2545         }
2546
2547         mc.xferaddr = (u32)disk_array_dma_handle;
2548
2549         if( adapter->flag & BOARD_40LD ) {
2550                 mc.cmd = FC_NEW_CONFIG;
2551                 mc.opcode = OP_DCMD_READ_CONFIG;
2552
2553                 if( mega_internal_command(adapter, &mc, NULL) ) {
2554                         seq_puts(m, "40LD read config failed.\n");
2555                         goto free_pci;
2556                 }
2557
2558         }
2559         else {
2560                 mc.cmd = NEW_READ_CONFIG_8LD;
2561
2562                 if( mega_internal_command(adapter, &mc, NULL) ) {
2563                         mc.cmd = READ_CONFIG_8LD;
2564                         if( mega_internal_command(adapter, &mc, NULL) ) {
2565                                 seq_puts(m, "8LD read config failed.\n");
2566                                 goto free_pci;
2567                         }
2568                 }
2569         }
2570
2571         for( i = start; i < ( (end+1 < num_ldrv) ? end+1 : num_ldrv ); i++ ) {
2572
2573                 if( adapter->flag & BOARD_40LD ) {
2574                         lparam =
2575                         &((disk_array_40ld *)disk_array)->ldrv[i].lparam;
2576                 }
2577                 else {
2578                         lparam =
2579                         &((disk_array_8ld *)disk_array)->ldrv[i].lparam;
2580                 }
2581
2582                 /*
2583                  * Check for overflow. We print less than 240 characters for
2584                  * information about each logical drive.
2585                  */
2586                 seq_printf(m, "Logical drive:%2d:, ", i);
2587
2588                 switch( rdrv_state[i] & 0x0F ) {
2589                 case RDRV_OFFLINE:
2590                         seq_puts(m, "state: offline");
2591                         break;
2592                 case RDRV_DEGRADED:
2593                         seq_puts(m, "state: degraded");
2594                         break;
2595                 case RDRV_OPTIMAL:
2596                         seq_puts(m, "state: optimal");
2597                         break;
2598                 case RDRV_DELETED:
2599                         seq_puts(m, "state: deleted");
2600                         break;
2601                 default:
2602                         seq_puts(m, "state: unknown");
2603                         break;
2604                 }
2605
2606                 /*
2607                  * Check if check consistency or initialization is going on
2608                  * for this logical drive.
2609                  */
2610                 if( (rdrv_state[i] & 0xF0) == 0x20 )
2611                         seq_puts(m, ", check-consistency in progress");
2612                 else if( (rdrv_state[i] & 0xF0) == 0x10 )
2613                         seq_puts(m, ", initialization in progress");
2614                 
2615                 seq_putc(m, '\n');
2616
2617                 seq_printf(m, "Span depth:%3d, ", lparam->span_depth);
2618                 seq_printf(m, "RAID level:%3d, ", lparam->level);
2619                 seq_printf(m, "Stripe size:%3d, ",
2620                            lparam->stripe_sz ? lparam->stripe_sz/2: 128);
2621                 seq_printf(m, "Row size:%3d\n", lparam->row_size);
2622
2623                 seq_puts(m, "Read Policy: ");
2624                 switch(lparam->read_ahead) {
2625                 case NO_READ_AHEAD:
2626                         seq_puts(m, "No read ahead, ");
2627                         break;
2628                 case READ_AHEAD:
2629                         seq_puts(m, "Read ahead, ");
2630                         break;
2631                 case ADAP_READ_AHEAD:
2632                         seq_puts(m, "Adaptive, ");
2633                         break;
2634
2635                 }
2636
2637                 seq_puts(m, "Write Policy: ");
2638                 switch(lparam->write_mode) {
2639                 case WRMODE_WRITE_THRU:
2640                         seq_puts(m, "Write thru, ");
2641                         break;
2642                 case WRMODE_WRITE_BACK:
2643                         seq_puts(m, "Write back, ");
2644                         break;
2645                 }
2646
2647                 seq_puts(m, "Cache Policy: ");
2648                 switch(lparam->direct_io) {
2649                 case CACHED_IO:
2650                         seq_puts(m, "Cached IO\n\n");
2651                         break;
2652                 case DIRECT_IO:
2653                         seq_puts(m, "Direct IO\n\n");
2654                         break;
2655                 }
2656         }
2657
2658 free_pci:
2659         dma_free_coherent(&pdev->dev, array_sz, disk_array,
2660                           disk_array_dma_handle);
2661 free_inquiry:
2662         mega_free_inquiry(inquiry, dma_handle, pdev);
2663 free_pdev:
2664         free_local_pdev(pdev);
2665         return 0;
2666 }
2667
2668 /**
2669  * proc_show_rdrv_10()
2670  * @m: Synthetic file construction data
2671  * @v: File iterator
2672  *
2673  * Display real time information about the logical drives 0 through 9.
2674  */
2675 static int
2676 proc_show_rdrv_10(struct seq_file *m, void *v)
2677 {
2678         return proc_show_rdrv(m, m->private, 0, 9);
2679 }
2680
2681
2682 /**
2683  * proc_show_rdrv_20()
2684  * @m: Synthetic file construction data
2685  * @v: File iterator
2686  *
2687  * Display real time information about the logical drives 0 through 9.
2688  */
2689 static int
2690 proc_show_rdrv_20(struct seq_file *m, void *v)
2691 {
2692         return proc_show_rdrv(m, m->private, 10, 19);
2693 }
2694
2695
2696 /**
2697  * proc_show_rdrv_30()
2698  * @m: Synthetic file construction data
2699  * @v: File iterator
2700  *
2701  * Display real time information about the logical drives 0 through 9.
2702  */
2703 static int
2704 proc_show_rdrv_30(struct seq_file *m, void *v)
2705 {
2706         return proc_show_rdrv(m, m->private, 20, 29);
2707 }
2708
2709
2710 /**
2711  * proc_show_rdrv_40()
2712  * @m: Synthetic file construction data
2713  * @v: File iterator
2714  *
2715  * Display real time information about the logical drives 0 through 9.
2716  */
2717 static int
2718 proc_show_rdrv_40(struct seq_file *m, void *v)
2719 {
2720         return proc_show_rdrv(m, m->private, 30, 39);
2721 }
2722
2723 /**
2724  * mega_create_proc_entry()
2725  * @index: index in soft state array
2726  * @parent: parent node for this /proc entry
2727  *
2728  * Creates /proc entries for our controllers.
2729  */
2730 static void
2731 mega_create_proc_entry(int index, struct proc_dir_entry *parent)
2732 {
2733         adapter_t *adapter = hba_soft_state[index];
2734         struct proc_dir_entry *dir;
2735         u8 string[16];
2736
2737         sprintf(string, "hba%d", adapter->host->host_no);
2738         dir = proc_mkdir_data(string, 0, parent, adapter);
2739         if (!dir) {
2740                 dev_warn(&adapter->dev->dev, "proc_mkdir failed\n");
2741                 return;
2742         }
2743
2744         proc_create_single_data("config", S_IRUSR, dir,
2745                         proc_show_config, adapter);
2746         proc_create_single_data("stat", S_IRUSR, dir,
2747                         proc_show_stat, adapter);
2748         proc_create_single_data("mailbox", S_IRUSR, dir,
2749                         proc_show_mbox, adapter);
2750 #if MEGA_HAVE_ENH_PROC
2751         proc_create_single_data("rebuild-rate", S_IRUSR, dir,
2752                         proc_show_rebuild_rate, adapter);
2753         proc_create_single_data("battery-status", S_IRUSR, dir,
2754                         proc_show_battery, adapter);
2755         proc_create_single_data("diskdrives-ch0", S_IRUSR, dir,
2756                         proc_show_pdrv_ch0, adapter);
2757         proc_create_single_data("diskdrives-ch1", S_IRUSR, dir,
2758                         proc_show_pdrv_ch1, adapter);
2759         proc_create_single_data("diskdrives-ch2", S_IRUSR, dir,
2760                         proc_show_pdrv_ch2, adapter);
2761         proc_create_single_data("diskdrives-ch3", S_IRUSR, dir,
2762                         proc_show_pdrv_ch3, adapter);
2763         proc_create_single_data("raiddrives-0-9", S_IRUSR, dir,
2764                         proc_show_rdrv_10, adapter);
2765         proc_create_single_data("raiddrives-10-19", S_IRUSR, dir,
2766                         proc_show_rdrv_20, adapter);
2767         proc_create_single_data("raiddrives-20-29", S_IRUSR, dir,
2768                         proc_show_rdrv_30, adapter);
2769         proc_create_single_data("raiddrives-30-39", S_IRUSR, dir,
2770                         proc_show_rdrv_40, adapter);
2771 #endif
2772 }
2773
2774 #else
2775 static inline void mega_create_proc_entry(int index, struct proc_dir_entry *parent)
2776 {
2777 }
2778 #endif
2779
2780
2781 /*
2782  * megaraid_biosparam()
2783  *
2784  * Return the disk geometry for a particular disk
2785  */
2786 static int
2787 megaraid_biosparam(struct scsi_device *sdev, struct block_device *bdev,
2788                     sector_t capacity, int geom[])
2789 {
2790         adapter_t       *adapter;
2791         int     heads;
2792         int     sectors;
2793         int     cylinders;
2794
2795         /* Get pointer to host config structure */
2796         adapter = (adapter_t *)sdev->host->hostdata;
2797
2798         if (IS_RAID_CH(adapter, sdev->channel)) {
2799                         /* Default heads (64) & sectors (32) */
2800                         heads = 64;
2801                         sectors = 32;
2802                         cylinders = (ulong)capacity / (heads * sectors);
2803
2804                         /*
2805                          * Handle extended translation size for logical drives
2806                          * > 1Gb
2807                          */
2808                         if ((ulong)capacity >= 0x200000) {
2809                                 heads = 255;
2810                                 sectors = 63;
2811                                 cylinders = (ulong)capacity / (heads * sectors);
2812                         }
2813
2814                         /* return result */
2815                         geom[0] = heads;
2816                         geom[1] = sectors;
2817                         geom[2] = cylinders;
2818         }
2819         else {
2820                 if (scsi_partsize(bdev, capacity, geom))
2821                         return 0;
2822
2823                 dev_info(&adapter->dev->dev,
2824                          "invalid partition on this disk on channel %d\n",
2825                          sdev->channel);
2826
2827                 /* Default heads (64) & sectors (32) */
2828                 heads = 64;
2829                 sectors = 32;
2830                 cylinders = (ulong)capacity / (heads * sectors);
2831
2832                 /* Handle extended translation size for logical drives > 1Gb */
2833                 if ((ulong)capacity >= 0x200000) {
2834                         heads = 255;
2835                         sectors = 63;
2836                         cylinders = (ulong)capacity / (heads * sectors);
2837                 }
2838
2839                 /* return result */
2840                 geom[0] = heads;
2841                 geom[1] = sectors;
2842                 geom[2] = cylinders;
2843         }
2844
2845         return 0;
2846 }
2847
2848 /**
2849  * mega_init_scb()
2850  * @adapter: pointer to our soft state
2851  *
2852  * Allocate memory for the various pointers in the scb structures:
2853  * scatter-gather list pointer, passthru and extended passthru structure
2854  * pointers.
2855  */
2856 static int
2857 mega_init_scb(adapter_t *adapter)
2858 {
2859         scb_t   *scb;
2860         int     i;
2861
2862         for( i = 0; i < adapter->max_cmds; i++ ) {
2863
2864                 scb = &adapter->scb_list[i];
2865
2866                 scb->sgl64 = NULL;
2867                 scb->sgl = NULL;
2868                 scb->pthru = NULL;
2869                 scb->epthru = NULL;
2870         }
2871
2872         for( i = 0; i < adapter->max_cmds; i++ ) {
2873
2874                 scb = &adapter->scb_list[i];
2875
2876                 scb->idx = i;
2877
2878                 scb->sgl64 = dma_alloc_coherent(&adapter->dev->dev,
2879                                                 sizeof(mega_sgl64) * adapter->sglen,
2880                                                 &scb->sgl_dma_addr, GFP_KERNEL);
2881
2882                 scb->sgl = (mega_sglist *)scb->sgl64;
2883
2884                 if( !scb->sgl ) {
2885                         dev_warn(&adapter->dev->dev, "RAID: Can't allocate sglist\n");
2886                         mega_free_sgl(adapter);
2887                         return -1;
2888                 }
2889
2890                 scb->pthru = dma_alloc_coherent(&adapter->dev->dev,
2891                                                 sizeof(mega_passthru),
2892                                                 &scb->pthru_dma_addr, GFP_KERNEL);
2893
2894                 if( !scb->pthru ) {
2895                         dev_warn(&adapter->dev->dev, "RAID: Can't allocate passthru\n");
2896                         mega_free_sgl(adapter);
2897                         return -1;
2898                 }
2899
2900                 scb->epthru = dma_alloc_coherent(&adapter->dev->dev,
2901                                                  sizeof(mega_ext_passthru),
2902                                                  &scb->epthru_dma_addr, GFP_KERNEL);
2903
2904                 if( !scb->epthru ) {
2905                         dev_warn(&adapter->dev->dev,
2906                                 "Can't allocate extended passthru\n");
2907                         mega_free_sgl(adapter);
2908                         return -1;
2909                 }
2910
2911
2912                 scb->dma_type = MEGA_DMA_TYPE_NONE;
2913
2914                 /*
2915                  * Link to free list
2916                  * lock not required since we are loading the driver, so no
2917                  * commands possible right now.
2918                  */
2919                 scb->state = SCB_FREE;
2920                 scb->cmd = NULL;
2921                 list_add(&scb->list, &adapter->free_list);
2922         }
2923
2924         return 0;
2925 }
2926
2927
2928 /**
2929  * megadev_open()
2930  * @inode: unused
2931  * @filep: unused
2932  *
2933  * Routines for the character/ioctl interface to the driver. Find out if this
2934  * is a valid open. 
2935  */
2936 static int
2937 megadev_open (struct inode *inode, struct file *filep)
2938 {
2939         /*
2940          * Only allow superuser to access private ioctl interface
2941          */
2942         if( !capable(CAP_SYS_ADMIN) ) return -EACCES;
2943
2944         return 0;
2945 }
2946
2947
2948 /**
2949  * megadev_ioctl()
2950  * @filep: Our device file
2951  * @cmd: ioctl command
2952  * @arg: user buffer
2953  *
2954  * ioctl entry point for our private ioctl interface. We move the data in from
2955  * the user space, prepare the command (if necessary, convert the old MIMD
2956  * ioctl to new ioctl command), and issue a synchronous command to the
2957  * controller.
2958  */
2959 static int
2960 megadev_ioctl(struct file *filep, unsigned int cmd, unsigned long arg)
2961 {
2962         adapter_t       *adapter;
2963         nitioctl_t      uioc;
2964         int             adapno;
2965         int             rval;
2966         mega_passthru   __user *upthru; /* user address for passthru */
2967         mega_passthru   *pthru;         /* copy user passthru here */
2968         dma_addr_t      pthru_dma_hndl;
2969         void            *data = NULL;   /* data to be transferred */
2970         dma_addr_t      data_dma_hndl;  /* dma handle for data xfer area */
2971         megacmd_t       mc;
2972 #if MEGA_HAVE_STATS
2973         megastat_t      __user *ustats = NULL;
2974         int             num_ldrv = 0;
2975 #endif
2976         u32             uxferaddr = 0;
2977         struct pci_dev  *pdev;
2978
2979         /*
2980          * Make sure only USCSICMD are issued through this interface.
2981          * MIMD application would still fire different command.
2982          */
2983         if( (_IOC_TYPE(cmd) != MEGAIOC_MAGIC) && (cmd != USCSICMD) ) {
2984                 return -EINVAL;
2985         }
2986
2987         /*
2988          * Check and convert a possible MIMD command to NIT command.
2989          * mega_m_to_n() copies the data from the user space, so we do not
2990          * have to do it here.
2991          * NOTE: We will need some user address to copyout the data, therefore
2992          * the inteface layer will also provide us with the required user
2993          * addresses.
2994          */
2995         memset(&uioc, 0, sizeof(nitioctl_t));
2996         if( (rval = mega_m_to_n( (void __user *)arg, &uioc)) != 0 )
2997                 return rval;
2998
2999
3000         switch( uioc.opcode ) {
3001
3002         case GET_DRIVER_VER:
3003                 if( put_user(driver_ver, (u32 __user *)uioc.uioc_uaddr) )
3004                         return (-EFAULT);
3005
3006                 break;
3007
3008         case GET_N_ADAP:
3009                 if( put_user(hba_count, (u32 __user *)uioc.uioc_uaddr) )
3010                         return (-EFAULT);
3011
3012                 /*
3013                  * Shucks. MIMD interface returns a positive value for number
3014                  * of adapters. TODO: Change it to return 0 when there is no
3015                  * applicatio using mimd interface.
3016                  */
3017                 return hba_count;
3018
3019         case GET_ADAP_INFO:
3020
3021                 /*
3022                  * Which adapter
3023                  */
3024                 if( (adapno = GETADAP(uioc.adapno)) >= hba_count )
3025                         return (-ENODEV);
3026
3027                 if( copy_to_user(uioc.uioc_uaddr, mcontroller+adapno,
3028                                 sizeof(struct mcontroller)) )
3029                         return (-EFAULT);
3030                 break;
3031
3032 #if MEGA_HAVE_STATS
3033
3034         case GET_STATS:
3035                 /*
3036                  * Which adapter
3037                  */
3038                 if( (adapno = GETADAP(uioc.adapno)) >= hba_count )
3039                         return (-ENODEV);
3040
3041                 adapter = hba_soft_state[adapno];
3042
3043                 ustats = uioc.uioc_uaddr;
3044
3045                 if( copy_from_user(&num_ldrv, &ustats->num_ldrv, sizeof(int)) )
3046                         return (-EFAULT);
3047
3048                 /*
3049                  * Check for the validity of the logical drive number
3050                  */
3051                 if( num_ldrv >= MAX_LOGICAL_DRIVES_40LD ) return -EINVAL;
3052
3053                 if( copy_to_user(ustats->nreads, adapter->nreads,
3054                                         num_ldrv*sizeof(u32)) )
3055                         return -EFAULT;
3056
3057                 if( copy_to_user(ustats->nreadblocks, adapter->nreadblocks,
3058                                         num_ldrv*sizeof(u32)) )
3059                         return -EFAULT;
3060
3061                 if( copy_to_user(ustats->nwrites, adapter->nwrites,
3062                                         num_ldrv*sizeof(u32)) )
3063                         return -EFAULT;
3064
3065                 if( copy_to_user(ustats->nwriteblocks, adapter->nwriteblocks,
3066                                         num_ldrv*sizeof(u32)) )
3067                         return -EFAULT;
3068
3069                 if( copy_to_user(ustats->rd_errors, adapter->rd_errors,
3070                                         num_ldrv*sizeof(u32)) )
3071                         return -EFAULT;
3072
3073                 if( copy_to_user(ustats->wr_errors, adapter->wr_errors,
3074                                         num_ldrv*sizeof(u32)) )
3075                         return -EFAULT;
3076
3077                 return 0;
3078
3079 #endif
3080         case MBOX_CMD:
3081
3082                 /*
3083                  * Which adapter
3084                  */
3085                 if( (adapno = GETADAP(uioc.adapno)) >= hba_count )
3086                         return (-ENODEV);
3087
3088                 adapter = hba_soft_state[adapno];
3089
3090                 /*
3091                  * Deletion of logical drive is a special case. The adapter
3092                  * should be quiescent before this command is issued.
3093                  */
3094                 if( uioc.uioc_rmbox[0] == FC_DEL_LOGDRV &&
3095                                 uioc.uioc_rmbox[2] == OP_DEL_LOGDRV ) {
3096
3097                         /*
3098                          * Do we support this feature
3099                          */
3100                         if( !adapter->support_random_del ) {
3101                                 dev_warn(&adapter->dev->dev, "logdrv "
3102                                         "delete on non-supporting F/W\n");
3103
3104                                 return (-EINVAL);
3105                         }
3106
3107                         rval = mega_del_logdrv( adapter, uioc.uioc_rmbox[3] );
3108
3109                         if( rval == 0 ) {
3110                                 memset(&mc, 0, sizeof(megacmd_t));
3111
3112                                 mc.status = rval;
3113
3114                                 rval = mega_n_to_m((void __user *)arg, &mc);
3115                         }
3116
3117                         return rval;
3118                 }
3119                 /*
3120                  * This interface only support the regular passthru commands.
3121                  * Reject extended passthru and 64-bit passthru
3122                  */
3123                 if( uioc.uioc_rmbox[0] == MEGA_MBOXCMD_PASSTHRU64 ||
3124                         uioc.uioc_rmbox[0] == MEGA_MBOXCMD_EXTPTHRU ) {
3125
3126                         dev_warn(&adapter->dev->dev, "rejected passthru\n");
3127
3128                         return (-EINVAL);
3129                 }
3130
3131                 /*
3132                  * For all internal commands, the buffer must be allocated in
3133                  * <4GB address range
3134                  */
3135                 if( make_local_pdev(adapter, &pdev) != 0 )
3136                         return -EIO;
3137
3138                 /* Is it a passthru command or a DCMD */
3139                 if( uioc.uioc_rmbox[0] == MEGA_MBOXCMD_PASSTHRU ) {
3140                         /* Passthru commands */
3141
3142                         pthru = dma_alloc_coherent(&pdev->dev,
3143                                                    sizeof(mega_passthru),
3144                                                    &pthru_dma_hndl, GFP_KERNEL);
3145
3146                         if( pthru == NULL ) {
3147                                 free_local_pdev(pdev);
3148                                 return (-ENOMEM);
3149                         }
3150
3151                         /*
3152                          * The user passthru structure
3153                          */
3154                         upthru = (mega_passthru __user *)(unsigned long)MBOX(uioc)->xferaddr;
3155
3156                         /*
3157                          * Copy in the user passthru here.
3158                          */
3159                         if( copy_from_user(pthru, upthru,
3160                                                 sizeof(mega_passthru)) ) {
3161
3162                                 dma_free_coherent(&pdev->dev,
3163                                                   sizeof(mega_passthru),
3164                                                   pthru, pthru_dma_hndl);
3165
3166                                 free_local_pdev(pdev);
3167
3168                                 return (-EFAULT);
3169                         }
3170
3171                         /*
3172                          * Is there a data transfer
3173                          */
3174                         if( pthru->dataxferlen ) {
3175                                 data = dma_alloc_coherent(&pdev->dev,
3176                                                           pthru->dataxferlen,
3177                                                           &data_dma_hndl,
3178                                                           GFP_KERNEL);
3179
3180                                 if( data == NULL ) {
3181                                         dma_free_coherent(&pdev->dev,
3182                                                           sizeof(mega_passthru),
3183                                                           pthru,
3184                                                           pthru_dma_hndl);
3185
3186                                         free_local_pdev(pdev);
3187
3188                                         return (-ENOMEM);
3189                                 }
3190
3191                                 /*
3192                                  * Save the user address and point the kernel
3193                                  * address at just allocated memory
3194                                  */
3195                                 uxferaddr = pthru->dataxferaddr;
3196                                 pthru->dataxferaddr = data_dma_hndl;
3197                         }
3198
3199
3200                         /*
3201                          * Is data coming down-stream
3202                          */
3203                         if( pthru->dataxferlen && (uioc.flags & UIOC_WR) ) {
3204                                 /*
3205                                  * Get the user data
3206                                  */
3207                                 if( copy_from_user(data, (char __user *)(unsigned long) uxferaddr,
3208                                                         pthru->dataxferlen) ) {
3209                                         rval = (-EFAULT);
3210                                         goto freemem_and_return;
3211                                 }
3212                         }
3213
3214                         memset(&mc, 0, sizeof(megacmd_t));
3215
3216                         mc.cmd = MEGA_MBOXCMD_PASSTHRU;
3217                         mc.xferaddr = (u32)pthru_dma_hndl;
3218
3219                         /*
3220                          * Issue the command
3221                          */
3222                         mega_internal_command(adapter, &mc, pthru);
3223
3224                         rval = mega_n_to_m((void __user *)arg, &mc);
3225
3226                         if( rval ) goto freemem_and_return;
3227
3228
3229                         /*
3230                          * Is data going up-stream
3231                          */
3232                         if( pthru->dataxferlen && (uioc.flags & UIOC_RD) ) {
3233                                 if( copy_to_user((char __user *)(unsigned long) uxferaddr, data,
3234                                                         pthru->dataxferlen) ) {
3235                                         rval = (-EFAULT);
3236                                 }
3237                         }
3238
3239                         /*
3240                          * Send the request sense data also, irrespective of
3241                          * whether the user has asked for it or not.
3242                          */
3243                         if (copy_to_user(upthru->reqsensearea,
3244                                         pthru->reqsensearea, 14))
3245                                 rval = -EFAULT;
3246
3247 freemem_and_return:
3248                         if( pthru->dataxferlen ) {
3249                                 dma_free_coherent(&pdev->dev,
3250                                                   pthru->dataxferlen, data,
3251                                                   data_dma_hndl);
3252                         }
3253
3254                         dma_free_coherent(&pdev->dev, sizeof(mega_passthru),
3255                                           pthru, pthru_dma_hndl);
3256
3257                         free_local_pdev(pdev);
3258
3259                         return rval;
3260                 }
3261                 else {
3262                         /* DCMD commands */
3263
3264                         /*
3265                          * Is there a data transfer
3266                          */
3267                         if( uioc.xferlen ) {
3268                                 data = dma_alloc_coherent(&pdev->dev,
3269                                                           uioc.xferlen,
3270                                                           &data_dma_hndl,
3271                                                           GFP_KERNEL);
3272
3273                                 if( data == NULL ) {
3274                                         free_local_pdev(pdev);
3275                                         return (-ENOMEM);
3276                                 }
3277
3278                                 uxferaddr = MBOX(uioc)->xferaddr;
3279                         }
3280
3281                         /*
3282                          * Is data coming down-stream
3283                          */
3284                         if( uioc.xferlen && (uioc.flags & UIOC_WR) ) {
3285                                 /*
3286                                  * Get the user data
3287                                  */
3288                                 if( copy_from_user(data, (char __user *)(unsigned long) uxferaddr,
3289                                                         uioc.xferlen) ) {
3290
3291                                         dma_free_coherent(&pdev->dev,
3292                                                           uioc.xferlen, data,
3293                                                           data_dma_hndl);
3294
3295                                         free_local_pdev(pdev);
3296
3297                                         return (-EFAULT);
3298                                 }
3299                         }
3300
3301                         memcpy(&mc, MBOX(uioc), sizeof(megacmd_t));
3302
3303                         mc.xferaddr = (u32)data_dma_hndl;
3304
3305                         /*
3306                          * Issue the command
3307                          */
3308                         mega_internal_command(adapter, &mc, NULL);
3309
3310                         rval = mega_n_to_m((void __user *)arg, &mc);
3311
3312                         if( rval ) {
3313                                 if( uioc.xferlen ) {
3314                                         dma_free_coherent(&pdev->dev,
3315                                                           uioc.xferlen, data,
3316                                                           data_dma_hndl);
3317                                 }
3318
3319                                 free_local_pdev(pdev);
3320
3321                                 return rval;
3322                         }
3323
3324                         /*
3325                          * Is data going up-stream
3326                          */
3327                         if( uioc.xferlen && (uioc.flags & UIOC_RD) ) {
3328                                 if( copy_to_user((char __user *)(unsigned long) uxferaddr, data,
3329                                                         uioc.xferlen) ) {
3330
3331                                         rval = (-EFAULT);
3332                                 }
3333                         }
3334
3335                         if( uioc.xferlen ) {
3336                                 dma_free_coherent(&pdev->dev, uioc.xferlen,
3337                                                   data, data_dma_hndl);
3338                         }
3339
3340                         free_local_pdev(pdev);
3341
3342                         return rval;
3343                 }
3344
3345         default:
3346                 return (-EINVAL);
3347         }
3348
3349         return 0;
3350 }
3351
3352 static long
3353 megadev_unlocked_ioctl(struct file *filep, unsigned int cmd, unsigned long arg)
3354 {
3355         int ret;
3356
3357         mutex_lock(&megadev_mutex);
3358         ret = megadev_ioctl(filep, cmd, arg);
3359         mutex_unlock(&megadev_mutex);
3360
3361         return ret;
3362 }
3363
3364 /**
3365  * mega_m_to_n()
3366  * @arg: user address
3367  * @uioc: new ioctl structure
3368  *
3369  * A thin layer to convert older mimd interface ioctl structure to NIT ioctl
3370  * structure
3371  *
3372  * Converts the older mimd ioctl structure to newer NIT structure
3373  */
3374 static int
3375 mega_m_to_n(void __user *arg, nitioctl_t *uioc)
3376 {
3377         struct uioctl_t uioc_mimd;
3378         char    signature[8] = {0};
3379         u8      opcode;
3380         u8      subopcode;
3381
3382
3383         /*
3384          * check is the application conforms to NIT. We do not have to do much
3385          * in that case.
3386          * We exploit the fact that the signature is stored in the very
3387          * beginning of the structure.
3388          */
3389
3390         if( copy_from_user(signature, arg, 7) )
3391                 return (-EFAULT);
3392
3393         if( memcmp(signature, "MEGANIT", 7) == 0 ) {
3394
3395                 /*
3396                  * NOTE NOTE: The nit ioctl is still under flux because of
3397                  * change of mailbox definition, in HPE. No applications yet
3398                  * use this interface and let's not have applications use this
3399                  * interface till the new specifitions are in place.
3400                  */
3401                 return -EINVAL;
3402 #if 0
3403                 if( copy_from_user(uioc, arg, sizeof(nitioctl_t)) )
3404                         return (-EFAULT);
3405                 return 0;
3406 #endif
3407         }
3408
3409         /*
3410          * Else assume we have mimd uioctl_t as arg. Convert to nitioctl_t
3411          *
3412          * Get the user ioctl structure
3413          */
3414         if( copy_from_user(&uioc_mimd, arg, sizeof(struct uioctl_t)) )
3415                 return (-EFAULT);
3416
3417
3418         /*
3419          * Get the opcode and subopcode for the commands
3420          */
3421         opcode = uioc_mimd.ui.fcs.opcode;
3422         subopcode = uioc_mimd.ui.fcs.subopcode;
3423
3424         switch (opcode) {
3425         case 0x82:
3426
3427                 switch (subopcode) {
3428
3429                 case MEGAIOC_QDRVRVER:  /* Query driver version */
3430                         uioc->opcode = GET_DRIVER_VER;
3431                         uioc->uioc_uaddr = uioc_mimd.data;
3432                         break;
3433
3434                 case MEGAIOC_QNADAP:    /* Get # of adapters */
3435                         uioc->opcode = GET_N_ADAP;
3436                         uioc->uioc_uaddr = uioc_mimd.data;
3437                         break;
3438
3439                 case MEGAIOC_QADAPINFO: /* Get adapter information */
3440                         uioc->opcode = GET_ADAP_INFO;
3441                         uioc->adapno = uioc_mimd.ui.fcs.adapno;
3442                         uioc->uioc_uaddr = uioc_mimd.data;
3443                         break;
3444
3445                 default:
3446                         return(-EINVAL);
3447                 }
3448
3449                 break;
3450
3451
3452         case 0x81:
3453
3454                 uioc->opcode = MBOX_CMD;
3455                 uioc->adapno = uioc_mimd.ui.fcs.adapno;
3456
3457                 memcpy(uioc->uioc_rmbox, uioc_mimd.mbox, 18);
3458
3459                 uioc->xferlen = uioc_mimd.ui.fcs.length;
3460
3461                 if( uioc_mimd.outlen ) uioc->flags = UIOC_RD;
3462                 if( uioc_mimd.inlen ) uioc->flags |= UIOC_WR;
3463
3464                 break;
3465
3466         case 0x80:
3467
3468                 uioc->opcode = MBOX_CMD;
3469                 uioc->adapno = uioc_mimd.ui.fcs.adapno;
3470
3471                 memcpy(uioc->uioc_rmbox, uioc_mimd.mbox, 18);
3472
3473                 /*
3474                  * Choose the xferlen bigger of input and output data
3475                  */
3476                 uioc->xferlen = uioc_mimd.outlen > uioc_mimd.inlen ?
3477                         uioc_mimd.outlen : uioc_mimd.inlen;
3478
3479                 if( uioc_mimd.outlen ) uioc->flags = UIOC_RD;
3480                 if( uioc_mimd.inlen ) uioc->flags |= UIOC_WR;
3481
3482                 break;
3483
3484         default:
3485                 return (-EINVAL);
3486
3487         }
3488
3489         return 0;
3490 }
3491
3492 /*
3493  * mega_n_to_m()
3494  * @arg: user address
3495  * @mc: mailbox command
3496  *
3497  * Updates the status information to the application, depending on application
3498  * conforms to older mimd ioctl interface or newer NIT ioctl interface
3499  */
3500 static int
3501 mega_n_to_m(void __user *arg, megacmd_t *mc)
3502 {
3503         nitioctl_t      __user *uiocp;
3504         megacmd_t       __user *umc;
3505         mega_passthru   __user *upthru;
3506         struct uioctl_t __user *uioc_mimd;
3507         char    signature[8] = {0};
3508
3509         /*
3510          * check is the application conforms to NIT.
3511          */
3512         if( copy_from_user(signature, arg, 7) )
3513                 return -EFAULT;
3514
3515         if( memcmp(signature, "MEGANIT", 7) == 0 ) {
3516
3517                 uiocp = arg;
3518
3519                 if( put_user(mc->status, (u8 __user *)&MBOX_P(uiocp)->status) )
3520                         return (-EFAULT);
3521
3522                 if( mc->cmd == MEGA_MBOXCMD_PASSTHRU ) {
3523
3524                         umc = MBOX_P(uiocp);
3525
3526                         if (get_user(upthru, (mega_passthru __user * __user *)&umc->xferaddr))
3527                                 return -EFAULT;
3528
3529                         if( put_user(mc->status, (u8 __user *)&upthru->scsistatus))
3530                                 return (-EFAULT);
3531                 }
3532         }
3533         else {
3534                 uioc_mimd = arg;
3535
3536                 if( put_user(mc->status, (u8 __user *)&uioc_mimd->mbox[17]) )
3537                         return (-EFAULT);
3538
3539                 if( mc->cmd == MEGA_MBOXCMD_PASSTHRU ) {
3540
3541                         umc = (megacmd_t __user *)uioc_mimd->mbox;
3542
3543                         if (get_user(upthru, (mega_passthru __user * __user *)&umc->xferaddr))
3544                                 return (-EFAULT);
3545
3546                         if( put_user(mc->status, (u8 __user *)&upthru->scsistatus) )
3547                                 return (-EFAULT);
3548                 }
3549         }
3550
3551         return 0;
3552 }
3553
3554
3555 /*
3556  * MEGARAID 'FW' commands.
3557  */
3558
3559 /**
3560  * mega_is_bios_enabled()
3561  * @adapter: pointer to our soft state
3562  *
3563  * issue command to find out if the BIOS is enabled for this controller
3564  */
3565 static int
3566 mega_is_bios_enabled(adapter_t *adapter)
3567 {
3568         struct mbox_out mbox;
3569         unsigned char   *raw_mbox = (u8 *)&mbox;
3570
3571         memset(&mbox, 0, sizeof(mbox));
3572
3573         memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
3574
3575         mbox.xferaddr = (u32)adapter->buf_dma_handle;
3576
3577         raw_mbox[0] = IS_BIOS_ENABLED;
3578         raw_mbox[2] = GET_BIOS;
3579
3580         issue_scb_block(adapter, raw_mbox);
3581
3582         return *(char *)adapter->mega_buffer;
3583 }
3584
3585
3586 /**
3587  * mega_enum_raid_scsi()
3588  * @adapter: pointer to our soft state
3589  *
3590  * Find out what channels are RAID/SCSI. This information is used to
3591  * differentiate the virtual channels and physical channels and to support
3592  * ROMB feature and non-disk devices.
3593  */
3594 static void
3595 mega_enum_raid_scsi(adapter_t *adapter)
3596 {
3597         struct mbox_out mbox;
3598         unsigned char   *raw_mbox = (u8 *)&mbox;
3599         int i;
3600
3601         memset(&mbox, 0, sizeof(mbox));
3602
3603         /*
3604          * issue command to find out what channels are raid/scsi
3605          */
3606         raw_mbox[0] = CHNL_CLASS;
3607         raw_mbox[2] = GET_CHNL_CLASS;
3608
3609         memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
3610
3611         mbox.xferaddr = (u32)adapter->buf_dma_handle;
3612
3613         /*
3614          * Non-ROMB firmware fail this command, so all channels
3615          * must be shown RAID
3616          */
3617         adapter->mega_ch_class = 0xFF;
3618
3619         if(!issue_scb_block(adapter, raw_mbox)) {
3620                 adapter->mega_ch_class = *((char *)adapter->mega_buffer);
3621
3622         }
3623
3624         for( i = 0; i < adapter->product_info.nchannels; i++ ) { 
3625                 if( (adapter->mega_ch_class >> i) & 0x01 ) {
3626                         dev_info(&adapter->dev->dev, "channel[%d] is raid\n",
3627                                         i);
3628                 }
3629                 else {
3630                         dev_info(&adapter->dev->dev, "channel[%d] is scsi\n",
3631                                         i);
3632                 }
3633         }
3634
3635         return;
3636 }
3637
3638
3639 /**
3640  * mega_get_boot_drv()
3641  * @adapter: pointer to our soft state
3642  *
3643  * Find out which device is the boot device. Note, any logical drive or any
3644  * phyical device (e.g., a CDROM) can be designated as a boot device.
3645  */
3646 static void
3647 mega_get_boot_drv(adapter_t *adapter)
3648 {
3649         struct private_bios_data        *prv_bios_data;
3650         struct mbox_out mbox;
3651         unsigned char   *raw_mbox = (u8 *)&mbox;
3652         u16     cksum = 0;
3653         u8      *cksum_p;
3654         u8      boot_pdrv;
3655         int     i;
3656
3657         memset(&mbox, 0, sizeof(mbox));
3658
3659         raw_mbox[0] = BIOS_PVT_DATA;
3660         raw_mbox[2] = GET_BIOS_PVT_DATA;
3661
3662         memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
3663
3664         mbox.xferaddr = (u32)adapter->buf_dma_handle;
3665
3666         adapter->boot_ldrv_enabled = 0;
3667         adapter->boot_ldrv = 0;
3668
3669         adapter->boot_pdrv_enabled = 0;
3670         adapter->boot_pdrv_ch = 0;
3671         adapter->boot_pdrv_tgt = 0;
3672
3673         if(issue_scb_block(adapter, raw_mbox) == 0) {
3674                 prv_bios_data =
3675                         (struct private_bios_data *)adapter->mega_buffer;
3676
3677                 cksum = 0;
3678                 cksum_p = (char *)prv_bios_data;
3679                 for (i = 0; i < 14; i++ ) {
3680                         cksum += (u16)(*cksum_p++);
3681                 }
3682
3683                 if (prv_bios_data->cksum == (u16)(0-cksum) ) {
3684
3685                         /*
3686                          * If MSB is set, a physical drive is set as boot
3687                          * device
3688                          */
3689                         if( prv_bios_data->boot_drv & 0x80 ) {
3690                                 adapter->boot_pdrv_enabled = 1;
3691                                 boot_pdrv = prv_bios_data->boot_drv & 0x7F;
3692                                 adapter->boot_pdrv_ch = boot_pdrv / 16;
3693                                 adapter->boot_pdrv_tgt = boot_pdrv % 16;
3694                         }
3695                         else {
3696                                 adapter->boot_ldrv_enabled = 1;
3697                                 adapter->boot_ldrv = prv_bios_data->boot_drv;
3698                         }
3699                 }
3700         }
3701
3702 }
3703
3704 /**
3705  * mega_support_random_del()
3706  * @adapter: pointer to our soft state
3707  *
3708  * Find out if this controller supports random deletion and addition of
3709  * logical drives
3710  */
3711 static int
3712 mega_support_random_del(adapter_t *adapter)
3713 {
3714         struct mbox_out mbox;
3715         unsigned char   *raw_mbox = (u8 *)&mbox;
3716         int rval;
3717
3718         memset(&mbox, 0, sizeof(mbox));
3719
3720         /*
3721          * issue command
3722          */
3723         raw_mbox[0] = FC_DEL_LOGDRV;
3724         raw_mbox[2] = OP_SUP_DEL_LOGDRV;
3725
3726         rval = issue_scb_block(adapter, raw_mbox);
3727
3728         return !rval;
3729 }
3730
3731
3732 /**
3733  * mega_support_ext_cdb()
3734  * @adapter: pointer to our soft state
3735  *
3736  * Find out if this firmware support cdblen > 10
3737  */
3738 static int
3739 mega_support_ext_cdb(adapter_t *adapter)
3740 {
3741         struct mbox_out mbox;
3742         unsigned char   *raw_mbox = (u8 *)&mbox;
3743         int rval;
3744
3745         memset(&mbox, 0, sizeof(mbox));
3746         /*
3747          * issue command to find out if controller supports extended CDBs.
3748          */
3749         raw_mbox[0] = 0xA4;
3750         raw_mbox[2] = 0x16;
3751
3752         rval = issue_scb_block(adapter, raw_mbox);
3753
3754         return !rval;
3755 }
3756
3757
3758 /**
3759  * mega_del_logdrv()
3760  * @adapter: pointer to our soft state
3761  * @logdrv: logical drive to be deleted
3762  *
3763  * Delete the specified logical drive. It is the responsibility of the user
3764  * app to let the OS know about this operation.
3765  */
3766 static int
3767 mega_del_logdrv(adapter_t *adapter, int logdrv)
3768 {
3769         unsigned long flags;
3770         scb_t *scb;
3771         int rval;
3772
3773         /*
3774          * Stop sending commands to the controller, queue them internally.
3775          * When deletion is complete, ISR will flush the queue.
3776          */
3777         atomic_set(&adapter->quiescent, 1);
3778
3779         /*
3780          * Wait till all the issued commands are complete and there are no
3781          * commands in the pending queue
3782          */
3783         while (atomic_read(&adapter->pend_cmds) > 0 ||
3784                !list_empty(&adapter->pending_list))
3785                 msleep(1000);   /* sleep for 1s */
3786
3787         rval = mega_do_del_logdrv(adapter, logdrv);
3788
3789         spin_lock_irqsave(&adapter->lock, flags);
3790
3791         /*
3792          * If delete operation was successful, add 0x80 to the logical drive
3793          * ids for commands in the pending queue.
3794          */
3795         if (adapter->read_ldidmap) {
3796                 struct list_head *pos;
3797                 list_for_each(pos, &adapter->pending_list) {
3798                         scb = list_entry(pos, scb_t, list);
3799                         if (scb->pthru->logdrv < 0x80 )
3800                                 scb->pthru->logdrv += 0x80;
3801                 }
3802         }
3803
3804         atomic_set(&adapter->quiescent, 0);
3805
3806         mega_runpendq(adapter);
3807
3808         spin_unlock_irqrestore(&adapter->lock, flags);
3809
3810         return rval;
3811 }
3812
3813
3814 static int
3815 mega_do_del_logdrv(adapter_t *adapter, int logdrv)
3816 {
3817         megacmd_t       mc;
3818         int     rval;
3819
3820         memset( &mc, 0, sizeof(megacmd_t));
3821
3822         mc.cmd = FC_DEL_LOGDRV;
3823         mc.opcode = OP_DEL_LOGDRV;
3824         mc.subopcode = logdrv;
3825
3826         rval = mega_internal_command(adapter, &mc, NULL);
3827
3828         /* log this event */
3829         if(rval) {
3830                 dev_warn(&adapter->dev->dev, "Delete LD-%d failed", logdrv);
3831                 return rval;
3832         }
3833
3834         /*
3835          * After deleting first logical drive, the logical drives must be
3836          * addressed by adding 0x80 to the logical drive id.
3837          */
3838         adapter->read_ldidmap = 1;
3839
3840         return rval;
3841 }
3842
3843
3844 /**
3845  * mega_get_max_sgl()
3846  * @adapter: pointer to our soft state
3847  *
3848  * Find out the maximum number of scatter-gather elements supported by this
3849  * version of the firmware
3850  */
3851 static void
3852 mega_get_max_sgl(adapter_t *adapter)
3853 {
3854         struct mbox_out mbox;
3855         unsigned char   *raw_mbox = (u8 *)&mbox;
3856
3857         memset(&mbox, 0, sizeof(mbox));
3858
3859         memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
3860
3861         mbox.xferaddr = (u32)adapter->buf_dma_handle;
3862
3863         raw_mbox[0] = MAIN_MISC_OPCODE;
3864         raw_mbox[2] = GET_MAX_SG_SUPPORT;
3865
3866
3867         if( issue_scb_block(adapter, raw_mbox) ) {
3868                 /*
3869                  * f/w does not support this command. Choose the default value
3870                  */
3871                 adapter->sglen = MIN_SGLIST;
3872         }
3873         else {
3874                 adapter->sglen = *((char *)adapter->mega_buffer);
3875
3876                 /*
3877                  * Make sure this is not more than the resources we are
3878                  * planning to allocate
3879                  */
3880                 if ( adapter->sglen > MAX_SGLIST )
3881                         adapter->sglen = MAX_SGLIST;
3882         }
3883
3884         return;
3885 }
3886
3887
3888 /**
3889  * mega_support_cluster()
3890  * @adapter: pointer to our soft state
3891  *
3892  * Find out if this firmware support cluster calls.
3893  */
3894 static int
3895 mega_support_cluster(adapter_t *adapter)
3896 {
3897         struct mbox_out mbox;
3898         unsigned char   *raw_mbox = (u8 *)&mbox;
3899
3900         memset(&mbox, 0, sizeof(mbox));
3901
3902         memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
3903
3904         mbox.xferaddr = (u32)adapter->buf_dma_handle;
3905
3906         /*
3907          * Try to get the initiator id. This command will succeed iff the
3908          * clustering is available on this HBA.
3909          */
3910         raw_mbox[0] = MEGA_GET_TARGET_ID;
3911
3912         if( issue_scb_block(adapter, raw_mbox) == 0 ) {
3913
3914                 /*
3915                  * Cluster support available. Get the initiator target id.
3916                  * Tell our id to mid-layer too.
3917                  */
3918                 adapter->this_id = *(u32 *)adapter->mega_buffer;
3919                 adapter->host->this_id = adapter->this_id;
3920
3921                 return 1;
3922         }
3923
3924         return 0;
3925 }
3926
3927 #ifdef CONFIG_PROC_FS
3928 /**
3929  * mega_adapinq()
3930  * @adapter: pointer to our soft state
3931  * @dma_handle: DMA address of the buffer
3932  *
3933  * Issue internal commands while interrupts are available.
3934  * We only issue direct mailbox commands from within the driver. ioctl()
3935  * interface using these routines can issue passthru commands.
3936  */
3937 static int
3938 mega_adapinq(adapter_t *adapter, dma_addr_t dma_handle)
3939 {
3940         megacmd_t       mc;
3941
3942         memset(&mc, 0, sizeof(megacmd_t));
3943
3944         if( adapter->flag & BOARD_40LD ) {
3945                 mc.cmd = FC_NEW_CONFIG;
3946                 mc.opcode = NC_SUBOP_ENQUIRY3;
3947                 mc.subopcode = ENQ3_GET_SOLICITED_FULL;
3948         }
3949         else {
3950                 mc.cmd = MEGA_MBOXCMD_ADPEXTINQ;
3951         }
3952
3953         mc.xferaddr = (u32)dma_handle;
3954
3955         if ( mega_internal_command(adapter, &mc, NULL) != 0 ) {
3956                 return -1;
3957         }
3958
3959         return 0;
3960 }
3961
3962
3963 /**
3964  * mega_internal_dev_inquiry()
3965  * @adapter: pointer to our soft state
3966  * @ch: channel for this device
3967  * @tgt: ID of this device
3968  * @buf_dma_handle: DMA address of the buffer
3969  *
3970  * Issue the scsi inquiry for the specified device.
3971  */
3972 static int
3973 mega_internal_dev_inquiry(adapter_t *adapter, u8 ch, u8 tgt,
3974                 dma_addr_t buf_dma_handle)
3975 {
3976         mega_passthru   *pthru;
3977         dma_addr_t      pthru_dma_handle;
3978         megacmd_t       mc;
3979         int             rval;
3980         struct pci_dev  *pdev;
3981
3982
3983         /*
3984          * For all internal commands, the buffer must be allocated in <4GB
3985          * address range
3986          */
3987         if( make_local_pdev(adapter, &pdev) != 0 ) return -1;
3988
3989         pthru = dma_alloc_coherent(&pdev->dev, sizeof(mega_passthru),
3990                                    &pthru_dma_handle, GFP_KERNEL);
3991
3992         if( pthru == NULL ) {
3993                 free_local_pdev(pdev);
3994                 return -1;
3995         }
3996
3997         pthru->timeout = 2;
3998         pthru->ars = 1;
3999         pthru->reqsenselen = 14;
4000         pthru->islogical = 0;
4001
4002         pthru->channel = (adapter->flag & BOARD_40LD) ? 0 : ch;
4003
4004         pthru->target = (adapter->flag & BOARD_40LD) ? (ch << 4)|tgt : tgt;
4005
4006         pthru->cdblen = 6;
4007
4008         pthru->cdb[0] = INQUIRY;
4009         pthru->cdb[1] = 0;
4010         pthru->cdb[2] = 0;
4011         pthru->cdb[3] = 0;
4012         pthru->cdb[4] = 255;
4013         pthru->cdb[5] = 0;
4014
4015
4016         pthru->dataxferaddr = (u32)buf_dma_handle;
4017         pthru->dataxferlen = 256;
4018
4019         memset(&mc, 0, sizeof(megacmd_t));
4020
4021         mc.cmd = MEGA_MBOXCMD_PASSTHRU;
4022         mc.xferaddr = (u32)pthru_dma_handle;
4023
4024         rval = mega_internal_command(adapter, &mc, pthru);
4025
4026         dma_free_coherent(&pdev->dev, sizeof(mega_passthru), pthru,
4027                           pthru_dma_handle);
4028
4029         free_local_pdev(pdev);
4030
4031         return rval;
4032 }
4033 #endif
4034
4035 /**
4036  * mega_internal_command()
4037  * @adapter: pointer to our soft state
4038  * @mc: the mailbox command
4039  * @pthru: Passthru structure for DCDB commands
4040  *
4041  * Issue the internal commands in interrupt mode.
4042  * The last argument is the address of the passthru structure if the command
4043  * to be fired is a passthru command
4044  *
4045  * Note: parameter 'pthru' is null for non-passthru commands.
4046  */
4047 static int
4048 mega_internal_command(adapter_t *adapter, megacmd_t *mc, mega_passthru *pthru)
4049 {
4050         unsigned long flags;
4051         scb_t   *scb;
4052         int     rval;
4053
4054         /*
4055          * The internal commands share one command id and hence are
4056          * serialized. This is so because we want to reserve maximum number of
4057          * available command ids for the I/O commands.
4058          */
4059         mutex_lock(&adapter->int_mtx);
4060
4061         scb = &adapter->int_scb;
4062         memset(scb, 0, sizeof(scb_t));
4063
4064         scb->idx = CMDID_INT_CMDS;
4065         scb->state |= SCB_ACTIVE | SCB_PENDQ;
4066
4067         memcpy(scb->raw_mbox, mc, sizeof(megacmd_t));
4068
4069         /*
4070          * Is it a passthru command
4071          */
4072         if (mc->cmd == MEGA_MBOXCMD_PASSTHRU)
4073                 scb->pthru = pthru;
4074
4075         spin_lock_irqsave(&adapter->lock, flags);
4076         list_add_tail(&scb->list, &adapter->pending_list);
4077         /*
4078          * Check if the HBA is in quiescent state, e.g., during a
4079          * delete logical drive opertion. If it is, don't run
4080          * the pending_list.
4081          */
4082         if (atomic_read(&adapter->quiescent) == 0)
4083                 mega_runpendq(adapter);
4084         spin_unlock_irqrestore(&adapter->lock, flags);
4085
4086         wait_for_completion(&adapter->int_waitq);
4087
4088         mc->status = rval = adapter->int_status;
4089
4090         /*
4091          * Print a debug message for all failed commands. Applications can use
4092          * this information.
4093          */
4094         if (rval && trace_level) {
4095                 dev_info(&adapter->dev->dev, "cmd [%x, %x, %x] status:[%x]\n",
4096                         mc->cmd, mc->opcode, mc->subopcode, rval);
4097         }
4098
4099         mutex_unlock(&adapter->int_mtx);
4100         return rval;
4101 }
4102
4103 static struct scsi_host_template megaraid_template = {
4104         .module                         = THIS_MODULE,
4105         .name                           = "MegaRAID",
4106         .proc_name                      = "megaraid_legacy",
4107         .info                           = megaraid_info,
4108         .queuecommand                   = megaraid_queue,       
4109         .bios_param                     = megaraid_biosparam,
4110         .max_sectors                    = MAX_SECTORS_PER_IO,
4111         .can_queue                      = MAX_COMMANDS,
4112         .this_id                        = DEFAULT_INITIATOR_ID,
4113         .sg_tablesize                   = MAX_SGLIST,
4114         .cmd_per_lun                    = DEF_CMD_PER_LUN,
4115         .eh_abort_handler               = megaraid_abort,
4116         .eh_device_reset_handler        = megaraid_reset,
4117         .eh_bus_reset_handler           = megaraid_reset,
4118         .eh_host_reset_handler          = megaraid_reset,
4119         .no_write_same                  = 1,
4120         .cmd_size                       = sizeof(struct megaraid_cmd_priv),
4121 };
4122
4123 static int
4124 megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
4125 {
4126         struct Scsi_Host *host;
4127         adapter_t *adapter;
4128         unsigned long mega_baseport, tbase, flag = 0;
4129         u16 subsysid, subsysvid;
4130         u8 pci_bus, pci_dev_func;
4131         int irq, i, j;
4132         int error = -ENODEV;
4133
4134         if (hba_count >= MAX_CONTROLLERS)
4135                 goto out;
4136
4137         if (pci_enable_device(pdev))
4138                 goto out;
4139         pci_set_master(pdev);
4140
4141         pci_bus = pdev->bus->number;
4142         pci_dev_func = pdev->devfn;
4143
4144         /*
4145          * The megaraid3 stuff reports the ID of the Intel part which is not
4146          * remotely specific to the megaraid
4147          */
4148         if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
4149                 u16 magic;
4150                 /*
4151                  * Don't fall over the Compaq management cards using the same
4152                  * PCI identifier
4153                  */
4154                 if (pdev->subsystem_vendor == PCI_VENDOR_ID_COMPAQ &&
4155                     pdev->subsystem_device == 0xC000)
4156                         goto out_disable_device;
4157                 /* Now check the magic signature byte */
4158                 pci_read_config_word(pdev, PCI_CONF_AMISIG, &magic);
4159                 if (magic != HBA_SIGNATURE_471 && magic != HBA_SIGNATURE)
4160                         goto out_disable_device;
4161                 /* Ok it is probably a megaraid */
4162         }
4163
4164         /*
4165          * For these vendor and device ids, signature offsets are not
4166          * valid and 64 bit is implicit
4167          */
4168         if (id->driver_data & BOARD_64BIT)
4169                 flag |= BOARD_64BIT;
4170         else {
4171                 u32 magic64;
4172
4173                 pci_read_config_dword(pdev, PCI_CONF_AMISIG64, &magic64);
4174                 if (magic64 == HBA_SIGNATURE_64BIT)
4175                         flag |= BOARD_64BIT;
4176         }
4177
4178         subsysvid = pdev->subsystem_vendor;
4179         subsysid = pdev->subsystem_device;
4180
4181         dev_notice(&pdev->dev, "found 0x%4.04x:0x%4.04x\n",
4182                 id->vendor, id->device);
4183
4184         /* Read the base port and IRQ from PCI */
4185         mega_baseport = pci_resource_start(pdev, 0);
4186         irq = pdev->irq;
4187
4188         tbase = mega_baseport;
4189         if (pci_resource_flags(pdev, 0) & IORESOURCE_MEM) {
4190                 flag |= BOARD_MEMMAP;
4191
4192                 if (!request_mem_region(mega_baseport, 128, "megaraid")) {
4193                         dev_warn(&pdev->dev, "mem region busy!\n");
4194                         goto out_disable_device;
4195                 }
4196
4197                 mega_baseport = (unsigned long)ioremap(mega_baseport, 128);
4198                 if (!mega_baseport) {
4199                         dev_warn(&pdev->dev, "could not map hba memory\n");
4200                         goto out_release_region;
4201                 }
4202         } else {
4203                 flag |= BOARD_IOMAP;
4204                 mega_baseport += 0x10;
4205
4206                 if (!request_region(mega_baseport, 16, "megaraid"))
4207                         goto out_disable_device;
4208         }
4209
4210         /* Initialize SCSI Host structure */
4211         host = scsi_host_alloc(&megaraid_template, sizeof(adapter_t));
4212         if (!host)
4213                 goto out_iounmap;
4214
4215         adapter = (adapter_t *)host->hostdata;
4216         memset(adapter, 0, sizeof(adapter_t));
4217
4218         dev_notice(&pdev->dev,
4219                 "scsi%d:Found MegaRAID controller at 0x%lx, IRQ:%d\n",
4220                 host->host_no, mega_baseport, irq);
4221
4222         adapter->base = mega_baseport;
4223         if (flag & BOARD_MEMMAP)
4224                 adapter->mmio_base = (void __iomem *) mega_baseport;
4225
4226         INIT_LIST_HEAD(&adapter->free_list);
4227         INIT_LIST_HEAD(&adapter->pending_list);
4228         INIT_LIST_HEAD(&adapter->completed_list);
4229
4230         adapter->flag = flag;
4231         spin_lock_init(&adapter->lock);
4232
4233         host->cmd_per_lun = max_cmd_per_lun;
4234         host->max_sectors = max_sectors_per_io;
4235
4236         adapter->dev = pdev;
4237         adapter->host = host;
4238
4239         adapter->host->irq = irq;
4240
4241         if (flag & BOARD_MEMMAP)
4242                 adapter->host->base = tbase;
4243         else {
4244                 adapter->host->io_port = tbase;
4245                 adapter->host->n_io_port = 16;
4246         }
4247
4248         adapter->host->unique_id = (pci_bus << 8) | pci_dev_func;
4249
4250         /*
4251          * Allocate buffer to issue internal commands.
4252          */
4253         adapter->mega_buffer = dma_alloc_coherent(&adapter->dev->dev,
4254                                                   MEGA_BUFFER_SIZE,
4255                                                   &adapter->buf_dma_handle,
4256                                                   GFP_KERNEL);
4257         if (!adapter->mega_buffer) {
4258                 dev_warn(&pdev->dev, "out of RAM\n");
4259                 goto out_host_put;
4260         }
4261
4262         adapter->scb_list = kmalloc_array(MAX_COMMANDS, sizeof(scb_t),
4263                                           GFP_KERNEL);
4264         if (!adapter->scb_list) {
4265                 dev_warn(&pdev->dev, "out of RAM\n");
4266                 goto out_free_cmd_buffer;
4267         }
4268
4269         if (request_irq(irq, (adapter->flag & BOARD_MEMMAP) ?
4270                                 megaraid_isr_memmapped : megaraid_isr_iomapped,
4271                                         IRQF_SHARED, "megaraid", adapter)) {
4272                 dev_warn(&pdev->dev, "Couldn't register IRQ %d!\n", irq);
4273                 goto out_free_scb_list;
4274         }
4275
4276         if (mega_setup_mailbox(adapter))
4277                 goto out_free_irq;
4278
4279         if (mega_query_adapter(adapter))
4280                 goto out_free_mbox;
4281
4282         /*
4283          * Have checks for some buggy f/w
4284          */
4285         if ((subsysid == 0x1111) && (subsysvid == 0x1111)) {
4286                 /*
4287                  * Which firmware
4288                  */
4289                 if (!strcmp(adapter->fw_version, "3.00") ||
4290                                 !strcmp(adapter->fw_version, "3.01")) {
4291
4292                         dev_warn(&pdev->dev,
4293                                 "Your card is a Dell PERC "
4294                                 "2/SC RAID controller with "
4295                                 "firmware\nmegaraid: 3.00 or 3.01.  "
4296                                 "This driver is known to have "
4297                                 "corruption issues\nmegaraid: with "
4298                                 "those firmware versions on this "
4299                                 "specific card.  In order\nmegaraid: "
4300                                 "to protect your data, please upgrade "
4301                                 "your firmware to version\nmegaraid: "
4302                                 "3.10 or later, available from the "
4303                                 "Dell Technical Support web\n"
4304                                 "megaraid: site at\nhttp://support."
4305                                 "dell.com/us/en/filelib/download/"
4306                                 "index.asp?fileid=2940\n"
4307                         );
4308                 }
4309         }
4310
4311         /*
4312          * If we have a HP 1M(0x60E7)/2M(0x60E8) controller with
4313          * firmware H.01.07, H.01.08, and H.01.09 disable 64 bit
4314          * support, since this firmware cannot handle 64 bit
4315          * addressing
4316          */
4317         if ((subsysvid == PCI_VENDOR_ID_HP) &&
4318             ((subsysid == 0x60E7) || (subsysid == 0x60E8))) {
4319                 /*
4320                  * which firmware
4321                  */
4322                 if (!strcmp(adapter->fw_version, "H01.07") ||
4323                     !strcmp(adapter->fw_version, "H01.08") ||
4324                     !strcmp(adapter->fw_version, "H01.09") ) {
4325                         dev_warn(&pdev->dev,
4326                                 "Firmware H.01.07, "
4327                                 "H.01.08, and H.01.09 on 1M/2M "
4328                                 "controllers\n"
4329                                 "do not support 64 bit "
4330                                 "addressing.\nDISABLING "
4331                                 "64 bit support.\n");
4332                         adapter->flag &= ~BOARD_64BIT;
4333                 }
4334         }
4335
4336         if (mega_is_bios_enabled(adapter))
4337                 mega_hbas[hba_count].is_bios_enabled = 1;
4338         mega_hbas[hba_count].hostdata_addr = adapter;
4339
4340         /*
4341          * Find out which channel is raid and which is scsi. This is
4342          * for ROMB support.
4343          */
4344         mega_enum_raid_scsi(adapter);
4345
4346         /*
4347          * Find out if a logical drive is set as the boot drive. If
4348          * there is one, will make that as the first logical drive.
4349          * ROMB: Do we have to boot from a physical drive. Then all
4350          * the physical drives would appear before the logical disks.
4351          * Else, all the physical drives would be exported to the mid
4352          * layer after logical drives.
4353          */
4354         mega_get_boot_drv(adapter);
4355
4356         if (adapter->boot_pdrv_enabled) {
4357                 j = adapter->product_info.nchannels;
4358                 for( i = 0; i < j; i++ )
4359                         adapter->logdrv_chan[i] = 0;
4360                 for( i = j; i < NVIRT_CHAN + j; i++ )
4361                         adapter->logdrv_chan[i] = 1;
4362         } else {
4363                 for (i = 0; i < NVIRT_CHAN; i++)
4364                         adapter->logdrv_chan[i] = 1;
4365                 for (i = NVIRT_CHAN; i < MAX_CHANNELS+NVIRT_CHAN; i++)
4366                         adapter->logdrv_chan[i] = 0;
4367                 adapter->mega_ch_class <<= NVIRT_CHAN;
4368         }
4369
4370         /*
4371          * Do we support random deletion and addition of logical
4372          * drives
4373          */
4374         adapter->read_ldidmap = 0;      /* set it after first logdrv
4375                                                    delete cmd */
4376         adapter->support_random_del = mega_support_random_del(adapter);
4377
4378         /* Initialize SCBs */
4379         if (mega_init_scb(adapter))
4380                 goto out_free_mbox;
4381
4382         /*
4383          * Reset the pending commands counter
4384          */
4385         atomic_set(&adapter->pend_cmds, 0);
4386
4387         /*
4388          * Reset the adapter quiescent flag
4389          */
4390         atomic_set(&adapter->quiescent, 0);
4391
4392         hba_soft_state[hba_count] = adapter;
4393
4394         /*
4395          * Fill in the structure which needs to be passed back to the
4396          * application when it does an ioctl() for controller related
4397          * information.
4398          */
4399         i = hba_count;
4400
4401         mcontroller[i].base = mega_baseport;
4402         mcontroller[i].irq = irq;
4403         mcontroller[i].numldrv = adapter->numldrv;
4404         mcontroller[i].pcibus = pci_bus;
4405         mcontroller[i].pcidev = id->device;
4406         mcontroller[i].pcifun = PCI_FUNC (pci_dev_func);
4407         mcontroller[i].pciid = -1;
4408         mcontroller[i].pcivendor = id->vendor;
4409         mcontroller[i].pcislot = PCI_SLOT(pci_dev_func);
4410         mcontroller[i].uid = (pci_bus << 8) | pci_dev_func;
4411
4412
4413         /* Set the Mode of addressing to 64 bit if we can */
4414         if ((adapter->flag & BOARD_64BIT) && (sizeof(dma_addr_t) == 8)) {
4415                 dma_set_mask(&pdev->dev, DMA_BIT_MASK(64));
4416                 adapter->has_64bit_addr = 1;
4417         } else  {
4418                 dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
4419                 adapter->has_64bit_addr = 0;
4420         }
4421                 
4422         mutex_init(&adapter->int_mtx);
4423         init_completion(&adapter->int_waitq);
4424
4425         adapter->this_id = DEFAULT_INITIATOR_ID;
4426         adapter->host->this_id = DEFAULT_INITIATOR_ID;
4427
4428 #if MEGA_HAVE_CLUSTERING
4429         /*
4430          * Is cluster support enabled on this controller
4431          * Note: In a cluster the HBAs ( the initiators ) will have
4432          * different target IDs and we cannot assume it to be 7. Call
4433          * to mega_support_cluster() will get the target ids also if
4434          * the cluster support is available
4435          */
4436         adapter->has_cluster = mega_support_cluster(adapter);
4437         if (adapter->has_cluster) {
4438                 dev_notice(&pdev->dev,
4439                         "Cluster driver, initiator id:%d\n",
4440                         adapter->this_id);
4441         }
4442 #endif
4443
4444         pci_set_drvdata(pdev, host);
4445
4446         mega_create_proc_entry(hba_count, mega_proc_dir_entry);
4447
4448         error = scsi_add_host(host, &pdev->dev);
4449         if (error)
4450                 goto out_free_mbox;
4451
4452         scsi_scan_host(host);
4453         hba_count++;
4454         return 0;
4455
4456  out_free_mbox:
4457         dma_free_coherent(&adapter->dev->dev, sizeof(mbox64_t),
4458                           adapter->una_mbox64, adapter->una_mbox64_dma);
4459  out_free_irq:
4460         free_irq(adapter->host->irq, adapter);
4461  out_free_scb_list:
4462         kfree(adapter->scb_list);
4463  out_free_cmd_buffer:
4464         dma_free_coherent(&adapter->dev->dev, MEGA_BUFFER_SIZE,
4465                           adapter->mega_buffer, adapter->buf_dma_handle);
4466  out_host_put:
4467         scsi_host_put(host);
4468  out_iounmap:
4469         if (flag & BOARD_MEMMAP)
4470                 iounmap((void *)mega_baseport);
4471  out_release_region:
4472         if (flag & BOARD_MEMMAP)
4473                 release_mem_region(tbase, 128);
4474         else
4475                 release_region(mega_baseport, 16);
4476  out_disable_device:
4477         pci_disable_device(pdev);
4478  out:
4479         return error;
4480 }
4481
4482 static void
4483 __megaraid_shutdown(adapter_t *adapter)
4484 {
4485         u_char  raw_mbox[sizeof(struct mbox_out)];
4486         mbox_t  *mbox = (mbox_t *)raw_mbox;
4487         int     i;
4488
4489         /* Flush adapter cache */
4490         memset(&mbox->m_out, 0, sizeof(raw_mbox));
4491         raw_mbox[0] = FLUSH_ADAPTER;
4492
4493         free_irq(adapter->host->irq, adapter);
4494
4495         /* Issue a blocking (interrupts disabled) command to the card */
4496         issue_scb_block(adapter, raw_mbox);
4497
4498         /* Flush disks cache */
4499         memset(&mbox->m_out, 0, sizeof(raw_mbox));
4500         raw_mbox[0] = FLUSH_SYSTEM;
4501
4502         /* Issue a blocking (interrupts disabled) command to the card */
4503         issue_scb_block(adapter, raw_mbox);
4504         
4505         if (atomic_read(&adapter->pend_cmds) > 0)
4506                 dev_warn(&adapter->dev->dev, "pending commands!!\n");
4507
4508         /*
4509          * Have a delibrate delay to make sure all the caches are
4510          * actually flushed.
4511          */
4512         for (i = 0; i <= 10; i++)
4513                 mdelay(1000);
4514 }
4515
4516 static void
4517 megaraid_remove_one(struct pci_dev *pdev)
4518 {
4519         struct Scsi_Host *host = pci_get_drvdata(pdev);
4520         adapter_t *adapter = (adapter_t *)host->hostdata;
4521         char buf[12] = { 0 };
4522
4523         scsi_remove_host(host);
4524
4525         __megaraid_shutdown(adapter);
4526
4527         /* Free our resources */
4528         if (adapter->flag & BOARD_MEMMAP) {
4529                 iounmap((void *)adapter->base);
4530                 release_mem_region(adapter->host->base, 128);
4531         } else
4532                 release_region(adapter->base, 16);
4533
4534         mega_free_sgl(adapter);
4535
4536         sprintf(buf, "hba%d", adapter->host->host_no);
4537         remove_proc_subtree(buf, mega_proc_dir_entry);
4538
4539         dma_free_coherent(&adapter->dev->dev, MEGA_BUFFER_SIZE,
4540                           adapter->mega_buffer, adapter->buf_dma_handle);
4541         kfree(adapter->scb_list);
4542         dma_free_coherent(&adapter->dev->dev, sizeof(mbox64_t),
4543                           adapter->una_mbox64, adapter->una_mbox64_dma);
4544
4545         scsi_host_put(host);
4546         pci_disable_device(pdev);
4547
4548         hba_count--;
4549 }
4550
4551 static void
4552 megaraid_shutdown(struct pci_dev *pdev)
4553 {
4554         struct Scsi_Host *host = pci_get_drvdata(pdev);
4555         adapter_t *adapter = (adapter_t *)host->hostdata;
4556
4557         __megaraid_shutdown(adapter);
4558 }
4559
4560 static struct pci_device_id megaraid_pci_tbl[] = {
4561         {PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID,
4562                 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
4563         {PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID2,
4564                 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
4565         {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_AMI_MEGARAID3,
4566                 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
4567         {0,}
4568 };
4569 MODULE_DEVICE_TABLE(pci, megaraid_pci_tbl);
4570
4571 static struct pci_driver megaraid_pci_driver = {
4572         .name           = "megaraid_legacy",
4573         .id_table       = megaraid_pci_tbl,
4574         .probe          = megaraid_probe_one,
4575         .remove         = megaraid_remove_one,
4576         .shutdown       = megaraid_shutdown,
4577 };
4578
4579 static int __init megaraid_init(void)
4580 {
4581         int error;
4582
4583         if ((max_cmd_per_lun <= 0) || (max_cmd_per_lun > MAX_CMD_PER_LUN))
4584                 max_cmd_per_lun = MAX_CMD_PER_LUN;
4585         if (max_mbox_busy_wait > MBOX_BUSY_WAIT)
4586                 max_mbox_busy_wait = MBOX_BUSY_WAIT;
4587
4588 #ifdef CONFIG_PROC_FS
4589         mega_proc_dir_entry = proc_mkdir("megaraid", NULL);
4590         if (!mega_proc_dir_entry) {
4591                 printk(KERN_WARNING
4592                                 "megaraid: failed to create megaraid root\n");
4593         }
4594 #endif
4595         error = pci_register_driver(&megaraid_pci_driver);
4596         if (error) {
4597 #ifdef CONFIG_PROC_FS
4598                 remove_proc_entry("megaraid", NULL);
4599 #endif
4600                 return error;
4601         }
4602
4603         /*
4604          * Register the driver as a character device, for applications
4605          * to access it for ioctls.
4606          * First argument (major) to register_chrdev implies a dynamic
4607          * major number allocation.
4608          */
4609         major = register_chrdev(0, "megadev_legacy", &megadev_fops);
4610         if (major < 0) {
4611                 printk(KERN_WARNING
4612                                 "megaraid: failed to register char device\n");
4613         }
4614
4615         return 0;
4616 }
4617
4618 static void __exit megaraid_exit(void)
4619 {
4620         /*
4621          * Unregister the character device interface to the driver.
4622          */
4623         unregister_chrdev(major, "megadev_legacy");
4624
4625         pci_unregister_driver(&megaraid_pci_driver);
4626
4627 #ifdef CONFIG_PROC_FS
4628         remove_proc_entry("megaraid", NULL);
4629 #endif
4630 }
4631
4632 module_init(megaraid_init);
4633 module_exit(megaraid_exit);
4634
4635 /* vi: set ts=8 sw=8 tw=78: */