1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright (c) 2014, 2015 Netronome Systems, Inc. 3 * All rights reserved. 4 */ 5 6 #ifndef __NFP_NET_CTRL_H__ 7 #define __NFP_NET_CTRL_H__ 8 9 #include <stdint.h> 10 11 #include <ethdev_driver.h> 12 13 #include <nfp_common_ctrl.h> 14 15 /* 16 * Mac stats (0x0000 - 0x0200) 17 * All counters are 64bit. 18 */ 19 #define NFP_MAC_STATS_BASE 0x0000 20 #define NFP_MAC_STATS_SIZE 0x0200 21 22 #define NFP_MAC_STATS_RX_IN_OCTS (NFP_MAC_STATS_BASE + 0x000) 23 #define NFP_MAC_STATS_RX_FRAME_TOO_LONG_ERRORS (NFP_MAC_STATS_BASE + 0x010) 24 #define NFP_MAC_STATS_RX_RANGE_LENGTH_ERRORS (NFP_MAC_STATS_BASE + 0x018) 25 #define NFP_MAC_STATS_RX_VLAN_RECEIVED_OK (NFP_MAC_STATS_BASE + 0x020) 26 #define NFP_MAC_STATS_RX_IN_ERRORS (NFP_MAC_STATS_BASE + 0x028) 27 #define NFP_MAC_STATS_RX_IN_BROADCAST_PKTS (NFP_MAC_STATS_BASE + 0x030) 28 #define NFP_MAC_STATS_RX_DROP_EVENTS (NFP_MAC_STATS_BASE + 0x038) 29 #define NFP_MAC_STATS_RX_ALIGNMENT_ERRORS (NFP_MAC_STATS_BASE + 0x040) 30 #define NFP_MAC_STATS_RX_PAUSE_MAC_CTRL_FRAMES (NFP_MAC_STATS_BASE + 0x048) 31 #define NFP_MAC_STATS_RX_FRAMES_RECEIVED_OK (NFP_MAC_STATS_BASE + 0x050) 32 #define NFP_MAC_STATS_RX_FRAME_CHECK_SEQ_ERRORS (NFP_MAC_STATS_BASE + 0x058) 33 #define NFP_MAC_STATS_RX_UNICAST_PKTS (NFP_MAC_STATS_BASE + 0x060) 34 #define NFP_MAC_STATS_RX_MULTICAST_PKTS (NFP_MAC_STATS_BASE + 0x068) 35 #define NFP_MAC_STATS_RX_PKTS (NFP_MAC_STATS_BASE + 0x070) 36 #define NFP_MAC_STATS_RX_UNDERSIZE_PKTS (NFP_MAC_STATS_BASE + 0x078) 37 #define NFP_MAC_STATS_RX_PKTS_64_OCTS (NFP_MAC_STATS_BASE + 0x080) 38 #define NFP_MAC_STATS_RX_PKTS_65_TO_127_OCTS (NFP_MAC_STATS_BASE + 0x088) 39 #define NFP_MAC_STATS_RX_PKTS_512_TO_1023_OCTS (NFP_MAC_STATS_BASE + 0x090) 40 #define NFP_MAC_STATS_RX_PKTS_1024_TO_1518_OCTS (NFP_MAC_STATS_BASE + 0x098) 41 #define NFP_MAC_STATS_RX_JABBERS (NFP_MAC_STATS_BASE + 0x0a0) 42 #define NFP_MAC_STATS_RX_FRAGMENTS (NFP_MAC_STATS_BASE + 0x0a8) 43 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS2 (NFP_MAC_STATS_BASE + 0x0b0) 44 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS3 (NFP_MAC_STATS_BASE + 0x0b8) 45 #define NFP_MAC_STATS_RX_PKTS_128_TO_255_OCTS (NFP_MAC_STATS_BASE + 0x0c0) 46 #define NFP_MAC_STATS_RX_PKTS_256_TO_511_OCTS (NFP_MAC_STATS_BASE + 0x0c8) 47 #define NFP_MAC_STATS_RX_PKTS_1519_TO_MAX_OCTS (NFP_MAC_STATS_BASE + 0x0d0) 48 #define NFP_MAC_STATS_RX_OVERSIZE_PKTS (NFP_MAC_STATS_BASE + 0x0d8) 49 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS0 (NFP_MAC_STATS_BASE + 0x0e0) 50 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS1 (NFP_MAC_STATS_BASE + 0x0e8) 51 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS4 (NFP_MAC_STATS_BASE + 0x0f0) 52 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS5 (NFP_MAC_STATS_BASE + 0x0f8) 53 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS6 (NFP_MAC_STATS_BASE + 0x100) 54 #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS7 (NFP_MAC_STATS_BASE + 0x108) 55 #define NFP_MAC_STATS_RX_MAC_CTRL_FRAMES_REC (NFP_MAC_STATS_BASE + 0x110) 56 #define NFP_MAC_STATS_RX_MAC_HEAD_DROP (NFP_MAC_STATS_BASE + 0x118) 57 #define NFP_MAC_STATS_TX_QUEUE_DROP (NFP_MAC_STATS_BASE + 0x138) 58 #define NFP_MAC_STATS_TX_OUT_OCTS (NFP_MAC_STATS_BASE + 0x140) 59 #define NFP_MAC_STATS_TX_VLAN_TRANSMITTED_OK (NFP_MAC_STATS_BASE + 0x150) 60 #define NFP_MAC_STATS_TX_OUT_ERRORS (NFP_MAC_STATS_BASE + 0x158) 61 #define NFP_MAC_STATS_TX_BROADCAST_PKTS (NFP_MAC_STATS_BASE + 0x160) 62 #define NFP_MAC_STATS_TX_PKTS_64_OCTS (NFP_MAC_STATS_BASE + 0x168) 63 #define NFP_MAC_STATS_TX_PKTS_256_TO_511_OCTS (NFP_MAC_STATS_BASE + 0x170) 64 #define NFP_MAC_STATS_TX_PKTS_512_TO_1023_OCTS (NFP_MAC_STATS_BASE + 0x178) 65 #define NFP_MAC_STATS_TX_PAUSE_MAC_CTRL_FRAMES (NFP_MAC_STATS_BASE + 0x180) 66 #define NFP_MAC_STATS_TX_FRAMES_TRANSMITTED_OK (NFP_MAC_STATS_BASE + 0x188) 67 #define NFP_MAC_STATS_TX_UNICAST_PKTS (NFP_MAC_STATS_BASE + 0x190) 68 #define NFP_MAC_STATS_TX_MULTICAST_PKTS (NFP_MAC_STATS_BASE + 0x198) 69 #define NFP_MAC_STATS_TX_PKTS_65_TO_127_OCTS (NFP_MAC_STATS_BASE + 0x1a0) 70 #define NFP_MAC_STATS_TX_PKTS_128_TO_255_OCTS (NFP_MAC_STATS_BASE + 0x1a8) 71 #define NFP_MAC_STATS_TX_PKTS_1024_TO_1518_OCTS (NFP_MAC_STATS_BASE + 0x1b0) 72 #define NFP_MAC_STATS_TX_PKTS_1519_TO_MAX_OCTS (NFP_MAC_STATS_BASE + 0x1b8) 73 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS0 (NFP_MAC_STATS_BASE + 0x1c0) 74 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS1 (NFP_MAC_STATS_BASE + 0x1c8) 75 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS4 (NFP_MAC_STATS_BASE + 0x1d0) 76 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS5 (NFP_MAC_STATS_BASE + 0x1d8) 77 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS2 (NFP_MAC_STATS_BASE + 0x1e0) 78 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS3 (NFP_MAC_STATS_BASE + 0x1e8) 79 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS6 (NFP_MAC_STATS_BASE + 0x1f0) 80 #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS7 (NFP_MAC_STATS_BASE + 0x1f8) 81 82 /* 83 * General use mailbox area (0x1800 - 0x19ff) 84 * 4B used for update command and 4B return code followed by 85 * a max of 504B of variable length value. 86 */ 87 #define NFP_NET_CFG_MBOX_BASE 0x1800 88 #define NFP_NET_CFG_MBOX_VAL 0x1808 89 #define NFP_NET_CFG_MBOX_VAL_MAX_SZ 0x1F8 90 #define NFP_NET_CFG_MBOX_SIMPLE_CMD 0x0 91 #define NFP_NET_CFG_MBOX_SIMPLE_RET 0x4 92 #define NFP_NET_CFG_MBOX_SIMPLE_VAL 0x8 93 94 #define NFP_NET_CFG_MBOX_CMD_IPSEC 3 95 #define NFP_NET_CFG_MBOX_CMD_FLOW_STEER 10 96 97 /* 98 * TLV capabilities 99 * @NFP_NET_CFG_TLV_TYPE: Offset of type within the TLV 100 * @NFP_NET_CFG_TLV_TYPE_REQUIRED: Driver must be able to parse the TLV 101 * @NFP_NET_CFG_TLV_LENGTH: Offset of length within the TLV 102 * @NFP_NET_CFG_TLV_LENGTH_INC: TLV length increments 103 * @NFP_NET_CFG_TLV_VALUE: Offset of value with the TLV 104 * @NFP_NET_CFG_TLV_STATS_OFFSET: Length of TLV stats offset 105 * 106 * List of simple TLV structures, first one starts at @NFP_NET_CFG_TLV_BASE. 107 * Last structure must be of type @NFP_NET_CFG_TLV_TYPE_END. Presence of TLVs 108 * is indicated by @NFP_NET_CFG_TLV_BASE being non-zero. TLV structures may 109 * fill the entire remainder of the BAR or be shorter. FW must make sure TLVs 110 * don't conflict with other features which allocate space beyond 111 * @NFP_NET_CFG_TLV_BASE. @NFP_NET_CFG_TLV_TYPE_RESERVED should be used to wrap 112 * space used by such features. 113 * 114 * Note that the 4 byte TLV header is not counted in %NFP_NET_CFG_TLV_LENGTH. 115 */ 116 #define NFP_NET_CFG_TLV_TYPE 0x00 117 #define NFP_NET_CFG_TLV_TYPE_REQUIRED 0x8000 118 #define NFP_NET_CFG_TLV_LENGTH 0x02 119 #define NFP_NET_CFG_TLV_LENGTH_INC 4 120 #define NFP_NET_CFG_TLV_VALUE 0x04 121 #define NFP_NET_CFG_TLV_STATS_OFFSET 0x08 122 123 #define NFP_NET_CFG_TLV_HEADER_REQUIRED 0x80000000 124 #define NFP_NET_CFG_TLV_HEADER_TYPE 0x7fff0000 125 #define NFP_NET_CFG_TLV_HEADER_LENGTH 0x0000ffff 126 127 /* 128 * Capability TLV types 129 * 130 * @NFP_NET_CFG_TLV_TYPE_UNKNOWN: 131 * Special TLV type to catch bugs, should never be encountered. Drivers should 132 * treat encountering this type as error and refuse to probe. 133 * 134 * @NFP_NET_CFG_TLV_TYPE_RESERVED: 135 * Reserved space, may contain legacy fixed-offset fields, or be used for 136 * padding. The use of this type should be otherwise avoided. 137 * 138 * @NFP_NET_CFG_TLV_TYPE_END: 139 * Empty, end of TLV list. Must be the last TLV. Drivers will stop processing 140 * further TLVs when encountered. 141 * 142 * @NFP_NET_CFG_TLV_TYPE_ME_FREQ: 143 * Single word, ME frequency in MHz as used in calculation for 144 * @NFP_NET_CFG_RXR_IRQ_MOD and @NFP_NET_CFG_TXR_IRQ_MOD. 145 * 146 * @NFP_NET_CFG_TLV_TYPE_MBOX: 147 * Variable, mailbox area. Overwrites the default location which is 148 * @NFP_NET_CFG_MBOX_BASE and length @NFP_NET_CFG_MBOX_VAL_MAX_SZ. 149 * 150 * @NFP_NET_CFG_TLV_TYPE_EXPERIMENTAL0: 151 * @NFP_NET_CFG_TLV_TYPE_EXPERIMENTAL1: 152 * Variable, experimental IDs. IDs designated for internal development and 153 * experiments before a stable TLV ID has been allocated to a feature. Should 154 * never be present in production FW. 155 * 156 * @NFP_NET_CFG_TLV_TYPE_REPR_CAP: 157 * Single word, equivalent of %NFP_NET_CFG_CAP for representors, features which 158 * can be used on representors. 159 * 160 * @NFP_NET_CFG_TLV_TYPE_MBOX_CMSG_TYPES: 161 * Variable, bitmap of control message types supported by the mailbox handler. 162 * Bit 0 corresponds to message type 0, bit 1 to 1, etc. Control messages are 163 * encapsulated into simple TLVs, with an end TLV and written to the Mailbox. 164 * 165 * @NFP_NET_CFG_TLV_TYPE_CRYPTO_OPS: 166 * 8 words, bitmaps of supported and enabled crypto operations. 167 * First 16B (4 words) contains a bitmap of supported crypto operations, 168 * and next 16B contain the enabled operations. 169 * This capability is obsoleted by ones with better sync methods. 170 * 171 * @NFP_NET_CFG_TLV_TYPE_VNIC_STATS: 172 * Variable, per-vNIC statistics, data should be 8B aligned (FW should insert 173 * zero-length RESERVED TLV to pad). 174 * TLV data has two sections. First is an array of statistics' IDs (2B each). 175 * Second 8B statistics themselves. Statistics are 8B aligned, meaning there 176 * may be a padding between sections. 177 * Number of statistics can be determined as floor(tlv.length / (2 + 8)). 178 * This TLV overwrites %NFP_NET_CFG_STATS_* values (statistics in this TLV 179 * duplicate the old ones, so driver should be careful not to unnecessarily 180 * render both). 181 * 182 * @NFP_NET_CFG_TLV_TYPE_CRYPTO_OPS_RX_SCAN: 183 * Same as %NFP_NET_CFG_TLV_TYPE_CRYPTO_OPS, but crypto TLS does stream scan 184 * RX sync, rather than kernel-assisted sync. 185 * 186 * @NFP_NET_CFG_TLV_TYPE_CRYPTO_OPS_LENGTH: 187 * CRYPTO OPS TLV should be at least 32B. 188 */ 189 #define NFP_NET_CFG_TLV_TYPE_UNKNOWN 0 190 #define NFP_NET_CFG_TLV_TYPE_RESERVED 1 191 #define NFP_NET_CFG_TLV_TYPE_END 2 192 #define NFP_NET_CFG_TLV_TYPE_MBOX 4 193 #define NFP_NET_CFG_TLV_TYPE_MBOX_CMSG_TYPES 10 194 195 int nfp_net_tlv_caps_parse(struct rte_eth_dev *dev); 196 197 /** 198 * Get RSS flag based on firmware's capability 199 * 200 * @param hw_cap 201 * The firmware's capabilities 202 */ 203 static inline uint32_t 204 nfp_net_cfg_ctrl_rss(uint32_t hw_cap) 205 { 206 if ((hw_cap & NFP_NET_CFG_CTRL_RSS2) != 0) 207 return NFP_NET_CFG_CTRL_RSS2; 208 209 return NFP_NET_CFG_CTRL_RSS; 210 } 211 212 #endif /* __NFP_NET_CTRL_H__ */ 213