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 * @internal 956 * Check if the selected Rx queue is hairpin queue. 957 * 958 * @param dev 959 * Pointer to the selected device. 960 * @param queue_id 961 * The selected queue. 962 * 963 * @return 964 * - (1) if the queue is hairpin queue, 0 otherwise. 965 */ 966 __rte_internal 967 int rte_eth_dev_is_rx_hairpin_queue(struct rte_eth_dev *dev, uint16_t queue_id); 968 969 /** 970 * @internal 971 * Check if the selected Tx queue is hairpin queue. 972 * 973 * @param dev 974 * Pointer to the selected device. 975 * @param queue_id 976 * The selected queue. 977 * 978 * @return 979 * - (1) if the queue is hairpin queue, 0 otherwise. 980 */ 981 __rte_internal 982 int rte_eth_dev_is_tx_hairpin_queue(struct rte_eth_dev *dev, uint16_t queue_id); 983 984 /** 985 * @internal 986 * Returns a ethdev slot specified by the unique identifier name. 987 * 988 * @param name 989 * The pointer to the Unique identifier name for each Ethernet device 990 * @return 991 * - The pointer to the ethdev slot, on success. NULL on error 992 */ 993 __rte_internal 994 struct rte_eth_dev *rte_eth_dev_allocated(const char *name); 995 996 /** 997 * @internal 998 * Allocates a new ethdev slot for an ethernet device and returns the pointer 999 * to that slot for the driver to use. 1000 * 1001 * @param name Unique identifier name for each Ethernet device 1002 * @return 1003 * - Slot in the rte_dev_devices array for a new device; 1004 */ 1005 __rte_internal 1006 struct rte_eth_dev *rte_eth_dev_allocate(const char *name); 1007 1008 /** 1009 * @internal 1010 * Attach to the ethdev already initialized by the primary 1011 * process. 1012 * 1013 * @param name Ethernet device's name. 1014 * @return 1015 * - Success: Slot in the rte_dev_devices array for attached 1016 * device. 1017 * - Error: Null pointer. 1018 */ 1019 __rte_internal 1020 struct rte_eth_dev *rte_eth_dev_attach_secondary(const char *name); 1021 1022 /** 1023 * @internal 1024 * Notify RTE_ETH_EVENT_DESTROY and release the specified ethdev port. 1025 * 1026 * The following PMD-managed data fields will be freed: 1027 * - dev_private 1028 * - mac_addrs 1029 * - hash_mac_addrs 1030 * If one of these fields should not be freed, 1031 * it must be reset to NULL by the PMD, typically in dev_close method. 1032 * 1033 * @param eth_dev 1034 * Device to be detached. 1035 * @return 1036 * - 0 on success, negative on error 1037 */ 1038 __rte_internal 1039 int rte_eth_dev_release_port(struct rte_eth_dev *eth_dev); 1040 1041 /** 1042 * @internal 1043 * Release device queues and clear its configuration to force the user 1044 * application to reconfigure it. It is for internal use only. 1045 * 1046 * @param dev 1047 * Pointer to struct rte_eth_dev. 1048 * 1049 * @return 1050 * void 1051 */ 1052 __rte_internal 1053 void rte_eth_dev_internal_reset(struct rte_eth_dev *dev); 1054 1055 /** 1056 * @internal Executes all the user application registered callbacks for 1057 * the specific device. It is for DPDK internal user only. User 1058 * application should not call it directly. 1059 * 1060 * @param dev 1061 * Pointer to struct rte_eth_dev. 1062 * @param event 1063 * Eth device interrupt event type. 1064 * @param ret_param 1065 * To pass data back to user application. 1066 * This allows the user application to decide if a particular function 1067 * is permitted or not. 1068 * 1069 * @return 1070 * int 1071 */ 1072 __rte_internal 1073 int rte_eth_dev_callback_process(struct rte_eth_dev *dev, 1074 enum rte_eth_event_type event, void *ret_param); 1075 1076 /** 1077 * @internal 1078 * This is the last step of device probing. 1079 * It must be called after a port is allocated and initialized successfully. 1080 * 1081 * The notification RTE_ETH_EVENT_NEW is sent to other entities 1082 * (libraries and applications). 1083 * The state is set as RTE_ETH_DEV_ATTACHED. 1084 * 1085 * @param dev 1086 * New ethdev port. 1087 */ 1088 __rte_internal 1089 void rte_eth_dev_probing_finish(struct rte_eth_dev *dev); 1090 1091 /** 1092 * Create memzone for HW rings. 1093 * malloc can't be used as the physical address is needed. 1094 * If the memzone is already created, then this function returns a ptr 1095 * to the old one. 1096 * 1097 * @param eth_dev 1098 * The *eth_dev* pointer is the address of the *rte_eth_dev* structure 1099 * @param name 1100 * The name of the memory zone 1101 * @param queue_id 1102 * The index of the queue to add to name 1103 * @param size 1104 * The sizeof of the memory area 1105 * @param align 1106 * Alignment for resulting memzone. Must be a power of 2. 1107 * @param socket_id 1108 * The *socket_id* argument is the socket identifier in case of NUMA. 1109 */ 1110 __rte_internal 1111 const struct rte_memzone * 1112 rte_eth_dma_zone_reserve(const struct rte_eth_dev *eth_dev, const char *name, 1113 uint16_t queue_id, size_t size, 1114 unsigned align, int socket_id); 1115 1116 /** 1117 * Free previously allocated memzone for HW rings. 1118 * 1119 * @param eth_dev 1120 * The *eth_dev* pointer is the address of the *rte_eth_dev* structure 1121 * @param name 1122 * The name of the memory zone 1123 * @param queue_id 1124 * The index of the queue to add to name 1125 * @return 1126 * Negative errno value on error, 0 on success. 1127 */ 1128 __rte_internal 1129 int 1130 rte_eth_dma_zone_free(const struct rte_eth_dev *eth_dev, const char *name, 1131 uint16_t queue_id); 1132 1133 /** 1134 * @internal 1135 * Atomically set the link status for the specific device. 1136 * It is for use by DPDK device driver use only. 1137 * User applications should not call it 1138 * 1139 * @param dev 1140 * Pointer to struct rte_eth_dev. 1141 * @param link 1142 * New link status value. 1143 * @return 1144 * Same convention as eth_link_update operation. 1145 * 0 if link up status has changed 1146 * -1 if link up status was unchanged 1147 */ 1148 static inline int 1149 rte_eth_linkstatus_set(struct rte_eth_dev *dev, 1150 const struct rte_eth_link *new_link) 1151 { 1152 uint64_t *dev_link = (uint64_t *)&(dev->data->dev_link); 1153 union { 1154 uint64_t val64; 1155 struct rte_eth_link link; 1156 } orig; 1157 1158 RTE_BUILD_BUG_ON(sizeof(*new_link) != sizeof(uint64_t)); 1159 1160 orig.val64 = __atomic_exchange_n(dev_link, *(const uint64_t *)new_link, 1161 __ATOMIC_SEQ_CST); 1162 1163 return (orig.link.link_status == new_link->link_status) ? -1 : 0; 1164 } 1165 1166 /** 1167 * @internal 1168 * Atomically get the link speed and status. 1169 * 1170 * @param dev 1171 * Pointer to struct rte_eth_dev. 1172 * @param link 1173 * link status value. 1174 */ 1175 static inline void 1176 rte_eth_linkstatus_get(const struct rte_eth_dev *dev, 1177 struct rte_eth_link *link) 1178 { 1179 uint64_t *src = (uint64_t *)&(dev->data->dev_link); 1180 uint64_t *dst = (uint64_t *)link; 1181 1182 RTE_BUILD_BUG_ON(sizeof(*link) != sizeof(uint64_t)); 1183 1184 *dst = __atomic_load_n(src, __ATOMIC_SEQ_CST); 1185 } 1186 1187 /** 1188 * Allocate an unique switch domain identifier. 1189 * 1190 * A pool of switch domain identifiers which can be allocated on request. This 1191 * will enabled devices which support the concept of switch domains to request 1192 * a switch domain id which is guaranteed to be unique from other devices 1193 * running in the same process. 1194 * 1195 * @param domain_id 1196 * switch domain identifier parameter to pass back to application 1197 * 1198 * @return 1199 * Negative errno value on error, 0 on success. 1200 */ 1201 __rte_internal 1202 int 1203 rte_eth_switch_domain_alloc(uint16_t *domain_id); 1204 1205 /** 1206 * Free switch domain. 1207 * 1208 * Return a switch domain identifier to the pool of free identifiers after it is 1209 * no longer in use by device. 1210 * 1211 * @param domain_id 1212 * switch domain identifier to free 1213 * 1214 * @return 1215 * Negative errno value on error, 0 on success. 1216 */ 1217 __rte_internal 1218 int 1219 rte_eth_switch_domain_free(uint16_t domain_id); 1220 1221 /** 1222 * Generic Ethernet device arguments 1223 * 1224 * One type of representor each structure. 1225 */ 1226 struct rte_eth_devargs { 1227 uint16_t mh_controllers[RTE_MAX_MULTI_HOST_CTRLS]; 1228 /** controller/s number in case of multi-host */ 1229 uint16_t nb_mh_controllers; 1230 /** number of controllers in multi-host controllers field */ 1231 uint16_t ports[RTE_MAX_ETHPORTS]; 1232 /** port/s number to enable on a multi-port single function */ 1233 uint16_t nb_ports; 1234 /** number of ports in ports field */ 1235 uint16_t representor_ports[RTE_MAX_ETHPORTS]; 1236 /** representor port/s identifier to enable on device */ 1237 uint16_t nb_representor_ports; 1238 /** number of ports in representor port field */ 1239 enum rte_eth_representor_type type; /* type of representor */ 1240 }; 1241 1242 /** 1243 * PMD helper function to get representor ID from location detail. 1244 * 1245 * Get representor ID from controller, pf and (sf or vf). 1246 * The mapping is retrieved from rte_eth_representor_info_get(). 1247 * 1248 * For backward compatibility, if no representor info, direct 1249 * map legacy VF (no controller and pf). 1250 * 1251 * @param ethdev 1252 * Handle of ethdev port. 1253 * @param type 1254 * Representor type. 1255 * @param controller 1256 * Controller ID, -1 if unspecified. 1257 * @param pf 1258 * PF port ID, -1 if unspecified. 1259 * @param representor_port 1260 * VF or SF representor port number, -1 if unspecified. 1261 * @param repr_id 1262 * Pointer to output representor ID. 1263 * 1264 * @return 1265 * Negative errno value on error, 0 on success. 1266 */ 1267 __rte_internal 1268 int 1269 rte_eth_representor_id_get(const struct rte_eth_dev *ethdev, 1270 enum rte_eth_representor_type type, 1271 int controller, int pf, int representor_port, 1272 uint16_t *repr_id); 1273 1274 /** 1275 * PMD helper function to parse ethdev arguments 1276 * 1277 * @param devargs 1278 * device arguments 1279 * @param eth_devargs 1280 * parsed ethdev specific arguments. 1281 * 1282 * @return 1283 * Negative errno value on error, 0 on success. 1284 */ 1285 __rte_internal 1286 int 1287 rte_eth_devargs_parse(const char *devargs, struct rte_eth_devargs *eth_devargs); 1288 1289 1290 typedef int (*ethdev_init_t)(struct rte_eth_dev *ethdev, void *init_params); 1291 typedef int (*ethdev_bus_specific_init)(struct rte_eth_dev *ethdev, 1292 void *bus_specific_init_params); 1293 1294 /** 1295 * PMD helper function for the creation of a new ethdev ports. 1296 * 1297 * @param device 1298 * rte_device handle. 1299 * @param name 1300 * port name. 1301 * @param priv_data_size 1302 * size of private data required for port. 1303 * @param bus_specific_init 1304 * port bus specific initialisation callback function 1305 * @param bus_init_params 1306 * port bus specific initialisation parameters 1307 * @param ethdev_init 1308 * device specific port initialization callback function 1309 * @param init_params 1310 * port initialisation parameters 1311 * 1312 * @return 1313 * Negative errno value on error, 0 on success. 1314 */ 1315 __rte_internal 1316 int 1317 rte_eth_dev_create(struct rte_device *device, const char *name, 1318 size_t priv_data_size, 1319 ethdev_bus_specific_init bus_specific_init, void *bus_init_params, 1320 ethdev_init_t ethdev_init, void *init_params); 1321 1322 1323 typedef int (*ethdev_uninit_t)(struct rte_eth_dev *ethdev); 1324 1325 /** 1326 * PMD helper function for cleaning up the resources of a ethdev port on it's 1327 * destruction. 1328 * 1329 * @param ethdev 1330 * ethdev handle of port. 1331 * @param ethdev_uninit 1332 * device specific port un-initialise callback function 1333 * 1334 * @return 1335 * Negative errno value on error, 0 on success. 1336 */ 1337 __rte_internal 1338 int 1339 rte_eth_dev_destroy(struct rte_eth_dev *ethdev, ethdev_uninit_t ethdev_uninit); 1340 1341 /** 1342 * @internal 1343 * Pass the current hairpin queue HW and/or SW information to the peer queue 1344 * and fetch back the information of the peer queue. 1345 * 1346 * @param peer_port 1347 * Peer port identifier of the Ethernet device. 1348 * @param peer_queue 1349 * Peer queue index of the port. 1350 * @param cur_info 1351 * Pointer to the current information structure. 1352 * @param peer_info 1353 * Pointer to the peer information, output. 1354 * @param direction 1355 * Direction to pass the information. 1356 * positive - pass Tx queue information and get peer Rx queue information 1357 * zero - pass Rx queue information and get peer Tx queue information 1358 * 1359 * @return 1360 * Negative errno value on error, 0 on success. 1361 */ 1362 __rte_internal 1363 int 1364 rte_eth_hairpin_queue_peer_update(uint16_t peer_port, uint16_t peer_queue, 1365 struct rte_hairpin_peer_info *cur_info, 1366 struct rte_hairpin_peer_info *peer_info, 1367 uint32_t direction); 1368 1369 /** 1370 * @internal 1371 * Configure current hairpin queue with the peer information fetched to create 1372 * the connection (bind) with peer queue in the specified direction. 1373 * This function might need to be called twice to fully create the connections. 1374 * 1375 * @param cur_port 1376 * Current port identifier of the Ethernet device. 1377 * @param cur_queue 1378 * Current queue index of the port. 1379 * @param peer_info 1380 * Pointer to the peer information, input. 1381 * @param direction 1382 * Direction to create the connection. 1383 * positive - bind current Tx queue to peer Rx queue 1384 * zero - bind current Rx queue to peer Tx queue 1385 * 1386 * @return 1387 * Negative errno value on error, 0 on success. 1388 */ 1389 __rte_internal 1390 int 1391 rte_eth_hairpin_queue_peer_bind(uint16_t cur_port, uint16_t cur_queue, 1392 struct rte_hairpin_peer_info *peer_info, 1393 uint32_t direction); 1394 1395 /** 1396 * @internal 1397 * Reset the current queue state and configuration to disconnect (unbind) it 1398 * from the peer queue. 1399 * This function might need to be called twice to disconnect each other. 1400 * 1401 * @param cur_port 1402 * Current port identifier of the Ethernet device. 1403 * @param cur_queue 1404 * Current queue index of the port. 1405 * @param direction 1406 * Direction to destroy the connection. 1407 * positive - unbind current Tx queue from peer Rx queue 1408 * zero - unbind current Rx queue from peer Tx queue 1409 * 1410 * @return 1411 * Negative errno value on error, 0 on success. 1412 */ 1413 __rte_internal 1414 int 1415 rte_eth_hairpin_queue_peer_unbind(uint16_t cur_port, uint16_t cur_queue, 1416 uint32_t direction); 1417 1418 1419 /* 1420 * Legacy ethdev API used internally by drivers. 1421 */ 1422 1423 enum rte_filter_type { 1424 RTE_ETH_FILTER_NONE = 0, 1425 RTE_ETH_FILTER_ETHERTYPE, 1426 RTE_ETH_FILTER_FLEXIBLE, 1427 RTE_ETH_FILTER_SYN, 1428 RTE_ETH_FILTER_NTUPLE, 1429 RTE_ETH_FILTER_TUNNEL, 1430 RTE_ETH_FILTER_FDIR, 1431 RTE_ETH_FILTER_HASH, 1432 RTE_ETH_FILTER_L2_TUNNEL, 1433 }; 1434 1435 /** 1436 * Define all structures for Ethertype Filter type. 1437 */ 1438 1439 #define RTE_ETHTYPE_FLAGS_MAC 0x0001 /**< If set, compare mac */ 1440 #define RTE_ETHTYPE_FLAGS_DROP 0x0002 /**< If set, drop packet when match */ 1441 1442 /** 1443 * A structure used to define the ethertype filter entry 1444 * to support RTE_ETH_FILTER_ETHERTYPE data representation. 1445 */ 1446 struct rte_eth_ethertype_filter { 1447 struct rte_ether_addr mac_addr; /**< Mac address to match. */ 1448 uint16_t ether_type; /**< Ether type to match */ 1449 uint16_t flags; /**< Flags from RTE_ETHTYPE_FLAGS_* */ 1450 uint16_t queue; /**< Queue assigned to when match*/ 1451 }; 1452 1453 /** 1454 * A structure used to define the TCP syn filter entry 1455 * to support RTE_ETH_FILTER_SYN data representation. 1456 */ 1457 struct rte_eth_syn_filter { 1458 /** 1 - higher priority than other filters, 0 - lower priority. */ 1459 uint8_t hig_pri; 1460 uint16_t queue; /**< Queue assigned to when match */ 1461 }; 1462 1463 /** 1464 * filter type of tunneling packet 1465 */ 1466 #define ETH_TUNNEL_FILTER_OMAC 0x01 /**< filter by outer MAC addr */ 1467 #define ETH_TUNNEL_FILTER_OIP 0x02 /**< filter by outer IP Addr */ 1468 #define ETH_TUNNEL_FILTER_TENID 0x04 /**< filter by tenant ID */ 1469 #define ETH_TUNNEL_FILTER_IMAC 0x08 /**< filter by inner MAC addr */ 1470 #define ETH_TUNNEL_FILTER_IVLAN 0x10 /**< filter by inner VLAN ID */ 1471 #define ETH_TUNNEL_FILTER_IIP 0x20 /**< filter by inner IP addr */ 1472 1473 #define RTE_TUNNEL_FILTER_IMAC_IVLAN (ETH_TUNNEL_FILTER_IMAC | \ 1474 ETH_TUNNEL_FILTER_IVLAN) 1475 #define RTE_TUNNEL_FILTER_IMAC_IVLAN_TENID (ETH_TUNNEL_FILTER_IMAC | \ 1476 ETH_TUNNEL_FILTER_IVLAN | \ 1477 ETH_TUNNEL_FILTER_TENID) 1478 #define RTE_TUNNEL_FILTER_IMAC_TENID (ETH_TUNNEL_FILTER_IMAC | \ 1479 ETH_TUNNEL_FILTER_TENID) 1480 #define RTE_TUNNEL_FILTER_OMAC_TENID_IMAC (ETH_TUNNEL_FILTER_OMAC | \ 1481 ETH_TUNNEL_FILTER_TENID | \ 1482 ETH_TUNNEL_FILTER_IMAC) 1483 1484 /** 1485 * Select IPv4 or IPv6 for tunnel filters. 1486 */ 1487 enum rte_tunnel_iptype { 1488 RTE_TUNNEL_IPTYPE_IPV4 = 0, /**< IPv4. */ 1489 RTE_TUNNEL_IPTYPE_IPV6, /**< IPv6. */ 1490 }; 1491 1492 /** 1493 * Tunneling Packet filter configuration. 1494 */ 1495 struct rte_eth_tunnel_filter_conf { 1496 struct rte_ether_addr outer_mac; /**< Outer MAC address to match. */ 1497 struct rte_ether_addr inner_mac; /**< Inner MAC address to match. */ 1498 uint16_t inner_vlan; /**< Inner VLAN to match. */ 1499 enum rte_tunnel_iptype ip_type; /**< IP address type. */ 1500 /** 1501 * Outer destination IP address to match if ETH_TUNNEL_FILTER_OIP 1502 * is set in filter_type, or inner destination IP address to match 1503 * if ETH_TUNNEL_FILTER_IIP is set in filter_type. 1504 */ 1505 union { 1506 uint32_t ipv4_addr; /**< IPv4 address in big endian. */ 1507 uint32_t ipv6_addr[4]; /**< IPv6 address in big endian. */ 1508 } ip_addr; 1509 /** Flags from ETH_TUNNEL_FILTER_XX - see above. */ 1510 uint16_t filter_type; 1511 enum rte_eth_tunnel_type tunnel_type; /**< Tunnel Type. */ 1512 uint32_t tenant_id; /**< Tenant ID to match. VNI, GRE key... */ 1513 uint16_t queue_id; /**< Queue assigned to if match. */ 1514 }; 1515 1516 #ifdef __cplusplus 1517 } 1518 #endif 1519 1520 #endif /* _RTE_ETHDEV_DRIVER_H_ */ 1521