root/drivers/net/ethernet/netronome/nfp/nfp_port.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. __printf

   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 
   9 struct net_device;
  10 struct netdev_phys_item_id;
  11 struct nfp_app;
  12 struct nfp_pf;
  13 struct 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  */
  24 enum 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  */
  37 enum 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  */
  61 struct 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 
  93 extern const struct ethtool_ops nfp_port_ethtool_ops;
  94 
  95 __printf(2, 3) u8 *nfp_pr_et(u8 *data, const char *fmt, ...);
  96 
  97 int nfp_port_setup_tc(struct net_device *netdev, enum tc_setup_type type,
  98                       void *type_data);
  99 
 100 static inline bool nfp_port_is_vnic(const struct nfp_port *port)
 101 {
 102         return port->type == NFP_PORT_PF_PORT || port->type == NFP_PORT_VF_PORT;
 103 }
 104 
 105 int
 106 nfp_port_set_features(struct net_device *netdev, netdev_features_t features);
 107 
 108 struct nfp_port *nfp_port_from_netdev(struct net_device *netdev);
 109 int nfp_port_get_port_parent_id(struct net_device *netdev,
 110                                 struct netdev_phys_item_id *ppid);
 111 struct nfp_port *
 112 nfp_port_from_id(struct nfp_pf *pf, enum nfp_port_type type, unsigned int id);
 113 struct nfp_eth_table_port *__nfp_port_get_eth_port(struct nfp_port *port);
 114 struct nfp_eth_table_port *nfp_port_get_eth_port(struct nfp_port *port);
 115 
 116 int
 117 nfp_port_get_phys_port_name(struct net_device *netdev, char *name, size_t len);
 118 int nfp_port_configure(struct net_device *netdev, bool configed);
 119 
 120 struct nfp_port *
 121 nfp_port_alloc(struct nfp_app *app, enum nfp_port_type type,
 122                struct net_device *netdev);
 123 void nfp_port_free(struct nfp_port *port);
 124 
 125 int nfp_port_init_phy_port(struct nfp_pf *pf, struct nfp_app *app,
 126                            struct nfp_port *port, unsigned int id);
 127 
 128 int nfp_net_refresh_eth_port(struct nfp_port *port);
 129 void nfp_net_refresh_port_table(struct nfp_port *port);
 130 int nfp_net_refresh_port_table_sync(struct nfp_pf *pf);
 131 
 132 int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port);
 133 void nfp_devlink_port_unregister(struct nfp_port *port);
 134 void nfp_devlink_port_type_eth_set(struct nfp_port *port);
 135 void nfp_devlink_port_type_clear(struct nfp_port *port);
 136 
 137 /**
 138  * Mac stats (0x0000 - 0x0200)
 139  * all counters are 64bit.
 140  */
 141 #define NFP_MAC_STATS_BASE                0x0000
 142 #define NFP_MAC_STATS_SIZE                0x0200
 143 
 144 #define NFP_MAC_STATS_RX_IN_OCTETS                      (NFP_MAC_STATS_BASE + 0x000)
 145                                                         /* unused 0x008 */
 146 #define NFP_MAC_STATS_RX_FRAME_TOO_LONG_ERRORS          (NFP_MAC_STATS_BASE + 0x010)
 147 #define NFP_MAC_STATS_RX_RANGE_LENGTH_ERRORS            (NFP_MAC_STATS_BASE + 0x018)
 148 #define NFP_MAC_STATS_RX_VLAN_RECEIVED_OK               (NFP_MAC_STATS_BASE + 0x020)
 149 #define NFP_MAC_STATS_RX_IN_ERRORS                      (NFP_MAC_STATS_BASE + 0x028)
 150 #define NFP_MAC_STATS_RX_IN_BROADCAST_PKTS              (NFP_MAC_STATS_BASE + 0x030)
 151 #define NFP_MAC_STATS_RX_DROP_EVENTS                    (NFP_MAC_STATS_BASE + 0x038)
 152 #define NFP_MAC_STATS_RX_ALIGNMENT_ERRORS               (NFP_MAC_STATS_BASE + 0x040)
 153 #define NFP_MAC_STATS_RX_PAUSE_MAC_CTRL_FRAMES          (NFP_MAC_STATS_BASE + 0x048)
 154 #define NFP_MAC_STATS_RX_FRAMES_RECEIVED_OK             (NFP_MAC_STATS_BASE + 0x050)
 155 #define NFP_MAC_STATS_RX_FRAME_CHECK_SEQUENCE_ERRORS    (NFP_MAC_STATS_BASE + 0x058)
 156 #define NFP_MAC_STATS_RX_UNICAST_PKTS                   (NFP_MAC_STATS_BASE + 0x060)
 157 #define NFP_MAC_STATS_RX_MULTICAST_PKTS                 (NFP_MAC_STATS_BASE + 0x068)
 158 #define NFP_MAC_STATS_RX_PKTS                           (NFP_MAC_STATS_BASE + 0x070)
 159 #define NFP_MAC_STATS_RX_UNDERSIZE_PKTS                 (NFP_MAC_STATS_BASE + 0x078)
 160 #define NFP_MAC_STATS_RX_PKTS_64_OCTETS                 (NFP_MAC_STATS_BASE + 0x080)
 161 #define NFP_MAC_STATS_RX_PKTS_65_TO_127_OCTETS          (NFP_MAC_STATS_BASE + 0x088)
 162 #define NFP_MAC_STATS_RX_PKTS_512_TO_1023_OCTETS        (NFP_MAC_STATS_BASE + 0x090)
 163 #define NFP_MAC_STATS_RX_PKTS_1024_TO_1518_OCTETS       (NFP_MAC_STATS_BASE + 0x098)
 164 #define NFP_MAC_STATS_RX_JABBERS                        (NFP_MAC_STATS_BASE + 0x0a0)
 165 #define NFP_MAC_STATS_RX_FRAGMENTS                      (NFP_MAC_STATS_BASE + 0x0a8)
 166 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS2            (NFP_MAC_STATS_BASE + 0x0b0)
 167 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS3            (NFP_MAC_STATS_BASE + 0x0b8)
 168 #define NFP_MAC_STATS_RX_PKTS_128_TO_255_OCTETS         (NFP_MAC_STATS_BASE + 0x0c0)
 169 #define NFP_MAC_STATS_RX_PKTS_256_TO_511_OCTETS         (NFP_MAC_STATS_BASE + 0x0c8)
 170 #define NFP_MAC_STATS_RX_PKTS_1519_TO_MAX_OCTETS        (NFP_MAC_STATS_BASE + 0x0d0)
 171 #define NFP_MAC_STATS_RX_OVERSIZE_PKTS                  (NFP_MAC_STATS_BASE + 0x0d8)
 172 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS0            (NFP_MAC_STATS_BASE + 0x0e0)
 173 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS1            (NFP_MAC_STATS_BASE + 0x0e8)
 174 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS4            (NFP_MAC_STATS_BASE + 0x0f0)
 175 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS5            (NFP_MAC_STATS_BASE + 0x0f8)
 176 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS6            (NFP_MAC_STATS_BASE + 0x100)
 177 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS7            (NFP_MAC_STATS_BASE + 0x108)
 178 #define NFP_MAC_STATS_RX_MAC_CTRL_FRAMES_RECEIVED       (NFP_MAC_STATS_BASE + 0x110)
 179 #define NFP_MAC_STATS_RX_MAC_HEAD_DROP                  (NFP_MAC_STATS_BASE + 0x118)
 180                                                         /* unused 0x120 */
 181                                                         /* unused 0x128 */
 182                                                         /* unused 0x130 */
 183 #define NFP_MAC_STATS_TX_QUEUE_DROP                     (NFP_MAC_STATS_BASE + 0x138)
 184 #define NFP_MAC_STATS_TX_OUT_OCTETS                     (NFP_MAC_STATS_BASE + 0x140)
 185                                                         /* unused 0x148 */
 186 #define NFP_MAC_STATS_TX_VLAN_TRANSMITTED_OK            (NFP_MAC_STATS_BASE + 0x150)
 187 #define NFP_MAC_STATS_TX_OUT_ERRORS                     (NFP_MAC_STATS_BASE + 0x158)
 188 #define NFP_MAC_STATS_TX_BROADCAST_PKTS                 (NFP_MAC_STATS_BASE + 0x160)
 189 #define NFP_MAC_STATS_TX_PKTS_64_OCTETS                 (NFP_MAC_STATS_BASE + 0x168)
 190 #define NFP_MAC_STATS_TX_PKTS_256_TO_511_OCTETS         (NFP_MAC_STATS_BASE + 0x170)
 191 #define NFP_MAC_STATS_TX_PKTS_512_TO_1023_OCTETS        (NFP_MAC_STATS_BASE + 0x178)
 192 #define NFP_MAC_STATS_TX_PAUSE_MAC_CTRL_FRAMES          (NFP_MAC_STATS_BASE + 0x180)
 193 #define NFP_MAC_STATS_TX_FRAMES_TRANSMITTED_OK          (NFP_MAC_STATS_BASE + 0x188)
 194 #define NFP_MAC_STATS_TX_UNICAST_PKTS                   (NFP_MAC_STATS_BASE + 0x190)
 195 #define NFP_MAC_STATS_TX_MULTICAST_PKTS                 (NFP_MAC_STATS_BASE + 0x198)
 196 #define NFP_MAC_STATS_TX_PKTS_65_TO_127_OCTETS          (NFP_MAC_STATS_BASE + 0x1a0)
 197 #define NFP_MAC_STATS_TX_PKTS_128_TO_255_OCTETS         (NFP_MAC_STATS_BASE + 0x1a8)
 198 #define NFP_MAC_STATS_TX_PKTS_1024_TO_1518_OCTETS       (NFP_MAC_STATS_BASE + 0x1b0)
 199 #define NFP_MAC_STATS_TX_PKTS_1519_TO_MAX_OCTETS        (NFP_MAC_STATS_BASE + 0x1b8)
 200 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS0            (NFP_MAC_STATS_BASE + 0x1c0)
 201 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS1            (NFP_MAC_STATS_BASE + 0x1c8)
 202 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS4            (NFP_MAC_STATS_BASE + 0x1d0)
 203 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS5            (NFP_MAC_STATS_BASE + 0x1d8)
 204 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS2            (NFP_MAC_STATS_BASE + 0x1e0)
 205 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS3            (NFP_MAC_STATS_BASE + 0x1e8)
 206 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS6            (NFP_MAC_STATS_BASE + 0x1f0)
 207 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS7            (NFP_MAC_STATS_BASE + 0x1f8)
 208 
 209 #endif

/* [<][>][^][v][top][bottom][index][help] */