1 // SPDX-License-Identifier: GPL-2.0-only 2 3 #include <linux/ethtool_netlink.h> 4 #include <linux/net_tstamp.h> 5 #include <linux/phy.h> 6 #include <linux/rtnetlink.h> 7 #include <linux/ptp_clock_kernel.h> 8 #include <linux/phy_link_topology.h> 9 #include <net/netdev_queues.h> 10 11 #include "netlink.h" 12 #include "common.h" 13 #include "../core/dev.h" 14 15 16 const char netdev_features_strings[NETDEV_FEATURE_COUNT][ETH_GSTRING_LEN] = { 17 [NETIF_F_SG_BIT] = "tx-scatter-gather", 18 [NETIF_F_IP_CSUM_BIT] = "tx-checksum-ipv4", 19 [NETIF_F_HW_CSUM_BIT] = "tx-checksum-ip-generic", 20 [NETIF_F_IPV6_CSUM_BIT] = "tx-checksum-ipv6", 21 [NETIF_F_HIGHDMA_BIT] = "highdma", 22 [NETIF_F_FRAGLIST_BIT] = "tx-scatter-gather-fraglist", 23 [NETIF_F_HW_VLAN_CTAG_TX_BIT] = "tx-vlan-hw-insert", 24 25 [NETIF_F_HW_VLAN_CTAG_RX_BIT] = "rx-vlan-hw-parse", 26 [NETIF_F_HW_VLAN_CTAG_FILTER_BIT] = "rx-vlan-filter", 27 [NETIF_F_HW_VLAN_STAG_TX_BIT] = "tx-vlan-stag-hw-insert", 28 [NETIF_F_HW_VLAN_STAG_RX_BIT] = "rx-vlan-stag-hw-parse", 29 [NETIF_F_HW_VLAN_STAG_FILTER_BIT] = "rx-vlan-stag-filter", 30 [NETIF_F_VLAN_CHALLENGED_BIT] = "vlan-challenged", 31 [NETIF_F_GSO_BIT] = "tx-generic-segmentation", 32 [NETIF_F_GRO_BIT] = "rx-gro", 33 [NETIF_F_GRO_HW_BIT] = "rx-gro-hw", 34 [NETIF_F_LRO_BIT] = "rx-lro", 35 36 [NETIF_F_TSO_BIT] = "tx-tcp-segmentation", 37 [NETIF_F_GSO_ROBUST_BIT] = "tx-gso-robust", 38 [NETIF_F_TSO_ECN_BIT] = "tx-tcp-ecn-segmentation", 39 [NETIF_F_TSO_MANGLEID_BIT] = "tx-tcp-mangleid-segmentation", 40 [NETIF_F_TSO6_BIT] = "tx-tcp6-segmentation", 41 [NETIF_F_FSO_BIT] = "tx-fcoe-segmentation", 42 [NETIF_F_GSO_GRE_BIT] = "tx-gre-segmentation", 43 [NETIF_F_GSO_GRE_CSUM_BIT] = "tx-gre-csum-segmentation", 44 [NETIF_F_GSO_IPXIP4_BIT] = "tx-ipxip4-segmentation", 45 [NETIF_F_GSO_IPXIP6_BIT] = "tx-ipxip6-segmentation", 46 [NETIF_F_GSO_UDP_TUNNEL_BIT] = "tx-udp_tnl-segmentation", 47 [NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT] = "tx-udp_tnl-csum-segmentation", 48 [NETIF_F_GSO_PARTIAL_BIT] = "tx-gso-partial", 49 [NETIF_F_GSO_TUNNEL_REMCSUM_BIT] = "tx-tunnel-remcsum-segmentation", 50 [NETIF_F_GSO_SCTP_BIT] = "tx-sctp-segmentation", 51 [NETIF_F_GSO_ESP_BIT] = "tx-esp-segmentation", 52 [NETIF_F_GSO_UDP_L4_BIT] = "tx-udp-segmentation", 53 [NETIF_F_GSO_FRAGLIST_BIT] = "tx-gso-list", 54 55 [NETIF_F_FCOE_CRC_BIT] = "tx-checksum-fcoe-crc", 56 [NETIF_F_SCTP_CRC_BIT] = "tx-checksum-sctp", 57 [NETIF_F_NTUPLE_BIT] = "rx-ntuple-filter", 58 [NETIF_F_RXHASH_BIT] = "rx-hashing", 59 [NETIF_F_RXCSUM_BIT] = "rx-checksum", 60 [NETIF_F_NOCACHE_COPY_BIT] = "tx-nocache-copy", 61 [NETIF_F_LOOPBACK_BIT] = "loopback", 62 [NETIF_F_RXFCS_BIT] = "rx-fcs", 63 [NETIF_F_RXALL_BIT] = "rx-all", 64 [NETIF_F_HW_L2FW_DOFFLOAD_BIT] = "l2-fwd-offload", 65 [NETIF_F_HW_TC_BIT] = "hw-tc-offload", 66 [NETIF_F_HW_ESP_BIT] = "esp-hw-offload", 67 [NETIF_F_HW_ESP_TX_CSUM_BIT] = "esp-tx-csum-hw-offload", 68 [NETIF_F_RX_UDP_TUNNEL_PORT_BIT] = "rx-udp_tunnel-port-offload", 69 [NETIF_F_HW_TLS_RECORD_BIT] = "tls-hw-record", 70 [NETIF_F_HW_TLS_TX_BIT] = "tls-hw-tx-offload", 71 [NETIF_F_HW_TLS_RX_BIT] = "tls-hw-rx-offload", 72 [NETIF_F_GRO_FRAGLIST_BIT] = "rx-gro-list", 73 [NETIF_F_HW_MACSEC_BIT] = "macsec-hw-offload", 74 [NETIF_F_GRO_UDP_FWD_BIT] = "rx-udp-gro-forwarding", 75 [NETIF_F_HW_HSR_TAG_INS_BIT] = "hsr-tag-ins-offload", 76 [NETIF_F_HW_HSR_TAG_RM_BIT] = "hsr-tag-rm-offload", 77 [NETIF_F_HW_HSR_FWD_BIT] = "hsr-fwd-offload", 78 [NETIF_F_HW_HSR_DUP_BIT] = "hsr-dup-offload", 79 }; 80 81 const char 82 rss_hash_func_strings[ETH_RSS_HASH_FUNCS_COUNT][ETH_GSTRING_LEN] = { 83 [ETH_RSS_HASH_TOP_BIT] = "toeplitz", 84 [ETH_RSS_HASH_XOR_BIT] = "xor", 85 [ETH_RSS_HASH_CRC32_BIT] = "crc32", 86 }; 87 88 const char 89 tunable_strings[__ETHTOOL_TUNABLE_COUNT][ETH_GSTRING_LEN] = { 90 [ETHTOOL_ID_UNSPEC] = "Unspec", 91 [ETHTOOL_RX_COPYBREAK] = "rx-copybreak", 92 [ETHTOOL_TX_COPYBREAK] = "tx-copybreak", 93 [ETHTOOL_PFC_PREVENTION_TOUT] = "pfc-prevention-tout", 94 [ETHTOOL_TX_COPYBREAK_BUF_SIZE] = "tx-copybreak-buf-size", 95 }; 96 97 const char 98 phy_tunable_strings[__ETHTOOL_PHY_TUNABLE_COUNT][ETH_GSTRING_LEN] = { 99 [ETHTOOL_ID_UNSPEC] = "Unspec", 100 [ETHTOOL_PHY_DOWNSHIFT] = "phy-downshift", 101 [ETHTOOL_PHY_FAST_LINK_DOWN] = "phy-fast-link-down", 102 [ETHTOOL_PHY_EDPD] = "phy-energy-detect-power-down", 103 }; 104 105 #define __LINK_MODE_NAME(speed, type, duplex) \ 106 #speed "base" #type "/" #duplex 107 #define __DEFINE_LINK_MODE_NAME(speed, type, duplex) \ 108 [ETHTOOL_LINK_MODE(speed, type, duplex)] = \ 109 __LINK_MODE_NAME(speed, type, duplex) 110 #define __DEFINE_SPECIAL_MODE_NAME(_mode, _name) \ 111 [ETHTOOL_LINK_MODE_ ## _mode ## _BIT] = _name 112 113 const char link_mode_names[][ETH_GSTRING_LEN] = { 114 __DEFINE_LINK_MODE_NAME(10, T, Half), 115 __DEFINE_LINK_MODE_NAME(10, T, Full), 116 __DEFINE_LINK_MODE_NAME(100, T, Half), 117 __DEFINE_LINK_MODE_NAME(100, T, Full), 118 __DEFINE_LINK_MODE_NAME(1000, T, Half), 119 __DEFINE_LINK_MODE_NAME(1000, T, Full), 120 __DEFINE_SPECIAL_MODE_NAME(Autoneg, "Autoneg"), 121 __DEFINE_SPECIAL_MODE_NAME(TP, "TP"), 122 __DEFINE_SPECIAL_MODE_NAME(AUI, "AUI"), 123 __DEFINE_SPECIAL_MODE_NAME(MII, "MII"), 124 __DEFINE_SPECIAL_MODE_NAME(FIBRE, "FIBRE"), 125 __DEFINE_SPECIAL_MODE_NAME(BNC, "BNC"), 126 __DEFINE_LINK_MODE_NAME(10000, T, Full), 127 __DEFINE_SPECIAL_MODE_NAME(Pause, "Pause"), 128 __DEFINE_SPECIAL_MODE_NAME(Asym_Pause, "Asym_Pause"), 129 __DEFINE_LINK_MODE_NAME(2500, X, Full), 130 __DEFINE_SPECIAL_MODE_NAME(Backplane, "Backplane"), 131 __DEFINE_LINK_MODE_NAME(1000, KX, Full), 132 __DEFINE_LINK_MODE_NAME(10000, KX4, Full), 133 __DEFINE_LINK_MODE_NAME(10000, KR, Full), 134 __DEFINE_SPECIAL_MODE_NAME(10000baseR_FEC, "10000baseR_FEC"), 135 __DEFINE_LINK_MODE_NAME(20000, MLD2, Full), 136 __DEFINE_LINK_MODE_NAME(20000, KR2, Full), 137 __DEFINE_LINK_MODE_NAME(40000, KR4, Full), 138 __DEFINE_LINK_MODE_NAME(40000, CR4, Full), 139 __DEFINE_LINK_MODE_NAME(40000, SR4, Full), 140 __DEFINE_LINK_MODE_NAME(40000, LR4, Full), 141 __DEFINE_LINK_MODE_NAME(56000, KR4, Full), 142 __DEFINE_LINK_MODE_NAME(56000, CR4, Full), 143 __DEFINE_LINK_MODE_NAME(56000, SR4, Full), 144 __DEFINE_LINK_MODE_NAME(56000, LR4, Full), 145 __DEFINE_LINK_MODE_NAME(25000, CR, Full), 146 __DEFINE_LINK_MODE_NAME(25000, KR, Full), 147 __DEFINE_LINK_MODE_NAME(25000, SR, Full), 148 __DEFINE_LINK_MODE_NAME(50000, CR2, Full), 149 __DEFINE_LINK_MODE_NAME(50000, KR2, Full), 150 __DEFINE_LINK_MODE_NAME(100000, KR4, Full), 151 __DEFINE_LINK_MODE_NAME(100000, SR4, Full), 152 __DEFINE_LINK_MODE_NAME(100000, CR4, Full), 153 __DEFINE_LINK_MODE_NAME(100000, LR4_ER4, Full), 154 __DEFINE_LINK_MODE_NAME(50000, SR2, Full), 155 __DEFINE_LINK_MODE_NAME(1000, X, Full), 156 __DEFINE_LINK_MODE_NAME(10000, CR, Full), 157 __DEFINE_LINK_MODE_NAME(10000, SR, Full), 158 __DEFINE_LINK_MODE_NAME(10000, LR, Full), 159 __DEFINE_LINK_MODE_NAME(10000, LRM, Full), 160 __DEFINE_LINK_MODE_NAME(10000, ER, Full), 161 __DEFINE_LINK_MODE_NAME(2500, T, Full), 162 __DEFINE_LINK_MODE_NAME(5000, T, Full), 163 __DEFINE_SPECIAL_MODE_NAME(FEC_NONE, "None"), 164 __DEFINE_SPECIAL_MODE_NAME(FEC_RS, "RS"), 165 __DEFINE_SPECIAL_MODE_NAME(FEC_BASER, "BASER"), 166 __DEFINE_LINK_MODE_NAME(50000, KR, Full), 167 __DEFINE_LINK_MODE_NAME(50000, SR, Full), 168 __DEFINE_LINK_MODE_NAME(50000, CR, Full), 169 __DEFINE_LINK_MODE_NAME(50000, LR_ER_FR, Full), 170 __DEFINE_LINK_MODE_NAME(50000, DR, Full), 171 __DEFINE_LINK_MODE_NAME(100000, KR2, Full), 172 __DEFINE_LINK_MODE_NAME(100000, SR2, Full), 173 __DEFINE_LINK_MODE_NAME(100000, CR2, Full), 174 __DEFINE_LINK_MODE_NAME(100000, LR2_ER2_FR2, Full), 175 __DEFINE_LINK_MODE_NAME(100000, DR2, Full), 176 __DEFINE_LINK_MODE_NAME(200000, KR4, Full), 177 __DEFINE_LINK_MODE_NAME(200000, SR4, Full), 178 __DEFINE_LINK_MODE_NAME(200000, LR4_ER4_FR4, Full), 179 __DEFINE_LINK_MODE_NAME(200000, DR4, Full), 180 __DEFINE_LINK_MODE_NAME(200000, CR4, Full), 181 __DEFINE_LINK_MODE_NAME(100, T1, Full), 182 __DEFINE_LINK_MODE_NAME(1000, T1, Full), 183 __DEFINE_LINK_MODE_NAME(400000, KR8, Full), 184 __DEFINE_LINK_MODE_NAME(400000, SR8, Full), 185 __DEFINE_LINK_MODE_NAME(400000, LR8_ER8_FR8, Full), 186 __DEFINE_LINK_MODE_NAME(400000, DR8, Full), 187 __DEFINE_LINK_MODE_NAME(400000, CR8, Full), 188 __DEFINE_SPECIAL_MODE_NAME(FEC_LLRS, "LLRS"), 189 __DEFINE_LINK_MODE_NAME(100000, KR, Full), 190 __DEFINE_LINK_MODE_NAME(100000, SR, Full), 191 __DEFINE_LINK_MODE_NAME(100000, LR_ER_FR, Full), 192 __DEFINE_LINK_MODE_NAME(100000, DR, Full), 193 __DEFINE_LINK_MODE_NAME(100000, CR, Full), 194 __DEFINE_LINK_MODE_NAME(200000, KR2, Full), 195 __DEFINE_LINK_MODE_NAME(200000, SR2, Full), 196 __DEFINE_LINK_MODE_NAME(200000, LR2_ER2_FR2, Full), 197 __DEFINE_LINK_MODE_NAME(200000, DR2, Full), 198 __DEFINE_LINK_MODE_NAME(200000, CR2, Full), 199 __DEFINE_LINK_MODE_NAME(400000, KR4, Full), 200 __DEFINE_LINK_MODE_NAME(400000, SR4, Full), 201 __DEFINE_LINK_MODE_NAME(400000, LR4_ER4_FR4, Full), 202 __DEFINE_LINK_MODE_NAME(400000, DR4, Full), 203 __DEFINE_LINK_MODE_NAME(400000, CR4, Full), 204 __DEFINE_LINK_MODE_NAME(100, FX, Half), 205 __DEFINE_LINK_MODE_NAME(100, FX, Full), 206 __DEFINE_LINK_MODE_NAME(10, T1L, Full), 207 __DEFINE_LINK_MODE_NAME(800000, CR8, Full), 208 __DEFINE_LINK_MODE_NAME(800000, KR8, Full), 209 __DEFINE_LINK_MODE_NAME(800000, DR8, Full), 210 __DEFINE_LINK_MODE_NAME(800000, DR8_2, Full), 211 __DEFINE_LINK_MODE_NAME(800000, SR8, Full), 212 __DEFINE_LINK_MODE_NAME(800000, VR8, Full), 213 __DEFINE_LINK_MODE_NAME(10, T1S, Full), 214 __DEFINE_LINK_MODE_NAME(10, T1S, Half), 215 __DEFINE_LINK_MODE_NAME(10, T1S_P2MP, Half), 216 __DEFINE_LINK_MODE_NAME(10, T1BRR, Full), 217 }; 218 static_assert(ARRAY_SIZE(link_mode_names) == __ETHTOOL_LINK_MODE_MASK_NBITS); 219 220 #define __LINK_MODE_LANES_CR 1 221 #define __LINK_MODE_LANES_CR2 2 222 #define __LINK_MODE_LANES_CR4 4 223 #define __LINK_MODE_LANES_CR8 8 224 #define __LINK_MODE_LANES_DR 1 225 #define __LINK_MODE_LANES_DR2 2 226 #define __LINK_MODE_LANES_DR4 4 227 #define __LINK_MODE_LANES_DR8 8 228 #define __LINK_MODE_LANES_KR 1 229 #define __LINK_MODE_LANES_KR2 2 230 #define __LINK_MODE_LANES_KR4 4 231 #define __LINK_MODE_LANES_KR8 8 232 #define __LINK_MODE_LANES_SR 1 233 #define __LINK_MODE_LANES_SR2 2 234 #define __LINK_MODE_LANES_SR4 4 235 #define __LINK_MODE_LANES_SR8 8 236 #define __LINK_MODE_LANES_ER 1 237 #define __LINK_MODE_LANES_KX 1 238 #define __LINK_MODE_LANES_KX4 4 239 #define __LINK_MODE_LANES_LR 1 240 #define __LINK_MODE_LANES_LR4 4 241 #define __LINK_MODE_LANES_LR4_ER4 4 242 #define __LINK_MODE_LANES_LR_ER_FR 1 243 #define __LINK_MODE_LANES_LR2_ER2_FR2 2 244 #define __LINK_MODE_LANES_LR4_ER4_FR4 4 245 #define __LINK_MODE_LANES_LR8_ER8_FR8 8 246 #define __LINK_MODE_LANES_LRM 1 247 #define __LINK_MODE_LANES_MLD2 2 248 #define __LINK_MODE_LANES_T 1 249 #define __LINK_MODE_LANES_T1 1 250 #define __LINK_MODE_LANES_X 1 251 #define __LINK_MODE_LANES_FX 1 252 #define __LINK_MODE_LANES_T1L 1 253 #define __LINK_MODE_LANES_T1S 1 254 #define __LINK_MODE_LANES_T1S_P2MP 1 255 #define __LINK_MODE_LANES_VR8 8 256 #define __LINK_MODE_LANES_DR8_2 8 257 #define __LINK_MODE_LANES_T1BRR 1 258 259 #define __DEFINE_LINK_MODE_PARAMS(_speed, _type, _duplex) \ 260 [ETHTOOL_LINK_MODE(_speed, _type, _duplex)] = { \ 261 .speed = SPEED_ ## _speed, \ 262 .lanes = __LINK_MODE_LANES_ ## _type, \ 263 .duplex = __DUPLEX_ ## _duplex \ 264 } 265 #define __DUPLEX_Half DUPLEX_HALF 266 #define __DUPLEX_Full DUPLEX_FULL 267 #define __DEFINE_SPECIAL_MODE_PARAMS(_mode) \ 268 [ETHTOOL_LINK_MODE_ ## _mode ## _BIT] = { \ 269 .speed = SPEED_UNKNOWN, \ 270 .lanes = 0, \ 271 .duplex = DUPLEX_UNKNOWN, \ 272 } 273 274 const struct link_mode_info link_mode_params[] = { 275 __DEFINE_LINK_MODE_PARAMS(10, T, Half), 276 __DEFINE_LINK_MODE_PARAMS(10, T, Full), 277 __DEFINE_LINK_MODE_PARAMS(100, T, Half), 278 __DEFINE_LINK_MODE_PARAMS(100, T, Full), 279 __DEFINE_LINK_MODE_PARAMS(1000, T, Half), 280 __DEFINE_LINK_MODE_PARAMS(1000, T, Full), 281 __DEFINE_SPECIAL_MODE_PARAMS(Autoneg), 282 __DEFINE_SPECIAL_MODE_PARAMS(TP), 283 __DEFINE_SPECIAL_MODE_PARAMS(AUI), 284 __DEFINE_SPECIAL_MODE_PARAMS(MII), 285 __DEFINE_SPECIAL_MODE_PARAMS(FIBRE), 286 __DEFINE_SPECIAL_MODE_PARAMS(BNC), 287 __DEFINE_LINK_MODE_PARAMS(10000, T, Full), 288 __DEFINE_SPECIAL_MODE_PARAMS(Pause), 289 __DEFINE_SPECIAL_MODE_PARAMS(Asym_Pause), 290 __DEFINE_LINK_MODE_PARAMS(2500, X, Full), 291 __DEFINE_SPECIAL_MODE_PARAMS(Backplane), 292 __DEFINE_LINK_MODE_PARAMS(1000, KX, Full), 293 __DEFINE_LINK_MODE_PARAMS(10000, KX4, Full), 294 __DEFINE_LINK_MODE_PARAMS(10000, KR, Full), 295 [ETHTOOL_LINK_MODE_10000baseR_FEC_BIT] = { 296 .speed = SPEED_10000, 297 .lanes = 1, 298 .duplex = DUPLEX_FULL, 299 }, 300 __DEFINE_LINK_MODE_PARAMS(20000, MLD2, Full), 301 __DEFINE_LINK_MODE_PARAMS(20000, KR2, Full), 302 __DEFINE_LINK_MODE_PARAMS(40000, KR4, Full), 303 __DEFINE_LINK_MODE_PARAMS(40000, CR4, Full), 304 __DEFINE_LINK_MODE_PARAMS(40000, SR4, Full), 305 __DEFINE_LINK_MODE_PARAMS(40000, LR4, Full), 306 __DEFINE_LINK_MODE_PARAMS(56000, KR4, Full), 307 __DEFINE_LINK_MODE_PARAMS(56000, CR4, Full), 308 __DEFINE_LINK_MODE_PARAMS(56000, SR4, Full), 309 __DEFINE_LINK_MODE_PARAMS(56000, LR4, Full), 310 __DEFINE_LINK_MODE_PARAMS(25000, CR, Full), 311 __DEFINE_LINK_MODE_PARAMS(25000, KR, Full), 312 __DEFINE_LINK_MODE_PARAMS(25000, SR, Full), 313 __DEFINE_LINK_MODE_PARAMS(50000, CR2, Full), 314 __DEFINE_LINK_MODE_PARAMS(50000, KR2, Full), 315 __DEFINE_LINK_MODE_PARAMS(100000, KR4, Full), 316 __DEFINE_LINK_MODE_PARAMS(100000, SR4, Full), 317 __DEFINE_LINK_MODE_PARAMS(100000, CR4, Full), 318 __DEFINE_LINK_MODE_PARAMS(100000, LR4_ER4, Full), 319 __DEFINE_LINK_MODE_PARAMS(50000, SR2, Full), 320 __DEFINE_LINK_MODE_PARAMS(1000, X, Full), 321 __DEFINE_LINK_MODE_PARAMS(10000, CR, Full), 322 __DEFINE_LINK_MODE_PARAMS(10000, SR, Full), 323 __DEFINE_LINK_MODE_PARAMS(10000, LR, Full), 324 __DEFINE_LINK_MODE_PARAMS(10000, LRM, Full), 325 __DEFINE_LINK_MODE_PARAMS(10000, ER, Full), 326 __DEFINE_LINK_MODE_PARAMS(2500, T, Full), 327 __DEFINE_LINK_MODE_PARAMS(5000, T, Full), 328 __DEFINE_SPECIAL_MODE_PARAMS(FEC_NONE), 329 __DEFINE_SPECIAL_MODE_PARAMS(FEC_RS), 330 __DEFINE_SPECIAL_MODE_PARAMS(FEC_BASER), 331 __DEFINE_LINK_MODE_PARAMS(50000, KR, Full), 332 __DEFINE_LINK_MODE_PARAMS(50000, SR, Full), 333 __DEFINE_LINK_MODE_PARAMS(50000, CR, Full), 334 __DEFINE_LINK_MODE_PARAMS(50000, LR_ER_FR, Full), 335 __DEFINE_LINK_MODE_PARAMS(50000, DR, Full), 336 __DEFINE_LINK_MODE_PARAMS(100000, KR2, Full), 337 __DEFINE_LINK_MODE_PARAMS(100000, SR2, Full), 338 __DEFINE_LINK_MODE_PARAMS(100000, CR2, Full), 339 __DEFINE_LINK_MODE_PARAMS(100000, LR2_ER2_FR2, Full), 340 __DEFINE_LINK_MODE_PARAMS(100000, DR2, Full), 341 __DEFINE_LINK_MODE_PARAMS(200000, KR4, Full), 342 __DEFINE_LINK_MODE_PARAMS(200000, SR4, Full), 343 __DEFINE_LINK_MODE_PARAMS(200000, LR4_ER4_FR4, Full), 344 __DEFINE_LINK_MODE_PARAMS(200000, DR4, Full), 345 __DEFINE_LINK_MODE_PARAMS(200000, CR4, Full), 346 __DEFINE_LINK_MODE_PARAMS(100, T1, Full), 347 __DEFINE_LINK_MODE_PARAMS(1000, T1, Full), 348 __DEFINE_LINK_MODE_PARAMS(400000, KR8, Full), 349 __DEFINE_LINK_MODE_PARAMS(400000, SR8, Full), 350 __DEFINE_LINK_MODE_PARAMS(400000, LR8_ER8_FR8, Full), 351 __DEFINE_LINK_MODE_PARAMS(400000, DR8, Full), 352 __DEFINE_LINK_MODE_PARAMS(400000, CR8, Full), 353 __DEFINE_SPECIAL_MODE_PARAMS(FEC_LLRS), 354 __DEFINE_LINK_MODE_PARAMS(100000, KR, Full), 355 __DEFINE_LINK_MODE_PARAMS(100000, SR, Full), 356 __DEFINE_LINK_MODE_PARAMS(100000, LR_ER_FR, Full), 357 __DEFINE_LINK_MODE_PARAMS(100000, DR, Full), 358 __DEFINE_LINK_MODE_PARAMS(100000, CR, Full), 359 __DEFINE_LINK_MODE_PARAMS(200000, KR2, Full), 360 __DEFINE_LINK_MODE_PARAMS(200000, SR2, Full), 361 __DEFINE_LINK_MODE_PARAMS(200000, LR2_ER2_FR2, Full), 362 __DEFINE_LINK_MODE_PARAMS(200000, DR2, Full), 363 __DEFINE_LINK_MODE_PARAMS(200000, CR2, Full), 364 __DEFINE_LINK_MODE_PARAMS(400000, KR4, Full), 365 __DEFINE_LINK_MODE_PARAMS(400000, SR4, Full), 366 __DEFINE_LINK_MODE_PARAMS(400000, LR4_ER4_FR4, Full), 367 __DEFINE_LINK_MODE_PARAMS(400000, DR4, Full), 368 __DEFINE_LINK_MODE_PARAMS(400000, CR4, Full), 369 __DEFINE_LINK_MODE_PARAMS(100, FX, Half), 370 __DEFINE_LINK_MODE_PARAMS(100, FX, Full), 371 __DEFINE_LINK_MODE_PARAMS(10, T1L, Full), 372 __DEFINE_LINK_MODE_PARAMS(800000, CR8, Full), 373 __DEFINE_LINK_MODE_PARAMS(800000, KR8, Full), 374 __DEFINE_LINK_MODE_PARAMS(800000, DR8, Full), 375 __DEFINE_LINK_MODE_PARAMS(800000, DR8_2, Full), 376 __DEFINE_LINK_MODE_PARAMS(800000, SR8, Full), 377 __DEFINE_LINK_MODE_PARAMS(800000, VR8, Full), 378 __DEFINE_LINK_MODE_PARAMS(10, T1S, Full), 379 __DEFINE_LINK_MODE_PARAMS(10, T1S, Half), 380 __DEFINE_LINK_MODE_PARAMS(10, T1S_P2MP, Half), 381 __DEFINE_LINK_MODE_PARAMS(10, T1BRR, Full), 382 }; 383 static_assert(ARRAY_SIZE(link_mode_params) == __ETHTOOL_LINK_MODE_MASK_NBITS); 384 385 const char netif_msg_class_names[][ETH_GSTRING_LEN] = { 386 [NETIF_MSG_DRV_BIT] = "drv", 387 [NETIF_MSG_PROBE_BIT] = "probe", 388 [NETIF_MSG_LINK_BIT] = "link", 389 [NETIF_MSG_TIMER_BIT] = "timer", 390 [NETIF_MSG_IFDOWN_BIT] = "ifdown", 391 [NETIF_MSG_IFUP_BIT] = "ifup", 392 [NETIF_MSG_RX_ERR_BIT] = "rx_err", 393 [NETIF_MSG_TX_ERR_BIT] = "tx_err", 394 [NETIF_MSG_TX_QUEUED_BIT] = "tx_queued", 395 [NETIF_MSG_INTR_BIT] = "intr", 396 [NETIF_MSG_TX_DONE_BIT] = "tx_done", 397 [NETIF_MSG_RX_STATUS_BIT] = "rx_status", 398 [NETIF_MSG_PKTDATA_BIT] = "pktdata", 399 [NETIF_MSG_HW_BIT] = "hw", 400 [NETIF_MSG_WOL_BIT] = "wol", 401 }; 402 static_assert(ARRAY_SIZE(netif_msg_class_names) == NETIF_MSG_CLASS_COUNT); 403 404 const char wol_mode_names[][ETH_GSTRING_LEN] = { 405 [const_ilog2(WAKE_PHY)] = "phy", 406 [const_ilog2(WAKE_UCAST)] = "ucast", 407 [const_ilog2(WAKE_MCAST)] = "mcast", 408 [const_ilog2(WAKE_BCAST)] = "bcast", 409 [const_ilog2(WAKE_ARP)] = "arp", 410 [const_ilog2(WAKE_MAGIC)] = "magic", 411 [const_ilog2(WAKE_MAGICSECURE)] = "magicsecure", 412 [const_ilog2(WAKE_FILTER)] = "filter", 413 }; 414 static_assert(ARRAY_SIZE(wol_mode_names) == WOL_MODE_COUNT); 415 416 const char sof_timestamping_names[][ETH_GSTRING_LEN] = { 417 [const_ilog2(SOF_TIMESTAMPING_TX_HARDWARE)] = "hardware-transmit", 418 [const_ilog2(SOF_TIMESTAMPING_TX_SOFTWARE)] = "software-transmit", 419 [const_ilog2(SOF_TIMESTAMPING_RX_HARDWARE)] = "hardware-receive", 420 [const_ilog2(SOF_TIMESTAMPING_RX_SOFTWARE)] = "software-receive", 421 [const_ilog2(SOF_TIMESTAMPING_SOFTWARE)] = "software-system-clock", 422 [const_ilog2(SOF_TIMESTAMPING_SYS_HARDWARE)] = "hardware-legacy-clock", 423 [const_ilog2(SOF_TIMESTAMPING_RAW_HARDWARE)] = "hardware-raw-clock", 424 [const_ilog2(SOF_TIMESTAMPING_OPT_ID)] = "option-id", 425 [const_ilog2(SOF_TIMESTAMPING_TX_SCHED)] = "sched-transmit", 426 [const_ilog2(SOF_TIMESTAMPING_TX_ACK)] = "ack-transmit", 427 [const_ilog2(SOF_TIMESTAMPING_OPT_CMSG)] = "option-cmsg", 428 [const_ilog2(SOF_TIMESTAMPING_OPT_TSONLY)] = "option-tsonly", 429 [const_ilog2(SOF_TIMESTAMPING_OPT_STATS)] = "option-stats", 430 [const_ilog2(SOF_TIMESTAMPING_OPT_PKTINFO)] = "option-pktinfo", 431 [const_ilog2(SOF_TIMESTAMPING_OPT_TX_SWHW)] = "option-tx-swhw", 432 [const_ilog2(SOF_TIMESTAMPING_BIND_PHC)] = "bind-phc", 433 [const_ilog2(SOF_TIMESTAMPING_OPT_ID_TCP)] = "option-id-tcp", 434 [const_ilog2(SOF_TIMESTAMPING_OPT_RX_FILTER)] = "option-rx-filter", 435 }; 436 static_assert(ARRAY_SIZE(sof_timestamping_names) == __SOF_TIMESTAMPING_CNT); 437 438 const char ts_tx_type_names[][ETH_GSTRING_LEN] = { 439 [HWTSTAMP_TX_OFF] = "off", 440 [HWTSTAMP_TX_ON] = "on", 441 [HWTSTAMP_TX_ONESTEP_SYNC] = "onestep-sync", 442 [HWTSTAMP_TX_ONESTEP_P2P] = "onestep-p2p", 443 }; 444 static_assert(ARRAY_SIZE(ts_tx_type_names) == __HWTSTAMP_TX_CNT); 445 446 const char ts_rx_filter_names[][ETH_GSTRING_LEN] = { 447 [HWTSTAMP_FILTER_NONE] = "none", 448 [HWTSTAMP_FILTER_ALL] = "all", 449 [HWTSTAMP_FILTER_SOME] = "some", 450 [HWTSTAMP_FILTER_PTP_V1_L4_EVENT] = "ptpv1-l4-event", 451 [HWTSTAMP_FILTER_PTP_V1_L4_SYNC] = "ptpv1-l4-sync", 452 [HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ] = "ptpv1-l4-delay-req", 453 [HWTSTAMP_FILTER_PTP_V2_L4_EVENT] = "ptpv2-l4-event", 454 [HWTSTAMP_FILTER_PTP_V2_L4_SYNC] = "ptpv2-l4-sync", 455 [HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ] = "ptpv2-l4-delay-req", 456 [HWTSTAMP_FILTER_PTP_V2_L2_EVENT] = "ptpv2-l2-event", 457 [HWTSTAMP_FILTER_PTP_V2_L2_SYNC] = "ptpv2-l2-sync", 458 [HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ] = "ptpv2-l2-delay-req", 459 [HWTSTAMP_FILTER_PTP_V2_EVENT] = "ptpv2-event", 460 [HWTSTAMP_FILTER_PTP_V2_SYNC] = "ptpv2-sync", 461 [HWTSTAMP_FILTER_PTP_V2_DELAY_REQ] = "ptpv2-delay-req", 462 [HWTSTAMP_FILTER_NTP_ALL] = "ntp-all", 463 }; 464 static_assert(ARRAY_SIZE(ts_rx_filter_names) == __HWTSTAMP_FILTER_CNT); 465 466 const char ts_flags_names[][ETH_GSTRING_LEN] = { 467 [const_ilog2(HWTSTAMP_FLAG_BONDED_PHC_INDEX)] = "bonded-phc-index", 468 }; 469 static_assert(ARRAY_SIZE(ts_flags_names) == __HWTSTAMP_FLAG_CNT); 470 471 const char udp_tunnel_type_names[][ETH_GSTRING_LEN] = { 472 [ETHTOOL_UDP_TUNNEL_TYPE_VXLAN] = "vxlan", 473 [ETHTOOL_UDP_TUNNEL_TYPE_GENEVE] = "geneve", 474 [ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE] = "vxlan-gpe", 475 }; 476 static_assert(ARRAY_SIZE(udp_tunnel_type_names) == 477 __ETHTOOL_UDP_TUNNEL_TYPE_CNT); 478 479 /* return false if legacy contained non-0 deprecated fields 480 * maxtxpkt/maxrxpkt. rest of ksettings always updated 481 */ 482 bool 483 convert_legacy_settings_to_link_ksettings( 484 struct ethtool_link_ksettings *link_ksettings, 485 const struct ethtool_cmd *legacy_settings) 486 { 487 bool retval = true; 488 489 memset(link_ksettings, 0, sizeof(*link_ksettings)); 490 491 /* This is used to tell users that driver is still using these 492 * deprecated legacy fields, and they should not use 493 * %ETHTOOL_GLINKSETTINGS/%ETHTOOL_SLINKSETTINGS 494 */ 495 if (legacy_settings->maxtxpkt || 496 legacy_settings->maxrxpkt) 497 retval = false; 498 499 ethtool_convert_legacy_u32_to_link_mode( 500 link_ksettings->link_modes.supported, 501 legacy_settings->supported); 502 ethtool_convert_legacy_u32_to_link_mode( 503 link_ksettings->link_modes.advertising, 504 legacy_settings->advertising); 505 ethtool_convert_legacy_u32_to_link_mode( 506 link_ksettings->link_modes.lp_advertising, 507 legacy_settings->lp_advertising); 508 link_ksettings->base.speed 509 = ethtool_cmd_speed(legacy_settings); 510 link_ksettings->base.duplex 511 = legacy_settings->duplex; 512 link_ksettings->base.port 513 = legacy_settings->port; 514 link_ksettings->base.phy_address 515 = legacy_settings->phy_address; 516 link_ksettings->base.autoneg 517 = legacy_settings->autoneg; 518 link_ksettings->base.mdio_support 519 = legacy_settings->mdio_support; 520 link_ksettings->base.eth_tp_mdix 521 = legacy_settings->eth_tp_mdix; 522 link_ksettings->base.eth_tp_mdix_ctrl 523 = legacy_settings->eth_tp_mdix_ctrl; 524 return retval; 525 } 526 527 int __ethtool_get_link(struct net_device *dev) 528 { 529 if (!dev->ethtool_ops->get_link) 530 return -EOPNOTSUPP; 531 532 return netif_running(dev) && dev->ethtool_ops->get_link(dev); 533 } 534 535 static int ethtool_get_rxnfc_rule_count(struct net_device *dev) 536 { 537 const struct ethtool_ops *ops = dev->ethtool_ops; 538 struct ethtool_rxnfc info = { 539 .cmd = ETHTOOL_GRXCLSRLCNT, 540 }; 541 int err; 542 543 err = ops->get_rxnfc(dev, &info, NULL); 544 if (err) 545 return err; 546 547 return info.rule_cnt; 548 } 549 550 /* Max offset for one RSS context */ 551 static u32 ethtool_get_rss_ctx_max_channel(struct ethtool_rxfh_context *ctx) 552 { 553 u32 max_ring = 0; 554 u32 i, *tbl; 555 556 if (WARN_ON_ONCE(!ctx)) 557 return 0; 558 tbl = ethtool_rxfh_context_indir(ctx); 559 for (i = 0; i < ctx->indir_size; i++) 560 max_ring = max(max_ring, tbl[i]); 561 return max_ring; 562 } 563 564 static int ethtool_get_max_rxnfc_channel(struct net_device *dev, u64 *max) 565 { 566 const struct ethtool_ops *ops = dev->ethtool_ops; 567 struct ethtool_rxnfc *info; 568 int err, i, rule_cnt; 569 u64 max_ring = 0; 570 571 if (!ops->get_rxnfc) 572 return -EOPNOTSUPP; 573 574 rule_cnt = ethtool_get_rxnfc_rule_count(dev); 575 if (rule_cnt <= 0) 576 return -EINVAL; 577 578 info = kvzalloc(struct_size(info, rule_locs, rule_cnt), GFP_KERNEL); 579 if (!info) 580 return -ENOMEM; 581 582 info->cmd = ETHTOOL_GRXCLSRLALL; 583 info->rule_cnt = rule_cnt; 584 err = ops->get_rxnfc(dev, info, info->rule_locs); 585 if (err) 586 goto err_free_info; 587 588 for (i = 0; i < rule_cnt; i++) { 589 struct ethtool_rxnfc rule_info = { 590 .cmd = ETHTOOL_GRXCLSRULE, 591 .fs.location = info->rule_locs[i], 592 }; 593 594 err = ops->get_rxnfc(dev, &rule_info, NULL); 595 if (err) 596 goto err_free_info; 597 598 if (rule_info.fs.ring_cookie != RX_CLS_FLOW_DISC && 599 rule_info.fs.ring_cookie != RX_CLS_FLOW_WAKE && 600 !ethtool_get_flow_spec_ring_vf(rule_info.fs.ring_cookie)) { 601 u64 ring = rule_info.fs.ring_cookie; 602 603 if (rule_info.flow_type & FLOW_RSS) { 604 struct ethtool_rxfh_context *ctx; 605 606 ctx = xa_load(&dev->ethtool->rss_ctx, 607 rule_info.rss_context); 608 ring += ethtool_get_rss_ctx_max_channel(ctx); 609 } 610 max_ring = max_t(u64, max_ring, ring); 611 } 612 } 613 614 kvfree(info); 615 *max = max_ring; 616 return 0; 617 618 err_free_info: 619 kvfree(info); 620 return err; 621 } 622 623 /* Max offset across all of a device's RSS contexts */ 624 static u32 ethtool_get_max_rss_ctx_channel(struct net_device *dev) 625 { 626 struct ethtool_rxfh_context *ctx; 627 unsigned long context; 628 u32 max_ring = 0; 629 630 mutex_lock(&dev->ethtool->rss_lock); 631 xa_for_each(&dev->ethtool->rss_ctx, context, ctx) 632 max_ring = max(max_ring, ethtool_get_rss_ctx_max_channel(ctx)); 633 mutex_unlock(&dev->ethtool->rss_lock); 634 635 return max_ring; 636 } 637 638 static u32 ethtool_get_max_rxfh_channel(struct net_device *dev) 639 { 640 struct ethtool_rxfh_param rxfh = {}; 641 u32 dev_size, current_max = 0; 642 int ret; 643 644 /* While we do track whether RSS context has an indirection 645 * table explicitly set by the user, no driver looks at that bit. 646 * Assume drivers won't auto-regenerate the additional tables, 647 * to be safe. 648 */ 649 current_max = ethtool_get_max_rss_ctx_channel(dev); 650 651 if (!netif_is_rxfh_configured(dev)) 652 return current_max; 653 654 if (!dev->ethtool_ops->get_rxfh_indir_size || 655 !dev->ethtool_ops->get_rxfh) 656 return current_max; 657 dev_size = dev->ethtool_ops->get_rxfh_indir_size(dev); 658 if (dev_size == 0) 659 return current_max; 660 661 rxfh.indir = kcalloc(dev_size, sizeof(rxfh.indir[0]), GFP_USER); 662 if (!rxfh.indir) 663 return U32_MAX; 664 665 ret = dev->ethtool_ops->get_rxfh(dev, &rxfh); 666 if (ret) { 667 current_max = U32_MAX; 668 goto out_free; 669 } 670 671 while (dev_size--) 672 current_max = max(current_max, rxfh.indir[dev_size]); 673 674 out_free: 675 kfree(rxfh.indir); 676 return current_max; 677 } 678 679 int ethtool_check_max_channel(struct net_device *dev, 680 struct ethtool_channels channels, 681 struct genl_info *info) 682 { 683 u64 max_rxnfc_in_use; 684 u32 max_rxfh_in_use; 685 int max_mp_in_use; 686 687 /* ensure the new Rx count fits within the configured Rx flow 688 * indirection table/rxnfc settings 689 */ 690 if (ethtool_get_max_rxnfc_channel(dev, &max_rxnfc_in_use)) 691 max_rxnfc_in_use = 0; 692 max_rxfh_in_use = ethtool_get_max_rxfh_channel(dev); 693 if (channels.combined_count + channels.rx_count <= max_rxfh_in_use) { 694 if (info) 695 GENL_SET_ERR_MSG_FMT(info, "requested channel counts are too low for existing indirection table (%d)", max_rxfh_in_use); 696 return -EINVAL; 697 } 698 if (channels.combined_count + channels.rx_count <= max_rxnfc_in_use) { 699 if (info) 700 GENL_SET_ERR_MSG(info, "requested channel counts are too low for existing ntuple filter settings"); 701 return -EINVAL; 702 } 703 704 max_mp_in_use = dev_get_min_mp_channel_count(dev); 705 if (channels.combined_count + channels.rx_count <= max_mp_in_use) { 706 if (info) 707 GENL_SET_ERR_MSG_FMT(info, "requested channel counts are too low for existing memory provider setting (%d)", max_mp_in_use); 708 return -EINVAL; 709 } 710 711 return 0; 712 } 713 714 int ethtool_check_rss_ctx_busy(struct net_device *dev, u32 rss_context) 715 { 716 const struct ethtool_ops *ops = dev->ethtool_ops; 717 struct ethtool_rxnfc *info; 718 int rc, i, rule_cnt; 719 720 if (!ops->get_rxnfc) 721 return 0; 722 723 rule_cnt = ethtool_get_rxnfc_rule_count(dev); 724 if (!rule_cnt) 725 return 0; 726 727 if (rule_cnt < 0) 728 return -EINVAL; 729 730 info = kvzalloc(struct_size(info, rule_locs, rule_cnt), GFP_KERNEL); 731 if (!info) 732 return -ENOMEM; 733 734 info->cmd = ETHTOOL_GRXCLSRLALL; 735 info->rule_cnt = rule_cnt; 736 rc = ops->get_rxnfc(dev, info, info->rule_locs); 737 if (rc) 738 goto out_free; 739 740 for (i = 0; i < rule_cnt; i++) { 741 struct ethtool_rxnfc rule_info = { 742 .cmd = ETHTOOL_GRXCLSRULE, 743 .fs.location = info->rule_locs[i], 744 }; 745 746 rc = ops->get_rxnfc(dev, &rule_info, NULL); 747 if (rc) 748 goto out_free; 749 750 if (rule_info.fs.flow_type & FLOW_RSS && 751 rule_info.rss_context == rss_context) { 752 rc = -EBUSY; 753 goto out_free; 754 } 755 } 756 757 out_free: 758 kvfree(info); 759 return rc; 760 } 761 762 int ethtool_check_ops(const struct ethtool_ops *ops) 763 { 764 if (WARN_ON(ops->set_coalesce && !ops->supported_coalesce_params)) 765 return -EINVAL; 766 if (WARN_ON(ops->rxfh_max_num_contexts == 1)) 767 return -EINVAL; 768 /* NOTE: sufficiently insane drivers may swap ethtool_ops at runtime, 769 * the fact that ops are checked at registration time does not 770 * mean the ops attached to a netdev later on are sane. 771 */ 772 return 0; 773 } 774 775 void ethtool_ringparam_get_cfg(struct net_device *dev, 776 struct ethtool_ringparam *param, 777 struct kernel_ethtool_ringparam *kparam, 778 struct netlink_ext_ack *extack) 779 { 780 memset(param, 0, sizeof(*param)); 781 memset(kparam, 0, sizeof(*kparam)); 782 783 param->cmd = ETHTOOL_GRINGPARAM; 784 dev->ethtool_ops->get_ringparam(dev, param, kparam, extack); 785 786 /* Driver gives us current state, we want to return current config */ 787 kparam->tcp_data_split = dev->cfg->hds_config; 788 } 789 790 static void ethtool_init_tsinfo(struct kernel_ethtool_ts_info *info) 791 { 792 memset(info, 0, sizeof(*info)); 793 info->cmd = ETHTOOL_GET_TS_INFO; 794 info->phc_index = -1; 795 } 796 797 int ethtool_net_get_ts_info_by_phc(struct net_device *dev, 798 struct kernel_ethtool_ts_info *info, 799 struct hwtstamp_provider_desc *hwprov_desc) 800 { 801 const struct ethtool_ops *ops = dev->ethtool_ops; 802 int err; 803 804 if (!ops->get_ts_info) 805 return -ENODEV; 806 807 /* Does ptp comes from netdev */ 808 ethtool_init_tsinfo(info); 809 info->phc_qualifier = hwprov_desc->qualifier; 810 err = ops->get_ts_info(dev, info); 811 if (err) 812 return err; 813 814 if (info->phc_index == hwprov_desc->index && 815 net_support_hwtstamp_qualifier(dev, hwprov_desc->qualifier)) 816 return 0; 817 818 return -ENODEV; 819 } 820 821 struct phy_device * 822 ethtool_phy_get_ts_info_by_phc(struct net_device *dev, 823 struct kernel_ethtool_ts_info *info, 824 struct hwtstamp_provider_desc *hwprov_desc) 825 { 826 int err; 827 828 /* Only precise qualifier is supported in phydev */ 829 if (hwprov_desc->qualifier != HWTSTAMP_PROVIDER_QUALIFIER_PRECISE) 830 return ERR_PTR(-ENODEV); 831 832 /* Look in the phy topology */ 833 if (dev->link_topo) { 834 struct phy_device_node *pdn; 835 unsigned long phy_index; 836 837 xa_for_each(&dev->link_topo->phys, phy_index, pdn) { 838 if (!phy_has_tsinfo(pdn->phy)) 839 continue; 840 841 ethtool_init_tsinfo(info); 842 err = phy_ts_info(pdn->phy, info); 843 if (err) 844 return ERR_PTR(err); 845 846 if (info->phc_index == hwprov_desc->index) 847 return pdn->phy; 848 } 849 return ERR_PTR(-ENODEV); 850 } 851 852 /* Look on the dev->phydev */ 853 if (phy_has_tsinfo(dev->phydev)) { 854 ethtool_init_tsinfo(info); 855 err = phy_ts_info(dev->phydev, info); 856 if (err) 857 return ERR_PTR(err); 858 859 if (info->phc_index == hwprov_desc->index) 860 return dev->phydev; 861 } 862 863 return ERR_PTR(-ENODEV); 864 } 865 866 int ethtool_get_ts_info_by_phc(struct net_device *dev, 867 struct kernel_ethtool_ts_info *info, 868 struct hwtstamp_provider_desc *hwprov_desc) 869 { 870 int err; 871 872 err = ethtool_net_get_ts_info_by_phc(dev, info, hwprov_desc); 873 if (err == -ENODEV) { 874 struct phy_device *phy; 875 876 phy = ethtool_phy_get_ts_info_by_phc(dev, info, hwprov_desc); 877 if (IS_ERR(phy)) 878 err = PTR_ERR(phy); 879 else 880 err = 0; 881 } 882 883 info->so_timestamping |= SOF_TIMESTAMPING_RX_SOFTWARE | 884 SOF_TIMESTAMPING_SOFTWARE; 885 886 return err; 887 } 888 889 int __ethtool_get_ts_info(struct net_device *dev, 890 struct kernel_ethtool_ts_info *info) 891 { 892 struct hwtstamp_provider *hwprov; 893 int err = 0; 894 895 rcu_read_lock(); 896 hwprov = rcu_dereference(dev->hwprov); 897 /* No provider specified, use default behavior */ 898 if (!hwprov) { 899 const struct ethtool_ops *ops = dev->ethtool_ops; 900 struct phy_device *phydev = dev->phydev; 901 902 ethtool_init_tsinfo(info); 903 if (phy_is_default_hwtstamp(phydev) && 904 phy_has_tsinfo(phydev)) 905 err = phy_ts_info(phydev, info); 906 else if (ops->get_ts_info) 907 err = ops->get_ts_info(dev, info); 908 909 info->so_timestamping |= SOF_TIMESTAMPING_RX_SOFTWARE | 910 SOF_TIMESTAMPING_SOFTWARE; 911 912 rcu_read_unlock(); 913 return err; 914 } 915 916 err = ethtool_get_ts_info_by_phc(dev, info, &hwprov->desc); 917 rcu_read_unlock(); 918 return err; 919 } 920 921 bool net_support_hwtstamp_qualifier(struct net_device *dev, 922 enum hwtstamp_provider_qualifier qualifier) 923 { 924 const struct ethtool_ops *ops = dev->ethtool_ops; 925 926 if (!ops) 927 return false; 928 929 /* Return true with precise qualifier and with NIC without 930 * qualifier description to not break the old behavior. 931 */ 932 if (!ops->supported_hwtstamp_qualifiers && 933 qualifier == HWTSTAMP_PROVIDER_QUALIFIER_PRECISE) 934 return true; 935 936 if (ops->supported_hwtstamp_qualifiers & BIT(qualifier)) 937 return true; 938 939 return false; 940 } 941 942 int ethtool_get_phc_vclocks(struct net_device *dev, int **vclock_index) 943 { 944 struct kernel_ethtool_ts_info info = { }; 945 int num = 0; 946 947 if (!__ethtool_get_ts_info(dev, &info)) 948 num = ptp_get_vclocks_index(info.phc_index, vclock_index); 949 950 return num; 951 } 952 EXPORT_SYMBOL(ethtool_get_phc_vclocks); 953 954 int ethtool_get_ts_info_by_layer(struct net_device *dev, struct kernel_ethtool_ts_info *info) 955 { 956 return __ethtool_get_ts_info(dev, info); 957 } 958 EXPORT_SYMBOL(ethtool_get_ts_info_by_layer); 959 960 const struct ethtool_phy_ops *ethtool_phy_ops; 961 962 void ethtool_set_ethtool_phy_ops(const struct ethtool_phy_ops *ops) 963 { 964 ASSERT_RTNL(); 965 ethtool_phy_ops = ops; 966 } 967 EXPORT_SYMBOL_GPL(ethtool_set_ethtool_phy_ops); 968 969 void 970 ethtool_params_from_link_mode(struct ethtool_link_ksettings *link_ksettings, 971 enum ethtool_link_mode_bit_indices link_mode) 972 { 973 const struct link_mode_info *link_info; 974 975 if (WARN_ON_ONCE(link_mode >= __ETHTOOL_LINK_MODE_MASK_NBITS)) 976 return; 977 978 link_info = &link_mode_params[link_mode]; 979 link_ksettings->base.speed = link_info->speed; 980 link_ksettings->lanes = link_info->lanes; 981 link_ksettings->base.duplex = link_info->duplex; 982 } 983 EXPORT_SYMBOL_GPL(ethtool_params_from_link_mode); 984 985 /** 986 * ethtool_forced_speed_maps_init 987 * @maps: Pointer to an array of Ethtool forced speed map 988 * @size: Array size 989 * 990 * Initialize an array of Ethtool forced speed map to Ethtool link modes. This 991 * should be called during driver module init. 992 */ 993 void 994 ethtool_forced_speed_maps_init(struct ethtool_forced_speed_map *maps, u32 size) 995 { 996 for (u32 i = 0; i < size; i++) { 997 struct ethtool_forced_speed_map *map = &maps[i]; 998 999 linkmode_set_bit_array(map->cap_arr, map->arr_size, map->caps); 1000 map->cap_arr = NULL; 1001 map->arr_size = 0; 1002 } 1003 } 1004 EXPORT_SYMBOL_GPL(ethtool_forced_speed_maps_init); 1005 1006 void ethtool_rxfh_context_lost(struct net_device *dev, u32 context_id) 1007 { 1008 struct ethtool_rxfh_context *ctx; 1009 1010 WARN_ONCE(!rtnl_is_locked() && 1011 !lockdep_is_held_type(&dev->ethtool->rss_lock, -1), 1012 "RSS context lock assertion failed\n"); 1013 1014 netdev_err(dev, "device error, RSS context %d lost\n", context_id); 1015 ctx = xa_erase(&dev->ethtool->rss_ctx, context_id); 1016 kfree(ctx); 1017 } 1018 EXPORT_SYMBOL(ethtool_rxfh_context_lost); 1019