]> err.no Git - linux-2.6/blobdiff - drivers/infiniband/hw/amso1100/c2_rnic.c
Merge branch 'fixes' of master.kernel.org:/home/rmk/linux-2.6-arm
[linux-2.6] / drivers / infiniband / hw / amso1100 / c2_rnic.c
index 30409e179606e0b5d05609bf96b8b671910ac558..9a054c6941a4fa5205f8d953d21cd4396b52b882 100644 (file)
@@ -157,8 +157,8 @@ static int c2_rnic_query(struct c2_dev *c2dev, struct ib_device_attr *props)
 
        props->fw_ver =
                ((u64)be32_to_cpu(reply->fw_ver_major) << 32) |
-               ((be32_to_cpu(reply->fw_ver_minor) && 0xFFFF) << 16) |
-               (be32_to_cpu(reply->fw_ver_patch) && 0xFFFF);
+               ((be32_to_cpu(reply->fw_ver_minor) & 0xFFFF) << 16) |
+               (be32_to_cpu(reply->fw_ver_patch) & 0xFFFF);
        memcpy(&props->sys_image_guid, c2dev->netdev->dev_addr, 6);
        props->max_mr_size         = 0xFFFFFFFF;
        props->page_size_cap       = ~(C2_MIN_PAGESIZE-1);
@@ -208,7 +208,7 @@ static int c2_rnic_query(struct c2_dev *c2dev, struct ib_device_attr *props)
 /*
  * Add an IP address to the RNIC interface
  */
-int c2_add_addr(struct c2_dev *c2dev, u32 inaddr, u32 inmask)
+int c2_add_addr(struct c2_dev *c2dev, __be32 inaddr, __be32 inmask)
 {
        struct c2_vq_req *vq_req;
        struct c2wr_rnic_setconfig_req *wr;
@@ -270,7 +270,7 @@ int c2_add_addr(struct c2_dev *c2dev, u32 inaddr, u32 inmask)
 /*
  * Delete an IP address from the RNIC interface
  */
-int c2_del_addr(struct c2_dev *c2dev, u32 inaddr, u32 inmask)
+int c2_del_addr(struct c2_dev *c2dev, __be32 inaddr, __be32 inmask)
 {
        struct c2_vq_req *vq_req;
        struct c2wr_rnic_setconfig_req *wr;
@@ -441,7 +441,7 @@ static int c2_rnic_close(struct c2_dev *c2dev)
  * involves initalizing the various limits and resouce pools that
  * comprise the RNIC instance.
  */
-int c2_rnic_init(struct c2_dev *c2dev)
+int __devinit c2_rnic_init(struct c2_dev *c2dev)
 {
        int err;
        u32 qsize, msgsize;
@@ -455,7 +455,8 @@ int c2_rnic_init(struct c2_dev *c2dev)
             IB_DEVICE_CURR_QP_STATE_MOD |
             IB_DEVICE_SYS_IMAGE_GUID |
             IB_DEVICE_ZERO_STAG |
-            IB_DEVICE_SEND_W_INV | IB_DEVICE_MEM_WINDOW);
+            IB_DEVICE_MEM_WINDOW |
+            IB_DEVICE_SEND_W_INV);
 
        /* Allocate the qptr_array */
        c2dev->qptr_array = vmalloc(C2_MAX_CQS * sizeof(void *));
@@ -506,27 +507,25 @@ int c2_rnic_init(struct c2_dev *c2dev)
        mmio_regs = c2dev->kva;
        /* Initialize the Verbs Request Queue */
        c2_mq_req_init(&c2dev->req_vq, 0,
-                      be32_to_cpu(readl(mmio_regs + C2_REGS_Q0_QSIZE)),
-                      be32_to_cpu(readl(mmio_regs + C2_REGS_Q0_MSGSIZE)),
+                      be32_to_cpu((__force __be32) readl(mmio_regs + C2_REGS_Q0_QSIZE)),
+                      be32_to_cpu((__force __be32) readl(mmio_regs + C2_REGS_Q0_MSGSIZE)),
                       mmio_regs +
-                      be32_to_cpu(readl(mmio_regs + C2_REGS_Q0_POOLSTART)),
+                      be32_to_cpu((__force __be32) readl(mmio_regs + C2_REGS_Q0_POOLSTART)),
                       mmio_regs +
-                      be32_to_cpu(readl(mmio_regs + C2_REGS_Q0_SHARED)),
+                      be32_to_cpu((__force __be32) readl(mmio_regs + C2_REGS_Q0_SHARED)),
                       C2_MQ_ADAPTER_TARGET);
 
        /* Initialize the Verbs Reply Queue */
-       qsize = be32_to_cpu(readl(mmio_regs + C2_REGS_Q1_QSIZE));
-       msgsize = be32_to_cpu(readl(mmio_regs + C2_REGS_Q1_MSGSIZE));
-       q1_pages = kmalloc(qsize * msgsize, GFP_KERNEL);
+       qsize = be32_to_cpu((__force __be32) readl(mmio_regs + C2_REGS_Q1_QSIZE));
+       msgsize = be32_to_cpu((__force __be32) readl(mmio_regs + C2_REGS_Q1_MSGSIZE));
+       q1_pages = dma_alloc_coherent(&c2dev->pcidev->dev, qsize * msgsize,
+                                     &c2dev->rep_vq.host_dma, GFP_KERNEL);
        if (!q1_pages) {
                err = -ENOMEM;
                goto bail1;
        }
-       c2dev->rep_vq.host_dma = dma_map_single(c2dev->ibdev.dma_device,
-                                               (void *)q1_pages, qsize * msgsize,
-                                               DMA_FROM_DEVICE);
        pci_unmap_addr_set(&c2dev->rep_vq, mapping, c2dev->rep_vq.host_dma);
-       pr_debug("%s rep_vq va %p dma %llx\n", __FUNCTION__, q1_pages,
+       pr_debug("%s rep_vq va %p dma %llx\n", __func__, q1_pages,
                 (unsigned long long) c2dev->rep_vq.host_dma);
        c2_mq_rep_init(&c2dev->rep_vq,
                   1,
@@ -534,30 +533,28 @@ int c2_rnic_init(struct c2_dev *c2dev)
                   msgsize,
                   q1_pages,
                   mmio_regs +
-                  be32_to_cpu(readl(mmio_regs + C2_REGS_Q1_SHARED)),
+                  be32_to_cpu((__force __be32) readl(mmio_regs + C2_REGS_Q1_SHARED)),
                   C2_MQ_HOST_TARGET);
 
        /* Initialize the Asynchronus Event Queue */
-       qsize = be32_to_cpu(readl(mmio_regs + C2_REGS_Q2_QSIZE));
-       msgsize = be32_to_cpu(readl(mmio_regs + C2_REGS_Q2_MSGSIZE));
-       q2_pages = kmalloc(qsize * msgsize, GFP_KERNEL);
+       qsize = be32_to_cpu((__force __be32) readl(mmio_regs + C2_REGS_Q2_QSIZE));
+       msgsize = be32_to_cpu((__force __be32) readl(mmio_regs + C2_REGS_Q2_MSGSIZE));
+       q2_pages = dma_alloc_coherent(&c2dev->pcidev->dev, qsize * msgsize,
+                                     &c2dev->aeq.host_dma, GFP_KERNEL);
        if (!q2_pages) {
                err = -ENOMEM;
                goto bail2;
        }
-       c2dev->aeq.host_dma = dma_map_single(c2dev->ibdev.dma_device,
-                                               (void *)q2_pages, qsize * msgsize,
-                                               DMA_FROM_DEVICE);
        pci_unmap_addr_set(&c2dev->aeq, mapping, c2dev->aeq.host_dma);
-       pr_debug("%s aeq va %p dma %llx\n", __FUNCTION__, q1_pages,
-                (unsigned long long) c2dev->rep_vq.host_dma);
+       pr_debug("%s aeq va %p dma %llx\n", __func__, q2_pages,
+                (unsigned long long) c2dev->aeq.host_dma);
        c2_mq_rep_init(&c2dev->aeq,
                       2,
                       qsize,
                       msgsize,
                       q2_pages,
                       mmio_regs +
-                      be32_to_cpu(readl(mmio_regs + C2_REGS_Q2_SHARED)),
+                      be32_to_cpu((__force __be32) readl(mmio_regs + C2_REGS_Q2_SHARED)),
                       C2_MQ_HOST_TARGET);
 
        /* Initialize the verbs request allocator */
@@ -597,17 +594,13 @@ int c2_rnic_init(struct c2_dev *c2dev)
       bail4:
        vq_term(c2dev);
       bail3:
-       dma_unmap_single(c2dev->ibdev.dma_device,
-                        pci_unmap_addr(&c2dev->aeq, mapping),
-                        c2dev->aeq.q_size * c2dev->aeq.msg_size,
-                        DMA_FROM_DEVICE);
-       kfree(q2_pages);
+       dma_free_coherent(&c2dev->pcidev->dev,
+                         c2dev->aeq.q_size * c2dev->aeq.msg_size,
+                         q2_pages, pci_unmap_addr(&c2dev->aeq, mapping));
       bail2:
-       dma_unmap_single(c2dev->ibdev.dma_device,
-                        pci_unmap_addr(&c2dev->rep_vq, mapping),
-                        c2dev->rep_vq.q_size * c2dev->rep_vq.msg_size,
-                        DMA_FROM_DEVICE);
-       kfree(q1_pages);
+       dma_free_coherent(&c2dev->pcidev->dev,
+                         c2dev->rep_vq.q_size * c2dev->rep_vq.msg_size,
+                         q1_pages, pci_unmap_addr(&c2dev->rep_vq, mapping));
       bail1:
        c2_free_mqsp_pool(c2dev, c2dev->kern_mqsp_pool);
       bail0:
@@ -619,7 +612,7 @@ int c2_rnic_init(struct c2_dev *c2dev)
 /*
  * Called by c2_remove to cleanup the RNIC resources.
  */
-void c2_rnic_term(struct c2_dev *c2dev)
+void __devexit c2_rnic_term(struct c2_dev *c2dev)
 {
 
        /* Close the open adapter instance */
@@ -640,19 +633,17 @@ void c2_rnic_term(struct c2_dev *c2dev)
        /* Free the verbs request allocator */
        vq_term(c2dev);
 
-       /* Unmap and free the asynchronus event queue */
-       dma_unmap_single(c2dev->ibdev.dma_device,
-                        pci_unmap_addr(&c2dev->aeq, mapping),
-                        c2dev->aeq.q_size * c2dev->aeq.msg_size,
-                        DMA_FROM_DEVICE);
-       kfree(c2dev->aeq.msg_pool.host);
-
-       /* Unmap and free the verbs reply queue */
-       dma_unmap_single(c2dev->ibdev.dma_device,
-                        pci_unmap_addr(&c2dev->rep_vq, mapping),
-                        c2dev->rep_vq.q_size * c2dev->rep_vq.msg_size,
-                        DMA_FROM_DEVICE);
-       kfree(c2dev->rep_vq.msg_pool.host);
+       /* Free the asynchronus event queue */
+       dma_free_coherent(&c2dev->pcidev->dev,
+                         c2dev->aeq.q_size * c2dev->aeq.msg_size,
+                         c2dev->aeq.msg_pool.host,
+                         pci_unmap_addr(&c2dev->aeq, mapping));
+
+       /* Free the verbs reply queue */
+       dma_free_coherent(&c2dev->pcidev->dev,
+                         c2dev->rep_vq.q_size * c2dev->rep_vq.msg_size,
+                         c2dev->rep_vq.msg_pool.host,
+                         pci_unmap_addr(&c2dev->rep_vq, mapping));
 
        /* Free the MQ shared pointer pool */
        c2_free_mqsp_pool(c2dev, c2dev->kern_mqsp_pool);