static void qeth_set_ethtool_link_modes()

in net/qeth_ethtool.c [330:425]


static void qeth_set_ethtool_link_modes(struct ethtool_link_ksettings *cmd,
					enum qeth_link_mode link_mode)
{
	ethtool_link_ksettings_zero_link_mode(cmd, supported);
	ethtool_link_ksettings_zero_link_mode(cmd, advertising);
	ethtool_link_ksettings_zero_link_mode(cmd, lp_advertising);

	ethtool_link_ksettings_add_link_mode(cmd, supported, Autoneg);
	ethtool_link_ksettings_add_link_mode(cmd, advertising, Autoneg);

	switch (cmd->base.port) {
	case PORT_TP:
		ethtool_link_ksettings_add_link_mode(cmd, supported, TP);
		ethtool_link_ksettings_add_link_mode(cmd, advertising, TP);

		switch (cmd->base.speed) {
		case SPEED_10000:
			ethtool_link_ksettings_add_link_mode(cmd, supported,
							     10000baseT_Full);
			ethtool_link_ksettings_add_link_mode(cmd, advertising,
							     10000baseT_Full);
			fallthrough;
		case SPEED_1000:
			ethtool_link_ksettings_add_link_mode(cmd, supported,
							     1000baseT_Full);
			ethtool_link_ksettings_add_link_mode(cmd, advertising,
							     1000baseT_Full);
			ethtool_link_ksettings_add_link_mode(cmd, supported,
							     1000baseT_Half);
			ethtool_link_ksettings_add_link_mode(cmd, advertising,
							     1000baseT_Half);
			fallthrough;
		case SPEED_100:
			ethtool_link_ksettings_add_link_mode(cmd, supported,
							     100baseT_Full);
			ethtool_link_ksettings_add_link_mode(cmd, advertising,
							     100baseT_Full);
			ethtool_link_ksettings_add_link_mode(cmd, supported,
							     100baseT_Half);
			ethtool_link_ksettings_add_link_mode(cmd, advertising,
							     100baseT_Half);
			fallthrough;
		case SPEED_10:
			ethtool_link_ksettings_add_link_mode(cmd, supported,
							     10baseT_Full);
			ethtool_link_ksettings_add_link_mode(cmd, advertising,
							     10baseT_Full);
			ethtool_link_ksettings_add_link_mode(cmd, supported,
							     10baseT_Half);
			ethtool_link_ksettings_add_link_mode(cmd, advertising,
							     10baseT_Half);
			break;
		default:
			break;
		}

		break;
	case PORT_FIBRE:
		ethtool_link_ksettings_add_link_mode(cmd, supported, FIBRE);
		ethtool_link_ksettings_add_link_mode(cmd, advertising, FIBRE);

		switch (cmd->base.speed) {
		case SPEED_25000:
			ethtool_link_ksettings_add_link_mode(cmd, supported,
							     25000baseSR_Full);
			ethtool_link_ksettings_add_link_mode(cmd, advertising,
							     25000baseSR_Full);
			break;
		case SPEED_10000:
			if (link_mode == QETH_LINK_MODE_FIBRE_LONG) {
				ethtool_link_ksettings_add_link_mode(cmd, supported,
								     10000baseLR_Full);
				ethtool_link_ksettings_add_link_mode(cmd, advertising,
								     10000baseLR_Full);
			} else if (link_mode == QETH_LINK_MODE_FIBRE_SHORT) {
				ethtool_link_ksettings_add_link_mode(cmd, supported,
								     10000baseSR_Full);
				ethtool_link_ksettings_add_link_mode(cmd, advertising,
								     10000baseSR_Full);
			}
			break;
		case SPEED_1000:
			ethtool_link_ksettings_add_link_mode(cmd, supported,
							     1000baseX_Full);
			ethtool_link_ksettings_add_link_mode(cmd, advertising,
							     1000baseX_Full);
			break;
		default:
			break;
		}

		break;
	default:
		break;
	}
}