1
0
mirror of https://github.com/corundum/corundum.git synced 2025-01-16 08:12:53 +08:00

modules/mqnic: Implement ethtool channels API

Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
Alex Forencich 2023-05-03 01:35:01 -07:00
parent 3302c1f832
commit a6da3a41cb
2 changed files with 56 additions and 0 deletions

View File

@ -146,6 +146,57 @@ static int mqnic_set_ringparam(struct net_device *ndev,
return ret;
}
static void mqnic_get_channels(struct net_device *ndev,
struct ethtool_channels *channel)
{
struct mqnic_priv *priv = netdev_priv(ndev);
channel->max_rx = mqnic_res_get_count(priv->interface->rxq_res);
channel->max_tx = mqnic_res_get_count(priv->interface->txq_res);
channel->rx_count = priv->rxq_count;
channel->tx_count = priv->txq_count;
}
static int mqnic_set_channels(struct net_device *ndev,
struct ethtool_channels *channel)
{
struct mqnic_priv *priv = netdev_priv(ndev);
u32 txq_count, rxq_count;
int port_up = priv->port_up;
int ret = 0;
rxq_count = channel->rx_count;
txq_count = channel->tx_count;
if (rxq_count == priv->rxq_count &&
txq_count == priv->txq_count)
return 0;
dev_info(priv->dev, "New TX channel count: %d", txq_count);
dev_info(priv->dev, "New RX channel count: %d", rxq_count);
mutex_lock(&priv->mdev->state_lock);
if (port_up)
mqnic_stop_port(ndev);
priv->txq_count = txq_count;
priv->rxq_count = rxq_count;
if (port_up) {
ret = mqnic_start_port(ndev);
if (ret)
dev_err(priv->dev, "%s: Failed to start port on interface %d netdev %d: %d",
__func__, priv->interface->index, priv->index, ret);
}
mutex_unlock(&priv->mdev->state_lock);
return ret;
}
static int mqnic_get_ts_info(struct net_device *ndev,
struct ethtool_ts_info *info)
{
@ -433,6 +484,8 @@ const struct ethtool_ops mqnic_ethtool_ops = {
.get_link = ethtool_op_get_link,
.get_ringparam = mqnic_get_ringparam,
.set_ringparam = mqnic_set_ringparam,
.get_channels = mqnic_get_channels,
.set_channels = mqnic_set_channels,
.get_ts_info = mqnic_get_ts_info,
.get_module_info = mqnic_get_module_info,
.get_module_eeprom = mqnic_get_module_eeprom,

View File

@ -53,6 +53,9 @@ int mqnic_start_port(struct net_device *ndev)
dev_info(mdev->dev, "%s on interface %d netdev %d", __func__,
priv->interface->index, priv->index);
netif_set_real_num_tx_queues(ndev, priv->txq_count);
netif_set_real_num_rx_queues(ndev, priv->rxq_count);
desc_block_size = min_t(u32, priv->interface->max_desc_block_size, 4);
// set up RX queues