1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2017 Intel Corporation 3 */ 4 5 #ifndef _RTE_ETHDEV_DRIVER_H_ 6 #define _RTE_ETHDEV_DRIVER_H_ 7 8 /** 9 * @file 10 * 11 * RTE Ethernet Device PMD API 12 * 13 * These APIs for the use from Ethernet drivers, user applications shouldn't 14 * use them. 15 * 16 */ 17 18 #include <rte_ethdev.h> 19 20 #ifdef __cplusplus 21 extern "C" { 22 #endif 23 24 /**< @internal Declaration of the hairpin peer queue information structure. */ 25 struct rte_hairpin_peer_info; 26 27 /* 28 * Definitions of all functions exported by an Ethernet driver through the 29 * generic structure of type *eth_dev_ops* supplied in the *rte_eth_dev* 30 * structure associated with an Ethernet device. 31 */ 32 33 typedef int (*eth_dev_configure_t)(struct rte_eth_dev *dev); 34 /**< @internal Ethernet device configuration. */ 35 36 typedef int (*eth_dev_start_t)(struct rte_eth_dev *dev); 37 /**< @internal Function used to start a configured Ethernet device. */ 38 39 typedef int (*eth_dev_stop_t)(struct rte_eth_dev *dev); 40 /**< @internal Function used to stop a configured Ethernet device. */ 41 42 typedef int (*eth_dev_set_link_up_t)(struct rte_eth_dev *dev); 43 /**< @internal Function used to link up a configured Ethernet device. */ 44 45 typedef int (*eth_dev_set_link_down_t)(struct rte_eth_dev *dev); 46 /**< @internal Function used to link down a configured Ethernet device. */ 47 48 typedef int (*eth_dev_close_t)(struct rte_eth_dev *dev); 49 /**< @internal Function used to close a configured Ethernet device. */ 50 51 typedef int (*eth_dev_reset_t)(struct rte_eth_dev *dev); 52 /** <@internal Function used to reset a configured Ethernet device. */ 53 54 typedef int (*eth_is_removed_t)(struct rte_eth_dev *dev); 55 /**< @internal Function used to detect an Ethernet device removal. */ 56 57 /** 58 * @internal 59 * Function used to enable the Rx promiscuous mode of an Ethernet device. 60 * 61 * @param dev 62 * ethdev handle of port. 63 * 64 * @return 65 * Negative errno value on error, 0 on success. 66 * 67 * @retval 0 68 * Success, promiscuous mode is enabled. 69 * @retval -ENOTSUP 70 * Promiscuous mode is not supported. 71 * @retval -ENODEV 72 * Device is gone. 73 * @retval -E_RTE_SECONDARY 74 * Function was called from a secondary process instance and not supported. 75 * @retval -ETIMEDOUT 76 * Attempt to enable promiscuos mode failed because of timeout. 77 * @retval -EAGAIN 78 * Failed to enable promiscuous mode. 79 */ 80 typedef int (*eth_promiscuous_enable_t)(struct rte_eth_dev *dev); 81 82 /** 83 * @internal 84 * Function used to disable the Rx promiscuous mode of an Ethernet device. 85 * 86 * @param dev 87 * ethdev handle of port. 88 * 89 * @return 90 * Negative errno value on error, 0 on success. 91 * 92 * @retval 0 93 * Success, promiscuous mode is disabled. 94 * @retval -ENOTSUP 95 * Promiscuous mode disabling is not supported. 96 * @retval -ENODEV 97 * Device is gone. 98 * @retval -E_RTE_SECONDARY 99 * Function was called from a secondary process instance and not supported. 100 * @retval -ETIMEDOUT 101 * Attempt to disable promiscuos mode failed because of timeout. 102 * @retval -EAGAIN 103 * Failed to disable promiscuous mode. 104 */ 105 typedef int (*eth_promiscuous_disable_t)(struct rte_eth_dev *dev); 106 107 /** 108 * @internal 109 * Enable the receipt of all multicast packets by an Ethernet device. 110 * 111 * @param dev 112 * ethdev handle of port. 113 * 114 * @return 115 * Negative errno value on error, 0 on success. 116 * 117 * @retval 0 118 * Success, all-multicast mode is enabled. 119 * @retval -ENOTSUP 120 * All-multicast mode is not supported. 121 * @retval -ENODEV 122 * Device is gone. 123 * @retval -E_RTE_SECONDARY 124 * Function was called from a secondary process instance and not supported. 125 * @retval -ETIMEDOUT 126 * Attempt to enable all-multicast mode failed because of timeout. 127 * @retval -EAGAIN 128 * Failed to enable all-multicast mode. 129 */ 130 typedef int (*eth_allmulticast_enable_t)(struct rte_eth_dev *dev); 131 132 /** 133 * @internal 134 * Disable the receipt of all multicast packets by an Ethernet device. 135 * 136 * @param dev 137 * ethdev handle of port. 138 * 139 * @return 140 * Negative errno value on error, 0 on success. 141 * 142 * @retval 0 143 * Success, all-multicast mode is disabled. 144 * @retval -ENOTSUP 145 * All-multicast mode disabling is not supported. 146 * @retval -ENODEV 147 * Device is gone. 148 * @retval -E_RTE_SECONDARY 149 * Function was called from a secondary process instance and not supported. 150 * @retval -ETIMEDOUT 151 * Attempt to disable all-multicast mode failed because of timeout. 152 * @retval -EAGAIN 153 * Failed to disable all-multicast mode. 154 */ 155 typedef int (*eth_allmulticast_disable_t)(struct rte_eth_dev *dev); 156 157 typedef int (*eth_link_update_t)(struct rte_eth_dev *dev, 158 int wait_to_complete); 159 /**< @internal Get link speed, duplex mode and state (up/down) of an Ethernet device. */ 160 161 typedef int (*eth_stats_get_t)(struct rte_eth_dev *dev, 162 struct rte_eth_stats *igb_stats); 163 /**< @internal Get global I/O statistics of an Ethernet device. */ 164 165 /** 166 * @internal 167 * Reset global I/O statistics of an Ethernet device to 0. 168 * 169 * @param dev 170 * ethdev handle of port. 171 * 172 * @return 173 * Negative errno value on error, 0 on success. 174 * 175 * @retval 0 176 * Success, statistics has been reset. 177 * @retval -ENOTSUP 178 * Resetting statistics is not supported. 179 * @retval -EINVAL 180 * Resetting statistics is not valid. 181 * @retval -ENOMEM 182 * Not enough memory to get the stats. 183 */ 184 typedef int (*eth_stats_reset_t)(struct rte_eth_dev *dev); 185 186 typedef int (*eth_xstats_get_t)(struct rte_eth_dev *dev, 187 struct rte_eth_xstat *stats, unsigned int n); 188 /**< @internal Get extended stats of an Ethernet device. */ 189 190 typedef int (*eth_xstats_get_by_id_t)(struct rte_eth_dev *dev, 191 const uint64_t *ids, 192 uint64_t *values, 193 unsigned int n); 194 /**< @internal Get extended stats of an Ethernet device. */ 195 196 /** 197 * @internal 198 * Reset extended stats of an Ethernet device. 199 * 200 * @param dev 201 * ethdev handle of port. 202 * 203 * @return 204 * Negative errno value on error, 0 on success. 205 * 206 * @retval 0 207 * Success, statistics has been reset. 208 * @retval -ENOTSUP 209 * Resetting statistics is not supported. 210 * @retval -EINVAL 211 * Resetting statistics is not valid. 212 * @retval -ENOMEM 213 * Not enough memory to get the stats. 214 */ 215 typedef int (*eth_xstats_reset_t)(struct rte_eth_dev *dev); 216 217 typedef int (*eth_xstats_get_names_t)(struct rte_eth_dev *dev, 218 struct rte_eth_xstat_name *xstats_names, unsigned int size); 219 /**< @internal Get names of extended stats of an Ethernet device. */ 220 221 typedef int (*eth_xstats_get_names_by_id_t)(struct rte_eth_dev *dev, 222 struct rte_eth_xstat_name *xstats_names, const uint64_t *ids, 223 unsigned int size); 224 /**< @internal Get names of extended stats of an Ethernet device. */ 225 226 typedef int (*eth_queue_stats_mapping_set_t)(struct rte_eth_dev *dev, 227 uint16_t queue_id, 228 uint8_t stat_idx, 229 uint8_t is_rx); 230 /**< @internal Set a queue statistics mapping for a tx/rx queue of an Ethernet device. */ 231 232 typedef int (*eth_dev_infos_get_t)(struct rte_eth_dev *dev, 233 struct rte_eth_dev_info *dev_info); 234 /**< @internal Get specific information of an Ethernet device. */ 235 236 typedef const uint32_t *(*eth_dev_supported_ptypes_get_t)(struct rte_eth_dev *dev); 237 /**< @internal Get supported ptypes of an Ethernet device. */ 238 239 /** 240 * @internal 241 * Inform Ethernet device about reduced range of packet types to handle. 242 * 243 * @param dev 244 * The Ethernet device identifier. 245 * @param ptype_mask 246 * The ptype family that application is interested in should be bitwise OR of 247 * RTE_PTYPE_*_MASK or 0. 248 * @return 249 * - (0) if Success. 250 */ 251 typedef int (*eth_dev_ptypes_set_t)(struct rte_eth_dev *dev, 252 uint32_t ptype_mask); 253 254 typedef int (*eth_queue_start_t)(struct rte_eth_dev *dev, 255 uint16_t queue_id); 256 /**< @internal Start rx and tx of a queue of an Ethernet device. */ 257 258 typedef int (*eth_queue_stop_t)(struct rte_eth_dev *dev, 259 uint16_t queue_id); 260 /**< @internal Stop rx and tx of a queue of an Ethernet device. */ 261 262 typedef int (*eth_rx_queue_setup_t)(struct rte_eth_dev *dev, 263 uint16_t rx_queue_id, 264 uint16_t nb_rx_desc, 265 unsigned int socket_id, 266 const struct rte_eth_rxconf *rx_conf, 267 struct rte_mempool *mb_pool); 268 /**< @internal Set up a receive queue of an Ethernet device. */ 269 270 typedef int (*eth_tx_queue_setup_t)(struct rte_eth_dev *dev, 271 uint16_t tx_queue_id, 272 uint16_t nb_tx_desc, 273 unsigned int socket_id, 274 const struct rte_eth_txconf *tx_conf); 275 /**< @internal Setup a transmit queue of an Ethernet device. */ 276 277 typedef int (*eth_rx_enable_intr_t)(struct rte_eth_dev *dev, 278 uint16_t rx_queue_id); 279 /**< @internal Enable interrupt of a receive queue of an Ethernet device. */ 280 281 typedef int (*eth_rx_disable_intr_t)(struct rte_eth_dev *dev, 282 uint16_t rx_queue_id); 283 /**< @internal Disable interrupt of a receive queue of an Ethernet device. */ 284 285 typedef void (*eth_queue_release_t)(void *queue); 286 /**< @internal Release memory resources allocated by given RX/TX queue. */ 287 288 typedef int (*eth_fw_version_get_t)(struct rte_eth_dev *dev, 289 char *fw_version, size_t fw_size); 290 /**< @internal Get firmware information of an Ethernet device. */ 291 292 typedef int (*eth_tx_done_cleanup_t)(void *txq, uint32_t free_cnt); 293 /**< @internal Force mbufs to be from TX ring. */ 294 295 typedef void (*eth_rxq_info_get_t)(struct rte_eth_dev *dev, 296 uint16_t rx_queue_id, struct rte_eth_rxq_info *qinfo); 297 298 typedef void (*eth_txq_info_get_t)(struct rte_eth_dev *dev, 299 uint16_t tx_queue_id, struct rte_eth_txq_info *qinfo); 300 301 typedef int (*eth_burst_mode_get_t)(struct rte_eth_dev *dev, 302 uint16_t queue_id, struct rte_eth_burst_mode *mode); 303 304 typedef int (*mtu_set_t)(struct rte_eth_dev *dev, uint16_t mtu); 305 /**< @internal Set MTU. */ 306 307 typedef int (*vlan_filter_set_t)(struct rte_eth_dev *dev, 308 uint16_t vlan_id, 309 int on); 310 /**< @internal filtering of a VLAN Tag Identifier by an Ethernet device. */ 311 312 typedef int (*vlan_tpid_set_t)(struct rte_eth_dev *dev, 313 enum rte_vlan_type type, uint16_t tpid); 314 /**< @internal set the outer/inner VLAN-TPID by an Ethernet device. */ 315 316 typedef int (*vlan_offload_set_t)(struct rte_eth_dev *dev, int mask); 317 /**< @internal set VLAN offload function by an Ethernet device. */ 318 319 typedef int (*vlan_pvid_set_t)(struct rte_eth_dev *dev, 320 uint16_t vlan_id, 321 int on); 322 /**< @internal set port based TX VLAN insertion by an Ethernet device. */ 323 324 typedef void (*vlan_strip_queue_set_t)(struct rte_eth_dev *dev, 325 uint16_t rx_queue_id, 326 int on); 327 /**< @internal VLAN stripping enable/disable by an queue of Ethernet device. */ 328 329 typedef int (*flow_ctrl_get_t)(struct rte_eth_dev *dev, 330 struct rte_eth_fc_conf *fc_conf); 331 /**< @internal Get current flow control parameter on an Ethernet device */ 332 333 typedef int (*flow_ctrl_set_t)(struct rte_eth_dev *dev, 334 struct rte_eth_fc_conf *fc_conf); 335 /**< @internal Setup flow control parameter on an Ethernet device */ 336 337 typedef int (*priority_flow_ctrl_set_t)(struct rte_eth_dev *dev, 338 struct rte_eth_pfc_conf *pfc_conf); 339 /**< @internal Setup priority flow control parameter on an Ethernet device */ 340 341 typedef int (*reta_update_t)(struct rte_eth_dev *dev, 342 struct rte_eth_rss_reta_entry64 *reta_conf, 343 uint16_t reta_size); 344 /**< @internal Update RSS redirection table on an Ethernet device */ 345 346 typedef int (*reta_query_t)(struct rte_eth_dev *dev, 347 struct rte_eth_rss_reta_entry64 *reta_conf, 348 uint16_t reta_size); 349 /**< @internal Query RSS redirection table on an Ethernet device */ 350 351 typedef int (*rss_hash_update_t)(struct rte_eth_dev *dev, 352 struct rte_eth_rss_conf *rss_conf); 353 /**< @internal Update RSS hash configuration of an Ethernet device */ 354 355 typedef int (*rss_hash_conf_get_t)(struct rte_eth_dev *dev, 356 struct rte_eth_rss_conf *rss_conf); 357 /**< @internal Get current RSS hash configuration of an Ethernet device */ 358 359 typedef int (*eth_dev_led_on_t)(struct rte_eth_dev *dev); 360 /**< @internal Turn on SW controllable LED on an Ethernet device */ 361 362 typedef int (*eth_dev_led_off_t)(struct rte_eth_dev *dev); 363 /**< @internal Turn off SW controllable LED on an Ethernet device */ 364 365 typedef void (*eth_mac_addr_remove_t)(struct rte_eth_dev *dev, uint32_t index); 366 /**< @internal Remove MAC address from receive address register */ 367 368 typedef int (*eth_mac_addr_add_t)(struct rte_eth_dev *dev, 369 struct rte_ether_addr *mac_addr, 370 uint32_t index, 371 uint32_t vmdq); 372 /**< @internal Set a MAC address into Receive Address Register */ 373 374 typedef int (*eth_mac_addr_set_t)(struct rte_eth_dev *dev, 375 struct rte_ether_addr *mac_addr); 376 /**< @internal Set a MAC address into Receive Address Register */ 377 378 typedef int (*eth_uc_hash_table_set_t)(struct rte_eth_dev *dev, 379 struct rte_ether_addr *mac_addr, 380 uint8_t on); 381 /**< @internal Set a Unicast Hash bitmap */ 382 383 typedef int (*eth_uc_all_hash_table_set_t)(struct rte_eth_dev *dev, 384 uint8_t on); 385 /**< @internal Set all Unicast Hash bitmap */ 386 387 typedef int (*eth_set_queue_rate_limit_t)(struct rte_eth_dev *dev, 388 uint16_t queue_idx, 389 uint16_t tx_rate); 390 /**< @internal Set queue TX rate */ 391 392 typedef int (*eth_mirror_rule_set_t)(struct rte_eth_dev *dev, 393 struct rte_eth_mirror_conf *mirror_conf, 394 uint8_t rule_id, 395 uint8_t on); 396 /**< @internal Add a traffic mirroring rule on an Ethernet device */ 397 398 typedef int (*eth_mirror_rule_reset_t)(struct rte_eth_dev *dev, 399 uint8_t rule_id); 400 /**< @internal Remove a traffic mirroring rule on an Ethernet device */ 401 402 typedef int (*eth_udp_tunnel_port_add_t)(struct rte_eth_dev *dev, 403 struct rte_eth_udp_tunnel *tunnel_udp); 404 /**< @internal Add tunneling UDP port */ 405 406 typedef int (*eth_udp_tunnel_port_del_t)(struct rte_eth_dev *dev, 407 struct rte_eth_udp_tunnel *tunnel_udp); 408 /**< @internal Delete tunneling UDP port */ 409 410 typedef int (*eth_set_mc_addr_list_t)(struct rte_eth_dev *dev, 411 struct rte_ether_addr *mc_addr_set, 412 uint32_t nb_mc_addr); 413 /**< @internal set the list of multicast addresses on an Ethernet device */ 414 415 typedef int (*eth_timesync_enable_t)(struct rte_eth_dev *dev); 416 /**< @internal Function used to enable IEEE1588/802.1AS timestamping. */ 417 418 typedef int (*eth_timesync_disable_t)(struct rte_eth_dev *dev); 419 /**< @internal Function used to disable IEEE1588/802.1AS timestamping. */ 420 421 typedef int (*eth_timesync_read_rx_timestamp_t)(struct rte_eth_dev *dev, 422 struct timespec *timestamp, 423 uint32_t flags); 424 /**< @internal Function used to read an RX IEEE1588/802.1AS timestamp. */ 425 426 typedef int (*eth_timesync_read_tx_timestamp_t)(struct rte_eth_dev *dev, 427 struct timespec *timestamp); 428 /**< @internal Function used to read a TX IEEE1588/802.1AS timestamp. */ 429 430 typedef int (*eth_timesync_adjust_time)(struct rte_eth_dev *dev, int64_t); 431 /**< @internal Function used to adjust the device clock */ 432 433 typedef int (*eth_timesync_read_time)(struct rte_eth_dev *dev, 434 struct timespec *timestamp); 435 /**< @internal Function used to get time from the device clock. */ 436 437 typedef int (*eth_timesync_write_time)(struct rte_eth_dev *dev, 438 const struct timespec *timestamp); 439 /**< @internal Function used to get time from the device clock */ 440 441 typedef int (*eth_read_clock)(struct rte_eth_dev *dev, 442 uint64_t *timestamp); 443 /**< @internal Function used to get the current value of the device clock. */ 444 445 typedef int (*eth_get_reg_t)(struct rte_eth_dev *dev, 446 struct rte_dev_reg_info *info); 447 /**< @internal Retrieve registers */ 448 449 typedef int (*eth_get_eeprom_length_t)(struct rte_eth_dev *dev); 450 /**< @internal Retrieve eeprom size */ 451 452 typedef int (*eth_get_eeprom_t)(struct rte_eth_dev *dev, 453 struct rte_dev_eeprom_info *info); 454 /**< @internal Retrieve eeprom data */ 455 456 typedef int (*eth_set_eeprom_t)(struct rte_eth_dev *dev, 457 struct rte_dev_eeprom_info *info); 458 /**< @internal Program eeprom data */ 459 460 typedef int (*eth_get_module_info_t)(struct rte_eth_dev *dev, 461 struct rte_eth_dev_module_info *modinfo); 462 /**< @internal Retrieve type and size of plugin module eeprom */ 463 464 typedef int (*eth_get_module_eeprom_t)(struct rte_eth_dev *dev, 465 struct rte_dev_eeprom_info *info); 466 /**< @internal Retrieve plugin module eeprom data */ 467 468 struct rte_flow_ops; 469 /** 470 * @internal 471 * Get flow operations. 472 * 473 * If the flow API is not supported for the specified device, 474 * the driver can return NULL. 475 */ 476 typedef int (*eth_flow_ops_get_t)(struct rte_eth_dev *dev, 477 const struct rte_flow_ops **ops); 478 479 typedef int (*eth_tm_ops_get_t)(struct rte_eth_dev *dev, void *ops); 480 /**< @internal Get Traffic Management (TM) operations on an Ethernet device */ 481 482 typedef int (*eth_mtr_ops_get_t)(struct rte_eth_dev *dev, void *ops); 483 /**< @internal Get Traffic Metering and Policing (MTR) operations */ 484 485 typedef int (*eth_get_dcb_info)(struct rte_eth_dev *dev, 486 struct rte_eth_dcb_info *dcb_info); 487 /**< @internal Get dcb information on an Ethernet device */ 488 489 typedef int (*eth_pool_ops_supported_t)(struct rte_eth_dev *dev, 490 const char *pool); 491 /**< @internal Test if a port supports specific mempool ops */ 492 493 /** 494 * @internal 495 * Get the hairpin capabilities. 496 * 497 * @param dev 498 * ethdev handle of port. 499 * @param cap 500 * returns the hairpin capabilities from the device. 501 * 502 * @return 503 * Negative errno value on error, 0 on success. 504 * 505 * @retval 0 506 * Success, hairpin is supported. 507 * @retval -ENOTSUP 508 * Hairpin is not supported. 509 */ 510 typedef int (*eth_hairpin_cap_get_t)(struct rte_eth_dev *dev, 511 struct rte_eth_hairpin_cap *cap); 512 513 /** 514 * @internal 515 * Setup RX hairpin queue. 516 * 517 * @param dev 518 * ethdev handle of port. 519 * @param rx_queue_id 520 * the selected RX queue index. 521 * @param nb_rx_desc 522 * the requested number of descriptors for this queue. 0 - use PMD default. 523 * @param conf 524 * the RX hairpin configuration structure. 525 * 526 * @return 527 * Negative errno value on error, 0 on success. 528 * 529 * @retval 0 530 * Success, hairpin is supported. 531 * @retval -ENOTSUP 532 * Hairpin is not supported. 533 * @retval -EINVAL 534 * One of the parameters is invalid. 535 * @retval -ENOMEM 536 * Unable to allocate resources. 537 */ 538 typedef int (*eth_rx_hairpin_queue_setup_t) 539 (struct rte_eth_dev *dev, uint16_t rx_queue_id, 540 uint16_t nb_rx_desc, 541 const struct rte_eth_hairpin_conf *conf); 542 543 /** 544 * @internal 545 * Setup TX hairpin queue. 546 * 547 * @param dev 548 * ethdev handle of port. 549 * @param tx_queue_id 550 * the selected TX queue index. 551 * @param nb_tx_desc 552 * the requested number of descriptors for this queue. 0 - use PMD default. 553 * @param conf 554 * the TX hairpin configuration structure. 555 * 556 * @return 557 * Negative errno value on error, 0 on success. 558 * 559 * @retval 0 560 * Success, hairpin is supported. 561 * @retval -ENOTSUP 562 * Hairpin is not supported. 563 * @retval -EINVAL 564 * One of the parameters is invalid. 565 * @retval -ENOMEM 566 * Unable to allocate resources. 567 */ 568 typedef int (*eth_tx_hairpin_queue_setup_t) 569 (struct rte_eth_dev *dev, uint16_t tx_queue_id, 570 uint16_t nb_tx_desc, 571 const struct rte_eth_hairpin_conf *hairpin_conf); 572 573 /** 574 * @internal 575 * Get Forward Error Correction(FEC) capability. 576 * 577 * @param dev 578 * ethdev handle of port. 579 * @param speed_fec_capa 580 * speed_fec_capa is out only with per-speed capabilities. 581 * @param num 582 * a number of elements in an speed_fec_capa array. 583 * 584 * @return 585 * Negative errno value on error, positive value on success. 586 * 587 * @retval positive value 588 * A non-negative value lower or equal to num: success. The return value 589 * is the number of entries filled in the fec capa array. 590 * A non-negative value higher than num: error, the given fec capa array 591 * is too small. The return value corresponds to the num that should 592 * be given to succeed. The entries in the fec capa array are not valid 593 * and shall not be used by the caller. 594 * @retval -ENOTSUP 595 * Operation is not supported. 596 * @retval -EIO 597 * Device is removed. 598 * @retval -EINVAL 599 * *num* or *speed_fec_capa* invalid. 600 */ 601 typedef int (*eth_fec_get_capability_t)(struct rte_eth_dev *dev, 602 struct rte_eth_fec_capa *speed_fec_capa, unsigned int num); 603 604 /** 605 * @internal 606 * Get Forward Error Correction(FEC) mode. 607 * 608 * @param dev 609 * ethdev handle of port. 610 * @param fec_capa 611 * a bitmask of enabled FEC modes. If AUTO bit is set, other 612 * bits specify FEC modes which may be negotiated. If AUTO 613 * bit is clear, specify FEC modes to be used (only one valid 614 * mode per speed may be set). 615 * 616 * @return 617 * Negative errno value on error, 0 on success. 618 * 619 * @retval 0 620 * Success, get FEC success. 621 * @retval -ENOTSUP 622 * Operation is not supported. 623 * @retval -EIO 624 * Device is removed. 625 */ 626 typedef int (*eth_fec_get_t)(struct rte_eth_dev *dev, 627 uint32_t *fec_capa); 628 629 /** 630 * @internal 631 * Set Forward Error Correction(FEC) mode. 632 * 633 * @param dev 634 * ethdev handle of port. 635 * @param fec_capa 636 * bitmask of allowed FEC modes. It must be only one 637 * if AUTO is disabled. If AUTO is enabled, other 638 * bits specify FEC modes which may be negotiated. 639 * 640 * @return 641 * Negative errno value on error, 0 on success. 642 * 643 * @retval 0 644 * Success, set FEC success. 645 * @retval -ENOTSUP 646 * Operation is not supported. 647 * @retval -EINVAL 648 * Unsupported FEC mode requested. 649 * @retval -EIO 650 * Device is removed. 651 */ 652 typedef int (*eth_fec_set_t)(struct rte_eth_dev *dev, uint32_t fec_capa); 653 654 /** 655 * @internal 656 * Get all hairpin Tx/Rx peer ports of the current device, if any. 657 * 658 * @param dev 659 * ethdev handle of port. 660 * @param peer_ports 661 * array to save the ports list. 662 * @param len 663 * array length. 664 * @param direction 665 * value to decide the current to peer direction 666 * positive - used as Tx to get all peer Rx ports. 667 * zero - used as Rx to get all peer Tx ports. 668 * 669 * @return 670 * Negative errno value on error, 0 or positive on success. 671 * 672 * @retval 0 673 * Success, no peer ports. 674 * @retval >0 675 * Actual number of the peer ports. 676 * @retval -ENOTSUP 677 * Get peer ports API is not supported. 678 * @retval -EINVAL 679 * One of the parameters is invalid. 680 */ 681 typedef int (*hairpin_get_peer_ports_t)(struct rte_eth_dev *dev, 682 uint16_t *peer_ports, size_t len, 683 uint32_t direction); 684 685 /** 686 * @internal 687 * Bind all hairpin Tx queues of one port to the Rx queues of the peer port. 688 * 689 * @param dev 690 * ethdev handle of port. 691 * @param rx_port 692 * the peer Rx port. 693 * 694 * @return 695 * Negative errno value on error, 0 on success. 696 * 697 * @retval 0 698 * Success, bind successfully. 699 * @retval -ENOTSUP 700 * Bind API is not supported. 701 * @retval -EINVAL 702 * One of the parameters is invalid. 703 * @retval -EBUSY 704 * Device is not started. 705 */ 706 typedef int (*eth_hairpin_bind_t)(struct rte_eth_dev *dev, 707 uint16_t rx_port); 708 709 /** 710 * @internal 711 * Unbind all hairpin Tx queues of one port from the Rx queues of the peer port. 712 * 713 * @param dev 714 * ethdev handle of port. 715 * @param rx_port 716 * the peer Rx port. 717 * 718 * @return 719 * Negative errno value on error, 0 on success. 720 * 721 * @retval 0 722 * Success, unbind successfully. 723 * @retval -ENOTSUP 724 * Bind API is not supported. 725 * @retval -EINVAL 726 * One of the parameters is invalid. 727 * @retval -EBUSY 728 * Device is already stopped. 729 */ 730 typedef int (*eth_hairpin_unbind_t)(struct rte_eth_dev *dev, 731 uint16_t rx_port); 732 733 typedef int (*eth_hairpin_queue_peer_update_t) 734 (struct rte_eth_dev *dev, uint16_t peer_queue, 735 struct rte_hairpin_peer_info *current_info, 736 struct rte_hairpin_peer_info *peer_info, uint32_t direction); 737 /**< @internal Update and fetch peer queue information. */ 738 739 typedef int (*eth_hairpin_queue_peer_bind_t) 740 (struct rte_eth_dev *dev, uint16_t cur_queue, 741 struct rte_hairpin_peer_info *peer_info, uint32_t direction); 742 /**< @internal Bind peer queue to the current queue with fetched information. */ 743 744 typedef int (*eth_hairpin_queue_peer_unbind_t) 745 (struct rte_eth_dev *dev, uint16_t cur_queue, uint32_t direction); 746 /**< @internal Unbind peer queue from the current queue. */ 747 748 /** 749 * @internal 750 * Get address of memory location whose contents will change whenever there is 751 * new data to be received on an Rx queue. 752 * 753 * @param rxq 754 * Ethdev queue pointer. 755 * @param pmc 756 * The pointer to power-optimized monitoring condition structure. 757 * @return 758 * Negative errno value on error, 0 on success. 759 * 760 * @retval 0 761 * Success 762 * @retval -EINVAL 763 * Invalid parameters 764 */ 765 typedef int (*eth_get_monitor_addr_t)(void *rxq, 766 struct rte_power_monitor_cond *pmc); 767 768 /** 769 * @internal 770 * Get representor info to be able to calculate the unique representor ID. 771 * 772 * Caller should pass NULL as pointer of info to get number of entries, 773 * allocate info buffer according to returned entry number, then call 774 * again with buffer to get real info. 775 * 776 * To calculate the representor ID, caller should iterate each entry, 777 * match controller index, pf index, vf or sf start index and range, 778 * then calculate representor ID from offset to vf/sf start index. 779 * @see rte_eth_representor_id_get. 780 * 781 * @param dev 782 * Ethdev handle of port. 783 * @param [out] info 784 * Pointer to memory to save device representor info. 785 * @return 786 * Negative errno value on error, number of info entries otherwise. 787 */ 788 789 typedef int (*eth_representor_info_get_t)(struct rte_eth_dev *dev, 790 struct rte_eth_representor_info *info); 791 792 /** 793 * @internal A structure containing the functions exported by an Ethernet driver. 794 */ 795 struct eth_dev_ops { 796 eth_dev_configure_t dev_configure; /**< Configure device. */ 797 eth_dev_start_t dev_start; /**< Start device. */ 798 eth_dev_stop_t dev_stop; /**< Stop device. */ 799 eth_dev_set_link_up_t dev_set_link_up; /**< Device link up. */ 800 eth_dev_set_link_down_t dev_set_link_down; /**< Device link down. */ 801 eth_dev_close_t dev_close; /**< Close device. */ 802 eth_dev_reset_t dev_reset; /**< Reset device. */ 803 eth_link_update_t link_update; /**< Get device link state. */ 804 eth_is_removed_t is_removed; 805 /**< Check if the device was physically removed. */ 806 807 eth_promiscuous_enable_t promiscuous_enable; /**< Promiscuous ON. */ 808 eth_promiscuous_disable_t promiscuous_disable;/**< Promiscuous OFF. */ 809 eth_allmulticast_enable_t allmulticast_enable;/**< RX multicast ON. */ 810 eth_allmulticast_disable_t allmulticast_disable;/**< RX multicast OFF. */ 811 eth_mac_addr_remove_t mac_addr_remove; /**< Remove MAC address. */ 812 eth_mac_addr_add_t mac_addr_add; /**< Add a MAC address. */ 813 eth_mac_addr_set_t mac_addr_set; /**< Set a MAC address. */ 814 eth_set_mc_addr_list_t set_mc_addr_list; /**< set list of mcast addrs. */ 815 mtu_set_t mtu_set; /**< Set MTU. */ 816 817 eth_stats_get_t stats_get; /**< Get generic device statistics. */ 818 eth_stats_reset_t stats_reset; /**< Reset generic device statistics. */ 819 eth_xstats_get_t xstats_get; /**< Get extended device statistics. */ 820 eth_xstats_reset_t xstats_reset; /**< Reset extended device statistics. */ 821 eth_xstats_get_names_t xstats_get_names; 822 /**< Get names of extended statistics. */ 823 eth_queue_stats_mapping_set_t queue_stats_mapping_set; 824 /**< Configure per queue stat counter mapping. */ 825 826 eth_dev_infos_get_t dev_infos_get; /**< Get device info. */ 827 eth_rxq_info_get_t rxq_info_get; /**< retrieve RX queue information. */ 828 eth_txq_info_get_t txq_info_get; /**< retrieve TX queue information. */ 829 eth_burst_mode_get_t rx_burst_mode_get; /**< Get RX burst mode */ 830 eth_burst_mode_get_t tx_burst_mode_get; /**< Get TX burst mode */ 831 eth_fw_version_get_t fw_version_get; /**< Get firmware version. */ 832 eth_dev_supported_ptypes_get_t dev_supported_ptypes_get; 833 /**< Get packet types supported and identified by device. */ 834 eth_dev_ptypes_set_t dev_ptypes_set; 835 /**< Inform Ethernet device about reduced range of packet types to handle. */ 836 837 vlan_filter_set_t vlan_filter_set; /**< Filter VLAN Setup. */ 838 vlan_tpid_set_t vlan_tpid_set; /**< Outer/Inner VLAN TPID Setup. */ 839 vlan_strip_queue_set_t vlan_strip_queue_set; /**< VLAN Stripping on queue. */ 840 vlan_offload_set_t vlan_offload_set; /**< Set VLAN Offload. */ 841 vlan_pvid_set_t vlan_pvid_set; /**< Set port based TX VLAN insertion. */ 842 843 eth_queue_start_t rx_queue_start;/**< Start RX for a queue. */ 844 eth_queue_stop_t rx_queue_stop; /**< Stop RX for a queue. */ 845 eth_queue_start_t tx_queue_start;/**< Start TX for a queue. */ 846 eth_queue_stop_t tx_queue_stop; /**< Stop TX for a queue. */ 847 eth_rx_queue_setup_t rx_queue_setup;/**< Set up device RX queue. */ 848 eth_queue_release_t rx_queue_release; /**< Release RX queue. */ 849 850 eth_rx_enable_intr_t rx_queue_intr_enable; /**< Enable Rx queue interrupt. */ 851 eth_rx_disable_intr_t rx_queue_intr_disable; /**< Disable Rx queue interrupt. */ 852 eth_tx_queue_setup_t tx_queue_setup;/**< Set up device TX queue. */ 853 eth_queue_release_t tx_queue_release; /**< Release TX queue. */ 854 eth_tx_done_cleanup_t tx_done_cleanup;/**< Free tx ring mbufs */ 855 856 eth_dev_led_on_t dev_led_on; /**< Turn on LED. */ 857 eth_dev_led_off_t dev_led_off; /**< Turn off LED. */ 858 859 flow_ctrl_get_t flow_ctrl_get; /**< Get flow control. */ 860 flow_ctrl_set_t flow_ctrl_set; /**< Setup flow control. */ 861 priority_flow_ctrl_set_t priority_flow_ctrl_set; /**< Setup priority flow control. */ 862 863 eth_uc_hash_table_set_t uc_hash_table_set; /**< Set Unicast Table Array. */ 864 eth_uc_all_hash_table_set_t uc_all_hash_table_set; /**< Set Unicast hash bitmap. */ 865 866 eth_mirror_rule_set_t mirror_rule_set; /**< Add a traffic mirror rule. */ 867 eth_mirror_rule_reset_t mirror_rule_reset; /**< reset a traffic mirror rule. */ 868 869 eth_udp_tunnel_port_add_t udp_tunnel_port_add; /** Add UDP tunnel port. */ 870 eth_udp_tunnel_port_del_t udp_tunnel_port_del; /** Del UDP tunnel port. */ 871 872 eth_set_queue_rate_limit_t set_queue_rate_limit; /**< Set queue rate limit. */ 873 874 rss_hash_update_t rss_hash_update; /** Configure RSS hash protocols. */ 875 rss_hash_conf_get_t rss_hash_conf_get; /** Get current RSS hash configuration. */ 876 reta_update_t reta_update; /** Update redirection table. */ 877 reta_query_t reta_query; /** Query redirection table. */ 878 879 eth_get_reg_t get_reg; /**< Get registers. */ 880 eth_get_eeprom_length_t get_eeprom_length; /**< Get eeprom length. */ 881 eth_get_eeprom_t get_eeprom; /**< Get eeprom data. */ 882 eth_set_eeprom_t set_eeprom; /**< Set eeprom. */ 883 884 eth_get_module_info_t get_module_info; 885 /** Get plugin module eeprom attribute. */ 886 eth_get_module_eeprom_t get_module_eeprom; 887 /** Get plugin module eeprom data. */ 888 889 eth_flow_ops_get_t flow_ops_get; /**< Get flow operations. */ 890 891 eth_get_dcb_info get_dcb_info; /** Get DCB information. */ 892 893 eth_timesync_enable_t timesync_enable; 894 /** Turn IEEE1588/802.1AS timestamping on. */ 895 eth_timesync_disable_t timesync_disable; 896 /** Turn IEEE1588/802.1AS timestamping off. */ 897 eth_timesync_read_rx_timestamp_t timesync_read_rx_timestamp; 898 /** Read the IEEE1588/802.1AS RX timestamp. */ 899 eth_timesync_read_tx_timestamp_t timesync_read_tx_timestamp; 900 /** Read the IEEE1588/802.1AS TX timestamp. */ 901 eth_timesync_adjust_time timesync_adjust_time; /** Adjust the device clock. */ 902 eth_timesync_read_time timesync_read_time; /** Get the device clock time. */ 903 eth_timesync_write_time timesync_write_time; /** Set the device clock time. */ 904 905 eth_read_clock read_clock; 906 907 eth_xstats_get_by_id_t xstats_get_by_id; 908 /**< Get extended device statistic values by ID. */ 909 eth_xstats_get_names_by_id_t xstats_get_names_by_id; 910 /**< Get name of extended device statistics by ID. */ 911 912 eth_tm_ops_get_t tm_ops_get; 913 /**< Get Traffic Management (TM) operations. */ 914 915 eth_mtr_ops_get_t mtr_ops_get; 916 /**< Get Traffic Metering and Policing (MTR) operations. */ 917 918 eth_pool_ops_supported_t pool_ops_supported; 919 /**< Test if a port supports specific mempool ops */ 920 921 eth_hairpin_cap_get_t hairpin_cap_get; 922 /**< Returns the hairpin capabilities. */ 923 eth_rx_hairpin_queue_setup_t rx_hairpin_queue_setup; 924 /**< Set up device RX hairpin queue. */ 925 eth_tx_hairpin_queue_setup_t tx_hairpin_queue_setup; 926 /**< Set up device TX hairpin queue. */ 927 928 eth_fec_get_capability_t fec_get_capability; 929 /**< Get Forward Error Correction(FEC) capability. */ 930 eth_fec_get_t fec_get; 931 /**< Get Forward Error Correction(FEC) mode. */ 932 eth_fec_set_t fec_set; 933 /**< Set Forward Error Correction(FEC) mode. */ 934 hairpin_get_peer_ports_t hairpin_get_peer_ports; 935 /**< Get hairpin peer ports list. */ 936 eth_hairpin_bind_t hairpin_bind; 937 /**< Bind all hairpin Tx queues of device to the peer port Rx queues. */ 938 eth_hairpin_unbind_t hairpin_unbind; 939 /**< Unbind all hairpin Tx queues from the peer port Rx queues. */ 940 eth_hairpin_queue_peer_update_t hairpin_queue_peer_update; 941 /**< Pass the current queue info and get the peer queue info. */ 942 eth_hairpin_queue_peer_bind_t hairpin_queue_peer_bind; 943 /**< Set up the connection between the pair of hairpin queues. */ 944 eth_hairpin_queue_peer_unbind_t hairpin_queue_peer_unbind; 945 /**< Disconnect the hairpin queues of a pair from each other. */ 946 947 eth_get_monitor_addr_t get_monitor_addr; 948 /**< Get power monitoring condition for Rx queue. */ 949 950 eth_representor_info_get_t representor_info_get; 951 /**< Get representor info. */ 952 }; 953 954 /** 955 * RX/TX queue states 956 */ 957 #define RTE_ETH_QUEUE_STATE_STOPPED 0 958 #define RTE_ETH_QUEUE_STATE_STARTED 1 959 #define RTE_ETH_QUEUE_STATE_HAIRPIN 2 960 961 /** 962 * @internal 963 * Check if the selected Rx queue is hairpin queue. 964 * 965 * @param dev 966 * Pointer to the selected device. 967 * @param queue_id 968 * The selected queue. 969 * 970 * @return 971 * - (1) if the queue is hairpin queue, 0 otherwise. 972 */ 973 __rte_internal 974 int rte_eth_dev_is_rx_hairpin_queue(struct rte_eth_dev *dev, uint16_t queue_id); 975 976 /** 977 * @internal 978 * Check if the selected Tx queue is hairpin queue. 979 * 980 * @param dev 981 * Pointer to the selected device. 982 * @param queue_id 983 * The selected queue. 984 * 985 * @return 986 * - (1) if the queue is hairpin queue, 0 otherwise. 987 */ 988 __rte_internal 989 int rte_eth_dev_is_tx_hairpin_queue(struct rte_eth_dev *dev, uint16_t queue_id); 990 991 /** 992 * @internal 993 * Returns a ethdev slot specified by the unique identifier name. 994 * 995 * @param name 996 * The pointer to the Unique identifier name for each Ethernet device 997 * @return 998 * - The pointer to the ethdev slot, on success. NULL on error 999 */ 1000 __rte_internal 1001 struct rte_eth_dev *rte_eth_dev_allocated(const char *name); 1002 1003 /** 1004 * @internal 1005 * Allocates a new ethdev slot for an ethernet device and returns the pointer 1006 * to that slot for the driver to use. 1007 * 1008 * @param name Unique identifier name for each Ethernet device 1009 * @return 1010 * - Slot in the rte_dev_devices array for a new device; 1011 */ 1012 __rte_internal 1013 struct rte_eth_dev *rte_eth_dev_allocate(const char *name); 1014 1015 /** 1016 * @internal 1017 * Attach to the ethdev already initialized by the primary 1018 * process. 1019 * 1020 * @param name Ethernet device's name. 1021 * @return 1022 * - Success: Slot in the rte_dev_devices array for attached 1023 * device. 1024 * - Error: Null pointer. 1025 */ 1026 __rte_internal 1027 struct rte_eth_dev *rte_eth_dev_attach_secondary(const char *name); 1028 1029 /** 1030 * @internal 1031 * Notify RTE_ETH_EVENT_DESTROY and release the specified ethdev port. 1032 * 1033 * The following PMD-managed data fields will be freed: 1034 * - dev_private 1035 * - mac_addrs 1036 * - hash_mac_addrs 1037 * If one of these fields should not be freed, 1038 * it must be reset to NULL by the PMD, typically in dev_close method. 1039 * 1040 * @param eth_dev 1041 * Device to be detached. 1042 * @return 1043 * - 0 on success, negative on error 1044 */ 1045 __rte_internal 1046 int rte_eth_dev_release_port(struct rte_eth_dev *eth_dev); 1047 1048 /** 1049 * @internal 1050 * Release device queues and clear its configuration to force the user 1051 * application to reconfigure it. It is for internal use only. 1052 * 1053 * @param dev 1054 * Pointer to struct rte_eth_dev. 1055 * 1056 * @return 1057 * void 1058 */ 1059 __rte_internal 1060 void rte_eth_dev_internal_reset(struct rte_eth_dev *dev); 1061 1062 /** 1063 * @internal Executes all the user application registered callbacks for 1064 * the specific device. It is for DPDK internal user only. User 1065 * application should not call it directly. 1066 * 1067 * @param dev 1068 * Pointer to struct rte_eth_dev. 1069 * @param event 1070 * Eth device interrupt event type. 1071 * @param ret_param 1072 * To pass data back to user application. 1073 * This allows the user application to decide if a particular function 1074 * is permitted or not. 1075 * 1076 * @return 1077 * int 1078 */ 1079 __rte_internal 1080 int rte_eth_dev_callback_process(struct rte_eth_dev *dev, 1081 enum rte_eth_event_type event, void *ret_param); 1082 1083 /** 1084 * @internal 1085 * This is the last step of device probing. 1086 * It must be called after a port is allocated and initialized successfully. 1087 * 1088 * The notification RTE_ETH_EVENT_NEW is sent to other entities 1089 * (libraries and applications). 1090 * The state is set as RTE_ETH_DEV_ATTACHED. 1091 * 1092 * @param dev 1093 * New ethdev port. 1094 */ 1095 __rte_internal 1096 void rte_eth_dev_probing_finish(struct rte_eth_dev *dev); 1097 1098 /** 1099 * Create memzone for HW rings. 1100 * malloc can't be used as the physical address is needed. 1101 * If the memzone is already created, then this function returns a ptr 1102 * to the old one. 1103 * 1104 * @param eth_dev 1105 * The *eth_dev* pointer is the address of the *rte_eth_dev* structure 1106 * @param name 1107 * The name of the memory zone 1108 * @param queue_id 1109 * The index of the queue to add to name 1110 * @param size 1111 * The sizeof of the memory area 1112 * @param align 1113 * Alignment for resulting memzone. Must be a power of 2. 1114 * @param socket_id 1115 * The *socket_id* argument is the socket identifier in case of NUMA. 1116 */ 1117 __rte_internal 1118 const struct rte_memzone * 1119 rte_eth_dma_zone_reserve(const struct rte_eth_dev *eth_dev, const char *name, 1120 uint16_t queue_id, size_t size, 1121 unsigned align, int socket_id); 1122 1123 /** 1124 * Free previously allocated memzone for HW rings. 1125 * 1126 * @param eth_dev 1127 * The *eth_dev* pointer is the address of the *rte_eth_dev* structure 1128 * @param name 1129 * The name of the memory zone 1130 * @param queue_id 1131 * The index of the queue to add to name 1132 * @return 1133 * Negative errno value on error, 0 on success. 1134 */ 1135 __rte_internal 1136 int 1137 rte_eth_dma_zone_free(const struct rte_eth_dev *eth_dev, const char *name, 1138 uint16_t queue_id); 1139 1140 /** 1141 * @internal 1142 * Atomically set the link status for the specific device. 1143 * It is for use by DPDK device driver use only. 1144 * User applications should not call it 1145 * 1146 * @param dev 1147 * Pointer to struct rte_eth_dev. 1148 * @param link 1149 * New link status value. 1150 * @return 1151 * Same convention as eth_link_update operation. 1152 * 0 if link up status has changed 1153 * -1 if link up status was unchanged 1154 */ 1155 static inline int 1156 rte_eth_linkstatus_set(struct rte_eth_dev *dev, 1157 const struct rte_eth_link *new_link) 1158 { 1159 uint64_t *dev_link = (uint64_t *)&(dev->data->dev_link); 1160 union { 1161 uint64_t val64; 1162 struct rte_eth_link link; 1163 } orig; 1164 1165 RTE_BUILD_BUG_ON(sizeof(*new_link) != sizeof(uint64_t)); 1166 1167 orig.val64 = __atomic_exchange_n(dev_link, *(const uint64_t *)new_link, 1168 __ATOMIC_SEQ_CST); 1169 1170 return (orig.link.link_status == new_link->link_status) ? -1 : 0; 1171 } 1172 1173 /** 1174 * @internal 1175 * Atomically get the link speed and status. 1176 * 1177 * @param dev 1178 * Pointer to struct rte_eth_dev. 1179 * @param link 1180 * link status value. 1181 */ 1182 static inline void 1183 rte_eth_linkstatus_get(const struct rte_eth_dev *dev, 1184 struct rte_eth_link *link) 1185 { 1186 uint64_t *src = (uint64_t *)&(dev->data->dev_link); 1187 uint64_t *dst = (uint64_t *)link; 1188 1189 RTE_BUILD_BUG_ON(sizeof(*link) != sizeof(uint64_t)); 1190 1191 *dst = __atomic_load_n(src, __ATOMIC_SEQ_CST); 1192 } 1193 1194 /** 1195 * Allocate an unique switch domain identifier. 1196 * 1197 * A pool of switch domain identifiers which can be allocated on request. This 1198 * will enabled devices which support the concept of switch domains to request 1199 * a switch domain id which is guaranteed to be unique from other devices 1200 * running in the same process. 1201 * 1202 * @param domain_id 1203 * switch domain identifier parameter to pass back to application 1204 * 1205 * @return 1206 * Negative errno value on error, 0 on success. 1207 */ 1208 __rte_internal 1209 int 1210 rte_eth_switch_domain_alloc(uint16_t *domain_id); 1211 1212 /** 1213 * Free switch domain. 1214 * 1215 * Return a switch domain identifier to the pool of free identifiers after it is 1216 * no longer in use by device. 1217 * 1218 * @param domain_id 1219 * switch domain identifier to free 1220 * 1221 * @return 1222 * Negative errno value on error, 0 on success. 1223 */ 1224 __rte_internal 1225 int 1226 rte_eth_switch_domain_free(uint16_t domain_id); 1227 1228 /** 1229 * Generic Ethernet device arguments 1230 * 1231 * One type of representor each structure. 1232 */ 1233 struct rte_eth_devargs { 1234 uint16_t mh_controllers[RTE_MAX_MULTI_HOST_CTRLS]; 1235 /** controller/s number in case of multi-host */ 1236 uint16_t nb_mh_controllers; 1237 /** number of controllers in multi-host controllers field */ 1238 uint16_t ports[RTE_MAX_ETHPORTS]; 1239 /** port/s number to enable on a multi-port single function */ 1240 uint16_t nb_ports; 1241 /** number of ports in ports field */ 1242 uint16_t representor_ports[RTE_MAX_ETHPORTS]; 1243 /** representor port/s identifier to enable on device */ 1244 uint16_t nb_representor_ports; 1245 /** number of ports in representor port field */ 1246 enum rte_eth_representor_type type; /* type of representor */ 1247 }; 1248 1249 /** 1250 * PMD helper function to get representor ID from location detail. 1251 * 1252 * Get representor ID from controller, pf and (sf or vf). 1253 * The mapping is retrieved from rte_eth_representor_info_get(). 1254 * 1255 * For backward compatibility, if no representor info, direct 1256 * map legacy VF (no controller and pf). 1257 * 1258 * @param ethdev 1259 * Handle of ethdev port. 1260 * @param type 1261 * Representor type. 1262 * @param controller 1263 * Controller ID, -1 if unspecified. 1264 * @param pf 1265 * PF port ID, -1 if unspecified. 1266 * @param representor_port 1267 * VF or SF representor port number, -1 if unspecified. 1268 * @param repr_id 1269 * Pointer to output representor ID. 1270 * 1271 * @return 1272 * Negative errno value on error, 0 on success. 1273 */ 1274 __rte_internal 1275 int 1276 rte_eth_representor_id_get(const struct rte_eth_dev *ethdev, 1277 enum rte_eth_representor_type type, 1278 int controller, int pf, int representor_port, 1279 uint16_t *repr_id); 1280 1281 /** 1282 * PMD helper function to parse ethdev arguments 1283 * 1284 * @param devargs 1285 * device arguments 1286 * @param eth_devargs 1287 * parsed ethdev specific arguments. 1288 * 1289 * @return 1290 * Negative errno value on error, 0 on success. 1291 */ 1292 __rte_internal 1293 int 1294 rte_eth_devargs_parse(const char *devargs, struct rte_eth_devargs *eth_devargs); 1295 1296 1297 typedef int (*ethdev_init_t)(struct rte_eth_dev *ethdev, void *init_params); 1298 typedef int (*ethdev_bus_specific_init)(struct rte_eth_dev *ethdev, 1299 void *bus_specific_init_params); 1300 1301 /** 1302 * PMD helper function for the creation of a new ethdev ports. 1303 * 1304 * @param device 1305 * rte_device handle. 1306 * @param name 1307 * port name. 1308 * @param priv_data_size 1309 * size of private data required for port. 1310 * @param bus_specific_init 1311 * port bus specific initialisation callback function 1312 * @param bus_init_params 1313 * port bus specific initialisation parameters 1314 * @param ethdev_init 1315 * device specific port initialization callback function 1316 * @param init_params 1317 * port initialisation parameters 1318 * 1319 * @return 1320 * Negative errno value on error, 0 on success. 1321 */ 1322 __rte_internal 1323 int 1324 rte_eth_dev_create(struct rte_device *device, const char *name, 1325 size_t priv_data_size, 1326 ethdev_bus_specific_init bus_specific_init, void *bus_init_params, 1327 ethdev_init_t ethdev_init, void *init_params); 1328 1329 1330 typedef int (*ethdev_uninit_t)(struct rte_eth_dev *ethdev); 1331 1332 /** 1333 * PMD helper function for cleaning up the resources of a ethdev port on it's 1334 * destruction. 1335 * 1336 * @param ethdev 1337 * ethdev handle of port. 1338 * @param ethdev_uninit 1339 * device specific port un-initialise callback function 1340 * 1341 * @return 1342 * Negative errno value on error, 0 on success. 1343 */ 1344 __rte_internal 1345 int 1346 rte_eth_dev_destroy(struct rte_eth_dev *ethdev, ethdev_uninit_t ethdev_uninit); 1347 1348 /** 1349 * @internal 1350 * Pass the current hairpin queue HW and/or SW information to the peer queue 1351 * and fetch back the information of the peer queue. 1352 * 1353 * @param peer_port 1354 * Peer port identifier of the Ethernet device. 1355 * @param peer_queue 1356 * Peer queue index of the port. 1357 * @param cur_info 1358 * Pointer to the current information structure. 1359 * @param peer_info 1360 * Pointer to the peer information, output. 1361 * @param direction 1362 * Direction to pass the information. 1363 * positive - pass Tx queue information and get peer Rx queue information 1364 * zero - pass Rx queue information and get peer Tx queue information 1365 * 1366 * @return 1367 * Negative errno value on error, 0 on success. 1368 */ 1369 __rte_internal 1370 int 1371 rte_eth_hairpin_queue_peer_update(uint16_t peer_port, uint16_t peer_queue, 1372 struct rte_hairpin_peer_info *cur_info, 1373 struct rte_hairpin_peer_info *peer_info, 1374 uint32_t direction); 1375 1376 /** 1377 * @internal 1378 * Configure current hairpin queue with the peer information fetched to create 1379 * the connection (bind) with peer queue in the specified direction. 1380 * This function might need to be called twice to fully create the connections. 1381 * 1382 * @param cur_port 1383 * Current port identifier of the Ethernet device. 1384 * @param cur_queue 1385 * Current queue index of the port. 1386 * @param peer_info 1387 * Pointer to the peer information, input. 1388 * @param direction 1389 * Direction to create the connection. 1390 * positive - bind current Tx queue to peer Rx queue 1391 * zero - bind current Rx queue to peer Tx queue 1392 * 1393 * @return 1394 * Negative errno value on error, 0 on success. 1395 */ 1396 __rte_internal 1397 int 1398 rte_eth_hairpin_queue_peer_bind(uint16_t cur_port, uint16_t cur_queue, 1399 struct rte_hairpin_peer_info *peer_info, 1400 uint32_t direction); 1401 1402 /** 1403 * @internal 1404 * Reset the current queue state and configuration to disconnect (unbind) it 1405 * from the peer queue. 1406 * This function might need to be called twice to disconnect each other. 1407 * 1408 * @param cur_port 1409 * Current port identifier of the Ethernet device. 1410 * @param cur_queue 1411 * Current queue index of the port. 1412 * @param direction 1413 * Direction to destroy the connection. 1414 * positive - unbind current Tx queue from peer Rx queue 1415 * zero - unbind current Rx queue from peer Tx queue 1416 * 1417 * @return 1418 * Negative errno value on error, 0 on success. 1419 */ 1420 __rte_internal 1421 int 1422 rte_eth_hairpin_queue_peer_unbind(uint16_t cur_port, uint16_t cur_queue, 1423 uint32_t direction); 1424 1425 1426 /* 1427 * Legacy ethdev API used internally by drivers. 1428 */ 1429 1430 enum rte_filter_type { 1431 RTE_ETH_FILTER_NONE = 0, 1432 RTE_ETH_FILTER_ETHERTYPE, 1433 RTE_ETH_FILTER_FLEXIBLE, 1434 RTE_ETH_FILTER_SYN, 1435 RTE_ETH_FILTER_NTUPLE, 1436 RTE_ETH_FILTER_TUNNEL, 1437 RTE_ETH_FILTER_FDIR, 1438 RTE_ETH_FILTER_HASH, 1439 RTE_ETH_FILTER_L2_TUNNEL, 1440 }; 1441 1442 /** 1443 * Define all structures for Ethertype Filter type. 1444 */ 1445 1446 #define RTE_ETHTYPE_FLAGS_MAC 0x0001 /**< If set, compare mac */ 1447 #define RTE_ETHTYPE_FLAGS_DROP 0x0002 /**< If set, drop packet when match */ 1448 1449 /** 1450 * A structure used to define the ethertype filter entry 1451 * to support RTE_ETH_FILTER_ETHERTYPE data representation. 1452 */ 1453 struct rte_eth_ethertype_filter { 1454 struct rte_ether_addr mac_addr; /**< Mac address to match. */ 1455 uint16_t ether_type; /**< Ether type to match */ 1456 uint16_t flags; /**< Flags from RTE_ETHTYPE_FLAGS_* */ 1457 uint16_t queue; /**< Queue assigned to when match*/ 1458 }; 1459 1460 /** 1461 * A structure used to define the TCP syn filter entry 1462 * to support RTE_ETH_FILTER_SYN data representation. 1463 */ 1464 struct rte_eth_syn_filter { 1465 /** 1 - higher priority than other filters, 0 - lower priority. */ 1466 uint8_t hig_pri; 1467 uint16_t queue; /**< Queue assigned to when match */ 1468 }; 1469 1470 /** 1471 * filter type of tunneling packet 1472 */ 1473 #define ETH_TUNNEL_FILTER_OMAC 0x01 /**< filter by outer MAC addr */ 1474 #define ETH_TUNNEL_FILTER_OIP 0x02 /**< filter by outer IP Addr */ 1475 #define ETH_TUNNEL_FILTER_TENID 0x04 /**< filter by tenant ID */ 1476 #define ETH_TUNNEL_FILTER_IMAC 0x08 /**< filter by inner MAC addr */ 1477 #define ETH_TUNNEL_FILTER_IVLAN 0x10 /**< filter by inner VLAN ID */ 1478 #define ETH_TUNNEL_FILTER_IIP 0x20 /**< filter by inner IP addr */ 1479 1480 #define RTE_TUNNEL_FILTER_IMAC_IVLAN (ETH_TUNNEL_FILTER_IMAC | \ 1481 ETH_TUNNEL_FILTER_IVLAN) 1482 #define RTE_TUNNEL_FILTER_IMAC_IVLAN_TENID (ETH_TUNNEL_FILTER_IMAC | \ 1483 ETH_TUNNEL_FILTER_IVLAN | \ 1484 ETH_TUNNEL_FILTER_TENID) 1485 #define RTE_TUNNEL_FILTER_IMAC_TENID (ETH_TUNNEL_FILTER_IMAC | \ 1486 ETH_TUNNEL_FILTER_TENID) 1487 #define RTE_TUNNEL_FILTER_OMAC_TENID_IMAC (ETH_TUNNEL_FILTER_OMAC | \ 1488 ETH_TUNNEL_FILTER_TENID | \ 1489 ETH_TUNNEL_FILTER_IMAC) 1490 1491 /** 1492 * Select IPv4 or IPv6 for tunnel filters. 1493 */ 1494 enum rte_tunnel_iptype { 1495 RTE_TUNNEL_IPTYPE_IPV4 = 0, /**< IPv4. */ 1496 RTE_TUNNEL_IPTYPE_IPV6, /**< IPv6. */ 1497 }; 1498 1499 /** 1500 * Tunneling Packet filter configuration. 1501 */ 1502 struct rte_eth_tunnel_filter_conf { 1503 struct rte_ether_addr outer_mac; /**< Outer MAC address to match. */ 1504 struct rte_ether_addr inner_mac; /**< Inner MAC address to match. */ 1505 uint16_t inner_vlan; /**< Inner VLAN to match. */ 1506 enum rte_tunnel_iptype ip_type; /**< IP address type. */ 1507 /** 1508 * Outer destination IP address to match if ETH_TUNNEL_FILTER_OIP 1509 * is set in filter_type, or inner destination IP address to match 1510 * if ETH_TUNNEL_FILTER_IIP is set in filter_type. 1511 */ 1512 union { 1513 uint32_t ipv4_addr; /**< IPv4 address in big endian. */ 1514 uint32_t ipv6_addr[4]; /**< IPv6 address in big endian. */ 1515 } ip_addr; 1516 /** Flags from ETH_TUNNEL_FILTER_XX - see above. */ 1517 uint16_t filter_type; 1518 enum rte_eth_tunnel_type tunnel_type; /**< Tunnel Type. */ 1519 uint32_t tenant_id; /**< Tenant ID to match. VNI, GRE key... */ 1520 uint16_t queue_id; /**< Queue assigned to if match. */ 1521 }; 1522 1523 #ifdef __cplusplus 1524 } 1525 #endif 1526 1527 #endif /* _RTE_ETHDEV_DRIVER_H_ */ 1528