Driver DesignΒΆ
The driver is implemented as a PCIe network device driver. The driver configures the CMAC, QDMA and STM-N components in the hardware design for performing packet reception and transmission. Each of these components have a set of APIs which are called from the network driver callback APIs registered with the Linux network subsystem.
CMAC APIs can be found in linux-kernel/driver/cmac
folder
QDMA APIs can be found in linux-kernel/driver/qdma
folder
STM-N APIs can be found in linux-kernel/driver/stmn
folder
The below network device operations are implemented in linux-kernel/driver/qep.c
static const struct net_device_ops qep_netdev_ops = { .ndo_open = qep_open, .ndo_stop = qep_stop, .ndo_start_xmit = qep_start_xmit, .ndo_select_queue = qep_select_queue, .ndo_get_stats64 = qep_get_stats64, .ndo_change_mtu = qep_change_mtu };
The following ethtool operations supported by the driver are implemented in linux-kernel/driver/qep_ethtool.c
:
static const struct ethtool_ops qep_ethtool_ops = {
.get_drvinfo = qep_get_drvinfo,
.get_regs_len = qep_get_regs_len,
.get_regs = qep_get_regs,
.get_link = ethtool_op_get_link,
.get_msglevel = qep_get_msglevel,
.set_msglevel = qep_set_msglevel,
.get_ringparam = qep_get_ringparam,
.set_ringparam = qep_set_ringparam,
.get_channels = qep_get_channels,
.set_channels = qep_set_channels,
.get_strings = qep_get_strings,
.get_ethtool_stats = qep_get_ethtool_stats,
.get_coalesce = qep_get_coalesce,
.set_coalesce = qep_set_coalesce,
.get_per_queue_coalesce = qep_get_per_queue_coalesce,
.set_per_queue_coalesce = qep_set_per_queue_coalesce,
.get_fecparam = qep_get_fecparam,
.set_fecparam = qep_set_fecparam,
.get_rxfh_key_size = qep_get_rxfh_key_size
.get_rxfh_indir_size = qep_rss_indir_size,
.get_rxfh = qep_get_rxfh,
.set_rxfh = qep_set_rxfh,
.get_rxnfc = qep_get_rxnfc,
.get_sset_count = qep_get_sset_count
};
Detailed documentation of the above network device operations and ethtool operations can be found in