]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/scsi/megaraid.c
[PATCH] m68k: convert mac irq code
[linux-2.6-omap-h63xx.git] / drivers / scsi / megaraid.c
index dfea346b00a559975cc83853bafbf4f59dbcebd9..5d2cefb5e52d242a56fe47a24ebbc3fa4063a6e9 100644 (file)
@@ -2,7 +2,7 @@
  *
  *                     Linux MegaRAID device driver
  *
- * Copyright © 2002  LSI Logic Corporation.
+ * Copyright (c) 2002  LSI Logic Corporation.
  *
  *        This program is free software; you can redistribute it and/or
  *        modify it under the terms of the GNU General Public License
@@ -17,7 +17,8 @@
  * Copyright (c) 2003  Christoph Hellwig  <hch@lst.de>
  *       - new-style, hotplug-aware pci probing and scsi registration
  *
- * Version : v2.00.3 (Feb 19, 2003) - Atul Mukker <Atul.Mukker@lsil.com>
+ * Version : v2.00.4 Mon Nov 14 14:02:43 EST 2005 - Seokmann Ju
+ *                                             <Seokmann.Ju@lsil.com>
  *
  * Description: Linux device driver for LSI Logic MegaRAID controller
  *
@@ -44,6 +45,7 @@
 #include <linux/interrupt.h>
 #include <linux/pci.h>
 #include <linux/init.h>
+#include <linux/dma-mapping.h>
 #include <scsi/scsicam.h>
 
 #include "scsi.h"
 
 #include "megaraid.h"
 
-#define MEGARAID_MODULE_VERSION "2.00.3"
+#define MEGARAID_MODULE_VERSION "2.00.4"
 
-MODULE_AUTHOR ("LSI Logic Corporation");
-MODULE_DESCRIPTION ("LSI Logic MegaRAID driver");
+MODULE_AUTHOR ("sju@lsil.com");
+MODULE_DESCRIPTION ("LSI Logic MegaRAID legacy driver");
 MODULE_LICENSE ("GPL");
 MODULE_VERSION(MEGARAID_MODULE_VERSION);
 
@@ -380,23 +382,23 @@ megaraid_queue(Scsi_Cmnd *scmd, void (*done)(Scsi_Cmnd *))
 
        spin_lock_irqsave(&adapter->lock, flags);
        scb = mega_build_cmd(adapter, scmd, &busy);
+       if (!scb)
+               goto out;
 
-       if(scb) {
-               scb->state |= SCB_PENDQ;
-               list_add_tail(&scb->list, &adapter->pending_list);
+       scb->state |= SCB_PENDQ;
+       list_add_tail(&scb->list, &adapter->pending_list);
 
-               /*
-                * Check if the HBA is in quiescent state, e.g., during a
-                * delete logical drive opertion. If it is, don't run
-                * the pending_list.
-                */
-               if(atomic_read(&adapter->quiescent) == 0) {
-                       mega_runpendq(adapter);
-               }
-               return 0;
-       }
-       spin_unlock_irqrestore(&adapter->lock, flags);
+       /*
+        * Check if the HBA is in quiescent state, e.g., during a
+        * delete logical drive opertion. If it is, don't run
+        * the pending_list.
+        */
+       if (atomic_read(&adapter->quiescent) == 0)
+               mega_runpendq(adapter);
 
+       busy = 0;
+ out:
+       spin_unlock_irqrestore(&adapter->lock, flags);
        return busy;
 }
 
@@ -522,7 +524,7 @@ mega_build_cmd(adapter_t *adapter, Scsi_Cmnd *cmd, int *busy)
         * filter the internal and ioctl commands
         */
        if((cmd->cmnd[0] == MEGA_INTERNAL_CMD)) {
-               return cmd->buffer;
+               return cmd->request_buffer;
        }
 
 
@@ -664,7 +666,7 @@ mega_build_cmd(adapter_t *adapter, Scsi_Cmnd *cmd, int *busy)
                                        sg->offset;
                        } else
                                buf = cmd->request_buffer;
-                       memset(cmd->request_buffer, 0, cmd->cmnd[4]);
+                       memset(buf, 0, cmd->cmnd[4]);
                        if (cmd->use_sg) {
                                struct scatterlist *sg;
 
@@ -1826,7 +1828,7 @@ mega_build_sglist(adapter_t *adapter, scb_t *scb, u32 *buf, u32 *len)
 
        scb->dma_type = MEGA_SGLIST;
 
-       if( sgcnt > adapter->sglen ) BUG();
+       BUG_ON(sgcnt > adapter->sglen);
 
        *len = 0;
 
@@ -2093,7 +2095,7 @@ make_local_pdev(adapter_t *adapter, struct pci_dev **pdev)
 
        memcpy(*pdev, adapter->dev, sizeof(struct pci_dev));
 
-       if( pci_set_dma_mask(*pdev, 0xffffffff) != 0 ) {
+       if( pci_set_dma_mask(*pdev, DMA_32BIT_MASK) != 0 ) {
                kfree(*pdev);
                return -1;
        }
@@ -4469,7 +4471,6 @@ mega_internal_command(adapter_t *adapter, megacmd_t *mc, mega_passthru *pthru)
 {
        Scsi_Cmnd       *scmd;
        struct  scsi_device *sdev;
-       unsigned long   flags = 0;
        scb_t   *scb;
        int     rval;
 
@@ -4478,7 +4479,7 @@ mega_internal_command(adapter_t *adapter, megacmd_t *mc, mega_passthru *pthru)
         * serialized. This is so because we want to reserve maximum number of
         * available command ids for the I/O commands.
         */
-       down(&adapter->int_mtx);
+       mutex_lock(&adapter->int_mtx);
 
        scb = &adapter->int_scb;
        memset(scb, 0, sizeof(scb_t));
@@ -4491,7 +4492,7 @@ mega_internal_command(adapter_t *adapter, megacmd_t *mc, mega_passthru *pthru)
        scmd->device = sdev;
 
        scmd->device->host = adapter->host;
-       scmd->buffer = (void *)scb;
+       scmd->request_buffer = (void *)scb;
        scmd->cmnd[0] = MEGA_INTERNAL_CMD;
 
        scb->state |= SCB_ACTIVE;
@@ -4526,7 +4527,7 @@ mega_internal_command(adapter_t *adapter, megacmd_t *mc, mega_passthru *pthru)
                        mc->cmd, mc->opcode, mc->subopcode, scmd->result);
        }
 
-       up(&adapter->int_mtx);
+       mutex_unlock(&adapter->int_mtx);
 
        return rval;
 }
@@ -4553,7 +4554,7 @@ mega_internal_done(Scsi_Cmnd *scmd)
 static struct scsi_host_template megaraid_template = {
        .module                         = THIS_MODULE,
        .name                           = "MegaRAID",
-       .proc_name                      = "megaraid",
+       .proc_name                      = "megaraid_legacy",
        .info                           = megaraid_info,
        .queuecommand                   = megaraid_queue,       
        .bios_param                     = megaraid_biosparam,
@@ -4677,7 +4678,6 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
 
        adapter->flag = flag;
        spin_lock_init(&adapter->lock);
-       scsi_assign_lock(host, &adapter->lock);
 
        host->cmd_per_lun = max_cmd_per_lun;
        host->max_sectors = max_sectors_per_io;
@@ -4859,14 +4859,14 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
 
        /* Set the Mode of addressing to 64 bit if we can */
        if ((adapter->flag & BOARD_64BIT) && (sizeof(dma_addr_t) == 8)) {
-               pci_set_dma_mask(pdev, 0xffffffffffffffffULL);
+               pci_set_dma_mask(pdev, DMA_64BIT_MASK);
                adapter->has_64bit_addr = 1;
        } else  {
-               pci_set_dma_mask(pdev, 0xffffffff);
+               pci_set_dma_mask(pdev, DMA_32BIT_MASK);
                adapter->has_64bit_addr = 0;
        }
                
-       init_MUTEX(&adapter->int_mtx);
+       mutex_init(&adapter->int_mtx);
        init_completion(&adapter->int_waitq);
 
        adapter->this_id = DEFAULT_INITIATOR_ID;
@@ -5038,28 +5038,18 @@ megaraid_shutdown(struct pci_dev *pdev)
 }
 
 static struct pci_device_id megaraid_pci_tbl[] = {
-       {PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DISCOVERY,
-               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-       {PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_PERC4_DI,
-               PCI_ANY_ID, PCI_ANY_ID, 0, 0, BOARD_64BIT},
-       {PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_PERC4_QC_VERDE,
-               PCI_ANY_ID, PCI_ANY_ID, 0, 0, BOARD_64BIT},
        {PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID,
                PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
        {PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID2,
                PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-       {PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID3,
-               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
        {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_AMI_MEGARAID3,
                PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-       {PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_AMI_MEGARAID3,
-               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
        {0,}
 };
 MODULE_DEVICE_TABLE(pci, megaraid_pci_tbl);
 
 static struct pci_driver megaraid_pci_driver = {
-       .name           = "megaraid",
+       .name           = "megaraid_legacy",
        .id_table       = megaraid_pci_tbl,
        .probe          = megaraid_probe_one,
        .remove         = __devexit_p(megaraid_remove_one),
@@ -5096,7 +5086,7 @@ static int __init megaraid_init(void)
         * First argument (major) to register_chrdev implies a dynamic
         * major number allocation.
         */
-       major = register_chrdev(0, "megadev", &megadev_fops);
+       major = register_chrdev(0, "megadev_legacy", &megadev_fops);
        if (!major) {
                printk(KERN_WARNING
                                "megaraid: failed to register char device\n");
@@ -5110,7 +5100,7 @@ static void __exit megaraid_exit(void)
        /*
         * Unregister the character device interface to the driver.
         */
-       unregister_chrdev(major, "megadev");
+       unregister_chrdev(major, "megadev_legacy");
 
        pci_unregister_driver(&megaraid_pci_driver);