forked from mirrors/linux
		
	IB: Add new InfiniBand link speeds
Introduce support for the following extended speeds:
FDR-10: a Mellanox proprietary link speed which is 10.3125 Gbps with
        64b/66b encoding rather than 8b/10b encoding.
FDR:    IBA extended speed 14.0625 Gbps.
EDR:    IBA extended speed 25.78125 Gbps.
Signed-off-by: Marcel Apfelbaum <marcela@dev.mellanox.co.il>
Reviewed-by: Hal Rosenstock <hal@mellanox.com>
Reviewed-by: Sean Hefty <sean.hefty@intel.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
			
			
This commit is contained in:
		
							parent
							
								
									976d167615
								
							
						
					
					
						commit
						71eeba161d
					
				
					 3 changed files with 64 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -185,17 +185,35 @@ static ssize_t rate_show(struct ib_port *p, struct port_attribute *unused,
 | 
			
		|||
	if (ret)
 | 
			
		||||
		return ret;
 | 
			
		||||
 | 
			
		||||
	rate = (25 * attr.active_speed) / 10;
 | 
			
		||||
 | 
			
		||||
	switch (attr.active_speed) {
 | 
			
		||||
	case 2: speed = " DDR"; break;
 | 
			
		||||
	case 4: speed = " QDR"; break;
 | 
			
		||||
	case 2:
 | 
			
		||||
		speed = " DDR";
 | 
			
		||||
		break;
 | 
			
		||||
	case 4:
 | 
			
		||||
		speed = " QDR";
 | 
			
		||||
		break;
 | 
			
		||||
	case 8:
 | 
			
		||||
		speed = " FDR10";
 | 
			
		||||
		rate = 10;
 | 
			
		||||
		break;
 | 
			
		||||
	case 16:
 | 
			
		||||
		speed = " FDR";
 | 
			
		||||
		rate = 14;
 | 
			
		||||
		break;
 | 
			
		||||
	case 32:
 | 
			
		||||
		speed = " EDR";
 | 
			
		||||
		rate = 25;
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rate = 25 * ib_width_enum_to_int(attr.active_width) * attr.active_speed;
 | 
			
		||||
	rate *= ib_width_enum_to_int(attr.active_width);
 | 
			
		||||
	if (rate < 0)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	return sprintf(buf, "%d%s Gb/sec (%dX%s)\n",
 | 
			
		||||
		       rate / 10, rate % 10 ? ".5" : "",
 | 
			
		||||
		       rate, (attr.active_speed == 1) ? ".5" : "",
 | 
			
		||||
		       ib_width_enum_to_int(attr.active_width), speed);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,6 +77,31 @@ enum ib_rate mult_to_ib_rate(int mult)
 | 
			
		|||
}
 | 
			
		||||
EXPORT_SYMBOL(mult_to_ib_rate);
 | 
			
		||||
 | 
			
		||||
int ib_rate_to_mbps(enum ib_rate rate)
 | 
			
		||||
{
 | 
			
		||||
	switch (rate) {
 | 
			
		||||
	case IB_RATE_2_5_GBPS: return 2500;
 | 
			
		||||
	case IB_RATE_5_GBPS:   return 5000;
 | 
			
		||||
	case IB_RATE_10_GBPS:  return 10000;
 | 
			
		||||
	case IB_RATE_20_GBPS:  return 20000;
 | 
			
		||||
	case IB_RATE_30_GBPS:  return 30000;
 | 
			
		||||
	case IB_RATE_40_GBPS:  return 40000;
 | 
			
		||||
	case IB_RATE_60_GBPS:  return 60000;
 | 
			
		||||
	case IB_RATE_80_GBPS:  return 80000;
 | 
			
		||||
	case IB_RATE_120_GBPS: return 120000;
 | 
			
		||||
	case IB_RATE_14_GBPS:  return 14062;
 | 
			
		||||
	case IB_RATE_56_GBPS:  return 56250;
 | 
			
		||||
	case IB_RATE_112_GBPS: return 112500;
 | 
			
		||||
	case IB_RATE_168_GBPS: return 168750;
 | 
			
		||||
	case IB_RATE_25_GBPS:  return 25781;
 | 
			
		||||
	case IB_RATE_100_GBPS: return 103125;
 | 
			
		||||
	case IB_RATE_200_GBPS: return 206250;
 | 
			
		||||
	case IB_RATE_300_GBPS: return 309375;
 | 
			
		||||
	default:	       return -1;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL(ib_rate_to_mbps);
 | 
			
		||||
 | 
			
		||||
enum rdma_transport_type
 | 
			
		||||
rdma_node_get_transport(enum rdma_node_type node_type)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -207,6 +207,7 @@ enum ib_port_cap_flags {
 | 
			
		|||
	IB_PORT_SM_DISABLED			= 1 << 10,
 | 
			
		||||
	IB_PORT_SYS_IMAGE_GUID_SUP		= 1 << 11,
 | 
			
		||||
	IB_PORT_PKEY_SW_EXT_PORT_TRAP_SUP	= 1 << 12,
 | 
			
		||||
	IB_PORT_EXTENDED_SPEEDS_SUP             = 1 << 14,
 | 
			
		||||
	IB_PORT_CM_SUP				= 1 << 16,
 | 
			
		||||
	IB_PORT_SNMP_TUNNEL_SUP			= 1 << 17,
 | 
			
		||||
	IB_PORT_REINIT_SUP			= 1 << 18,
 | 
			
		||||
| 
						 | 
				
			
			@ -415,7 +416,15 @@ enum ib_rate {
 | 
			
		|||
	IB_RATE_40_GBPS  = 7,
 | 
			
		||||
	IB_RATE_60_GBPS  = 8,
 | 
			
		||||
	IB_RATE_80_GBPS  = 9,
 | 
			
		||||
	IB_RATE_120_GBPS = 10
 | 
			
		||||
	IB_RATE_120_GBPS = 10,
 | 
			
		||||
	IB_RATE_14_GBPS  = 11,
 | 
			
		||||
	IB_RATE_56_GBPS  = 12,
 | 
			
		||||
	IB_RATE_112_GBPS = 13,
 | 
			
		||||
	IB_RATE_168_GBPS = 14,
 | 
			
		||||
	IB_RATE_25_GBPS  = 15,
 | 
			
		||||
	IB_RATE_100_GBPS = 16,
 | 
			
		||||
	IB_RATE_200_GBPS = 17,
 | 
			
		||||
	IB_RATE_300_GBPS = 18
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -426,6 +435,13 @@ enum ib_rate {
 | 
			
		|||
 */
 | 
			
		||||
int ib_rate_to_mult(enum ib_rate rate) __attribute_const__;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ib_rate_to_mbps - Convert the IB rate enum to Mbps.
 | 
			
		||||
 * For example, IB_RATE_2_5_GBPS will be converted to 2500.
 | 
			
		||||
 * @rate: rate to convert.
 | 
			
		||||
 */
 | 
			
		||||
int ib_rate_to_mbps(enum ib_rate rate) __attribute_const__;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * mult_to_ib_rate - Convert a multiple of 2.5 Gbit/sec to an IB rate
 | 
			
		||||
 * enum.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue