From: Alexander Schmidt <[EMAIL PROTECTED]>

Signed-off-by: Joachim Fenkes <[EMAIL PROTECTED]>
---
 .../ehca_01_ibmebus_loc_code.patch                 |  154 ++++++++++++++++++++
 .../ehca_01_ibmebus_loc_code.patch                 |  154 ++++++++++++++++++++
 2 files changed, 308 insertions(+), 0 deletions(-)
 create mode 100644 
kernel_patches/backport/2.6.16_sles10_sp1/ehca_01_ibmebus_loc_code.patch
 create mode 100644 
kernel_patches/backport/2.6.16_sles10_sp2/ehca_01_ibmebus_loc_code.patch

diff --git 
a/kernel_patches/backport/2.6.16_sles10_sp1/ehca_01_ibmebus_loc_code.patch 
b/kernel_patches/backport/2.6.16_sles10_sp1/ehca_01_ibmebus_loc_code.patch
new file mode 100644
index 0000000..9d4e606
--- /dev/null
+++ b/kernel_patches/backport/2.6.16_sles10_sp1/ehca_01_ibmebus_loc_code.patch
@@ -0,0 +1,154 @@
+Index: ofa_kernel-1.4/drivers/infiniband/hw/ehca/ehca_classes.h
+===================================================================
+--- ofa_kernel-1.4.orig/drivers/infiniband/hw/ehca/ehca_classes.h      
2008-07-07 15:06:10.000000000 +0200
++++ ofa_kernel-1.4/drivers/infiniband/hw/ehca/ehca_classes.h   2008-07-10 
01:33:03.000000000 +0200
+@@ -112,7 +112,7 @@
+ 
+ struct ehca_shca {
+       struct ib_device ib_device;
+-      struct of_device *ofdev;
++      struct ibmebus_dev *ibmebus_dev;
+       u8 num_ports;
+       int hw_level;
+       struct list_head shca_list;
+Index: ofa_kernel-1.4/drivers/infiniband/hw/ehca/ehca_eq.c
+===================================================================
+--- ofa_kernel-1.4.orig/drivers/infiniband/hw/ehca/ehca_eq.c   2008-07-07 
15:06:10.000000000 +0200
++++ ofa_kernel-1.4/drivers/infiniband/hw/ehca/ehca_eq.c        2008-07-10 
01:33:03.000000000 +0200
+@@ -122,7 +122,7 @@
+ 
+       /* register interrupt handlers and initialize work queues */
+       if (type == EHCA_EQ) {
+-              ret = ibmebus_request_irq(eq->ist, ehca_interrupt_eq,
++              ret = ibmebus_request_irq(NULL, eq->ist, ehca_interrupt_eq,
+                                         IRQF_DISABLED, "ehca_eq",
+                                         (void *)shca);
+               if (ret < 0)
+@@ -130,7 +130,7 @@
+ 
+               tasklet_init(&eq->interrupt_task, ehca_tasklet_eq, (long)shca);
+       } else if (type == EHCA_NEQ) {
+-              ret = ibmebus_request_irq(eq->ist, ehca_interrupt_neq,
++              ret = ibmebus_request_irq(NULL, eq->ist, ehca_interrupt_neq,
+                                         IRQF_DISABLED, "ehca_neq",
+                                         (void *)shca);
+               if (ret < 0)
+@@ -170,7 +170,7 @@
+       u64 h_ret;
+ 
+       spin_lock_irqsave(&eq->spinlock, flags);
+-      ibmebus_free_irq(eq->ist, (void *)shca);
++      ibmebus_free_irq(NULL, eq->ist, (void *)shca);
+ 
+       h_ret = hipz_h_destroy_eq(shca->ipz_hca_handle, eq);
+ 
+Index: ofa_kernel-1.4/drivers/infiniband/hw/ehca/ehca_main.c
+===================================================================
+--- ofa_kernel-1.4.orig/drivers/infiniband/hw/ehca/ehca_main.c 2008-07-10 
01:32:25.000000000 +0200
++++ ofa_kernel-1.4/drivers/infiniband/hw/ehca/ehca_main.c      2008-07-10 
01:35:21.000000000 +0200
+@@ -289,8 +289,8 @@
+       };
+ 
+       ehca_gen_dbg("Probing adapter %s...",
+-                   shca->ofdev->node->full_name);
+-      loc_code = of_get_property(shca->ofdev->node, "ibm,loc-code", NULL);
++                   shca->ibmebus_dev->ofdev.node->full_name);
++      loc_code = of_get_property(shca->ibmebus_dev->ofdev.node, 
"ibm,loc-code", NULL);
+       if (loc_code)
+               ehca_gen_dbg(" ... location lode=%s", loc_code);
+ 
+@@ -458,7 +458,7 @@
+       shca->ib_device.node_type           = RDMA_NODE_IB_CA;
+       shca->ib_device.phys_port_cnt       = shca->num_ports;
+       shca->ib_device.num_comp_vectors    = 1;
+-      shca->ib_device.dma_device          = &shca->ofdev->dev;
++      shca->ib_device.dma_device          = &shca->ibmebus_dev->ofdev.dev;
+       shca->ib_device.query_device        = ehca_query_device;
+       shca->ib_device.query_port          = ehca_query_port;
+       shca->ib_device.query_gid           = ehca_query_gid;
+@@ -707,7 +707,7 @@
+       .attrs = ehca_dev_attrs
+ };
+ 
+-static int __devinit ehca_probe(struct of_device *dev,
++static int __devinit ehca_probe(struct ibmebus_dev *dev,
+                               const struct of_device_id *id)
+ {
+       struct ehca_shca *shca;
+@@ -715,16 +715,16 @@
+       struct ib_pd *ibpd;
+       int ret, i, eq_size;
+ 
+-      handle = of_get_property(dev->node, "ibm,hca-handle", NULL);
++      handle = of_get_property(dev->ofdev.node, "ibm,hca-handle", NULL);
+       if (!handle) {
+               ehca_gen_err("Cannot get eHCA handle for adapter: %s.",
+-                           dev->node->full_name);
++                           dev->ofdev.node->full_name);
+               return -ENODEV;
+       }
+ 
+       if (!(*handle)) {
+               ehca_gen_err("Wrong eHCA handle for adapter: %s.",
+-                           dev->node->full_name);
++                           dev->ofdev.node->full_name);
+               return -ENODEV;
+       }
+ 
+@@ -739,9 +739,9 @@
+       for (i = 0; i < ARRAY_SIZE(shca->sport); i++)
+               spin_lock_init(&shca->sport[i].mod_sqp_lock);
+ 
+-      shca->ofdev = dev;
++      shca->ibmebus_dev = dev;
+       shca->ipz_hca_handle.handle = *handle;
+-      dev->dev.driver_data = shca;
++      dev->ofdev.dev.driver_data = shca;
+ 
+       ret = ehca_sense_attributes(shca);
+       if (ret < 0) {
+@@ -818,7 +818,7 @@
+               }
+       }
+ 
+-      ret = sysfs_create_group(&dev->dev.kobj, &ehca_dev_attr_grp);
++      ret = sysfs_create_group(&dev->ofdev.dev.kobj, &ehca_dev_attr_grp);
+       if (ret) /* only complain; we can live without attributes */
+               ehca_err(&shca->ib_device,
+                        "Cannot create device attributes  ret=%d", ret);
+@@ -868,12 +868,12 @@
+       return -EINVAL;
+ }
+ 
+-static int __devexit ehca_remove(struct of_device *dev)
++static int __devexit ehca_remove(struct ibmebus_dev *dev)
+ {
+-      struct ehca_shca *shca = dev->dev.driver_data;
++      struct ehca_shca *shca = dev->ofdev.dev.driver_data;
+       int ret;
+ 
+-      sysfs_remove_group(&dev->dev.kobj, &ehca_dev_attr_grp);
++      sysfs_remove_group(&dev->ofdev.dev.kobj, &ehca_dev_attr_grp);
+ 
+       if (ehca_open_aqp1 == 1) {
+               int i;
+@@ -924,14 +924,11 @@
+       {},
+ };
+ 
+-static struct of_platform_driver ehca_driver = {
+-      .name        = "ehca",
+-      .match_table = ehca_device_table,
+-      .probe       = ehca_probe,
+-      .remove      = ehca_remove,
+-      .driver      = {
+-              .groups = ehca_drv_attr_groups,
+-      },
++static struct ibmebus_driver ehca_driver = {
++      .name     = "ehca",
++      .id_table = ehca_device_table,
++      .probe    = ehca_probe,
++      .remove   = ehca_remove,
+ };
+ 
+ void ehca_poll_eqs(unsigned long data)
diff --git 
a/kernel_patches/backport/2.6.16_sles10_sp2/ehca_01_ibmebus_loc_code.patch 
b/kernel_patches/backport/2.6.16_sles10_sp2/ehca_01_ibmebus_loc_code.patch
new file mode 100644
index 0000000..9d4e606
--- /dev/null
+++ b/kernel_patches/backport/2.6.16_sles10_sp2/ehca_01_ibmebus_loc_code.patch
@@ -0,0 +1,154 @@
+Index: ofa_kernel-1.4/drivers/infiniband/hw/ehca/ehca_classes.h
+===================================================================
+--- ofa_kernel-1.4.orig/drivers/infiniband/hw/ehca/ehca_classes.h      
2008-07-07 15:06:10.000000000 +0200
++++ ofa_kernel-1.4/drivers/infiniband/hw/ehca/ehca_classes.h   2008-07-10 
01:33:03.000000000 +0200
+@@ -112,7 +112,7 @@
+ 
+ struct ehca_shca {
+       struct ib_device ib_device;
+-      struct of_device *ofdev;
++      struct ibmebus_dev *ibmebus_dev;
+       u8 num_ports;
+       int hw_level;
+       struct list_head shca_list;
+Index: ofa_kernel-1.4/drivers/infiniband/hw/ehca/ehca_eq.c
+===================================================================
+--- ofa_kernel-1.4.orig/drivers/infiniband/hw/ehca/ehca_eq.c   2008-07-07 
15:06:10.000000000 +0200
++++ ofa_kernel-1.4/drivers/infiniband/hw/ehca/ehca_eq.c        2008-07-10 
01:33:03.000000000 +0200
+@@ -122,7 +122,7 @@
+ 
+       /* register interrupt handlers and initialize work queues */
+       if (type == EHCA_EQ) {
+-              ret = ibmebus_request_irq(eq->ist, ehca_interrupt_eq,
++              ret = ibmebus_request_irq(NULL, eq->ist, ehca_interrupt_eq,
+                                         IRQF_DISABLED, "ehca_eq",
+                                         (void *)shca);
+               if (ret < 0)
+@@ -130,7 +130,7 @@
+ 
+               tasklet_init(&eq->interrupt_task, ehca_tasklet_eq, (long)shca);
+       } else if (type == EHCA_NEQ) {
+-              ret = ibmebus_request_irq(eq->ist, ehca_interrupt_neq,
++              ret = ibmebus_request_irq(NULL, eq->ist, ehca_interrupt_neq,
+                                         IRQF_DISABLED, "ehca_neq",
+                                         (void *)shca);
+               if (ret < 0)
+@@ -170,7 +170,7 @@
+       u64 h_ret;
+ 
+       spin_lock_irqsave(&eq->spinlock, flags);
+-      ibmebus_free_irq(eq->ist, (void *)shca);
++      ibmebus_free_irq(NULL, eq->ist, (void *)shca);
+ 
+       h_ret = hipz_h_destroy_eq(shca->ipz_hca_handle, eq);
+ 
+Index: ofa_kernel-1.4/drivers/infiniband/hw/ehca/ehca_main.c
+===================================================================
+--- ofa_kernel-1.4.orig/drivers/infiniband/hw/ehca/ehca_main.c 2008-07-10 
01:32:25.000000000 +0200
++++ ofa_kernel-1.4/drivers/infiniband/hw/ehca/ehca_main.c      2008-07-10 
01:35:21.000000000 +0200
+@@ -289,8 +289,8 @@
+       };
+ 
+       ehca_gen_dbg("Probing adapter %s...",
+-                   shca->ofdev->node->full_name);
+-      loc_code = of_get_property(shca->ofdev->node, "ibm,loc-code", NULL);
++                   shca->ibmebus_dev->ofdev.node->full_name);
++      loc_code = of_get_property(shca->ibmebus_dev->ofdev.node, 
"ibm,loc-code", NULL);
+       if (loc_code)
+               ehca_gen_dbg(" ... location lode=%s", loc_code);
+ 
+@@ -458,7 +458,7 @@
+       shca->ib_device.node_type           = RDMA_NODE_IB_CA;
+       shca->ib_device.phys_port_cnt       = shca->num_ports;
+       shca->ib_device.num_comp_vectors    = 1;
+-      shca->ib_device.dma_device          = &shca->ofdev->dev;
++      shca->ib_device.dma_device          = &shca->ibmebus_dev->ofdev.dev;
+       shca->ib_device.query_device        = ehca_query_device;
+       shca->ib_device.query_port          = ehca_query_port;
+       shca->ib_device.query_gid           = ehca_query_gid;
+@@ -707,7 +707,7 @@
+       .attrs = ehca_dev_attrs
+ };
+ 
+-static int __devinit ehca_probe(struct of_device *dev,
++static int __devinit ehca_probe(struct ibmebus_dev *dev,
+                               const struct of_device_id *id)
+ {
+       struct ehca_shca *shca;
+@@ -715,16 +715,16 @@
+       struct ib_pd *ibpd;
+       int ret, i, eq_size;
+ 
+-      handle = of_get_property(dev->node, "ibm,hca-handle", NULL);
++      handle = of_get_property(dev->ofdev.node, "ibm,hca-handle", NULL);
+       if (!handle) {
+               ehca_gen_err("Cannot get eHCA handle for adapter: %s.",
+-                           dev->node->full_name);
++                           dev->ofdev.node->full_name);
+               return -ENODEV;
+       }
+ 
+       if (!(*handle)) {
+               ehca_gen_err("Wrong eHCA handle for adapter: %s.",
+-                           dev->node->full_name);
++                           dev->ofdev.node->full_name);
+               return -ENODEV;
+       }
+ 
+@@ -739,9 +739,9 @@
+       for (i = 0; i < ARRAY_SIZE(shca->sport); i++)
+               spin_lock_init(&shca->sport[i].mod_sqp_lock);
+ 
+-      shca->ofdev = dev;
++      shca->ibmebus_dev = dev;
+       shca->ipz_hca_handle.handle = *handle;
+-      dev->dev.driver_data = shca;
++      dev->ofdev.dev.driver_data = shca;
+ 
+       ret = ehca_sense_attributes(shca);
+       if (ret < 0) {
+@@ -818,7 +818,7 @@
+               }
+       }
+ 
+-      ret = sysfs_create_group(&dev->dev.kobj, &ehca_dev_attr_grp);
++      ret = sysfs_create_group(&dev->ofdev.dev.kobj, &ehca_dev_attr_grp);
+       if (ret) /* only complain; we can live without attributes */
+               ehca_err(&shca->ib_device,
+                        "Cannot create device attributes  ret=%d", ret);
+@@ -868,12 +868,12 @@
+       return -EINVAL;
+ }
+ 
+-static int __devexit ehca_remove(struct of_device *dev)
++static int __devexit ehca_remove(struct ibmebus_dev *dev)
+ {
+-      struct ehca_shca *shca = dev->dev.driver_data;
++      struct ehca_shca *shca = dev->ofdev.dev.driver_data;
+       int ret;
+ 
+-      sysfs_remove_group(&dev->dev.kobj, &ehca_dev_attr_grp);
++      sysfs_remove_group(&dev->ofdev.dev.kobj, &ehca_dev_attr_grp);
+ 
+       if (ehca_open_aqp1 == 1) {
+               int i;
+@@ -924,14 +924,11 @@
+       {},
+ };
+ 
+-static struct of_platform_driver ehca_driver = {
+-      .name        = "ehca",
+-      .match_table = ehca_device_table,
+-      .probe       = ehca_probe,
+-      .remove      = ehca_remove,
+-      .driver      = {
+-              .groups = ehca_drv_attr_groups,
+-      },
++static struct ibmebus_driver ehca_driver = {
++      .name     = "ehca",
++      .id_table = ehca_device_table,
++      .probe    = ehca_probe,
++      .remove   = ehca_remove,
+ };
+ 
+ void ehca_poll_eqs(unsigned long data)
-- 
1.5.5


_______________________________________________
ewg mailing list
ewg@lists.openfabrics.org
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg

Reply via email to