Lines Matching +full:queue +full:- +full:rx
1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (C) 2021 Gerhard Engleder <gerhard@engleder-embedded.com> */
83 strscpy(drvinfo->driver, TSNEP, sizeof(drvinfo->driver)); in tsnep_ethtool_get_drvinfo()
84 strscpy(drvinfo->bus_info, dev_name(&adapter->pdev->dev), in tsnep_ethtool_get_drvinfo()
85 sizeof(drvinfo->bus_info)); in tsnep_ethtool_get_drvinfo()
96 /* first queue pair is within TSNEP_MAC_SIZE, only queues additional to in tsnep_ethtool_get_regs_len()
97 * the first queue pair extend the register length by TSNEP_QUEUE_SIZE in tsnep_ethtool_get_regs_len()
100 max(adapter->num_tx_queues, adapter->num_rx_queues) - 1; in tsnep_ethtool_get_regs_len()
112 regs->version = 1; in tsnep_ethtool_get_regs()
114 memcpy_fromio(p, adapter->addr, regs->len); in tsnep_ethtool_get_regs()
121 return adapter->msg_enable; in tsnep_ethtool_get_msglevel()
128 adapter->msg_enable = data; in tsnep_ethtool_set_msglevel()
135 int rx_count = adapter->num_rx_queues; in tsnep_ethtool_get_strings()
136 int tx_count = adapter->num_tx_queues; in tsnep_ethtool_get_strings()
171 int rx_count = adapter->num_rx_queues; in tsnep_ethtool_get_ethtool_stats()
172 int tx_count = adapter->num_tx_queues; in tsnep_ethtool_get_ethtool_stats()
180 for (i = 0; i < adapter->num_rx_queues; i++) { in tsnep_ethtool_get_ethtool_stats()
181 tsnep_stats.rx_packets += adapter->rx[i].packets; in tsnep_ethtool_get_ethtool_stats()
182 tsnep_stats.rx_bytes += adapter->rx[i].bytes; in tsnep_ethtool_get_ethtool_stats()
183 tsnep_stats.rx_dropped += adapter->rx[i].dropped; in tsnep_ethtool_get_ethtool_stats()
184 tsnep_stats.rx_multicast += adapter->rx[i].multicast; in tsnep_ethtool_get_ethtool_stats()
185 tsnep_stats.rx_alloc_failed += adapter->rx[i].alloc_failed; in tsnep_ethtool_get_ethtool_stats()
187 reg = ioread32(adapter->addr + ECM_STAT); in tsnep_ethtool_get_ethtool_stats()
194 for (i = 0; i < adapter->num_tx_queues; i++) { in tsnep_ethtool_get_ethtool_stats()
195 tsnep_stats.tx_packets += adapter->tx[i].packets; in tsnep_ethtool_get_ethtool_stats()
196 tsnep_stats.tx_bytes += adapter->tx[i].bytes; in tsnep_ethtool_get_ethtool_stats()
197 tsnep_stats.tx_dropped += adapter->tx[i].dropped; in tsnep_ethtool_get_ethtool_stats()
204 tsnep_rx_queue_stats.rx_packets = adapter->rx[i].packets; in tsnep_ethtool_get_ethtool_stats()
205 tsnep_rx_queue_stats.rx_bytes = adapter->rx[i].bytes; in tsnep_ethtool_get_ethtool_stats()
206 tsnep_rx_queue_stats.rx_dropped = adapter->rx[i].dropped; in tsnep_ethtool_get_ethtool_stats()
207 tsnep_rx_queue_stats.rx_multicast = adapter->rx[i].multicast; in tsnep_ethtool_get_ethtool_stats()
209 adapter->rx[i].alloc_failed; in tsnep_ethtool_get_ethtool_stats()
210 reg = ioread32(adapter->addr + TSNEP_QUEUE(i) + in tsnep_ethtool_get_ethtool_stats()
231 tsnep_tx_queue_stats.tx_packets += adapter->tx[i].packets; in tsnep_ethtool_get_ethtool_stats()
232 tsnep_tx_queue_stats.tx_bytes += adapter->tx[i].bytes; in tsnep_ethtool_get_ethtool_stats()
233 tsnep_tx_queue_stats.tx_dropped += adapter->tx[i].dropped; in tsnep_ethtool_get_ethtool_stats()
248 rx_count = adapter->num_rx_queues; in tsnep_ethtool_get_sset_count()
249 tx_count = adapter->num_tx_queues; in tsnep_ethtool_get_sset_count()
256 return -EOPNOTSUPP; in tsnep_ethtool_get_sset_count()
265 switch (cmd->cmd) { in tsnep_ethtool_get_rxnfc()
267 cmd->data = adapter->num_rx_queues; in tsnep_ethtool_get_rxnfc()
270 cmd->rule_cnt = adapter->rxnfc_count; in tsnep_ethtool_get_rxnfc()
271 cmd->data = adapter->rxnfc_max; in tsnep_ethtool_get_rxnfc()
272 cmd->data |= RX_CLS_LOC_SPECIAL; in tsnep_ethtool_get_rxnfc()
279 return -EOPNOTSUPP; in tsnep_ethtool_get_rxnfc()
288 switch (cmd->cmd) { in tsnep_ethtool_set_rxnfc()
294 return -EOPNOTSUPP; in tsnep_ethtool_set_rxnfc()
303 ch->max_combined = adapter->num_queues; in tsnep_ethtool_get_channels()
304 ch->combined_count = adapter->num_queues; in tsnep_ethtool_get_channels()
312 info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE | in tsnep_ethtool_get_ts_info()
319 if (adapter->ptp_clock) in tsnep_ethtool_get_ts_info()
320 info->phc_index = ptp_clock_index(adapter->ptp_clock); in tsnep_ethtool_get_ts_info()
322 info->phc_index = -1; in tsnep_ethtool_get_ts_info()
324 info->tx_types = BIT(HWTSTAMP_TX_OFF) | in tsnep_ethtool_get_ts_info()
326 info->rx_filters = BIT(HWTSTAMP_FILTER_NONE) | in tsnep_ethtool_get_ts_info()
337 for (i = 0; i < adapter->num_queues; i++) { in tsnep_get_queue_with_tx()
338 if (adapter->queue[i].tx) { in tsnep_get_queue_with_tx()
340 return &adapter->queue[i]; in tsnep_get_queue_with_tx()
342 index--; in tsnep_get_queue_with_tx()
354 for (i = 0; i < adapter->num_queues; i++) { in tsnep_get_queue_with_rx()
355 if (adapter->queue[i].rx) { in tsnep_get_queue_with_rx()
357 return &adapter->queue[i]; in tsnep_get_queue_with_rx()
359 index--; in tsnep_get_queue_with_rx()
372 struct tsnep_queue *queue; in tsnep_ethtool_get_coalesce() local
374 queue = tsnep_get_queue_with_rx(adapter, 0); in tsnep_ethtool_get_coalesce()
375 if (queue) in tsnep_ethtool_get_coalesce()
376 ec->rx_coalesce_usecs = tsnep_get_irq_coalesce(queue); in tsnep_ethtool_get_coalesce()
378 queue = tsnep_get_queue_with_tx(adapter, 0); in tsnep_ethtool_get_coalesce()
379 if (queue) in tsnep_ethtool_get_coalesce()
380 ec->tx_coalesce_usecs = tsnep_get_irq_coalesce(queue); in tsnep_ethtool_get_coalesce()
394 for (i = 0; i < adapter->num_queues; i++) { in tsnep_ethtool_set_coalesce()
395 /* RX coalesce has priority for queues with TX and RX */ in tsnep_ethtool_set_coalesce()
396 if (adapter->queue[i].rx) in tsnep_ethtool_set_coalesce()
397 retval = tsnep_set_irq_coalesce(&adapter->queue[i], in tsnep_ethtool_set_coalesce()
398 ec->rx_coalesce_usecs); in tsnep_ethtool_set_coalesce()
400 retval = tsnep_set_irq_coalesce(&adapter->queue[i], in tsnep_ethtool_set_coalesce()
401 ec->tx_coalesce_usecs); in tsnep_ethtool_set_coalesce()
410 u32 queue, in tsnep_ethtool_get_per_queue_coalesce() argument
417 if (queue >= max(adapter->num_tx_queues, adapter->num_rx_queues)) in tsnep_ethtool_get_per_queue_coalesce()
418 return -EINVAL; in tsnep_ethtool_get_per_queue_coalesce()
420 queue_with_rx = tsnep_get_queue_with_rx(adapter, queue); in tsnep_ethtool_get_per_queue_coalesce()
422 ec->rx_coalesce_usecs = tsnep_get_irq_coalesce(queue_with_rx); in tsnep_ethtool_get_per_queue_coalesce()
424 queue_with_tx = tsnep_get_queue_with_tx(adapter, queue); in tsnep_ethtool_get_per_queue_coalesce()
426 ec->tx_coalesce_usecs = tsnep_get_irq_coalesce(queue_with_tx); in tsnep_ethtool_get_per_queue_coalesce()
432 u32 queue, in tsnep_ethtool_set_per_queue_coalesce() argument
440 if (queue >= max(adapter->num_tx_queues, adapter->num_rx_queues)) in tsnep_ethtool_set_per_queue_coalesce()
441 return -EINVAL; in tsnep_ethtool_set_per_queue_coalesce()
443 queue_with_rx = tsnep_get_queue_with_rx(adapter, queue); in tsnep_ethtool_set_per_queue_coalesce()
445 retval = tsnep_set_irq_coalesce(queue_with_rx, ec->rx_coalesce_usecs); in tsnep_ethtool_set_per_queue_coalesce()
450 /* RX coalesce has priority for queues with TX and RX */ in tsnep_ethtool_set_per_queue_coalesce()
451 queue_with_tx = tsnep_get_queue_with_tx(adapter, queue); in tsnep_ethtool_set_per_queue_coalesce()
452 if (queue_with_tx && !queue_with_tx->rx) { in tsnep_ethtool_set_per_queue_coalesce()
453 retval = tsnep_set_irq_coalesce(queue_with_tx, ec->tx_coalesce_usecs); in tsnep_ethtool_set_per_queue_coalesce()