linux/drivers/net/ethernet/netronome/nfp/nfp_port.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
   2/* Copyright (C) 2017-2018 Netronome Systems, Inc. */
   3
   4#ifndef _NFP_PORT_H_
   5#define _NFP_PORT_H_
   6
   7#include <net/devlink.h>
   8
   9struct net_device;
  10struct netdev_phys_item_id;
  11struct nfp_app;
  12struct nfp_pf;
  13struct nfp_port;
  14
  15/**
  16 * enum nfp_port_type - type of port NFP can switch traffic to
  17 * @NFP_PORT_INVALID:   port is invalid, %NFP_PORT_PHYS_PORT transitions to this
  18 *                      state when port disappears because of FW fault or config
  19 *                      change
  20 * @NFP_PORT_PHYS_PORT: external NIC port
  21 * @NFP_PORT_PF_PORT:   logical port of PCI PF
  22 * @NFP_PORT_VF_PORT:   logical port of PCI VF
  23 */
  24enum nfp_port_type {
  25        NFP_PORT_INVALID,
  26        NFP_PORT_PHYS_PORT,
  27        NFP_PORT_PF_PORT,
  28        NFP_PORT_VF_PORT,
  29};
  30
  31/**
  32 * enum nfp_port_flags - port flags (can be type-specific)
  33 * @NFP_PORT_CHANGED:   port state has changed since last eth table refresh;
  34 *                      for NFP_PORT_PHYS_PORT, never set otherwise; must hold
  35 *                      rtnl_lock to clear
  36 */
  37enum nfp_port_flags {
  38        NFP_PORT_CHANGED = 0,
  39};
  40
  41/**
  42 * struct nfp_port - structure representing NFP port
  43 * @netdev:     backpointer to associated netdev
  44 * @type:       what port type does the entity represent
  45 * @flags:      port flags
  46 * @tc_offload_cnt:     number of active TC offloads, how offloads are counted
  47 *                      is not defined, use as a boolean
  48 * @app:        backpointer to the app structure
  49 * @dl_port:    devlink port structure
  50 * @eth_id:     for %NFP_PORT_PHYS_PORT port ID in NFP enumeration scheme
  51 * @eth_forced: for %NFP_PORT_PHYS_PORT port is forced UP or DOWN, don't change
  52 * @eth_port:   for %NFP_PORT_PHYS_PORT translated ETH Table port entry
  53 * @eth_stats:  for %NFP_PORT_PHYS_PORT MAC stats if available
  54 * @pf_id:      for %NFP_PORT_PF_PORT, %NFP_PORT_VF_PORT ID of the PCI PF (0-3)
  55 * @vf_id:      for %NFP_PORT_VF_PORT ID of the PCI VF within @pf_id
  56 * @pf_split:   for %NFP_PORT_PF_PORT %true if PCI PF has more than one vNIC
  57 * @pf_split_id:for %NFP_PORT_PF_PORT ID of PCI PF vNIC (valid if @pf_split)
  58 * @vnic:       for %NFP_PORT_PF_PORT, %NFP_PORT_VF_PORT vNIC ctrl memory
  59 * @port_list:  entry on pf's list of ports
  60 */
  61struct nfp_port {
  62        struct net_device *netdev;
  63        enum nfp_port_type type;
  64
  65        unsigned long flags;
  66        unsigned long tc_offload_cnt;
  67
  68        struct nfp_app *app;
  69
  70        struct devlink_port dl_port;
  71
  72        union {
  73                /* NFP_PORT_PHYS_PORT */
  74                struct {
  75                        unsigned int eth_id;
  76                        bool eth_forced;
  77                        struct nfp_eth_table_port *eth_port;
  78                        u8 __iomem *eth_stats;
  79                };
  80                /* NFP_PORT_PF_PORT, NFP_PORT_VF_PORT */
  81                struct {
  82                        unsigned int pf_id;
  83                        unsigned int vf_id;
  84                        bool pf_split;
  85                        unsigned int pf_split_id;
  86                        u8 __iomem *vnic;
  87                };
  88        };
  89
  90        struct list_head port_list;
  91};
  92
  93extern const struct ethtool_ops nfp_port_ethtool_ops;
  94
  95int nfp_port_setup_tc(struct net_device *netdev, enum tc_setup_type type,
  96                      void *type_data);
  97
  98static inline bool nfp_port_is_vnic(const struct nfp_port *port)
  99{
 100        return port->type == NFP_PORT_PF_PORT || port->type == NFP_PORT_VF_PORT;
 101}
 102
 103int
 104nfp_port_set_features(struct net_device *netdev, netdev_features_t features);
 105
 106struct nfp_port *nfp_port_from_netdev(struct net_device *netdev);
 107int nfp_port_get_port_parent_id(struct net_device *netdev,
 108                                struct netdev_phys_item_id *ppid);
 109struct nfp_port *
 110nfp_port_from_id(struct nfp_pf *pf, enum nfp_port_type type, unsigned int id);
 111struct nfp_eth_table_port *__nfp_port_get_eth_port(struct nfp_port *port);
 112struct nfp_eth_table_port *nfp_port_get_eth_port(struct nfp_port *port);
 113
 114int
 115nfp_port_get_phys_port_name(struct net_device *netdev, char *name, size_t len);
 116int nfp_port_configure(struct net_device *netdev, bool configed);
 117
 118struct nfp_port *
 119nfp_port_alloc(struct nfp_app *app, enum nfp_port_type type,
 120               struct net_device *netdev);
 121void nfp_port_free(struct nfp_port *port);
 122
 123int nfp_port_init_phy_port(struct nfp_pf *pf, struct nfp_app *app,
 124                           struct nfp_port *port, unsigned int id);
 125
 126int nfp_net_refresh_eth_port(struct nfp_port *port);
 127void nfp_net_refresh_port_table(struct nfp_port *port);
 128int nfp_net_refresh_port_table_sync(struct nfp_pf *pf);
 129
 130int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port);
 131void nfp_devlink_port_unregister(struct nfp_port *port);
 132void nfp_devlink_port_type_eth_set(struct nfp_port *port);
 133void nfp_devlink_port_type_clear(struct nfp_port *port);
 134
 135/**
 136 * Mac stats (0x0000 - 0x0200)
 137 * all counters are 64bit.
 138 */
 139#define NFP_MAC_STATS_BASE                0x0000
 140#define NFP_MAC_STATS_SIZE                0x0200
 141
 142#define NFP_MAC_STATS_RX_IN_OCTETS                      (NFP_MAC_STATS_BASE + 0x000)
 143                                                        /* unused 0x008 */
 144#define NFP_MAC_STATS_RX_FRAME_TOO_LONG_ERRORS          (NFP_MAC_STATS_BASE + 0x010)
 145#define NFP_MAC_STATS_RX_RANGE_LENGTH_ERRORS            (NFP_MAC_STATS_BASE + 0x018)
 146#define NFP_MAC_STATS_RX_VLAN_RECEIVED_OK               (NFP_MAC_STATS_BASE + 0x020)
 147#define NFP_MAC_STATS_RX_IN_ERRORS                      (NFP_MAC_STATS_BASE + 0x028)
 148#define NFP_MAC_STATS_RX_IN_BROADCAST_PKTS              (NFP_MAC_STATS_BASE + 0x030)
 149#define NFP_MAC_STATS_RX_DROP_EVENTS                    (NFP_MAC_STATS_BASE + 0x038)
 150#define NFP_MAC_STATS_RX_ALIGNMENT_ERRORS               (NFP_MAC_STATS_BASE + 0x040)
 151#define NFP_MAC_STATS_RX_PAUSE_MAC_CTRL_FRAMES          (NFP_MAC_STATS_BASE + 0x048)
 152#define NFP_MAC_STATS_RX_FRAMES_RECEIVED_OK             (NFP_MAC_STATS_BASE + 0x050)
 153#define NFP_MAC_STATS_RX_FRAME_CHECK_SEQUENCE_ERRORS    (NFP_MAC_STATS_BASE + 0x058)
 154#define NFP_MAC_STATS_RX_UNICAST_PKTS                   (NFP_MAC_STATS_BASE + 0x060)
 155#define NFP_MAC_STATS_RX_MULTICAST_PKTS                 (NFP_MAC_STATS_BASE + 0x068)
 156#define NFP_MAC_STATS_RX_PKTS                           (NFP_MAC_STATS_BASE + 0x070)
 157#define NFP_MAC_STATS_RX_UNDERSIZE_PKTS                 (NFP_MAC_STATS_BASE + 0x078)
 158#define NFP_MAC_STATS_RX_PKTS_64_OCTETS                 (NFP_MAC_STATS_BASE + 0x080)
 159#define NFP_MAC_STATS_RX_PKTS_65_TO_127_OCTETS          (NFP_MAC_STATS_BASE + 0x088)
 160#define NFP_MAC_STATS_RX_PKTS_512_TO_1023_OCTETS        (NFP_MAC_STATS_BASE + 0x090)
 161#define NFP_MAC_STATS_RX_PKTS_1024_TO_1518_OCTETS       (NFP_MAC_STATS_BASE + 0x098)
 162#define NFP_MAC_STATS_RX_JABBERS                        (NFP_MAC_STATS_BASE + 0x0a0)
 163#define NFP_MAC_STATS_RX_FRAGMENTS                      (NFP_MAC_STATS_BASE + 0x0a8)
 164#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS2            (NFP_MAC_STATS_BASE + 0x0b0)
 165#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS3            (NFP_MAC_STATS_BASE + 0x0b8)
 166#define NFP_MAC_STATS_RX_PKTS_128_TO_255_OCTETS         (NFP_MAC_STATS_BASE + 0x0c0)
 167#define NFP_MAC_STATS_RX_PKTS_256_TO_511_OCTETS         (NFP_MAC_STATS_BASE + 0x0c8)
 168#define NFP_MAC_STATS_RX_PKTS_1519_TO_MAX_OCTETS        (NFP_MAC_STATS_BASE + 0x0d0)
 169#define NFP_MAC_STATS_RX_OVERSIZE_PKTS                  (NFP_MAC_STATS_BASE + 0x0d8)
 170#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS0            (NFP_MAC_STATS_BASE + 0x0e0)
 171#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS1            (NFP_MAC_STATS_BASE + 0x0e8)
 172#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS4            (NFP_MAC_STATS_BASE + 0x0f0)
 173#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS5            (NFP_MAC_STATS_BASE + 0x0f8)
 174#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS6            (NFP_MAC_STATS_BASE + 0x100)
 175#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS7            (NFP_MAC_STATS_BASE + 0x108)
 176#define NFP_MAC_STATS_RX_MAC_CTRL_FRAMES_RECEIVED       (NFP_MAC_STATS_BASE + 0x110)
 177#define NFP_MAC_STATS_RX_MAC_HEAD_DROP                  (NFP_MAC_STATS_BASE + 0x118)
 178                                                        /* unused 0x120 */
 179                                                        /* unused 0x128 */
 180                                                        /* unused 0x130 */
 181#define NFP_MAC_STATS_TX_QUEUE_DROP                     (NFP_MAC_STATS_BASE + 0x138)
 182#define NFP_MAC_STATS_TX_OUT_OCTETS                     (NFP_MAC_STATS_BASE + 0x140)
 183                                                        /* unused 0x148 */
 184#define NFP_MAC_STATS_TX_VLAN_TRANSMITTED_OK            (NFP_MAC_STATS_BASE + 0x150)
 185#define NFP_MAC_STATS_TX_OUT_ERRORS                     (NFP_MAC_STATS_BASE + 0x158)
 186#define NFP_MAC_STATS_TX_BROADCAST_PKTS                 (NFP_MAC_STATS_BASE + 0x160)
 187#define NFP_MAC_STATS_TX_PKTS_64_OCTETS                 (NFP_MAC_STATS_BASE + 0x168)
 188#define NFP_MAC_STATS_TX_PKTS_256_TO_511_OCTETS         (NFP_MAC_STATS_BASE + 0x170)
 189#define NFP_MAC_STATS_TX_PKTS_512_TO_1023_OCTETS        (NFP_MAC_STATS_BASE + 0x178)
 190#define NFP_MAC_STATS_TX_PAUSE_MAC_CTRL_FRAMES          (NFP_MAC_STATS_BASE + 0x180)
 191#define NFP_MAC_STATS_TX_FRAMES_TRANSMITTED_OK          (NFP_MAC_STATS_BASE + 0x188)
 192#define NFP_MAC_STATS_TX_UNICAST_PKTS                   (NFP_MAC_STATS_BASE + 0x190)
 193#define NFP_MAC_STATS_TX_MULTICAST_PKTS                 (NFP_MAC_STATS_BASE + 0x198)
 194#define NFP_MAC_STATS_TX_PKTS_65_TO_127_OCTETS          (NFP_MAC_STATS_BASE + 0x1a0)
 195#define NFP_MAC_STATS_TX_PKTS_128_TO_255_OCTETS         (NFP_MAC_STATS_BASE + 0x1a8)
 196#define NFP_MAC_STATS_TX_PKTS_1024_TO_1518_OCTETS       (NFP_MAC_STATS_BASE + 0x1b0)
 197#define NFP_MAC_STATS_TX_PKTS_1519_TO_MAX_OCTETS        (NFP_MAC_STATS_BASE + 0x1b8)
 198#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS0            (NFP_MAC_STATS_BASE + 0x1c0)
 199#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS1            (NFP_MAC_STATS_BASE + 0x1c8)
 200#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS4            (NFP_MAC_STATS_BASE + 0x1d0)
 201#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS5            (NFP_MAC_STATS_BASE + 0x1d8)
 202#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS2            (NFP_MAC_STATS_BASE + 0x1e0)
 203#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS3            (NFP_MAC_STATS_BASE + 0x1e8)
 204#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS6            (NFP_MAC_STATS_BASE + 0x1f0)
 205#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS7            (NFP_MAC_STATS_BASE + 0x1f8)
 206
 207#endif
 208