Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/net/can/flexcan/   (Fast Lexical Analyzer Version 2.6©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  flexcan-ethtool.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0+
/* Copyright (c) 2022 Amarula Solutions, Dario Binacchi <dario.binacchi@amarulasolutions.com>
 * Copyright (c) 2022 Pengutronix, Marc Kleine-Budde <kernel@pengutronix.de>
 *
 */


#include <linux/can/dev.h>
#include <linux/ethtool.h>
#include <linux/kernel.h>
#include <linux/netdevice.h>
#include <linux/platform_device.h>

#include "flexcan.h"

static const char flexcan_priv_flags_strings[][ETH_GSTRING_LEN] = {
#define FLEXCAN_PRIV_FLAGS_RX_RTR BIT(0)
 "rx-rtr",
};

static void
flexcan_get_ringparam(struct net_device *ndev, struct ethtool_ringparam *ring,
        struct kernel_ethtool_ringparam *kernel_ring,
        struct netlink_ext_ack *ext_ack)
{
 const struct flexcan_priv *priv = netdev_priv(ndev);

 ring->rx_max_pending = priv->mb_count;
 ring->tx_max_pending = priv->mb_count;

 if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_RX_MAILBOX)
  ring->rx_pending = priv->offload.mb_last -
   priv->offload.mb_first + 1;
 else
  ring->rx_pending = 6; /* RX-FIFO depth is fixed */

 /* the drive currently supports only on TX buffer */
 ring->tx_pending = 1;
}

static void
flexcan_get_strings(struct net_device *ndev, u32 stringset, u8 *data)
{
 switch (stringset) {
 case ETH_SS_PRIV_FLAGS:
  memcpy(data, flexcan_priv_flags_strings,
         sizeof(flexcan_priv_flags_strings));
 }
}

static u32 flexcan_get_priv_flags(struct net_device *ndev)
{
 const struct flexcan_priv *priv = netdev_priv(ndev);
 u32 priv_flags = 0;

 if (flexcan_active_rx_rtr(priv))
  priv_flags |= FLEXCAN_PRIV_FLAGS_RX_RTR;

 return priv_flags;
}

static int flexcan_set_priv_flags(struct net_device *ndev, u32 priv_flags)
{
 struct flexcan_priv *priv = netdev_priv(ndev);
 u32 quirks = priv->devtype_data.quirks;

 if (priv_flags & FLEXCAN_PRIV_FLAGS_RX_RTR) {
  if (flexcan_supports_rx_mailbox_rtr(priv))
   quirks |= FLEXCAN_QUIRK_USE_RX_MAILBOX;
  else if (flexcan_supports_rx_fifo(priv))
   quirks &= ~FLEXCAN_QUIRK_USE_RX_MAILBOX;
  else
   quirks |= FLEXCAN_QUIRK_USE_RX_MAILBOX;
 } else {
  if (flexcan_supports_rx_mailbox(priv))
   quirks |= FLEXCAN_QUIRK_USE_RX_MAILBOX;
  else
   quirks &= ~FLEXCAN_QUIRK_USE_RX_MAILBOX;
 }

 if (quirks != priv->devtype_data.quirks && netif_running(ndev))
  return -EBUSY;

 priv->devtype_data.quirks = quirks;

 if (!(priv_flags & FLEXCAN_PRIV_FLAGS_RX_RTR) &&
     !flexcan_active_rx_rtr(priv))
  netdev_info(ndev,
       "Activating RX mailbox mode, cannot receive RTR frames.\n");

 return 0;
}

static int flexcan_get_sset_count(struct net_device *netdev, int sset)
{
 switch (sset) {
 case ETH_SS_PRIV_FLAGS:
  return ARRAY_SIZE(flexcan_priv_flags_strings);
 default:
  return -EOPNOTSUPP;
 }
}

const struct ethtool_ops flexcan_ethtool_ops = {
 .get_ringparam = flexcan_get_ringparam,
 .get_strings = flexcan_get_strings,
 .get_priv_flags = flexcan_get_priv_flags,
 .set_priv_flags = flexcan_set_priv_flags,
 .get_sset_count = flexcan_get_sset_count,
 .get_ts_info = ethtool_op_get_ts_info,
};

Messung V0.5
C=87 H=99 G=93

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.