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