[infiniband] Pass a generic MAD to ib_set_port_info()
authorMichael Brown <mcb30@etherboot.org>
Fri, 17 Jul 2009 21:40:12 +0000 (22:40 +0100)
committerMichael Brown <mcb30@etherboot.org>
Fri, 17 Jul 2009 22:06:35 +0000 (23:06 +0100)
src/drivers/infiniband/linda.c
src/include/gpxe/infiniband.h
src/net/infiniband.c
src/net/infiniband/ib_gma.c

index fa4c224..02b5d85 100644 (file)
@@ -242,11 +242,11 @@ static void linda_link_state_changed ( struct ib_device *ibdev ) {
  * Set port information
  *
  * @v ibdev            Infiniband device
- * @v port_info                New port information
+ * @v mad              Set port information MAD
  */
-static int linda_set_port_info ( struct ib_device *ibdev,
-                                const struct ib_port_info *port_info ) {
+static int linda_set_port_info ( struct ib_device *ibdev, union ib_mad *mad ) {
        struct linda *linda = ib_get_drvdata ( ibdev );
+       struct ib_port_info *port_info = &mad->smp.smp_data.port_info;
        struct QIB_7220_IBCCtrl ibcctrl;
        unsigned int port_state;
        unsigned int link_state;
index 25de491..fcdb3c3 100644 (file)
@@ -346,13 +346,12 @@ struct ib_device_operations {
        /** Set port information
         *
         * @v ibdev             Infiniband device
-        * @v port_info         New port information
+        * @v mad               Set port information MAD
         *
         * This method is required only by adapters that do not have
         * an embedded SMA.
         */
-       int ( * set_port_info ) ( struct ib_device *ibdev,
-                                 const struct ib_port_info *port_info );
+       int ( * set_port_info ) ( struct ib_device *ibdev, union ib_mad *mad );
 };
 
 /** An Infiniband device */
@@ -457,8 +456,7 @@ extern void ib_mcast_detach ( struct ib_device *ibdev,
                              struct ib_queue_pair *qp, struct ib_gid *gid );
 extern int ib_get_hca_info ( struct ib_device *ibdev,
                             struct ib_gid_half *hca_guid );
-extern int ib_set_port_info ( struct ib_device *ibdev,
-                             const struct ib_port_info *port_info );
+extern int ib_set_port_info ( struct ib_device *ibdev, union ib_mad *mad );
 extern struct ib_device * alloc_ibdev ( size_t priv_size );
 extern int register_ibdev ( struct ib_device *ibdev );
 extern void unregister_ibdev ( struct ib_device *ibdev );
index b15dcc6..513e40c 100644 (file)
@@ -687,13 +687,13 @@ int ib_get_hca_info ( struct ib_device *ibdev,
        return num_ports;
 }
 
-/** Set port information
+/**
+ * Set port information
  *
  * @v ibdev            Infiniband device
- * @v port_info                New port information
+ * @v mad              Set port information MAD
  */
-int ib_set_port_info ( struct ib_device *ibdev,
-                      const struct ib_port_info *port_info ) {
+int ib_set_port_info ( struct ib_device *ibdev, union ib_mad *mad ) {
        int rc;
 
        /* Adapters with embedded SMAs do not need to support this method */
@@ -703,7 +703,7 @@ int ib_set_port_info ( struct ib_device *ibdev,
                return -ENOTSUP;
        }
 
-       if ( ( rc = ibdev->op->set_port_info ( ibdev, port_info ) ) != 0 ) {
+       if ( ( rc = ibdev->op->set_port_info ( ibdev, mad ) ) != 0 ) {
                DBGC ( ibdev, "IBDEV %p could not set port information: %s\n",
                       ibdev, strerror ( rc ) );
                return rc;
index 4ed054c..679de6f 100644 (file)
@@ -255,7 +255,7 @@ static union ib_mad * ib_sma_set_port_info ( struct ib_gma *gma,
               "%02x\n", gma, ibdev->lid, ibdev->sm_lid,
               ibdev->link_width_enabled, ibdev->link_speed_enabled );
 
-       if ( ( rc = ib_set_port_info ( ibdev, port_info ) ) != 0 ) {
+       if ( ( rc = ib_set_port_info ( ibdev, mad ) ) != 0 ) {
                DBGC ( gma, "GMA %p could not set port information: %s\n",
                       gma, strerror ( rc ) );
                mad->hdr.status =