cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

megaraid.c (107191B)


      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
     60MODULE_AUTHOR ("sju@lsil.com");
     61MODULE_DESCRIPTION ("LSI Logic MegaRAID legacy driver");
     62MODULE_LICENSE ("GPL");
     63MODULE_VERSION(MEGARAID_MODULE_VERSION);
     64
     65static DEFINE_MUTEX(megadev_mutex);
     66static unsigned int max_cmd_per_lun = DEF_CMD_PER_LUN;
     67module_param(max_cmd_per_lun, uint, 0);
     68MODULE_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
     70static unsigned short int max_sectors_per_io = MAX_SECTORS_PER_IO;
     71module_param(max_sectors_per_io, ushort, 0);
     72MODULE_PARM_DESC(max_sectors_per_io, "Maximum number of sectors per I/O request (default=MAX_SECTORS_PER_IO=128)");
     73
     74
     75static unsigned short int max_mbox_busy_wait = MBOX_BUSY_WAIT;
     76module_param(max_mbox_busy_wait, ushort, 0);
     77MODULE_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
     88static int hba_count;
     89static adapter_t *hba_soft_state[MAX_CONTROLLERS];
     90static struct proc_dir_entry *mega_proc_dir_entry;
     91
     92/* For controller re-ordering */
     93static struct mega_hbas mega_hbas[MAX_CONTROLLERS];
     94
     95static long
     96megadev_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 */
    101static 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 */
    113static struct mcontroller mcontroller[MAX_CONTROLLERS];
    114
    115/* The current driver version */
    116static u32 driver_ver = 0x02000000;
    117
    118/* major number used by the device for character interface */
    119static 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 */
    127static 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 */
    135static int
    136mega_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 */
    194static int
    195mega_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 */
    361static inline void
    362mega_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 */
    375static 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
    415static 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 */
    425static inline scb_t *
    426mega_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 */
    457static inline int
    458mega_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 */
    520static scb_t *
    521mega_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 */
    950static mega_passthru *
    951mega_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 */
   1014static mega_ext_passthru *
   1015mega_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
   1066static 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 */
   1097static int
   1098issue_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 */
   1161static inline int
   1162mega_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 */
   1176static int
   1177issue_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
   1243bug_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 */
   1259static irqreturn_t
   1260megaraid_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 */
   1335static irqreturn_t
   1336megaraid_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 */
   1413static void
   1414mega_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 */
   1644static void
   1645mega_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 */
   1660static void
   1661mega_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
   1688static 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 */
   1707static int
   1708mega_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 */
   1762static void
   1763mega_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
   1796static inline void
   1797mega_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 */
   1837const char *
   1838megaraid_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 */
   1857static int
   1858megaraid_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
   1877static int
   1878megaraid_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 */
   1921static int
   1922megaraid_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
   1989static inline int
   1990make_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
   2006static inline void
   2007free_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 */
   2019static inline void *
   2020mega_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
   2027static inline void
   2028mega_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 */
   2045static int
   2046proc_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 */
   2109static int
   2110proc_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 */
   2144static int
   2145proc_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 */
   2171static int
   2172proc_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
   2199free_inquiry:
   2200	mega_free_inquiry(inquiry, dma_handle, pdev);
   2201free_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 */
   2214static int
   2215proc_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
   2274free_inquiry:
   2275	mega_free_inquiry(inquiry, dma_handle, pdev);
   2276free_pdev:
   2277	free_local_pdev(pdev);
   2278	return 0;
   2279}
   2280
   2281
   2282/*
   2283 * Display scsi inquiry
   2284 */
   2285static void
   2286mega_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 */
   2318static int
   2319proc_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
   2418free_pci:
   2419	dma_free_coherent(&pdev->dev, 256, scsi_inq, scsi_inq_dma_handle);
   2420free_inquiry:
   2421	mega_free_inquiry(inquiry, dma_handle, pdev);
   2422free_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 */
   2434static int
   2435proc_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 */
   2448static int
   2449proc_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 */
   2462static int
   2463proc_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 */
   2476static int
   2477proc_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 */
   2493static int
   2494proc_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
   2658free_pci:
   2659	dma_free_coherent(&pdev->dev, array_sz, disk_array,
   2660			  disk_array_dma_handle);
   2661free_inquiry:
   2662	mega_free_inquiry(inquiry, dma_handle, pdev);
   2663free_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 */
   2675static int
   2676proc_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 */
   2689static int
   2690proc_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 */
   2703static int
   2704proc_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 */
   2717static int
   2718proc_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 */
   2730static void
   2731mega_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
   2775static 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 */
   2786static int
   2787megaraid_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 */
   2856static int
   2857mega_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 */
   2936static int
   2937megadev_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 */
   2959static int
   2960megadev_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
   3247freemem_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
   3352static long
   3353megadev_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 */
   3374static int
   3375mega_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 */
   3500static int
   3501mega_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 */
   3565static int
   3566mega_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 */
   3594static void
   3595mega_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 */
   3646static void
   3647mega_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 */
   3711static int
   3712mega_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 */
   3738static int
   3739mega_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 */
   3766static int
   3767mega_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
   3814static int
   3815mega_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 */
   3851static void
   3852mega_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 */
   3894static int
   3895mega_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 */
   3937static int
   3938mega_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 */
   3972static int
   3973mega_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 */
   4047static int
   4048mega_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
   4103static 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
   4123static int
   4124megaraid_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
   4482static 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
   4516static void
   4517megaraid_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
   4551static void
   4552megaraid_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
   4560static 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};
   4569MODULE_DEVICE_TABLE(pci, megaraid_pci_tbl);
   4570
   4571static 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
   4579static 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
   4618static 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
   4632module_init(megaraid_init);
   4633module_exit(megaraid_exit);
   4634
   4635/* vi: set ts=8 sw=8 tw=78: */