drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_ethtool.c

Source file repositories/reference/linux-study-clean/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_ethtool.c

File Facts

System
Linux kernel
Corpus path
drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_ethtool.c
Extension
.c
Size
9658 bytes
Lines
270
Domain
Driver Families
Bucket
drivers/net
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

if (link_info->autoneg & OCTEP_VF_LINK_MODE_AUTONEG_ADVERTISED) {
			ethtool_link_ksettings_add_link_mode(cmd, advertising, Autoneg);
			cmd->base.autoneg = AUTONEG_ENABLE;
		} else {
			cmd->base.autoneg = AUTONEG_DISABLE;
		}
	} else {
		cmd->base.autoneg = AUTONEG_DISABLE;
	}

	cmd->base.port = PORT_FIBRE;
	ethtool_link_ksettings_add_link_mode(cmd, supported, FIBRE);
	ethtool_link_ksettings_add_link_mode(cmd, advertising, FIBRE);

	if (netif_carrier_ok(netdev)) {
		cmd->base.speed = link_info->speed;
		cmd->base.duplex = DUPLEX_FULL;
	} else {
		cmd->base.speed = SPEED_UNKNOWN;
		cmd->base.duplex = DUPLEX_UNKNOWN;
	}
	return 0;
}

static void octep_vf_get_channels(struct net_device *dev,
				  struct ethtool_channels *channel)
{
	struct octep_vf_device *oct = netdev_priv(dev);

	channel->max_combined = CFG_GET_PORTS_MAX_IO_RINGS(oct->conf);
	channel->combined_count = CFG_GET_PORTS_ACTIVE_IO_RINGS(oct->conf);
}

static const struct ethtool_ops octep_vf_ethtool_ops = {
	.get_drvinfo = octep_vf_get_drvinfo,
	.get_link = ethtool_op_get_link,
	.get_strings = octep_vf_get_strings,
	.get_sset_count = octep_vf_get_sset_count,
	.get_ethtool_stats = octep_vf_get_ethtool_stats,
	.get_link_ksettings = octep_vf_get_link_ksettings,
	.get_channels = octep_vf_get_channels,
};

void octep_vf_set_ethtool_ops(struct net_device *netdev)
{
	netdev->ethtool_ops = &octep_vf_ethtool_ops;
}

Annotation

Implementation Notes