/* Update MAD parameters */
ib_smc_update ( arbel->ibdev[port], arbel_mad );
-
- /* Notify Infiniband core of link state change */
- ib_link_state_changed ( arbel->ibdev[port] );
}
/**
if ( ( rc = arbel_create_eq ( arbel ) ) != 0 )
goto err_create_eq;
- /* Update MAD parameters */
+ /* Initialise parameters using SMC */
for ( i = 0 ; i < ARBEL_NUM_PORTS ; i++ )
- ib_smc_update ( arbel->ibdev[i], arbel_mad );
+ ib_smc_init ( arbel->ibdev[i], arbel_mad );
/* Register Infiniband devices */
for ( i = 0 ; i < ARBEL_NUM_PORTS ; i++ ) {
/* Update MAD parameters */
ib_smc_update ( hermon->ibdev[port], hermon_mad );
-
- /* Notify Infiniband core of link state change */
- ib_link_state_changed ( hermon->ibdev[port] );
}
/**
if ( ( rc = hermon_configure_special_qps ( hermon ) ) != 0 )
goto err_conf_special_qps;
- /* Update IPoIB MAC address */
- for ( i = 0 ; i < hermon->cap.num_ports ; i++ ) {
- ib_smc_update ( hermon->ibdev[i], hermon_mad );
- }
+ /* Initialise parameters using SMC */
+ for ( i = 0 ; i < hermon->cap.num_ports ; i++ )
+ ib_smc_init ( hermon->ibdev[i], hermon_mad );
/* Register Infiniband devices */
for ( i = 0 ; i < hermon->cap.num_ports ; i++ ) {
typedef int ( * ib_local_mad_t ) ( struct ib_device *ibdev,
union ib_mad *mad );
-extern int ib_smc_update ( struct ib_device *ibdev,
- ib_local_mad_t local_mad );
+extern int ib_smc_init ( struct ib_device *ibdev, ib_local_mad_t local_mad );
+extern int ib_smc_update ( struct ib_device *ibdev, ib_local_mad_t local_mad );
#endif /* _IPXE_IB_SMC_H */
}
/**
- * Get MAD parameters
+ * Get Infiniband parameters using SMC
*
* @v ibdev Infiniband device
* @v local_mad Method for issuing local MADs
* @ret rc Return status code
*/
-int ib_smc_update ( struct ib_device *ibdev, ib_local_mad_t local_mad ) {
+static int ib_smc_get ( struct ib_device *ibdev, ib_local_mad_t local_mad ) {
union ib_mad mad;
struct ib_port_info *port_info = &mad.smp.smp_data.port_info;
struct ib_guid_info *guid_info = &mad.smp.smp_data.guid_info;
return 0;
}
+
+/**
+ * Initialise Infiniband parameters using SMC
+ *
+ * @v ibdev Infiniband device
+ * @v local_mad Method for issuing local MADs
+ * @ret rc Return status code
+ */
+int ib_smc_init ( struct ib_device *ibdev, ib_local_mad_t local_mad ) {
+ int rc;
+
+ /* Get MAD parameters */
+ if ( ( rc = ib_smc_get ( ibdev, local_mad ) ) != 0 )
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Update Infiniband parameters using SMC
+ *
+ * @v ibdev Infiniband device
+ * @v local_mad Method for issuing local MADs
+ * @ret rc Return status code
+ */
+int ib_smc_update ( struct ib_device *ibdev, ib_local_mad_t local_mad ) {
+ int rc;
+
+ /* Get MAD parameters */
+ if ( ( rc = ib_smc_get ( ibdev, local_mad ) ) != 0 )
+ return rc;
+
+ /* Notify Infiniband core of potential link state change */
+ ib_link_state_changed ( ibdev );
+
+ return 0;
+}