]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/scsi/aacraid/comminit.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris...
[linux-2.6-omap-h63xx.git] / drivers / scsi / aacraid / comminit.c
index 87a9550967615b75f03574f1ee29d05e2d42d36f..89cc8b7b42a2028f515f5e3fbe150c621d311405 100644 (file)
@@ -5,7 +5,7 @@
  * based on the old aacraid driver that is..
  * Adaptec aacraid device driver for Linux.
  *
- * Copyright (c) 2000 Adaptec, Inc. (aacraid@adaptec.com)
+ * Copyright (c) 2000-2007 Adaptec, Inc. (aacraid@adaptec.com)
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -32,7 +32,6 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/types.h>
-#include <linux/sched.h>
 #include <linux/pci.h>
 #include <linux/spinlock.h>
 #include <linux/slab.h>
@@ -95,7 +94,7 @@ static int aac_alloc_comm(struct aac_dev *dev, void **commaddr, unsigned long co
        init->HostPhysMemPages = cpu_to_le32(AAC_MAX_HOSTPHYSMEMPAGES);
 
        init->InitFlags = 0;
-       if (dev->new_comm_interface) {
+       if (dev->comm_interface == AAC_COMM_MESSAGE) {
                init->InitFlags = cpu_to_le32(INITFLAGS_NEW_COMM_SUPPORTED);
                dprintk((KERN_WARNING"aacraid: New Comm Interface enabled\n"));
        }
@@ -111,7 +110,7 @@ static int aac_alloc_comm(struct aac_dev *dev, void **commaddr, unsigned long co
        /*
         *      Align the beginning of Headers to commalign
         */
-       align = (commalign - ((unsigned long)(base) & (commalign - 1)));
+       align = (commalign - ((uintptr_t)(base) & (commalign - 1)));
        base = base + align;
        phys = phys + align;
        /*
@@ -297,27 +296,24 @@ struct aac_dev *aac_init_adapter(struct aac_dev *dev)
                - sizeof(struct aac_fibhdr)
                - sizeof(struct aac_write) + sizeof(struct sgentry))
                        / sizeof(struct sgentry);
-       dev->new_comm_interface = 0;
+       dev->comm_interface = AAC_COMM_PRODUCER;
        dev->raw_io_64 = 0;
        if ((!aac_adapter_sync_cmd(dev, GET_ADAPTER_PROPERTIES,
                0, 0, 0, 0, 0, 0, status+0, status+1, status+2, NULL, NULL)) &&
                        (status[0] == 0x00000001)) {
-               if (status[1] & AAC_OPT_NEW_COMM_64)
+               if (status[1] & le32_to_cpu(AAC_OPT_NEW_COMM_64))
                        dev->raw_io_64 = 1;
-               if (status[1] & AAC_OPT_NEW_COMM)
-                       dev->new_comm_interface = dev->a_ops.adapter_send != 0;
-               if (dev->new_comm_interface && (status[2] > dev->base_size)) {
-                       iounmap(dev->regs.sa);
+               if (dev->a_ops.adapter_comm &&
+                   (status[1] & le32_to_cpu(AAC_OPT_NEW_COMM)))
+                       dev->comm_interface = AAC_COMM_MESSAGE;
+               if ((dev->comm_interface == AAC_COMM_MESSAGE) &&
+                   (status[2] > dev->base_size)) {
+                       aac_adapter_ioremap(dev, 0);
                        dev->base_size = status[2];
-                       dprintk((KERN_DEBUG "ioremap(%lx,%d)\n",
-                         host->base, status[2]));
-                       dev->regs.sa = ioremap(host->base, status[2]);
-                       if (dev->regs.sa == NULL) {
+                       if (aac_adapter_ioremap(dev, status[2])) {
                                /* remap failed, go back ... */
-                               dev->new_comm_interface = 0;
-                               dev->regs.sa = ioremap(host->base, 
-                                               AAC_MIN_FOOTPRINT_SIZE);
-                               if (dev->regs.sa == NULL) {     
+                               dev->comm_interface = AAC_COMM_PRODUCER;
+                               if (aac_adapter_ioremap(dev, AAC_MIN_FOOTPRINT_SIZE)) {
                                        printk(KERN_WARNING
                                          "aacraid: unable to map adapter.\n");
                                        return NULL;
@@ -391,12 +387,11 @@ struct aac_dev *aac_init_adapter(struct aac_dev *dev)
         *      Ok now init the communication subsystem
         */
 
-       dev->queues = (struct aac_queue_block *) kmalloc(sizeof(struct aac_queue_block), GFP_KERNEL);
+       dev->queues = kzalloc(sizeof(struct aac_queue_block), GFP_KERNEL);
        if (dev->queues == NULL) {
                printk(KERN_ERR "Error could not allocate comm region.\n");
                return NULL;
        }
-       memset(dev->queues, 0, sizeof(struct aac_queue_block));
 
        if (aac_comm_init(dev)<0){
                kfree(dev->queues);