|  | @@ -123,13 +123,13 @@ static int ib_smc_get_pkey_table ( struct ib_device *ibdev,
 | 
		
	
		
			
			| 123 | 123 |  }
 | 
		
	
		
			
			| 124 | 124 |  
 | 
		
	
		
			
			| 125 | 125 |  /**
 | 
		
	
		
			
			| 126 |  | - * Get MAD parameters
 | 
		
	
		
			
			|  | 126 | + * Get Infiniband parameters using SMC
 | 
		
	
		
			
			| 127 | 127 |   *
 | 
		
	
		
			
			| 128 | 128 |   * @v ibdev		Infiniband device
 | 
		
	
		
			
			| 129 | 129 |   * @v local_mad		Method for issuing local MADs
 | 
		
	
		
			
			| 130 | 130 |   * @ret rc		Return status code
 | 
		
	
		
			
			| 131 | 131 |   */
 | 
		
	
		
			
			| 132 |  | -int ib_smc_update ( struct ib_device *ibdev, ib_local_mad_t local_mad ) {
 | 
		
	
		
			
			|  | 132 | +static int ib_smc_get ( struct ib_device *ibdev, ib_local_mad_t local_mad ) {
 | 
		
	
		
			
			| 133 | 133 |  	union ib_mad mad;
 | 
		
	
		
			
			| 134 | 134 |  	struct ib_port_info *port_info = &mad.smp.smp_data.port_info;
 | 
		
	
		
			
			| 135 | 135 |  	struct ib_guid_info *guid_info = &mad.smp.smp_data.guid_info;
 | 
		
	
	
		
			
			|  | @@ -174,3 +174,40 @@ int ib_smc_update ( struct ib_device *ibdev, ib_local_mad_t local_mad ) {
 | 
		
	
		
			
			| 174 | 174 |  
 | 
		
	
		
			
			| 175 | 175 |  	return 0;
 | 
		
	
		
			
			| 176 | 176 |  }
 | 
		
	
		
			
			|  | 177 | +
 | 
		
	
		
			
			|  | 178 | +/**
 | 
		
	
		
			
			|  | 179 | + * Initialise Infiniband parameters using SMC
 | 
		
	
		
			
			|  | 180 | + *
 | 
		
	
		
			
			|  | 181 | + * @v ibdev		Infiniband device
 | 
		
	
		
			
			|  | 182 | + * @v local_mad		Method for issuing local MADs
 | 
		
	
		
			
			|  | 183 | + * @ret rc		Return status code
 | 
		
	
		
			
			|  | 184 | + */
 | 
		
	
		
			
			|  | 185 | +int ib_smc_init ( struct ib_device *ibdev, ib_local_mad_t local_mad ) {
 | 
		
	
		
			
			|  | 186 | +	int rc;
 | 
		
	
		
			
			|  | 187 | +
 | 
		
	
		
			
			|  | 188 | +	/* Get MAD parameters */
 | 
		
	
		
			
			|  | 189 | +	if ( ( rc = ib_smc_get ( ibdev, local_mad ) ) != 0 )
 | 
		
	
		
			
			|  | 190 | +		return rc;
 | 
		
	
		
			
			|  | 191 | +
 | 
		
	
		
			
			|  | 192 | +	return 0;
 | 
		
	
		
			
			|  | 193 | +}
 | 
		
	
		
			
			|  | 194 | +
 | 
		
	
		
			
			|  | 195 | +/**
 | 
		
	
		
			
			|  | 196 | + * Update Infiniband parameters using SMC
 | 
		
	
		
			
			|  | 197 | + *
 | 
		
	
		
			
			|  | 198 | + * @v ibdev		Infiniband device
 | 
		
	
		
			
			|  | 199 | + * @v local_mad		Method for issuing local MADs
 | 
		
	
		
			
			|  | 200 | + * @ret rc		Return status code
 | 
		
	
		
			
			|  | 201 | + */
 | 
		
	
		
			
			|  | 202 | +int ib_smc_update ( struct ib_device *ibdev, ib_local_mad_t local_mad ) {
 | 
		
	
		
			
			|  | 203 | +	int rc;
 | 
		
	
		
			
			|  | 204 | +
 | 
		
	
		
			
			|  | 205 | +	/* Get MAD parameters */
 | 
		
	
		
			
			|  | 206 | +	if ( ( rc = ib_smc_get ( ibdev, local_mad ) ) != 0 )
 | 
		
	
		
			
			|  | 207 | +		return rc;
 | 
		
	
		
			
			|  | 208 | +
 | 
		
	
		
			
			|  | 209 | +	/* Notify Infiniband core of potential link state change */
 | 
		
	
		
			
			|  | 210 | +	ib_link_state_changed ( ibdev );
 | 
		
	
		
			
			|  | 211 | +
 | 
		
	
		
			
			|  | 212 | +	return 0;
 | 
		
	
		
			
			|  | 213 | +}
 |