[ewg] [PATCH ofed-1.2-rc3 3/4] ehca: backport for rhel-4.5 - use introduced dma_ops
Stefan Roscher
ossrosch at linux.vnet.ibm.com
Thu May 10 07:29:08 PDT 2007
Signed-off-by: Stefan Roscher <stefan.roscher at de.ibm.com>
---
backport_ehca_3_rhel45_dma.patch | 226 +++++++++++++++++++++++++++++++++++++++
1 files changed, 226 insertions(+)
diff -Nurp ofa_kernel-1.2_old/kernel_patches/backport/2.6.9_U5/backport_ehca_3_rhel45_dma.patch ofa_kernel-1.2_new/kernel_patches/backport/2.6.9_U5/backport_ehca_3_rhel45_dma.patch
--- ofa_kernel-1.2_old/kernel_patches/backport/2.6.9_U5/backport_ehca_3_rhel45_dma.patch 1970-01-01 01:00:00.000000000 +0100
+++ ofa_kernel-1.2_new/kernel_patches/backport/2.6.9_U5/backport_ehca_3_rhel45_dma.patch 2007-05-10 17:30:24.000000000 +0200
@@ -0,0 +1,226 @@
+diff -Nurp ofa_kernel-1.2_orig/drivers/infiniband/hw/ehca/ehca_dma.c ofa_kernel-1.2_new/drivers/infiniband/hw/ehca/ehca_dma.c
+--- ofa_kernel-1.2_orig/drivers/infiniband/hw/ehca/ehca_dma.c 1970-01-01 01:00:00.000000000 +0100
++++ ofa_kernel-1.2_new/drivers/infiniband/hw/ehca/ehca_dma.c 2007-05-03 16:25:30.000000000 +0200
+@@ -0,0 +1,194 @@
++/*
++ * IBM eServer eHCA Infiniband device driver for Linux on POWER
++ *
++ * eHCA dma mapping via ibmebus
++ *
++ * Authors: Stefan Roscher <stefan.roscher at de.ibm.com>
++ * Hoang-Nam Nguyen <hnguyen at de.ibm.com>
++ *
++ * Copyright (c) 2007 IBM Corporation
++ *
++ * All rights reserved.
++ *
++ * This source code is distributed under a dual license of GPL v2.0 and OpenIB
++ * BSD.
++ *
++ * OpenIB BSD License
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ *
++ * Redistributions of source code must retain the above copyright notice, this
++ * list of conditions and the following disclaimer.
++ *
++ * Redistributions in binary form must reproduce the above copyright notice,
++ * this list of conditions and the following disclaimer in the documentation
++ * and/or other materials
++ * provided with the distribution.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
++ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
++ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
++ * POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include <asm/ibmebus.h>
++#include <rdma/ib_verbs.h>
++
++static int ehca_mapping_error(struct ib_device *dev, u64 dma_addr);
++
++static u64 ehca_dma_map_single(struct ib_device *dev,
++ void *cpu_addr, size_t size,
++ enum dma_data_direction direction);
++
++static void ehca_dma_unmap_single(struct ib_device *dev,
++ u64 addr, size_t size,
++ enum dma_data_direction direction);
++
++static u64 ehca_dma_map_page(struct ib_device *dev,
++ struct page *page,
++ unsigned long offset,
++ size_t size,
++ enum dma_data_direction direction);
++
++static void ehca_dma_unmap_page(struct ib_device *dev,
++ u64 addr, size_t size,
++ enum dma_data_direction direction);
++
++int ehca_map_sg(struct ib_device *dev, struct scatterlist *sg, int nents,
++ enum dma_data_direction direction);
++
++static void ehca_unmap_sg(struct ib_device *dev,
++ struct scatterlist *sg, int nents,
++ enum dma_data_direction direction);
++
++static u64 ehca_sg_dma_address(struct ib_device *dev, struct scatterlist *sg);
++
++static unsigned int ehca_sg_dma_len(struct ib_device *dev,
++ struct scatterlist *sg);
++
++static void ehca_sync_single_for_cpu(struct ib_device *dev,
++ u64 addr,
++ size_t size,
++ enum dma_data_direction dir);
++
++static void ehca_sync_single_for_device(struct ib_device *dev,
++ u64 addr,
++ size_t size,
++ enum dma_data_direction dir);
++
++static void *ehca_dma_alloc_coherent(struct ib_device *dev, size_t size,
++ u64 *dma_handle, gfp_t flag);
++
++static void ehca_dma_free_coherent(struct ib_device *dev, size_t size,
++ void *cpu_addr, dma_addr_t dma_handle);
++
++struct ib_dma_mapping_ops ehca_dma_mapping_ops = {
++ ehca_mapping_error,
++ ehca_dma_map_single,
++ ehca_dma_unmap_single,
++ ehca_dma_map_page,
++ ehca_dma_unmap_page,
++ ehca_map_sg,
++ ehca_unmap_sg,
++ ehca_sg_dma_address,
++ ehca_sg_dma_len,
++ ehca_sync_single_for_cpu,
++ ehca_sync_single_for_device,
++ ehca_dma_alloc_coherent,
++ ehca_dma_free_coherent
++};
++
++static int ehca_mapping_error(struct ib_device *dev, u64 dma_addr)
++{
++ return dma_addr == 0L;
++}
++
++static u64 ehca_dma_map_single(struct ib_device *dev,
++ void *cpu_addr, size_t size,
++ enum dma_data_direction direction)
++{
++ return ibmebus_map_single(dev, cpu_addr, size, direction);
++}
++
++static void ehca_dma_unmap_single(struct ib_device *dev,
++ u64 addr, size_t size,
++ enum dma_data_direction direction)
++{
++ ibmebus_unmap_single(dev, addr, size, direction);
++}
++
++static u64 ehca_dma_map_page(struct ib_device *dev,
++ struct page *page,
++ unsigned long offset,
++ size_t size,
++ enum dma_data_direction direction)
++{
++ return dma_map_page(dev->dma_device, page, offset, size, direction);
++}
++
++static void ehca_dma_unmap_page(struct ib_device *dev,
++ u64 addr, size_t size,
++ enum dma_data_direction direction)
++{
++ dma_unmap_page(dev->dma_device, addr, size, direction);
++}
++
++int ehca_map_sg(struct ib_device *dev, struct scatterlist *sg, int nents,
++ enum dma_data_direction direction)
++{
++ return ibmebus_map_sg(dev, sg, nents, direction);
++}
++
++static void ehca_unmap_sg(struct ib_device *dev,
++ struct scatterlist *sg, int nents,
++ enum dma_data_direction direction)
++{
++ ibmebus_unmap_sg(dev, sg, nents, direction);
++}
++
++static u64 ehca_sg_dma_address(struct ib_device *dev, struct scatterlist *sg)
++{
++ return sg_dma_address(sg);
++}
++
++static unsigned int ehca_sg_dma_len(struct ib_device *dev,
++ struct scatterlist *sg)
++{
++ return sg_dma_len(sg);
++}
++
++static void ehca_sync_single_for_cpu(struct ib_device *dev,
++ u64 addr,
++ size_t size,
++ enum dma_data_direction dir)
++{
++ dma_sync_single_for_cpu(dev->dma_device, addr, size, dir);
++}
++
++static void ehca_sync_single_for_device(struct ib_device *dev,
++ u64 addr,
++ size_t size,
++ enum dma_data_direction dir)
++{
++ dma_sync_single_for_device(dev->dma_device, addr, size, dir);
++}
++
++static void *ehca_dma_alloc_coherent(struct ib_device *dev, size_t size,
++ u64 *dma_handle, gfp_t flag)
++{
++ return ibmebus_alloc_coherent(dev, size, dma_handle, flag);
++}
++
++static void ehca_dma_free_coherent(struct ib_device *dev, size_t size,
++ void *cpu_addr, dma_addr_t dma_handle)
++{
++ ibmebus_free_coherent(dev, size, cpu_addr, dma_handle);
++}
+diff -Nurp ofa_kernel-1.2_orig/drivers/infiniband/hw/ehca/ehca_main.c ofa_kernel-1.2_new/drivers/infiniband/hw/ehca/ehca_main.c
+--- ofa_kernel-1.2_orig/drivers/infiniband/hw/ehca/ehca_main.c 2007-04-29 15:10:56.000000000 +0200
++++ ofa_kernel-1.2_new/drivers/infiniband/hw/ehca/ehca_main.c 2007-05-03 16:19:28.000000000 +0200
+@@ -279,6 +279,7 @@ init_node_guid1:
+
+ int ehca_init_device(struct ehca_shca *shca)
+ {
++ extern struct ib_dma_mapping_ops ehca_dma_mapping_ops;
+ int ret;
+
+ ret = init_node_guid(shca);
+@@ -354,6 +355,7 @@ int ehca_init_device(struct ehca_shca *s
+ shca->ib_device.detach_mcast = ehca_detach_mcast;
+ /* shca->ib_device.process_mad = ehca_process_mad; */
+ shca->ib_device.mmap = ehca_mmap;
++ shca->ib_device.dma_ops = &ehca_dma_mapping_ops;
+
+ return ret;
+ }
+diff -Nurp ofa_kernel-1.2_orig/drivers/infiniband/hw/ehca/Makefile ofa_kernel-1.2_new/drivers/infiniband/hw/ehca/Makefile
+--- ofa_kernel-1.2_orig/drivers/infiniband/hw/ehca/Makefile 2007-04-29 15:10:56.000000000 +0200
++++ ofa_kernel-1.2_new/drivers/infiniband/hw/ehca/Makefile 2007-05-03 16:26:13.000000000 +0200
+@@ -12,5 +12,5 @@ obj-$(CONFIG_INFINIBAND_EHCA) += ib_ehca
+
+ ib_ehca-objs = ehca_main.o ehca_hca.o ehca_mcast.o ehca_pd.o ehca_av.o ehca_eq.o \
+ ehca_cq.o ehca_qp.o ehca_sqp.o ehca_mrmw.o ehca_reqs.o ehca_irq.o \
+- ehca_uverbs.o ipz_pt_fn.o hcp_if.o hcp_phyp.o
++ ehca_uverbs.o ehca_dma.o ipz_pt_fn.o hcp_if.o hcp_phyp.o
More information about the ewg
mailing list